मैं पासवर्ड की एन्ट्रॉपी का अनुमान कैसे लगा सकता हूँ?


14

पासवर्ड की ताकत के बारे में विभिन्न संसाधनों को पढ़ने के बाद, मैं एक एल्गोरिथ्म बनाने की कोशिश कर रहा हूं, जो एक पासवर्ड कितना एंट्रॉपी है, इसका मोटा अनुमान प्रदान करेगा।

मैं एक एल्गोरिथ्म बनाने की कोशिश कर रहा हूं जो यथासंभव व्यापक है। इस बिंदु पर मेरे पास केवल pseudocode है, लेकिन एल्गोरिथ्म में निम्नलिखित शामिल हैं:

  • पारण शब्द लम्बाई
  • दोहराए गए पात्र
  • पैटर्न (तार्किक)
  • विभिन्न वर्ण स्थान (LC, UC, न्यूमेरिक, स्पेशल, एक्सटेंडेड)
  • शब्दकोश हमलों

यह निम्नलिखित को कवर नहीं करता है, और इसे कवर किया जाना चाहिए (हालांकि पूरी तरह से नहीं):

  • ऑर्डर करना (इस एल्गोरिदम के आउटपुट द्वारा पासवर्ड सख्ती से ऑर्डर किए जा सकते हैं)
  • पैटर्न (स्थानिक)

किसी को भी इस एल्गोरिथ्म क्या कमजोर हो सकता है पर कुछ अंतर्दृष्टि प्रदान कर सकते हैं? विशेष रूप से, क्या कोई ऐसी स्थितियों के बारे में सोच सकता है जहां एल्गोरिदम को पासवर्ड खिलाते समय इसकी ताकत बढ़ जाएगी ? कम आंकना किसी मुद्दे से कम नहीं है।

एल्गोरिथ्म:

// the password to test
password = ?
length = length(password)

// unique character counts from password (duplicates discarded)
uqlca = number of unique lowercase alphabetic characters in password
uquca = number of uppercase alphabetic characters
uqd   = number of unique digits
uqsp  = number of unique special characters (anything with a key on the keyboard)
uqxc  = number of unique special special characters (alt codes, extended-ascii stuff)

// algorithm parameters, total sizes of alphabet spaces
Nlca = total possible number of lowercase letters (26)
Nuca = total uppercase letters (26)
Nd   = total digits (10)
Nsp  = total special characters (32 or something)
Nxc  = total extended ascii characters that dont fit into other categorys (idk, 50?)

// algorithm parameters, pw strength growth rates as percentages (per character)
flca = entropy growth factor for lowercase letters (.25 is probably a good value)
fuca = EGF for uppercase letters (.4 is probably good)
fd   = EGF for digits (.4 is probably good)
fsp  = EGF for special chars (.5 is probably good)
fxc  = EGF for extended ascii chars (.75 is probably good)

// repetition factors.  few unique letters == low factor, many unique == high
rflca = (1 - (1 - flca) ^ uqlca)
rfuca = (1 - (1 - fuca) ^ uquca)
rfd   = (1 - (1 - fd  ) ^ uqd  )
rfsp  = (1 - (1 - fsp ) ^ uqsp )
rfxc  = (1 - (1 - fxc ) ^ uqxc )

// digit strengths
strength =
( rflca * Nlca + 
  rfuca * Nuca +
  rfd   * Nd   +
  rfsp  * Nsp  +
  rfxc  * Nxc    ) ^ length

entropybits = log_base_2(strength)

कुछ इनपुट और उनके वांछित और वास्तविक एंट्रॉपी_बिट आउटपुट:

INPUT           DESIRED        ACTUAL
aaa             very pathetic  8.1
aaaaaaaaa       pathetic       24.7
abcdefghi       weak           31.2
H0ley$Mol3y_    strong         72.2
s^fU¬5ü;y34G<   wtf            88.9
[a^36]*         pathetic       97.2
[a^20]A[a^15]*  strong         146.8
xkcd1**         medium         79.3
xkcd2**         wtf            160.5

