Криптографія на основі ідентичності SM9 (IBC)

SM9 — член китайського набору SM, який працює з ідентичностями: будь-який рядок — адреса електронної пошти, номер телефону, серійний номер пристрою — працює напряму як відкритий ключ, а Центр генерації ключів видає відповідні закриті ключі. Це сторінка лише для читання з поясненням: як покроково працюють IBE та IBS, як криптографія на основі ідентичності порівнюється з сертифікатами PKI і офіційні параметри кривої.
Калькулятор запланований. Калькулятор SM9 у браузері є в дорожній карті криптографічної родини — апарат спарювання (башта розширень полів Fp12, цикл Міллера, фінальне піднесення до степеня) є окремим ядром. Тим часом сусідні сторінки повністю обчислюють SM2, SM3 і SM4 у вашому браузері.
Що таке SM9?
Одним реченням: SM9 — китайський національний стандарт криптографії на основі ідентичності (GB/T 38635.1/.2-2020, наступник серії GM/T 0044-2016): відкритий ключ є рядком ідентичності на кшталт bob@example.com, відповідний закритий ключ видає довірений Центр генерації ключів (KGC), а математика, що це робить можливим, — білінійне спарювання на 256-бітній кривій BN.

Звичайна криптографія з відкритим ключем (RSA, SM2, ECC) відповідає на питання «чи справді це ключ Боба?» сертифікатами: ієрархія CA засвідчує, що певний випадковий на вигляд блок ключа належить Бобу. Криптографія на основі ідентичності перевертає це: саме ім'я є матеріалом ключа. Будь-хто, хто знає адресу електронної пошти Боба, може зашифрувати для нього або перевірити його підписи, нічого не отримуючи — жодного каталогу сертифікатів, жодної перевірки ланцюжка довіри. Ціна — довірена третя сторона, яка може вивести кожен закритий ключ, і значно важча математика. SM9 — стандартизоване китайське втілення цього обміну.

Учасники: хто що тримає
РольЩо це таке
Ідентичність (ID)Будь-який байтовий рядок, наприклад bob@example.com, що використовується напряму як відкритий ключ. Він має бути канонічним: точним побайтово, без двох написань однієї людини.
KGCЦентр генерації ключів: зберігає головний закритий ключ, перевіряє, кому належить ідентичність, і видає відповідний закритий ключ користувача.
Головні пари ключівДві незалежні пари: підпис (таємний ks, відкритий Ppub-s = [ks]P2) і шифрування (таємний ke, відкритий Ppub-e = [ke]P1). Зверніть увагу на навмисну асиметрію: один головний відкритий ключ живе в G2, інший — у G1.
Закритий ключ користувачаТочка на кривій, виведена з ID центром KGC. Ключ підпису dsA живе в G1; ключ розшифрування deB — у G2.
hidОднобайтовий ідентифікатор функції, що змішується в кожне виведення ключа, тож одна ідентичність дає криптографічно незалежні ключі для підпису, шифрування й обміну ключами.
H1, H2, KDFДопоміжні функції на основі SM3 (GB/T 32905): відображення хеш-до-цілого і функція виведення ключа.
Спарювання eБілінійне спарювання R-ate e: G1 × G2 → GT над 256-бітною кривою BN, визначеною нижче. Алгебраїчний рушій усієї схеми.
Як працює шифрування на основі ідентичності SM9 (IBE)

Аліса хоче надіслати таємницю на bob@example.com — можливо, ще до того, як Боб зареєструвався в KGC:

1. Аліса сама виводить відкритий ключ Боба: QB = [H1(IDB ‖ hid, N)]P1 + Ppub-e. Немає пошуку в каталозі, немає отримання сертифіката — їй потрібні лише рядок ідентичності і відкритий головний ключ.
2. Ефемерний: випадкове r; обчислити точку C1 = [r]QB.
3. Спарювання: g = e(Ppub-e, P2), потім w = gr.
4. Ключі: K = KDF(C1 ‖ w ‖ IDB, klen) (на основі SM3), розбивається на K1 (ключ обгортання) і K2 (ключ MAC).
5. Маска: C2 — повідомлення, XOR-нене з (або зашифроване під) K1; C3 = MAC(K2, C2). Шифротекст об'єднує C1, C3 і C2.
6. Боб, коли б він не реєструвався: KGC перевіряє, що він справді bob@example.com, і видає deB = [ke·(H1(IDB ‖ hid, N) + ke)-1]P2. Потім він обчислює w′ = e(C1, deB), відтворює той самий K, перевіряє MAC і розкриває повідомлення.

Чому це працює: за білінійністю e(C1, deB) = e([r(H1+ke)]P1, [ke/(H1+ke)]P2) = e(P1, P2)r·ke = w — рівно те значення, яке Аліса вклала в KDF. Елегантна частина — крок 6: шифрування не потребує попередньої реєстрації. Аліса може запечатати повідомлення сьогодні; Боб відкриє його лише після того, як доведе KGC свою ідентичність. Відкладене генерування ключів — відмітна риса IBE.

Як працюють підписи на основі ідентичності SM9 (IBS)

Аліса підписує повідомлення M своїм ключем підпису dsA:

1. g = e(P1, Ppub-s); випадкове r; w = gr.
2. h = H2(M ‖ w, N); l = (r − h) mod N (повторити зі свіжим r, якщо l = 0).
3. S = [l]dsA. Підпис — пара (h, S).

Будь-хто, хто знає ідентичність Аліси, перевіряє її без жодного сертифіката:

4. P = [H1(IDA ‖ hid, N)]P2 + Ppub-s; u = e(S, P); w′ = u · gh.
5. Підпис дійсний рівно тоді, коли H2(M ‖ w′, N) = h.

Знову білінійність замикає коло: u = e(P1,P2)l·ks і gh = e(P1,P2)ks·h, тож w′ = e(P1,P2)ks·(l+h) = e(P1,P2)ks·r = w.

На основі ідентичності проти на основі сертифікатів (IBE проти PKI)

Це рішення, яке справді має значення під час вибору SM9. Обидва світи дають шифрування з відкритим ключем і підписи; відрізняються вони тим, де живе довіра:

АспектPKI / сертифікати (світ SM2, RSA)На основі ідентичності (SM9)
Відкритий ключ bob@…Блоб 65+ байтів всередині сертифіката, отриманий з каталогу або від самого отримувачаСам рядок bob@example.com; перевіряючий обчислює ключ з нього
Корінь довіриІєрархія CA; кожен ланцюжок має перевірятися до кореняОдин відкритий головний ключ KGC для всього домену
Шифрувати, коли отримувач ще не має ключа?Ні — спершу потрібен його дійсний сертифікатТак — шифруйте зараз; він реєструється і розшифровує пізніше
Закритий ключ генеруєВласна машина або пристрій користувача (часто ніколи його не покидає)KGC централізовано, з ідентичності
Депонування ключаЗа задумом немаєЗакладене: KGC може вивести закритий ключ кожного користувача
ВідкликанняCRL / OCSP на кожен сертифікатАналога немає; звичайна практика вбудовує вікна дійсності в ID (напр., bob@example.com|2026), щоб ключі спливали за конструкцією
Вартість однієї операціїЗвичайна арифметика ECC — швидкоБілінійне спарювання — на порядки повільніше за скалярне множення
СтандартиX.509 / RFC 5280; SM2 за GB/T 32918GB/T 38635.1/.2-2020 (раніше GM/T 0044-2016)
Природне середовищеВідкритий інтернет: TLS, підписування коду, загальний PKIЗакриті екосистеми: обмін повідомленнями одного банку, пошта одного відомства, ідентичність парку пристроїв — де центральний орган прийнятний і шифрування без реєстрації окупається

