SHA-2: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
оформление, орфография, дополнение
оформление
Строка 1: Строка 1:
'''SHA-2''' ([[Английский язык|англ.]] ''Secure Hash Algorithm Version 2'' — безопасный алгоритм хеширования, версия 2) — собирательное название однонаправленных [[хеш-функция|хеш-функций]] SHA-224 , SHA-256, SHA-384 и SHA-512. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной битовой длины.
'''SHA-2''' ([[Английский язык|англ.]] ''Secure Hash Algorithm Version 2'' — безопасный алгоритм хеширования, версия 2) — собирательное название однонаправленных [[хеш-функция|хеш-функций]] ''SHA-224, SHA-256, SHA-384'' и ''SHA-512''. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной битовой длины.


Хеш-функции разработаны [[Агентство национальной безопасности (США)|Агенством национальной безопасности США]] и опубликованы [[Национальный институт стандартов и технологий (США)|Национальным институтом стандартов и технологий]] в [[FIPS|Федеральном стандарте обработки информации]] FIPS PUB 180-2 в августе [[2002|2002 года]].<ref>[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf FIPS PUB 180-2]{{ref-en}}</ref>
Хеш-функции разработаны [[Агентство национальной безопасности (США)|Агенством национальной безопасности США]] и опубликованы [[Национальный институт стандартов и технологий (США)|Национальным институтом стандартов и технологий]] в [[FIPS|Федеральном стандарте обработки информации]] ''FIPS PUB 180-2'' в августе [[2002|2002 года]].<ref>[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf ''FIPS PUB 180-2'']{{ref-en}}</ref>
В этот стандарт также вошла хеш-функция [[SHA-1]], разработанная в [[1995|1995 году]].
В этот стандарт также вошла хеш-функция ''[[SHA-1]]'', разработанная в [[1995|1995 году]].
В феврале [[2004|2004 года]] в FIPS PUB 180-2 была добавлена SHA-224<ref>[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf FIPS PUB 180-2 (with Change Notice to include SHA-224)]{{ref-en}}</ref><!--, а в сентябре того же года был опубликован стандарт RFC 3874 "Однонаправленная хеш-функция SHA-224"-->.
В феврале [[2004|2004 года]] в ''FIPS PUB 180-2'' была добавлена ''SHA-224''<ref>[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf ''FIPS PUB 180-2'' (with Change Notice to include SHA-224)]{{ref-en}}</ref><!--, а в сентябре того же года был опубликован стандарт RFC 3874 "Однонаправленная хеш-функция SHA-224"-->.
В октябре [[2008|2008 года]] вышла новая редакция стандарта — FIPS PUB 180-3.<ref>[http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf FIPS PUB 180-3]{{ref-en}}</ref>
В октябре [[2008|2008 года]] вышла новая редакция стандарта&nbsp;''FIPS PUB 180-3''.<ref>[http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf ''FIPS PUB 180-3'']{{ref-en}}</ref>


В июле [[2006|2006 года]] появился стандарт RFC 4634 "US Secure Hash Algorithms (SHA и HMAC-SHA)", описывающий SHA-1 и всё семейство SHA-2.
В июле [[2006|2006 года]] появился стандарт RFC 4634 «Безопасные хеш-алгоритмы США (''SHA'' и ''HMAC-SHA'')», описывающий ''SHA-1'' и всё семейство ''SHA-2''.


