Transcript Document

10回目講義の主題
公開鍵暗号系について
長い間「夢物語」
1970年代に,実用的な公開鍵暗号が出現
コンピュータの性能向上 ⇒ 膨大な計算能力の獲得
ネットワークの出現 ⇒ 鍵流通の仕組みが登場
1
共通鍵暗号の仕組み
暗号化と復号とで,同じ鍵を使用する
事前に鍵共有を完了しておく必要あり
送信者
受信者
鍵共有プロトコル
安全な通信路
A
暗号化
B
復号
2
公開鍵暗号の仕組み
public-key cryptography
情報の受信者が,鍵の組を事前に生成
暗号化鍵と復号鍵
暗号化鍵は広く公開する
復号鍵は,受信者だけの秘密情報とする
送信者
A
受信者
事前に送付
(保護の必要なし)
暗号化
B
復号
3
両方式の比較
共通鍵暗号 = 金庫
A
鍵が必要
B
鍵が必要
公開鍵暗号 = 郵便受け
A
鍵は不要
B
鍵が必要
ユーザは,自分専用の郵便受けを持つ
C
D
4
公開鍵暗号
公開鍵暗号は,3つのアルゴリズム(G, E, D) で定義される
G(seed); 鍵の組 ek と dk を生成する
E(ek, m); ek を暗号化鍵にしてm を暗号化する
D(dk, c); dk を復号鍵にして c を復号する
(ek, dk)  G の場合 D(dk, E(ek, m)) = m.
(ek, dk)  G でない場合 D(dk, E(ek, m))  m.
G
ek
m
E
seed
dk
c
D
m
5
鍵の取扱いについて
全てのユーザが,自分専用の鍵組 (ek, dk) を生成する
復号鍵 dk は秘密管理
 ユーザ本人だけが,暗号文を復号できる
暗号化鍵 ek は公開
 誰でも暗号文を作成することができる
D
A dk
A
B dk
B
C dk
C
ekA
ekB
ekC
A...ekA
B...ekB
C...ekC
6
RSA 暗号
Rivest, Shamir, Adelman により 1977年に開発された方式
鍵,平文,暗号文は,すべて整数値
暗号化:
鍵は2個の整数: e と n
c = me mod n
復号:
鍵は2個の整数: d と n
m = cd mod n
整数 e, d, n の選び方に秘密がある
鍵は十分長いこと... n  1024bits
S
R
R
A
S
A
7
数値例
e = 3, d = 7, n = 33:
m
c = m3 mod 33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
8
27
31
26
18
13
17
3
10
11
12
19
5
9
4
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
c
29
24
28
14
21
22
23
30
16
20
15
7
2
6
25
32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
m = c7 mod 33
1
29
9
16
14
30
28
2
15
10
11
12
7
20
27
25
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
8
6
13
26
21
22
23
18
31
5
3
19
17
24
4
32
8
計算を展開してみると...
暗号化して復号する: (m3 mod 33)7 mod 33  m21 mod 33
m
m2
1
2
3
4
5
6
7
8
9
10
11
1
4
9
16
25
3
16
31
15
1
22
m3
m3
m4
1
8
27
31
26
18
13
17
3
10
11
1
16
15
25
31
9
25
4
27
1
22
m5 m6
1
32
12
1
23
21
10
32
12
10
11
m3
1
31
3
4
16
27
4
25
9
1
22
m16 m17 m18 m19 m20
1
31
3
4
16
27
4
25
9
1
22
1
29
9
16
14
30
28
2
15
10
11
m3
1
25
27
31
4
15
31
16
3
1
22
1
17
15
25
20
24
19
29
27
10
11
m21
1 1
1 2
12 3
1 4
1 5
12 6
1 7
1 8
12 9
1 10
22 11
m3
(m3)7
3, 7, 33 という数値の組み合わせが絶妙の関係にある
9
RSAの鍵生成
RSA における e, d, n の選び方:
step 1: 二個の素数 p, q を選び,n = pq とする
step 2: (p – 1)(q – 1) と互いに素となるよう,e を選ぶ
step 3: ed  1 mod (p – 1)(q – 1) となる d を求める
e, n ... 公開する
d (, p, q) ... 秘密に保持
p=3
q = 11
(p – 1)(q – 1) = 20
e=3
a と b が互いに素 ... gcd(a, b) = 1
a  b mod c  (a mod c) = (b mod c)
d=7
n = 33
鍵
10
アルゴリズム詳細
Q1: どうやって素数を作り出すか?
A1: 整数をランダムに作り,素数判定テストにかければ良い
Q2: ed  1 mod (p – 1)(q – 1)? となる d の求め方は?
A2: 最大公約数計算のためのユークリッド互除法を流用する
a0
ai
ai+1 = bi
a0 と b0 のgcd
aj
b0
bi
bi+1 = ai mod bi
bj = 0
11
d の計算法
 = (p – 1)(q – 1) と e に対してユークリッド互除法を適用