Практичне правило: SM9 дає керування ключами без сертифікатів ціною депонування ключа і повільнішої математики. Якщо ви не можете прийняти третю сторону, яка може прочитати все або підробити будь-кого, залишайтеся з сертифікатами SM2; якщо мета — шифрування без реєстрації всередині однієї організації, SM9 — саме той інструмент.

Системні параметри SM9 (офіційна 256-бітна крива BN)

Набір параметрів з GB/T 38635.1-2020 (також у GM/T 0044.5-2017). Це довідкові значення лише для читання — самотест нижче перевіряє кожну константу цієї сторінки проти незалежно перевірених значень:

ПунктЗначення
КриваКрива Барето–Неріга (BN) E: y2 = x3 + b над Fp, b = 05
Параметр кривої t60000000 0058F98A
Просте число поля pB6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457D
Порядок групи NB6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEE E56EE19C D69ECF25
Параметризаціяp = 36t4 + 36t3 + 24t2 + 6t + 1; N = 36t4 + 36t3 + 18t2 + 6t + 1
Кофактор1
Ступінь вбудовування k12 (башта полів Fp → Fp2 → Fp4 → Fp12)
СпарюванняСпарювання R-ate e: G1 × G2 → GT, усі три групи порядку N
Генератор G1 P1 (на E)x = 93DE051D 62BF718F F5ED0704 487D01D6 E1E40869 09DC3280 E8C4E481 7C66DDDD
y = 21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CB FA602435 0C464CD7 0A3EA616
Генератор G2 P2 (на скрученні E′: y2 = x3 + 5·u над Fp2, u2 = −2)xc0 = 37227552 92130B08 D2AAB97F D34EC120 EE265948 D19C17AB F9B7213B AF82D65B
xc1 = 85AEF3D0 78640C98 597B6027 B441A01F F1DD2C19 0F5E93C4 54806C11 D8806141
yc0 = A7CF28D5 19BE3DA6 5F317015 3D278FF2 47EFBA98 A71A0811 6215BBA5 C999A7C7
yc1 = 17509B09 2E845C12 66BA0D26 2CBEE6ED 0736A96F A347C8BD 856DC76B 84EBEB96
(елементи Fp2 записано як c0 + c1·u)
Хеш / KDFH1, H2 і KDF побудовані на SM3 (GB/T 32905-2016); hid — однобайтовий ідентифікатор функції, обраний KGC
Де SM9 стоїть у наборі SM
  • SM9 (ця сторінка) — руйнівник керування ключами: ідентичності замість сертифікатів, KGC замість ієрархії CA.
  • SM3 — хеш; H1/H2/KDF SM9 побудовані на ньому. Обчислюйте дайджести на сторінці SM3.
  • SM4 — блоковий шифр, який зазвичай шифрує великі обсяги даних під ключем, що його видає KDF SM9. Спробуйте на сторінці SM4.
  • SM2 — аналог із світу сертифікатів: ті самі завдання (підпис, шифрування) зі звичайним ECC і PKI за ним. Повний калькулятор — на сторінці SM2.
