17:27 SHA-2 | |
SHA-2 ( Secure Hash Algorithm 2 ) представляет собой набор криптографических хеш-функций, разработанных Агентством национальной безопасности США (NSA). Они построены с использованием структуры Меркля – Дамгарда , из самой функции одностороннего сжатия , построенной с использованием структуры Дэвиса – Мейера из (классифицированного) специализированного блочного шифра.
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, но начальные значения генерируются с использованием метода, описанного в PUB 180-4 С публикацией FIPS PUB 180-2, NIST добавил три дополнительные хеш-функции в семейство SHA. Алгоритмы вместе известны как SHA-2, названные в честь их длин дайджеста (в битах): SHA-256, SHA-384 и SHA-512. Алгоритмы были впервые опубликованы в 2001 году в проекте FIPS PUB 180-2, когда были приняты общественные обзоры и комментарии. В августе 2002 года FIPS PUB 180-2 стал новым стандартом безопасного хэширования , заменив FIPS PUB 180-1, который был выпущен в апреле 1995 года. Обновленный стандарт включал оригинальный алгоритм SHA-1 с обновленными техническими обозначениями, соответствующими описанию внутренняя работа семьи 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 для проверки транзакций и расчета подтверждения работы или подтверждения ставки . Рост числа микросхем ускорителя ASIC SHA-2 привел к использованию основанных на сценариях схем проверки работоспособности. SHA-1 и SHA-2 - это алгоритмы безопасного хеширования, требуемые законом для использования в определенных приложениях правительства США , включая использование в других криптографических алгоритмах и протоколах, для защиты конфиденциальной неклассифицированной информации. FIPS PUB 180-1 также поощряет принятие и использование SHA-1 частными и коммерческими организациями. SHA-1 выводится на пенсию для большинства государственных нужд; Национальный институт стандартов и технологий США говорит: «Федеральные агентства должны прекратить использование SHA-1 для ... приложений, которым требуется защита от столкновений, как только это станет практически возможным, и должны использовать семейство хэш-функций SHA-2 для этих приложений после 2010 года» (акцент в оригинале). Директива NIST о том, что правительственные учреждения США должны прекратить использование SHA-1 после 2010 года , надеялась ускорить миграцию с SHA-1 Хеш-значения пустой строки (т. Е. Входного текста нулевой длины). SHA224 ( "") 0x d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f SHA256 ( "") 0x e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 SHA384 ( "") 0x 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b SHA512 ( "") 0x cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927d3e SHA512 / 224 ( "") 0x 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4 SHA512 / 256 ( "") 0x c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a Даже небольшое изменение в сообщении (с подавляющей вероятностью) приведет к большей степени различному хешу из-за лавинного эффекта . Например, добавление точки в конец следующего предложения изменяет почти половину (111 из 224) битов в хэше: SHA224 (« Быстрая коричневая лиса перепрыгивает через ленивую собаку ») 0x 730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525 SHA224 ( « быстрая коричневая лиса прыгает через ленивую собаку . ») 0x 619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c Псевдокод для алгоритма SHA-256 выглядит следующим образом. Обратите внимание на большое увеличение смешивания между битами w[16..63]слов по сравнению с SHA-1. Примечание 1: Все переменные представляют собой 32-разрядные целые числа без знака, и сложение вычисляется по модулю 2 32 Примечание 2: Для каждого раунда имеется одна константа раунда k [i] и одна запись в массиве расписания сообщений w [i], 0 ≤ i ≤ 63 Примечание 3: Функция сжатия использует 8 рабочих переменных, от a до h. Примечание 4: Соглашение с прямым порядком байтов используется при выражении констант в этом псевдокоде и при анализе данных блока сообщений от байтов до слов, например, первое слово входное сообщение "abc" после заполнения 0x61626380 Инициализировать хеш-значения: (первые 32 бита дробных частей квадратных корней первых 8 простых чисел 2..19): h0: = 0x6a09e667 h1: = 0xbb67ae85 h2: = 0x3c6ef372 h3: = 0xa54ff53a h4: = 0x510e527f h5: = 0x9b05688c h6: = 0x1f83d9ab h7: = 0x5be0cd19 Инициализировать массив круглых констант: (первые 32 бита дробных частей корней куба первых 64 простых чисел 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 Предварительная обработка (Padding): начать с исходного сообщения длиной L бит добавить один бит «1» добавить K '0' битов, где K - это минимальное число> = 0, так что L + 1 + K + 64 кратно 512 добавьте L как 64-разрядное целое число с прямым порядком байтов, делая общую длину после обработки кратной 512 битам Обработайте сообщение в последовательных 512-битных фрагментах: разбить сообщение на 512-битные порции за каждый кусок создать массив расписания сообщений из 64 записей с [0,63] из 32-битных слов (Начальные значения в w [0..63] не имеют значения, поэтому многие реализации обнуляют их здесь) скопировать кусок в первые 16 слов w [0..15] массива расписания сообщений Расширьте первые 16 слов на оставшиеся 48 слов w [16..63] массива расписания сообщений: для i от 16 до 63 s0: = (w [i-15] rightrotate 7) xor (w [i-15] rightrotate 18) xor (w [i-15] righthift 3) s1: = (w [i-2] rightrotate 17) xor (w [i-2] rightrotate 19) xor (w [i-2] righthift 10) w [i]: = w [i-16] + s0 + w [i-7] + s1 Инициализируйте рабочие переменные для текущего значения хеша: a: = h0 b: = h1 c: = h2 d: = h3 е: = h4 f: = h5 г: = h6 h: = h7 Основной цикл функции сжатия: для i от 0 до 63 S1: = (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25) ch: = (e и f) xor (( не e) и g) temp1: = h + S1 + ch + k [i] + w [i] S0: = ( правостороннее 2) xor ( правостороннее 13) xor ( правостороннее 22) maj: = (a и b) xor (a и c) xor (b и c) temp2: = S0 + May ч: = г г: = ф f: = e e: = d + temp1 д: = с с: = б б: = а a: = temp1 + temp2 Добавьте сжатый кусок к текущему значению хэша: h0: = h0 + a h1: = h1 + b h2: = h2 + c h3: = h3 + d h4: = h4 + e h5: = h5 + f h6: = h6 + g h7: = h7 + h Создайте окончательное значение хеша (big-endian): digest: = hash: = h0 добавьте h1 добавьте h2 добавьте h3 добавьте h4 добавьте h5 добавьте h6 добавьте h7 Вычисление chи majзначений может быть оптимизировано таким же образом , как описано для SHA-1 . SHA-224 идентичен SHA-256, за исключением того, что: начальные значения хеша h0через h7разные, и выход строится путем пропуска h7. Начальные хеш-значения SHA-512 (в старшем порядке): h [0..7]: = 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179 Круглые константы SHA-512: 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: = ( правостороннее 28) xor ( правостороннее 34) xor ( правостороннее 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] righthift 7) s1: = (w [i-2] rightrotate 19) xor (w [i-2] rightrotate 61) xor (w [i-2] righthift 6) Начальные хеш-значения SHA-384 (в старшем порядке): h [0..7]: = 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4 | |
|
Всього коментарів: 0 | |