تابع درهم‌ساز رمزنگارانه

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به ناوبری پرش به جستجو

"تابع درهم ساز رمزنگارانه" (CHF)، تابع درهم سازی است که مناسب رمزنویسی است. در واقع یک الگوریتم ریاضی است که داده هایی با اندازه اختیاری یا متغیر (که اغلب "پیام" اطلاق می شوند) را در یک رشته بیتی با اندازه ثابت (مقدار درهم، هش یا "چکیده پیام" ترسیم و طراحی می کند و یک تابع یک سویه است و یک ویژگی آن اینست که قابل وارونه کردن نیست. تنها روش ایده‌آل برای پیدا کردن پیامی که یک هش یا تابع درهم مشخص تولید می کند، جستجوی روش برنامه ریزی پرقدرت ورودی های احتمالی است و باید مشخص شود آیا آنها یک تابع جور شده و تطبیق یافته تولید می کنند یا از جدول رنگین کمان با درهم ساز های تطبیق یافته استفاده می کنند. توابع درهم ساز رمزنگارانه، ابزار پایه برای رمزنویسی پیشرفته به حساب می آیند (2).

Cryptographic Hash Function.svg

تابع ایده‌آل درهم ساز رمزنگارانه، دارای ویژگی اصلی زیر است:

- قطعی است، به این معنی که همیشه یک پیام مشابه در یک تابع بخصوص بدست می آید.

- محاسبه مقدار هش (درهم) برای هر پیام معین، سریع صورت می گیرد.

- تولید پیامی که مقدار درهم مشخصی را محاسبه کند، عملاً غیرممکن است.

- پیدا کردن دو پیام متقاوت با یک مقدار هش (درهم) مشخص غیرممکن است.

- تغییر کوچک در یک پیام باید مقدار هش را تغییر دهد تا حدی که مقدار درهم جدید با مقدار درهم قبلی غیرهمبسته باشند (اثر بهمنی) (3).

عملکرد یک تابع درهم ساز رمزنگارانه (بویژه SGA-1). تغییر کوچک در ورودی (در عبارت over) باعث تغییر چشم گیری در خروجی (چکیده) می شود. این اثر بهمنی نامیده می شود.

توابع درهم ساز رمزنگارانه، کاربردهای متعددی در زمینه امنیت اطلاعات خصوصاً در امضاهای دیجیتالی، کدهای تایید پیام (MAC) و دیگر فرم های تاییدی دارند. هم چنین میتوان از آنها به عنوان توابع درهم ساز عادی برای شاخص گذاری داده ها در جداول هش یا درهم، برای انگشت نگاری، برای تشخیص داده های دوتایی یا فایل های هویت واحد و به عنوان جمع کنترلی جهت تشخیص انحراف تصادفی داده استفاده کرد. در حقیقت مقدار هش رمزنگارانه در زمینه امنیت اطلاعات، بعضاً انگشت نگاره (دیجیتالی)، جمع کنترلی یا فقط مقدار درهم نامیده می شند، حتی با وجودیکه همه این اصطلاحات برای توابع عمومی تر با ویژگی ها و اهداف نسبت متفاوت بیان می شوند.

ویژگی‌ها[ویرایش]

اکثر توابع درهم ساز رمزنگارانه، برای بدست آوردن رشته ای با هر طولی به عنوان ورودی و تولید یک مقدار درهم با طول ثابت طراحی می شوند.

تابع درهم ساز رمزنگارانه باید قادر به رویارویی با همه نوع حملات کشف نوشته رمزی باشد. در رمزنویسی نظری، سطح امنیت تابع درهم ساز رمزنگارانه با استفاده از مشخصه های زیر تعریف می شود:

- مقاومت در برابر تصویر اولیه و پردازش نشده

با توجه به مقدتر مشخص هش h، پیدا کردن پیام m مثل h=hash(m) باید مشکل باشد. این مفهوم به تابع یک سویه ارتباط پیدا می کند. توابعی که از این ویژگی برخوردار نباشند، نسبت به حملات تصویر اولیه و پردازش نشده آسیب پذیر هستند.

- مقاومت در برابر تصویر پردازش نشده دوم

با توجه به مقدار ورودی m1، پیدا کردن ورودی متفاوت m2 باید مشکل باشد با تساوی مقابل: hash(m1) = hash(m2). این ویژگی بعضاً "مقاومت تصادم ضعیف نامیده می شود. توابعی که از این ویژگی برخوردار نباشند، نسبت به حملات تصویر پردازش نشده دوم آسیب پذیر هستند.

- مقاومت برخورد

پیدا کردن دو پیام متقاوت m1 و m2 با در نظر گرفتن تساوی hash(m1) = hash(m2) مشکل است. این جفت "برخورد هش رمزنگاری نامیده می شوند". این ویژگی بعضاً "مقاومت قوی در برابر برخورد" اطلاق می شود. حداقل نیاز به مقدار هش دو برابر اولیه دارد تا اینکه به مقاومت تصویر پردازش نشده دست پیدا کند. در غیراینصورت برخوردها میتوانند جزو حمله روز تولد (حمله ای بدون تغییر معنی اولیه مورد حمله شده) طبقه بندی شوند (4).

مقاومت در برابر برخورد، دلالت ضمنی بر مقاومت تصویر اولیه و پردازش نشده دوم دارد، اما نه مقاومت اولیه آن (5). فرضیه ضعیف تر همیشه در رمزنگاری نظری غالب است، اما عملاً، تابع درهمی که تنها مقاومت در برابر تصویر پردازش نشده دوم است، ناامن تلقی شده و در این صورت برای کاربردهای واقعی توصیه نمی‌شود.

این ویژگی ها غیررسما، به این معنی هستند که "دشمن یا رقیب متخاصم" نمی‌تواند بدون تغییر چکیده داده ورودی، آن جایگزینش شده یا آن را تغییر دهد. بنابراین، اگر دو رشته دارای یک چکیده یکسان باشند، میتوان اطمینان حاصل کرد که آنها باهم برابرند. مقاومت در برابر تصویر خام پردازش نشده دوم، از دستکاری کردن سند توسط حمله کننده با یک هش یکسان جلوگیری می کند. مقاومت در برابر برخورد از ایجاد دو سند متمایز توسط حمله کننده با یک هش مشابه جلوگیری می کند.

تابعی که از این معیارها برخوردار باشد، هنوز هم دارای ویژگی های نامناسبی خواهد بود. در حال حاضر، پرطرفدار ترین توابع درهم ساز رمزنگارانه، نسبت به حملات "کششی-طول" آسیب پذیر هستند: با در نظر گرفتن hash(m) و len(m) اما نه m، با انتخاب m مناسب، حمله کننده میتواند تابع درهم hash(mm′) را محاسبه کند، در اینجا منظور از ∥ الحاق است (6). از این ویژگی میتوان برای ترسیم الگوهای سندیت بخشی ساده بر مبنای توابع درهم استفاده کرد. سازه HAMC روشی است برای غلبه بر این مشکلات.

عملاً مقاومت در برابر برخورد، در خیلی از کاربردهای عملی کافی بنظر نمی‌رسد. علاوه بر مقاومت در برابر برخورد، باید پیدا کردن دو پیام با چکیده یا خلاصه های کاملاً مشابه توسط رقیب، غیرممکن باشد، یا استنباط هر گونه اطلاعات مفید در مورد داده ها. بویژه، تابع درهم باید تا حد ممکن مثل "تابع تصادفی" عمل کند (که در گواه امنیتی، اوراکل تصادفی نامیده می شود) در عین حال از نظر محاسباتی قطعی و موثر باشد. این توابعی مثل تابع SWIFFT را غیرمحتمل می شمارد، و اثبات شده که میتواند مقاومت برخورد داشته باشد بااین فرض که مسائل معین روی شبکه های ایده‌آل، به سختی قابل محاسبه هستند، اما در قالب تابع خطی این ویژگی های اضافی قابل پوشش دادن نیستند (7).

الگوریتم های مجموع مقابله ای یا جمع کنترلی، مثل CRC32 و سایر کنترل های افزونگی دوره ای برای پوشش دادن الزامات ضعیف تر طراحی می شوند و بطور کالی مناسب توابع درهم ساز رمزنگارانه نیستند. برای مثال، CRC برای یکپارچه سازی پیام طبق استاندارد رمزنویسی VEP استفاده شد، امادر یک حمله میتوان راحتی از حالت خطی جمع کنترلی خبر دار شد.

درجه سختی[ویرایش]

در عمل رمزنویسی، بطور کلی غیرمحتمل است که تقریباً اطمینان بدست آورد که رقیب یا دشمن به اطلاعات دسترسی پیدا نخواهد کرد باید تا زمانی که فرض می شود امنیت سیستم از اهمیت حیاتی برخوردار است، از ورود او به سیستم باید جلوگیری کرد. بنابراین ، مفهوم این اصطلاح تاحدی به کاربردش بستگی دارد از آنجاییکه کاری که یک عامل خطرناک یا متخاصم انجام می دهد معمولاً به نسبت سود مورد انتظارش از این کار سنجیده می شود. هرچنأ، از آنجاییکه معمولاً تلاش مضاعف برای دست پیدا کردن به پیامی با طول چکیده مضاعف است، حتی مزیت چندین برابر در قدرت پردازش با اضافه کردن بیت های متعدد به حروف، میتواند خنثی شود.

برای پیام های انتخاب شده از مجموعه پیام های محدود، مثلاً رمز عبور یا دیگر پیام های کوتاه، تبدیل هش با سری قرار دادن پیام ها، عملی می باشد. بخاطر اینکه معمولاً توابع درهمه ساز رمزنگارانه برای محاسبه سریع طراحی می شوند، توابع مشتق کلیدی ویژه که مستلزم وجود منابع محاسباتی بیشتری هستند، پای کار می آیند که موفقیت چنین حملات جستجوی فراگیر را مشکل تر می سازند.

در برخی از تحلیل های نظری، "مشکل یا سخت" به معنی ریاضی خاصی است، مثل "غیرقابل حل در زمان چندجمله ای مجانب". این تفسیر راجع به سختی و مشکل، در مطالعه "توابع درهم ساز رمزنگارانه امنیت قابل اثبات" مهم می باشد اما معمولاً ارتباطی قوی با امنیت عملی ندارد. برای مثال، الگوریتم "زمان نموی" بعضاً بریا حمله احتمالی خیلی سریع می باشد. بالعکس، الگوریتم زمان چندجمله ای (الگوریتمی که مستلزم وجود n20 مرحله برای کلیدهای n-رقمی است) ممکن است برای استفاده عملی خیلی آهسته باشد.

تصویر سازی[ویرایش]

تصویرسازی استفاده بالقوه از درهم ساز رمزنگاری به شرح زیر است: آلیس، یک مسئله ریاضی دشوار را برای باب مطرح کرد و ادعا کرد که او را حل کرده است. باب دوست داشت خودش آن را حل کند، اما مطمئن بود که آلیس بلوف نمی‌زند. بنابراین، آلیس راه حل خودش را نوشت، هش آن را محاسبه کرد و به باب گفت که مقدار هش چقدر است (درحالیکه راه حل آن را به او نگفت). سپس، وقتی که باب راه حل خودش را چند روز بعد به او گفت، آلیس میتوانست ثابت کند که راه حل او اول ارائه شده و باب آن را درهم کرده است و آن را چک کرد تا مقدار هشی که قبلاً بدست آورده بود با مقدار هش محاسبه شده او مطابقت داشته باشد. (این یک نمونه از الگوی سپارش ساده است. در واقعیت، آلیس و باب یک برنامه کامپیوتری هستند و راز چیزی خواهد بود که کمتر از یک راه حل معمای ادعا شده قابل تقلب باشد).

کاربردها[ویرایش]

تایید صحیح بودن یا یکپارچه بودن پیام ها و فایل ها

یک کاربرد مهم هش های امنیتی، تایید صحیح و یکپارچه بودن پیام ها است. مقایسه چکیده های پیام (چکیده های هش در برابر پیام) محاسبه شده قبل و بعد از ارسال می تواند مشخص کند که آیا تغییراتی روی پیام یا فایل صورت گرفته یا نه.

چکیده های هش MD5, SHA1 یا SHA2 بعضاً روی وب سایت ها برای تایید درستی فایل های دانلود شده منتشر می شوند (8)، که شامل فایل های بازیابی شده با استفاده از "به اشتراک گذاری فایل" مثل "معکوس نمودن" می شود. این عمل یک زنجیره اطمینان می سازد تا زمانیکه هش ها روی سایت مطمئنی پست شوند- معمولاً سایتی که با پسوند معتبر HTTPS تایید شود. با استفاده از تابع درهم ساز رمزنگاری و زنجیره اطمینان، تغییرات خطرناک فایل تشخیص داده می شوند. سایر "کدهای تشخیص خطا" مثل "کنترل افزونگی دوره ای" تنها از تغییرات غیرخطرناک فایل جلوگیری به عمل می آورند.

تولید امضاء و تایید آن[ویرایش]

تقریباً همه الگوهای امضاء دیجیتالی نیاز به هش رمزنگاری جهت محاسبه پیام دارند. این کار امکان محسبه امضاء با چکیده هش نسبتاً کوچک و با اندازه ثابت را فراهم می کند. پیام در صورتی معتبر و صحیح عنوان می شود که تایید امضاء تصدیق شود و چکیده هش مجدداً محاسبه شده پیام وجود داشته باشد. بنابراین، ویژگی صحیح بودن پیام هش رمزنگاری، برای تولید الگوهای امضاء دیجیتالی امن و موثر استفاده می شود.

تایید رمز عبور[ویرایش]

تایید "رمز عبور" معمولاً وابسته به هش های رمزنگاری است. ذخیره کردن همه رمزهای عبور به شکل "متن پاک یعنی پیام بدون رمز" میتواند به اخلال امنیتی گسترده ای منجر شود، اگر فایل رمز عبوری افشا شود. یک روش برای کاهش این خطر، تنها ذخیره کردن چکیده هش رمز عبور است. برای برسمیت شناختن کاربر، رمز عبوری ارائه شده توسط کاربر، بصورت درهم درآمده و با هش ذخیره شده مقایسه می شود. روش بازیابی رمز عبور زمانی ضرورت دارد که درهم کردن رمز عبور انجام شود. رمزهای عبوری اصلی را نمیتوان از مقدار هش ذخیره شده مجدداً محاسبه کرد.

توابع درهم ساز رمزنگاری استاندارد، برای محاسبه سریع طراحی می شوند و در نتیجه حدس زدن رمز عبور با سرعت بالا امکان پذیر خواهد بود. "واحدهای پردازش گرافیکی" میتوانند میلیاردها رمز عبوری در هر ثانیه تولید کنند. توابع درهم رمز عبور که کار "امتداد کلید" را انجام می دهند- مثل PUKDF2، دست نوشته متنی یا Argon2- معمولاً از نواوری های متعدد درهم رمزنگاری برای افزایش زمان (در برخی موارد حافظه کامپیوتر) مورد نیاز برای انجام "حملات بروت فورس یا جستجوی فراگیر روی چکیده های درهم رمز عبوری ذخیره شده استفاده می کنند. هش رمز عبور مستلزم وجود یک مقدار salt غیر محرمانه و تصادفی بزرگ می باشد تا بتوان آن را با هش رمز عبور ذخیره کرد. salt خروجی هش رمز عبور را بصورت تصادفی در می آورد، و امکان ذخیره سازی جداول رمز عبور را برای رقیب یا دشمن غیرممکن می سازد هم چنین مقادیر هش از پیش محاسبه شده را که در آن ها چکیده هش رمز عبور را میتوان مقایسه کرد.

خروجی تابع درهم رمز عبور نیز میتواند به عنوان کلید رمزنگاری استفاده شود. توابع هش رمز عبور نیز به عنوان "توابع مشتق کلید " مبتنی بر رمز عبور شناخته می شوند (PBKDF).

اثبات کار[ویرایش]

سیستم اثبات کار (یا پروتکل یا تابع) یک مقیاس سنجش اقتصادی برای تشخیص حملات "رد خدمات" یا دیگر سوء استفاده های سرویسی مثل اسپم روی شبکه با درخواست کننده سرویس است که معمولاً زمان پردازش کامپیوتر را تغییر می دهد. یک مشخصه اصلی این الگوها، نامتقارنی آنهاست: کار باید از سمت درخواست کننده نسبتاً سخت (اما امکان پذیر) باشد اما چک کردن آن توسط ارائه دهنده خدمات باید راحت باشد. یک سیستم پرطرفدار که در داده کاوی بیتکوئین و Hashcash استفاده می شود- از معکوس تابع درهم جزیی برای اثبات کار انجام شده و برای تعیین پاداش داده کاوی در بیتکوئین به عنوان توکن یا کلمه رمزی اعتبار کار برای ارسال ایمیل در Hashcash بکار گرفته می شود. فرستنده، باید یک پیامی را پیدا کند که مقدار هش آن با عدد بیت صفر شروع می شود. کار متوسطی که فرستنده باید برای پیدا کردن پیام معتبر انجام دهد، در تعداد بیت صفر مورد نیاز در مقدار هش، بصورت نمایی است، درحالیکه دریافت کننده میتواند صحت پیام را با اجرای یک تابع درهم واحد تایید کند. برای نمونه، در Hashcash، فرستنده درخواست تولید سرپیام می کند که در آن مقدار هش 160 bit SHA-1 دارای 20 بیت اول به صورت صفر است. بطور متوسط فرستنده کار 219 برابر برای پیدا کردن سرپیام معتبر انجام می دهد.

شناساگر فایل یا داده[ویرایش]

چکیده پیام نیز به عنوان ابزاری برای شناسایی معتبر یک فایل استفاده می شود. چند سیستم "مدیریت رمز سورس" مثل Git, Mercurial، Monotone از sha1sum انواع مختلف محتوا (محتوای فایل، درخت های راهنما، اطلاعات پیشینیان و غیره) برای شناسایی تک به تک آنها استفاده می کنند. هش ها برای شناسایی فایل ها روی شبکه های به اشتراک گذاری فایل ههمتا استفاده می شوند. برای مثال، در لینک ed2k، تابع درهم متغیر-MD4 با اندازه فایل ترکیب می شود و اطلاعات کافی برای پیدا کردن مکان سورس های فایل، دانلود فایل و تایید محتوای آن فراهم می کند. "لینک های مگنت" مثال دیگری از این دست می باشند. این هش های فایل بیشتر هش بالا "فهرست هش" یا "درخت هش" هستند که مزایای زیادی دارند.

یکی از کاربردهای اصلی "تابع درهم" جستجوی سریع داده در "جدول درهم" است. توابع درهم رمزنگار بعنوان توابع درهم از یک نوع خاص، خودشان کاربرد های متنوعی دارند.

هرچند، در مقایسه با توابع درهم استاندارد، توابع درهم ساز رمزنگارانه، هزینه محاسبات بالایی دارند. بهمین دلیل، آنها در زمینه هایی کاربرد دارند که در آنها حفاظت کاربران در برابر جعل اسناد و امضاء سازی (تولید داده با یک چکیده به شکل داده مد نظر) ضروری می باشد.

توابع درهم بر مبنای رمزنگاری بلوکی[ویرایش]

چند روش برای استفاده از "رمزنگاری بلوکی" برای ساخت تابع درههم ساز رمزنگار بویژه "تابع فشرده یک سویه" وجود دارد.

این روش ها شبیه "حالت های عملیات رمز بلوکی" استفاده شده برای رمزنویسی می باشند. بسیاری از توابع درهم معروف مثل MD4, MD5, SHA-1 و SHA-2 از مولفه های رمزنگار بلوکی-مانند طراحی شده برای این منظور ساخته می شوند، با این بازخورد تا اطمینان حاصل شود تابع حاصله معکوس پذیر نیست. شرکت کننده های SHA-3 در مرحله نهایی شامل توابعی با مولفه های "رمزنگار بلوکیک-مانند" (Skein, BLAKE) می باشند، در عین حال تابع نهایی انتخاب شده Keccak روی ابر رمزنگار ساخته شده بود.

رمزنگار بلوکی استاندارد مثل AES را میتوان در محل این رمزهای بلوکی معمول استفاده کرد و زمانی مثمرثمر می باشد که "سیستم الحاقی یا جانمایی شده داخل آن" نیاز به اجرای هم رمزنویسی و هم درهم سازی با اندازه کد کمینه یا ناحیه سخت افزار داشته باشد. هرچند، این روش برای راندمان و امنیت بالاتر هزینه بالایی می طلبد. حروف رمزی در توابع درهم برای درهم سازی ساخته می شوند: آنها از کلید ها و بلوک های بزرگ استفاده می کنند، میتوانند کلیدها را برای هر بلوک به خوبی تغییر دهند و برای مقاومت در برابر "حملات کلید-مربوطه" طراحی و انتخاب شوند. حروف رمزی هدف-کلی دارای اهداف طراحی متفاوتی هستند. بویژه، AES دارای اندازه کلید و بلوکی می باشد که استفاده از آن را برای تولید مقادیر هش طولانی غیربدیهی می سازد. رمزنویسی AES وقتی عملکردش ضعیف تر می شود که کلید هر بوک را تغییر دهد و حمله کلید-مربوطه استفاده از آن را در تابع درهم در مقایسه با رمزنویسی، کم ایمن تر سازد.

طراحی تابع درهم[ویرایش]

Merkle-Damgard hash big.svg

سازه Merkle–Damgård

تابع درهم باید قادر به پردازش پیام طول-مورد نظر خود به خروجی-طول ثابت باشد. این کار با تقسیم کردن ورودی به سری بلوک هایی با اندازه برابر و عملیات روی آنها بصورت متوالی با استفاده از "تابع فشرده یک سویه" انجام می شود. بویژه تابع فشرده را میتوان برای درههم سای یا ساختن از رمزنگاری بلوکی طراحی کرد. تابع درهم ساخته شده از سازه Merkle–Damgård مقاوم به برخورد است از آنجاییکه یک تابع فشرده محسوب می شود. هر گونه برخورد برای تابع درهم کامل را میتوان برخورد در تابع فشرده دانست.

آخرین بلوک پردازش شده نیز باید بطور واضح بر اساس "طول لایه گذاری شده باشد". این کار برای امنیت سازه از اهمیت بسزایی برخوردار است. این سازه "سازه Merkle–Damgård" نامیده می شود. متداول ترین توابع درهم قدیمی مثل SHA-1 و MD5 به این نحو می باشند.

لوله پهن در برابر لوله باریک[ویرایش]

کاربرد ساده سازه فوق که در آن اندازه خروجی هش برابر است با اندازه حالت داخلی (بین هر مرحله فشرده سازی)، به طراحی هش "لوله یا میله-باریک" منجر می شود. این طراحی دارای عیب های ذاتی متعددی می باشد، مثل "کشیده کردن طول"، چندبرخوردی (9)، حملات پیام طولانی (10)، حملات تولید و paste، ولی نمی‌توانند جفت یا برابر شوند. در نتیجه، توابع درهم پیشرفته روی سازه لوله-پهن ساخته می شوند که دارای اندازه حالت داخلی بزرگتری است- و دامنه آن از پیچ ساه فوق تا سازه های جدید نظیر "سازه ابر" و سازه HAIFA گستر ده شده است (11). هیچ یک از ورودی های "رقابت تابع درهم NIST" از سازه قدیمی Merkle–Damgård استفاده نمی‌کنند.

در ضمن، کوتاه سازی خروجی هش طولانی، مثل خروجی استفاده شده در SHA-512/256 نیز در برابر حملات متعددی دفاع می کند (13).

استفاده برای ساخت سایر واحد اولیه رمزنگاری[ویرایش]

توابع درهم را میتوان برای ساخت سایر واحدهای اولیه رمزنگاری استفاده کرد. برای امن بودن این واحدها از نظر رمزنگاری، برای ساختن درست آنها باید دقت زیادی خرج کرد.

"کدهای تایید پیام" (MAC) (که توابع درهم کلیدی نیز نامیده می شوند) اغلب از توابع درهم ساخته می شوند. HAMC مثل MAC است.

درست مثل "رمزنگارهای بلوکی که میتوانند برای ساخت توابع درهم استفاده شوند، توابع درهم را میتوان برای ساخت رمزهای بلوکی استفاده نمود. ساخت Luby-Rackoff با استفاده از توابع درهم را زمانی میتوان ایمن تلقی کرد که توابع درهم اصلی ایمن باشند. هم چنین، بسیاری از توابع درهم ساز (مثل SHA-1 و SHA-2) با استفاده از رمزنگاری بلوکی با یک هدف-ویژه در سازه Davies–Meyer یا سازه دیگر ساخته می شوند. هم چنین از حروف رمزی میتوان در حالت عملیات رایج بدون تضمین امنیت یکسان استفاده کرد. به SHACAL, BEAR و LION مراجعه کنید.

"سازنده های عدد تصادفی ساختگی" (PRNG) را میتوان با استفاده از توابع درهم ساخت. این کار با بنیان تصادفی (رمزی) با شمارنده و درهم کردن آن انجام داد.

برخی از توابع درهم نظیر Skein, Keccak و RadioGatún یک دنباله یا مسیر طولانی اختیاری را تولید می کنند و میتوانند به عنوان "رمزهای دنباله ای" استفاده شوند. هم چنین رمزهای دنباله ای را میتوان از از توابع درهم با چکیده طول-ثابت استفاده کرد. اغلب این کار با اولین ساخت "سازنده اعداد تصادفی ساختگی امن از نظر رمزنگاری" و سپس با استفاده از دنباله بایت های تصادفی مثل keystream انجام می شود. SEAL یک رمزنگار دنباله ای است که از SHA-1 برای تولید جداول داخلی استفاده می کند و سپس در سازنده keystream بکار گرفته می شود که به الگوریتم درهم مرتبط یا غیرمرتبط است. SEAL را نمیتوان مثل SHA-1 قوی یا ضعیف تضمین کرد. بطور مشابه، گسترش کلید رمزنگارهای دنباله ای HC-128 و HC-256 استفاده زیاد از تابع درهم SHA-256 را به دنبال دارد.

الحاق[ویرایش]

خروجی های "الحاقی" از چند تابع درهم، مقاومت به برخورد را به خوبی قوی ترین الگوریتم ها با نتایج بهم پیوسته ایجاد می کنند. برای مثال، نسخه های قدیمی امنیت لایه انتقال (TLS) و لایه سوکت های امنیتی (SSL) از مجموع بهم پیوسته MD5 و SHA-1 استفاده می کنند (14.15). این کار تضمین می کند که روش شنسایی برخورد در یکی از توابع درهمه، از داده های حفاظت شده توسط هر دو تابع درهم را مانع نمی‌شود.

برای توابع درهم "سازه Merkle–Damgård"، تابع الحاقی به مانند قوی ترین مولفه، مقاوم به برخورد است، اما نه خیلی پایدار. Antoine Joux مشاهده کرد که 2-برخورد به n-برخورد می انجامد: اگر حمله کننده بتواند دو پیام با یک هش مشابه MD5 را پیدا کند، میتواند بسیاری از پیام های مورد نظر خود را با هش هایی با MD5 یکسان بدون هیچ مشکلی پیدا کند (16). از بین پیام های n با تابع درهم مشابه MD5، احتمالاً یک برخورد در SHA-1 وجود دارد. کار بیشتری برای پیدا کردن برخورد SHA-1 لازم است که تنها میتوان از زمان چندجمله ای برای آن استفاده کرد.

الگوریتم های درهم ساز رمزنگارانه[ویرایش]

الگوریتم های درهم ساز رمزنگاری متعددی وجود دارند. در این قسمت چند الگوریتم را شرح می دهیم که نسبتاً کاربردهای زیادی دارند. فهرست بزرگتر آن را میتوان در صفحه حاوی "مقایسه توابع درهم ساز رمزنگاری" جستجو کرد.

MD5[ویرایش]

MD5 توسط Ronald Rivest در سال 1991 برای جایگزین کردن آن با تابع درهم اولیه MD4 طراحی شده بود و در سال 1992 به عنوان RFC 1321 معرفی شد. برخوردها در برابر MD5 را میتوان در چند ثانیه محاسبه کرد که باعث می شود این الگوریتم در اکثر موارد کابرد مناسبی نداشته باشد در اینجا به تابع درهم رمزنگاری احتیاج داریم. MD5 چکیده 128 بیتی تولید می کند (16 بایت).

SHA-1[ویرایش]

SHA-1 به عنوان بخشی از پروژه "اصلی" دولت آمریکا معرفی شده بود. مشخصه اصلی آن که در حال حاضر با SHA-0 شناخته می شود- الگوریتمش در سال 1993 تحت استاندارد هش امن، FIPS PUB 180 توسط نهاد استاندارد دولتی آمریکا NIST (موسسه ملی استاندارد و فناوری) منتشر شده بود. مدت کوتاهی بعد از انتشار آن توسط NSA رد شد و با نسخه بازبینی شده (تجدید نظر شده) آن جایگزینش شد و در سال 1995 در FIPS PUB 180-1 چاپ شد و با SHA-1 شناخته شد. برخورد در برابر الگوریتم کامل SHA-1 را میتوان با استفاده از "حمله خرد شده" تولید کرد و باید تابع درهم را شکسته در نظر گرفت. SHA-1 چکیده درهم 160بیتی (20 بایتی) تولید می کند.

اسناد را میتوان درست مثل “SHA”، SHA-1 اطلاق کرد، حتی با وجودیکه ممکن است با سایر الگوریتم های درهم استاندارد مثل SHA-0, SHA-2 و SHA-3 در تضاد باشد.

RIPEMD-160[ویرایش]

RIPEMD (چکیده پیام ارزیابی اولیه یکپارچه RACE) از خانواده توابع درهم ساز رمزنگارانه معرفی شده توسط Leuven, Belgium، Hans Dobbertin, Antoon Bosselaers و Bart Preneel در گروه پژوهشی COSIC در Katholieke Universiteit Leuven, می باشد، و اولین بار در سال 1996 منتشر شد. RIPEMD بر مبنای اصول طراحی بکار رفته در MD4 پایه گذاری شده بود و کارکردش مشابه SHA-1 پرطرفدار است. هرچند، RIPEMD-160 شکسته نشده است. RIPEMD-160 همانطور که از نامش پیداست، چکیده هش 160 بیتی (20 بایتی) تولید می کند.

Bcrypt[ویرایش]

Bcrypt تابع درهم سازی رمزعبور است که توسط Niels Provos و David Mazières بر مبنی رمزنگار Blowfish طراحی شده است و در سال 1999 در USENIX ارائه گردید. علاوه بر یکی سازی salt برای حفاظت در برابر حملات جدول رنگین کمان، bcrypt تابع انطباقی است. با گذشت زمان، تعداد تکرار را میتوان آهسته تر افزایش داد، بنابراین به حملات جستجوی فراگیر حتی با افزایش توان محاسه مقاومت نشان می دهد.

Whirlpool[ویرایش]

Whirlpool، تابع درهم ساز رمزنگارانه است که توسط Vincent Rijmen و Paulo S. L. M. Barreto طراحی شده است، کسانی که اولین بار در سال 2000 آن را توصیف کردند. Whirlpool، بر مبنای نسخه کاملاً اصلاح شده استاندارد رمزنگاری پیشرفته (AES) می باشد. Whirlpool چکیده درهم 512 بیتی (64 بایت) تولید می کند.

SHA-2[ویرایش]

SHA-2 (الگوریتم درهم ایمن 2) مجموعه توابع درهم رمزنگارانه می باشد که توسط آژانس امنیت ملی ایالات متحده (NSA) طراحی شده بود، و اولین بار در سال 2001 منتشر گردید. آنها با استفاده از ساختار Merkle–Damgård، از خود تابع فشرده یک سویه با استفاده از سازه Davies–Meyer از رمزنگار بلوکی تخصصی (طبقه بندی شده) ساخته می شوند.

در اصل، SHA-2 دو الگوریتم درهم دارد: SHA-256 و SHA-512. SHA-224، واریانت یا متغیره SHA-256 با مقادیر آغازین و خروجی کوتاه شده متفاوت می باشد. SHA-384 و SHA-512/224 و SHA-512/256 کمتر شناخته شده، همه از واریانت های SHA-512 بشمار می روند. SHA-512 امن تر از SHA-256 است و معمولاً در ماشین های 64 بیتی مثل AMD64، سریعتر از SHA-256 می باشد.

اندازه خروجی بیت ها، با تعمیم نام "SHA" مشخص می شود، بنابراین SHA-224 دارای اندازه خروجی 224 بیتی (28 بایتی) است، SHA-256 32 بایت، SHA-384 48 بایت و نهایتاً SHA-512 64 بایت تولید می کنند.

SHA-3[ویرایش]

SHA-3 (الگوریتم درهم ایمن 3) در پنجم آگوست 2015 توسط NIST معرفی شد. الگوریتم Keccak حاصل کار Guido Bertoni، Joan Daemen، Michael Peeters و Gilles Van Assche می باشد. Keccak بر مبنای ساخت ابر است که هم چنین قابل استفاده برای ساخت سایر ساختارهای اولیه رمزنگاری مثل رمزنگار دنباله ای است. SHA-3 اندازه خروجی مشابهی با SHA-2: 224, 256, 384 و 512 بیتی دارد.

اندازه های قابل پیکربندی خروجی نیز با استفاده از توابع SHAKE-128 و SHAKE-256 بدست می آیند. در اینجا الحاقی های 128- و 256- دلالت ضمنی بر توان امنیتی تابع به نسبت اندازه خروجی در بیت ها دارند.

BLAKE2[ویرایش]

نسخه پیشرفته BLAKE تحت نام BLAKE2 در 21 دسامبر 2012 معرفی شد. توسط Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn و Christian Winnerlein با هدف جایگزینی استفاده گسترده اما با الگورتیم های شکسته MD5 و SHA-1 ساخته شد. وقتی که BLAKE2b روی ساختار ARM x64 64 بیتی پیاده شود، BLAKE2b سریعتر از SHA-3, SHA-2, SHA-1 و MD5 خواهد بود. اگرچه BLAKE و BLAKE2 مثل SHA-3 استانداردسازی نشده اند، BLAKE2 در پروتکل های زیادی مثل تابع درهم رمز عبور Argon2 استفاده شد، برای راندمان بالایی که روی CPU های پیشرفته در نظر گرفته شده است. وقتی که BLAKE برای SHA-3 انتخاب شد، BLAKE و BLAKE2 هر دو اندازه خروجی یکسانی مثل SHA-3 پیشنهاد دادند، که شامل اندازه خروجی قابل پیکربندی می شد.

BLAKE3[ویرایش]

BLAKE3، نسخه پیشرفته BLAKE2، در 9 ژانویه 2020 معرفی شد. توسط O'Connor, Jean-Philippe Aumasson, Samuel Neves و Zooko Wilcox-O'Hearn معرفی شد. BLAKE3، یک الگوریتم واحد برخلاف BLAKE و BLAKE2 است که از خانواده های الگوریتم هایی با چند واریانت می باشند. تابع فشرده BLAKE3 کاملاً مبتنی بر BLAKE2 می باشد، با بیشترین اختلاف که تعداد دور از 10 به 7 کاهش پیدا می کند. BLAKE3، در داخل "درخت مرکل" است و درجه های بالای تقارن را نسبت به BLAKE2 پشتیبانی می کند.

حمله روی الگوریتم های درهم ساز رمزنگارانه[ویرایش]

یک فهرست طولانی از توابع درهم ساز رمزنگار است اما آسیب پذیری آن ثابت شده و نباید زیاد استفاده شود. برای نمونه، NIST 51 تابع درهم را به عنوان تابع منتخب برای دور 1 رقابت هش SHA-3 انتخاب کرد، از بین آنها 10 تابع شکسته و 16 تابع دارای نقاط ضعف قابل توجه در نظر گرفته شدند و لذا در دور بعد شرکت داده نمی‌شدند. اطلاعات بیشتر در مورد این مبحث را میتوان در مقاله اصلی آن در مورد "رقابت های تابع درهم NIST" جستجو کرد.

حتی اگر تابع درهم هرگز شکسته نشده باشد، "حمله موفق" در برابر واریانت ضعیف میتواند باعث تحلیل بردن اطمینان "کارشناس" شود. برای نمونه، در آگوست 2004، برخوردها در چند تابع درهم پرطرفدار مثل MD5 مشاهده شدند (20). این نقاط ضعف، امنیت الگوریتم های قوی تر مشتق شده از توابع درهم ضعیف خصوصاً SHA-1 (نسخه تقویت شده SHA-0)، RIPEMD-128 و RIPEMD-160 (هر دو نسخه تقویت شده RIPEMD) را زیر سوال می برد.

در 12 آگوست 2004، Joux, Carribault, Lemuet و Jalby برخوردی را برای الگوریتم کامل SHA-0 معرفی کردند. Joux و همکارانش این کار را با استفاده از تعمیم دهی حمله Chabaud و Joux انجام دادند. آنها به این نتیجه رسیدند که برخورد دارای پیچیدگی 251 بود و 80000 ساعت CPU (واحد پردازشگر مرکز) روی ابرکامپیوتری با 256 پردازنده Itanium 2- معادل 13 روز استفاده تمام وقت از ابرکامپیوتر فعال بود.

در فوریه 2005، حمله ای روی SHA-1 گزارش شد که در حدود عملیات درهمسازی 269 را شامل می شد، به جای مقدار مورد انتظار 280 برای تابع درهم 160 بیتی. در آگوست 2005، حمله دیگر روی SHA-1 گزارش شد که برخورد در 263 عملیات را نشان می داد. نقاط ضعف نظری دیگر SHA-1 از این قرارند: (21، 22) و در فوریه 2017 گوگل خبر از برخورد در SHA-1 داد (23). محققین حوزه امنیت توصیه کردند که اپلیکیشن های جدید میتوانند با استفاده از اعضای خانواده SHA این مشکلات را برطرف کنند، مثل SHA-2 یا استفاده از تکنیک هایی نظیر درهم سازی تصادفی (21)(1) که نیازی به مقاومت در برابر برخورد ندارد.

یک حمله عملی و موفق، MD5 استفاده شده درون گواهی "امنیت لایه انتقال" را در سال 2008 شکست.

بسیاری از توابع درهم رمزنگار، بر مبنای "ساختار Merkle–Damgård" پایه گذاری شده اند. همه هش ها یا درهم رمزنگاری که مستقیماً از خروجی کامل ساختار فوق استفاده می کنند نسبت به حملات گسترش طول آسیب پذیرند. این باعث می شود تا MD5, SHA-1, RIPEMD-160, Whirlpool و الگوریتم های درهم SHA-256 / SHA-512، همه نسبت به این حملات ویژه آسیب پذیر باشند. SHA-3, BLAKE2, BLAKE3 و واریانت های کوتاه شده SHA-2 به این نوع حمله آسیب پذیر نیستند.

منابع[ویرایش]

ویکی‌پدیای انگلیسی en:Cryptographic hash function