SHA-2 - SHA-2
Безопасные алгоритмы хеширования | |
---|---|
Концепции | |
хэш-функции · SHA · DSA | |
Основные стандарты | |
SHA-0 · SHA-1 · SHA-2 · SHA-3 | |
Общий | |
---|---|
Дизайнеров | Национальное Агенство Безопасности |
Впервые опубликовано | 2001 |
Серии | ( SHA-0 ), SHA-1 , SHA-2, SHA-3 |
Сертификация | FIPS PUB 180-4, CRYPTREC , NESSIE |
Деталь | |
Размеры дайджеста | 224, 256, 384 или 512 бит |
Состав | Конструкция Меркла – Дамгарда с функцией сжатия Дэвиса – Мейера. |
Раундов | 64 или 80 |
Лучший публичный криптоанализ | |
Атака 2011 года нарушает сопротивление прообразу для 57 из 80 раундов SHA-512 и 52 из 64 раундов для SHA-256.
Атака псевдо-коллизией против до 46 раундов SHA-256. SHA-256 и SHA-512 подвержены атакам на расширение длины . Если угадать скрытую часть состояния, атаки по увеличению длины на SHA-224 и SHA-384 будут успешными с вероятностью 2 - (256−224) = 2 −32 > 2 −224 и 2 - (512−384) = 2 −128. > 2 −384 соответственно. |
SHA-2 ( Secure Hash Algorithm 2 ) - это набор криптографических хеш-функций, разработанный Агентством национальной безопасности США (NSA) и впервые опубликованный в 2001 году. Они построены с использованием конструкции Меркла-Дамгарда из функции одностороннего сжатия сам построен с использованием структуры Дэвиса-Мейера из специализированного блочного шифра .
SHA-2 включает в себя значительные изменения по сравнению со своим предшественником SHA-1 . Семейство SHA-2 состоит из шести хэш-функций с дайджестами (хеш-значениями), которые составляют 224, 256, 384 или 512 бит: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA. -512/256 . SHA-256 и SHA-512 - это новые хэш-функции, вычисляемые с использованием восьми 32-битных и 64-битных слов соответственно. В них используются разные величины сдвига и аддитивные константы, но в остальном их структуры практически идентичны, различаются только количеством раундов. SHA-224 и SHA-384 - это усеченные версии SHA-256 и SHA-512 соответственно, вычисленные с разными начальными значениями. SHA-512/224 и SHA-512/256 также являются усеченными версиями SHA-512, но начальные значения генерируются с использованием метода, описанного в Федеральных стандартах обработки информации (FIPS) PUB 180-4.
SHA-2 был впервые опубликован Национальным институтом стандартов и технологий (NIST) в качестве федерального стандарта США (FIPS). Семейство алгоритмов SHA-2 запатентовано в патенте США 6829355. Соединенные Штаты выпустили патент по бесплатной лицензии.
По состоянию на 2011 год лучшие публичные атаки нарушают устойчивость к прообразам для 52 из 64 раундов SHA-256 или 57 из 80 раундов SHA-512 и сопротивление столкновениям для 46 из 64 раундов SHA-256.
Стандарт хеширования
С публикацией FIPS PUB 180-2 NIST добавил три дополнительных хэш-функции в семейство SHA. Все алгоритмы известны как SHA-2, названные в соответствии с длиной их дайджеста (в битах): SHA-256, SHA-384 и SHA-512.
Алгоритмы были впервые опубликованы в 2001 году в проекте FIPS PUB 180-2, после чего были приняты общественное рассмотрение и комментарии. В августе 2002 года FIPS PUB 180-2 стал новым стандартом Secure Hash Standard , заменив FIPS PUB 180-1, который был выпущен в апреле 1995 года. Обновленный стандарт включал исходный алгоритм SHA-1 с обновленными техническими обозначениями, соответствующими описанию внутренняя работа семейства SHA-2.
В феврале 2004 г. было опубликовано уведомление об изменении для FIPS PUB 180-2, в котором указывается дополнительный вариант, SHA-224, определенный для соответствия длине ключа двухключевого Triple DES . В октябре 2008 года стандарт был обновлен в FIPS PUB 180-3, включая SHA-224 из уведомления об изменении, но в остальном никаких фундаментальных изменений в стандарт не внесено. Основной причиной обновления стандарта было перемещение информации о безопасности хэш-алгоритмов и рекомендаций по их использованию в специальные публикации 800-107 и 800-57. Подробные тестовые данные и примеры дайджестов сообщений также были удалены из стандарта и представлены в виде отдельных документов.
В январе 2011 года NIST опубликовал SP800-131A, в котором определен переход от действующего на тот момент минимального 80-битного уровня безопасности (обеспечиваемого SHA-1), разрешенного для использования федеральным правительством до конца 2013 года, к 112-битному уровню безопасности (предоставляется по SHA-2), являющееся минимальным требованием (начиная с 2014 г.) и рекомендуемым уровнем безопасности (начиная с даты публикации в 2011 г.).
В марте 2012 года стандарт был обновлен в FIPS PUB 180-4, добавлены хэш-функции SHA-512/224 и SHA-512/256 и описан метод генерации начальных значений для усеченных версий SHA-512. Кроме того, было снято ограничение на заполнение входных данных перед вычислением хэша, что позволяет вычислять хеш-данные одновременно с генерацией контента, такого как видео- или аудиопоток в реальном времени. Заполнение последнего блока данных должно происходить до вывода хэша.
В июле 2012 года NIST пересмотрел SP800-57, который предоставляет руководство по управлению криптографическими ключами. Публикация запрещала создание цифровых подписей с хэш-безопасностью ниже 112 бит после 2013 года. В предыдущей редакции 2007 года было указано, что отсечка должна приходиться на конец 2010 года. В августе 2012 года NIST пересмотрел SP800-107 таким же образом.
Функция конкуренции NIST хэш выбран новый хэш - функцию, SHA-3 , в 2012 году Ша-3 алгоритма не является производным от SHA-2.
Приложения
Хэш-функция SHA-2 реализована в некоторых широко используемых приложениях и протоколах безопасности, включая TLS и SSL , PGP , SSH , S / MIME и IPsec .
SHA-256 участвует в процессе аутентификации программных пакетов Debian и в стандарте подписи сообщений DKIM ; SHA-512 является частью системы проверки подлинности архивного видео Международного уголовного трибунала по геноциду в Руанде . SHA-256 и SHA-512 предлагаются для использования в DNSSEC . Поставщики Unix и Linux переходят на использование 256- и 512-битного SHA-2 для безопасного хеширования паролей.
Несколько криптовалют , включая биткойн , используют SHA-256 для проверки транзакций и расчета доказательства работы или подтверждения доли . Повышение СИС SHA-2 ускорительных чипов привело к использованию Scrypt -На схем корректуры из-работы.
SHA-1 и SHA-2 - это алгоритмы безопасного хеширования, необходимые по закону для использования в определенных государственных приложениях США , включая использование в других криптографических алгоритмах и протоколах, для защиты конфиденциальной несекретной информации. FIPS PUB 180-1 также поощрял принятие и использование SHA-1 частными и коммерческими организациями. SHA-1 выводится из эксплуатации для большинства государственных нужд; Национальный институт стандартов и технологий США заявляет: «Федеральные агентства должны прекратить использование SHA-1 для ... приложений, требующих защиты от коллизий, как можно скорее, и должны использовать семейство хэш-функций SHA-2 для этих приложений после 2010 года». (курсив в оригинале). Директива NIST о том, что правительственные учреждения США должны прекратить использование SHA-1 после 2010 г., должна была ускорить переход от SHA-1.
Первоначально функции SHA-2 не были быстро приняты, несмотря на лучшую безопасность, чем SHA-1. Причины могут включать отсутствие поддержки SHA-2 в системах под управлением Windows XP SP2 или более ранней версии, а также отсутствие ощущаемой срочности, поскольку коллизии SHA-1 еще не были обнаружены. Команда Google Chrome объявила о плане постепенного прекращения поддержки сертификатов TLS, зависящих от SHA-1, в их браузере в период с конца 2014 по начало 2015 года. Точно так же Microsoft объявила, что Internet Explorer и Edge перестанут поддерживать общедоступные сертификаты SHA-1. Сертификаты TLS от февраля 2017 года. Mozilla отключила SHA-1 в начале января 2016 года, но пришлось временно повторно включить его с помощью обновления Firefox после проблем с веб-интерфейсом пользователя некоторых моделей маршрутизаторов и устройств безопасности .
Криптоанализ и проверка
Для хеш-функции, для которой L - количество битов в дайджесте сообщения , поиск сообщения, которое соответствует заданному дайджесту сообщения, всегда можно выполнить с помощью поиска методом грубой силы в 2 L оценок. Это называется атакой по прообразу и может быть практичным или непрактичным в зависимости от L и конкретной вычислительной среды. Второй критерий, обнаружение двух разных сообщений, которые производят один и тот же дайджест сообщения, известный как коллизия , требует в среднем только 2 оценок L / 2 с использованием атаки дня рождения .
Некоторые приложения, использующие криптографические хэши, такие как хранилище паролей, лишь минимально подвержены атаке коллизии . Создание пароля, который работает для данной учетной записи, требует атаки с использованием прообраза, а также доступа к хешу исходного пароля (обычно в shadow
файле), что может быть или не быть тривиальным. Обратное шифрование пароля (например, для получения пароля для попытки взломать учетную запись пользователя в другом месте) из-за атак невозможно. (Однако даже безопасный хэш пароля не может предотвратить атаки методом перебора слабых паролей .)
В случае подписания документа злоумышленник не может просто подделать подпись существующего документа - злоумышленник должен будет предъявить пару документов, один безобидный и один опасный, и заставить держателя закрытого ключа подписать безобидный документ. Существуют практические обстоятельства, при которых это возможно; до конца 2008 года можно было создавать поддельные сертификаты SSL с использованием коллизии MD5, которые принимались широко используемыми веб-браузерами.
Повышенный интерес к криптографическому анализу хешей во время соревнований SHA-3 привел к появлению нескольких новых атак на семейство SHA-2, лучшие из которых приведены в таблице ниже. Только атаки столкновения имеют практическую сложность; ни одна из атак не распространяется на хеш-функцию полного раунда.
На FSE 2012 исследователи Sony выступили с презентацией, в которой предлагалось расширить возможности псевдоколлизионных атак до 52 раундов на SHA-256 и 57 раундов на SHA-512, опираясь на атаку с использованием псевдопрообраза biclique .
Опубликовано в | Год | Метод атаки | Атака | Вариант | Раундов | Сложность |
---|---|---|---|---|---|---|
Новые коллизионные атаки против 24-шагового SHA-2 |
2008 г. | Детерминированный | Столкновение | SHA-256 | 24/64 | 2 28,5 |
SHA-512 | 24/80 | 2 32,5 | ||||
Прообразы для ступенчато-уменьшенного SHA-2 | 2009 г. | Встреча посередине | Прообраз | SHA-256 | 42/64 | 2 251,7 |
43/64 | 2 254,9 | |||||
SHA-512 | 42/80 | 2 502,3 | ||||
46/80 | 2 511,5 | |||||
Продвинутые атаки с использованием прообраза " встреча посередине" |
2010 г. | Встреча посередине | Прообраз | SHA-256 | 42/64 | 2 248,4 |
SHA-512 | 42/80 | 2 494,6 | ||||
Дифференциальная атака высшего порядка на сокращенный SHA-256 |
2011 г. | Дифференциальный | Псевдо-коллизия | SHA-256 | 46/64 | 2 178 |
33/64 | 2 46 | |||||
Bicliques для прообразов: атаки на Skein-512 и семейство SHA-2 |
2011 г. | Biclique | Прообраз | SHA-256 | 45/64 | 2 255,5 |
SHA-512 | 50/80 | 2 511,5 | ||||
Псевдо-прообраз | SHA-256 | 52/64 | 2 255 | |||
SHA-512 | 57/80 | 2 511 | ||||
Улучшение локальных коллизий: новые атаки на сокращенный SHA-256 |
2013 | Дифференциальный | Столкновение | SHA-256 | 31/64 | 2 65,5 |
Псевдо-коллизия | SHA-256 | 38/64 | 2 37 | |||
Эвристика ветвления в дифференциальном поиске коллизий с приложениями к SHA-512 |
2014 г. | Эвристический дифференциал | Псевдо-коллизия | SHA-512 | 38/80 | 2 40,5 |
Анализ SHA-512/224 и SHA-512/256 | 2016 г. | Дифференциальный | Столкновение | SHA-256 | 28/64 | практичный |
SHA-512 | 27/80 | практичный | ||||
Псевдо-коллизия | SHA-512 | 39/80 | практичный |
Официальная проверка
Реализация всех функций безопасности, утвержденных FIPS, может быть официально подтверждена с помощью программы CMVP , совместно управляемой Национальным институтом стандартов и технологий (NIST) и организацией по обеспечению безопасности связи (CSE). Для неформальной проверки пакет для генерации большого количества тестовых векторов доступен для загрузки на сайте NIST; Однако полученная проверка не заменяет формальную проверку CMVP, которая требуется по закону для определенных приложений.
По состоянию на декабрь 2013 года существует более 1300 проверенных реализаций SHA-256 и более 900 SHA-512, при этом только 5 из них способны обрабатывать сообщения с длиной в битах, не кратной восьми, при поддержке обоих вариантов.
Тестовые векторы
Хеш-значения пустой строки (т. Е. Входного текста нулевой длины).
SHA224("") 0x d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f SHA256("") 0x e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 SHA384("") 0x 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b SHA512("") 0x cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e SHA512/224("") 0x 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4 SHA512/256("") 0x c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a
Даже небольшое изменение в сообщении (с огромной вероятностью) приведет в основном к другому хешу из-за эффекта лавины . Например, добавление точки в конец следующего предложения изменяет почти половину (111 из 224) бит в хеш-коде:
SHA224("The quick brown fox jumps over the lazy dog") 0x 730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525 SHA224("The quick brown fox jumps over the lazy dog.") 0x 619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c
Псевдокод
Псевдокод для алгоритма SHA-256 следует ниже. Обратите внимание на значительное увеличение смешивания битов w[16..63]
слов по сравнению с SHA-1.
Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 232 Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63 Note 3: The compression function uses 8 working variables, a through h Note 4: Big-endian convention is used when expressing the constants in this pseudocode, and when parsing message block data from bytes to words, for example, the first word of the input message "abc" after padding is 0x61626380 Initialize hash values: (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19): h0 := 0x6a09e667 h1 := 0xbb67ae85 h2 := 0x3c6ef372 h3 := 0xa54ff53a h4 := 0x510e527f h5 := 0x9b05688c h6 := 0x1f83d9ab h7 := 0x5be0cd19 Initialize array of round constants: (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311): k[0..63] := 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 Pre-processing (Padding): begin with the original message of length L bits append a single '1' bit append K '0' bits, where K is the minimum number >= 0 such that L + 1 + K + 64 is a multiple of 512 append L as a 64-bit big-endian integer, making the total post-processed length a multiple of 512 bits such that the bits in the message are L 1 00..<K 0's>..00 <L as 64 bit integer> = k*512 total bits Process the message in successive 512-bit chunks: break message into 512-bit chunks for each chunk create a 64-entry message schedule array w[0..63] of 32-bit words (The initial values in w[0..63] don't matter, so many implementations zero them here) copy chunk into first 16 words w[0..15] of the message schedule array Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array: for i from 16 to 63 s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3) s1 := (w[i- 2] rightrotate 17) xor (w[i- 2] rightrotate 19) xor (w[i- 2] rightshift 10) w[i] := w[i-16] + s0 + w[i-7] + s1 Initialize working variables to current hash value: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7 Compression function main loop: for i from 0 to 63 S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25) ch := (e and f) xor ((not e) and g) temp1 := h + S1 + ch + k[i] + w[i] S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22) maj := (a and b) xor (a and c) xor (b and c) temp2 := S0 + maj h := g g := f f := e e := d + temp1 d := c c := b b := a a := temp1 + temp2 Add the compressed chunk to the current hash value: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + h Produce the final hash value (big-endian): digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7
Вычисление ch
и maj
значений может быть оптимизировано таким же образом , как описано для SHA-1 .
SHA-224 идентичен SHA-256, за исключением того, что:
- начальные значения хеш - функции
h0
черезh7
разные, и - вывод построен путем пропуска
h7
.
SHA-224 initial hash values (in big endian): (The second 32 bits of the fractional parts of the square roots of the 9th through 16th primes 23..53) h[0..7] := 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
SHA-512 идентичен по структуре SHA-256, но:
- сообщение разбито на 1024-битные блоки,
- начальные хеш-значения и круглые константы расширены до 64 бит,
- вместо 64 патронов 80,
- массив расписания сообщений w содержит 80 64-битных слов вместо 64 32-битных слов,
- для расширения массива расписания сообщений w цикл будет от 16 до 79 вместо от 16 до 63,
- округленные константы основаны на первых 80 простых числах 2..409,
- размер слова, используемый для вычислений, составляет 64 бита,
- добавленная длина сообщения (до предварительной обработки) в битах представляет собой 128-битное целое число с прямым порядком байтов, и
- Используемые значения сдвига и поворота различаются.
SHA-512 initial hash values (in big-endian): h[0..7] := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179 SHA-512 round constants: k[0..79] := [ 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817] SHA-512 Sum & Sigma: S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39) S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41) s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7) s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)
SHA-384 идентичен SHA-512, за исключением того, что:
- начальные значения хеш - функции
h0
черезh7
разные (взято с 9 по 16 - простых чисел) и - вывод создается путем опускания
h6
иh7
.
SHA-384 initial hash values (in big-endian):
h[0..7] := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939,
0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4
SHA-512 / t идентичен SHA-512, за исключением того, что:
- начальные значения хеш - функции
h0
черезh7
задаются функцией генерации IV ША-512 / т , - выход строится путем усечения конкатенации
h0
сквозногоh7
при т битах, - t равный 384 не допускается, вместо этого следует использовать SHA-384, как указано, и
- Значения t 224 и 256 особо упоминаются как утвержденные.
Функция генерации SHA-512 / t IV оценивает модифицированный SHA-512 в строке ASCII «SHA-512 / t », замененной десятичным представлением t . Модифицированный SHA-512 такого же , как SHA-512 , за исключением начальных значений h0
через h7
которые каждый были операции XOR с константой шестнадцатеричной 0xa5a5a5a5a5a5a5a5
.
Пример реализации C для семейства хэш-функций SHA-2 можно найти в RFC 6234.
Сравнение функций SHA
В таблице ниже внутреннее состояние означает «внутреннюю хеш-сумму» после каждого сжатия блока данных.
Алгоритм и вариант | Размер вывода (бит) |
Размер внутреннего состояния (биты) |
Размер блока (бит) |
Раундов | Операции | Защита от коллизионных атак (биты) |
Защита от атак с увеличением длины (в битах) |
Производительность на Skylake (средняя цена за клик ) | Впервые опубликовано | ||
---|---|---|---|---|---|---|---|---|---|---|---|
Длинные сообщения | 8 байт | ||||||||||
MD5 (как ссылка) | 128 | 128 (4 × 32) |
512 | 64 | And, Xor, Rot, Add (mod 2 32 ), Или | ≤ 18 (обнаружены коллизии) |
0 | 4,99 | 55.00 | 1992 г. | |
SHA-0 | 160 | 160 (5 × 32) |
512 | 80 | And, Xor, Rot, Add (mod 2 32 ), Или | <34 (обнаружены коллизии) |
0 | ≈ SHA-1 | ≈ SHA-1 | 1993 г. | |
SHA-1 | <63 (обнаружены коллизии) |
3,47 | 52,00 | 1995 г. | |||||||
SHA-2 |
SHA-224 SHA-256 |
224 256 |
256 (8 × 32) |
512 | 64 | And, Xor, Rot, Add (mod 2 32 ), Or, Shr | 112 128 |
32 0 |
7,62 7,63 |
84,50 85,25 |
2004 2001 |
SHA-384 SHA-512 |
384 512 |
512 (8 × 64) |
1024 | 80 | And, Xor, Rot, Add (mod 2 64 ), Or, Shr | 192 256 |
128 (≤ 384) 0 |
5,12 5,06 |
135,75 135,50 |
2001 г. | |
SHA-512/224 SHA-512/256 |
224 256 |
112 128 |
288 256 |
≈ SHA-384 | ≈ SHA-384 | 2012 г. | |||||
SHA-3 |
SHA3-224 SHA3-256 SHA3-384 SHA3-512 |
224 256 384 512 |
1600 (5 × 5 × 64) |
1152 1088 832 576 |
24 | И, Xor, Rot, Not | 112 128 192 256 |
448 512 768 1024 |
8,12 8,59 11,06 15,88 |
154,25 155,50 164,00 164,00 |
2015 г. |
SHAKE128 SHAKE256 |
d (произвольно) d (произвольно) |
1344 1088 |
мин ( д / 2, 128) мин ( д / 2, 256) |
256 512 |
7,08 8,59 |
155,25 155,50 |
В столбце поразрядных операций «Rot» обозначает вращение без переноса , а «Shr» обозначает логический сдвиг вправо . Все эти алгоритмы в той или иной мере используют модульное сложение, за исключением SHA-3.
Более подробные измерения производительности на современных архитектурах процессоров приведены в таблице ниже.
Архитектура процессора | Частота | Алгоритм | Размер слова (бит) | Циклов / байт x86 | МиБ / с x86 | Циклов / байт x86-64 | МиБ / с x86-64 |
---|---|---|---|---|---|---|---|
Intel Ivy Bridge | 3,5 ГГц | SHA-256 | 32 | 16,80 | 199 | 13.05 | 256 |
SHA-512 | 64 | 43,66 | 76 | 8,48 | 394 | ||
AMD Piledriver APU | 3,8 ГГц | SHA-256 | 32 | 22,87 | 158 | 18,47 | 196 |
SHA-512 | 64 | 88,36 | 41 год | 12,43 | 292 |
Номера производительности с пометкой «x86» выполнялись с использованием 32-битного кода на 64-битных процессорах, тогда как номера «x86-64» - это собственный 64-битный код. Хотя SHA-256 предназначен для 32-битных вычислений, он действительно выигрывает от кода, оптимизированного для 64-битных процессоров на архитектуре x86. 32-битные реализации SHA-512 значительно медленнее своих 64-битных аналогов. Варианты обоих алгоритмов с разными размерами вывода будут работать одинаково, поскольку функции раскрытия и сжатия сообщений идентичны, и различаются только начальные значения хеш-функции и размеры вывода. Лучшие реализации MD5 и SHA-1 выполняют от 4,5 до 6 циклов на байт на современных процессорах.
Тестирование проводилось Иллинойским университетом в Чикаго на их системе Hydra8, работающей на Intel Xeon E3-1275 V2 с тактовой частотой 3,5 ГГц, и на их системе Hydra9 с APU AMD A10-5800K с тактовой частотой 3,8 ГГц. Указанные выше скорости циклов на байт являются средней производительностью алгоритма, обрабатывающего сообщение размером 4096 байт с использованием программного обеспечения для криптографического тестирования SUPERCOP. Производительность в мегабайтах в секунду экстраполируется из тактовой частоты процессора на одном ядре; реальная производительность будет зависеть от множества факторов.
Реализации
Ниже приведен список библиотек криптографии, поддерживающих SHA-2:
- Ботан
- Надувной Замок
- Cryptlib
- Крипто ++
- Libgcrypt
- Мбед TLS
- libsodium
- Крапива
- LibreSSL
- OpenSSL
- GnuTLS
- wolfSSL
Аппаратное ускорение обеспечивается следующими расширениями процессора:
- Расширения Intel SHA : доступны на некоторых процессорах Intel и AMD x86.
- ЧЕРЕЗ PadLock
- Расширения криптографии ARMv8
Смотрите также
- Сравнение криптографических хеш-функций
- Сравнение криптографических библиотек
- Сводка по безопасности хеш-функции
- Hashcash
- HMAC
- Международная ассоциация криптологических исследований (IACR)
-
sha1sum
(sha224sum
,sha256sum
,sha384sum
Иsha512sum
) команд - Надежная отметка времени
использованная литература
дальнейшее чтение
- Анри Гилберт, Хелена Хандшу: Анализ безопасности SHA-256 и сестер. Избранные области криптографии 2003: стр. 175–193
- «Предлагаемая редакция Федерального стандарта обработки информации (FIPS) 180, Стандарт безопасного хеширования» . Федеральный регистр . 59 (131): 35317–35318. 1994-07-11 . Проверено 26 апреля 2007 .
внешние ссылки
- Описание SHA-256, SHA-384 и SHA-512 из NIST
- SHA-2 Checker - SHAChecker для проверки совместимости SSL для SHA-2
- Спецификации стандарта безопасного хеширования (SHS) - проект предлагаемого SHS (SHA-0)
- Стандарт безопасного хеширования (SHS) - Предлагаемый SHS (SHA-0)
- CSRC Cryptographic Toolkit - официальный сайт NIST для стандарта безопасного хеширования
- FIPS PUB 180-4: Secure Hash Standard (SHS) ( PDF , 834 КБ) - Текущая версия Secure Hash Standard (SHA-1, SHA-224, SHA-256, SHA-384 и SHA-512), август 2015 г.
- Тестовые векторы для SHA-256/384/512 из проекта NESSIE
- Тестовые векторы для SHA-1, SHA-2 с сайта NIST
- Проект криптографического хеширования NIST - конкурс SHA-3
- RFC 3874 : «224-битная функция одностороннего хеширования: SHA-224»
- RFC 6234 : «Американские алгоритмы безопасного хеширования (HMAC и HKDF на основе SHA и SHA)»; содержит пример реализации C