Transcript Document

chapter 4:
暗号について
1
この講義の「守備範囲」について
「暗号技術」は,様々な側面から議論される主題となりつつある
情報管理
政治・経済
歴史
哲学・思想
本講義では,暗号に関する技術的な基礎にのみ言及する
2
用語について
p
D(c)
暗号化 (encryption)
E
D
復号 (decryption)
平文,ひらぶん (plaintexts);
意味の明確な情報表現
E(p)
c
暗号文 (ciphertexts);
それ自体では意味をなさない
情報表現
暗号 = D(E(p)) = p であるような E と D の組
(用語に関しては,ブレが多い)
crypto  cipher, text  data, cryptography  encryption
3
暗号の大分類
鍵無し暗号
E, D の値は,平文,暗号文だけにより決まる
鍵が存在しない... アルゴリズムそのものを秘匿して使用
“O, draconian devil”  “Leonardo da Vinci”
共通鍵暗号
E と D が同一の鍵を使用する
公開鍵暗号
E と D が異なる鍵を使用する
4
共通鍵暗号
対称鍵暗号,古典的暗号,とも...
E (D) は,二つの入力,「鍵」と「平文(暗号文)」を取る
E(k, p): 鍵 k を用い,平文 p を暗号化して得られる暗号文
D(k, c):鍵 k を用い,暗号文 c を暗号化して得られる平文
D(k, E(k, p)) = p. さらに,k’  k ならば D(k’, E(k, p))  p
k1
p
E
k2
c
D
p, if k1 = k2
?, if k1  k2
5
換字暗号
E
K
A
...
...
Y
Z

C

B

暗号文
A

平文

substitution cipher:
暗号化: 平文の文字を他の文字に置き換える
復号: 暗号化の逆の文字置き換え
鍵: 文字の置換表
Z
G
鍵の種類 = 英文の場合 26!
... 現代のコンピュータにとっても,かなり大きい数字
平文の統計的性質が,そのまま暗号文にも出現する
6
頻度攻撃
単純な換字暗号では...
同じ文字は,いつも同じ文字に置き換えられる
多くの場合,文字の出現頻度には偏りがある
英文の場合...
E, T, A, S ,O, N などが頻繁に出現する
暗号文で頻出する文字...上記のどれかである可能性が高い
A.C. Doyle, 1903,
The Adventure of the Dancing Men
「踊る人形」
7
頻度攻撃のイメージ
information as a
concept has many
meanings the
concept of
information is a
典型的な英文
b
c
d
zpunim gt oncuit
未知文書の
utqvgwp gw h
暗号文
antaubz spgap
nigqgthvvm
cuigluw eino
h
8.4% → a
x
a
c
8.6%
1.4%
2.8%
3.8%
theory in modern
english is a concept
which originally
derives from
classical greek
推測された
平文
1.5% → b
2.7% → c
3.8% → d
8
換字暗号の改良法について
換字暗号の脆弱性は,昔から専門家には良く知られていた
多くの改良法...
一対多の換字
複数文字単位での置き換え
換字表を複数用意して切り替える
換字表を動的に更新していく
 エニグマ暗号
9
エニグマ暗号
第二次大戦中.ドイツ軍が使用した暗号方式
機械的な「ローター」により,文字の置き換えルールを決定
一文字ごとにローターが回転し,ルールが更新される
A
B
D
マシンパワー >> 人力
C
10
DES (Data Encryption Standard)
DES (Data Encryption Standard)
1970年代に,アメリカにて開発
主目的は,比較的機密度の低い情報の保護
「リーズナブルなコストで,そこそこの安全性」
今日では安全とは言えないが,現代暗号に多大な影響
1973
1974
1977
1997
NBS (米国標準化事務所)暗号アルゴリズムを公募
IBM が同社のルシファー暗号を応募
米国の連邦標準として採用
NIST (NBSから改称) が,次世代のAES を公募
11
1段目
2段目
L16
16段目
暗号文
64
IP-1
f
R16
R15
L15
R1
R0
32
R2
f
f
IP
L2
L1
L0
32
64
平文
48
48
48
RK16
RK2
56
RK1
56
鍵
DESの基本構造
青字:ビット数
12
Feistel 構造
DES の各ラウンドは,Fesitel 構造を有する
Li
Ri
RKi+1
f
Li+1
Ri+1
RKi+1 を用いた逆計算は,
同じFeistel 構造で実現可能
(レジスタ内容の左右を交換
するだけで良い)
RKi+1 無しでは,ラウンド操作の
逆計算は非常に困難
RKi+1 があれば,ラウンド操作の
逆計算は容易に行える
Ri+1
Li+1
RKi+1
f
Ri
Li
13
L16
青枠内は,暗号化操作とまったく同一
 一個の回路で,暗号化も復号も対応できる
