Как пользоваться
- Введите текст, переключите формат ввода на «Hex», чтобы ввести байты, или нажмите «Открыть файл».
- SHA-1 уже выбран; если хотите сравнить его с другой хеш-функцией, измените значение параметра «Алгоритм».
- Выберите «hex (нижний регистр)», как выводят sha1sum и Git, «HEX (верхний регистр)» или «Base64».
- Вставьте ожидаемый SHA-1 в поле «Сравнить с»: страница покажет «Совпадает» или «Не совпадает».
Что такое SHA-1?
SHA-1 (Secure Hash Algorithm 1) разработан АНБ и опубликован NIST в 1995 году как FIPS 180-1 на замену просуществовавшему недолго SHA-0. Сейчас он описан в FIPS 180-4, а RFC 3174 излагает его вместе с примером кода на C. SHA-1 обрабатывает блоки по 512 бит за 80 раундов и выдаёт 160-битный хеш: 40 шестнадцатеричных символов или 28 символов Base64.
Как и любой хеш, SHA-1 работает только в одну сторону. Хеш нельзя расшифровать, можно лишь найти совпадение, хешируя предполагаемые варианты. Именно так массово взломали хеши паролей SHA-1 без соли, утёкшие из LinkedIn в 2012 году; пароли следует хранить с помощью Argon2, scrypt, bcrypt или PBKDF2.
SHAttered: почему SHA-1 признан устаревшим
В феврале 2017 года исследователи из CWI Amsterdam и Google опубликовали SHAttered — первую реальную коллизию SHA-1: два разных PDF-файла с одинаковым хешем, найденные примерно за 2^63 вычислений SHA-1. В 2020 году Gaëtan Leurent и Thomas Peyrin (работа «SHA-1 is a Shambles») с помощью коллизии с выбранным префиксом продемонстрировали подделку подписей SHA-1 на ключах PGP, причём стоимость атаки вполне по силам хорошо финансируемому злоумышленнику.
- Публичные удостоверяющие центры перестали выпускать сертификаты TLS с SHA-1 в 2016 году, а браузеры перестали им доверять в начале 2017 года.
- NIST запрещает использовать SHA-1 для новых цифровых подписей с 2013 года и планирует полностью отказаться от него к концу 2030 года.
- Большинство репозиториев Git по-прежнему идентифицируют объекты по SHA-1, который вычисляется усиленной реализацией, распознающей попытки создать коллизию; кроме того, Git умеет создавать репозитории на основе SHA-256.
Коллизии не позволяют взломать HMAC, поэтому HMAC-SHA1 до сих пор встречается в кодах TOTP и старых подписях вебхуков; вычислить его можно в генераторе HMAC. Для всего нового выбирайте SHA-256.
Идентификаторы объектов Git, Base64 и кодировка текста
Идентификатор blob в Git — это не SHA-1 одного лишь файла. Git хеширует заголовок из слова blob, пробела, размера в байтах и нулевого байта, а за ним — содержимое. Чтобы воспроизвести такой идентификатор здесь, переключите формат ввода на «Hex» и добавьте байты заголовка: для hello с переводом строки ввод в hex выглядит так: 626c6f6220360068656c6c6f0a.
$ printf 'hello\n' | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f -
$ printf 'hello\n' | git hash-object --stdin
ce013625030ba8dba906f756967f9e9ca394464a
SHA-1 обычно показывают в hex в нижнем регистре. Base64 встречается в рукопожатии WebSocket, где Sec-WebSocket-Accept — это SHA-1 ключа клиента с добавленным фиксированным GUID, записанный в Base64, а также в значениях паролей LDAP {SHA}. Помните, что хеш вычисляется от байтов: у текста с диакритическими знаками один SHA-1 в UTF-8 и другой в Windows-1252.
SHA-1 в командной строке и в коде
sha1sum file.zip # Linux
shasum file.zip # macOS (SHA-1 по умолчанию)
certutil -hashfile file.zip SHA1 # Windows
Get-FileHash file.zip -Algorithm SHA1 # PowerShell
# Python
hashlib.sha1(data).hexdigest()
// Node.js
crypto.createHash('sha1').update(data).digest('hex')
Эта страница вычисляет SHA-1 с помощью встроенного в браузер Web Crypto API, поэтому входные данные не покидают ваше устройство. Таблица «Все алгоритмы» показывает значения MD5, SHA-256, SHA-384, SHA-512 и CRC для тех же входных данных.
Примеры
| Исходные данные (UTF-8) | SHA-1 |
|---|---|
Hello, World! | 0a0a9f2a6772942557ab5355d76af442f8f65e01 |
Base64.is | 6c667ee2efd2020349eed40efa07c26683f613c8 |
你好 | 440ee0853ad1e99f962b63e459ef992d7c211722 |
Часто задаваемые вопросы
Безопасно ли использовать SHA-1 сегодня?
Нет, если злоумышленник может выбирать входные данные или влиять на них, как в случае подписей и сертификатов: коллизии SHA-1 можно получить на практике. Случайные повреждения он по-прежнему обнаруживает, а на HMAC-SHA1 коллизии не влияют. Для новых задач используйте SHA-256 или SHA-512.
Можно ли обратить хеш SHA-1?
Нет. Ключа нет, и расшифровывать нечего. Сайты поиска по хешам находят только те входные данные, которые уже есть в их таблицах распространённых слов и утёкших паролей. Поэтому длинным случайным данным они не страшны, а вот короткому паролю — опасны.
Какой длины хеш SHA-1?
= на конце. Такую же длину имеет RIPEMD-160, а хеши паролей MySQL 4.1+ — это звёздочка и 40 hex-символов. Определитель типа хеша перечислит возможные варианты для заданной строки.Как проверить файл по опубликованному SHA-1?
Откройте файл и вставьте опубликованное значение в поле «Сравнить с». Принимается hex в верхнем или нижнем регистре и Base64, а страница покажет «Совпадает» или «Не совпадает».
Чем SHA-1 отличается от SHA-256?
Оба алгоритма опубликованы NIST, но SHA-256 относится к более новому семейству SHA-2, выдаёт 256-битный результат и не имеет известных практических атак. У SHA-1 результат короче, а стойкость к коллизиям у него уже нарушена.