* these 2 passwords use shortened notation, where [a^N] expands to N a's.
** xkcd1 = "Tr0ub4dor&3", xkcd2 = "correct horse battery staple"

एल्गोरिथ्म का एहसास (सही ढंग से) होता है जो वर्णमाला के आकार (एक अंक से भी) को बढ़ाकर काफी हद तक लंबे पासवर्ड को मजबूत करता है, जैसा कि 6 वें और 7 वें पासवर्ड के लिए एन्ट्रापी_बिट्स के अंतर से दिखाया गया है, जिसमें दोनों में 36 ए शामिल है, लेकिन दूसरे 21 वें स्थान पर है पूंजीकृत। हालांकि, वे इस तथ्य के लिए जिम्मेदार नहीं हैं कि 36 ए का पासवर्ड होना एक अच्छा विचार नहीं है, यह एक कमजोर पासवर्ड क्रैकर के साथ आसानी से टूट गया है (और जो कोई भी आपको देखता है वह इसे देखेगा) और एल्गोरिथ्म प्रतिबिंबित नहीं करता है ।

हालाँकि, यह इस तथ्य को दर्शाता है कि xkcd2 xkcd2 की तुलना में एक कमजोर पासवर्ड है, अधिक जटिलता घनत्व होने के बावजूद (क्या यह भी एक बात है?)।

मैं इस एल्गोरिथ्म को कैसे सुधार सकता हूं?

परिशिष्ट 1

डिक्शनरी अटैक और पैटर्न बेस्ड अटैक बड़ी बात लगती है, इसलिए मैं उन लोगों को संबोधित करूंगा।

मैं एक शब्द सूची से शब्दों के लिए पासवर्ड के माध्यम से एक व्यापक खोज कर सकता था और टोकन को शब्दों से बदल सकता हूं जो वे प्रतिनिधित्व करते हैं। वर्ड-टोकन तब वर्णों के रूप में माने जाएंगे और उनकी खुद की भार प्रणाली होगी, और पासवर्ड के लिए अपना वजन जोड़ेंगे। मुझे कुछ नए एल्गोरिथ्म मापदंडों की आवश्यकता होगी (मैं उन्हें lw, Nw ~ 2 ^ 11, fw ~ = .5, और rfw कहूंगा) और मैं पासवर्ड को वज़न में कारक मानूँगा क्योंकि मैं अन्य में से कोई भी करूँगा। वजन।

इस शब्द खोज को विशेष रूप से लोअरकेस और अपरकेस अक्षरों के साथ-साथ आम चरित्र प्रतिस्थापनों से मेल करने के लिए संशोधित किया जा सकता है, जैसे कि ई के साथ 3.। अगर मैं ऐसे मिलान किए गए शब्दों में अतिरिक्त वजन नहीं जोड़ता था, तो एल्गोरिथ्म थोड़ा सा अपनी ताकत को कम करेगा। या प्रति शब्द दो, जो ठीक है। अन्यथा, एक सामान्य नियम होगा, प्रत्येक गैर-परिपूर्ण चरित्र मैच के लिए, शब्द को बोनस बिट प्रदान करें।

मैं तब सरल पैटर्न जाँच कर सकता था, जैसे कि बार-बार वर्ण और व्युत्पन्न परीक्षणों के रन की खोज (प्रत्येक वर्ण के बीच का अंतर), जो 'आआआ' और '12345' जैसे पैटर्न की पहचान करेगा, और प्रत्येक ज्ञात पैटर्न को एक पैटर्न के साथ बदल देगा। टोकन, पैटर्न और लंबाई के लिए अद्वितीय है। एल्गोरिदमिक पैरामीटर (विशेष रूप से, प्रति पैटर्न एंट्रोपी) पैटर्न के आधार पर मक्खी पर उत्पन्न हो सकते हैं।

