SHA-2: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
→Применение: дополнение |
Fuxx (обсуждение | вклад) м {{lang-en}} |
||
(не показаны 232 промежуточные версии, сделанные более чем 100 участниками) | |||
Строка 1: | Строка 1: | ||
{{Значения|SHA}} |
|||
'''Secure Hash Algorithm 2 (SHA-2)''' — собирательное название однонаправленных [[хеш-функция|хеш-функций]] SHA-224 , SHA-256, SHA-384 и SHA-512. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной длины. |
|||
{{Карточка хеш-функции |
|||
|название = SHA-2 |
|||
|создан = [[2002 год|2002]] |
|||
|опубликован = [[2002 год|2002]] |
|||
|число раундов = 64 или 80 |
|||
|тип = [[хеш-функция|семейство хеш-функций]] |
|||
|размер хеша = 224, 256, 384 или 512 [[бит]] |
|||
}} |
|||
'''SHA-2''' ({{lang-en|Secure Hash Algorithm Version 2}} — безопасный алгоритм хеширования, версия 2) — семейство [[Криптография|криптографических]] [[алгоритм]]ов — однонаправленных [[хеш-функция|хеш-функций]], включающее в себя алгоритмы ''SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256'' и ''SHA-512/224''. |
|||
Хеш-функции предназначены для создания «отпечатков» или «дайджестов» для сообщений произвольной длины. Применяются в различных приложениях или компонентах, связанных с [[Защита информации|защитой информации]]. |
|||
Хеш-функции разработаны [[Агентство национальной безопасности (США)|Агенством национальной безопасности США]] и опубликованы [[Национальный институт стандартов и технологий (США)|Национальным институтом стандартов и технологий]] в качестве [[FIPS|Федерального стандарта обработки информации]] FIPS PUB 180-2 в [[2002]] году. В этот стандарт также была включена хеш-функция [[SHA-1]], разработанная ещё в [[1995]]. В феврале [[2004]] в FIPS PUB 180-2 была добавлена SHA-224, а в сентябре того же года был опубликован стандарт RFC 3874 "Однонаправленная хеш-функция SHA-224". |
|||
Все эти хеш-функции запатентованы.<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> |
|||
Хеш-функции ''SHA-2'' разработаны [[Агентство национальной безопасности (США)|Агентством национальной безопасности США]] и опубликованы [[Национальный институт стандартов и технологий (США)|Национальным институтом стандартов и технологий]] в [[FIPS|федеральном стандарте обработки информации]] ''FIPS PUB 180-2'' в августе 2002 года<ref>{{cite web|url=http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf |title=FIPS PUB 180-2 |accessdate=2008-11-19 |lang=en |description=первоначальный вариант стандарта для SHA-2 |archiveurl=https://www.webcitation.org/66GOBWCaL?url=http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf |archivedate=2012-03-18 }}</ref>. В этот стандарт также вошла хеш-функция ''[[SHA-1]]'', разработанная в 1995 году. В феврале 2004 года в ''FIPS PUB 180-2'' была добавлена ''SHA-224''<ref>{{cite web|url=http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf |title=FIPS PUB 180-2 with change notice |accessdate=2008-11-19 |lang=en |description=вариант стандарта с SHA-224 |archiveurl=https://www.webcitation.org/66GOBwst5?url=http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf |archivedate=2012-03-18 }}</ref>. В октябре 2008 года вышла новая редакция стандарта — ''FIPS PUB 180-3''<ref>{{cite web|url=http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf |title=FIPS PUB 180-3 |accessdate=2008-11-19 |lang=en |description=редакция Secure Hash Standard от октября 2008 года |archiveurl=https://www.webcitation.org/66GOCOl1l?url=http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf |archivedate=2012-03-18 }}</ref>. В марте 2012 года вышла последняя на данный момент редакция ''FIPS PUB 180-4'', в которой были добавлены функции ''SHA-512/256'' и ''SHA-512/224'', основанные на SHA-512 (поскольку на 64-битных архитектурах SHA-512 работает быстрее, чем SHA-256)<ref>{{cite web|url=http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf|title=FIPS PUB 180-4|accessdate=2015-08-28|lang=en|description=редакция Secure Hash Standard от августа 2015 года|archiveurl=https://web.archive.org/web/20161126003357/http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf|archivedate=2016-11-26|deadlink=yes}}</ref>. |
|||
В июле 2006 года появился стандарт RFC 4634 «Безопасные хеш-алгоритмы США (''SHA'' и ''HMAC-SHA'')», описывающий ''SHA-1'' и семейство ''SHA-2''. |
|||
Агентство национальной безопасности от лица [[Соединённые Штаты Америки|государства]] выпустило патент на ''SHA-2''<ref>{{cite web|url=http://www.google.com/patents/US6829355|title=US patent 6829355|lang=en|description=Device for and method of one-way cryptographic hashing|access-date=2017-05-14|archive-date=2016-07-27|archive-url=https://web.archive.org/web/20160727184128/http://www.google.com/patents/US6829355|deadlink=no}}</ref> под лицензией ''[[Royalty-free]]''<ref>{{статья |заглавие=Licensing Declaration for US patent 6829355. |ссылка=https://datatracker.ietf.org/ipr/858/ |accessdate=2008-02-17 |язык=und |archivedate=2016-06-16 |archiveurl=https://web.archive.org/web/20160616212010/https://datatracker.ietf.org/ipr/858/ }}{{ref-en}}</ref>. |
|||
== Алгоритм == |
== Алгоритм == |
||
В следующей таблице показаны некоторые характеристики различных вариантов SHA-2. ''Внутреннее состояние'' обозначает «внутреннюю хеш-сумму» после после каждого сжатия блока данных: |
|||
=== Общее описание === |
|||
[[Файл:SHA-2.svg|мини|400px|Схема одной итерации алгоритмов SHA-2]] |
|||
Хеш-функции семейства SHA-2 построены на основе [[Структура Меркла — Дамгора|структуры Меркла — Дамгора]]. |
|||
Исходное сообщение после дополнения разбивается на блоки, каждый блок — на 16 слов. Алгоритм пропускает каждый блок сообщения через цикл с 64 или 80 итерациями (раундами). На каждой итерации 2 слова преобразуются, функцию преобразования задают остальные слова. Результаты обработки каждого блока складываются, <!--результат — повторение-->[[Сумма (математика)|сумма]] является значением хеш-функции. Тем не менее, инициализация внутреннего состояния производится результатом обработки предыдущего блока. Поэтому независимо обрабатывать блоки и складывать результаты нельзя. Подробнее — см. [[SHA-2#Псевдокод|псевдокод]]. |
|||
=== Сравнение хеш-функций === |
|||
В следующей таблице показаны некоторые технические характеристики различных вариантов SHA-2. «Внутреннее состояние» обозначает промежуточную хеш-сумму после обработки очередного блока данных: |
|||
{| border=1 class="wikitable" |
{| border=1 class="wikitable" |
||
!Хеш-функция |
|||
!Вариант |
|||
!Длина дайджеста сообщения (бит) |
!Длина дайджеста сообщения (бит) |
||
!Длина внутреннего состояния (бит) |
!Длина внутреннего состояния (бит) |
||
!Длина блока (бит) |
!Длина блока (бит) |
||
!Максимальная <br |
!Максимальная <br> длина сообщения (бит) |
||
!Длина слова (бит) |
!Длина слова (бит) |
||
!Количество |
!Количество итераций в цикле |
||
!Скорость (MiB/s)<ref>{{Cite web|url=http://www.cryptopp.com/benchmarks-amd64.html|title="Crypto++ 5.6.0 Benchmarks". Retrieved 2013-06-13.|author=|work=|date=|publisher=|access-date=2016-09-25|archive-date=2016-10-14|archive-url=https://web.archive.org/web/20161014211419/http://www.cryptopp.com/benchmarks-amd64.html|deadlink=no}}</ref> |
|||
!Операции |
|||
|- align="center" |
|- align="center" |
||
| ''SHA‑256'', ''SHA‑224'' || 256/224 || 256 (8 × 32) || 512 || 2<sup>64</sup> − 1 || 32 || 64 |
|||
| ''SHA-256/224'' || 256/224 || 256 || 512 || 2<sup>64</sup> − 1 || 32 || 64 || [[Конкатенация|ǁ]], [[Сложение|+]], [[Конъюнкция#Программирование|and]], [[Дизъюнкция#Программирование|or]], [[Сложение по модулю 2#Программирование|xor]], [[Битовые операции#Логический сдвиг|shr]], [[Битовые операции#Циклический сдвиг|rotr]] |
|||
|139 |
|||
|- align="center" |
|- align="center" |
||
| '' |
| ''SHA‑512'', ''SHA‑384'', ''SHA‑512/256'', ''SHA‑512/224'' || 512/384/256/224 || 512 (8 × 64) || 1024 || 2<sup>128</sup> − 1 || 64 || 80 |
||
|154 |
|||
|} |
|} |
||
== Псевдокод == |
|||
[[Изображение:SHA-2.svg|left|400px|Схема одной итерации алгоритмов SHA-2]] |
|||
<!--Алгоритм оперирует с восемью словами, которые на каждой итерации--> |
|||
При вычислении SHA-256 и SHA-512 используются, соответственно, 32- и 64-битные слова. Эти функции используют разные величины сдвига и аддитивные константы, у них различное число итераций, но в остальном их структура совершенно одинакова. Хеш-функции SHA-224 и SHA-384 являются усечёнными версиями SHA-256 и SHA-512, вычисляемых с другими начальными константами. |
|||
Псевдокод использует следующие битовые операции: |
|||
== Применение == |
|||
* ǁ — [[конкатенация]], |
|||
'''См. также '''[[Хеширование#Применение хеширования|Применение хеширования]] |
|||
* + — [[сложение]], |
|||
* ''and'' — [[Конъюнкция#Программирование|побитовое «И»]], |
|||
* ''xor'' — [[Сложение по модулю 2#Программирование|исключающее «ИЛИ»]], |
|||
* ''shr'' (shift right) — [[Битовые операции#Логический сдвиг|логический сдвиг вправо]], |
|||
* ''rotr'' (rotate right) — [[Битовые операции#Циклический сдвиг|циклический сдвиг вправо]]. |
|||
=== ''SHA-256'' === |
|||
Хеш-функции SHA-2 не имеют такого широкого распространения, как [[MD5]] и [[SHA-1]], несмотря на обнаруженные у последних недостатки. Хеш-функции SHA-2 используются для проверки целостности данных и в различных криптографических схемах. |
|||
<span style="color: green;">''Пояснения: |
|||
Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 2<sup>32</sup> |
|||
Некоторые примеры применения SHA-2 указаны в таблице: |
|||
''message'' — исходное двоичное сообщение |
|||
{| class="standard" |
|||
''m'' — преобразованное сообщение</span> |
|||
! Область применения |
|||
<span style="color: green;"> |
|||
! Детали |
|||
''Инициализация переменных'' |
|||
|- |
|||
(первые 32 бита ''дробных частей'' квадратных корней первых восьми простых чисел [от 2 до 19]):</span> |
|||
| [[S-MIME]] |
|||
h0 := 0x6A09E667 |
|||
| SHA224, SHA256, SHA384 или SHA512-дайджесты сообщений<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> |
|||
h1 := 0xBB67AE85 |
|||
|- |
|||
h2 := 0x3C6EF372 |
|||
| [[OpenLDAP]] |
|||
h3 := 0xA54FF53A |
|||
| SHA256, SHA384 или SHA512-хеши паролей |
|||
h4 := 0x510E527F |
|||
|- |
|||
h5 := 0x9B05688C |
|||
| [[DNSSEC]] |
|||
h6 := 0x1F83D9AB |
|||
| SHA256-дайджесты DNSKEY в протоколе DNSSEC<ref>RFC 4509: "Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs)"</ref> |
|||
h7 := 0x5BE0CD19 |
|||
|- |
|||
| [[FreeBSD]] |
|||
| SHA256-дайджесты дистрибутивов [[FreeBSD Ports|портов FreeBSD]] |
|||
|- |
|||
| [[Debian GNU/Linux]] |
|||
| SHA256-дайджесты файлов дистрибутива |
|||
|- |
|||
| [[X.509]] |
|||
| SHA224, SHA256, SHA384 и SHA512 используются для создания [[Электронная подпись|электронной подписи]] сертификата<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-2, в отличие от SHA-1, пока не подвергались тщательному исследованию открытого криптографического сообщества, поэтому их безопасноcть еще не подтверждена. Гилберт и Хандшух в [[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> |
|||
== Примеры и псевдокод == |
|||
=== Примеры === |
|||
Ниже приведены примеры хешей 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 |
|||
Малейшее изменение сообщения в подавляющем большинстве случаев приводит к совершенно другому хешу вследствие лавинного эффекта. К примеру, при изменении <code>dog</code> на <code>cog</code> получится: |
|||
SHA-256("The quick brown fox jumps over the lazy cog") |
|||
= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE |
|||
=== Псевдокод SHA-256 === |
|||
<span style="color: green;">''Пояcнения: Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 2<sup>32</sup> |
|||
message — исходное двоичное сообщение |
|||
m — преобразованное сообщение |
|||
ǁ обозначает операцию битового присоединения (битовая [[конкатенация]])''</span> |
|||
<span style="color:green;">''Инициализация переменных''</span> |
|||
<span style="color:green;">(первые 32 бита <em>дробных частей<em> квадратных корней первых 8 простых чисел 2..19):</span> |
|||
h0 := 0x6a09e667 |
|||
h1 := 0xbb67ae85 |
|||
h2 := 0x3c6ef372 |
|||
h3 := 0xa54ff53a |
|||
h4 := 0x510e527f |
|||
h5 := 0x9b05688c |
|||
h6 := 0x1f83d9ab |
|||
h7 := 0x5be0cd19 |
|||
<span style="color:green;">'' |
<span style="color:green;">''Таблица констант''</span> |
||
<span style="color:green;">(первые 32 бита |
<span style="color:green;">(первые 32 бита ''дробных частей'' кубических корней первых 64 простых чисел [от 2 до 311]):</span> |
||
k[0..63] := |
k[0..63] := |
||
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, |
|||
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 |
m := message ǁ [''единичный бит''] |
||
m := m |
m := m ǁ [k ''нулевых бит''], <span style="color:green;">где '''k''' — наименьшее неотрицательное число, такое, что |
||
(L + 1 + K) mod 512 = 448, где L — число бит в сообщении ([[Сравнимость по модулю|сравнима по модулю]] 512 c 448)</span> |
|||
m := m |
m := m ǁ ''Длина''(message) <span style="color:green;">— длина исходного сообщения в битах в виде 64-битного числа |
||
с [[Порядок байтов|порядком байтов]] от старшего к младшему</span> |
|||
<span style="color:green;">''Далее |
<span style="color:green;">''Далее сообщение обрабатывается последовательными порциями по 512 бит:''</span> |
||
разбить сообщение на куски по 512 бит |
разбить сообщение на куски по 512 бит |
||
'''для''' каждого куска |
'''для''' каждого куска |
||
разбить кусок на 16 слов длиной 32 бита: w[0..15] |
разбить кусок на 16 слов длиной 32 бита (с [[Порядок байтов|порядком байтов]] от старшего к младшему внутри слова): w[0..15] |
||
<span style="color:green;">''Сгенерировать дополнительные 48 слов:''</span> |
<span style="color:green;">''Сгенерировать дополнительные 48 слов:''</span> |
||
'''для''' i '''от''' 16 до 63 |
'''для''' i '''от''' 16 '''до''' 63 |
||
s0 := (w[i-15] '''rotr''' 7) '''xor''' (w[i-15] '''rotr''' 18) '''xor''' (w[i-15] '''shr''' 3) |
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) |
s1 := (w[i-2] '''rotr''' 17) '''xor''' (w[i-2] '''rotr''' 19) '''xor''' (w[i-2] '''shr''' 10) |
||
Строка 141: | Строка 115: | ||
<span style="color:green;">''Основной цикл:''</span> |
<span style="color:green;">''Основной цикл:''</span> |
||
'''для''' i '''от''' 0 до 63 |
'''для''' i '''от''' 0 '''до''' 63 |
||
Σ0 := (a '''rotr''' 2) '''xor''' (a '''rotr''' 13) '''xor''' (a '''rotr''' 22) |
|||
Ma := (a '''and''' b) '''xor''' (a '''and''' c) '''xor''' (b '''and''' c) |
|||
t2 := |
t2 := Σ0 + Ma |
||
Σ1 := (e '''rotr''' 6) '''xor''' (e '''rotr''' 11) '''xor''' (e '''rotr''' 25) |
|||
Ch := (e '''and''' f) '''xor''' (('''not''' e) '''and''' g) |
|||
t1 := h + |
t1 := h + Σ1 + Ch + k[i] + w[i] |
||
h := g |
h := g |
||
Строка 168: | Строка 142: | ||
h7 := h7 + h |
h7 := h7 + h |
||
<span style="color:green;">''Получить итоговое |
<span style="color:green;">''Получить итоговое значение хеша:''</span> |
||
digest = hash = h0 |
digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7 |
||
SHA-224 идентичен SHA-256, за исключением: |
''SHA-224'' идентичен ''SHA-256'', за исключением: |
||
* |
* для инициализации переменных <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> |
|||
SHA-512 имеет идентичную структуру, но: |
|||
h0 := 0xC1059ED8 |
|||
h1 := 0x367CD507 |
|||
h2 := 0x3070DD17 |
|||
h3 := 0xF70E5939 |
|||
h4 := 0xFFC00B31 |
|||
h5 := 0x68581511 |
|||
h6 := 0x64F98FA7 |
|||
h7 := 0xBEFA4FA4 |
|||
''SHA-512'' имеет идентичную структуру, но: |
|||
* слова имеют длину 64 бита, |
* слова имеют длину 64 бита, |
||
* используется 80 раундов вместо 64, |
* используется 80 раундов вместо 64, |
||
* сообщение разбито на чанки по 1024 бит, |
|||
* переменные и круговые константы расширены до 64 бит, |
|||
* начальные значения переменных и константы расширены до 64 бит, |
|||
* в сдвиг в операциях <code>rotr</code> и <code>shr</code> производится на другое число позиций. |
|||
* постоянные для каждого из 80 раундов — 80 первых простых чисел, |
|||
* сдвиг в операциях <code>rotr</code> и <code>shr</code> производится на другое число позиций. |
|||
<span style="color:green;">''Начальные значения переменных <code>h0</code>—<code>h7</code> в SHA-512:''</span> |
|||
h0 := 0x6a09e667f3bcc908, |
|||
h1 := 0xbb67ae8584caa73b, |
|||
h2 := 0x3c6ef372fe94f82b, |
|||
h3 := 0xa54ff53a5f1d36f1, |
|||
h4 := 0x510e527fade682d1, |
|||
h5 := 0x9b05688c2b3e6c1f, |
|||
h6 := 0x1f83d9abfb41bd6b, |
|||
h7 := 0x5be0cd19137e2179 |
|||
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'' |
|||
== Примечания == |
|||
(первые 64 бита дробных частей квадратных корней простых чисел с 9-го по 16-е [от 23 до 53]):</span> |
|||
<references /> |
|||
h0 := CBBB9D5DC1059ED8 |
|||
h1 := 629A292A367CD507 |
|||
h2 := 9159015A3070DD17 |
|||
h3 := 152FECD8F70E5939 |
|||
h4 := 67332667FFC00B31 |
|||
h5 := 8EB44A8768581511 |
|||
h6 := DB0C2E0D64F98FA7 |
|||
h7 := 47B5481DBEFA4FA4 |
|||
''SHA-512/256'' идентичен SHA-512, за исключением: |
|||
* переменные <code>h0</code>—<code>h7</code> имеют другие начальные значения, |
|||
* итоговый хеш обрезается до левых 256 бит. |
|||
<span style="color:green;">''Начальные значения переменных <code>h0</code>—<code>h7</code> в SHA-512/256'':</span> |
|||
h0 := 22312194FC2BF72C |
|||
h1 := 9F555FA3C84C64C2 |
|||
h2 := 2393B86B6F53B151 |
|||
h3 := 963877195940EABD |
|||
h4 := 96283EE2A88EFFE3 |
|||
h5 := BE5E1E2553863992 |
|||
h6 := 2B0199FC2C85B8AA |
|||
h7 := 0EB72DDC81C52CA2 |
|||
''SHA-512/224'' идентичен SHA-512, за исключением: |
|||
* переменные <code>h0</code>—<code>h7</code> имеют другие начальные значения, |
|||
* итоговый хеш обрезается до левых 224 бит. |
|||
<span style="color:green;">''Начальные значения переменных <code>h0</code>—<code>h7</code> в SHA-512/224'':</span> |
|||
h0 := 8C3D37C819544DA2 |
|||
h1 := 73E1996689DCD4D6 |
|||
h2 := 1DFAB7AE32FF9C82 |
|||
h3 := 679DD514582F9FCF |
|||
h4 := 0F6D2B697BD44DA8 |
|||
h5 := 77E36F7304C48942 |
|||
h6 := 3F9D85A86A1D36C8 |
|||
h7 := 1112E6AD91D692A1 |
|||
== Примеры == |
|||
Ниже приведены примеры хешей для одинакового текста при различных версиях протокола ''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 |
|||
SHA-512/256("The quick brown fox jumps over the lazy dog") |
|||
= DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D |
|||
SHA-512/224("The quick brown fox jumps over the lazy dog") |
|||
= 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37 |
|||
Малейшее изменение сообщения в подавляющем большинстве случаев приводит к полному изменению хеша вследствие [[лавинный эффект|лавинного эффекта]]. К примеру, при изменении <code>dog</code> на <code>cog</code> (изменение затрагивает лишь один бит из 344 в кодируемой фразе) хеш изменится кардинально: |
|||
SHA-256("The quick brown fox jumps over the lazy cog") |
|||
= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE |
|||
== Криптоанализ == |
|||
[[Криптоанализ]] хеш-функции подразумевает исследование устойчивости алгоритма по отношению, по меньшей мере, к следующим видам атак: |
|||
* нахождению [[Коллизия хеш-функции|коллизий]], то есть разных сообщений с одинаковым хешем — от этого зависит безопасность электронной цифровой подписи с использованием данного хеш-алгоритма; |
|||
* нахождению [[прообраз]]а, то есть неизвестного сообщения по его хешу — от этого зависит безопасность хранения хешей паролей для целей [[Аутентификация|аутентификации]]. |
|||
В [[2003 год]]у Гилберт и Хандшух провели исследование ''SHA-2'', но не нашли каких-либо уязвимостей{{source-ref|Q27882162}}.<!-- Security Analysis of SHA-256 and Sisters // Selected Areas in Cryptography: 10th Annual International Workshop, SAC 2003 --> Однако в марте 2008 года индийские исследователи Сомитра Кумар Санадия и Палаш Саркар опубликовали найденные ими коллизии для 22 итераций ''SHA-256'' и ''SHA-512''<ref>Somitra Kumar Sanadhya, Palash Sarkar. [http://arxiv.org/abs/0803.1220 22-Step Collisions for SHA-2] {{Wayback|url=http://arxiv.org/abs/0803.1220 |date=20100330081032 }}{{ref-en}}</ref>. В сентябре того же года они представили метод конструирования коллизий для усечённых вариантов ''SHA-2'' (21 итерация)<ref>Somitra Kumar Sanadhya, Palash Sarkar. [https://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»] {{Wayback|url=http://isc08.twisc.org/slides/S5P4_Deterministic_Constructions_of_21-Step_Collisions_for_the_SHA-2_Hash_Family.pdf |date=20100703115208 }}{{ref-en}}</ref>. Позднее были найдены методы конструирования коллизий для 31 итерации ''SHA-256''{{source-ref|Q27882243}} <!-- Improving Local Collisions: New Attacks on Reduced SHA-256 // Advances in Cryptology — EUROCRYPT 2013: 32nd Annual International Conference on the Theory and Applications of Cryptographic Techniques, Athens, Greece, May 26-30, 2013. Proceedings --> и для 27 итераций ''SHA-512''<ref>{{статья |заглавие=Analysis of SHA-512/224 and SHA-512/256 |ссылка=https://eprint.iacr.org/2016/374.pdf |язык=und |автор=Christoph Dobraunig, Maria Eichlseder, and Florian Mendel |год=2016 |archivedate=2017-07-15 |archiveurl=https://web.archive.org/web/20170715223048/https://eprint.iacr.org/2016/374.pdf }}</ref>. |
|||
Ввиду алгоритмической схожести ''SHA-2'' с ''SHA-1'' и наличия у последней потенциальных уязвимостей принято решение, что [[SHA-3]] будет базироваться на совершенно ином алгоритме<ref>[http://www.schneier.com/blog/archives/2005/11/nist_hash_works_4.html Schneier on Security: NIST Hash Workshop Liveblogging (5)] {{Wayback|url=http://www.schneier.com/blog/archives/2005/11/nist_hash_works_4.html |date=20081007101856 }}{{ref-en}}</ref><ref>[http://www.heise-online.co.uk/security/Hash-cracked--/features/75686/2 Hash cracked — heise Security] {{Wayback|url=http://www.heise-online.co.uk/security/Hash-cracked--/features/75686/2 |date=20081206025120 }}{{ref-en}}</ref>. 2 октября 2012 года NIST утвердил в качестве SHA-3 алгоритм [[Keccak]]. |
|||
== Применение и сертификация == |
|||
''См. также [[Хеширование#Применение хеширования|Применение хеширования]]'' |
|||
''SHA-224'', ''SHA-256'', ''SHA-384'', ''SHA-512'', ''SHA-512/256'' и ''SHA-512/224'' законом США допускаются к использованию в некоторых правительственных приложениях, включая использование в рамках других криптографических алгоритмов и протоколов, для защиты информации, не имеющей грифа секретности. Стандарт также допускает использование ''SHA-2'' частными и коммерческими организациями<ref>[http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf ''FIPS 180-2: Secure Hash Standard (SHS): 6. Applicability''] {{Wayback|url=http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf |date=20120312101511 }}{{ref-en}}</ref>. |
|||
Хеш-функции ''SHA-2'' используются для проверки целостности данных и в различных криптографических схемах. На [[2008 год]] семейство хеш-функций ''SHA-2'' не имеет такого широкого распространения, как ''[[MD5]]'' и ''[[SHA-1]]''<ref>[http://www.google.com/search?q=SHA-1 SHA-1], [http://www.google.com/search?q=SHA-256 SHA-256] в результатах поисковой системы [[Google (поисковая система)|Google]]</ref>, несмотря на обнаруженные у последних недостатки. |
|||
Некоторые примеры применения ''SHA-2'' указаны в таблице: |
|||
{| class="standard" |
|||
! Область применения |
|||
! Детали |
|||
|- |
|||
| [[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] {{Wayback|url=http://tools.ietf.org/html/draft-ietf-smime-sha2-08 |date=20090622120540 }}{{ref-en}}: Using SHA2 Algorithms with Cryptographic Message Syntax</ref> |
|||
|- |
|||
| [[OpenLDAP]] |
|||
| ''SHA-256'', ''SHA-384'' или ''SHA-512'' хеши [[Пароль|паролей]]<ref>[http://www.openldap.org/its/index.cgi/Contrib?id=5660 SHA-2 hash support in OpenLDAP] {{Wayback|url=http://www.openldap.org/its/index.cgi/Contrib?id=5660 |date=20100727202343 }}{{ref-en}}</ref> |
|||
|- |
|||
| [[DNSSEC]] |
|||
| ''SHA-256'' дайджесты ''DNSKEY'' в протоколе ''DNSSEC''<ref>RFC 4509: Use of ''SHA-256'' in DNSSEC Delegation Signer (DS) Resource Records (RRs)</ref> |
|||
|- |
|||
| [[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> |
|||
|- |
|||
| [[PGP]] |
|||
| ''SHA-256'', ''SHA-384'', ''SHA-512'' используются для создания электронной цифровой подписи<ref>RFC 4880: OpenPGP Message Format</ref> |
|||
|- |
|||
| [[IPSec]] |
|||
| Некоторые реализации поддерживают ''SHA-256'' в протоколах ''[[Encapsulating Security Payload|ESP]]'' и ''[[IKE]]''<ref>[https://technet.microsoft.com/en-us/library/cc749132.aspx Overview of Windows Vista Service Pack 1: New Standards] {{Wayback|url=https://technet.microsoft.com/en-us/library/cc749132.aspx |date=20160312103658 }}{{ref-en}}</ref> |
|||
|- |
|||
| [[DSA]] |
|||
| Семейство ''SHA-2'' используется для создания электронной цифровой подписи<ref>[http://csrc.nist.gov/publications/fips/fips186-2/fips186-2-change1.pdf FIPS-186-2] {{webarchive|url=https://web.archive.org/web/20090518185707/http://csrc.nist.gov/publications/fips/fips186-2/fips186-2-change1.pdf |date=2009-05-18 }}: Digital Signature Standard (DSS)]</ref> |
|||
|- |
|||
| [[SHACAL-2]] |
|||
| Блочный алгоритм шифрования [[SHACAL-2]] построен на основе хеш-функции ''SHA-256'' |
|||
|- |
|||
| [[Биткойн]] |
|||
| Нахождение комбинации данных, ''SHA-256''-хеш которых удовлетворяет оговоренному условию, является [[Доказательство выполнения работы|доказательством выполнения работы]] при эмиссии криптовалюты |
|||
|} |
|||
Как показали исследования<ref>Speed Comparison of Popular Crypto Algorithms [http://www.cryptopp.com/benchmarks.html] {{Wayback|url=http://www.cryptopp.com/benchmarks.html|date=20081015103105}}{{ref-en}}</ref>, алгоритмы ''SHA-2'' работают в 2—3 раза медленнее других популярных хеш-алгоритмов [[MD5]], [[SHA-1]], [[Tiger (хеш-функция)|Tiger]] и [[RIPEMD-160]]. |
|||
=== Сертификация === |
|||
{{Глобализировать|регион=США}} |
|||
Реализации ''SHA-2'', как и всех Федеральных стандартов обработки информации, могут быть сертифицированы для использования в некоторых приложениях на территории США. Сертификация происходит в рамках процедуры {{iw|Cryptographic Module Validation Program}}, которая проводится Национальным институтом стандартов и технологий США совместно с канадским Бюро безопасности связи. |
|||
На [[5 ноября]] 2008 года было сертифицировано более 250 реализаций ''SHA-2'', четыре из которых могли оперировать сообщениями с длиной в битах, не кратной восьми<ref>[http://csrc.nist.gov/groups/STM/cavp/documents/shs/shaval.htm SHS Validation List] {{Wayback|url=http://csrc.nist.gov/groups/STM/cavp/documents/shs/shaval.htm |date=20110823092514 }}{{ref-en}}</ref>. |
|||
Сертифицировано [[FIPS]] PUB 180-4, [[CRYPTREC]] и [[NESSIE]]. |
|||
== См. также == |
== См. также == |
||
* [[Федеральные стандарты обработки информации]] |
|||
* [[SHA-1]] |
|||
* [[Хеширование]] |
|||
* [[Агентство национальной безопасности (США)]] |
|||
* [[Национальный институт стандартов и технологий (США)]] |
|||
* [[FIPS]] |
|||
== Примечания == |
|||
== Внешние ссылки == |
|||
{{примечания|2}} |
|||
* RFC 3874 {{ref-en}} — A 224-bit One-way Hash Function: SHA-224, сентябрь [[2004]] |
|||
* RFC 4634 {{ref-en}} — 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 5289 {{ref-en}} — TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM). август [[2008]] |
|||
* [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf FIPS 180-2: Secure Hash Standard (SHS)]{{ref-en}} |
|||
* [http://www.insidepro.com/hashes.php] Генератор различных типов хешей. |
|||
== Литература == |
|||
{{crypto-stub}} |
|||
* {{книга |
|||
|автор = Лапонина О.Р. |
|||
|заглавие = Криптографические основы безопасности |
|||
|ссылка = http://www.intuit.ru/department/security/networksec/9/2.html |
|||
|место = М. |
|||
|издательство = Интернет-университет информационных технологий - ИНТУИТ.ру |
|||
|год = 2004 |
|||
|страницы = 320 |
|||
|isbn = 5-9556-00020-5 |
|||
}} |
|||
* {{Книга:Фергюсон Н., Шнайер Б.: Практическая криптография}} |
|||
* [https://online.tu-graz.ac.at/tug_online/voe_main2.getvolltext?pDocumentNr=85215 Анализ усечённого варианта SHA-256]{{Недоступная ссылка|date=2018-05|bot=InternetArchiveBot }}{{ref-en}} |
|||
* [https://dx.doi.org/10.1007/978-3-540-71039-4_1 Коллизии усечённого варианта SHA-256]{{ref-en}} |
|||
* [https://dx.doi.org/10.1007/978-3-540-70500-0_19 Нелинейные атаки на усечённые варианты хеш-функций SHA-2]{{ref-en}} |
|||
* [https://dx.doi.org/10.1007/978-3-540-85886-7_17 Детерминированное конструирование коллизий для семейства хешей SHA-2 с 21 итерацией]{{ref-en}} |
|||
== Ссылки == |
|||
{{Шаблон:Хеш-алгоритмы}} |
|||
* [http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf FIPS 180-3] {{Архивировано|url=https://www.webcitation.org/66GOCOl1l?url=http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf |date=2012-03-18 }}: Secure Hash Standard (SHS) |
|||
* RFC 3874: A 224-bit One-way Hash Function: SHA-224 |
|||
* RFC 4634: US Secure Hash Algorithms (SHA and HMAC-SHA) |
|||
{{Хеш-алгоритмы}} |
|||
[[Категория:Криптографические хеш-функции]] |
|||
[[Категория:Криптографические хеш-функции]] |
|||
[[cs:Secure Hash Algorithm]] |
|||
[[Категория:Royalty Free]] |
|||
[[da:SHA]] |
|||
[[de:Secure Hash Algorithm]] |
|||
[[en:SHA]] |
|||
[[es:SHA]] |
|||
[[fr:SHA-1]] |
|||
[[ko:SHA]] |
|||
[[hr:SHA-2]] |
|||
[[he:SHA]] |
|||
[[it:Secure Hash Algorithm]] |
|||
[[lt:SHA]] |
|||
[[nl:SHA-familie]] |
|||
[[ja:SHA]] |
|||
[[pl:SHA-1]] |
|||
[[pt:SHA1]] |
|||
[[sk:Secure Hash Algorithm]] |
|||
[[sr:SHA]] |
|||
[[fi:SHA]] |
|||
[[vi:SHA]] |
|||
[[zh:SHA 家族]] |
Текущая версия от 08:04, 13 сентября 2024
SHA-2 | |
---|---|
Создан | 2002 |
Опубликован | 2002 |
Предшественник | SHA-1 |
Преемник | Keccak |
Размер хеша | 224, 256, 384 или 512 бит |
Число раундов | 64 или 80 |
Тип | семейство хеш-функций |
SHA-2 (англ. Secure Hash Algorithm Version 2 — безопасный алгоритм хеширования, версия 2) — семейство криптографических алгоритмов — однонаправленных хеш-функций, включающее в себя алгоритмы SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224.
Хеш-функции предназначены для создания «отпечатков» или «дайджестов» для сообщений произвольной длины. Применяются в различных приложениях или компонентах, связанных с защитой информации.
История
[править | править код]Хеш-функции SHA-2 разработаны Агентством национальной безопасности США и опубликованы Национальным институтом стандартов и технологий в федеральном стандарте обработки информации FIPS PUB 180-2 в августе 2002 года[1]. В этот стандарт также вошла хеш-функция SHA-1, разработанная в 1995 году. В феврале 2004 года в FIPS PUB 180-2 была добавлена SHA-224[2]. В октябре 2008 года вышла новая редакция стандарта — FIPS PUB 180-3[3]. В марте 2012 года вышла последняя на данный момент редакция FIPS PUB 180-4, в которой были добавлены функции SHA-512/256 и SHA-512/224, основанные на SHA-512 (поскольку на 64-битных архитектурах SHA-512 работает быстрее, чем SHA-256)[4].
В июле 2006 года появился стандарт RFC 4634 «Безопасные хеш-алгоритмы США (SHA и HMAC-SHA)», описывающий SHA-1 и семейство SHA-2.
Агентство национальной безопасности от лица государства выпустило патент на SHA-2[5] под лицензией Royalty-free[6].
Алгоритм
[править | править код]Общее описание
[править | править код]Хеш-функции семейства SHA-2 построены на основе структуры Меркла — Дамгора.
Исходное сообщение после дополнения разбивается на блоки, каждый блок — на 16 слов. Алгоритм пропускает каждый блок сообщения через цикл с 64 или 80 итерациями (раундами). На каждой итерации 2 слова преобразуются, функцию преобразования задают остальные слова. Результаты обработки каждого блока складываются, сумма является значением хеш-функции. Тем не менее, инициализация внутреннего состояния производится результатом обработки предыдущего блока. Поэтому независимо обрабатывать блоки и складывать результаты нельзя. Подробнее — см. псевдокод.
Сравнение хеш-функций
[править | править код]В следующей таблице показаны некоторые технические характеристики различных вариантов SHA-2. «Внутреннее состояние» обозначает промежуточную хеш-сумму после обработки очередного блока данных:
Хеш-функция | Длина дайджеста сообщения (бит) | Длина внутреннего состояния (бит) | Длина блока (бит) | Максимальная длина сообщения (бит) |
Длина слова (бит) | Количество итераций в цикле | Скорость (MiB/s)[7] |
---|---|---|---|---|---|---|---|
SHA‑256, SHA‑224 | 256/224 | 256 (8 × 32) | 512 | 264 − 1 | 32 | 64 | 139 |
SHA‑512, SHA‑384, SHA‑512/256, SHA‑512/224 | 512/384/256/224 | 512 (8 × 64) | 1024 | 2128 − 1 | 64 | 80 | 154 |
Псевдокод
[править | править код]Псевдокод использует следующие битовые операции:
- ǁ — конкатенация,
- + — сложение,
- and — побитовое «И»,
- xor — исключающее «ИЛИ»,
- shr (shift right) — логический сдвиг вправо,
- rotr (rotate right) — циклический сдвиг вправо.
SHA-256
[править | править код]Пояснения: Все переменные беззнаковые, имеют размер 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 — наименьшее неотрицательное число, такое, что (L + 1 + K) mod 512 = 448, где L — число бит в сообщении (сравнима по модулю 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 Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22) Ma := (a and b) xor (a and c) xor (b and c) t2 := Σ0 + Ma Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25) Ch := (e and f) xor ((not e) and g) t1 := h + Σ1 + 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
.
Начальные значения переменных h0
—h7
в SHA-224:
h0 := 0xC1059ED8
h1 := 0x367CD507
h2 := 0x3070DD17
h3 := 0xF70E5939
h4 := 0xFFC00B31
h5 := 0x68581511
h6 := 0x64F98FA7
h7 := 0xBEFA4FA4
SHA-512 имеет идентичную структуру, но:
- слова имеют длину 64 бита,
- используется 80 раундов вместо 64,
- сообщение разбито на чанки по 1024 бит,
- начальные значения переменных и константы расширены до 64 бит,
- постоянные для каждого из 80 раундов — 80 первых простых чисел,
- сдвиг в операциях
rotr
иshr
производится на другое число позиций.
Начальные значения переменных h0
—h7
в SHA-512:
h0 := 0x6a09e667f3bcc908,
h1 := 0xbb67ae8584caa73b,
h2 := 0x3c6ef372fe94f82b,
h3 := 0xa54ff53a5f1d36f1,
h4 := 0x510e527fade682d1,
h5 := 0x9b05688c2b3e6c1f,
h6 := 0x1f83d9abfb41bd6b,
h7 := 0x5be0cd19137e2179
SHA-384 идентичен SHA-512, за исключением:
- переменные
h0
—h7
имеют другие начальные значения, - в итоговом хеше опускаются значения
h6
иh7
.
Начальные значения переменных h0
—h7
в SHA-384
(первые 64 бита дробных частей квадратных корней простых чисел с 9-го по 16-е [от 23 до 53]):
h0 := CBBB9D5DC1059ED8
h1 := 629A292A367CD507
h2 := 9159015A3070DD17
h3 := 152FECD8F70E5939
h4 := 67332667FFC00B31
h5 := 8EB44A8768581511
h6 := DB0C2E0D64F98FA7
h7 := 47B5481DBEFA4FA4
SHA-512/256 идентичен SHA-512, за исключением:
- переменные
h0
—h7
имеют другие начальные значения, - итоговый хеш обрезается до левых 256 бит.
Начальные значения переменных h0
—h7
в SHA-512/256:
h0 := 22312194FC2BF72C
h1 := 9F555FA3C84C64C2
h2 := 2393B86B6F53B151
h3 := 963877195940EABD
h4 := 96283EE2A88EFFE3
h5 := BE5E1E2553863992
h6 := 2B0199FC2C85B8AA
h7 := 0EB72DDC81C52CA2
SHA-512/224 идентичен SHA-512, за исключением:
- переменные
h0
—h7
имеют другие начальные значения, - итоговый хеш обрезается до левых 224 бит.
Начальные значения переменных h0
—h7
в SHA-512/224:
h0 := 8C3D37C819544DA2
h1 := 73E1996689DCD4D6
h2 := 1DFAB7AE32FF9C82
h3 := 679DD514582F9FCF
h4 := 0F6D2B697BD44DA8
h5 := 77E36F7304C48942
h6 := 3F9D85A86A1D36C8
h7 := 1112E6AD91D692A1
Примеры
[править | править код]Ниже приведены примеры хешей для одинакового текста при различных версиях протокола 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
SHA-512/256("The quick brown fox jumps over the lazy dog") = DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D
SHA-512/224("The quick brown fox jumps over the lazy dog") = 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37
Малейшее изменение сообщения в подавляющем большинстве случаев приводит к полному изменению хеша вследствие лавинного эффекта. К примеру, при изменении dog
на cog
(изменение затрагивает лишь один бит из 344 в кодируемой фразе) хеш изменится кардинально:
SHA-256("The quick brown fox jumps over the lazy cog") = E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE
Криптоанализ
[править | править код]Криптоанализ хеш-функции подразумевает исследование устойчивости алгоритма по отношению, по меньшей мере, к следующим видам атак:
- нахождению коллизий, то есть разных сообщений с одинаковым хешем — от этого зависит безопасность электронной цифровой подписи с использованием данного хеш-алгоритма;
- нахождению прообраза, то есть неизвестного сообщения по его хешу — от этого зависит безопасность хранения хешей паролей для целей аутентификации.
В 2003 году Гилберт и Хандшух провели исследование SHA-2, но не нашли каких-либо уязвимостей[8]. Однако в марте 2008 года индийские исследователи Сомитра Кумар Санадия и Палаш Саркар опубликовали найденные ими коллизии для 22 итераций SHA-256 и SHA-512[9]. В сентябре того же года они представили метод конструирования коллизий для усечённых вариантов SHA-2 (21 итерация)[10][11]. Позднее были найдены методы конструирования коллизий для 31 итерации SHA-256[12] и для 27 итераций SHA-512[13].
Ввиду алгоритмической схожести SHA-2 с SHA-1 и наличия у последней потенциальных уязвимостей принято решение, что SHA-3 будет базироваться на совершенно ином алгоритме[14][15]. 2 октября 2012 года NIST утвердил в качестве SHA-3 алгоритм Keccak.
Применение и сертификация
[править | править код]См. также Применение хеширования
SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224 законом США допускаются к использованию в некоторых правительственных приложениях, включая использование в рамках других криптографических алгоритмов и протоколов, для защиты информации, не имеющей грифа секретности. Стандарт также допускает использование SHA-2 частными и коммерческими организациями[16].
Хеш-функции SHA-2 используются для проверки целостности данных и в различных криптографических схемах. На 2008 год семейство хеш-функций SHA-2 не имеет такого широкого распространения, как MD5 и SHA-1[17], несмотря на обнаруженные у последних недостатки.
Некоторые примеры применения SHA-2 указаны в таблице:
Область применения | Детали |
---|---|
S/MIME | SHA-224, SHA-256, SHA-384 или SHA-512 дайджесты сообщений[18] |
OpenLDAP | SHA-256, SHA-384 или SHA-512 хеши паролей[19] |
DNSSEC | SHA-256 дайджесты DNSKEY в протоколе DNSSEC[20] |
X.509 | SHA-224, SHA-256, SHA-384 и SHA-512 используются для создания электронной цифровой подписи сертификата[21] |
PGP | SHA-256, SHA-384, SHA-512 используются для создания электронной цифровой подписи[22] |
IPSec | Некоторые реализации поддерживают SHA-256 в протоколах ESP и IKE[23] |
DSA | Семейство SHA-2 используется для создания электронной цифровой подписи[24] |
SHACAL-2 | Блочный алгоритм шифрования SHACAL-2 построен на основе хеш-функции SHA-256 |
Биткойн | Нахождение комбинации данных, SHA-256-хеш которых удовлетворяет оговоренному условию, является доказательством выполнения работы при эмиссии криптовалюты |
Как показали исследования[25], алгоритмы SHA-2 работают в 2—3 раза медленнее других популярных хеш-алгоритмов MD5, SHA-1, Tiger и RIPEMD-160.
Сертификация
[править | править код]Эта статья описывает ситуацию применительно лишь к одному региону (США), возможно, нарушая при этом правило о взвешенности изложения. |
Реализации SHA-2, как и всех Федеральных стандартов обработки информации, могут быть сертифицированы для использования в некоторых приложениях на территории США. Сертификация происходит в рамках процедуры Cryptographic Module Validation Program[англ.], которая проводится Национальным институтом стандартов и технологий США совместно с канадским Бюро безопасности связи.
На 5 ноября 2008 года было сертифицировано более 250 реализаций SHA-2, четыре из которых могли оперировать сообщениями с длиной в битах, не кратной восьми[26].
Сертифицировано FIPS PUB 180-4, CRYPTREC и NESSIE.
См. также
[править | править код]Примечания
[править | править код]- ↑ FIPS PUB 180-2 (англ.). — первоначальный вариант стандарта для SHA-2. Дата обращения: 19 ноября 2008. Архивировано 18 марта 2012 года.
- ↑ FIPS PUB 180-2 with change notice (англ.). — вариант стандарта с SHA-224. Дата обращения: 19 ноября 2008. Архивировано 18 марта 2012 года.
- ↑ FIPS PUB 180-3 (англ.). — редакция Secure Hash Standard от октября 2008 года. Дата обращения: 19 ноября 2008. Архивировано 18 марта 2012 года.
- ↑ FIPS PUB 180-4 (англ.). — редакция Secure Hash Standard от августа 2015 года. Дата обращения: 28 августа 2015. Архивировано из оригинала 26 ноября 2016 года.
- ↑ US patent 6829355 (англ.). — Device for and method of one-way cryptographic hashing. Дата обращения: 14 мая 2017. Архивировано 27 июля 2016 года.
- ↑ Licensing Declaration for US patent 6829355. (неопр.). Архивировано 16 июня 2016 года. (англ.)
- ↑ "Crypto++ 5.6.0 Benchmarks". Retrieved 2013-06-13. Дата обращения: 25 сентября 2016. Архивировано 14 октября 2016 года.
- ↑ Gilbert H., Handschuh H. Security Analysis of SHA-256 and Sisters (англ.) // Selected Areas in Cryptography: 10th Annual International Workshop, SAC 2003, Ottawa, Canada, August 14-15, 2003. Revised Papers / M. Matsui, R. J. Zuccherato — Berlin, Heidelberg, New York City, London: Springer Berlin Heidelberg, 2004. — P. 175—193. — (Lecture Notes in Computer Science; Vol. 3006) — ISBN 978-3-540-21370-3 — ISSN 0302-9743; 1611-3349 — doi:10.1007/978-3-540-24654-1_13
- ↑ Somitra Kumar Sanadhya, Palash Sarkar. 22-Step Collisions for SHA-2 Архивная копия от 30 марта 2010 на Wayback Machine (англ.)
- ↑ Somitra Kumar Sanadhya, Palash Sarkar. Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family (англ.)
- ↑ Презентация «Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family» Архивная копия от 3 июля 2010 на Wayback Machine (англ.)
- ↑ Mendel F., Nad T., Schläffer M. Improving Local Collisions: New Attacks on Reduced SHA-256 (англ.) // Advances in Cryptology – EUROCRYPT 2013: 32nd Annual International Conference on the Theory and Applications of Cryptographic Techniques, Athens, Greece, May 26-30, 2013. Proceedings / T. Johansson, P. Q. Nguyen — Springer Berlin Heidelberg, 2013. — P. 262—278. — 736 p. — ISBN 978-3-642-38347-2 — doi:10.1007/978-3-642-38348-9_16
- ↑ Christoph Dobraunig, Maria Eichlseder, and Florian Mendel. Analysis of SHA-512/224 and SHA-512/256 (неопр.). — 2016. Архивировано 15 июля 2017 года.
- ↑ Schneier on Security: NIST Hash Workshop Liveblogging (5) Архивная копия от 7 октября 2008 на Wayback Machine (англ.)
- ↑ Hash cracked — heise Security Архивная копия от 6 декабря 2008 на Wayback Machine (англ.)
- ↑ FIPS 180-2: Secure Hash Standard (SHS): 6. Applicability Архивная копия от 12 марта 2012 на Wayback Machine (англ.)
- ↑ SHA-1, SHA-256 в результатах поисковой системы Google
- ↑ draft-ietf-smime-sha2-08 Архивная копия от 22 июня 2009 на Wayback Machine (англ.): Using SHA2 Algorithms with Cryptographic Message Syntax
- ↑ SHA-2 hash support in OpenLDAP Архивная копия от 27 июля 2010 на Wayback Machine (англ.)
- ↑ 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
- ↑ RFC 4880: OpenPGP Message Format
- ↑ Overview of Windows Vista Service Pack 1: New Standards Архивная копия от 12 марта 2016 на Wayback Machine (англ.)
- ↑ FIPS-186-2 Архивировано 18 мая 2009 года.: Digital Signature Standard (DSS)]
- ↑ Speed Comparison of Popular Crypto Algorithms [1] Архивная копия от 15 октября 2008 на Wayback Machine (англ.)
- ↑ SHS Validation List Архивная копия от 23 августа 2011 на Wayback Machine (англ.)
Литература
[править | править код]- Лапонина О.Р. Криптографические основы безопасности. — М.: Интернет-университет информационных технологий - ИНТУИТ.ру, 2004. — С. 320. — ISBN 5-9556-00020-5.
- Нильс Фергюсон, Брюс Шнайер. Практическая криптография = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems. — М. : Диалектика, 2004. — 432 с. — 3000 экз. — ISBN 5-8459-0733-0, ISBN 0-4712-2357-3.
- Анализ усечённого варианта SHA-256 (недоступная ссылка) (англ.)
- Коллизии усечённого варианта SHA-256 (англ.)
- Нелинейные атаки на усечённые варианты хеш-функций SHA-2 (англ.)
- Детерминированное конструирование коллизий для семейства хешей SHA-2 с 21 итерацией (англ.)
Ссылки
[править | править код]- FIPS 180-3 Архивировано 18 марта 2012 года.: Secure Hash Standard (SHS)
- RFC 3874: A 224-bit One-way Hash Function: SHA-224
- RFC 4634: US Secure Hash Algorithms (SHA and HMAC-SHA)