Строки дайджестов имеют вид «АЛГОРИТМ хеш», поэтому их можно копировать в примечания к релизу или манифесты загрузок.
Генератор хешей — каждый алгоритм с нуля
Одним предложением: криптографическая хеш-функция — это односторонний блендер: она берёт любое количество байтов и сжимает их в отпечаток фиксированной длины так, что один и тот же вход всегда даёт один и тот же отпечаток, но отпечаток ничего не говорит о том, как восстановить вход. Эта страница запускает одиннадцать из них полностью внутри вкладки вашего браузера.
Каждый алгоритм ниже объясняется в одних и тех же четырёх шагах: что он собой представляет простыми словами, интуиция того, как он работает, без формул, стоит ли использовать его сегодня и ошибки, которые с ним чаще всего совершают.
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, Аумассон, Невес, Уилкокс-О’Хирн и Винлерн) — хеш, созданный для скорости в программах: 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, которое используется во всех криптоинструментах этого сайта.
Частые вопросы
Какому полю доверять для загрузки? Полю проверки, с отмеченным SHA-256 — большинство издателей сегодня подписывают SHA-256 или SHA-512. Поле определения лишь называет кандидатов; оно никогда ничего не доказывает о вашем файле.
Зачем вообще Keccak-256 в списке? Потому что Ethereum, Swarm и некоторые системы учёта стандартизировались на дополнении до стандарта. Если вы проверяете keccak256 Ethereum, нужно использовать именно эту строку, а не SHA3-256.
Могут ли два разных входа иметь один дайджест? Теоретически да — бесконечно много входов отображаются в конечное множество дайджестов (принцип Дирихле). На практике найти такую пару до тепловой смерти Вселенной — вот о чём «стойкость к коллизиям», и каждый алгоритм выше, кроме MD5 и SHA-1, всё ещё держится.
Хеши — это шифрование? Нет. Шифрование обратимо с ключом; хеш — односторонний блендер. Ничто на этой странице не может быть «расшифровано» обратно в ваш текст — и это свойство, а не ограничение.