Litchiwaterの日記

備忘録として書いています。

RSA暗号

RSA暗号とは

 1977年にリベスト(Rivest)、シャミア(Shamir)、エーデルマン(Adleman)が提唱した。公開鍵暗号の1つ。

 

RSA暗号を理解するための数学知識

最大公約数 ユークリッドの互除法 拡張ユークリッドの互除法 整数の合同 合同式の逆元 既約剰余類 オイラー関数 フェルマーの小定理 

 

CTFから見たRSA暗号への攻撃方法

Wiener's Attack 

eの値が大きい時に成立

Boneh-Durfee's low private exponent Attack

eの値が小さい時に成立

weak rsa

Common Modulus Attack

同一の平文を異なるeで暗号化した暗号文があるときに成立。

Common Private Exponent Attack

Franklin-Reiter Related Message Attack

暗号文c1、c2を持ち、それに対する平文がm1、m2の上位ビットが共通するとき成立。

このとき

 m2=a*m1 + b が分かり、・・・

Coppersmith's Attack

素数pの上位ビットまたは下位ビットが分かる時に成立。

秘密鍵dの下位ビットが分かるとき成立。

平文mの上位ビットまたは下位ビットが分かる時に成立。

Coppersmith's short pad Attack
Partial-key exposure Attack / High-bit known Attack

 Haste'd Broadcast Attack

同一の平文を異なるnで暗号化した暗号文があるときに成立。中国人剰余定理を用いることで平文mが求まる。

LSB Decryption Oracle Attack

任意の暗号文を復号した結果の偶奇(下位1bit)が分かるときに成立。

mの偶奇が分かるので、二分探索によってmが求まる。

 RSA暗号における各値の一般的な値

e=65537(0x10001) or 3

これはバイナリ・ユークリッドの互除法を用いて高速化しやすいために選ばれている。

N

2048ビット以上。512ビットぐらいだとECMを利用して1分程度で素因数分解できるらしい。

 

 

 

Tool

pythonの各種モジュール

factordb.com

素数のデータベース(素因数分解してくれる!)
http://www.factordb.com/


参考文献

Wikipedia:RSA暗号

https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%AD%A6%E7%9A%84%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

暗号技術のすべて:IPUSIRON(著)

暗号技術入門:結城浩(著)

「CTF Crypto」

https://raintrees.net/projects/a-painter-and-a-black-cat/wiki/CTF_Crypto#RSA%E6%9A%97%E5%8F%B7

//パンくずリスト用