SM9 ID ベース暗号(IBC)

SM9 は中国 SM スイートの ID ベース版です:任意の文字列 — メールアドレス、電話番号、デバイスのシリアル番号 — がそのまま公開鍵として機能し、 鍵生成センター(KGC)が対応する秘密鍵を発行します。これは読み取り専用の解説ページです: IBE と IBS の仕組みのステップごとの説明、ID ベース暗号と PKI 証明書の比較、 公式の曲線パラメータ。
計算機は計画中。 ブラウザー内の SM9 計算機は暗号族のロードマップにあります — ペアリング機構(Fp12 拡大体の塔、Miller ループ、最終べき乗)は それ自体が 1 つのカーネルです。当面の間、兄弟ページが SM2 暗号化 / 復号 / 署名、 SM3 ハッシュ生成、 SM4 暗号化 / 復号 を完全にブラウザー内で計算します。
SM9 とは何か?
一文で言うと:SM9 は ID ベース暗号の中国国家規格です (GB/T 38635.1/.2-2020、GM/T 0044-2016 シリーズの後継):公開鍵そのものが bob@example.com のような識別子文字列で、対応する秘密鍵は信頼された鍵生成センター(KGC)が発行し、 これを成立させる数学は 256 ビット BN 曲線上の双線形ペアリングです。

従来の公開鍵暗号(RSA、SM2、ECC)は「これは本当に Bob の鍵か?」という問いに 証明書で答えます:CA の階層が、ランダムに見える特定の鍵 blob が Bob のものであることを保証します。 ID ベース暗号はこれをひっくり返します:名前そのものが鍵素材です。Bob のメールアドレスを 知る誰でも、何も取得せずに彼宛てに暗号化したり署名を検証できます — 証明書ディレクトリも信頼チェーン検証もなし。 代償は、すべての秘密鍵を導出できる信頼された第三者と、はるかに重い数学です。SM9 はその交換の、 標準化された中国版です。

登場人物:誰が何を保持するか
役割内容
識別子(ID)任意のバイト列。bob@example.com など、公開鍵として直接使用されます。正規形でなければなりません:バイト厳密で、同一人物の 2 つの綴りは不可。
KGC鍵生成センター:主秘密鍵を保持し、識別子が誰に属するかを検証し、対応するユーザー秘密鍵を発行します。
主鍵ペア2 つの独立したペア:署名用(秘密 ks、公開 Ppub-s = [ks]P2)と暗号化用(秘密 ke、公開 Ppub-e = [ke]P1)。意図的な非対称性に注意:一方の主公開鍵は G2 に、他方は G1 に存在します。
ユーザー秘密鍵曲線上の点。KGC が ID から導出します。署名鍵 dsA は G1 に、復号鍵 deB は G2 に存在します。
hid1 バイトの機能識別子。すべての鍵導出に混ぜられ、1 つの ID から署名・暗号化・鍵交換それぞれに暗号学的に独立な鍵が得られます。
H1、H2、KDFSM3 ベースの補助関数(GB/T 32905):ハッシュ→整数写像と鍵導出関数。
ペアリング eR-ate 双線形ペアリング e: G1 × G2 → GT(下で定義する 256 ビット BN 曲線上)。方式全体の代数的エンジン。
SM9 ID ベース暗号化(IBE)の仕組み

Alice は bob@example.com に秘密を送りたい — Bob がまだ KGC に登録していなくても:

1. Alice は Bob の公開鍵を自分で導出します: 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 = メッセージを K1 で XOR(または暗号化)したもの。C3 = MAC(K2, C2)。暗号文は C1、C3、C2 を束ねます。
6. Bob は登録した時点で: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 — まさに Alice が KDF に折り込んだ値。エレガントなのはステップ 6:暗号化に事前登録は不要。 Alice は今日メッセージを封印でき、Bob は KGC に識別子を証明した後にしか開けません。鍵生成の繰り延べこそ IBE の特徴です。

SM9 ID ベース署名(IBS)の仕組み

