Cryptographic attack on the RSA system
暗号学者マイケル・J・ウィーナーにちなんで名付けられたウィーナー 攻撃は、 RSA暗号 に対する 暗号攻撃 の一種です 。この攻撃は、 連分数表現を用いて、 d が小さい
場合に 秘密鍵 dを暴露します。
RSAの背景
架空の人物、 アリスとボブは、 安全に通信したい人々です。具体的には、アリスはボブに、ボブだけが読めるメッセージを送りたいと考えています。まずボブは 2 つの秘密の 素数 p と q を選択します。次に、RSA 係数 N = pq を計算します。この RSA 係数は、暗号化 指数 e とともに公開されます 。N と e は 公開鍵ペア ( e 、 N ) を形成します。この情報を公開することで、誰でも ボブへのメッセージを 暗号化できます。 復号化 指数 d は ed ≡ 1 (mod λ ( N )) を満たします 。ここで、 λ ( N ) は カーマイケル関数 を表します が、 オイラーのトーシェント関数 φ ( N ) が使用されることもあります (注: これは 乗法群 ( Z / N Z ) × の順序であり 、必ずしも巡回群ではありません)。暗号化指数 e と λ ( N ) も 互いに素で なければならないため、 モジュラー逆 が存在する。 N の 因数分解 と秘密鍵 d は秘密に保持されるため、ボブだけが メッセージ を復号できる。秘密鍵ペアを ( d , N ) と表記する。メッセージ Mの暗号化は C ≡ M e (mod N ) で与えられ、暗号文 C の復号は C d ≡ ( M e ) d ≡ M ed ≡ M (mod N ) で与えられる( オイラーの定理を 使用 )。
ユークリッドの互除法 を用いると、 N の 因数分解が 分かれば秘密鍵 dを 効率的に復元できる 。秘密鍵 dが分かれば、 N の法を効率的に因数分解できる 。 [1]
小さな秘密鍵
RSA 暗号システムにおいて、ボブは RSA 復号 性能を向上させるために、大きな乱数ではなく 小さな値の dを使用する傾向があるかもしれません。しかし、ウィーナーの攻撃は、 d に小さな値を選択すると、 攻撃者がすべての秘密情報を復元できる、つまり RSAシステムを破ることができる安全でないシステムになることを示しています。この破綻は、 d が小さな値であるときに成立するウィーナーの定理に基づいています。ウィーナーは、 d < のときに攻撃者が dを 効率的に見つけることができることを証明しました。 1 / 3 N 1/4 . [2]
Wiener氏の論文では、彼の攻撃に対する高速な復号を可能にするいくつかの対策も提示されています。具体的には、以下の2つの手法が説明されています。
大きな公開鍵の選択 : e を e ′に置き換えます 。ここで、 e ′ = e + k ⋅ λ ( N ) ( k の大きさ)です 。e ′ が十分に大きい場合 、 つまり e ′ > N 3/2 の 場合、 d がどれだけ小さくてもウィーナー攻撃は適用できません 。
中国剰余定理 を使う : d p ≡ d (mod ( p − 1)) と d q ≡ d (mod ( q − 1)) が両方とも小さいが、 d 自体は小さくなるように d を選択すると、 C の 高速 復号化は 次のように実行できます。
まず M p ≡ C d p (mod p ) と M q ≡ C d q (mod q ) を計算します。
中国剰余定理を 用いて 、 M ≡ M p (mod p ) かつ M ≡ M q (mod q )を満たす 0 ≤ M < N の唯一の値を計算します 。Mの結果は必要に応じて M ≡ C d (mod N ) を満たし ます。重要なのは、 d mod λ ( N ) の値が大きくなる可能性があるため、ウィーナー攻撃はここでは適用されないということです 。 [ 要出典 ]
攻撃の仕組み
ご了承ください
λ
(
N
)
=
lcm
(
p
−
1
,
q
−
1
)
=
(
p
−
1
)
(
q
−
1
)
G
=
φ
(
N
)
G
{\displaystyle \lambda (N)=\operatorname {lcm} (p-1,q-1)={\frac {(p-1)(q-1)}{G}}={\frac {\varphi (N)}{G}}}
ここで G = gcd( p − 1, q − 1) 。
ed ≡ 1 ( mod λ
( N ) ) なので 、
e
d
=
K
×
λ
(
N
)
+
1
{\displaystyle ed=K\times \lambda (N)+1}
e
d
=
K
G
(
p
−
1
)
(
q
−
1
)
+
1
{\displaystyle ed={\frac {K}{G}}(p-1)(q-1)+1}
k = の定義 K / gcd( K , G ) および g = G / gcd( K , G ) 、これを上記に代入すると次のようになります。
e
d
=
k
g
(
p
−
1
)
(
q
−
1
)
+
1
{\displaystyle ed={\frac {k}{g}}(p-1)(q-1)+1}
。
dpq で割ると :
e
p
q
=
k
d
g
(
1
−
δ
)
{\displaystyle {\frac {e}{pq}}={\frac {k}{dg}}(1-\delta )}
、 どこ 。
δ
=
p
+
q
−
1
−
g
k
p
q
{\displaystyle \delta ={\frac {p+q-1-{\frac {g}{k}}}{pq}}}
だから、 e / pq は よりわずかに小さい け / dg 、前者は完全に公開 情報で構成されています。しかし、確認 ([ 説明が必要 ]) と推測を行う方法は 依然として必要です。
簡単な代数 演算と 恒等式 を用いることで 、推測の 正確さ を検証することができる。 [1]
ウィーナーの定理
N = pq とし 、 q < p < 2 q とする 。d < 1 / 3 N 1/4 。
ed≡1 (modλ ( N ) ) となる ⟨N 、 e⟩ が 与えられると、攻撃者は dを 効率 的に回復できる 。 [2] [3]
例
公開鍵が ⟨ N , e ⟩ = ⟨90581, 17993⟩ であると仮定する。攻撃は d を決定する必要がある。ウィーナーの定理と 連分数 を用いて d を 近似するために、まず の 連分数 展開を 求める。 e / 北 。このアルゴリズムは 分数を 最小の項で求めることに注意してください。
e
N
=
17993
90581
=
1
5
+
1
29
+
⋯
+
1
3
=
[
0
,
5
,
29
,
4
,
1
,
3
,
2
,
4
,
3
]
{\displaystyle {\frac {e}{N}}={\frac {17993}{90581}}={\cfrac {1}{5+{\cfrac {1}{29+\dots +{\cfrac {1}{3}}}}}}=\left[0,5,29,4,1,3,2,4,3\right]}
の 連分数 展開によれば、 e / 北 、すべての収束 け / d は次のとおりです。
k
d
=
0
,
1
5
,
29
146
,
117
589
,
146
735
,
555
2794
,
1256
6323
,
5579
28086
,
17993
90581
{\displaystyle {\frac {k}{d}}=0,{\frac {1}{5}},{\frac {29}{146}},{\frac {117}{589}},{\frac {146}{735}},{\frac {555}{2794}},{\frac {1256}{6323}},{\frac {5579}{28086}},{\frac {17993}{90581}}}
最初の 収束は N の因数分解を生じないことが確認できます 。しかし、収束 は 1 / 5 利回り
φ
(
N
)
=
e
d
−
1
k
=
17993
×
5
−
1
1
=
89964
{\displaystyle \varphi (N)={\frac {ed-1}{k}}={\frac {17993\times 5-1}{1}}=89964}
さて、この方程式を解くと
x
2
−
(
(
N
−
φ
(
N
)
)
+
1
)
x
+
N
=
0
{\displaystyle x^{2}-\left(\left(N-\varphi (N)\right)+1\right)x+N=0}
x
2
−
(
(
90581
−
89964
)
+
1
)
x
+
90581
=
0
{\displaystyle x^{2}-\left(\left(90581-89964\right)+1\right)x+90581=0}
x
2
−
618
x
+
90581
=
0
{\displaystyle x^{2}-618x+90581=0}
すると、 x = 379; 239 となる 根が 見つかる 。したがって、因数分解が見つかった。
N
=
90581
=
379
×
239
=
p
×
q
{\displaystyle N=90581=379\times 239=p\times q}
。
係数 N = 90581 の場合、ウィーナーの定理は次の場合に成り立つ
ことに注意する。
d
<
N
1
/
4
3
≈
5.7828
{\displaystyle d<{\frac {N^{1/4}}{3}}\approx 5.7828}
。
ウィーナーの定理の証明
証明は連分数を用いた近似に基づいている。 [2]
ed = 1 (mod λ ( N )) なので、 ed − kλ ( N ) = 1 となる k が 存在する 。したがって、
|
e
λ
(
N
)
−
k
d
|
=
1
d
λ
(
N
)
{\displaystyle \left|{\frac {e}{\lambda (N)}}-{\frac {k}{d}}\right\vert ={\frac {1}{d\lambda (N)}}}
。
G = gcd( p − 1, q − 1) とします 。λ ( N ) の代わりに φ ( N )を使用すると、証明は G = 1 に置き換えられ 、 φ ( N ) は λ ( N ) に置き換えられることに注意して ください 。
次に を掛けて 1 / G 、
|
e
φ
(
N
)
−
k
G
d
|
=
1
d
φ
(
N
)
{\displaystyle \left|{\frac {e}{\varphi (N)}}-{\frac {k}{Gd}}\right\vert ={\frac {1}{d\varphi (N)}}}
したがって、 け / 神様 は の近似値です e / φ ( N ) 。攻撃者は φ ( N )を知らないが 、 N を使って近似値を求める可能性がある。実際、 φ ( N ) = N − p − q + 1 かつ p + q − 1 < 3 √ N なので 、以下の式が成り立つ。
|
p
+
q
−
1
|
<
3
N
{\displaystyle \left\vert p+q-1\right\vert <3{\sqrt {N}}}
|
N
−
φ
(
N
)
|
<
3
N
{\displaystyle \left\vert N-\varphi (N)\right\vert <3{\sqrt {N}}}
φ ( N )の代わりに N を使用すると 次のようになります。
|
e
N
−
k
G
d
|
=
|
e
d
G
−
k
N
N
G
d
|
=
|
e
d
G
−
k
φ
(
N
)
−
k
N
+
k
φ
(
N
)
N
G
d
|
=
|
1
−
k
(
N
−
φ
(
N
)
)
N
G
d
|
<
|
−
k
(
N
−
φ
(
N
)
)
N
G
d
|
(
∵
0
<
|
N
−
φ
(
N
)
|
)
<
|
3
k
N
N
G
d
|
=
3
k
N
N
N
G
d
≤
3
k
d
N
{\displaystyle {\begin{aligned}\left\vert {\frac {e}{N}}-{\frac {k}{Gd}}\right\vert &=\left\vert {\frac {edG-kN}{NGd}}\right\vert \\&=\left\vert {\frac {edG-k\varphi (N)-kN+k\varphi (N)}{NGd}}\right\vert \\&=\left\vert {\frac {1-k(N-\varphi (N))}{NGd}}\right\vert \\&<\left\vert {\frac {-k(N-\varphi (N))}{NGd}}\right\vert (\because 0<|N-\varphi (N)|)\\&<\left\vert {\frac {3k{\sqrt {N}}}{NGd}}\right\vert ={\frac {3k{\sqrt {N}}}{{\sqrt {N}}{\sqrt {N}}Gd}}\leq {\frac {3k}{d{\sqrt {N}}}}\end{aligned}}}
ここで、 kλ ( N ) = ed − 1 < ed なので 、 kλ ( N ) < ed となります 。 e < λ ( N ) なので、 kλ ( N ) < ed < λ ( N ) d となり、以下の式が得られます。
k
λ
(
N
)
<
λ
(
N
)
d
{\displaystyle k\lambda (N)<\lambda (N)d}
k
<
d
{\displaystyle k<d}
k < d かつ d < なので 1 / 3 N 1/4 . したがって次式が得られます。
(1)
|
e
N
−
k
G
d
|
<
1
d
N
1
4
{\displaystyle \left\vert {\frac {e}{N}}-{\frac {k}{Gd}}\right\vert <{\frac {1}{dN^{\frac {1}{4}}}}}
d < 1 / 3 N 1/4 、 2 d < 3 d 、そして 2 d < 3 d < N 1/4 の場合、次の式が得られます。
2
d
<
N
1
/
4
{\displaystyle 2d<N^{1/4}}
なので(2)
1
2
d
>
1
N
1
/
4
{\displaystyle {\frac {1}{2d}}>{\frac {1}{N^{1/4}}}}
(1)と(2)から、
|
e
N
−
k
G
d
|
<
3
k
d
N
<
1
d
⋅
2
d
=
1
2
d
2
{\displaystyle \left\vert {\frac {e}{N}}-{\frac {k}{Gd}}\right\vert <{\frac {3k}{d{\sqrt {N}}}}<{\frac {1}{d\cdot 2d}}={\frac {1}{2d^{2}}}}
もし | x − 1つの / b | < 1 / 2 b 2 、そして 1つの / b は x の収束な ので、 け / 神様 は の収束の中に現れる e / 北 。したがって、アルゴリズムは最終的に を見つけることになります。 け / 神様 . [ さらに説明が必要 ]
参考文献
^ ab L. Render, Elaine (2007). Wiener's Attack on Short Secret Exponents. [ リンク切れ ]
^ abc ボネ, ダン . 「RSA暗号システムへの20年間の攻撃」 (PDF) . 通知 . 46 (2). アメリカ数学会 : 203–213 .
^ Wiener, Michael J. (1990). 「短いRSA秘密指数の暗号解析」. IEEE Transactions on Information Theory . 36 (3). IEEE : 553–558 . doi :10.1109/18.54902.
さらに読む
コッパースミス、ドン (1996). 低指数RSAと関連メッセージ. シュプリンガー・フェアラーク・ベルリン・ハイデルベルク.
Dujella, Andrej (2004). 「連分数と小さな秘密指数を持つRSA」 arXiv : cs/0402052 .
Wiener 攻撃の Python 実装。
R. スティンソン、ダグラス (2002). 暗号理論と実践 (第2版). CRC Press Company. pp. 200– 204. ISBN 1-58488-206-9 。