इस बिंदु पर, मैं पासवर्ड की लंबाई लूंगा। प्रत्येक शब्द टोकन और पैटर्न टोकन एक चरित्र के रूप में गिना जाएगा; प्रत्येक टोकन उन पात्रों की जगह लेगा, जिनका वे प्रतीकात्मक रूप से प्रतिनिधित्व करते थे।

मैंने पैटर्न नोटेशन के कुछ प्रकार बनाए, लेकिन इसमें पैटर्न लंबाई l, पैटर्न ऑर्डर ओ और बेस एलिमेंट b शामिल हैं। इस जानकारी का उपयोग प्रत्येक पैटर्न के लिए कुछ मनमाने वजन की गणना करने के लिए किया जा सकता है। मैं वास्तविक कोड में कुछ बेहतर करूँगा।

संशोधित उदाहरण:

Password:          1234kitty$$$$$herpderp
Tokenized:         1 2 3 4 k i t t y $ $ $ $ $ h e r p d e r p
Words Filtered:    1 2 3 4 @W5783 $ $ $ $ $ @W9001 @W9002
Patterns Filtered: @P[l=4,o=1,b='1'] @W5783 @P[l=5,o=0,b='$'] @W9001 @W9002

Breakdown:         3 small, unique words and 2 patterns
Entropy:           about 45 bits, as per modified algorithm

Password:          correcthorsebatterystaple
Tokenized:         c o r r e c t h o r s e b a t t e r y s t a p l e
Words Filtered:    @W6783 @W7923 @W1535 @W2285

Breakdown:         4 small, unique words and no patterns
Entropy:           43 bits, as per modified algorithm

पैटर्न से एन्ट्रापी की गणना कैसे की जाती है इसका सटीक शब्दार्थ चर्चा के लिए है। मैं कुछ सोच रहा था:

entropy(b) * l * (o + 1) // o will be either zero or one

संशोधित एल्गोरिथ्म मूल सारणी में प्रत्येक पासवर्ड की खामियों को कम करेगा, इसके अपवाद के साथ s^fU¬5ü;y34G<, जिसमें कोई शब्द या पैटर्न नहीं है।


2
क्या आपने Tech.dropbox.com/?p=165 देखा है ? यह आपको कुछ विचार दे सकता है। Dl.dropbox.com/u/209/zxcvbn/test/index.html पर एक डेमो है और कोड github पर है।


एक विकल्प यह हो सकता है कि उन्हें कम्प्रेशन अल्गोरिथम के माध्यम से चलाया जाए और देखें कि वे कितनी अच्छी तरह से कंप्रेस करते हैं, यहाँ पर केवल एक ही पकड़ है कि अधिकांश कम्प्रेशन अल्गोस बड़ी मात्रा में डेटा के साथ काम करने के लिए डिज़ाइन होते हैं और आपको एक छोटी मात्रा में डेटा की आवश्यकता होती है
jk।

1
@mouviciel: मैं तुम्हें पंच के लिए हराया। पहली पंक्ति पढ़ें: D
W20

@Wug - महान! मैंने लिंक का अनुसरण नहीं किया: कल्पना नहीं कर सकता था कि विभिन्न संसाधन उस तरह के अध्ययन को कवर करते थे!
मौविसील

जवाबों:


9