Alice は署名鍵 dsA でメッセージ M に署名します:

1. g = e(P1, Ppub-s)。ランダム r。w = gr。
2. h = H2(M ‖ w, N)。l = (r − h) mod N(l = 0 なら新しい r で再試行)。
3. S = [l]dsA。署名は組 (h, S)。

Alice の識別子を知る誰でも、証明書なしに検証できます:

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。

ID ベース vs 証明書ベース(IBE vs PKI)

これが SM9 を選ぶときに実際に重要な決断です。どちらの世界も公開鍵暗号化と署名を提供しますが、 信頼がどこに宿るかが違います:

観点PKI / 証明書(SM2、RSA の世界)ID ベース(SM9)
bob@… の公開鍵証明書内の 65 バイト超の blob。ディレクトリまたは受信者本人から取得文字列 bob@example.com そのもの。検証者がそこから鍵を計算
信頼の根CA の階層。すべてのチェーンがルートまで検証される必要ありドメイン全体で 1 つの KGC 主公開鍵
受け手が鍵を持つ前に暗号化できる?いいえ — まず彼の有効な証明書が必要はい — 今すぐ暗号化。彼は後で登録して復号
秘密鍵の生成者ユーザー自身のマシンやデバイス(多くはそこから出ない)KGC が、識別子から一括して
鍵エスクロー設計上なし内在する:KGC はすべてのユーザーの秘密鍵を導出できる
失効証明書ごとの CRL / OCSP相当する仕組みなし。通常は有効期間を ID に埋め込む(例:bob@example.com|2026)ことで鍵を構成的に期限切れに
操作あたりのコスト通常の ECC 演算 — 高速双線形ペアリング — スカラー倍より桁違いに遅い
規格X.509 / RFC 5280。SM2 は GB/T 32918 の下でGB/T 38635.1/.2-2020(旧 GM/T 0044-2016)
自然な生息地オープンなインターネット:TLS、コード署名、一般的な PKIクローズドなエコシステム:1 つの銀行のメッセージング、1 つの機関のメール、艦隊・デバイスの識別 — 中央当局が許容され、登録不要の暗号化が報われる場所

経験則:SM9 は、鍵エスクローと遅い演算という代償で、証明書なしの鍵管理を提供します。 すべてを読める/誰にでもなりすませる第三者を受け入れられないなら、SM2 証明書を使い続けてください。 1 つの組織内での登録不要の暗号化が目的なら、SM9 はまさにその道具です。

SM9 システムパラメータ(公式 256 ビット BN 曲線)

GB/T 38635.1-2020(GM/T 0044.5-2017 にも収録)のパラメータセット。読み取り専用の参照値です — 下のセルフテストは、このページのすべての定数を独立に検証された値と照合し直します:

