レッスン
理論 — ディフィー・ヘルマン:公の場で共有する秘密
ディフィー・ヘルマン鍵共有では、誰でも盗聴できる通信路を使いながら、二者が安全に秘密の数を共有します。まず、素数 p と底 g を公に定めます。双方が秘密の指数を選び、g をその指数で累乗した mod p の値を公開し合います。そして、相手から送られてきた公開値を自分の秘密の指数で累乗します:(gᵇ)ᵃ = (gᵃ)ᵇ = gᵃᵇ mod p。これを第三者が破るには、離散対数問題を解く必要があります。すなわち、公開された A = gᵃ mod p から gˣ ≡ A (mod p) を満たす x を見つけ出すことです。1976年、ディフィーとヘルマンは、離散対数を解くことなしに公開値から共有秘密を導く方法は見当たらないとし、同時にそうした方法が存在しないという証明もないことを記しました。g の位数とは、gⁿ ≡ 1 (mod p) を満たす最小の整数 n ≥ 1 のことです。位数が p − 1 に等しいとき、g を生成元と呼びます。
各記号の意味
p- 法となる素数(公開)
g- 底(公開)
a, b- アリスとボブの秘密の指数
A, B- それぞれの公開値(gᵃ mod p と gᵇ mod p)
x- イヴが特定する指数。gˣ ≡ A を満たす x であれば何でもよいため、実質的に g の位数を法とする a を求めます
ord(g)- g の位数:共有秘密が取りうる値の総数
- 前提
- p は 5 から 1,999 までの素数、g は 2 から p − 2 までの任意の底であり、a と b は 1 から p − 2 の範囲をとります。試行回数は、計算された累乗と標的の値を 1 回比較することを指し、成功した最後の比較も含みます。ポーリグ・ヘルマン法の各桁は、候補を順に試すことで求めています。これは原論文で小さな素因数向けに示された手法です。大きな素因数に対してはメモリと時間のトレードオフを用いた探索法も提案されていますが、本ページでは実行していません。ディフィーとヘルマン自身が論文で挙げた例は 200 ビット程度の素数であり、その離散対数の計算にはおよそ 2¹⁰⁰ 回の計算が必要と見積もられていました。
全プロセスの詳細解説
-
p = 101 におけるアリスの秘密の復元 5 ステップ
アリスとボブが p = 101、g = 2 を使っており、イヴは A = 12 と B = 53 を傍受しました。ポーリグ・ヘルマン法を用いて 2ˣ ≡ 12 (mod 101) を満たす x を求め、その試行回数を数え、x から共有秘密を特定してください。さらに、同じ攻撃を p = 65,537 で行った場合にどれほどの試行回数が必要になるかを答えてください。
-
100 = 2² · 5² ですから、x は x mod 4 と x mod 25 によって一意に定まります。2 の位数は 100 の約数ですが、2⁵⁰ = 100、2²⁰ = 95 はどちらも 1 ではないため、位数は 100 そのものです。つまり 2 は生成元です。
-
mod 4 において、γ = 2⁵⁰ = 100 ≡ −1 です。2 進法の 1 桁目:12⁵⁰ = 100 となるため、2 回目の試行で d = 1 と決まります。この影響を取り除きます:12 · 2⁻¹ = 12 · 51 = 612 ≡ 6。そして 6²⁵ = 100 なので、次の桁も同様に 2 回目の試行で 1 と求まります。したがって x ≡ 1 + 1 · 2 = 3 (mod 4) です。
-
mod 25 において、γ = 2²⁰ = 95 であり、その累乗は 1, 95, 36, 87, 84 となります。5 進法の 1 桁目:12²⁰ = 95 より、2 回目の試行で d = 1 です。これを取り除きます:6⁴ = 1,296 ≡ 84 となるため、次の桁は 5 回目の試行で 4 と決まります。よって x ≡ 1 + 4 · 5 = 21 (mod 25) です。
-
100 未満で mod 25 において 21 となる数は 21, 46, 71, 96 の四つで、このうち mod 4 で 3 となるのは 71 だけです。したがって試行回数は 2 + 2 + 2 + 5 = 11 回(最悪時は 2·2 + 2·5 = 14 回)で x = 71 と求まります。全探索なら 0 から 71 まで 72 回の試行が必要でした。共有秘密は 53⁷¹ mod 101 = 35 です。
-
65,537 = 2¹⁶ + 1 は素数であり、p − 1 = 2¹⁶ です。ポーリグ・ヘルマン法なら 16 桁の 2 進数を一桁ずつ、それぞれ二つの候補から求めていきます。最悪でも 32 回の試行で済み、全探索の 65,536 回とは対照的です。ポーリグとヘルマンは一般の場合を論じる前に、まさにこの p = 2ⁿ + 1 というケースを解いてみせました。
解答
試行回数 11 回(最悪でも 14 回)で x = 71 が得られ、共有秘密は 35 です。p = 65,537 の場合、攻撃に必要な試行回数は高々 32 回です。このページの上限は 1,999 なので、この数値は実際のシミュレーションではなく計算上の値です。
-
学習の道すじ
暗号はいかにして破られるか
参考文献 (2)
- The exchange itself, the definition's sentence that its authors could see no way round a logarithm and had no proof, and the 200-bit example in `assumes`: Whitfield Diffie and Martin E. Hellman, "New Directions in Cryptography," IEEE Transactions on Information Theory 22(6), 644–654, November 1976. §III, p. 649.
- The second insight's quotation, the digit-by-digit search the page runs, and the worked problem's p = 2ⁿ + 1: Stephen C. Pohlig and Martin E. Hellman, "An Improved Algorithm for Computing Logarithms over GF(p) and Its Cryptographic Significance," IEEE Transactions on Information Theory 24(1), 106–110, January 1978. §III–IV, pp. 107–110.