Хороша хеш-функція має такі властивості:
З огляду на хеш повідомлення, зловмисник обчислювально не може знайти інше повідомлення таким чином, щоб їх хеши були ідентичними.
Враховуючи пару повідомлень, m 'і m, обчислювально неможливо знайти два таких, що h (m) = h (m')
Ці два випадки НЕ те ж саме. У першому випадку є попередньо створений хеш, для якого ви намагаєтеся зіткнутись. У другому випадку ви намагаєтесь знайти будь-які два повідомлення, які стикаються. Друге завдання значно простіше через день народження "парадокс".
Якщо продуктивність не є великою проблемою, ви завжди повинні використовувати захищену хеш-функцію. Є дуже розумні атаки, які можна здійснити, форсуючи зіткнення в хеші. Якщо ви з самого початку використовуєте щось сильне, ви убезпечите себе від цього.
Не використовуйте MD5 або SHA-1 в нових проектах. Більшість криптографів, включаючи мене, вважають їх порушеними. Принциповим джерелом слабкості обох цих конструкцій є те, що друга властивість, яку я окреслив вище, не відповідає цим конструкціям. Якщо зловмисник може генерувати два повідомлення, m і m ', то обидва хеша з однаковим значенням, вони можуть використовувати ці повідомлення проти вас. SHA-1 і MD5 також страждають від атак на розширення повідомлень, які можуть фатально послабити вашу програму, якщо ви не будете обережні.
Більш сучасний хеш, такий як Whirpool - кращий вибір. Він не страждає від цих атак на розширення повідомлень і використовує ту саму математику, що і AES, щоб довести безпеку від різних атак.
Сподіваюся, що це допомагає!