NIST SP 800-63 के p46 पर परिशिष्ट A क्लाउड शैनन के काम के बारे में बात करता है , जो कई बिट्स का उपयोग करके पासवर्ड एन्ट्रॉपी का अनुमान लगाता है। दरअसल, यह वह दस्तावेज है जो XKCD कार्टून एन्ट्रापी बिट्स की गणना के लिए उपयोग करता है। विशेष रूप से:

  • पहले चरित्र की एन्ट्रॉपी को 4 बिट्स लिया जाता है;
  • अगले 7 वर्णों की एन्ट्रॉपी 2 बिट प्रति वर्ण है; यह लगभग शैनन के अनुमान के अनुरूप है कि "जब 8 से अधिक अक्षरों में फैले सांख्यिकीय प्रभावों को माना जाता है कि एंट्रोपी मोटे तौर पर प्रति वर्ण 2.3 बिट्स है;"
  • 20 वें चरित्र के माध्यम से 9 वें के लिए एन्ट्रापी को 1.5 बिट प्रति चरित्र लिया जाता है;
  • पात्रों के लिए 21 और प्रवेशिका से ऊपर प्रति पात्र 1 बिट लिया जाता है;
  • एंट्रोपी के 6 बिट्स का एक "बोनस" एक रचना नियम के लिए सौंपा गया है जिसमें ऊपरी मामले और गैर-अल्फाबेटिक दोनों वर्णों की आवश्यकता होती है। यह इन वर्णों के उपयोग को बाध्य करता है, लेकिन कई मामलों में आप वर्ण केवल पासवर्ड के आरंभ या अंत में घटित होंगे, और यह कुल खोज स्थान को कुछ हद तक कम कर देता है, इसलिए यह लाभ संभवतः मामूली है और लंबाई से लगभग स्वतंत्र है कुंजिका;
  • एक व्यापक शब्दकोश जांच के लिए 6 बिट्स ऑफ एन्ट्रापी का बोनस जोड़ा जाता है। यदि हमलावर शब्दकोश जानता है, तो वह उन पासवर्डों का परीक्षण करने से बच सकता है, और किसी भी घटना में, शब्दकोश के बहुत से अनुमान लगाने में सक्षम होगा, जो, हालांकि, शब्दकोश नियम की अनुपस्थिति में सबसे अधिक संभावना वाले चयनित पासवर्ड होंगे। धारणा यह है कि एक शब्दकोश परीक्षण के लिए अनुमान लगाने वाले एन्ट्रापी लाभों में से अधिकांश अपेक्षाकृत कम पासवर्ड के कारण होते हैं, क्योंकि किसी भी लंबे पासवर्ड को याद किया जा सकता है जो आवश्यक रूप से एक "पास-वाक्यांश" होना चाहिए जो शब्द शब्दों से बना हो, इसलिए बोनस 20 में शून्य हो जाता है। पात्र।

विचार यह है कि एक प्रमाणीकरण प्रणाली कुछ महत्वपूर्ण स्तरों को दहलीज के रूप में ले जाएगी। उदाहरण के लिए, 10 बिट्स कमजोर हो सकते हैं, 20 मध्यम और 30 मजबूत (उदाहरण के रूप में मनमाने ढंग से उठाए गए नंबर, एक सिफारिश नहीं)। दुर्भाग्य से, दस्तावेज़ ऐसे थ्रेसहोल्ड की सिफारिश नहीं करता है, शायद इसलिए कि समय के साथ बल बढ़ाने या पासवर्ड की गणना करने के लिए उपलब्ध कम्प्यूटेशनल शक्ति:

नियमों के कुछ विशिष्ट विशिष्ट सेटों को लागू करने के विकल्प के रूप में, एक प्रमाणीकरण प्रणाली उपयोगकर्ता के पासवर्ड को ग्रेड कर सकती है, जो ऊपर वर्णित नियमों का उपयोग करती है, और कुछ न्यूनतम एंट्रोपी मानक को पूरा करने वाले किसी भी को स्वीकार करती है। उदाहरण के लिए, मान लें कि कम से कम 24-बिट्स एन्ट्रापी के पासवर्ड की आवश्यकता थी। हम "IamtheCapitanofthePina4" के एन्ट्रापी अनुमान की गणना कर सकते हैं कि यह देखते हुए कि स्ट्रिंग में 23 वर्ण हैं और ऊपरी मामले और गैर-अक्षर वर्णों की आवश्यकता वाले रचना नियम को संतुष्ट करेंगे।

यह वही हो सकता है या नहीं जो आप ढूंढ रहे हैं, लेकिन एक बुरा संदर्भ बिंदु नहीं है, अगर कुछ और नहीं।

[संपादित करें: निम्नलिखित जोड़ा गया।]

