Русский

Инструменты разработчика · SHA хеш-калькулятор

От SHA-0 до SHA-3: как развивался стандарт безопасного хеширования NIST

· Фон

ша-256 криптография API-интерфейс браузера

Временная шкала от SHA-0 до SHA-1, семейства SHA-2 и SHA-3, показывающая два десятилетия эволюции
Оригинальная векторная иллюстрация ToolAcre

SHA-1, SHA-2 и SHA-3 — это три поколения разного происхождения. В этом посте стандарт безопасного хеширования прослеживается от отозванного SHA-0 до конкурса Keccak и объясняется, почему SHA-2 все еще доминирует.

Что означают цифры? — почему SHA-256 — это SHA-2, а SHA-3 — это совсем другое

Разработчики видят SHA-1, SHA-256 и SHA-3 и предполагают, что они представляют собой линейную прогрессию. Это не так. Цифры означают разные вещи в разных контекстах, и понимание семейной истории объясняет, почему SHA-256 является разумным выбором для новых приложений, почему SHA-1 предназначен только для устаревших версий, несмотря на широкое распространение, и почему SHA-3 представляет собой отдельную разработку, а не эволюцию.

Когда NIST впервые опубликовал безопасную хэш-функцию, они назвали ее SHA, а затем SHA-0, версия настолько недолговечна, что большинство разработчиков никогда о ней не слышали. SHA-0 был отозван через несколько лет из-за неуказанного недостатка, который никогда не был публично раскрыт. Этот вывод произошел незаметно, а последующие алгоритмы привели к путанице в именах. После того, как SHA-0 был отозван, NIST опубликовал SHA-1, который стал стандартом на двадцать лет.

Инструмент охватывает SHA-1 и SHA-2; подробная история SHA-0 находится за пределами хранилища

SHA-1 — это 160-битная хеш-функция, которая выдает шестнадцатеричный вывод из 40 символов. Он основан на конструкции Меркла-Дамгорда, где функция сжатия обрабатывает входные данные блок за блоком, связывая состояние вперед. На момент публикации проект был разумным, и в течение многих лет не было никаких практических атак. Однако год 2005 принес криптоаналитический прорыв. Команда под руководством Сяоюнь Вана опубликовала коллизионную атаку на SHA-1, показав, что найти два разных сообщения с одинаковым хешем можно с помощью методов, гораздо более эффективных, чем метод грубой силы.

Спустя годы, в 2017, команда SHAttered продемонстрировала первое практическое столкновение, используя кластер графических процессоров для поиска двух разных файлов PDF с одинаковым хэшем SHA-1. В 2020 последующая статья показала, что коллизии выбранных префиксов — более опасный вариант — вполне возможны. SHA-1 больше не был просто слабым; оно было сломано. Ответом на перерыв SHA-1 стало введение SHA-2, семейства из четырех функций: SHA-224, SHA-256, SHA-384 и SHA-512.

SHA-2 — семейство начала 2000-х (224, 256, 384, 512 и более поздние усеченные 512/224 и 512/256) построен на той же конструкции

Эти четыре работают с разными размерами состояний и разными размерами блоков, но используют ту же фундаментальную конструкцию, что и SHA-1. Семейство SHA-2 было опубликовано в 2001, за несколько лет до серьезных прорывов в SHA-1, но оно не получило широкого распространения до тех пор, пока крах SHA-1 не стал конкретным. SHA-256 создает 256-битный хэш и теперь является стандартным выбором для новых приложений. SHA-512 создает 512-битный хэш и часто работает быстрее на 64-битных процессорах, поскольку работает с 64-битными словами вместо 32-битных слов.

Соглашение об именах для SHA-2 является источником путаницы. Функции называются SHA-256, SHA-384 и SHA-512, и все они являются частью семейства SHA-2. Когда кто-то говорит SHA-2, он имеет в виду философию проектирования и конструкцию Меркла-Дамгорда, а не какой-то отдельный алгоритм. Цифры в именах — это выходная ширина в битах, а не схема версии. SHA-256 не является обновлением SHA-1; это современный дизайн, использующий ту же структуру, но с лучшими защитными свойствами.

Документы репозитория продемонстрировали SHA-1 коллизий без восстановления неиспользованной теоретической истории.

Внутри конструкции Меркла-Дамгорда, которую используют SHA-1 и SHA-2, функция сжатия обрабатывает входные данные блок за блоком. Состояние переносится из одного блока в другой, а окончательное состояние выводится в виде дайджеста. Функция сжатия SHA-256 использует 32-битные операции и 256-битное состояние, поэтому она обрабатывает 512-битные блоки. Функция сжатия SHA-512 использует 64-битные операции и 512-битное состояние, поэтому она обрабатывает 1024-битные блоки. Этот выбор влияет на производительность и пропускную способность — SHA-512 часто работает быстрее, поскольку 64-битная арифметика является встроенной в современное оборудование.

Решение между SHA-256 и SHA-512 для новой системы обычно основывается на тестировании производительности и ограничениях пространства, а не на безопасности, поскольку по состоянию на начало 2020-х годов оба варианта все еще безопасны. Хэш-калькулятор ToolAcre SHA предоставляет SHA-256, SHA-384 и SHA-512, и когда читатели сравнивают дайджесты рядом, они видят разницу в четыре символа между SHA-256 (64 шестнадцатеричные символы) и SHA-512 (128 шестнадцатеричных символов).

