Transcript RSA暗号

5.RSA暗号
素因数分解の困難性を利用した暗号
法演算

合同式
a ≡ b ( mod n )
a と b は n を法として合同
⇔ a と b は n で割って余りが等しい

例. 10 ≡ 3≡-4 ( mod 7 )
3×5 ≡ 15≡1 ( mod 7 )
1/3 ≡ 5 ( mod 7 )
暗号化の方式
暗号化
平文
x
暗号化鍵(n,e)
復号化
暗号文
平文
y
x
復号化鍵(n,d)
暗号化
復号化
暗号化鍵 n ,e , 平文 x
復号化鍵 n , d ,暗号文 y
↓
暗号文 y = x e mod n
↓
yd = x mod n
平文 x を得る
例 n=221,
e=23,
x=213のとき
y = 213 23 mod 221
= 138
例 n=221,
d=167,
y=138より
167
138 =213 mod 221
x = 213 を得る
鍵の生成
アリスがボブにメッセージを送るとする
p, q:異なる大きな素数 を生成
→ n = pq、m = (p - 1)(q - 1) を計算
e:mと互いに素な自然数を生成
→ d:ed ≡ 1 mod m を満たす整数 を計算
(n, e):ボブの公開鍵(暗号化鍵)
d
:ボブの秘密鍵(復号化鍵)
例 p=13,q=17→n=221,m=192,
さらに e=23→d=167
使っている計算
y = xe mod n
 素数の生成
 ed≡1 ( mod m ) を満たす d

反復二乗法
x
b ≡ a mod n を高速に計算する方法
例.2 8 の場合
通常:2×2×2×2×2×2×2×2 ⇒7回の演算
2 2 2
反復二乗法: ((2 ) )
⇒3回の演算
1024
2 の場合
通常: 2×2×2×・・・×2 ⇒1023回の演算
2 2 2
2
反復二乗法:((((2 ) ) )・・・) ⇒10回の演算
ユークリッドのアルゴリズム
入力:整数 a,b⇒出力:整数d, x ,y
 aとbの最大公約数gcd(a,b)=d
 d=ax+byを満たすx, y
高速に計算
例.a=5,b=3の場合
1=5・2+3・(-3)
例. a=e=23,b=m=192の場合
1=23・167+192・(-20)
素数の生成
乱数 a を生成
確率的素数判定
(高速)
yes
a を出力
no
a←a+2
復号化の困難さ
ボブは d を使ってy d mod nを計算
→ 高速
ボブ以外の人は秘密鍵を知らない
→ p , qを知る必要がある
→ 困難
素因数分解の困難さ


効率的な素因数分解法は発明されていない
512ビットの鍵では解読される可能性が高い
 n が10ビット増えると、最低でも計算に2倍の
時間が必要
 1024ビットになると512ビットのときのおよそ
50
2 倍(1千兆倍以上)の時間が必要
素因数分解の困難さ
(過去の懸賞問題)
nが129ビットで作られた暗号文を復号化する
問題
n=1143816257578888676692357799761466120
1021829672124236256256184293570693524
5733897830597123563958705058989075147
599290026879543541
17年後、1600台のコンピュータを8ヶ月間使った
結果nを素因数分解し、復号化に成功
素因数分解の困難さ
(新しい懸賞問題)
576ビット長の鍵
10,000ドル
2048ビット長の鍵
200,000ドル