আপডেট: দয়া করে নোট করুন আমি লবণ কী তা জিজ্ঞাসা করছি না, রংধনু টেবিল কী, অভিধানের আক্রমণ কী, বা লবণের উদ্দেশ্য কী। আমি জিজ্ঞাসা করছি: আপনি যদি লবণ এবং হ্যাশ ব্যবহারকারীদের জানেন তবে তাদের পাসওয়ার্ড গণনা করা কি খুব সহজ নয়?
আমি প্রক্রিয়াটি বুঝতে পারি এবং এটি আমার কয়েকটি প্রকল্পে নিজেই প্রয়োগ করি।
s = random salt
storedPassword = sha1(password + s)
আপনি যে ডাটাবেসটিতে সঞ্চয় করেন:
username | hashed_password | salt
আমি দেখেছি লবণের প্রতিটি প্রয়োগ পাসওয়ার্ডের শেষে বা শুরুতে লবণ যুক্ত করে:
hashed_Password = sha1(s + password )
hashed_Password = sha1(password + s)
থেরফর, হ্যাকারের একটি অভিধান আক্রমণ যার পক্ষে তার লবণের পরিমাণ (হেক্টর) হ'ল উপরের তালিকাভুক্ত সাধারণ সংমিশ্রণে সঞ্চিত লবণের বিপরীতে প্রতিটি কীওয়ার্ড চালানো যেতে পারে।
অবশ্যই উপরে বর্ণিত বাস্তবায়ন হ্যাকারের জন্য কেবল অন্তর্নিহিত সমস্যাটি সমাধান না করে কেবল আরও একটি পদক্ষেপ যুক্ত করে? এই সমস্যাটি সম্পর্কে পদক্ষেপ নেওয়ার বিকল্পগুলি কী কী আছে, বা আমি সমস্যার ভুল বোঝাবুঝি করছি?
কেবলমাত্র আমি যা করতে পারি তা হ'ল একটি গোপন সংমিশ্রণ অ্যালগরিদম রয়েছে যা ল্যান্ড এবং পাসওয়ার্ডকে একটি এলোমেলো প্যাটার্নে একসাথে রাখে বা হ্যাশিং প্রক্রিয়াতে অন্যান্য ব্যবহারকারীর ক্ষেত্র যুক্ত করে যার অর্থ হ্যাকারকে লেইসের জন্য ডেটাবেস এবং কোডে অ্যাক্সেস থাকতে হবে তাদের একটি অভিধান আক্রমণাত্মক প্রমাণ করার জন্য আক্রমণ। (আপডেট, মন্তব্যগুলিতে নির্দেশিত হিসাবে হ্যাকারের আপনার সমস্ত তথ্য অ্যাক্সেস রয়েছে বলে ধরে নেওয়া ভাল তবে এটি সম্ভবত সেরা নয়) Update
আমি কীভাবে একটি হ্যাকার প্রস্তাব দিচ্ছি যে পাসওয়ার্ড এবং হ্যাশগুলির একটি তালিকা সহ একটি ব্যবহারকারী ডেটাবেস হ্যাক করবে তার একটি উদাহরণ দেই:
আমাদের হ্যাকড ডাটাবেস থেকে ডেটা:
RawPassword (not stored) | Hashed | Salt
--------------------------------------------------------
letmein WEFLS... WEFOJFOFO...
সাধারণ পাসওয়ার্ড অভিধান:
Common Password
--------------
letmein
12345
...
প্রতিটি ব্যবহারকারীর রেকর্ডের জন্য, সাধারণ পাসওয়ার্ডগুলি লুপ করুন এবং তাদের হ্যাশ করুন:
for each user in hacked_DB
salt = users_salt
hashed_pw = users_hashed_password
for each common_password
testhash = sha1(common_password + salt)
if testhash = hashed_pw then
//Match! Users password = common_password
//Lets visit the webpage and login now.
end if
next
next
আমি আশা করি এটি আমার পয়েন্টটি আরও ভালভাবে চিত্রিত করে।
10,000 টি সাধারণ পাসওয়ার্ড এবং 10,000 টি ব্যবহারকারী রেকর্ড দেওয়া, আমাদের যতটা সম্ভব ব্যবহারকারীর পাসওয়ার্ড আবিষ্কার করতে 100,000,000 হ্যাশ গণনা করতে হবে। এটি কয়েক ঘন্টা সময় নিতে পারে, কিন্তু এটি আসলে কোনও সমস্যা নয়।
ক্র্যাকিং থিওরিতে আপডেট
আমরা ধরে নেব যে আমরা একটি দুর্নীতিগ্রস্থ ওয়েব হোস্ট, এতে আপনার মিশ্রণের জন্য আপনার অ্যালগরিদমের পাশাপাশি SHA1 হ্যাশ এবং লবণের ডেটাবেজে অ্যাক্সেস রয়েছে। ডাটাবেসের 10,000 টি ব্যবহারকারীর রেকর্ড রয়েছে।
এই সাইটটি জিপিইউ ব্যবহার করে প্রতি সেকেন্ডে 2,300,000,000 SHA1 হ্যাশ গণনা করতে সক্ষম হবে বলে দাবি করেছে। (বাস্তব বিশ্বের পরিস্থিতি সম্ভবত ধীর হবে, তবে আপাতত আমরা সেই উদ্ধৃত চিত্রটি ব্যবহার করব)।
((95 ^ 4) / 2300000000) / 2) * 10000 = 177 সেকেন্ড
১০০ মুদ্রণযোগ্য এএসসিআইআই অক্ষরের পূর্ণ পরিসর দেওয়া হয়েছে, সর্বোচ্চ ৪ টি অক্ষরের দৈর্ঘ্য সহ গণনার হার (ভেরিয়েবল) দ্বারা বিভক্ত, ১০ দ্বারা বিভক্ত (পাসওয়ার্ড আবিষ্কারের জন্য গড় সময় ধরে নেওয়া হবে গড়ে 10,000% অনুমানের প্রয়োজন হবে) 10,000 দৈর্ঘ্য <= 4 যেখানে রয়েছে তাদের ব্যবহারকারীর পাসওয়ার্ডগুলি ব্যবহার করতে 177 সেকেন্ড সময় লাগবে
আসুন বাস্তবতার জন্য এটি কিছুটা সামঞ্জস্য করি।
((36 36 ^ 7) / 1000000000) / 2) * 10000 = 2 দিন
একটি পাসওয়ার্ডের দৈর্ঘ্য <= 7, কেবলমাত্র আলফানিউমেরিক অক্ষর সহ, নন কেস সংবেদনশীলতা ধরে নিলে 10,000 ব্যবহারকারী রেকর্ডের সমাধান করতে 4 দিন সময় লাগবে এবং আমি ওভারহেড এবং অ-আদর্শ পরিস্থিতিতে প্রতিফলিত করতে অ্যালগরিদমের গতি অর্ধেক করে রেখেছি।
এটি স্বীকৃতি দেওয়া জরুরী যে এটি একটি লিনিয়ার ব্রুট ফোর্স আক্রমণ, সমস্ত গণনা একে অপরের থেকে স্বতন্ত্র, সুতরাং একাধিক সিস্টেমের সমাধান করার পক্ষে এটি সঠিক কাজ। (IE সহজেই 2 টি কম্পিউটার চালানো আক্রমণ চালাতে পারে যা বিভিন্ন প্রান্ত থেকে আক্রমণের সময়কে অর্ধেক করে দেবে)।
এই কাজটি আরও গণনামূলকভাবে ব্যয়বহুল করার জন্য বার বার এক পাসওয়ার্ড বারবার হ্যাশ করার ক্ষেত্রে দেওয়া হয়েছে:
(((36 ^ 7) / 1 000 000 000) / 2) * 1000 সেকেন্ড = 10.8839117 ঘন্টা
এটি এক ব্যবহারকারীর জন্য উদ্ধৃত চিত্র থেকে অর্ধেকেরও কম গতিতে কার্যকরভাবে সর্বোচ্চ 7 টি আলফা-সংখ্যাযুক্ত অক্ষরের প্রতিনিধিত্ব করে ।
পুনরাবৃত্তভাবে 1000 বার হ্যাশ কার্যকরভাবে একটি কম্বল আক্রমণকে অবরুদ্ধ করে, তবে ব্যবহারকারীর ডেটাগুলিতে লক্ষ্যযুক্ত আক্রমণগুলি এখনও ঝুঁকিপূর্ণ।