मैटल वीयर, सुधीर अग्रवाल, माइकल कॉलिन्स और हेनरी स्टर्न द्वारा बड़े पैमाने पर हमला किए गए पासवर्ड के बड़े आकार पर हमला करके पासवर्ड निर्माण नीतियों के लिए पेपर टेस्टिंग मेट्रिक्स ने शैनन मॉडल का प्रदर्शन किया, जो ऊपर वर्णित है, मानव निर्मित पासवर्डों में एन्ट्रॉपी का सटीक मॉडल नहीं है। मैं अधिक सटीक प्रस्तावों के लिए "धारा 5 उत्पन्न करने वाली नई पासवर्ड निर्माण नीतियां" देखने की सलाह दूंगा।


3
पासवर्ड की ताकत पर विकिपीडिया लेख बताता है कि उन नियमों को मानव जनित पासवर्ड के लिए सटीक नहीं पाया गया था।
रायथल

1
सच ( एक दिलचस्प पढ़ने के लिए goo.gl/YxRk )।
अकटन

इस पाठ्यक्रम के लिए एक चेतावनी है। यह सांख्यिकीय रूप से विशिष्ट पासवर्डों के लिए काफी सटीक हो सकता है, जो कुछ नियमों का पालन करते हैं क्योंकि लोग लोग हैं। इन दिशानिर्देशों में इस तथ्य पर ध्यान नहीं दिया जाएगा कि यादृच्छिक रूप से उत्पन्न पासवर्ड मानव जनित लोगों को विशिष्ट लंबाई में आगे बढ़ाएंगे क्योंकि वे (शायद) में कोई पैटर्न और शब्द नहीं होंगे।
वॉग

4

इस पृष्ठ के निचले भाग में KeePass के लिए स्रोत कोड देखें । वर्ग के औजार एक नहीं बल्कि अच्छा एल्गोरिथ्म जो आप जगह में करने के लिए देख रहे हैं के साथ लाइन में हो रहा है। मेरे परिणाम इस प्रकार हैं:QualityEstimation

aaa                              8
aaaaaaaaa                        9
abcdefghi                       18
H0ley$Mol3y_                    73
s^fU¬5ü;y34G<                   99
[a^36]*                         10
[a^20]A[a^15]*                  18
Tr0ub4dor&3                     66
correct horse battery staple    98

क्या यह एन्ट्रापी या कुछ अन्य मीट्रिक की गणना करता है, जैसे कि शायद बोगोफ़ेन? इसके अलावा, आपको [आ ^ 36] का विस्तार करने की याद आ गई है?
WUG

