SHA-2

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Snooker~ruwiki (обсуждение | вклад) в 21:40, 9 ноября 2008 (Применение: дополнение). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

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-2
Схема одной итерации алгоритмов SHA-2

При вычислении 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.

Примечания

  1. patent 6829355 (англ.)
  2. "Licensing Declaration for US patent 6829355". Дата обращения: 17 февраля 2008. {{cite journal}}: Cite journal требует |journal= (справка)
  3. draft-ietf-smime-sha2-08 (англ.): "Using SHA2 Algorithms with Cryptographic Message Syntax"
  4. RFC 4509: "Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs)"
  5. 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"
  6. 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= предлагается) (справка)

См. также

Внешние ссылки

  • 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] Генератор различных типов хешей.