Рядки дайджестів мають вигляд «АЛГОРИТМ хеш», тож їх можна копіювати в примітки до релізу або маніфести завантажень.
Генератор хешів — кожен алгоритм пояснено з нуля
Одним реченням: криптографічна хеш-функція — однобічний блендер: вона приймає будь-яку кількість байтів і стискає їх у відбиток фіксованої довжини так, що те саме введення завжди дає той самий відбиток, але відбиток нічого не каже про те, як відновити введення. Ця сторінка запускає одинадцять таких функцій повністю у вкладці вашого браузера.
Кожен алгоритм нижче пояснюється за тими самими чотирма кроками: що це простими словами, інтуїція роботи без жодних формул, чи варто його використовувати сьогодні та помилки, які найчастіше роблять з ним.
MD5
Що це таке. MD5 (1992) стискає будь-яке введення в 128-бітний відбиток (32 hex-символи). Його створювали швидким для комп'ютерів 1990-х, і він такий і є — саме тому він досі скрізь: сторінки завантаження програм, кеші дедуплікації файлів, застарілі ключі баз даних.
Як це працює, інтуїтивно. Введення розрізається на блоки по 64 байти. Кожен блок чотири рази перемішується в 128-бітний стан, що прокручується (чотири трохи різні раунди змішування), а після останнього блоку стан виводиться як дайджест. Перемішування побудоване з додавань, циклічних зсувів і пошуків у таблицях — тоді дешево, і тепер дешево.
Чи варто його використовувати? Для контрольних сум, де ніхто не намагається вас обдурити — виявлення пошкодженого завантаження, пошук дублікатів файлів — так, він досі відмінно показує пошкодження. Для будь-чого ворожого — ні: від 2004 року дослідники можуть створити два різні файли з однаковим MD5 за секунди, а реальні підробки сертифікатів з колізіями MD5 траплялися в 2008 році. Ставтеся до нього як до серійного номера, а не замка.
Поширені помилки. Використання MD5 для паролів (занадто швидко — див. Генератор хешів паролів, що саме там доречно); довіра до файлу через те, що «MD5 збігається», коли зловмисник теж опублікував MD5; і вставлення всього рядка MD5 (file) = hash замість лише хешу — поле перевірки вище приймає обидва.
SHA-1
Що це таке. SHA-1 (1995, NSA) видає дайджест 160 біт (40 hex-символів). Двадцять років він був типовим хешем цілісності Git, сертифікатів TLS і підписів PGP.
Як це працює, інтуїтивно. Той самий рецепт родини, що й MD5, але зі станом 160 біт, 80 раундами змішування на блок 64 байти і ширшим набором операцій. Додаткові раунди мали ускладнити зворотне проєктування блендера.
Чи варто його використовувати? Ні, для будь-чого ворожого. Теоретичний злам став практичним у 2017 році, коли Google створив два різні PDF з ідентичними значеннями SHA-1 (атака SHAttered, близько 6500 процесорних років). Git досі зберігає об'єкти під SHA-1, але трактує його лише як ідентифікатор і відтоді додав виявлення колізій. Для нової роботи використовуйте SHA-256 або SHA-3.
Поширені помилки. Віра, що 160 біт «досі достатньо довго» — злам стосується внутрішньої структури, а не грубої сили; і плутання RIPEMD-160 з SHA-1, бо обидва мають 40 hex-символів (поле визначення вище їх розрізняє).
SHA-2: SHA-256, SHA-384 і SHA-512
Що це таке. Родина SHA-2 (2001, NSA) — робоча конячка сучасної перевірки цілісності. SHA-256 дає 256 біт (64 hex-символи), SHA-512 — 512 біт, а SHA-384 — це SHA-512 з результатом, обрізаним до 384 біт — корисно, коли протокол вимагає коротший тег.
Як це працює, інтуїтивно. Блоки по 64 байти (або по 128 байтів для 512-бітних варіантів) згортаються у стан з 8 слів через 64 (або 80) раундів кроків додавання-циклічного зсуву-змішування. На відміну від MD5, розклад спершу розтягує кожен блок у розгорнутий буфер, і саме це зламало тип атаки, що ламав MD5 і SHA-1. Цікавий факт: на 64-бітних ЦП SHA-512 швидший за SHA-256, бо обробляє вдвічі більше даних за раунд з 64-бітною арифметикою.
Чи варто його використовувати? Так — SHA-256 є відповіддю за замовчуванням для контрольних сум файлів, підписання коду і відбитків сертифікатів сьогодні, без відомого практичного зламу після двох десятиліть аналізу. Використовуйте SHA-384/512, коли хочете більший запас або коли платформа запускає їх швидше.
Поширені помилки. Використання самого SHA-256 для паролів — це швидкий хеш, і швидкість там ворог (використовуйте bcrypt/scrypt/Argon2id); і плутання довжини дайджесту зі стійкістю для налаштувань стійкості до колізій у ворожому контексті — довжина лише задає стелю.
SHA-3 (SHA3-256 / SHA3-512) і Keccak-256
Що це таке. SHA-3 (2015, стандартизований із заявки Keccak Бертоні, Деменом, Пітерсом і Ван Ассхе) — третій стандарт хешу NIST. Він нічим не ділиться з внутрішньою будовою SHA-2 — його обрали саме для того, щоб бути незалежним запасним варіантом на випадок, якщо SHA-2 колись впаде.
Як це працює, інтуїтивно. Замість того, щоб перемішувати блоки в малому стані, Keccak повторно «вбирає і віджимає»: введення поглинається біт за бітом у губку 5×5×64 біт, уся губка перемішується фіксованою перестановкою (24 раунди побітових операцій над усім станом), а потім біти дайджесту віджимаються назовні. Картина губки — вся суть: біти ємності ніколи не виводяться, і саме вони роблять функцію однобічною.
Keccak-256 проти SHA3-256. Вони відрізняються рівно одним байтом доповнення. Оригінальна заявка команди Keccak доповнювала останній блок байтом 0x01; NIST змінив стандартне доповнення на 0x06 (розмежування доменів, яке використовує Keccak епохи SHA-2). Ethereum прийняв оригінальне доповнення, тож його «keccak256» відрізняється від стандартного SHA3-256 для кожного введення. Ця сторінка пропонує обидва, позначаються окремо.
Чи варто його використовувати? Так — або як основний вибір, коли політика хоче алгоритм не з родини SHA-2, або там, де екосистема вже ним користується. Поширені помилки: припущення, що SHA3-256 і Keccak-256 взаємозамінні (ні — порівняйте два рядки, які ця сторінка видає для того самого введення); і припущення, що «SHA-3» замінює SHA-2 — обидва безпечні, але SHA-2 досі ширше розгорнутий.
RIPEMD-160
Що це таке. RIPEMD-160 (1996, консорціум RIPE європейських академіків, зміцнений Доббертіном, Босселерсом і Преніллем) видає 160 біт. Це повністю європейський дизайн, навмисно незалежний від родини SHA, створеної NSA.
Як це працює, інтуїтивно. Кожен блок по 64 байти обробляється двома паралельними лініями по 80 раундів з різними константами і величинами зсувів; наприкінці дві лінії і старий стан об'єднуються. Структура з двох доріжок була способом розробників протистояти диференційним атакам, які ламали інші хеші 1990-х.
Чи варто його використовувати? На практиці він виживає переважно всередині інших систем: адреси Bitcoin хешують свої публічні ключі як RIPEMD-160(SHA-256(pk)), старіші ключі OpenPGP пропонують його як варіант хешу, а він є традиційним хешем для частин BitTorrent v1 разом із SHA-1. Для нього немає практичної атаки колізіями, але розмір 160 біт дає йому найменший запас міцності на цій сторінці. Для нового самостійного використання віддавайте перевагу SHA-256 або SHA-3.
Поширені помилки. Віра, що дві паралельні лінії роблять його «вдвічі сильнішим» — розмір виходу обмежує стійкість до колізій; і плутання з SHA-1 (та сама довжина 40 hex-символів; поле визначення вище перелічує обидві можливості поруч).
BLAKE2b-512 і BLAKE2s-256
Що це таке. BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn і Winnerlein) — хеш, створений для швидкості програмного забезпечення: BLAKE2b орієнтований на 64-бітні платформи з виходом до 512 біт, BLAKE2s — на 32-бітні платформи з виходом до 256 біт.
Як це працює, інтуїтивно. Він походить від фіналіста конкурсу SHA-3 BLAKE, основа якого — ключова перестановка, запозичена з потокового шифру ChaCha: матриця 4×4 слів перемішується чергуванням кроків змішування стовпців і діагоналей — як тасування сітки спершу зверху вниз, потім по діагоналях — на 12 (BLAKE2b) або 10 (BLAKE2s) раундів на блок. Оскільки ці кроки чудово відповідають інструкціям ЦП, BLAKE2 часто швидший за MD5, забезпечуючи безпеку, порівнянну з SHA-3.
Чи варто його використовувати? Так — це повністю сучасний, незламаний дизайн, популярний у програмному забезпеченні, чутливому до швидкодії (цілісність пакетів в деяких екосистемах, сховища з адресацією за вмістом, дедуплікація резервних копій), і як швидкий MAC. На цій сторінці BLAKE2b-512 дає найдовші дайджести, а BLAKE2s-256 — компактний сучасний варіант.
Поширені помилки. Думка, що «швидше має означати слабше» — BLAKE2 швидший за задумом, а не через зрізані кути; і нерозуміння того, що BLAKE2 також приймає ключ (роблячи його MAC) або рядок персоналізації — ця сторінка завжди використовує його у простому режимі без ключа.
Читаємо поля перевірки та визначення
Перевірка. Поле перевірки нормалізує те, що ви вставляєте — великі чи малі літери, двокрапки через кожні дві цифри, префікс sha256=, обгортку в стилі BSD SHA256 (file) = hash, рядок GNU md5sum з іменем файлу після хешу, зайві \r\n — потім перераховує кожен позначений алгоритм над вашим поточним введенням (текстом або обраним файлом) і звітує про кожен алгоритм, що збігається. Зелений збіг означає «ці байти саме ті, що хешував видавець»; червоний — жоден позначений алгоритм не дав такого результату: спробуйте позначити більше алгоритмів або перевірте, чи вставку не обрізано.
Визначення. Поле визначення нічого не хешує; воно читає форму рядка. Довжина звужує кандидатів: 32 hex-символи можуть бути MD5, 40 — SHA-1 або RIPEMD-160, 64 — SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 — SHA-384, 128 — SHA-512 / SHA3-512 / BLAKE2b-512. Префікси виявляють хеші паролів ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — це інший вид (див. Генератор хешів паролів), і цю сторінку навмисно не обчислює. Рядок із +, / і =, довжина якого кратна 4, імовірніше є даними у кодуванні Base64, ніж hex-дайджестом; інструмент декодує його і повідомляє, яку довжину байтів він відповідатиме.
Що визначення може, а чого не може сказати. Довжина і набір символів — відбитки формату, а не доказ алгоритму: два 64-hex-рядки можуть походити від SHA-256 або від скороченого SHA-512. Визначник ранжує можливості; поле перевірки — те, що доводить, якому алгоритму ваші байти справді відповідають.
Усі одинадцять одним поглядом
| Алгоритм |
Розщеплення |
Вигадане |
Дайджест «The quick brown fox jumps over the lazy dog» |
| MD5 | 128 біт | 1992 | 9e107d9d372bb6826bd81d3542a419d6 |
| SHA-1 | 160 біт | 1995 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 |
| SHA-256 | 256 біт | 2001 | d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
| SHA-384 | 384 біт | 2001 | ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 |
| SHA-512 | 512 біт | 2001 | 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 |
| SHA3-256 | 256 біт | 2015 | 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 |
| SHA3-512 | 512 біт | 2015 | 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 |
| Keccak-256 | 256 біт | до 2015 | 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 |
| RIPEMD-160 | 160 біт | 1996 | 37f332f68db77bd9d7edd4969571ad671cf9dd3b |
| BLAKE2b-512 | 512 біт | 2013 | a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 |
| BLAKE2s-256 | 256 біт | 2013 | 606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812 |
Кожен дайджест у таблиці вище створюється двигунами цієї самої сторінки — позначте всі алгоритми, натисніть «Зразок» і порівняйте. Рядки SHA-3, Keccak, RIPEMD-160 і BLAKE2 походять із самостійно розміщеного ядра crypto-shared.js, яке використовується в криптографічних інструментах цього сайту.
Часті запитання (FAQ)
Якому полю довіряти для завантаження? Полю перевірки з позначеним SHA-256 — більшість видавців сьогодні підписують SHA-256 або SHA-512. Поле визначення лише називає кандидатів; воно ніколи нічого не доводить про ваш файл.
Навіщо взагалі Keccak-256 у списку? Тому що Ethereum, Swarm і кілька систем реєстрів стандартизували доекспериментальне доповнення. Якщо ви перевіряєте keccak256 з Ethereum, треба використовувати цей рядок, а не SHA3-256.
Чи можуть два різні введення мати однаковий дайджест? Теоретично так — нескінченна кількість введень відображається в скінченну множину дайджестів (принцип Діріхле). На практиці знайти таку пару до теплової смерті Всесвіту — це і є суть «стійкості до колізій», і кожен алгоритм вище, крім MD5 і SHA-1, досі стоїть.
Чи є хеші шифруванням? Ні. Шифрування оборотне з ключем; хеш — однобічний блендер. Ніщо на цій сторінці не можна «розшифрувати» назад у ваш текст — і це перевага, а не обмеження.