b0 = e
a0 = 
a1 = e
b1 = a0 mod b0 = a0 – k1b0
=  – k1e
a2 = b1
b2 = a1 mod b1 = a1 – k2b1
= – k2 + (k1+1)e
bi = xi + yie
aj=1
bj–1= 1
bj = 0
 とe は互いに素
1 = x + ye
ye = –x + 1
ye  1 mod 
d = y mod 
として d を選ぶ
12
d の計算例
 = 130, e = 59 の場合
130
59
59
12
= 130 – 2×59
12
11
= 59 – 4×12 = – 4×130 + 9×59
11
1
= 12 – 11 = 5×130 – 11×59
1 = x + ye
1 = 5 + (–11)e
ye = –x + 1
(–11)e = –5 + 1
ye  1 mod 
(–11)e  1 mod 
d = –11 mod 130 = 119
ed = 59×119=7021
= 54×130 +1
ed  1 mod 
13
暗号化と復号の計算
暗号化鍵: e とn
復号鍵: d (と n)
平文,暗号文... {0, ..., n – 1} に属する非負整数
暗号化: c = me mod n
復号: m = cd mod n
べき乗剰余の計算
... 前回のスライド参照
14
例: RSA の鍵計算
step 1: p = 79, q = 97 とし,n = pq = 7663 を求める
step 2: e = 5 とする.これは (p – 1)(q – 1) = 7488 と互いに素
step 3: 5d  1 mod 7488 となる d を求める:
7488
5
5
3 = 7488 – 1497×5
3
2 = 5 – 3 = –7488 + 1498×5
2
1 = 3 – 2 = 2×7488 – 2995×5
d =–2995 mod 7488 = 4493
計算はすべて
mod (p – 1)(q – 1)
15
例: RSA の暗号化と復号
鍵: e = 5, d = 4493, n = 7663
暗号化:
c = m5 mod 7663
復号:
m = c4493 mod 7663
= c4096c256c128c8c4c mod 7663
計算はすべて
mod n = pq
m
m^2
m^4
m^5
51
2601
6435
6339
c
c^2
c^4
c^8
c^16
c^32
c^64
c^128
c^256
c^512
c^1024
c^2048
c^4096
c^4493
6339
5812
840
604
4655
5724
4851
6791
1747
2135
6403
1359
98
51
16
RSAは,いつも正しく動作するのか?
(me mod n)d mod n = med mod n = m
を証明する必要あり
補題を二つ利用...
フェルマーの小定理:
素数 p, gcd(x, p) = 1 である x に対し,xp–1  1 mod p
中国人の剰余定理(の特別な場合):
異なる二素数 p, q に対し,x  a mod p かつ x  a mod q ならば
x  a mod pq
17
RSA の正しさの証明
定理: med mod n = m.
証明:
ed  1 mod (p – 1)(q – 1) より,ed = k(p – 1)(q – 1) + 1
任意のm に対し med  m mod p である.なぜなら...
gcd(m, p) = 1 のとき,フェルマーの小定理より
mp–1  1 mod p,ここからmed = (mp–1)k(q–1)m  m mod p.
gcd(m, p)≠ 1のとき,m はpの倍数で med  m  0 mod p
同様に,med  m mod q である
中国人の剰余定理よりmed mod n = m
18
RSAに対する攻撃
公開されている暗号化鍵e, n, 盗聴で得られる
暗号文c から, c = me mod nである x がわかるか?
総当たり法
攻撃者も「暗号化」操作を実行可能
x{0, ..., n – 1} に対し,c = xe mod nかを検査
n を大きくすれば,実用上は問題ない
e
n
c
m?
法 n のもとでc の e乗根を求める
実数体上では,e乗根の計算は容易
実数体上でのアルゴリズムは,有限体上では動かない
19
RSAに対する攻撃:素因数分解
素因数分解攻撃
n = pq となる素数 p, q を求める
p, q, e がわかれば,d は簡単に割り出せる
d を使ってc を復号
n の素因数分解は可能か?
いくつかの素因数分解アルゴリズムが知られている
総当たり法,二次ふるい法,楕円曲線法 etc...
最速のアルゴリズムでも,1,024ビットもある大きな数字の
素因数分解は,事実上不可能
明日にも,良いアルゴリズムが見つかる可能性(リスク)も
20
素因数分解とRSA
「n を素因数分解できれば,RSA を破ることができる」
 「RSA を破ることは,素因数分解よりも難しくない」
