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

SM9 — член китайского набора SM, основанный на идентичности: любая строка — адрес электронной почты, номер телефона, серийный номер устройства — работает напрямую как открытый ключ, а Центр генерации ключей (KGC) выдаёт соответствующие закрытые ключи. Это страница-объяснение только для чтения: как шаг за шагом работают 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) отвечает на вопрос «действительно ли это ключ Боба?» с помощью сертификатов: иерархия ЦС ручается, что некий случайный на вид блок ключа принадлежит Бобу. Криптография на основе идентичности переворачивает это: само имя и есть материал ключа. Любой, кто знает адрес электронной почты Боба, может зашифровать для него или проверить его подписи, ничего не загружая — без каталога сертификатов и без проверки цепочки доверия. Цена — доверенная третья сторона, которая может вывести каждый закрытый ключ, и гораздо более тяжёлая математика. SM9 — стандартизированное китайское воплощение этой сделки.

Действующие лица: кто что держит
РольЧто это
Идентичность (ID)Любая байтовая строка, например bob@example.com, используется напрямую как открытый ключ. Она должна быть канонической: точной побайтно, без двух написаний одного и того же человека.
KGCЦентр генерации ключей: хранит главный закрытый ключ, проверяет, кому принадлежит идентичность, и выдаёт соответствующий закрытый ключ пользователя.
Главные пары ключейДве независимые пары: для подписи (секрет ks, открытый Ppub-s = [ks]P2) и для шифрования (секрет ke, открытый Ppub-e = [ke]P1). Обратите внимание на намеренную асимметрию: один главный открытый ключ живёт в G2, другой — в G1.
Закрытый ключ пользователяТочка на кривой, выведенная KGC из ID. Ключ подписи 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; проверяющий вычисляет ключ из неё
Корень доверияИерархия ЦС; каждая цепочка должна проверяться до корняОдин главный открытый ключ 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 вместо иерархии ЦС.
  • 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, где применимы алгоритмы index-calculus (субэкспоненциальные). Опубликованные анализы относят 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.
Частые вопросы

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, один утёкший пользовательский ключ компрометирует только одну функцию.

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

Где на самом деле используется SM9? В регулируемых китайских секторах — банковском деле, госуправлении и отраслевых сообщениях — обычно внутри закрытых экосистем, где один орган допустим и «зашифровать на адрес почты сегодня, зарегистрировать пользователя завтра» стоит цены спаривания.

Самопроверка
Это страница только для чтения, поэтому самопроверка проверяет саму страницу: каждая константа кривой, показанная выше, перепроверяется по независимо проверенным значениям (простое p и порядок N пересчитываются из параметризации BN, оба генератора проверяются на принадлежность кривой с порядком N), стандартные номера, инварианты шаблона (без DOCTYPE, маркер сборки), перекрёстные ссылки и наличие FAQ.