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

تعریف
تابع درهم‌ساز رمزنگارانه یک تابع درهم‌سازی رمزنگارانه یا تابع هش کریپتوگرافیک نوعی تبدیل است که رشته‌ای طولانی را به عنوان ورودی دریافت می‌کند و رشته‌ای با طول ثابت را خروجی می‌دهد. مقدار هش حاصل، نمایشی از کل محتوای متن یا رشته ورودی است و می‌توان آن را نوعی "اثر انگشت دیجیتالی" برای آن متن به حساب آورد.
از توابع درهم‌سازی کریپتوگرافیک برای بررسی صحت پیام‌ها و امضای دیجیتالی متون در طیف گسترده‌ای از کاربردها، همچون تصدیق اصالت و تصدیق صحت پیام استفاده می‌شود. یک تابع درهم‌سازی، یک رشته (یا پیام) را دریافت می‌کند و رشته‌ای با طول ثابت موسوم به خلاصه پیام (message digest) یا اثر انگشت دیجیتال (digital fingerprint) و یا هش را تولید می‌نماید.
این مقدار نوعی امضا برای جریانی از داده است که محتوای آن را نمایندگی می‌کند. برای آن که بتوان یک تابع درهم‌سازی را "کریپتوگرافیک" نامید، باید خواص امنیتی مشخصی در آن به تأیید برسند. مشخصا تابع درهم‌سازی باید تا حد امکان واجد خاصیت "تصادفی بودن" باشد و در عین حال برای یک متن خاص قطعی بوده و با کارایی بالایی قابل محاسبه باشد. چنانچه هر یک از این موارد از نظر محاسباتی قابل انجام باشد، تابع درهم‌سازی کریپتوگرافیک از امنیت کافی بر خوردار نیست.
یافتن پیام جدیدی که مقدار هش داده شده را تولید نماید یافتن دو پیام که مقدار هش مساوی هم تولید نمایند (چنین موردی یک تصادم هش خوانده می‌شود.)
حمله کننده‌ای که بتواند هریک از این دو کار را انجام دهد قادر خواهد بود از آن برای جایگزینی یک متن غیر اصیل به جای متن اصیل استفاده نماید.
تصادم هش منظور از تصادم hash موقعیتی است که در آن دو مقدار ورودی مختلف به یک تابع درهم‌سازی خروجی یکسان تولید نمایند. از آنجا که طول ورودی توابع درهم‌سازی کریپتوگرافیک نامحدود ولی طول خروجی آنها ثابت است، فضای ورودی بسیار بزرگتر از فضای خروجی است و در نتیجه توابع درهم‌سازی کریپتوگرافیک همواره دارای (بی‌شمار) تصادم هستند.
خواص کریپتوگرافیک تابع درهم‌ریزی hash داده شده است:
 Σ ≝ {0, 1} hash: Σ * → Σ L
این تابع باید حداقل واجد این خصوصیات باشد:
مقاومت پیش‌تصویر: برای هر H داده شده، محاسبه M به گونه‌ای که (H = hash(M باشد دشوار است.
مقاومت پیش‌تصویر دوم (مقاومت تصادم ضعیف): برای هر ورودی M1 داده شده، یافتن ورودی M2 به گونه‌ای که hash(M2) = hash(M1) باشد دشوار است.
مقاومت تصادم (قوی): یافتن هر زوج ورودی M1 و M2 به گونه‌ای که (hash(M2) = hash(M1 باشد دشوار است.

دقت کنید که شرط اول قوی‌تر است و در واقع شرط دوم را در بر دارد.

از آنجا که امکان استفاده از پارادوکس روز تولد برای یافتن یک تصادم وجود دارد، طول مقدار hash باید در این مورد حداقل دو برابر مقدار لازم برای مقاومت پیش‌تصویر باشد.