Агентство национальной безопасности от лица [[США|государства]] выпустило патент на SHA-2<ref>[http://v3.espacenet.com/textdoc?DB=EPODOC&IDX=US6829355||US patent 6829355]{{ref-en}}</ref> под лицензией [[Royalty Free]].<ref>{{cite journal |title=Licensing Declaration for US patent 6829355.|url=https://datatracker.ietf.org/ipr/858/|accessdate=2008-02-17}}{{ref-en}}</ref>
Агентство национальной безопасности от лица [[США|государства]] выпустило патент на ''SHA-2''<ref>[http://v3.espacenet.com/textdoc?DB=EPODOC&IDX=US6829355||US patent 6829355]{{ref-en}}</ref> под лицензией ''[[Royalty Free]]''.<ref>{{cite journal |title=Licensing Declaration for US patent 6829355.|url=https://datatracker.ietf.org/ipr/858/|accessdate=2008-02-17}}{{ref-en}}</ref>


== Алгоритм ==
== Алгоритм ==

=== Общее описание ===
=== Общее описание ===
[[Изображение:SHA-2.svg|right|thumb|400px|Схема одной итерации алгоритмов SHA-2]]
[[Изображение:SHA-2.svg|right|thumb|400px|Схема одной итерации алгоритмов SHA-2]]
Хеш-функции семейства SHA-2 построены на основе структуры [[:en:Merkle–Damgård construction|Меркла—Дамгарда]]{{ref-en}}.
Хеш-функции семейства ''SHA-2'' построены на основе структуры [[:en:Merkle–Damgård construction|Меркла&nbsp;— Дамгарда]]{{ref-en}}.


Исходное сообщение после дополнения разбивается на блоки, каждый блок — на 8 слов. Алгоритм пропускает каждый блок сообщения через цикл с 64 итерациями (80 для SHA-512/384). На каждой итерации 2 слова преобразуются, функцию преобразования задают остальные слова. Результаты обработки каждого блока складываются. [[Сумма]] есть значение хеш-функции. Подробнее — см. [[SHA-2#Псевдокод_SHA-256|псевдокод]].
Исходное сообщение после дополнения разбивается на блоки, каждый блок&nbsp;— на 8 слов. Алгоритм пропускает каждый блок сообщения через цикл с 64-мя итерациями (80 для ''SHA-512/384''). На каждой итерации 2 слова из восьми преобразуются, функцию преобразования задают остальные слова. Результаты обработки каждого блока складываются. [[Сумма]] есть значение хеш-функции. Подробнее&nbsp;— см. [[SHA-2#Псевдокод_SHA-256|псевдокод]].


Алгоритм использует следующие битовые операции:
Алгоритм использует следующие битовые операции:
* &#449; — [[Конкатенация]]
* ǁ&nbsp;— [[Конкатенация]],
* + — [[Сложение]]
* +&nbsp;— [[Сложение]],
* and — [[Конъюнкция#Программирование|Побитовое "И"]]
* ''and''&nbsp;— [[Конъюнкция#Программирование|Побитовое «И»]],
* or — [[Дизъюнкция#Программирование|Побитовое "ИЛИ"]]
* ''or''&nbsp;— [[Дизъюнкция#Программирование|Побитовое «ИЛИ»]],
* xor — [[Сложение по модулю 2#Программирование|Исключающее "ИЛИ"]]
* ''xor''&nbsp;— [[Сложение по модулю 2#Программирование|Исключающее «ИЛИ»]],
* shr — [[Битовые операции#Логический сдвиг|Логический сдвиг вправо]]
* ''shr''&nbsp;— [[Битовые операции#Логический сдвиг|Логический сдвиг вправо]],
* rotr — [[Битовые операции#Циклический сдвиг|Циклический сдвиг вправо]]
* ''rotr''&nbsp;— [[Битовые операции#Циклический сдвиг|Циклический сдвиг вправо]].


В следующей таблице показаны некоторые технические характеристики различных вариантов SHA-2. ''Внутреннее состояние'' обозначает «внутреннюю хеш-сумму» после обработки каждого блока данных:
В следующей таблице показаны некоторые технические характеристики различных вариантов SHA-2. ''Внутреннее состояние'' обозначает «внутреннюю хеш-сумму» после обработки каждого блока данных:
Строка 37: Строка 38:
!Количество итераций в цикле
!Количество итераций в цикле
|- align="center"
|- align="center"
| ''SHA-256/224'' || 256/224 || 256 || 512 || 2<sup>64</sup> &minus; 1 || 32 || 64
| ''SHA-256/224'' || 256/224 || 256 || 512 || 2<sup>64</sup> &minus; 1 || 32 || 64
|- align="center"
|- align="center"
| ''SHA-512/384'' || 512/384 || 512 || 1024 || 2<sup>128</sup> &minus; 1 || 64 || 80
| ''SHA-512/384'' || 512/384 || 512 || 1024 || 2<sup>128</sup> &minus; 1 || 64 || 80
|}
|}




=== Псевдокод SHA-256 ===
=== Псевдокод ''SHA-256'' ===
<span style="color: green;">''Пояcнения:
<span style="color: green;">''Пояcнения:
Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 2<sup>32</sup>
Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 2<sup>32</sup>
'''message''' — исходное двоичное сообщение
''message''&nbsp;— исходное двоичное сообщение
'''m''' — преобразованное сообщение
''m''&nbsp;— преобразованное сообщение
<!-- '''&#449;''' обозначает операцию битового присоединения (битовая [[конкатенация]])''</span> -->
<!-- '''&#449;''' обозначает операцию битового присоединения (битовая [[конкатенация]])-->''</span>
<span style="color:green;">''Инициализация переменных''</span>
<span style="color:green;">''Инициализация переменных''</span>
<span style="color:green;">(первые 32 бита <em>дробных частей<em> квадратных корней первых 8 простых чисел 2..19):</span>
<span style="color:green;">(первые 32 бита <em>дробных частей<em> квадратных корней первых восьми простых чисел [от 2 до 19]):</span>
h0 := 0x6a09e667
h0 := 0x6A09E667
h1 := 0xbb67ae85
h1 := 0xBB67AE85
h2 := 0x3c6ef372
h2 := 0x3C6EF372
h3 := 0xa54ff53a
h3 := 0xA54FF53A
h4 := 0x510e527f
h4 := 0x510E527F
h5 := 0x9b05688c
h5 := 0x9B05688C
h6 := 0x1f83d9ab
h6 := 0x1F83D9AB
h7 := 0x5be0cd19
h7 := 0x5BE0CD19
<span style="color:green;">''Таблица констант''</span>
<span style="color:green;">''Таблица констант''</span>
<span style="color:green;">(первые 32 бита <em>дробных частей<em> кубических корней первых 64 простых чисел 2..311):</span>
<span style="color:green;">(первые 32 бита <em>дробных частей<em> кубических корней первых 64 простых чисел [от 2 до 311]):</span>
k&#91;0..63&#93; :=
k&#91;0..63&#93; :=
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
<span style="color:green;">''Предварительная обработка:''</span>
<span style="color:green;">''Предварительная обработка:''</span>
m := message &#449; [''единичный бит'']
m := message &#449; [''единичный бит'']
m := m &#449; [k ''нулевых бит''], <span style="color:green;">где '''k''' — наименьшее неотрицательное число такое, что битовая длина
m := m &#449; [k ''нулевых бит''], <span style="color:green;">где '''k'''&nbsp;— наименьшее неотрицательное число такое, что битовая длина
итогового сообщения будет ≡ 448 (mod 512) ([[Сравнимость по модулю|сравнима по модулю]] 512 c 448)</span>
итогового сообщения будет ≡ 448 (mod 512) ([[Сравнимость по модулю|сравнима по модулю]] 512 c 448)</span>
m := m &#449; ''Длина''(message) <span style="color:green;">— длина исходного сообщения в битах в виде 64-битного числа
m := m &#449; ''Длина''(message) <span style="color:green;">— длина исходного сообщения в битах в виде 64-битного числа
Строка 132: Строка 133:
digest = hash = h0 &#449; h1 &#449; h2 &#449; h3 &#449; h4 &#449; h5 &#449; h6 &#449; h7
digest = hash = h0 &#449; h1 &#449; h2 &#449; h3 &#449; h4 &#449; h5 &#449; h6 &#449; h7


SHA-224 идентичен SHA-256, за исключением:
''SHA-224'' идентичен ''SHA-256'', за исключением:
* для инициализации переменных <code>h0</code>..<code>h7</code> используются другие начальные значения,
* для инициализации переменных <code>h0</code><code>h7</code> используются другие начальные значения.
* в итоговом хеше опускается значение <code>h7</code>.
* в итоговом хеше опускается значение <code>h7</code>.


<span style="color:green;">''Начальные значения переменных <code>h0</code>..<code>h7</code> в SHA-224:''</span>
<span style="color:green;">''Начальные значения переменных <code>h0</code><code>h7</code> в SHA-224:''</span>
h0 := 0xc1059ed8
h0 := 0xC1059ED8
h1 := 0x367cd507
h1 := 0x367CD507
h2 := 0x3070dd17
h2 := 0x3070DD17
h3 := 0xf70e5939
h3 := 0xF70E5939
h4 := 0xffc00b31
h4 := 0xFFC00B31
h5 := 0x68581511
h5 := 0x68581511
h6 := 0x64f98fa7
h6 := 0x64F98FA7
h7 := 0xbefa4fa4
h7 := 0xBEFA4FA4


SHA-512 имеет идентичную структуру, но:
''SHA-512'' имеет идентичную структуру, но:
* слова имеют длину 64 бита,
* слова имеют длину 64 бита.
* используется 80 раундов вместо 64,
* используется 80 раундов вместо 64.
* начальные значения переменных и константы расширены до 64 бит,
* начальные значения переменных и константы расширены до 64 бит.
* в сдвиг в операциях <code>rotr</code> и <code>shr</code> производится на другое число позиций.
* в сдвиг в операциях <code>rotr</code> и <code>shr</code> производится на другое число позиций.


SHA-384 идентичен SHA-512, за исключением:
''SHA-384'' идентичен SHA-512, за исключением:
* переменные <code>h0</code>..<code>h7</code> имеют другие начальные значения,
* переменные <code>h0</code>..<code>h7</code> имеют другие начальные значения.
* в итоговом хеше опускаются значения <code>h6</code> и <code>h7</code>.
* в итоговом хеше опускаются значения <code>h6</code> и <code>h7</code>.


<span style="color:green;">''Начальные значения переменных <code>h0</code>..<code>h7</code> в SHA-384''
<span style="color:green;">''Начальные значения переменных <code>h0</code><code>h7</code> в SHA-384''
(первые 64 бита дробных частей квадратных корней простых чисел с девятого по шестнадцатое 23..53):
(первые 64 бита дробных частей квадратных корней простых чисел с девятого по шестнадцатое [от 23 до 53]):</span>
h1 := CBBB9D5DC1059ED8
</span>
h1 := cbbb9d5dc1059ed8
h2 := 629A292A367CD507
h2 := 629a292a367cd507
h3 := 9159015A3070DD17
h3 := 9159015a3070dd17
h4 := 152FECD8F70E5939
h4 := 152fecd8f70e5939
h5 := 67332667FFC00B31
h5 := 67332667ffc00b31
h6 := 8EB44A8768581511
h6 := 8eb44a8768581511
h7 := DB0C2E0D64F98FA7
h7 := db0c2e0d64f98fa7
h8 := 47B5481DBEFA4FA4
h8 := 47b5481dbefa4fa4


== Применение и сертификация ==
== Применение и сертификация ==
''См. также [[Хеширование#Применение хеширования|Применение хеширования]]''
''См. также [[Хеширование#Применение хеширования|Применение хеширования]]''


SHA-224, SHA-256, SHA-384, и SHA-512 законом США допускаются к использованию в некоторых правительственных приложениях, включая использование в рамках других криптографических алгоритмов и протоколов, для защиты информации, не имеющей грифа секретности. Стандарт также допускает использование SHA-2 частными и коммерческими организациями.<ref>[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf FIPS 180-2: Secure Hash Standard (SHS): 6. Applicability]{{ref-en}}</ref>
''SHA-224'', ''SHA-256'', ''SHA-384'' и ''SHA-512'' законом США допускаются к использованию в некоторых правительственных приложениях, включая использование в рамках других криптографических алгоритмов и протоколов, для защиты информации, не имеющей грифа секретности. Стандарт также допускает использование ''SHA-2'' частными и коммерческими организациями.<ref>[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf ''FIPS 180-2: Secure Hash Standard (SHS): 6. Applicability'']{{ref-en}}</ref>


Хеш-функции SHA-2 используются для проверки целостности данных и в различных криптографических схемах. На [[2008|2008 год]] семейство хеш-функций SHA-2 не имеет такого широкого распространения, как [[MD5]] и [[SHA-1]], несмотря на обнаруженные у последних недостатки.
Хеш-функции ''SHA-2'' используются для проверки целостности данных и в различных криптографических схемах. На [[2008|2008 год]] семейство хеш-функций ''SHA-2'' не имеет такого широкого распространения, как ''[[MD5]]'' и ''[[SHA-1]]'', несмотря на обнаруженные у последних недостатки.


Некоторые примеры применения SHA-2 указаны в таблице:
Некоторые примеры применения ''SHA-2'' указаны в таблице:
{| class="standard"
{| class="standard"
! Область применения
! Область применения
Строка 181: Строка 181:
|-
|-
| [[S/MIME]]
| [[S/MIME]]
| SHA-224, SHA-256, SHA-384 или SHA-512 дайджесты сообщений<ref>[http://tools.ietf.org/html/draft-ietf-smime-sha2-08 draft-ietf-smime-sha2-08]{{ref-en}}: "Using SHA2 Algorithms with Cryptographic Message Syntax"</ref>
| ''SHA-224'', ''SHA-256'', ''SHA-384'' или ''SHA-512'' дайджесты сообщений<ref>[http://tools.ietf.org/html/draft-ietf-smime-sha2-08 draft-ietf-smime-sha2-08]{{ref-en}}: Using SHA2 Algorithms with Cryptographic Message Syntax</ref>
|-
|-
| [[OpenLDAP]]
| [[OpenLDAP]]
| SHA-256, SHA 384 или SHA-512 хеши [[Пароль|паролей]]
| ''SHA-256'', ''SHA-384'' или ''SHA-512'' хеши [[Пароль|паролей]]
|-
|-
| [[DNSSEC]]
| [[DNSSEC]]
| SHA-256 дайджесты DNSKEY в протоколе DNSSEC<ref>RFC 4509: "Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs)"</ref>
| ''SHA-256'' дайджесты ''DNSKEY'' в протоколе ''DNSSEC''<ref>RFC 4509: Use of ''SHA-256'' in DNSSEC Delegation Signer (DS) Resource Records (RRs)</ref>
|-
|-
| [[FreeBSD]]
| [[FreeBSD]]
| SHA-256 дайджесты дистрибутивов [[FreeBSD Ports|портов FreeBSD]]
| ''SHA-256'' дайджесты дистрибутивов [[FreeBSD Ports|портов FreeBSD]]
|-
|-
| [[Debian GNU/Linux]]
| [[Debian GNU/Linux]]
| SHA-256 дайджесты файлов дистрибутива
| ''SHA-256'' дайджесты файлов дистрибутива
|-
|-
| [[X.509]]
| [[X.509]]
| SHA-224, SHA-256, SHA-384 и SHA-512 используются для создания [[Электронная цифровая подпись|электронной цифровой подписи]] сертификата<ref>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"</ref>
| ''SHA-224'', ''SHA-256'', ''SHA-384'' и ''SHA-512'' используются для создания [[Электронная цифровая подпись|электронной цифровой подписи]] сертификата<ref>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</ref>
|-
|-
| [[PGP]]
| [[PGP]]
| SHA-256, SHA-384, SHA-512 используются для создания электронной цифровой подписи<ref>RFC 4880— OpenPGP Message Format</ref>
| ''SHA-256'', ''SHA-384'', ''SHA-512'' используются для создания электронной цифровой подписи<ref>RFC 4880&nbsp;— OpenPGP Message Format</ref>
|-
|-
| [[IPSec]]
| [[IPSec]]
| Некоторые реализации поддерживают SHA-256 в протоколах [[ESP]] и [[IKE]]<ref>[http://technet.microsoft.com/en-us/library/cc749132.aspx Overview of Windows Vista Service Pack 1: New Standards]</ref>
| Некоторые реализации поддерживают ''SHA-256'' в протоколах ''[[ESP]]'' и ''[[IKE]]''<ref>[http://technet.microsoft.com/en-us/library/cc749132.aspx Overview of Windows Vista Service Pack 1: New Standards]</ref>
|-
|-
| [[DSA]]
| [[DSA]]
| Семейство SHA-2 используется для создания электронной цифровой подписи<ref>[http://csrc.nist.gov/publications/fips/fips186-2/fips186-2-change1.pdf FIPS-186 — Стандарт электронной цифровой подписи в США]</ref>
| Семейство ''SHA-2'' используется для создания электронной цифровой подписи<ref>[http://csrc.nist.gov/publications/fips/fips186-2/fips186-2-change1.pdf FIPS-186&nbsp;— Стандарт электронной цифровой подписи в США]</ref>
|-
|-
| [[SHACAL-2]]
| [[SHACAL-2]]
| Блочный алгоритм шифрования SHACAL-2 построен на основе хеш-функции SHA-256
| Блочный алгоритм шифрования ''SHACAL-2'' построен на основе хеш-функции ''SHA-256''
|}
|}




Как показали исследования<ref>Speed Comparison of Popular Crypto Algorithms [http://www.cryptopp.com/benchmarks.html]</ref>, алгоритмы SHA-2 работают в 2-3 раза медленнее других популярных хеш-алгоритмов [[MD5]], [[SHA-1]], [[Tiger]] и [[RIPEMD-160]].
Как показали исследования<ref>Speed Comparison of Popular Crypto Algorithms [http://www.cryptopp.com/benchmarks.html]</ref>, алгоритмы ''SHA-2'' работают в 2—3 раза медленнее других популярных хеш-алгоритмов [[MD5]], [[SHA-1]], [[Tiger]] и [[RIPEMD-160]].


=== Сертификация ===
=== Сертификация ===
Реализации SHA-2, как и всех Федеральных стандартов обработки информации, могут быть сертифицированы для использования в некоторых приложениях. Сертификация происходит в рамках процедуры [[:en:CMVP|Cryptographic Module Validation Program]]{{ref-en}}, которая проводится Национальным институтом стандартов и технологий США совместно с канадским Бюро безопасности связи.
Реализации ''SHA-2'', как и всех Федеральных стандартов обработки информации, могут быть сертифицированы для использования в некоторых приложениях. Сертификация происходит в рамках процедуры ''[[:en:CMVP|Cryptographic Module Validation Program]]''{{ref-en}}, которая проводится Национальным институтом стандартов и технологий США совместно с канадским Бюро безопасности связи.


На [[5 ноября]] 2008 года было сертифицировано более 250 реализаций SHA-2, 4 из которых могли оперировать сообщениями с длиной в битах некратной восьми.<ref>[http://csrc.nist.gov/groups/STM/cavp/documents/shs/shaval.htm SHS Validation List]{{ref-en}}</ref>
На [[5 ноября]] 2008 года было сертифицировано более 250-ти реализаций ''SHA-2'', четыре из которых могли оперировать сообщениями с длиной в битах некратной восьми.<ref>[http://csrc.nist.gov/groups/STM/cavp/documents/shs/shaval.htm SHS Validation List]{{ref-en}}</ref>


== Криптоанализ ==
== Криптоанализ ==
Хеш-функции SHA-2, в отличие от SHA-1, пока недостаточно изучены. В [[2003|2003 году]] Гилберт и Хандшух провели исследование SHA-2, но не нашли каких-либо уязвимостей.<ref>{{cite journal |title=Security analysis of SHA-256 and sisters |author=Henri Gilbert |coauthors=Helena Handschuh |journal=Lecture notes in computer science |publisher=Springer, Berlin |issn=0302-9743 |url=http://cat.inist.fr/?aModele=afficheN&cpsidt=15735289 |format=fee required |accessdate=2008-01-30}}</ref>
На [[2008|2008 год]] хеш-функции ''SHA-2'', в отличие от ''SHA-1'', недостаточно изучены. В [[2003|2003 году]] Гилберт и Хандшух провели исследование ''SHA-2'', но не нашли каких-либо уязвимостей.<ref>{{cite journal |title=Security analysis of SHA-256 and sisters |author=Henri Gilbert |coauthors=Helena Handschuh |journal=Lecture notes in computer science |publisher=Springer, Berlin |issn=0302-9743 |url=http://cat.inist.fr/?aModele=afficheN&cpsidt=15735289 |format=fee required |accessdate=2008-01-30}}</ref>


[[Криптоанализ]] хеш-функции подразумевает исследование устойчивости алгоритма по отношению, по меньшей мере, к следующим видам атак:
[[Криптоанализ]] хеш-функции подразумевает исследование устойчивости алгоритма по отношению, по меньшей мере, к следующим видам атак:
* нахождение [[Коллизия|коллизий]], т. е. разных сообщений с одинаковым хешем
* нахождение [[Коллизия|коллизий]], т.&nbsp;е. разных сообщений с одинаковым хешем.
* нахождение [[прообраз]]а, т. е. неизвестного сообщения по его хешу
* нахождение [[прообраз]]а, т.&nbsp;е. неизвестного сообщения по его хешу.


От устойчивости хеш-функции к нахождению коллизий зависит безопасность электронной цифровой подписи с использованием данного хеш-алгоритма. От устойчивости к нахождению прообраза зависит безопасность хранения хешей паролей для целей [[Аутентификация|аутентификации]].
От устойчивости хеш-функции к нахождению коллизий зависит безопасность электронной цифровой подписи с использованием данного хеш-алгоритма. От устойчивости к нахождению прообраза зависит безопасность хранения хешей паролей для целей [[Аутентификация|аутентификации]].


В марте [[2008|2008 года]] индийские исследователи Сомитра Кумар Санадия и Палаш Саркар опубликовали найденные ими коллизии для
В марте 2008 года индийские исследователи Сомитра Кумар Санадия и Палаш Саркар опубликовали найденные ими коллизии для
22 итераций SHA-256 и SHA-512.<ref>Somitra Kumar Sanadhya, Palash Sarkar. [http://arxiv.org/abs/0803.1220 22-Step Collisions for SHA-2] {{ref-en}}</ref> В сентябре того же года они представили метод конструирования коллизий для усечённых вариантов SHA-2 (21 итерация).<ref>Somitra Kumar Sanadhya, Palash Sarkar. [http://dx.doi.org/10.1007/978-3-540-85886-7_17 Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family] {{ref-en}}</ref>
22 итераций ''SHA-256'' и ''SHA-512''.<ref>Somitra Kumar Sanadhya, Palash Sarkar. [http://arxiv.org/abs/0803.1220 22-Step Collisions for SHA-2] {{ref-en}}</ref> В сентябре того же года они представили метод конструирования коллизий для усечённых вариантов ''SHA-2'' (21 итерация).<ref>Somitra Kumar Sanadhya, Palash Sarkar. [http://dx.doi.org/10.1007/978-3-540-85886-7_17 Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family] {{ref-en}}</ref>
<ref>[http://isc08.twisc.org/slides/S5P4_Deterministic_Constructions_of_21-Step_Collisions_for_the_SHA-2_Hash_Family.pdf Презентация "Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family"]{{ref-en}}</ref>
<ref>[http://isc08.twisc.org/slides/S5P4_Deterministic_Constructions_of_21-Step_Collisions_for_the_SHA-2_Hash_Family.pdf Презентация «Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family»]{{ref-en}}</ref>


Ввиду алгоритмической схожести SHA-2 с SHA-1 и наличия у последней потенциальных уязвимостей ведутся поиски улучшенных альтернатив.<ref>[http://www.schneier.com/blog/archives/2005/11/nist_hash_works_4.html Schneier on Security: NIST Hash Workshop Liveblogging (5)]{{ref-en}}</ref><ref>[http://www.heise-online.co.uk/security/Hash-cracked--/features/75686/2 Hash cracked - heise Security]{{ref-en}}</ref> Новый стандарт будет назван SHA-3, он будет определен конкурсом, проводимым Национальным институтом стандартов и технологий в 2008—2012 гг.<ref>[http://csrc.nist.gov/groups/ST/hash/timeline.html Tentative Timeline of the Development of New Hash Functions]{{ref-en}}</ref>
Ввиду алгоритмической схожести ''SHA-2'' с ''SHA-1'' и наличия у последней потенциальных уязвимостей ведутся поиски улучшенных альтернатив.<ref>[http://www.schneier.com/blog/archives/2005/11/nist_hash_works_4.html Schneier on Security: NIST Hash Workshop Liveblogging (5)]{{ref-en}}</ref><ref>[http://www.heise-online.co.uk/security/Hash-cracked--/features/75686/2 Hash cracked&nbsp;— heise Security]{{ref-en}}</ref> Новый стандарт будет назван ''SHA-3'', он будет определен конкурсом, проводимым Национальным институтом стандартов и технологий в 2008—2012 гг.<ref>[http://csrc.nist.gov/groups/ST/hash/timeline.html Tentative Timeline of the Development of New Hash Functions]{{ref-en}}</ref>


== Примеры ==
== Примеры ==
Ниже приведены примеры хешей SHA-2. Для всех сообщений подразумевается использование кодировки [[ASCII]].
Ниже приведены примеры хешей ''SHA-2''. Для всех сообщений подразумевается использование кодировки [[ASCII]].


SHA-224("The quick brown fox jumps over the lazy dog")
SHA-224("The quick brown fox jumps over the lazy dog")
Строка 282: Строка 282:


== См. также ==
== См. также ==
* [[MD5]]
* ''[[MD5]]''
* [[SHA-1]]
* ''[[SHA-1]]''
* [[Коллизия]]
* [[Коллизия]]
* [[Федеральные стандарты обработки информации]]
* [[Федеральные стандарты обработки информации]]
Строка 289: Строка 289:


== Внешние ссылки ==
== Внешние ссылки ==
* [http://www.insidepro.com/hashes.php Онлайн калькулятор различных типов хешей].
* [http://www.insidepro.com/hashes.php Онлайн калькулятор различных типов хешей]
* [http://www.febooti.com/products/filetweak/members/hash-and-crc/ Febooti fileTweak Hash & CRC] — программа для вычисления различных (MD5, SHA-1, SHA-2 и др.) хешей файлов
* [http://www.febooti.com/products/filetweak/members/hash-and-crc/ Febooti fileTweak Hash & CRC]&nbsp;— программа для вычисления различных (MD5, SHA-1, SHA-2 и др.) хешей файлов


=== Стандарты ===
=== Стандарты ===
* [http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf FIPS 180-3: Secure Hash Standard (SHS)]{{ref-en}}
* [http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf FIPS 180-3: Secure Hash Standard (SHS)]{{ref-en}}
* RFC 3874 {{ref-en}} — A 224-bit One-way Hash Function: SHA-224, сентябрь [[2004]]
* RFC 3874 {{ref-en}}&nbsp;— A 224-bit One-way Hash Function: SHA-224, сентябрь [[2004]]
* RFC 4634 {{ref-en}} — US Secure Hash Algorithms (SHA and HMAC-SHA), июль [[2006]]
* RFC 4634 {{ref-en}}&nbsp;— US Secure Hash Algorithms (SHA and HMAC-SHA), июль [[2006]]
<!--* RFC 4509 {{ref-en}} — Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs), май 2006
<!--* RFC 4509 {{ref-en}}&nbsp;— Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs), май 2006
* RFC 5289 {{ref-en}} — TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM). август [[2008]]-->
* RFC 5289 {{ref-en}}&nbsp;— TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM). август [[2008]]-->


=== Реализации ===
=== Реализации ===
<!-- This section should include only implementations that are commercially or algorithmically significant, such as those widely used in existing technologies and platforms -->
<!-- This section should include only implementations that are commercially or algorithmically significant, such as those widely used in existing technologies and platforms -->
* [http://www.openssl.org The OpenSSL Project] — широко используемая библиотека OpenSSL <code>crypto</code> включает [[Free software|свободные]] реализации SHA-224, SHA-256, SHA-384 и SHA-512
* [http://www.openssl.org The OpenSSL Project]&nbsp;— широко используемая библиотека OpenSSL <code>crypto</code> включает [[Free software|свободные]] реализации SHA-224, SHA-256, SHA-384 и SHA-512
* [http://www.cryptopp.com/ Crypto++ Library] — свободная реализация криптографических алгоритмов на C++
* [http://www.cryptopp.com/ Crypto++ Library]&nbsp;— свободная реализация криптографических алгоритмов на C++
* [http://www.bouncycastle.org/ Bouncy Castle Library] — свободная библиотека Java и C# классов, которая включает реализации SHA-224, SHA-256, SHA-384 и SHA-512, а также других хеш-алгоритмов [[Whirlpool]], [[Tiger]], [[RIPEMD-160|RIPEMD]], [[ГОСТ Р 34.11-94]], [[MD2]], [[MD4]] и [[MD5]].
* [http://www.bouncycastle.org/ Bouncy Castle Library]&nbsp;— свободная библиотека Java и C# классов, которая включает реализации SHA-224, SHA-256, SHA-384 и SHA-512, а также других хеш-алгоритмов [[Whirlpool]], [[Tiger]], [[RIPEMD-160|RIPEMD]], [[ГОСТ Р 34.11-94]], [[MD2]], [[MD4]] и [[MD5]]
* [http://jssha.sourceforge.net jsSHA] — свободная библиотека Javascript, включающая полное семейство хеш-функций SHA-2.
* [http://jssha.sourceforge.net jsSHA]&nbsp;— свободная библиотека Javascript, включающая полное семейство хеш-функций SHA-2


=== Криптоанализ ===
=== Криптоанализ ===

Версия от 21:36, 12 ноября 2008

SHA-2 (англ. Secure Hash Algorithm Version 2 — безопасный алгоритм хеширования, версия 2) — собирательное название однонаправленных хеш-функций SHA-224, SHA-256, SHA-384 и SHA-512. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной битовой длины.

Хеш-функции разработаны Агенством национальной безопасности США и опубликованы Национальным институтом стандартов и технологий в Федеральном стандарте обработки информации FIPS PUB 180-2 в августе 2002 года.[1] В этот стандарт также вошла хеш-функция SHA-1, разработанная в 1995 году. В феврале 2004 года в FIPS PUB 180-2 была добавлена SHA-224[2]. В октябре 2008 года вышла новая редакция стандарта — FIPS PUB 180-3.[3]

В июле 2006 года появился стандарт RFC 4634 «Безопасные хеш-алгоритмы США (SHA и HMAC-SHA)», описывающий SHA-1 и всё семейство SHA-2.

Агентство национальной безопасности от лица государства выпустило патент на SHA-2[4] под лицензией Royalty Free.[5]

Алгоритм

Общее описание

Схема одной итерации алгоритмов SHA-2

Хеш-функции семейства SHA-2 построены на основе структуры Меркла — Дамгарда (англ.).

Исходное сообщение после дополнения разбивается на блоки, каждый блок — на 8 слов. Алгоритм пропускает каждый блок сообщения через цикл с 64-мя итерациями (80 для SHA-512/384). На каждой итерации 2 слова из восьми преобразуются, функцию преобразования задают остальные слова. Результаты обработки каждого блока складываются. Сумма есть значение хеш-функции. Подробнее — см. псевдокод.

Алгоритм использует следующие битовые операции:

В следующей таблице показаны некоторые технические характеристики различных вариантов SHA-2. Внутреннее состояние обозначает «внутреннюю хеш-сумму» после обработки каждого блока данных:

Хеш-функция Длина дайджеста сообщения (бит) Длина внутреннего состояния (бит) Длина блока (бит) Максимальная
длина сообщения (бит)
Длина слова (бит) Количество итераций в цикле
SHA-256/224 256/224 256 512 264 − 1 32 64
SHA-512/384 512/384 512 1024 2128 − 1 64 80


Псевдокод SHA-256

Пояcнения:
Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 232
message — исходное двоичное сообщение
m — преобразованное сообщение

Инициализация переменных
(первые 32 бита дробных частей квадратных корней первых восьми простых чисел [от 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, за исключением:

  • для инициализации переменных h0h7 используются другие начальные значения.
  • в итоговом хеше опускается значение h7.
Начальные значения переменных h0h7 в SHA-224:
h0 := 0xC1059ED8
h1 := 0x367CD507
h2 := 0x3070DD17
h3 := 0xF70E5939
h4 := 0xFFC00B31
h5 := 0x68581511
h6 := 0x64F98FA7
h7 := 0xBEFA4FA4

SHA-512 имеет идентичную структуру, но:

  • слова имеют длину 64 бита.
  • используется 80 раундов вместо 64.
  • начальные значения переменных и константы расширены до 64 бит.
  • в сдвиг в операциях rotr и shr производится на другое число позиций.

SHA-384 идентичен SHA-512, за исключением:

  • переменные h0..h7 имеют другие начальные значения.
  • в итоговом хеше опускаются значения h6 и h7.
Начальные значения переменных h0h7 в SHA-384
(первые 64 бита дробных частей квадратных корней простых чисел с девятого по шестнадцатое [от 23 до 53]):
h1 := CBBB9D5DC1059ED8
h2 := 629A292A367CD507
h3 := 9159015A3070DD17
h4 := 152FECD8F70E5939
h5 := 67332667FFC00B31
h6 := 8EB44A8768581511
h7 := DB0C2E0D64F98FA7
h8 := 47B5481DBEFA4FA4

Применение и сертификация

См. также Применение хеширования

SHA-224, SHA-256, SHA-384 и SHA-512 законом США допускаются к использованию в некоторых правительственных приложениях, включая использование в рамках других криптографических алгоритмов и протоколов, для защиты информации, не имеющей грифа секретности. Стандарт также допускает использование SHA-2 частными и коммерческими организациями.[6]

Хеш-функции SHA-2 используются для проверки целостности данных и в различных криптографических схемах. На 2008 год семейство хеш-функций SHA-2 не имеет такого широкого распространения, как MD5 и SHA-1, несмотря на обнаруженные у последних недостатки.

Некоторые примеры применения SHA-2 указаны в таблице:

Область применения Детали
S/MIME SHA-224, SHA-256, SHA-384 или SHA-512 дайджесты сообщений[7]
OpenLDAP SHA-256, SHA-384 или SHA-512 хеши паролей
DNSSEC SHA-256 дайджесты DNSKEY в протоколе DNSSEC[8]
FreeBSD SHA-256 дайджесты дистрибутивов портов FreeBSD
Debian GNU/Linux SHA-256 дайджесты файлов дистрибутива
X.509 SHA-224, SHA-256, SHA-384 и SHA-512 используются для создания электронной цифровой подписи сертификата[9]
PGP SHA-256, SHA-384, SHA-512 используются для создания электронной цифровой подписи[10]
IPSec Некоторые реализации поддерживают SHA-256 в протоколах ESP и IKE[11]
DSA Семейство SHA-2 используется для создания электронной цифровой подписи[12]
SHACAL-2 Блочный алгоритм шифрования SHACAL-2 построен на основе хеш-функции SHA-256


Как показали исследования[13], алгоритмы SHA-2 работают в 2—3 раза медленнее других популярных хеш-алгоритмов MD5, SHA-1, Tiger и RIPEMD-160.

Сертификация

Реализации SHA-2, как и всех Федеральных стандартов обработки информации, могут быть сертифицированы для использования в некоторых приложениях. Сертификация происходит в рамках процедуры Cryptographic Module Validation Program (англ.), которая проводится Национальным институтом стандартов и технологий США совместно с канадским Бюро безопасности связи.

На 5 ноября 2008 года было сертифицировано более 250-ти реализаций SHA-2, четыре из которых могли оперировать сообщениями с длиной в битах некратной восьми.[14]

Криптоанализ

На 2008 год хеш-функции SHA-2, в отличие от SHA-1, недостаточно изучены. В 2003 году Гилберт и Хандшух провели исследование SHA-2, но не нашли каких-либо уязвимостей.[15]

Криптоанализ хеш-функции подразумевает исследование устойчивости алгоритма по отношению, по меньшей мере, к следующим видам атак:

  • нахождение коллизий, т. е. разных сообщений с одинаковым хешем.
  • нахождение прообраза, т. е. неизвестного сообщения по его хешу.

От устойчивости хеш-функции к нахождению коллизий зависит безопасность электронной цифровой подписи с использованием данного хеш-алгоритма. От устойчивости к нахождению прообраза зависит безопасность хранения хешей паролей для целей аутентификации.

В марте 2008 года индийские исследователи Сомитра Кумар Санадия и Палаш Саркар опубликовали найденные ими коллизии для 22 итераций SHA-256 и SHA-512.[16] В сентябре того же года они представили метод конструирования коллизий для усечённых вариантов SHA-2 (21 итерация).[17] [18]

Ввиду алгоритмической схожести SHA-2 с SHA-1 и наличия у последней потенциальных уязвимостей ведутся поиски улучшенных альтернатив.[19][20] Новый стандарт будет назван SHA-3, он будет определен конкурсом, проводимым Национальным институтом стандартов и технологий в 2008—2012 гг.[21]

Примеры

Ниже приведены примеры хешей 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

Примечания

  1. FIPS PUB 180-2 (англ.)
  2. FIPS PUB 180-2 (with Change Notice to include SHA-224) (англ.)
  3. FIPS PUB 180-3 (англ.)
  4. patent 6829355 (англ.)
  5. "Licensing Declaration for US patent 6829355". Дата обращения: 17 февраля 2008. {{cite journal}}: Cite journal требует |journal= (справка) (англ.)
  6. FIPS 180-2: Secure Hash Standard (SHS): 6. Applicability (англ.)
  7. draft-ietf-smime-sha2-08 (англ.): Using SHA2 Algorithms with Cryptographic Message Syntax
  8. RFC 4509: Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs)
  9. 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
  10. RFC 4880 — OpenPGP Message Format
  11. Overview of Windows Vista Service Pack 1: New Standards
  12. FIPS-186 — Стандарт электронной цифровой подписи в США
  13. Speed Comparison of Popular Crypto Algorithms [1]
  14. SHS Validation List (англ.)
  15. 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= предлагается) (справка)
  16. Somitra Kumar Sanadhya, Palash Sarkar. 22-Step Collisions for SHA-2  (англ.)
  17. Somitra Kumar Sanadhya, Palash Sarkar. Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family  (англ.)
  18. Презентация «Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family» (англ.)
  19. Schneier on Security: NIST Hash Workshop Liveblogging (5) (англ.)
  20. Hash cracked — heise Security (англ.)
  21. Tentative Timeline of the Development of New Hash Functions (англ.)

Рекомендуемая литература

См. также

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

Стандарты

Реализации

  • The OpenSSL Project — широко используемая библиотека OpenSSL crypto включает свободные реализации SHA-224, SHA-256, SHA-384 и SHA-512
  • Crypto++ Library — свободная реализация криптографических алгоритмов на C++
  • Bouncy Castle Library — свободная библиотека Java и C# классов, которая включает реализации SHA-224, SHA-256, SHA-384 и SHA-512, а также других хеш-алгоритмов Whirlpool, Tiger, RIPEMD, ГОСТ Р 34.11-94, MD2, MD4 и MD5
  • jsSHA — свободная библиотека Javascript, включающая полное семейство хеш-функций SHA-2

Криптоанализ