第0回 RSAへのAttack ~RSAってなに~
どうも。duckです。
RSAへのAttackの記事を書くことにしました。
今回の流れ
・RSA暗号の仕組み
・Attackの成功条件
・Attackする場所
RSA暗号の仕組み
公開:
秘密:
暗号化
(0)暗号化したい平文mを準備する。
(1)素数を用意する。(
とおく)
(2)と互いに素な自然数
を用意する。
(3)となるdを計算する。
(4)が暗号文となる。
復号
を計算するとそれが平文となる。
つまり
順に仕組みをみていく。
(0)平文の数字化
CTFではpythonのライブラリのCrypto.Util.numberの中の関数
bytes_to_longを用いられることが多い。
(1)素数の生成
CTFではpythonのライブラリのCrypto.Util.numberの中の関数
getPrime(ビット数)関数が用いられることが多い。
もしくは、秘匿されたファイルから読みだされていることもある。
(2)の選択
一般的に(素数)が選ばれることが多い。
は素数であるから
が
の倍数でない限り
と
は互いに素となる。
(3)の計算
拡張ユークリッドの互除法を用いる。
参考:CTFで使う数学 前編 - CTFと共に生きる
(4)特になし。
復号できる理由
本質:オイラーの定理に基づく。
参考:CTFで使う数学 後編 - CTFと共に生きる
より、ある整数
を用いて
と書ける。
よって
オイラーの定理によりだから
公開情報のみから平文
を求めるのが目標である。
現実では適切なパラメータ設定が行われていると考えられるため、公開情報のみから平文
を求めることはできない。
しかしCTFでは不適切なパラメータが設定されているので、そこをついて平文の入手を目指すこととなる。
もう少し具体的に攻撃が成立する条件を見てみよう。
Attackの成功条件
(a)(b)
(c)
(d)なぜかいきなり
理由
(a) から
がわかる。
(b),公開情報の
から(3)を実行し
が得られる。以下(a)と同様。
(c)が計算できるため。以下(b)と同様。
(d)そりゃそうだろ。
これらのどれかをめざす。
Attackの成功条件がわかったところで、どこを見ればいいのかを教える。
具体的な攻撃手法については次回以降まとめていく。
Attackする場所
青文字は解くときに特に注意している部分である。それ以外は最後に紹介する参考サイトのほうが見やすいのでそちらを見ることを推奨する。
(イ)素数
-素数
具体的には
-特殊な素数を使っている
フェルマー素数、メルセンヌ素数など有名な素数を使っている場合それを利用して素因数分解できる。(c)に帰着。
素数
-
フェルマー法により素因数分解できる。(c)に帰着。
具体的には上位数十ビットが等しい場合などは試してみるといいだろう。
-
試し割法で素因数分解できる。(c)に帰着。
ふつうは
素因数分解できない場合でもそこが突破口になりやすい。
(ロ)
-
中国剰余定理または実数上での
-
Wieners attackにより
具体的には[tex:N}と大差ないくらいの大きさだと怪しい。
(ハ)平文
ただし、一部分といっても大半がわからないと解けないことが多い。(
最初なのでお世話になっているサイトも紹介しておきます。
攻撃が成立するパラメータの不備がよくまとまっていて神
RSA暗号運用でやってはいけない n のこと #ssmjp
実際の攻撃方法を実装していて神
plain RSAに対する攻撃手法を実装してみる - ももいろテクノロジー
いつもありがとうございます!!!!
具体的な攻撃については次回からやっていきます。