項目値
曲線Barreto–Naehrig(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。3 群すべて位数 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 が選ぶ 1 バイトの機能識別子
SM スイート内での SM9 の位置
  • SM9(このページ)— 鍵管理の破壊者:証明書の代わりに識別子、CA 階層の代わりに KGC。
  • SM3 — ハッシュ。SM9 の H1/H2/KDF はその上に構築。SM3 ページでダイジェストを計算。
  • SM4 — ブロック暗号。SM9 の KDF が生成する鍵の下でデータ本体を暗号化するのが典型的。SM4 ページでお試しください。
  • SM2 — 証明書世界の対応物:同じ仕事(署名、暗号化)を通常の ECC と PKI で行う。SM2 ページに完全な計算機。
コンプライアンス注記:SM9 は、規制対象の中国展開における スイート独立性と鍵管理の選択肢で、強度は他の約 128 ビット方式と同等です。 本番運用では KGC 主鍵を最重要資産として扱わなければなりません — 通常は HSM で保持、複数の受託者に分割、またはその両方。
よくある誤解
  • 「識別子が公開鍵なら、誰でも私のメールを復号できる」 いいえ — 誰でもその識別子宛てに暗号化し、そこからの署名を検証できますが、復号・署名ができるのは KGC 発行の秘密鍵の保持者だけです。KGC は deB を渡す前に Bob が本当に誰かを確認します。
  • 鍵エスクローを無視する。 KGC 主鍵が漏洩すれば、攻撃者はすべてのユーザーの秘密鍵を黙って導出できます — ドメイン全体の完全な復号と完全ななりすまし。これは設計によるもの(ID ベース暗号とはそういうもの)で、パッチを当てるべき欠陥ではありません。運用で緩和してください:HSM、複数団体への閾値 KGC 分割、厳格な発行監査ログ。
  • 識別子文字列は寛容だと仮定する。 バイト厳密にハッシュされます:Bob@Example.COM、bob@example.com、" bob@example.com" は、3 つの異なる公開鍵と 3 つの異なる秘密鍵です。展開前に 1 つの正規形を固定してください — 失効のために有効期間の追記も検討を。
  • 「256 ビット曲線だから 256 ビット安全性」 ペアリングベース暗号は通常の ECC のようにはスケールしません:攻撃は、指数計算法(準指数)が適用できる巨大な Fp12/Fp6 体の中で動きます。公表された分析は 256 ビット BN 曲線を約 100〜128 ビット安全性クラスに置き、研究者は SM9 用のより大きな BN パラメータを提案しています(例:「Searching BN Curves for SM9」、2019)。SM9 はほぼ AES-128 クラスと扱ってください — 堅固だが 256 ビットの要塞ではない。
  • OpenSSL にあることを期待する。 OpenSSL は SM2/SM3/SM4 を実装していますが SM9 はありません。動くオープンソーススタックには GmSSL と Bouncy Castle があります。
よくある質問

SM9 は中国の発明ですか? 概念は違います:Shamir が 1984 年に ID ベース暗号を提案し、Boneh–Franklin(2001)が最初の実用的なペアリングベース IBE を構築しました。SM9(GM/T 0044-2016、次いで GB/T 38635.1/.2-2020)はその系譜の中国国家規格版です。

なぜこのページに SM9 計算機がないの? SM2/SM3/SM4 と違い、SM9 には双線形ペアリングが必要です:Fp12 拡大体の塔、Miller ループ、最終べき乗 — 数千行の慎重な多倍長コード。暗号族のロードマップに載っています。それまでの間、このページがアルゴリズムを文書化し、兄弟ページがスイートの残りをブラウザー内で計算します。

SM9 は SM2/SM3/SM4 を置き換えられる? いいえ — 別の問題を解きます。SM9 が置き換えるのは証明書インフラであってプリミティブではありません:内部ではハッシュと鍵導出に SM3 に依存し、ラップされたバルク鍵は通常 SM4 を駆動します。鍵エスクローなしの証明書式の説明責任が必要な場合、SM2 が引き続き答えです。

hid とは正確には何? すべての H1 ハッシュに混ぜられる 1 バイトの機能識別子(KGC が選んで公開)。署名鍵、暗号化鍵、鍵交換鍵が異なる hid 値で識別子をハッシュするため、1 つのユーザー鍵が漏洩してもその 1 機能だけが危険にさらされます。

識別子はどう失効するの? SM9 の内部に CRL 機構はありません。標準的な慣行:識別子自体に有効期限を埋め込み(bob@example.com|2026-Q4)、鍵を定期的に再発行させ、KGC は失効した識別子への発行を単に停止します。

SM9 はどこで実際に使われている? 規制対象の中国分野 — 銀行、政府、産業メッセージング — で、通常は 1 つの当局が許容され、「今日メールアドレスに暗号化し、明日ユーザーを登録する」がペアリングのコストに見合うクローズドなエコシステム内です。

セルフテスト
これは読み取り専用ページなので、セルフテストはページ自体を検証します:上に表示された すべての曲線定数を独立に検証された値と照合し直します(素数 p と位数 N を BN パラメータ化から 再計算、両生成元を位数 N で曲線上チェック)、規格番号、テンプレート不変量 (DOCTYPE なし、ビルドマーカー)、相互リンク、FAQ の存在。