Генератор хешу SM3

Обчисліть дайджести SM3 — GB/T 32905-2016, китайський національний криптографічний стандарт хешування — тексту або файлів повністю у вашому браузері. Звичайний SM3 або HMAC-SM3 з ключем, вивід hex або Base64, з паралельною доріжкою SHA-256 для порівняння. Нічого не вивантажується.
АлгоритмРозщеплення
SM3–
SHA-256 (доріжка порівняння, лише текстове джерело)–
Подробиці–
Перевірка з командного рядка — дайджест, який ця сторінка виводить для файлу, збігається з openssl dgst -sm3 file.bin (OpenSSL 1.1.1+) і gmssl dgst -sm3 file.bin побайтово. Для HMAC-SM3: openssl dgst -sm3 -hmac <key> з текстовим ключем.
Самоперевірка
Перезапускає рушій сторінки на офіційних векторах додатка A GB/T 32905-2016, векторах HMAC-SM3 GB/T 15852.2 (ISO/IEC 9797-2), інкрементальному запуску з частинами по 1000 байтів, обох пулах зразків, доріжці Base64 проти власного кодувальника браузера і негативних шляхах (некоректний hex-ключ має бути відхилений). Нічого нікуди не надсилається.
Що таке SM3?
Одним реченням: SM3 — це криптографічний хеш китайського органу національних стандартів — хеш Меркла–Дамгора 256 біт у тій самій структурній родині, що й SHA-256, але з власними початковими значеннями, раундовими константами, булевими функціями і розширенням повідомлення на 68 слів, опублікований як GM/T 0004-2012 і пізніше GB/T 32905-2016.
SM3 проти SHA-256 одним поглядом
АспектSM3SHA-256
Розмір дайджесту / блоку / слова256 / 512 / 32 біти256 / 512 / 32 біти
Раунди стиснення6464
Розширення повідомленняW[0..67] + похідні W'[0..63], перестановка P1W[0..63] з обертаннями σ0/σ1
Раундові константидві константи T0..15=0x79CC4519, T16..63=0x7A879D8A, обертаються на j64 константи K[0..63]
Булеві функціїПеремикання FF/GG на раунді 16Ch/Maj скрізь
Порядок байтівbig-endianbig-endian
Опубліковано2010 (GM/T 0004-2012; GB/T 32905-2016)2001 (FIPS 180-2)
Міжнародний статусвключено до ISO/IEC 10118-3:2018FIPS 180-4

Той самий скелет, інші м'язи: обидва алгоритми розбивають повідомлення на 512-бітні блоки і проводять 64 раунди змішування над вісьмома 32-бітними регістрами, але кожна константа, кожна величина обертання і крок розширення повідомлення відрізняються, тому вони дають абсолютно не пов'язані дайджести для того самого входу. SM3("abc") — це 66c7f0f4...8f4ba8e0, тоді як SHA-256("abc") — ba7816bf...f20015ad — спробуйте обидва кнопкою «Зразок».

Чи означає «національний стандарт» безпечніший?

Ні — і це не його завдання. SM3 пропонує безпеку, порівнянну з SHA-256: дайджест 256 біт, відомих практичних атак колізій або прообразу немає. Причина існування SM3 — незалежність набору і регуляторна відповідність: китайські норми комерційної криптографії (商用密码, «SM») вимагають вітчизняного набору в сертифікованих секторах — банківській справі, держуправлінні, телекомунікаційній інфраструктурі — щоб увесь стек (хеш, підпис, шифр) контролювався одним національним процесом стандартизації, а не іноземними. Поза цим контекстом SHA-256 і SM3 за силою взаємозамінні; обирайте SM3, коли ваш партнер, регулятор або протокол (наприклад, TLS 1.3 з наборами шифрів SM за RFC 8998) його вимагає.

Де SM3 стоїть у наборі SM
  • SM3 (ця сторінка) — хеш. Також дайджест у підписах SM2 (значення ZA) і KDF шифрування SM2.
  • SM4 — 128-бітний блоковий шифр (уявіть «AES, зроблений національним»), ECB/CBC на сторінці SM4 цієї родини.
  • SM2 — алгоритм підпису і шифрування на еліптичних кривих над кривою sm2p256v1, побудований на SM3.
  • SM9 — криптографія на основі ідентичності: ваша адреса електронної пошти є вашим відкритим ключем.
Типові помилки
  • Хешування паролів SM3. SM3 — швидкий універсальний хеш, як SHA-256 — мільярди здогадів за секунду на GPU. Для зберігання паролів використовуйте bcrypt, scrypt, Argon2id або PBKDF2 з Генератора хешів паролів.
  • Припущення, що старий порядок C1C2C3 має значення тут. Порядок шифротексту — тема SM2; у SM3 такої особливості немає. Його вивід завжди 32 байти.
  • Плутанина GM/T 0004-2012 і GB/T 32905-2016. Той самий алгоритм, ті самі тестові вектори — GM/T це галузева публікація, GB/T — національна. ISO/IEC 10118-3:2018 також його містить.
  • Довіряй, але перевіряй. Самотест на цій сторінці відтворює власні вектори додатка стандарту; якщо він не каже «0 невдач», не довіряйте виводу.
Часті запитання (FAQ)

Чи є SM3 в OpenSSL? Так — OpenSSL 1.1.1 і новіші: openssl dgst -sm3 file, HMAC через -hmac. GmSSL (китайський форк) має його довше. Ця сторінка не потребує нічого з цього: алгоритм працює у вашому браузері.

Для чого HMAC-SM3? Автентифікація повідомлення: дайджест, що також доводить, хто його надіслав, бо створити його можуть лише власники спільного ключа. Стандартизовано в GB/T 15852.2 / ISO/IEC 9797-2. Ключ може бути будь-якої довжини; понад 64 байти його спершу хешують.

Чому доріжка файлів не показує порівняння з SHA-256? Порівняння використовує вбудований у WebCrypto браузера одноразовий дайджест, який потребує всього вводу в пам'яті — добре для тексту, але не для файлу 200 МБ, що передається частинами. Сам SM3 обчислюється інкрементально і тут такого обмеження не має.

Чи можна отримати дайджест у Base64? Так — селектор Формат виводу. Обидві доріжки кожного результату можна скопіювати або завантажити як невеликий текстовий звіт.