共通鍵暗号

共通鍵暗号
廣瀬勝一
廣瀬
共通鍵暗号
1 / 40
ブロック暗号とストリーム暗号
ブロック暗号 平文・暗号文の文字の集まりに作用する.
ストリーム暗号 平文・暗号文の個々の文字に作用する.
【例】
M
K
K
key stream
generator
key stream
generator
C
廣瀬
共通鍵暗号
M
2 / 40
DES (Data Encryption Standard,データ暗号化標準)
IBM,1975 年
plaintext
64
Feistel 構造
IP
64
32
32
f
K1
48
鍵長は 64 ビット
(8 ビットはパリティ)
f
K15
48
f
64
key schedule
ブロック長は 64 ビット
(平文・暗号文の長さ)
64
secret key
K16
48
IP −1 a
64
ciphertext
廣瀬
共通鍵暗号
3 / 40
IP(初期転置)
58
60
62
64
57
59
61
63
50
52
54
56
49
51
53
55
42
44
46
48
41
43
45
47
34
36
38
40
33
35
37
39
26
28
30
32
25
27
29
31
18
20
22
24
17
19
21
23
10
12
14
16
9
11
13
15
2
4
6
8
1
3
5
7
【例】32 番目の出力ビットは 8 番目の入力ビットである.
廣瀬
共通鍵暗号
4 / 40
鍵スケジュール (1/2)
LS (shift left)
64
PC-1
28
LS
C1
48
K1
28
RS
D1
1
1
9
1
2
1
10
2
3
2
11
2
4
2
12
2
5
2
13
2
6
2
14
2
7
2
15
2
8
2
16
1
5
2
13
2
6
2
14
2
7
2
15
2
8
2
16
1
PC-2
RS (shift right)
RS
LS
RS
D16
C16
48
K16
LS
1
0
9
1
2
1
10
2
3
2
11
2
4
2
12
2
PC-2
廣瀬
共通鍵暗号
5 / 40
鍵スケジュール (2/2)
P C-1 : {0, 1}64 → {0, 1}56
57
1
10
19
63
7
14
21
49
58
2
11
55
62
6
13
廣瀬
41
50
59
3
47
54
61
5
33
42
51
60
39
46
53
28
25
34
43
52
31
38
45
20
17
26
35
44
23
30
37
12
P C-2 : {0, 1}56 → {0, 1}48
9
18
27
36
15
22
29
4
共通鍵暗号
14
3
23
16
41
30
44
46
17
28
19
7
52
40
49
42
11
15
12
27
31
51
39
50
24
6
4
20
37
45
56
36
1
21
26
13
47
33
34
29
5
10
8
2
55
48
53
32
6 / 40
f 関数
4
32
S1
6
S2 a
• P は転置
S3
• Si は S ボックス
S4 a
32
• E は拡大関数
(換字ボックス)
48
48
P
32
E
S5
48
Ki
S6
S7 a
S8 a
S ボックスは DES の唯一の非線形変換である.
廣瀬
共通鍵暗号
7 / 40
拡大関数 E と転置 P
E : {0, 1}32 → {0, 1}48
32
4
8
12
16
20
24
28
廣瀬
1
5
9
13
17
21
25
29
2
6
10
14
18
22
26
30
3
7
11
15
19
23
27
31
4
8
12
16
20
24
28
32
5
9
13
17
21
25
29
1
共通鍵暗号
P : {0, 1}32 → {0, 1}32
16
29
1
5
2
32
19
22
7
12
15
18
8
27
13
11
20
28
23
31
24
3
30
4
21
17
26
10
14
9
6
25
8 / 40
S ボックス
Si (b1 , b2 , b3 , b4 , b5 , b6 ) で (b1 , b6 ) は行,(b2 , b3 , b4 , b5 ) は列を指定する.
S1
E
0
4
F
4
F
1
C
D
7
E
8
1
4
8
2
2
E
D
4
S2
F
3
0
D
1
D
E
8
8
4
7
A
E
7
B
1
6
F
A
3
廣瀬
F
2
6
9
B
2
4
F
B
D
2
1
3
8
D
4
8
1
B
7
3
A
F
5
A
6
C
B
6
C
9
3
C
B
7
E
5
9
3
A
9
5
A
0
0
3
5
6
7
8
0
D
4
E
1
2
9
C
5
B
7
0
8
6
2
1
C
7
D
A
6
C
C
6
9
0
0
9
3
5
5
B
2
E
A
5
F
9
共通鍵暗号
9 / 40
S ボックス
S3
A
D
D
1
0
7
6
A
9
0
4
D
E
9
9
0
6
3
8
6
3
4
F
9
F
6
3
8
S4
7
D
A
3
D
8
6
F
E
B
9
0
3
5
0
6
0
6
C
A
6
F
B
1
9
0
7
D
S5
2
E
4
B
C
B
2
8
4
2
1
C
1
C
B
7
7
4
A
1
A
7
D
E
B
D
7
2
廣瀬
5
A
0
7
1
2
B
4
D
8
1
F
C
5
2
E
7
E
C
3
B
C
5
B
4
B
A
5
2
F
E
2
8
1
7
C
A
3
D
8
1
4
F
9
2
7
1
4
8
2
3
5
5
C
E
B
B
1
5
C
C
A
2
7
4
E
8
2
F
9
4
E
6
1
8
D
8
5
F
6
5
0
9
F
3
F
C
0
F
A
5
9
D
3
6
A
0
9
3
4
E
8
0
5
9
6
E
3
共通鍵暗号
10 / 40
S ボックス
S6
C
A
9
4
1
F
E
3
A
4
F
2
F
2
5
C
9
7
2
9
S7
4
D
1
6
B
0
4
B
2
B
B
D
E
7
D
8
S8
D
1
7
2
2
F
B
1
8
D
4
E
4
8
1
7
廣瀬
2
C
8
5
6
9
C
F
8
5
3
A
F
4
C
1
0
9
3
4
8
1
7
A
D
A
E
7
6
A
9
4
F
3
C
A
B
7
E
8
1
4
2
D
0
6
7
B
D
1
0
E
3
D
4
1
4
E
A
7
E
0
1
6
7
B
D
0
5
3
B
8
B
8
6
D
3
E
A
9
C
3
F
5
9
5
6
0
7
C
8
F
5
2
0
E
A
F
5
2
6
8
9
3
1
6
2
C
A
C
0
F
9
5
6
C
3
6
A
9
E
B
D
0
5
0
F
3
0
E
3
5
C
9
5
6
7
2
8
B
共通鍵暗号
11 / 40
暗号解析
Kerckhoff の原理
暗号解析者はどのような暗号方式が使用されているかを知っている.
攻撃
• 暗号文単独攻撃 (ciphertext-only attack)
• 既知平文攻撃 (known-plaintext attack)
• 選択平文攻撃 (chosen-plaintext attack)
• 選択暗号文攻撃 (chosen-ciphertext attack)
目標
• 鍵の回復 (key recovery)
• 識別 (distinguishing) 無作為に選択された置換との識別
廣瀬
共通鍵暗号
12 / 40
暗号文単独攻撃と既知平文攻撃
暗号文単独攻撃
攻撃者
オラクル
C1 , C2 , . . . , Cq
Ci = EK (Pi )
既知平文攻撃
攻撃者
オラクル
(P1 , C1 ), (P2 , C2 ), . . . , (Pq , Cq )
廣瀬
共通鍵暗号
Ci = EK (Pi )
13 / 40
選択平文攻撃
攻撃者
オラクル
P1 C1
Ci−1 を受け取った後
P2 - Ci = EK (Pi )
任意に Pi を選ぶ
C2
..
.
Pq Cq
廣瀬
共通鍵暗号
14 / 40
選択暗号文攻撃
攻撃者
オラクル
x1 , t1 y1
yi−1 を受け取った後
任意に (xi , ti ) を選ぶ
x2 , t2 - yi =
y2
廣瀬
{
EK (xi ) if ti = 0
−1
EK
(xi ) if ti = 1
..
.
xq , tq yq
共通鍵暗号
15 / 40
ブロック暗号に対する二つの強力な暗号解読法
差分解読 (differential cryptanalysis) (1990, Biham & Shamir)
選択平文攻撃
線形解読 (linear cryptanalysis) (1993, Matsui)
既知平文攻撃
1994 年,線形解読法により,243 個の平文と暗号文の組を用いて,DES
が解読された(暗号化に用いられた秘密鍵が特定された).
廣瀬
共通鍵暗号
16 / 40
鍵の全数探索
1999 年,“DES Cracker” と呼ばれる専用ハードウェアと 10 万台の計算機
を用いて,22 時間 15 分で一組の平文と暗号文の暗号化に用いられた秘密
鍵が特定された.
(1 秒当り 2450 億個の鍵が検査された)
(http://www.eff.org/descracker/)
DES を利用する場合は,3 重暗号
EK3 (DK2 (EK1 (·)))
が推奨されている.
• K1 = K3 でも良い.
• K1 = K2 のときは通常の暗号化と同じ.
廣瀬
共通鍵暗号
17 / 40
環 (Ring)
集合 R について,二つの演算 + と · が定義され,以下の条件が満たされ
るとき,R は環と呼ばれる.なお,+ は加法,· は乗法と呼ばれる.
• R は加法について可換群をなす.
• R は乗法について閉じている.
• R の乗法が結合則を満たす.
• R は乗法に関する単位元を持つ.
• 分配則が成立する.即ち,任意の a, b, c ∈ R について,
(a + b) · c = a · c + a · c
a · (b + c) = a · b + a · c
R の乗法が可換であるとき,R は可換環と呼ばれる.
廣瀬
共通鍵暗号
18 / 40
復習
• R の乗法が結合則を満たす.
• 任意の a, b, c ∈ R について,(ab)c = a(bc).
• R が加法 + について可換群をなす.
• R が加法 + について群をなす.
• 任意の a, b ∈ R について,a + b = b + a が成立する.
廣瀬
共通鍵暗号
19 / 40
例1
Zn = {0, 1, . . . , n − 1} は,法 n の加法と乗法について環をなす.
• Zn は法 n の加法について可換群をなす.
• Zn は法 n の乗法について閉じている.
• 法 n の乗法は結合則を満たす.
• 1 は法 n の乗法についての単位元である.
• 分配則が成立する.
Zn は可換環である.
廣瀬
共通鍵暗号
20 / 40
例2
R を可換環とする.
R[x] を R の要素を係数とする多項式の集合とする.
R[x] は環をなす.
【例】Z5 [x]
f (x) = 3x2 + 4x + 1, g(x) = 2x + 4 のとき,
f (x) + g(x) = 3x2 + x
f (x) · g(x) = 6x3 + 12x2 + 8x2 + 16x + 2x + 4
= x3 + 3x + 4
係数の加法と乗法は Z5 の加法と乗法によって行われる.
廣瀬
共通鍵暗号
21 / 40
体 (Field)
集合 F について,加法 + と乗法 · が定義され,以下の条件が満たされる
とき,F は体と呼ばれる.
• F は可換環をなす.
• すべての a ∈ F \ {0} に対して,乗法についての逆元 a−1 が存在す
る.ここで,0 は加法についての F の単位元である.
体 F の別の定義
• F は加法について可換群をなす.
• F \ {0} は乗法について可換群をなす.
• 分配則が成立する.
廣瀬
共通鍵暗号
22 / 40
例
Zn は体である ⇔ n は素数である
【例】n = 15 = 3 × 5
2−1 = 8
7−1 = 13
6 の逆元は存在しない
廣瀬
共通鍵暗号
23 / 40
AES (Advanced Encryption Standard)
Rijndael (Daemen & Rijmen, 1998)
SPN 構造 (Substitution-Permutation Network)
鍵長
Nr
128
10
plaintext
128 ビット
128, 192, 256 ビット
192
12
AddRoundKey
256
14
Round
SubBytes
Nr
ShiftRows
Round
Round
MixColumns
FinalRound
AddRoundKey
FinalRound は MixColumns を省略
廣瀬
key
Key Schedule
ブロック長
鍵長
共通鍵暗号
ciphertext
24 / 40
状態
4 種類の変換 (AddRoundKey, SubBytes, ShiftRows, MixColumns) は状
態に対して適用される.
s0,0 s0,1 s0,2 s0,3
s1,0 s1,1 s1,2 s1,3
s2,0 s2,1 s2,2 s2,3
s3,0 s3,1 s3,2 s3,3
• 各バイト si,j ∈ {0, 1}8 は GF(28 ) の要素と見なされる.
• 乗法は x8 + x4 + x3 + x + 1 を法とする.
廣瀬
共通鍵暗号
25 / 40
初期状態
m0
m4
m8
m12
m1
m5
m9
m13
m2
m6
m10 m14
m3
m7
m11 m15
m = (m0 , m1 , . . . , m15 ) は平文であり,mi ∈ {0, 1}8 である.
廣瀬
共通鍵暗号
26 / 40
SubBytes
AES の唯一の非線形変換である.
S ボックス SRD : {0, 1}8 → {0, 1}8
SRD (si,j ) = f (g(si,j )),
ここで,
{
α−1
00

1
 0

 0

 0
f (y) = 
 1

 1

 1
1
if α ̸= 00
if α = 00
g(α) =
廣瀬
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
共通鍵暗号
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1










 T 
y ⊕ 










0
1
1
0
0
0
1
1












27 / 40
ShiftRows
s0,0 s0,1 s0,2 s0,3
s1,0 s1,1 s1,2 s1,3
s0,0 s0,1 s0,2 s0,3
→
s1,1 s1,2 s1,3 s1,0
s2,0 s2,1 s2,2 s2,3
s2,2 s2,3 s2,0 s2,1
s3,0 s3,1 s3,2 s3,3
s3,3 s3,0 s3,1 s3,2
第 i 行目を i 個左巡回シフトする.
廣瀬
共通鍵暗号
28 / 40
MixColumns (1/2)
a0,0 a0,1 a0,2 a0,3
a1,0 a1,1 a1,2 a1,3
→
b1,0 b1,1 b1,2 b1,3
a2,0 a2,1 a2,2 a2,3
b2,0 b2,1 b2,2 b2,3
a3,0 a3,1 a3,2 a3,3
b3,0 b3,1 b3,2 b3,3

 
b
3,i
  02
  
b2,i  03
  
 =
b  01
 1,i  
  
b0,i
01
廣瀬
b0,0 b0,1 b0,2 b0,3
 
01 01 03 a3,i 
 
 
02 01 01
 a2,i 
 
 
03 02 01
 a1,i 
 
01 03 02
a0,i
共通鍵暗号
29 / 40
MixColumns (2/2)
前ページの計算では,各列が GF(28 ) 上の多項式と見なされ,次式が計算
されていることになる.
bi (x) = c(x) ai (x) mod x4 + 1
ここで
c(x) = 03 x3 + 01 x2 + 01 x + 02
であり,1 ≤ i ≤ 4 について
ai (x) = a3,i x3 + a2,i x2 + a1,i x + a0,i
bi (x) = b3,i x3 + b2,i x2 + b1,i x + b0,i
である.
廣瀬
共通鍵暗号
30 / 40
AddRoundKey
s0,0 s0,1 s0,2 s0,3
s1,0 s1,1 s1,2 s1,3
k0,0 k0,1 k0,2 k0,3
⊕
k1,0 k1,1 k1,2 k1,3
s2,0 s2,1 s2,2 s2,3
k2,0 k2,1 k2,2 k2,3
s3,0 s3,1 s3,2 s3,3
k3,0 k3,1 k3,2 k3,3
⊕ はビットごとの排他的論理和 XOR である.
廣瀬
共通鍵暗号
31 / 40
鍵スケジュール (1/2)
鍵長 128 ビットの仕様を述べる
wi,j ∈ {0, 1}8 (0 ≤ i ≤ 3, 0 ≤ j ≤ 43)
0 ≤ j ≤ 43 について (w0,j , w1,j , w2,j , w3,j ) を計算
第 r ラウンドのラウンド鍵は Kr
K0
K1
w0,0 w0,1 w0,2 w0,3 w0,4 w0,5 w0,6 w0,7
w1,0 w1,1 w1,2 w1,3 w1,4 w1,5 w1,6 w1,7
...
w2,0 w2,1 w2,2 w2,3 w2,4 w2,5 w2,6 w2,7
w3,0 w3,1 w3,2 w3,3 w3,4 w3,5 w3,6 w3,7
廣瀬
共通鍵暗号
32 / 40
鍵スケジュール (2/2)
0 ≤ j ≤ 43 について (w0,j , w1,j , w2,j , w3,j ) の計算
1
0 ≤ j ≤ 3 について,wi,j = ki,j (0 ≤ i ≤ 3)
2
j ≥ 4 について
j ≡ 0 (mod 4) のとき
{
w0,j−4 ⊕ SRD (w1,j−1 ) ⊕ RC(j/4) (i = 0)
wi,j =
wi,j−4 ⊕ SRD (wi+1 mod 4,j−1 )
(i = 1, 2, 3)
j ̸≡ 0 (mod 4) のとき
wi,j = wi,j−4 ⊕ wi,j−1
ここで,RC(l) = xl−1 mod x8 + x4 + x3 + x + 1 (1 ≤ l ≤ 10).
廣瀬
共通鍵暗号
33 / 40
暗号利用モード
ブロック暗号を用いて任意長の平文を暗号化する方法
• Electronic codebook mode (ECB)
• Cipher block chaining mode (CBC)
• Cipher feedback mode (CFB)
• Output feedback mode (OFB)
• Counter mode (CTR)
CFB, OFB, CTR はストリーム暗号として働くモード
以降の表記法
• msbu は入力の上位 u ビットを出力する関数
• lsbu は入力の下位 u ビットを出力する関数
• x∥y は二値系列 x, y の連接
廣瀬
共通鍵暗号
34 / 40
ECB
P1
P2
EK
EK
C1
C2
Pn−1
...
EK
Cn−1
Pn
EK
Cn
単にブロックごとに暗号化
廣瀬
共通鍵暗号
35 / 40
CBC
P1
P2
EK
EK
C1
C2
Pn−1
Pn
IV
EK
Cn−1
EK
Cn
IV は初期ベクトル
廣瀬
共通鍵暗号
36 / 40
CFB
x
cmp
IV
cmp
cmp
y
EK
EK
EK
EK
msbs
msbs
msbs
msbs
P1
P2
C1
Pn−1
Pn
Cn−1
C2
Cn
• IV は初期ベクトル
• cmp(x, y) = lsbb−s (x)∥y (b は EK のブロック長)
• Pi , Ci の長さは s ビット
廣瀬
共通鍵暗号
37 / 40
OFB
IV
EK
EK
P1
P2
C1
EK
EK
Pn*
Pn−1
C2
msbu
Cn−1
Cn*
IV は初期ベクトル
廣瀬
共通鍵暗号
38 / 40
CTR
T1
T2
EK
EK
P1
P2
C1
Tn−1
...
EK
Tn
EK
msbu
Pn−1
Cn−1 Pn*
C2
Cn*
Ti はカウンタの値
【例】Ti ← Ti−1 + 1
廣瀬
共通鍵暗号
39 / 40
演習問題
1
DES の暗号化関数が置換であることを証明せよ.
2
MixColumns の行列による計算と多項式による計算が等価であるこ
とを説明せよ.
3
AES の復号アルゴリズムを説明せよ.
4
各暗号利用モードについて,復号法を説明せよ.
廣瀬
共通鍵暗号
40 / 40