یک تابع هش رمزنگاری (CHF) الگوریتمی است که می تواند بر روی داده هایی مانند یک فایل فردی یا رمز عبور اجرا شود تا مقداری به نام checksum تولید کند.
کاربرد اصلی CHF تأیید صحت یک قطعه داده است. تنها در صورتی می توان دو فایل را یکسان فرض کرد که جمع های بررسی تولید شده از هر فایل، با استفاده از تابع هش رمزنگاری یکسان، یکسان باشند.
برخی از توابع هش رمزنگاری رایج شامل MD5 و SHA-1 هستند، اگرچه بسیاری دیگر نیز وجود دارند. اینها اغلب به عنوان "توابع هش" نامیده می شوند، اما این از نظر فنی صحیح نیست. تابع هش یک اصطلاح عمومی است که CHF ها را همراه با انواع دیگر الگوریتم ها مانند بررسی های افزونگی چرخه ای در بر می گیرد.
توابع هش رمزنگاری: مورد استفاده
بگویید که آخرین نسخه مرورگر فایرفاکس را دانلود کرده اید. بنا به دلایلی، باید آن را از سایتی غیر از موزیلا دانلود کنید. از آنجایی که در سایتی میزبانی نمیشود که شما یاد گرفتهاید به آن اعتماد کنید، میخواهید مطمئن شوید که فایل نصبی که دانلود کردهاید دقیقاً همان فایل نصبی است که موزیلا ارائه میکند.
با استفاده از یک ماشین حساب چکسوم، شما با استفاده از یک تابع هش رمزنگاری خاص، مانند SHA-2، یک چکسوم را محاسبه میکنید و سپس آن را با آنچه در سایت موزیلا منتشر شده مقایسه میکنید. اگر آنها برابر هستند، می توانید مطمئن باشید که دانلودی که دارید همان دانلودی است که موزیلا قصد داشته است داشته باشید.
آیا می توان توابع هش رمزنگاری را معکوس کرد؟
توابع هش رمزنگاری برای جلوگیری از توانایی برگرداندن جمعهای چکی که ایجاد میکنند به متون اصلی طراحی شدهاند. با این حال، حتی اگر معکوس کردن آنها تقریباً غیرممکن است، 100 درصد تضمینی برای محافظت از داده ها نیست.
هکرها ممکن است از جدول رنگین کمانی برای کشف متن ساده یک جمعبندی استفاده کنند. جداول رنگین کمان فرهنگ لغت هایی هستند که هزاران، میلیون ها یا حتی میلیاردها چک جمع را در کنار مقدار متن ساده مربوطه فهرست می کنند.
در حالی که این از نظر فنی الگوریتم هش رمزنگاری را معکوس نمی کند، با توجه به اینکه انجام آن بسیار ساده است، ممکن است اینطور باشد. در واقع، از آنجایی که هیچ جدول رنگین کمانی نمی تواند تمام چک های ممکن موجود را فهرست کند، معمولاً فقط برای عبارات ساده مانند رمزهای عبور ضعیف مفید هستند.
در اینجا یک نسخه ساده شده از جدول رنگین کمان برای نشان دادن نحوه کار در هنگام استفاده از تابع هش رمزنگاری SHA-1 آمده است:
مثال جدول رنگین کمان | |
---|---|
متن ساده | SHA-1 Checksum |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
رمز عبور1 | e38ad214943daad1d64c102faec29de4afe9da3d |
Ilovemydog | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
دالاس1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
یک هکر باید بداند که از کدام الگوریتم هش رمزنگاری برای تولید جمعهای چک استفاده شده است تا مقادیر را مشخص کند.
برای محافظت بیشتر، برخی از وبسایتهایی که رمزهای عبور کاربر را ذخیره میکنند، عملکردهای بیشتری را در الگوریتم هش رمزنگاری پس از تولید مقدار اما قبل از ذخیره آن انجام میدهند. این فرآیند مقدار جدیدی را تولید می کند که فقط وب سرور آن را درک می کند و با جمع چک اصلی مطابقت ندارد.
به عنوان مثال، پس از وارد کردن رمز عبور و ایجاد جمع کنترلی، ممکن است آن را به چند قسمت جدا کرده و قبل از ذخیره در پایگاه داده رمز عبور، مرتب سازی مجدد کند، یا ممکن است نویسههای خاصی با کاراکترهای دیگر جایگزین شوند. هنگام تلاش برای احراز هویت دفعه بعدی که کاربر وارد سیستم می شود، سرور این عملکرد اضافی را معکوس می کند و جمع اولیه چک دوباره برای تأیید اعتبار رمز عبور کاربر ایجاد می شود.
انجام این مراحل سودمندی یک هک را که در آن تمام چکسامها به سرقت میرود، محدود میکند. ایده این است که عملکردی را انجام دهیم که ناشناخته است، بنابراین اگر هکر الگوریتم هش رمزنگاری را بشناسد اما الگوریتم سفارشی را نه، پس دانستن جمعهای چک رمز عبور مفید نیست.
رمزهای عبور و توابع هش رمزنگاری
یک پایگاه داده رمزهای عبور کاربر را به روشی مشابه جدول رنگین کمان ذخیره می کند. هنگامی که رمز عبور شما وارد می شود، چک جمع تولید شده و با رمزی که با نام کاربری شما ثبت شده مقایسه می شود. سپس اگر این دو یکسان باشند، به شما اجازه دسترسی داده می شود.
با توجه به اینکه CHF یک جمعبندی غیرقابل برگشت تولید میکند، آیا برای شما بی خطر است که رمز عبور خود را بهجای 1234512345 ایجاد کنید. $5، صرفاً به این دلیل که خود جمعهای چک قابل درک نیستند؟ نه، و دلیلش این است.
رمزگشایی این دو رمز عبور فقط با نگاه کردن به جمعبندیها غیرممکن است:
MD5 برای 12345: 827ccb0eea8a706c4c34a16891f84e7b
MD5 برای 12@34$5: a4d3cc004f487b18b2ccd4853053818b
در نگاه اول، ممکن است فکر کنید که استفاده از هر یک از این پسوردها خوب است. اگر مهاجم سعی کند رمز عبور شما را با حدس زدن چکسوم MD5 کشف کند که هیچکس این کار را نمیکند، اما اگر حمله brute force یا فرهنگ لغت انجام شود که یک تاکتیک رایج است، درست نیست.
حمله brute force زمانی رخ می دهد که چندین ضربه تصادفی در حدس زدن رمز عبور انجام شود. در این مورد، حدس زدن 12345 آسان خواهد بود، اما تشخیص تصادفی دیگری بسیار دشوار است.حمله فرهنگ لغت از این نظر مشابه است که مهاجم می تواند هر کلمه، عدد یا عبارتی را از لیستی از رمزهای عبور رایج (و نه چندان رایج) امتحان کند و 12345 یکی از آن رمزهای رایج است. رمزهای عبور.
حتی اگر توابع هش رمزنگاری، جمعبندیهای کنترلی دشوار تا غیرممکن را حدس بزنند، همچنان باید از یک رمز عبور پیچیده برای همه حسابهای کاربری آنلاین و محلی خود استفاده کنید.
اطلاعات بیشتر در مورد توابع هش رمزنگاری
ممکن است به نظر برسد که توابع هش رمزنگاری با رمزگذاری مرتبط هستند، اما این دو به روش های متفاوتی کار می کنند.
رمزگذاری یک فرآیند دو طرفه است که در آن چیزی رمزگذاری می شود تا غیرقابل خواندن شود و سپس رمزگشایی می شود تا دوباره به طور معمول استفاده شود. ممکن است فایلهایی را که ذخیره کردهاید رمزگذاری کنید تا هرکسی به آنها دسترسی پیدا کند، نتواند از آنها استفاده کند، یا میتوانید از رمزگذاری انتقال فایل برای رمزگذاری فایلهایی که در شبکه در حال حرکت هستند، مانند فایلهایی که بهصورت آنلاین آپلود یا دانلود میکنید، استفاده کنید..
توابع درهمسازی رمزنگاری متفاوت عمل میکنند، به این معنا که جمعهای کنترلی قرار نیست با یک گذرواژه جداسازی خاص معکوس شوند. تنها هدفی که CHF ها از آن استفاده می کنند، مقایسه دو قطعه داده است، مانند هنگام دانلود فایل ها، ذخیره رمزهای عبور، و بیرون کشیدن داده ها از پایگاه داده.
این امکان وجود دارد که یک تابع هش رمزنگاری همان جمع کنترلی را برای قطعات مختلف داده تولید کند. وقتی این اتفاق میافتد، تصادم نامیده میشود، که با در نظر گرفتن تمام هدف تابع ایجاد جمعهای چک منحصر به فرد برای هر داده ورودی به آن، مشکل بزرگی است.
برخورد ممکن است رخ دهد زیرا هر CHF بدون توجه به داده های ورودی مقداری با طول ثابت تولید می کند. به عنوان مثال، تابع هش رمزنگاری MD5 827ccb0eea8a706c4c34a16891f84e7b، 1f633b2909b9c1addf32302c7a497983 و e10adc3949baf059abbe 3 و سه بلوک e10adc3949baf053753949baf05375 را ایجاد می کند.
اولین چک جمع از 12345 است. دومی از بیش از 700 حرف و عدد ایجاد شد و سومی از 123456 است. هر سه ورودی دارای طولهای متفاوتی هستند، اما نتایج همیشه فقط 32 کاراکتر طول دارند، زیرا از MD5 checksum استفاده شده است.
هیچ محدودیتی برای تعداد چکسامهایی که میتوان ایجاد کرد وجود ندارد، زیرا هر تغییر کوچک در ورودی قرار است یک جمعبندی کاملاً متفاوت ایجاد کند.از آنجایی که تعداد چکسومهایی که یک CHF میتواند تولید کند محدودیتی دارد، همیشه این احتمال وجود دارد که با یک برخورد مواجه شوید.
به همین دلیل است که سایر توابع هش رمزنگاری ایجاد شده اند. در حالی که MD5 یک مقدار 32 نویسه تولید می کند، SHA-1 40 کاراکتر و SHA-2 (512) 128 کاراکتر تولید می کند.