Примітка про відповідність: SM9 — вибір незалежності набору і керування ключами для регульованих китайських розгортань, порівнянний за силою з іншими системами ~128 біт. Розгортання у продакшені мають ставитися до головного ключа KGC як до головного скарбу — зазвичай він зберігається в HSM, розділений між кількома довіреними особами, або обидва.
Поширені хибні уявлення
  • «Ідентичність — це відкритий ключ, отже будь-хто може розшифрувати мою пошту». Ні — будь-хто може зашифрувати для ідентичності і перевірити підписи від неї; лише власник закритого ключа, виданого KGC, може розшифрувати або підписати. KGC перевіряє, хто насправді Боб, перш ніж видати deB.
  • Ігнорування депонування ключа. Скомпрометований головний ключ KGC означає, що зловмисник може непомітно вивести закритий ключ кожного користувача — повне розшифрування і повна підміна для домену. Це задумано (так працює криптографія на основі ідентичності), а не вада, яку можна виправити. Пом'якшуйте операційно: HSM, пороговий KGC, розділений між суб'єктами, і суворі журнали аудиту видачі.
  • Припущення, що рядок ідентичності поблажливий. Він хешується точно побайтово: Bob@Example.COM, bob@example.com і " bob@example.com" — три різні відкриті ключі з трьома різними закритими ключами. Зафіксуйте один канонічний формат до розгортання — і розгляньте додавання вікна дійсності для відкликання.
  • «256-бітна крива, отже 256-бітна стійкість». Криптографія на спарюваннях не масштабується, як звичайний ECC: атаки працюють у величезних полях Fp12/Fp6, де застосовуються алгоритми індексного числення (субекспоненційні). Опубліковані аналізи відносять 256-бітні криві BN до класу ~100–128 біт стійкості, а дослідники пропонували більші параметри BN для SM9 (напр., «Searching BN Curves for SM9», 2019). Ставтеся до SM9 приблизно як до класу AES-128 — надійний, але не 256-бітна фортеця.
  • Очікування його в OpenSSL. OpenSSL реалізує SM2/SM3/SM4, але не має SM9. Робочі відкриті стеки включають GmSSL і Bouncy Castle.
Часті запитання (FAQ)

Чи SM9 — китайський винахід? Концепція — ні: Шамір запропонував криптографію на основі ідентичності в 1984, а Боне–Франклін (2001) створили першу практичну IBE на спарюваннях. SM9 (GM/T 0044-2016, потім GB/T 38635.1/.2-2020) — китайське національне втілення цієї лінії.

Чому на цій сторінці немає калькулятора SM9? На відміну від SM2/SM3/SM4, SM9 потребує білінійного спарювання: башти розширення полів Fp12, цикл Міллера і фінальне піднесення до степеня — кілька тисяч рядків ретельного коду для великих чисел. Він є в дорожній карті родини; до того ця сторінка описує алгоритм, а сусідні сторінки обчислюють решту набору в браузері.

Чи може SM9 замінити SM2, SM3 і SM4? Ні — вони розв'язують різні задачі. SM9 замінює інфраструктуру сертифікатів, а не примітиви: всередині вона покладається на SM3 для хешування і виведення ключів, а обгорнутий ключ для великих даних зазвичай керує SM4. SM2 лишається відповіддю, коли потрібна підзвітність у стилі сертифікатів без депонування ключа.

Що саме таке hid? Однобайтовий ідентифікатор функції (обраний і опублікований KGC), який змішується в кожен хеш H1. Оскільки ключі підписування, шифрування і обміну ключами хешують ідентичність разом із різними значеннями hid, один витікаючий ключ користувача компрометує лише цю одну функцію.

Як відкликають ідентичності? Механізму CRL всередині SM9 немає. Стандартна практика: вбудувати термін дії в саму ідентичність (bob@example.com|2026-Q4), щоб ключі періодично перевидавалися, і просто дати KGC припинити видачу для відкликаних ідентичностей.

Де SM9 справді використовують? У регульованих китайських секторах — банківській справі, держуправлінні та промисловому обміні повідомленнями, зазвичай у закритих екосистемах, де один орган прийнятний і «зашифрувати на адресу електронної пошти сьогодні, зареєструвати користувача завтра» варте вартості спарювання.

Самоперевірка
Це сторінка лише для читання, тож самотест перевіряє саму сторінку: кожну константу кривої, показану вище, знову перевіряють проти незалежно перевірених значень (просте p і порядок N перераховані з параметризації BN, обидва генератори перевірені на належність кривій і порядок N), стандартні номери, інваріанти шаблону (без DOCTYPE, маркер збірки), перехресні посилання і наявність FAQ.