Связать?

SM3 (хеш-функция)

Материал из Википедии — свободной энциклопедии
Перейти к навигацииПерейти к поиску
Эта статья — о хеш-функции. Об электропоезде см. Sm3.

SM3 —криптографическая хэш-функция, являющаяся частью национального криптографического стандартаКитая. Она была опубликована Государственным управлением криптографии 17 декабря 2010 под названием «GM/T 0004-2012: криптографический хэш алгоритм SM3»[1][2]. SM3 в основном используется вэлектронных подписях,имитовставках игенераторах псевдослучайных чисел[3].

Содержание

Определяющий стандарт

[править |править код]

Функция SM3 определена в стандарте «GM/T 0004-2012: криптографический хэш алгоритм SM3».

Приказом от 2016 года Национальное управление криптографии утвердило SM3 как один из отраслевых стандартов[1].

История создания

[править |править код]

SM3 — 256-битный хэш алгоритм. Он является модификацией SHA-2. Создательница алгоритма —Ван Сяоюнь[англ.], которая известна открытием новых способов атак для разных криптографических хэш-функций (MD5 иSHA-1). SM3 был опубликован в 2010 году. SM3 используетструктуру Меркла — Дамгора[4].

Описание алгоритма

[править |править код]

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

[править |править код]
Графическое представление работы алгоритма SM3

Алгоритм принимает на вход сообщениеm{\displaystyle m} длиныl{\displaystyle l}. После процедуры пэддинга и нескольких итераций компрессии на выходе получится 256-битное значение хэш-функции.

Значения вектора инициализации

[править |править код]

Значения для инициализации следующие:

Константы

[править |править код]

