MathLabs

応用数学と計算数学

暗号理論

数論と代数を用いて情報を保護する分野で、RSAから現代の暗号方式に至るまでを扱う。

直観正しい相手だけが開けるようにメッセージを施錠する

誰でも掛けることはできるが、特定の一本の鍵でしか開けられない南京錠を想像してほしい。もし誰もが自分の南京錠を公開し(鍵だけは秘密にしておけば)、誰でもあなたへのメッセージを施錠できるが、それを読めるのはあなただけである——事前に会う必要も、秘密の合図も不要である。これが公開鍵暗号の核心的な発想である:「施錠」の操作は一方向には計算しやすく、秘密鍵なしではその南京錠の設計自体が公開されていても、計算量的に元に戻すことが不可能である。

単位円周上を回転する点で、モジュラー冪乗に類似した周期的な繰り返しを示す図。
Z/17Z\mathbb{Z}/17\mathbb{Z} 上のモジュラ乗算 x↦ax mod mx \mapsto a x \bmod m:順方向の計算は瞬時だが、大きな法での離散対数やRSAべき乗の逆算の困難性が公開鍵暗号の基盤となる。

中高合同算術:基礎となる道具

定義: 合同とモジュラー冪乗

二つの整数 aa と bb が法 nn のもとで合同である、すなわち a≡b(modn)a \equiv b \pmod{n} であるとは、n∣(a−b)n \mid (a-b) が成り立つこと、つまり両者の差が nn のちょうど倍数であることをいう。モジュラー冪乗とは、底を法 nn のもとで自分自身と繰り返し掛け合わせる操作であり、これはまさにRSAやDiffie-Hellmanといった暗号方式が基盤とする演算である。順方向の計算は高速だが、逆方向は困難だからである。

a≡b(modn)  ⟺  n∣(a−b)a \equiv b \pmod{n} \iff n \mid (a-b)

ここで n∣(a−b)n \mid (a-b) とは、nn が a−ba-b を割り切ることを意味し、したがって a≡b(modn)a \equiv b \pmod{n} は実質的に余りについての主張である:aa と bb は nn で割ったときに同じ余りを持つ。以下のオイラーの定理はフェルマーの小定理を拡張したものであり、RSA復号がなぜ元のメッセージを正しく復元できるのかを支える原動力である。

aϕ(n)≡1(modn)whenevergcd⁡(a,n)=1a^{\phi(n)} \equiv 1 \pmod n \quad \text{whenever} \quad \gcd(a,n)=1
三つの暗号方式の比較
方式依拠する困難問題典型的な鍵長(2026年)
RSAn=pqn=pq を素因数分解すること2048~4096ビット
Diffie-Hellman素数を法とする離散対数2048~3072ビット
楕円曲線暗号(ECC)楕円曲線群上の離散対数256~384ビット

大学RSAが機能する理由と、Diffie-Hellmanが共有秘密を作る仕組み

n=pqn = pq を相異なる二つの素数の積とし、ee と dd が ed≡1(modϕ(n))ed \equiv 1 \pmod{\phi(n)} を満たすとする。このとき、0≤m<n0 \le m < n を満たす任意のメッセージ mm に対して、ee で暗号化し dd で復号すると元のメッセージが正しく復元される:(me)d≡m(modn)(m^e)^d \equiv m \pmod n。

なぜ正しいのか?

これはRSAを実際に使用可能にする定理である:送信者が公開指数で何を暗号化しても、秘密指数を持つ者はほぼすべてのメッセージだけでなく、あらゆる可能なメッセージに対して常に復号できることを保証する——証明では、メッセージが偶然モジュラスと因数を共有してしまう境界事例も扱わなければならない。

証明

ここで ed≡1(modϕ(n))ed \equiv 1 \pmod{\phi(n)} により、モジュラー合同の定義から、ある非負整数 kk が存在して ed=1+kϕ(n)ed = 1 + k\phi(n) が成り立つ。

場合1:gcd⁡(m,n)=1\gcd(m,n)=1 のとき。オイラーの定理より mϕ(n)≡1(modn)m^{\phi(n)} \equiv 1 \pmod n が成り立つので、両辺を kk 乗して mm を掛けると med=m⋅(mϕ(n))k≡m⋅1k≡m(modn)m^{ed} = m \cdot (m^{\phi(n)})^{k} \equiv m \cdot 1^{k} \equiv m \pmod n が得られる。