एर, नहीं, मैंने उन स्ट्रिंग्स को शब्दशः कॉपी किया :( मैंने पूरी तरह से सोचा था कि यह विशेष वर्णों का अच्छा उपयोग था, पहली नज़र में रेगेक्स नहीं। मैं इसे फिर से एक शॉट दूंगा और इसे अपडेट करूंगा। दूसरे, यह एंट्रोपी के बिट्स की गणना करता है, हाँ। ।
जेसी सी। स्लाइसर

1
यह नहीं था इतना अजीब अंकन के रूप में किसी रेगुलर एक्सप्रेशन का मैं 25 वर्ण के आधार पर अपना तालिका enfatten से बचने के लिए प्रयोग किया जाता है
WUG

2
मुझे 'enfatten' के लिए उस टिप्पणी को +1 करना पड़ा। इस स्थिति के लिए एक पूरी तरह से स्पष्ट शब्द की तरह लगता है।
जेसी सी। स्लीकर

1
यह वास्तव में "कीपास" के बजाय "कीपास" है। (मैं सिर्फ अपना एक संपादन करूंगा, लेकिन उन्हें 6 से अधिक वर्ण होना चाहिए ...)
इयान डन

1

तुम पूछो

विशेष रूप से, क्या कोई ऐसी स्थितियों के बारे में सोच सकता है जहां एल्गोरिदम को पासवर्ड खिलाते समय इसकी ताकत बढ़ जाएगी?

लेकिन आपके पास प्रश्न में एक उदाहरण है। डिज़ाइन के अनुसार, xkcd2 में ~ 44 बिट्स एन्ट्रॉपी है, लेकिन आपका अनुमान 160.5 बिट्स है।


इसलिए, सामान्य करते हुए, शब्दों पर विचार करते समय एल्गोरिथ्म टूट जाता है, या वर्णों के संयोजन जो कि दूसरों की तुलना में काफी अधिक उपयोग किए जाने की संभावना है। मैं यह भी बताता हूं कि विहित xkcd उदाहरण में रिक्त स्थान और मेरी गणना शामिल नहीं है।
Wug

@Wug, यह एक सामान्य सामान्यीकरण है। यह कुछ ऐसा है जो zxcvbn द्वारा निपटा जाता है, जिसका उल्लेख इस प्रश्न पर पहली टिप्पणी में किया गया है।
पीटर टेलर

1

किसी को भी इस एल्गोरिथ्म के लिए कमजोर हो सकता है पर कुछ अंतर्दृष्टि प्रदान कर सकते हैं? विशेष रूप से, क्या कोई ऐसी स्थितियों के बारे में सोच सकता है जहां एल्गोरिदम को पासवर्ड खिलाते समय इसकी ताकत बढ़ जाएगी?

आपने प्रस्तावना (शब्दकोश हमलों आदि) में कुछ पर संकेत दिया है। अनिवार्य रूप से, कई सामान्य प्रथाएं हैं जिनका अनुमान हमलावर द्वारा लगाया जा सकता है जो खोज स्थान को बहुत कम करता है। मुझे पूरा यकीन है कि आपका एल्गोरिथ्म निम्नलिखित को "पछाड़ देगा":

  • हर जगह
  • हर जगह
  • Everywhere1

पासवर्ड काफी लंबा है, लेकिन मूल शब्द एक मूल शब्दकोश में प्रकट होने के बाद से तुच्छ रूप से दरार है, और संशोधनों को किसी भी सभ्य शब्दकोश हमले का हिस्सा बनाने के लिए पर्याप्त माना जाता है। विशिष्ट अक्षर -> संख्या रूपांतरण (अर्थात 3v3rywh3r3) को भी काफी कमजोर माना जाना चाहिए, और आपको इन पर दंड देना चाहिए।

बहुत कम डिग्री तक, अन्य परेशानी वाले पासवर्ड ऐसे हो सकते हैं जिनमें स्पष्ट पैटर्न हों, जैसे:

  • abcdefghijklmnop
  • abcde12345

हालाँकि ये संभवत: वास्तविक शब्दकोश हमलों में लक्षित होने की संभावना कम हैं, लेकिन वे आपके "आआआआ ..." उदाहरण के समान समस्याओं से ग्रस्त हैं।

मुझे यकीन नहीं है कि वर्तमान में अधिकांश शब्दकोश हमलों में पासवर्ड वाक्यांशों को लक्षित किया जाता है, लेकिन कोई संदेह नहीं है क्योंकि वे लोकप्रियता हासिल करते हैं, उन्हें अधिक से अधिक लक्षित किया जाएगा। मुझे लगता है कि प्रसिद्ध xkcd उदाहरण इसे ध्यान में रखते हैं, क्योंकि प्रत्येक "सामान्य शब्द" के लिए केवल 11 बिट्स असाइन किए गए हैं। आपका एल्गोरिथ्म इन प्रकार के पासवर्ड को कम करके आंकता है।

तो, संक्षेप में, एल्गोरिथम अनुमान का एक अच्छा काम करता है, लेकिन यह वास्तव में पासवर्ड और सामान्य, ज्ञात पैटर्न की संरचना को ध्यान में रखना चाहिए।


व्युत्पन्न जाँच का एक स्तर उन सभी पैटर्नों की पहचान करेगा।
WUG
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.