1⃣🧂 همونطور که در کامنت پست قبل یکی از دوستان اشاره کردن، یکی از راهکارهای یافتن پسورد کاربران بعد از دزدیدهشدن دیتابیس این هست که بیایم پسوردهای مختلف و رایج رو هی هش کنیم و هی خروجی رو با دیتابیس مقایسه کنیم. (بروتفورس) هر وقت یکی شد، پسورد کاربر رو پیدا کردیم. 🍃و
اتفاقا فایلهای بزرگی از هش پسوردهای رایج تو اینترنت آدما گذاشتن که میشه ازشون استفاده کرد برای این کار.🌝
برای جلوگیری از این، ما یه میایم موقع ثبتنام برای هر فرد، یک چیز رندوم (مثلا Lbebhxyfvw) به پسوردش (پسورد مثلا ۱۲۳۴) اضافه میکنیم و بعد هش میکنیم.hash("1234Lbebhxyfvw")
و توی دیتابیس یه ستون جدید اضافه میکنیم:
Username | hash | salt
موقع ورود کاربر، چون سالت رو نداره، سالت رو میفرستیم طرف کاربر. بعد پسورد و سالت رو هش میکنیم و میفرستیم سمت سرور و با هش توی سرور مقایسه میکنیم.
2⃣🐢 ما انواعی از هش داریم. بعضیا خیلی سریعن (برای مقایسههای برابری دو فایل/باینری) اما بعضیا به عمد کندن 🦥
برای جلوگیری از تلاش زیاد برای تست پسوردهای مختلف و چک برابری با هشهای لو رفته (مشابه توضیح مورد 1️⃣)، ما باید هشهای پسوردمون کند باشن، مموری زیاد ببرن (که نشه براشون دستگاههای خاص منظوره ارزون ساخت) و خلاصه هر ویژگی که باعث بشه تست حالات زیاد زمانبر⏱، هزینهبردار💰 و سخت بشه. میخوانیم:
A function that is memory-hard under this definition requires the adversary to use either a lot of working space or a lot of execution time to compute the function. Functions that are memory-hard in this way are not amenable to implementation in special-purpose hardware (ASIC), since the cost to power a unit of memory for a unit of time on an ASIC is the same as the cost on a commodity server. [BALLOON]
خب تبریک 💐. حالا با هشهای cryptographic عادی برای چک برابری و هشهای مخصوص پسورد آشنا شدین. چیزی که خیلی از دولوپر ها نمیدونن و میان SHA (هش چک برابری) رو برای پسورد به کار میبرن 🤦♂🤦♀. بیشتر از فصل Cryptography کتابم بخونین.🫰