"Захищений" хеш - хеш, який, як вважають, важко "підробляти" формульним, відтворюваним способом без попереднього знання повідомлення, яке використовується для створення хешу. Оскільки ця інформація загалом є секретною, отже, потреба у хеші, це хороша властивість функції хешування, призначеної для використання в аутентифікації.
Хеш, як правило, вважається "захищеним", якщо, даючи повідомлення M, хеш-функцію хеш (), і значення хеша Н, вироблене хеш (М), довжиною в бітах L, жодне з наступного не може бути виконане менше, ніж O (2 л ) час:
- Враховуючи хеш () та Н, виробляють М. (стійкість до зображення)
- Враховуючи хеш () і M, виробляють інший M 2 такий, що хеш (M 2 ) == H. (слабкий опір зіткнення)
- Враховуючи хеш (), виробляють будь-які M 1 і M 2 такі, що хеш (M 1 ) == хеш (M 2 ). (сильний опір зіткнення)
Крім того, "захищений" хеш повинен мати довжину хеша L таку, що 2 Lне є можливою кількістю кроків для виконання комп'ютером заданого обладнання. 32-бітний цілочисельний хеш може мати лише 2,1 млрд. Значень; хоча попередня атака (пошук повідомлення, що створює певний хеш-H), займе певний час, для багатьох комп’ютерів, особливо тих, що знаходяться в руках урядових установ, зафрахтованих з розбиттям коду, це неможливо. Крім того, алгоритм, який створює та зберігає випадкові повідомлення та їх хеші, за вірогідністю, би на 50% вистрілив у пошуку дублікату хешу з кожним новим повідомленням після спроби лише 77000 повідомлень, і мав би 75% шанс потрапити на дублікат після лише 110 000. Навіть у 64-бітових хешей все ще є 50% шансу зіткнутися після спроби лише близько 5 мільярдів значень. Така сила нападу дня народження на маленькі хеши. На противагу, десятильйона чисел (1,5 * 10 34 ).
Більшість продемонстрованих атак на криптографічні хеші були атаками зіткнення та продемонстрували здатність генерувати зіштовхувальні повідомлення за менший час, ніж 2 л (більшість досі були експоненціальним часом, але зменшення показника вдвічі є значним зниженням складності, оскільки це робить 256-бітний хеш настільки ж простий для вирішення, як і 128-розрядний, а 128-розрядний - такий же простий, як 64-розрядний тощо).
Крім невеликого розміру хешу, інші фактори, які можуть зробити хеш демонстративно незахищеними, є:
Низька робота - хеш, призначений для використання хештайлом або для інших цілей типу "контрольна сума", зазвичай розрахований на обчислювально недорогі. Це набагато полегшує грубу атаку.
"Sticky State" - функція хешування схильна до моделей введення, де поточне хешоване значення всіх входів поки що не змінюється при наданні певного додаткового байта вводу. Наявність "липкого стану" полегшує пошук зіткнень, оскільки, коли ви ідентифікуєте повідомлення, яке створює хеш "липкого стану", тривіально генерувати інші повідомлення, які мають такий самий хеш, додаючи вхідні байти, які зберігають хеш у його "липкому стані" ".
Дифузія - кожен вхідний байт повідомлення повинен розподілятися між байтами хеш-значення однаково складним способом. Окремі хеш-функції створюють передбачувані зміни певних бітів у хеші. Це знову робить створення зіткнення тривіальним; надаючи повідомлення, яке створює хеш, зіткнення можна легко створити, ввівши в повідомлення нові значення, які впливають лише на біти, які передбачувано змінюються.