平文
IP-1
f
R16
R15
L15
R1
R2
f
f
R0
L2
L1
L0
IP
暗号文
鍵
RK1
RK15
RK16
DESの復号操作
14
DESの安全性
理論面からのアプローチ
差分攻撃 (Biham & Shamir, 1990)
DES の設計段階で想定・対策済み,らしい
線形攻撃 (Matsui, 1993)
世界で初めてDESの解読に成功
計算面からのアプローチ
10万台の計算機を用い,22時間で解読成功 (1999)
FPGA で作った並列計算機で,9日間で解読成功 (2006)
DES は,もはや安全な選択肢ではない
DES解読器
制作費 25万ドル
15
DESに対する都市伝説
DESには,設計者しか知らない弱点が仕込まれているのでは?
なぜなら,そこにNSAが関与しているから...
NSA: 米国国家安全保障局
CIA, FBI, 軍の情報機関を統括する組織
政府は,長らくその存在を認めなかった
最近では,「エシュロン」への関与が噂に
鍵の長さが,IBM提案の半分に短縮された
S-box置換の中身が,NSAの選定したものに入れ替えられた
NSAは,線形解読法が可能であることを知っていたらしい
⇒噂の真相は明らかになっていない
16
AES,その他の共通鍵暗号
DES は,もはや安全ではない
都市伝説を否定しようがない
 新しく,より強力な暗号が必要