場合2:gcd⁡(m,n)≠1\gcd(m,n) \ne 1 のとき。n=pqn = pq であるから、これは pp が mm を割り切るか、または qq が mm を割り切ることを意味する(mm は nn より小さいので両方が同時に成り立つことはない)。法 pp のもとで考える:もし pp が mm を割り切るなら、mm と medm^{ed} はともに法 pp のもとで 00 と合同である。そうでなければ gcd⁡(m,p)=1\gcd(m,p)=1 であり、フェルマーの小定理より mp−1≡1(modp)m^{p-1} \equiv 1 \pmod p が成り立ち、(p−1)(p-1) が ϕ(n)\phi(n) を割り切ることから、場合1と同じ計算で med≡m(modp)m^{ed} \equiv m \pmod p が示される。法 qq についても同様の議論により med≡m(modq)m^{ed} \equiv m \pmod q が示される。

中国剰余定理により、法 pp と法 qq のそれぞれで成り立つ合同式は、その積 n=pqn=pq を法としても成り立つ。したがって (me)d≡m(modn)(m^e)^d \equiv m \pmod n はすべてのメッセージ mm に対して成り立ち、nn と互いに素なものだけに限らない。

素数 pp と底 gg を固定する。アリスが秘密の aa を選び A=ga mod pA = g^a \bmod p を送り、ボブが秘密の bb を選び B=gb mod pB = g^b \bmod p を送ったとする。このとき Ba mod pB^a \bmod p と Ab mod pA^b \bmod p を計算すると、aa も bb も一度も送信されていないにもかかわらず、どちらも同じ値 gab mod pg^{ab} \bmod p になる。

なぜ正しいのか?

これにより、盗聴者が監視している公開チャネル上でも、二者が秘密鍵に合意できるようになる:盗聴者は底、法、そして両者の公開値を見ることができるが、そこから共有秘密を復元するには離散対数問題を解く必要があり、適切に選ばれたパラメータに対しては計算量的に困難であると信じられている。

証明

定義より A=ga mod pA = g^a \bmod p と B=gb mod pB = g^b \bmod p はモジュラー冪乗の結果であるため、ボブは AA を受け取って Ba=(gb)a mod pB^a = (g^b)^a \bmod p を計算し、アリスは BB を受け取って Ab=(ga)b mod pA^b = (g^a)^b \bmod p を計算する。

モジュラー冪乗は通常の冪乗と同じ指数法則に従う。なぜなら法 pp のもとでの繰り返し乗算は、各段階で法 pp により簡約される点を除けば、整数の繰り返し乗算とまったく同じように合成されるからである:gg の指数として (gb)a=gba=gab=(ga)b(g^b)^a = g^{ba} = g^{ab} = (g^a)^b が成り立ち、この等式はどの段階で法 pp により簡約しても保たれる。

したがって Ba mod p=gab mod p=Ab mod pB^a \bmod p = g^{ab} \bmod p = A^b \bmod p である:アリスとボブは、自分の秘密指数と相手の公開値から、それぞれ独立に同じ値 gab mod pg^{ab} \bmod p を計算する。その際、秘密の aa や bb がチャネル上に現れることは一度もない。

安全性の議論はこの正当性の議論とは別である:正当性は両者が同じ数にたどり着くことしか示していない。gg、pp、AA から aa を計算する困難性(離散対数問題)こそが、その共有された数を観測者から秘密に保つ理由である。

大学実世界での応用と具体例

あらゆるHTTPS接続、安全なメッセージングアプリ、暗号資産ウォレットは、上記の定理に依拠している:TLSハンドシェイクはセッション鍵の合意にDiffie-Hellman(またはその楕円曲線版)を用い、銀行システムやソフトウェア更新はRSAやECDSA署名で真正性を保証し、ブロックチェーンウォレットは楕円曲線上の離散対数を用いて公開アドレスから秘密鍵を導出することを計算量的に不可能にしている。以下の二つの具体例では、すべての手順を検証できるよう、小さな数を用いてRSAとDiffie-Hellmanを手計算で実行する。

例: 小さな素数によるRSAの手計算

素数 p=5p=5 と q=11q=11 を用い、公開指数 e=3e=3、メッセージ m=2m=2 として、暗号文を求め、復号によってメッセージが正しく復元されることを確かめよ。

解答

ステップ1:法 n=5×11=55n = 5 \times 11 = 55 と ϕ(n)=(5−1)(11−1)=40\phi(n) = (5-1)(11-1) = 40 を計算する。

ステップ2:gcd⁡(3,40)=1\gcd(3,40)=1 を確認し、e=3e=3 が有効な公開指数であることを確かめる。