SHA-3 находится за пределами поддерживаемого API; история соревнований не подтверждается данными хранилища

Мотивы замены SHA-1 были ясны к началу 2000-х годов, поэтому NIST начал процесс выбора SHA-3. Вместо того, чтобы разрабатывать замену изолированно, NIST открыл соревнование для криптографического исследовательского сообщества. Целью было выбрать хеш-функцию, которая фундаментально отличалась от конструкции Меркла-Дамгорда, чтобы получить доверие от разнообразия проектов. Несколько команд подали заявки, и в течение нескольких лет конкурс выбрал Кечака победителем. Keccak представлял собой губчатую конструкцию, другой способ построения хэш-функции, который ранее не использовался в стандарте.

SHA-3 — это NIST стандартизация Keccak, завершенная в 2015. В отличие от SHA-2, который представляет собой семейство алгоритмов, SHA-3 обычно называют одним алгоритмом, хотя он тоже имеет несколько значений ширины. SHA-3 пока не получил широкого распространения, что поразительно, учитывая, что он является стандартом уже почти десять лет. Причина в том, что SHA-2 не сломан. Нет серьезных причин с точки зрения безопасности для обновления с SHA-2 до SHA-3. Web Crypto API браузера реализует SHA-1 и SHA-2, но не SHA-3, поэтому ToolAcre SHA хеш-калькулятор не предлагает SHA-3.

SHA-2 остается инструментом по умолчанию; в этой статье избегается неподтвержденное универсальное заявление о безопасности.

Почему SHA-2 до сих пор повсюду — это центральный вопрос выбора алгоритма хеширования. SHA-2 не имеет известных практических коллизий. Аппаратные реализации являются зрелыми. Его поддерживают все языки программирования и платформы. Изменение алгоритма хеширования системы является разрушительным: каждый сохраненный хеш необходимо переносить или сохранять для проверки, необходимо обновлять каждую точку интеграции и проводить тестирование, чтобы убедиться, что новый алгоритм работает с каждой последующей системой.

Для систем, где SHA-2 все еще находится в безопасности, такое нарушение не оправдано. Для новых систем и новых протоколов разумным значением по умолчанию является SHA-2. Хэш-калькулятор ToolAcre SHA показывает SHA-256 и SHA-512 на видном месте, потому что именно их должны использовать новые приложения. SHA-1 указан как устаревший. SHA-384 показан для полноты и для случаев использования, где это особенно необходимо.

Чего это не касается — внутренностей Кечака, которые заслуживают отдельного поста.

Будущее стандартов хеширования на данный момент неясно. SHA-3 безопасен и зрел, и он предоставляет альтернативу, если SHA-2 когда-либо сломается. Квантовые вычисления представляют собой долгосрочную угрозу для всех существующих хэш-функций, но проекты квантовоустойчивых хэш-функций являются открытой областью исследований. NIST проводит конкурс пост-квантовой криптографии, в котором выбираются алгоритмы, предназначенные для защиты от квантовых атак, но хэш-функции не являются приоритетом в этом конкурсе по сравнению с системами с открытым ключом.

Для практического применения в 2020-х годах SHA-256 является ответом на вопрос «какой хэш мне следует использовать?» Для проверки целостности, адресации контента и снятия отпечатков пальцев стандартом является SHA-256. Для систем, которым требуется более широкий дайджест, SHA-512 обычно работает быстрее на 64-битном оборудовании. SHA-384 чаще всего встречается в спецификациях набора шифров TLS. SHA-1 предназначен только для проверки устаревших версий. Хэш-калькулятор ToolAcre SHA предоставляет все четыре алгоритма веб-криптографии, поэтому разработчики могут видеть их результаты.

Вывод: три поколения, одна фамилия — хеш-калькулятор ToolAcre SHA охватывает алгоритмы SHA-1 и SHA-2, предоставляемые браузером.

Понимание истории SHA проясняет, почему цифры и имена означают то, что они делают, и почему выбор, сделанный в 1990-х и 2000-х годах, по-прежнему определяет, что делают новые приложения сегодня. SHA-0 был незаметно отозван, SHA-1 был взломан в результате практических атак, SHA-2 все еще находится в безопасности, а SHA-3 представляет собой альтернативную конструкцию, выбранную для обеспечения надежности в будущем. Новый код должен использовать SHA-256 для хеширования общего назначения. Устаревшие системы по-прежнему используют SHA-1, и для взаимодействия с этими системами требуется возможность вычисления хэшей SHA-1.

Хэш-калькулятор ToolAcre SHA воплощает эту точку зрения: он предлагает SHA-256 по умолчанию, SHA-512 как более широкий вариант, SHA-384 для особых требований и SHA-1, помеченный как устаревший. Это предоставляет разработчикам точные инструменты и точную маркировку. Реализация Web Crypto в браузере предоставляет эти алгоритмы, и ToolAcre использует эту реализацию напрямую, а не отправляет собственный код. Этот выбор отражает десятилетия криптографической эволюции и текущее состояние практики.