1997
1999
2000
2001
NISTがAdvanced Encryption Standard (AES)の公募開始
12か国から15件の応募
一次審査で 5件に絞り込み
ベルギーからの Rijndael が選定される
連邦標準への採用
他にも多数の暗号方式が存在:Blowfish, IDEA, Camellia...
17
鍵共有の問題
すべての共通鍵暗号が直面する問題:
どうやって,鍵を安全に共有するか?
情報の送受信者が,事前に同じ鍵を知っておく必要がある
第三者には,その鍵を知られてはいけない
解決法 ...
高価だが,安全な通信手段を用いて鍵を配送
エージェント,書留,伝書鳩,etc.
数学的なトリックを利用  鍵共有プロトコル
18
鍵共有プロトコル
二人のユーザ A と B の間の通信手順(プロトコル)を考える:
通信路の安全性は保障されない
攻撃者 C が,通信内容を盗聴する恐れがある
ただし,通信内容の改ざんは行えないと仮定
プロトコル実行後には...
A と B は,何か共通の情報を保持する
C は,その共通情報を知りえない
19
Diffie-Hellman プロトコル
Diffie-Hellman プロトコル;
Diffie と Hellman により,1976年に提案
離散対数問題を解くのが難しいことを利用
準備
Fq = {0, ..., q – 1}, q は大きな素数
g... Fq の生成元
(任意 aFq a 0 は,a = gx mod q と表せる)
離散対数問題,discrete logarithm problem (DLP):
“与えられた q, g, a から,a = gx mod q となる x を求めよ”
20
数値例
F7 = {0, 1, 2, ..., 6}
g = 3 はF7 の生成元
1 = 36 mod 7
2 = 32 mod 7
3 = 31 mod 7
4 = 34 mod 7
5 = 35 mod 7
6 = 33 mod 7
離散対数問題の「答え」
log3 1 = 6
log3 2 = 2
log3 3 = 1
log3 4 = 4
log3 5 = 5
log3 6 = 3
6
5
4
3
2
1
x
0 1 2 3 4 5 6
a
今日でも,「効率的な解き方」が知られていない
... 総当たり方式で解を探すしかない
... q が十分大きければ (数千ビット程度),事実上「解けない」
21
プロトコル
step 1: A とB が,使用する素数q と生成元 g を決定 (公開可)
step 2a: A はランダムにxを選択, mA = gx mod q を求めB に送付
step 2b: B はランダムにyを選択, mB = gy mod q を求めA に送付
step 3a: A は (mB)x mod q = gxy mod q を計算
step 3b: B は (mA)y mod q = gxy mod q を計算
q, g を決定
x
mA = gx mod q
mB = gy mod q
gxy mod q
y
gxy mod q
22
計算例
q = 197, g = 3
71 = 351 mod 197
51
38 = 355 mod 197
122 = 3851 mod 197
55
122 = 7155 mod 197
どうやって 3851 mod 197 を計算する?
3851 mod 197
= (3832 mod 197) (3816 mod 197) (382 mod 197) (381 mod 197) mod 197
382n mod 197 = (38n mod 197)2 mod 197
381
382
384
388
3816
3832 mod 197
23
安全性について
盗聴者 C が,秘密情報を知ることはないか?
q, g を決定
mA = gx mod q
x
mB = gy mod q
gxy mod q
y
gxy mod q
C は,盗聴により q, g, mA, mB を知り得る
C は,DLPを解かない限り,x, yの値を知りえない
C は gxy mod q の値を知りえない
24
より強力な攻撃者
通信内容の改ざんができるくらい強力な攻撃者が居る場合...
C は,Bのフリをして Aと通信,鍵を共有
C は,Aのフリをして Bと通信,鍵を共有
A, B は,「正しい相手と鍵共有した」と勘違いする
 man-in-the-middle attack (中間一致攻撃)
25
小休止
ここまでのお話し
共通鍵暗号
DESを中心に
鍵共有プロトコル
万能ではないが,多くの場面で役に立つ
ここからのお話し
公開鍵暗号
26
共通鍵暗号の仕組み
暗号化と復号とで,同じ鍵を使用する
事前に鍵共有を完了しておく必要あり
送信者
受信者
鍵共有プロトコル
安全な通信路
A
暗号化
B
復号
27
公開鍵暗号の仕組み
public-key cryptography
情報の受信者が,鍵の組を事前に生成
暗号化鍵と復号鍵
暗号化鍵は広く公開する
復号鍵は,受信者だけの秘密情報とする
送信者
A
受信者
事前に送付
(保護の必要なし)
暗号化
B
復号
28
両方式の比較
共通鍵暗号 = 金庫
A
鍵が必要
B
鍵が必要
公開鍵暗号 = 郵便受け
A
鍵は不要
B
鍵が必要
ユーザは,自分専用の郵便受けを持つ
C
D
29
公開鍵暗号
公開鍵暗号は,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
30
鍵の取扱いについて
全てのユーザが,自分専用の鍵組 (ek, dk) を生成する
復号鍵 dk は秘密管理
 ユーザ本人だけが,暗号文を復号できる
暗号化鍵 ek は公開
 誰でも暗号文を作成することができる