RSAの解読問題 素因数分解
易しい
難しい
Rabin暗号解読問題
理論的には,RSA よりも「安全そう」な暗号も存在する...
Rabin 暗号,逆数暗号
素因数分解ができれば,解読可能
暗号の解読ができれば,素因数分解もできる
「これらの方式の解読は,素因数分解と等価な難しさ」
... ただし,効率が良くないため,実用性に劣る
21
RSAの安全性について:まとめ
RSA の安全性は,数学的に証明されたものではない...
多くの人が,RSA を破ることは困難であると信じている
誰かが既に暗号解読に成功し,ほくそ笑んでいる
可能性も否定できない
計算量理論との関連性についても,明確でない
RSA解読問題が NP完全か否かは不明
量子コンピュータが実現されれば,RSAは解読されてしまう
Shorの量子アルゴリズム ⇒ 素因数分解が効率良く解ける
22
ElGamal 暗号: 鍵生成
離散対数問題 (DLP) に基づく公開鍵暗号
確率的な暗号方式:一個の平文が多数の暗号文を持つ
鍵生成
素数 q, Fq の生成元 g を選択
x を適当に選びy = gx mod q とする
暗号化鍵はq, g, y
復号鍵はx
23
ElGamal暗号: 暗号化と復号
平文 m の暗号化:
乱数r を選び,以下を計算
c1 = gr mod q
c2 = m + yr mod q
暗号文は (c1, c2)
r
g
y
m
mod q
暗号文 (c1, c2) の復号:
u = c1x mod q
v = c2 – u mod q
v が復号結果の平文
c1
x
(gx)r
+
c1x
(gr)x
c2
mod q
-
m
24
ElGamal: 計算例
q = 13, g = 7 とする
1  712 mod 13, 2  711 mod 13, ..., 12  76 mod 13
x = 5とし,y = 75 =16807  11 mod 13 を計算する
暗号化: m = 6, r = 3
c1 = 73 = 343  5 mod 13, c2 = 6 + 113 =1337  11 mod 13
c = (5, 11) が暗号文
復号: c = (5, 11)
u = 55 =3125  5 mod 13, v = 11 – 5  6 mod 13
v = 6 が平文
25
確率的暗号
暗号化の際に乱数 r を使用する
 異なる r を使えば,異なる暗号文が得られる
 総当たり攻撃に対する耐性アップ
c0
c1
m
m
c
m
m
RSA
cq–1
ElGamal
c = (c1, c2) ... r の影響を打ち消すため,c1 が必要
 暗号文は「平文よりも長い」
ElGamal暗号の解読は,離散対数問題よりも難しくない
26
公開鍵暗号 vs. 共通鍵暗号
共通鍵暗号
効率が良い: 計算量が小さい,鍵の長さが短い...
選択肢が多い : 多くのアルゴリズムが提案されている
鍵共有の問題が避けられない
公開鍵暗号
「鍵共有」の代わりに,より簡便な「鍵配布」で済む
(公開情報の流通だけで良いため,比較的容易)
公開鍵暗号・共通鍵暗号を組み合わせて使用することが一般的
RSA暗号を使ってAESの鍵を送付する,等々
27
chapter 4 のまとめ
暗号に関する基本事項の紹介
共通鍵暗号
DES (+ AES)
鍵共有プロトコル
公開鍵暗号
RSA
ElGamal
28
講義全体のまとめ
chapter 1: 情報を測る
chapter 2: 情報をコンパクトに表現する
chapter 3: エラーから情報を守る
chapter 4: 暗号について
情報理論:
情報処理を,「手工芸」から「近代技術」へ変革した
一般の人が意識しないくらい普及・浸透した技術だが,
情報や通信に携わる者としては,知っておくべき体系
29