ステップ3:3d≡1(mod40)3d \equiv 1 \pmod{40} を満たす秘密指数 dd を求める。d=27d=27 を試すと 3×27=81=2×40+13 \times 27 = 81 = 2 \times 40 + 1 となるので、d=27d=27 でよい。

ステップ4:m=2m=2 を暗号化する:暗号文は c=23 mod 55=8 mod 55=8c = 2^3 \bmod 55 = 8 \bmod 55 = 8 である。

ステップ5:c27 mod 55=827 mod 55c^{27} \bmod 55 = 8^{27} \bmod 55 を計算して復号する。法55のもとで繰り返し二乗する:82=64≡98^2 = 64 \equiv 9, 84≡92=81≡268^4 \equiv 9^2 = 81 \equiv 26, 88≡262=676≡168^8 \equiv 26^2 = 676 \equiv 16, 816≡162=256≡368^{16} \equiv 16^2 = 256 \equiv 36。27=16+8+2+127 = 16+8+2+1 であるから、816⋅88⋅82⋅81≡36⋅16⋅9⋅8(mod55)8^{16} \cdot 8^{8} \cdot 8^{2} \cdot 8^{1} \equiv 36 \cdot 16 \cdot 9 \cdot 8 \pmod{55} を計算すると、段階的に 22 に簡約される。

ステップ6:復号された値は 22 であり、まさに元のメッセージと一致する。これによりRSAの正当性定理がこの具体例で確認された。

例: Diffie-Hellman鍵交換の手計算

素数 p=23p=23 と底 g=5g=5 のもとで、アリスは秘密 a=6a=6 を、ボブは秘密 b=15b=15 を選ぶ。共有秘密を両方の方法で計算し、一致することを確認せよ。

解答

ステップ1:アリスは A=56 mod 23A = 5^6 \bmod 23 を計算する。23を法とする5の冪を順に計算する:52=25≡25^2=25\equiv2, 53≡105^3\equiv10, 54≡45^4\equiv4, 55≡205^5\equiv20, 56≡85^6\equiv8。よって A=8A=8 である。

ステップ2:ボブは B=515 mod 23B = 5^{15} \bmod 23 を計算する。上の 56≡85^6\equiv8 を用いると、512≡82=64≡185^{12}\equiv8^2=64\equiv18、また 515=512⋅53≡18⋅10=180≡195^{15}=5^{12}\cdot5^3\equiv18\cdot10=180\equiv19。よって B=19B=19 である。

ステップ3:アリスは共有秘密として Ba mod p=196 mod 23B^a \bmod p = 19^6 \bmod 23 を計算する。19≡−419\equiv-4 であるから 196≡(−4)6=46=409619^6\equiv(-4)^6=4^6=4096 であり、4096=178×23+24096 = 178\times23+2 なので、これは 22 に等しい。

ステップ4:ボブは共有秘密として Ab mod p=815 mod 23A^b \bmod p = 8^{15} \bmod 23 を計算する。8=238=2^3 と書くと 815=2458^{15}=2^{45} となる。211≡1(mod23)2^{11}\equiv1 \pmod{23} であり(直接確認すると 211=2048=89×23+12^{11}=2048=89\times23+1)、45=4×11+145=4\times11+1 であるから、これは 21=22^{1}=2 に簡約される。

ステップ5:どちらの計算も 22 を与え、アリスとボブが a=6a=6 や b=15b=15 をチャネル上で一度も送信することなく、同じ共有秘密に合意したことが確認される。

n=55n=55, ϕ(n)=40\phi(n)=40, 公開指数 e=3e=3 のRSAにおいて、3d≡1(mod40)3d \equiv 1 \pmod{40} を満たす dd の値はどれか。

Diffie-Hellman鍵交換の安全性は、どの基礎となる計算問題に依拠しているか。

gcd⁡(a,n)=1\gcd(a,n)=1 のとき、オイラーの定理は aϕ(n)≡1(modn)a^{\phi(n)} \equiv 1 \pmod n であると述べる。ここで ϕ(n)\phi(n) は次のうちどれを数えるか。

銀行は、顧客が本当に銀行から来たものであり改ざんされていないことを検証できるように、ソフトウェア更新に署名したいと考えている。この保証を直接提供する暗号ツールはどれか。

参考文献

  1. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone (1996). Handbook of Applied Cryptography
  2. Peter W. Shor (1994). Algorithms for Quantum Computation: Discrete Logarithms and Factoring · arXiv:quant-ph/9508027
  3. National Institute of Standards and Technology (2024). Module-Lattice-Based Key-Encapsulation Mechanism Standard (FIPS 203)