D
A dk
A
B dk
B
C dk
C
ekA
ekB
ekC
A...ekA
B...ekB
C...ekC
31
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
32
数値例
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
33
計算を展開してみると...
暗号化して復号する: (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 という数値の組み合わせが絶妙の関係にある
34
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
鍵
35
アルゴリズム詳細
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
36
d の計算法
 = (p – 1)(q – 1) と e に対してユークリッド互除法を適用
b0 = e
a0 = 
a1 = e
b1 = a0 mod b0 = a0 – k1b0
=  – k1e
a2 = b 1
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 を選ぶ
37
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 
38
暗号化と復号の計算
暗号化鍵: e とn
復号鍵: d (と n)
平文,暗号文... {0, ..., n – 1} に属する非負整数
暗号化: c = me mod n
復号: m = cd mod n
べき乗剰余の計算
... 本スライド 23ページ参照
39
例: 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)
40
例: 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
41
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
42
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
43
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乗根の計算は容易
実数体上でのアルゴリズムは,有限体上では動かない
44
RSAに対する攻撃:素因数分解
素因数分解攻撃
n = pq となる素数 p, q を求める
p, q, e がわかれば,d は簡単に割り出せる
d を使ってc を復号
n の素因数分解は可能か?
いくつかの素因数分解アルゴリズムが知られている
総当たり法,二次ふるい法,楕円曲線法 etc...
最速のアルゴリズムでも,1,024ビットもある大きな数字の
素因数分解は,事実上不可能
明日にも,良いアルゴリズムが見つかる可能性(リスク)も
45
素因数分解とRSA
「n を素因数分解できれば,RSA を破ることができる」
 「RSA を破ることは,素因数分解よりも難しくない」
RSAの解読問題 素因数分解
易しい
難しい
Rabin暗号解読問題
理論的には,RSA よりも「安全そう」な暗号も存在する...
Rabin 暗号,逆数暗号
素因数分解ができれば,解読可能
暗号の解読ができれば,素因数分解もできる
「これらの方式の解読は,素因数分解と等価な難しさ」
... ただし,効率が良くないため,実用性に劣る
46
RSAの安全性について:まとめ
RSA の安全性は,数学的に証明されたものではない...
多くの人が,RSA を破ることは困難であると信じている
誰かが既に暗号解読に成功し,ほくそ笑んでいる
可能性も否定できない
計算量理論との関連性についても,明確でない
RSA解読問題が NP完全か否かは不明
量子コンピュータが実現されれば,RSAは解読されてしまう
Shorの量子アルゴリズム ⇒ 素因数分解が効率良く解ける
47
ElGamal 暗号: 鍵生成
離散対数問題 (DLP) に基づく公開鍵暗号
確率的な暗号方式:一個の平文が多数の暗号文を持つ
鍵生成
素数 q, Fq の生成元 g を選択
x を適当に選びy = gx mod q とする
暗号化鍵はq, g, y
復号鍵はx
48
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
49
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 が平文
50
確率的暗号
暗号化の際に乱数 r を使用する
 異なる r を使えば,異なる暗号文が得られる
 総当たり攻撃に対する耐性アップ
c0
c1
m
m
c
m
m
RSA
cq–1
ElGamal
c = (c1, c2) ... r の影響を打ち消すため,c1 が必要
 暗号文は「平文よりも長い」
ElGamal暗号の解読は,離散対数問題よりも難しくない
51
公開鍵暗号 vs. 共通鍵暗号
共通鍵暗号
効率が良い: 計算量が小さい,鍵の長さが短い...
選択肢が多い : 多くのアルゴリズムが提案されている
鍵共有の問題が避けられない
公開鍵暗号
「鍵共有」の代わりに,より簡便な「鍵配布」で済む
(公開情報の流通だけで良いため,比較的容易)
公開鍵暗号・共通鍵暗号を組み合わせて使用することが一般的
RSA暗号を使ってAESの鍵を送付する,等々
52
chapter 4 のまとめ
暗号に関する基本事項の紹介
共通鍵暗号
DES (+ AES)
鍵共有プロトコル
公開鍵暗号
RSA
ElGamal
53
講義全体のまとめ
chapter 1: 情報を測る
chapter 2: 情報をコンパクトに表現する
chapter 3: エラーから情報を守る
chapter 4: 暗号について
情報理論:
情報処理を,「手工芸」から「近代技術」へ変革した
一般の人が意識しないくらい普及・浸透した技術だが,
情報や通信に携わる者としては,知っておくべき体系
54