SHA-2
Secure Hash Algorithm 2 (SHA-2) — собирательное название однонаправленных хеш-функций SHA-224 , SHA-256, SHA-384 и SHA-512. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной длины.
Хеш-функции разработаны Агенством национальной безопасности США и опубликованы Национальным институтом стандартов и технологий в качестве Федерального стандарта обработки информации FIPS PUB 180-2 в 2002 году. В этот стандарт также была включена хеш-функция SHA-1, разработанная ещё в 1995. В феврале 2004 в FIPS PUB 180-2 была добавлена SHA-224, а в сентябре того же года был опубликован стандарт RFC 3874 "Однонаправленная хеш-функция SHA-224". Все эти хеш-функции запатентованы.[1] Агентство национальной безопасности от лица государства выпустило патент под лицензией Royalty Free.[2]
Алгоритм
В следующей таблице показаны некоторые характеристики различных вариантов SHA-2. Внутреннее состояние обозначает «внутреннюю хеш-сумму» после после каждого сжатия блока данных:
Вариант | Длина дайджеста сообщения (бит) | Длина внутреннего состояния (бит) | Длина блока (бит) | Максимальная длина сообщения (бит) |
Длина слова (бит) | Количество циклов | Операции |
---|---|---|---|---|---|---|---|
SHA-256/224 | 256/224 | 256 | 512 | 264 − 1 | 32 | 64 | ǁ, +, and, or, xor, shr, rotr |
SHA-512/384 | 512/384 | 512 | 1024 | 2128 − 1 | 64 | 80 | ǁ, +, and, or, xor, shr, rotr |
При вычислении SHA-256 и SHA-512 используются, соответственно, 32- и 64-битные слова. Эти функции используют разные величины сдвига и аддитивные константы, у них различное число итераций, но в остальном их структура совершенно одинакова. Хеш-функции SHA-224 и SHA-384 являются усечёнными версиями SHA-256 и SHA-512, вычисляемых с другими начальными константами.
Применение
См. также Применение хеширования
Хеш-функции SHA-2 не имеют такого широкого распространения, как MD5 и SHA-1, несмотря на обнаруженные у последних недостатки. Хеш-функции SHA-2 используются для проверки целостности данных и в различных криптографических схемах.
Некоторые примеры применения SHA-2 указаны в таблице:
Область применения | Детали |
---|---|
S-MIME | SHA224, SHA256, SHA384 или SHA512-дайджесты сообщений[3] |
OpenLDAP | SHA256, SHA384 или SHA512-хеши паролей |
DNSSEC | SHA256-дайджесты DNSKEY в протоколе DNSSEC[4] |
FreeBSD | SHA256-дайджесты дистрибутивов портов FreeBSD |
Debian GNU/Linux | SHA256-дайджесты файлов дистрибутива |
X.509 | SHA224, SHA256, SHA384 и SHA512 используются для создания электронной подписи сертификата[5] |
Криптонанализ
Хеш-функции SHA-2, в отличие от SHA-1, пока не подвергались тщательному исследованию открытого криптографического сообщества, поэтому их безопасноcть еще не подтверждена. Гилберт и Хандшух в 2003 провели исследование SHA-2, но не нашли никаких уязвимостей.[6]
Примеры и псевдокод
Примеры
Ниже приведены примеры хешей SHA-2. Для всех сообщений подразумевается использование кодировки ASCII.
SHA-224("The quick brown fox jumps over the lazy dog") = 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525
SHA-256("The quick brown fox jumps over the lazy dog") = D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592
SHA-384("The quick brown fox jumps over the lazy dog") = CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50 9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1
SHA-512("The quick brown fox jumps over the lazy dog") = 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64 2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6
Малейшее изменение сообщения в подавляющем большинстве случаев приводит к совершенно другому хешу вследствие лавинного эффекта. К примеру, при изменении dog
на cog
получится:
SHA-256("The quick brown fox jumps over the lazy cog") = E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE
Псевдокод SHA-256
Пояcнения: Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 232 message — исходное двоичное сообщение m — преобразованное сообщение ǁ обозначает операцию битового присоединения (битовая конкатенация) Инициализация переменных (первые 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 Предварительная обработка: m := message ǁ [единичный бит] m := m ǁ [k нулевых бит], где k наименьшее неотрицательное число такое, что битовая длина итогового сообщения будет ≡ 448 (mod 512) (сравнима по модулю 512 c 448) m := m ǁ Длина(message) — длина исходного сообщения в битах в виде 64-битного числа с порядком байтов от старшего к младшему Далее сообщения обрабатывается последовательными порциями по 512 бит: разбить сообщение на куски по 512 бит для каждого куска разбить кусок на 16 слов длиной 32 бита: w[0..15] Сгенерировать дополнительные 48 слов: для i от 16 до 63 s0 := (w[i-15] rotr 7) xor (w[i-15] rotr 18) xor (w[i-15] shr 3) s1 := (w[i-2] rotr 17) xor (w[i-2] rotr 19) xor (w[i-2] shr 10) w[i] := w[i-16] + s0 + w[i-7] + s1 Инициализация вспомогательных переменных: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7 Основной цикл: для i от 0 до 63 s0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22) maj := (a and b) xor (a and c) xor (b and c) t2 := s0 + maj s1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25) ch := (e and f) xor ((not e) and g) t1 := h + s1 + ch + k[i] + w[i] h := g g := f f := e e := d + t1 d := c c := b b := a a := t1 + t2 Добавить полученные значения к ранее вычисленному результату: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + h Получить итоговое значения хеша: digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7
SHA-224 идентичен SHA-256, за исключением:
- переменные
h0
..h7
имеют другие начальные значения, - в итоговом хеше опускается значение
h7
.
SHA-512 имеет идентичную структуру, но:
- слова имеют длину 64 бита,
- используется 80 раундов вместо 64,
- переменные и круговые константы расширены до 64 бит,
- в сдвиг в операциях
rotr
иshr
производится на другое число позиций.
SHA-384 идентичен SHA-512, за исключением:
- переменные
h0
..h7
имеют другие начальные значения, - в итоговом хеше опускаются значения
h6
иh7
.
Примечания
- ↑ patent 6829355 (англ.)
- ↑ "Licensing Declaration for US patent 6829355". Дата обращения: 17 февраля 2008.
{{cite journal}}
: Cite journal требует|journal=
(справка) - ↑ draft-ietf-smime-sha2-08 (англ.): "Using SHA2 Algorithms with Cryptographic Message Syntax"
- ↑ RFC 4509: "Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs)"
- ↑ RFC 4055: "Additional Algorithms and Identifiers for RSA Cryptography for use in the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile"
- ↑ Henri Gilbert. "Security analysis of SHA-256 and sisters" (fee required). Lecture notes in computer science. Springer, Berlin. ISSN 0302-9743. Дата обращения: 30 января 2008.
{{cite journal}}
: Неизвестный параметр|coauthors=
игнорируется (|author=
предлагается) (справка)
См. также
- SHA-1
- Хеширование
- Агентство национальной безопасности (США)
- Национальный институт стандартов и технологий (США)
- FIPS
Внешние ссылки
- RFC 3874 (англ.) — A 224-bit One-way Hash Function: SHA-224, сентябрь 2004
- RFC 4634 (англ.) — US Secure Hash Algorithms (SHA and HMAC-SHA), июль 2006
- RFC 4509 (англ.) — Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs), май 2006
- RFC 5289 (англ.) — TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM). август 2008
- FIPS 180-2: Secure Hash Standard (SHS) (англ.)
- [1] Генератор различных типов хешей.
Это заготовка статьи по криптографии. Помогите Википедии, дополнив её. |