Tj={79cc4519,if 0j157a879d8a,if 16j63{\displaystyle T_{j}={\begin{cases}79cc4519,&{\mbox{if }}0\leq j\leq 15\\7a879d8a,&{\mbox{if }}16\leq j\leq 63\end{cases}}}

Булевы функции

[править |править код]

FFj={XYZ,for 0j15(XY)(YZ)(XZ),if 16j63{\displaystyle FF_{j}={\begin{cases}X\oplus Y\oplus Z,&{\mbox{for }}0\leq j\leq 15\\(X\wedge Y)\lor (Y\wedge Z)\lor (X\wedge Z),&{\mbox{if }}16\leq j\leq 63\end{cases}}}
GGj={XYZ,for 0j15(XY)(¬XZ),if 16j63{\displaystyle GG_{j}={\begin{cases}X\oplus Y\oplus Z,&{\mbox{for }}0\leq j\leq 15\\(X\wedge Y)\lor (\neg X\wedge Z),&{\mbox{if }}16\leq j\leq 63\end{cases}}}

Перестановки

[править |править код]

P0(X)=X(X<<<9)(X<<<17){\displaystyle P_{0}(X)=X\oplus (X<<<9)\oplus (X<<<17)}

P1(X)=X(X<<<15)(X<<<23){\displaystyle P_{1}(X)=X\oplus (X<<<15)\oplus (X<<<23)}

Пэддинг

[править |править код]

Сообщениеm{\displaystyle m} сосостоит изl{\displaystyle l} бит. Добавим бит 1 к концу сообщения, а такжеk{\displaystyle k} нулевых бит, гдеk{\displaystyle k} — наименьшее неотрицательное число, удовлетворяющее соотношениюl+k+1488 mod 512{\displaystyle l+k+1\equiv 488{\mbox{ mod }}512}. Затем к полученному сообщению необходимо добавить 64-битную строку, являющуюся двоичным представлением числаl{\displaystyle l}, изначальной длины сообщения. В результате будет получена строкаm{\displaystyle m'}, длина которой кратна 512.

Процедура повторения функции компрессии

[править |править код]

Сообщениеm{\displaystyle m'}, уже прошедшее пэддинг, разделяется на 512-битные блоки (в обозначенияхm=B(0)B(1)B(n1){\displaystyle m'=B^{(0)}B^{(1)}\dots B^{(n-1)}}, гдеn=l+k+65512{\displaystyle n={\frac {l+k+65}{512}}}).

Далее алгоритм следующий:

FOR i=0 to n1:{\displaystyle {\mbox{FOR }}i=0{\mbox{ to }}n-1:}

V(i+1)=CF(V(i),B(i)){\displaystyle V(i+1)=CF(V(i),B(i))}

ENDFOR{\displaystyle ENDFOR}

ЗдесьCF{\displaystyle CF} — функция компрессии,V(0){\displaystyle V^{(0)}} — 256-битный вектор инициализации. Результат после итерации естьV(n){\displaystyle V^{(n)}}.

Расширение сообщения

[править |править код]

Блок сообщенияB(i){\displaystyle B^{(i)}} расширяется до 132 словW0,W1W67,W1W63{\displaystyle W_{0},W_{1}\dots W_{67},W'_{1}\dots W'_{63}}, которые добавлены к компрессионной функцииCF{\displaystyle CF}:

Делим блокB(i){\displaystyle B^{(i)}} на 16 слов.

FOR j=16 to j=67:{\displaystyle {\mbox{FOR }}j=16{\mbox{ to }}j=67:}

WjP1(Wj16Wj9(Wj3<<<15))(Wj13<<<7)Wj6{\displaystyle W_{j}\leftarrow P_{1}(W_{j-16}\oplus W_{j-9}\oplus (W_{j-3}<<<15))\oplus (W_{j-13}<<<7)\oplus W_{j-6}}

ENDFOR{\displaystyle ENDFOR}

FOR j=0 to j=63:{\displaystyle {\mbox{FOR }}j=0{\mbox{ to }}j=63:}

Wj=WjWj+4{\displaystyle W_{j}=W_{j}\oplus W_{j+4}}

ENDFOR{\displaystyle ENDFOR}

Компрессионная функция

[править |править код]

ПустьABCDEFGH{\displaystyle A{\mbox{, }}B{\mbox{, }}C{\mbox{, }}D{\mbox{, }}E{\mbox{, }}F{\mbox{, }}G{\mbox{, }}H} — 8 слов регистров,SS1SS2TT1TT2{\displaystyle SS1{\mbox{, }}SS2{\mbox{, }}TT1{\mbox{, }}TT2} — 4 промежуточные переменные. Вычислительная процедура следующая:

ABCDEFGHV(i){\displaystyle ABCDEFGH\leftarrow V(i)}
FOR j=0 to 63{\displaystyle {\mbox{FOR }}j=0{\mbox{ to }}63}
SS1((A<<<12)+E+(Tj<<<(j mod 32)))<<<7{\displaystyle SS1\leftarrow ((A<<<12)+E+(T_{j}<<<(j{\mbox{ mod }}32)))<<<7}SS2SS1(A<<<12){\displaystyle SS2\leftarrow SS1\oplus (A<<<12)}
TT1FFj(A,B,C)+D+SS2+Wj{\displaystyle TT1\leftarrow FF_{j}(A,B,C)+D+SS2+W'_{j}}
TT2GGj(E,F,G)+H+SS1+Wj{\displaystyle TT2\leftarrow GG_{j}(E,F,G)+H+SS1+W'_{j}}
DC{\displaystyle D\leftarrow C}
CB<<<9{\displaystyle C\leftarrow B<<<9}
BA{\displaystyle B\leftarrow A}
ATT1{\displaystyle A\leftarrow TT1}
HG{\displaystyle H\leftarrow G}
GF<<<19{\displaystyle G\leftarrow F<<<19}
FE{\displaystyle F\leftarrow E}
EP0(TT2){\displaystyle E\leftarrow P_{0}(TT2)}
ENDFOR{\displaystyle ENDFOR}
V(i+1)ABCDEFGHV(i){\displaystyle V(i+1)\leftarrow ABCDEFGH\oplus V(i)}

Значение хэш-функции

[править |править код]

Итого,ABCDEFGHV(n){\displaystyle ABCDEFGH\leftarrow V^{(n)}}. Отсюда окончательное значение хэш-функцииy:=ABCDEFGH{\displaystyle y:=ABCDEFGH}[3].

Примеры работы алгоритма на разных сообщениях[3]

[править |править код]

Пример 1

[править |править код]

Для входного сообщения «abc» (и егоASCII версии 616263 соответственно) значение хэш-функции равно:

66c7f0f4 62eeedd9 d1f2d46b dc10e4e2 4167c487 5cf2f7a2 297da02b 8f4ba8e0

Пример 2

[править |править код]

Для входного сообщения с кодом длиной 512 бит:

61626364 61626364 61626364 61626364 61626364 61626364 61626364 6162636461626364 61626364 61626364 61626364 61626364 61626364 61626364 61626364

Хэш-функция будет равна:

debe9ff9 2275b8a1 38604889 c18e5a4d 6fdb70e5 387e5765 293dcba3 9c0c5732

Аппаратная оптимизация и оценка эффективности

[править |править код]

Результаты сравнения эффективности алгоритма SM3, оригинального и 2 его оптимизаций, а такжеSHA-256 представлены в таблице ниже[5]. Эффективность оценивается для параметров, которые указаны в заглавии колонок.

Сравнение эффективности SM3 и его модификаций с алгоритмом SHA-256
Название алгоритмаДевайсSlicesМаксимальная частота (MHz)Бит/циклПропускная способность (Mbps)Пропускная способность/slice
Стандартный SM3Virtex-53842147.5316114.20
C-SM3Virtex-52342157.5316196.92
T-SM3Virtex-53283627.5327268.31
SHA-256Virtex-53192217.7617145.37

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

[править |править код]

Не существует никаких формальных доказательств относительно качества этого алгоритма, тем не менее, не зарегистрировано успешных атак на SM3[3].

Криптоаналитические результаты для различных атак на алгоритм SM3 агрегированы в следующей таблице.

Результаты криптоаналитических атак на алгоритм SM3
Тип атакиЧисло шаговСложностьСсылка на исследование
Коллизионная атака202^117.1[6]
Коллизия инициализации242^249[6]
Атака нахождения прообраза282^241.5[7]
Атака нахождения прообраза302^249[7]
Атака нахождения прообраза292^245[8]
Атака нахождения прообраза302^251.1[8]
Псевдоатака нахождения прообраза312^245[8]
Псевдоатака нахождения прообраза322^251.1[8]
Методом бумеранга332^125[9]
Методом бумеранга352^117.1[9]
Методом бумеранга352^33.6[10]
Методом бумеранга372^192[10]

Реализация и применение

[править |править код]

Алгоритм является открытым и, по утверждениямКитайского информационного интернет-центра, является аналогомSHA-256 в вопросах безопасности и эффективности[4].

Так как SM3 является единственной функцией, разрешенной для использования в Китае Национальным управлением криптографии, ее реализация в аппаратуре необходима для применения в китайском оборудовании[3].

Примеры прикладного применения SM3 указаны в таблице:

Область примененияДетали
X.509Существует реализация SM3 для созданияэлектронной цифровой подписи сертификата[11]
PGPSM3 наряду с SM2 и SM4 реализован в расширении PGP для использования на территории Китая[12]
IPSecРеализация IPSec IKEv1 поддерживает SM3[13]
Financial IC Card[14]Одним из методов обеспечивания безопасности банковских карт, основанных на чипах, является SM3[15].
OpenSSLВ криптографической библиотеке OpenSSL реализован алгоритм SM3[16]
Hash Crypto Engine BA413[17]BA413 является блоком для проектирования микросхем, который используется для задачи формирования ключа и применения цифровой подписи. Для применения на территории Китая в нем внедрен SM3[17].

См. также

[править |править код]

Примечания

[править |править код]
  1. 12Announcement No.23 of the State Cryptography Administration (кит.). The Office of Security Commercial Code Administration (OSCCA) (21 марта 2012). Архивировано 14 августа 2016 года.
  2. SM3 cryptographic hash algorithm (кит.). CNNIC (4 декабря 2013). Дата обращения: 27 октября 2020. Архивировано 19 сентября 2016 года.
  3. 12345The SM3 Cryptographic Hash Function (англ.). Internet Engineering Task Force (24 ноября 2017). Дата обращения: 27 октября 2020. Архивировано 4 октября 2020 года.
  4. 12SM3 Cryptographic Hash Algorithm (Chinese Standard)  (22 февраля 2017). Дата обращения: 26 октября 2020. Архивировано 30 октября 2020 года.
  5. Yuan Ma, Luning Xia, Jingqiang Lin, Jiwu Jing,Zongbin Liu, and Xingjie Yu. Hardware Performance Optimization and Evaluation of SM3 Hash Algorithm on FPGA. — 2012. — [Архивировано 20 января 2022 года.]
  6. 12Mendel, F., Nad, T. and M. Schlaffer. Finding collisions for round-reduced SM3. — 2013. — [Архивировано 20 января 2022 года.]
  7. 12Zou, J., Wu, W., Wu, S., Su, B. and L. Dong. Preimage attacks on step-reduced SM3 hash function. — 2012. — [Архивировано 7 апреля 2019 года.]
  8. 1234Zou, G. and Y. Shen. Preimage and Pseudo-Collision Attacks on Step-Reduced SM3 Hash Function. — 2013.
  9. 12Kircanski, A., Wang, G., Shen, Y. and A. Youssef. Boomerang and slide-rotational analysis of the SM3 hash function. — 2013. — [Архивировано 23 мая 2022 года.]
  10. 12Bai, D., Yu, H., Wang, G. and X. Wang. Improved Boomerang Attacks on Round-Reduced SM3 and Keyed Permutation of BLAKE-256. — 2015. — [Архивировано 30 октября 2020 года.]
  11. Hua Jiang, Gang Zhang, Jinpo Fan. Structure Analysis and Generation of X.509 Digital Certificate Based on National Secret. — 2019. — [Архивировано 13 февраля 2020 года.]
  12. SCA Extensions For OpenPGP . Дата обращения: 16 ноября 2020. Архивировано 9 августа 2020 года.
  13. IPSec VPN
  14. China Financial Integrated Circuit (IC) Card Specifications
  15. Ye Hu, Liji Wu, An Wang, Beibei Wang. Hardware Design and Implementation of SM3 Hash Algorithm for Financial IC Card. — 2014.
  16. OpenSSL Documentation . Дата обращения: 16 ноября 2020. Архивировано 9 марта 2018 года.
  17. 12Hash Crypto Engine . Дата обращения: 16 ноября 2020. Архивировано 31 декабря 2020 года.
На эту статьюне ссылаются другие статьи Википедии.
Это делает её менее доступной для читателей. Пожалуйста, установите ссылки, используяинструмент с подсказками для облегчения поиска.(28 октября 2020)
Источник —https://ru.wikipedia.org/w/index.php?title=SM3_(хеш-функция)&oldid=146915360
Категория:
Скрытые категории: