পাসওয়ার্ড শক্তি সম্পর্কে বিভিন্ন উত্স পড়ার পরে আমি একটি অ্যালগরিদম তৈরি করার চেষ্টা করছি যা কোনও পাসওয়ার্ডের কতটা এনট্রপি রয়েছে তার একটি মোটামুটি অনুমান সরবরাহ করবে।
আমি একটি অ্যালগরিদম তৈরি করার চেষ্টা করছি যা যথাসম্ভব বিস্তৃত। এই মুহুর্তে আমার কাছে কেবলমাত্র সিউডোকোড রয়েছে তবে অ্যালগরিদমটি নিম্নলিখিতটি অন্তর্ভুক্ত করে:
- পাসওয়ার্ড দৈর্ঘ্য
- পুনরাবৃত্তি অক্ষর
- নিদর্শন (যৌক্তিক)
- বিভিন্ন অক্ষরের স্থান (এলসি, ইউসি, সংখ্যা, বিশেষ, প্রসারিত)
- অভিধান আক্রমণ
এটি নিম্নলিখিতটি আবরণ করে না এবং এটি অবশ্যই ভাল কভার করবে (যদিও নিখুঁত নয়):
- অর্ডারিং (পাসওয়ার্ডগুলি কঠোরভাবে এই অ্যালগরিদমের আউটপুট দ্বারা অর্ডার করা যেতে পারে)
- নিদর্শন (স্থানিক)
এই অ্যালগরিদমটি কী দুর্বল হতে পারে সে সম্পর্কে কি কেউ অন্তর্দৃষ্টি দিতে পারে? বিশেষত, কেউ কি এমন পরিস্থিতিতে ভাবতে পারেন যেখানে অ্যালগরিদমে একটি পাসওয়ার্ড খাওয়ানো তার শক্তিটি অতিক্রম করবে ? অবমূল্যায়ন একটি ইস্যু কম হয়।
অ্যালগরিদম:
// 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"
অ্যালগরিদম বুঝতে পেরেছেন (সঠিকভাবে) যে বর্ণমালার আকার বৃদ্ধি করা (এমনকি এক অঙ্কের দ্বারা) দীর্ঘ পাসওয়ার্ডকে বৃহত্তর করে তোলে, both ষ্ঠ এবং 7th ম পাসওয়ার্ডের জন্য এনট্রপি_বিটসের পার্থক্যের দ্বারা দেখানো হয়েছে, যা উভয়ই 36 এ এর সমন্বিত, তবে দ্বিতীয়টির 21 তম এ মূলধন। যাইহোক, তারা এই সত্যের জন্য অ্যাকাউন্ট করে না যে ৩ 36 এ এর পাসওয়ার্ড থাকা ভাল ধারণা নয়, এটি একটি দুর্বল পাসওয়ার্ড ক্র্যাকারের সাথে সহজেই ভেঙে যায় (এবং যে কেউ আপনাকে টাইপ করে এটি দেখতে পাবে) এবং অ্যালগরিদম এটি প্রতিফলিত করে না ।
তবে, এটি এই সত্যটি প্রতিফলিত করে যে বৃহত্তর জটিলতার ঘনত্ব থাকা সত্ত্বেও xkcd1 হল xkcd2 এর তুলনায় একটি দুর্বল পাসওয়ার্ড (এটি কি এমনকি কোনও জিনিস?)।
আমি কীভাবে এই অ্যালগরিদমকে উন্নত করতে পারি?
সংযোজন ঘ
অভিধান আক্রমণ এবং প্যাটার্ন ভিত্তিক আক্রমণগুলি বড় জিনিস বলে মনে হচ্ছে, তাই আমি তাদের সম্বোধন করার জন্য একটি ছুরিকাঘাত করব।
আমি একটি শব্দ তালিকা থেকে শব্দের জন্য পাসওয়ার্ডের মাধ্যমে একটি বিস্তৃত অনুসন্ধান করতে পারি এবং তাদের প্রতিনিধিত্বকারী শব্দের সাথে টোকেনের সাহায্যে শব্দগুলি প্রতিস্থাপন করতে পারি। ওয়ার্ড-টোকেনগুলি অক্ষর হিসাবে বিবেচিত হবে এবং তাদের নিজস্ব ওজন সিস্টেম থাকবে এবং পাসওয়ার্ডে তাদের নিজস্ব ওজন যুক্ত করবে। আমার কয়েকটি নতুন অ্যালগরিদম প্যারামিটার প্রয়োজন (আমি তাদের lw, NW ~ = 2 ^ 11, fw ~ = .5, এবং rfw কল করব) এবং আমি অন্য যে কোনওটির মতো পাসওয়ার্ডে ওজনকে ফ্যাক্টর করব ওজন।
এই শব্দের অনুসন্ধানটি 3 এর সাথে E এর মতো ছোট হাতের অক্ষর এবং বড় অক্ষর এবং সাধারণ চরিত্রের বিকল্প দুটি মিলিয়ে বিশেষভাবে সংশোধন করা যেতে পারে যদি আমি এই জাতীয় শব্দের সাথে অতিরিক্ত ওজন যোগ না করি তবে অ্যালগরিদম তাদের শক্তিটিকে কিছুটা কমিয়ে দেখবে বা দুটি শব্দ প্রতি, যা ঠিক আছে। অন্যথায়, একটি সাধারণ নিয়ম হ'ল, প্রতিটি অ-নিখুঁত চরিত্রের মিলের জন্য শব্দটিকে একটি বোনাস বিট দিন।
আমি তখন সাধারণ প্যাটার্নের চেকগুলি সম্পাদন করতে পারি, যেমন পুনরাবৃত্ত অক্ষরগুলির রানের জন্য অনুসন্ধান এবং ডেরিভেটিভ টেস্টগুলি (প্রতিটি চরিত্রের মধ্যে পার্থক্য নেওয়া), যা 'আআআআ' এবং '12345' এর মতো নিদর্শনগুলি সনাক্ত করতে পারে এবং প্রতিটি সনাক্ত করা প্যাটার্ন একটি প্যাটার্নের সাথে প্রতিস্থাপন করবে টোকেন, প্যাটার্ন এবং দৈর্ঘ্যের অনন্য। প্যাটার্নের উপর ভিত্তি করে আলগোরিদিমিক প্যারামিটারগুলি (বিশেষত, প্রতি প্যাটার্নে এনট্রপি) উত্পন্ন করা যেতে পারে।
এই মুহুর্তে, আমি পাসওয়ার্ডটির দৈর্ঘ্য নেব। প্রতিটি শব্দ টোকেন এবং প্যাটার্ন টোকেন একটি অক্ষর হিসাবে গণনা করা হবে; প্রতিটি টোকেন তারা প্রতীকীভাবে প্রদর্শিত অক্ষর প্রতিস্থাপন করবে।
আমি কিছু ধরণের প্যাটার্ন স্বরলিপি তৈরি করেছি, তবে এতে প্যাটার্নের দৈর্ঘ্য l, প্যাটার্ন অর্ডার ও এবং বেস উপাদান বি অন্তর্ভুক্ত রয়েছে। এই তথ্যটি প্রতিটি প্যাটার্নের জন্য কিছু স্বেচ্ছাচারী ওজন গণনা করতে ব্যবহার করা যেতে পারে। আমি প্রকৃত কোডে আরও ভাল কিছু করব।
পরিবর্তিত উদাহরণ:
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<
, এতে কোনও শব্দ বা নিদর্শন থাকে না।