’08年度特別講義X
暗号技術の発展
古典暗号からIDベース暗号まで
‘08.09.01
有田 正剛
1暗号
k k : 鍵 k1,k2 : 鍵 E : 暗号化アルゴリズム D : 復号アルゴリズム k1 m k2 送信者 c 受信者 c ← Ek1(m) m ← Dk2(c) m Eve ? 2目次
目次
1. 古典暗号
ブ
ク暗号
2. ブロック暗号
3. 公開鍵暗号
4. IDベース暗号
31 古典暗号
1. 古典暗号
換字暗号方式
鍵
• 鍵
π : アルファベット{A, B, C, ・・・, Z}の並べ替え
例えば π(A) = V, π(B) = S, π(C) = G, ・・・, π(Z)=U
例えば π(A) V, π(B) S, π(C) G,
, π(Z) U
• 暗号化
// x ∈ {A, B, C, ・・・, Z}
E
π(x) = π(x)
• 復号
// y ∈ {A B C ・・・ Z}
• 復号
// y ∈ {A, B, C, ・・・, Z}
D
π(y) = π
‐1(y)
5シフト暗号
鍵
• 鍵
K ∈ {0, 1, 2, ・・・, 25}
• 暗号化
// x ∈ {0,1, ・・・25}
E
K(x) = (x + K) mod 26
“cryptography”• 復号
// y ∈ {0,1, ・・・25}
D (y) (y K) mod 26
yp g p yD
K(y) = (y ‐ K) mod 26
K=3 “FUBWRJUDSKB”転置暗号方式
• 鍵
m : 正の整数
{1 2
}の並べ替え(転置)
π : {1, 2, ・・・,m}の並べ替え(転置)
• 暗号化
暗号化
E
π(x
1, ・・・, x
m) = (x
π(1), ・・・, x
π(m))
• 復号
D
π(y
1, ・・・, y
m) = (y
π^{‐1}(1), ・・・, y
π^{‐1}(m))
転置暗号の例
鍵 “cryptography” C R Y P O G T O G R A P H Y “CTAROPYGHPRY”2 ブロ ク暗号
2. ブロック暗号
– コンピュータを駆使して換字に転置
ブロック暗号
• ブロック暗号
= 効率的に計算可能な
E : {0 1}
lx {0 1}
n→ {0 1}
nE : {0,1}
lx {0,1}
n→ {0,1}
nただし、各第一引数kについて E
k(・)は置換(全単射)
• 鍵: k ←
${0,1}
l暗号化: c ← E
k(m)
(m ∈ {0,1}
n)
復号: m ← E
‐1(c)
(c ∈ {0 1}
n)
復号: m ← E
k 1(c)
(c ∈ {0,1}
n)
• 理想は各
理想は各
E
kk(・)がランダム置換
( )がランダム置換
入力が1ビットでも変化するとその影響は全ての出力ビットにその影響は全ての出力ビットに 及ぶ。 ランダム置換と区別がつかないような、 ランダム置換と区別がつかないような、 効率的な疑似ランダム置換を どのように作ればよいか?換字と転置を繰り返す
DES
•
E: {0, 1}
56x {0,1}
64→ {0,1}
64•
E
k(m):
// m ∈ {0,1}
64(k
1・・・ k
16) ← KeySchedule(k)
// k
i∈ {0 1}
48(k
1,
,k
16) ← KeySchedule(k)
// k
i∈ {0,1}
m ← IP(m)
L
00∥R
00← m
// |L
00|=|R
00|=32
for r = 1 to 16 do
L
r← R
r‐1; R
r← f(k
r, R
r‐1) + L
r‐1← IP
1(L ∥R )
c ← IP
‐1(L
16∥R
16)
return c
※ f がどんな関数であっても E (・) は必ず置換となる ※ f がどんな関数であっても Ek( ) は必ず置換となる 11k1 L0 R0 f k2 L1 R1 f L1 R1 k33 f L2 R2 L3 R3
攪拌関数 f
f(J, R):
// |J| = 48, |R| = 32
R ← E(R); R ← R + J
R ∥R ∥・・・∥R ← R
R JR
1∥R
2∥・・・∥R
8← R
for r = 1 to 8 do
R
i← S
i(R
i)
∥ ∥
∥
32ビット入力 48ビット部分鍵 R JR ← R
1∥R
2∥・・・∥R
8R ← P(R)
return R
E 48ビット 48ビット中間データ S1 S2 S3 S4 S5 S6 S7 S8 P 32ビット 32ビット出力 13SBox
Si : {0,1}6 → {0,1}4 ; 一種の換字暗号 (i=1,・・・6) b1b6 b2b3b4b5 i { , } { , } ; 種 換 暗 ( , ) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 00 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 0 2 3 0 6 2 9 3 8 S1 01 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 10 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 11 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 11 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 1. 各Sボックスは4対1関数 2. 各行は0から15を1回ずつとる 入力 ビ トを変えると出力 少なくとも ビ トが変わる 3. 入力の1ビットを変えると出力の少なくとも2ビットが変わる。 ビ ビ R0の1ビットが変化 → R1の2ビットが変化 → R2の4ビットが変化→・・・ “アバランシュ効果”S1 E P [Vaudenay05] Figure2.4 より S2 S3 S4 f(J R) S5 R f(J,R) S6 S7 S8 15
DESの問題点
ぎ
• 鍵長
l = 56 は小さすぎる。
ブ
も
ぎ
• ブロック長
n = 64 も短すぎる。
ボ
実装
向き
•
Sボックスの実装はソフトウェアに不向き
AES
•
E: {0, 1}
128x {0,1}
128→ {0,1}
128•
E
k(m):
// m ∈ {0,1}
128(k
0,・・・,k
10) ← expand(k)
// k
i∈ {0,1}
128←
+ k
s ← m + k
0for r = 1 to 10 do
s ← S(s)
s ← S(s)
s ← shift‐rows(s)
if r ≦ 9 then s ← mix‐cols(s)
s ← s + k
rreturn s
s: 128ビット = 16バイト•
ソフトウェアでも高速処理可能
s0 s4 s8 s12 s1 s5 s9 s13 s2 s6 s10 s14 s3 s7 s11 s15 17GF(2
8
)
バイトは加減乗除が有限体 GF(2
8)
• 集合として
G(2
8) = {0,1}
8•
(a
7a
6a
5a
4a
3a
2a
1a
0) + (b
7b
6b
5b
4b
3b
2b
1b
0)
バイトは加減乗除が できる(a
7,a
6,a
5,a
4,a
3,a
2,a
1,a
0) + (b
7,b
6,b
5,b
4,b
3,b
2,b
1,b
0)
= (a
7+b
7,a
6+b
6,a
5+b
5,a
4+b
4,a
3+b
3,a
2+b
2,a
1+b
1,a
0+b
0) ( + は XOR )
•
(a
7,a
6,a
5,a
4,a
3,a
2,a
1,a
0) ・ (b
7,b
6,b
5,b
4,b
3,b
2,b
1,b
0)
= (c c c c c c c c )
= (c
7,c
6,c
5,c
4,c
3,c
2,c
1,c
0)
ここで
7 6 5 4 3 2c
7x
7+c
6x
6+c
5x
5+c
4x
4+c
3x
3+c
2x
2+c
1x+c
0= (a
7x
7+a
6x
6+a
5x
5+a
4x
4+a
3x
3+a
2x
2+a
1x+a
0) ・ (b
7x
7+b
6x
6+b
5x
5+b
4x
4+b
3x
3+b
2x
2+b
1x+b
0)
mod (x
8=x
4+x
3+x+1)
例えば x7 ・(x2 + 1) = x9 + x7 = x・(x4+x3+x+1) + x7 = x7 + x5 + x4 + x2 + x 例えば (10000000)+(00000101) = (100000101) x + x + x + x + x ∴ (10000000)・(00000101) = (101110110)S
1. 各siの、GF(28)の要素としての、逆数 s i‐1をとる。(ただし、0‐1=0とおく。) 2. 各si‐1 に(ある)アファイン変換を施す。 s0 s4 s8 s12 s0‐1 s4‐1 s8‐1 s12‐1 1 1 1 1 s1 s5 s9 s13 s2 s6 s10 s14 s1‐1 s 5‐1 s9‐1 s13‐1 s2‐1 s 6‐1 s10‐1 s14‐1 逆数 s3 s7 s11 s15 s3‐1 s7‐1 s11‐1 s15‐1 s0’ s 4’ s8’ s12’ アファイン変換 s1’ s 5’ s9’ s13’ s2’ s 6’ s10’ s14’ 19 s3’ s 7’ s11’ s15’shift‐rows と mix‐cols
hift 横方向に転置 s0 s4 s8 s12 s0 s4 s8 s12 shift‐rows : 横方向に転置 0 s1 s5 s9 s13 s2 s6 s10 s14 s5 s9 s13 s1 s10 s14 s2 s6 1 2 s3 s7 s11 s15 s15 s3 s7 s11 3 mix‐cols: 縦方向に(換字しながら)転置 s0 s4 s8 s12 s1 s5 s9 s13 s0’ s4’ s8’ s12’ s1’ s5’ s9’ s13’ 02 03 01 01 01 02 03 01 x s2 s6 s10 s14 s3 s7 s11 s15 s2’ s6’ s10’ s14’ s3’ s7’ s11’ s15’ 01 02 02 03 03 01 01 02 x擬似ランダム置換の安全性定義
E = {Ek}k∈K : 置換族 Ek: {0,1}n → {0,1}n;効率的に計算可能 オラクル System 0 (理想) : [初期化] H ← 真のランダム置換 [u に対して] v ← H(u) [u に対して] v ← H(u) System 1 (現実) : 初期化 u v [初期化] k ← K[u に対して] v ← E k(u) 識別者 定義 Eが安全な擬似ランダム置換(族) ⇔ 0 or 1 ⇔ どのような現実的な識別者Dに対しても | Pr[D=1 | System0] – Pr[D=1 | System1] | が無視できるほど小さい 21 0 or 1 が無視できるほど小さい。DESやAESは疑似ランダム置換か?
DESやAESは疑似ランダム置換か?
•
AESも擬似ランダム置換であると証明されているわけではな
い
い。
• 識別者のクラスを限定すると:
識別者のクラスを限定すると:
–
DESには線形解読が(理論的には)有効。
差
解読
線
解読
能 安全
–
AESは差分解読や線形解読に対して(証明可能)安全。
差分解読
オラクル 識別者 ク を差分識別者 限定 オラクル System 0: H(・) System 1: Ek(・) u 識別者のクラスを差分識別者に限定差分識別者a,b
パラメータ: a,b ∈ {0,1}, { , }n v 以下を(ある回数)繰り返す: u ←$ {0,1}n オラクルに u を尋ねて v1 を得る。 オラクルに u+a を尋ねて v2 を得る。 if v2 = v1 + b よいa,bをみつけることが 暗号解析者の腕の見せどころ output 1 and halt else continue ブロック暗号E = {Ek} が差分解読に対して安全 output 0 ブ ック暗号E {Ek} が差分解読に対して安全 ⇔ どのようなa,bに対する差分識別者a,bに対しても | Pr[差分識別者a b=1 | System0] – 23 | [ a,b | y ] Pr[差分識別者a,b=1 | System1] | が無視できるほど小さい。 0 or 1線形解読
オラクル 識別者 ク を線 識別者 限定 オラクル u 識別者のクラスを線形識別者に限定 System 0: H(・) System 1: Ek(・)線形識別者
a,b,A パラメータ: a,b ∈ {0,1}, { , }n v A ⊆ {0, 1, 2, …} c ← 0 以下を(ある回数)繰り返す: u ←$ {0,1}n オラクルに u を尋ねて v を得る。 よいa,b,Aをみつけることが 暗号解析者の腕の見せどころ if u ・ a = v ・ b c ← c + 1 if A 1 l 0 ブロック暗号E = {E } が線形解読に対して安全if c ∈ A, output 1 else output 0 ブロック暗号E = {Ek} が線形解読に対して安全
⇔ どのようなa,b,Aに対する線形識別者a,b,Aに対しても | Pr[線形識別者 b A=1 | System0] – 0 or 1 | Pr[線形識別者a,b,A 1 | System0] Pr[線形識別者a,b,A=1 | System1] | が無視できるほど小さい。
識別利得 ⇒ 鍵の情報
E = {Ek}k∈{0,1}^l : ラウンド数 rのブロック暗号 E‐ = {E‐ k}k∈{0,1}^l : Eから最終ラウンドを除いたブロック暗号、ラウンド数 r‐1 ある a,bがあって、 E‐に対する識別者 a,bの識別利得が大きいとする。 次のようにして、最終ラウンド鍵krrを求めることができる。 1. Ekの(平文、暗号文)対を集める: (Xi (Yi L Yi R)) (Xi, (Yi,L, Yi,R))2. K ← krのランダムな推測値 Zi Li,L = f(K, Yf(K, Yi Li,L) + Y) Yi Ri,R
Zi,R = Yi,L /* Kが正しければ、 (Xi, Zi)はE‐の(平文、暗号文)対 */
Zii= (Z( i Li,L, Z, i Ri,R)) を Xiiに対する応答として、識別者a ba,b を実行し、 その識別利得K を求める。
3. 識別利得Kの大きな K を kr の推測値として出力。
k XL XR k1 f EE‐‐ k2 L1 R1 f L1 R1 f L2 R2 K YL YR
3 公開鍵暗号
3. 公開鍵暗号
– 計算の非対称性の発見
公開鍵暗号
• 鍵生成アルゴリズムG: (pk sk) ← G(k)
アルゴリズムの3つ組(G,E,D)
• 鍵生成アルゴリズムG: (pk, sk) ← G(k)
• 暗号化アルゴリズムE: c ← E
pk(m)
• 復号アルゴリズムD: m ← D
sk(c)
m ただし m = Dsk(Epk(m))). pk, c から mを求めることは困難(一方向性) pk S m sk p c R c ← Epk(m) m ← Dsk(c) mたとえば・・・
N = pq : 大きな2つの素数の積
pq
e: φ(N)=(p‐1)(q‐1)と互いに素 な整数
( )
(
{
})
y = RSA
e,N(x) = x
emod N (x ∈ {0,1,・・・,N‐1})
は一方向関数と信じられている(RSA仮定)
は
方向関数と信じられている(RSA仮定)。
すなわち、
y,e,N を与えられても y = RSA
e,N(x) となる x は求められない。
d N 整数 を整数Nでわ た余り
29 a mod N: 整数aを整数Nでわった余り。
RSA 関数とRSA仮定
N=0 1 N‐1N
1•
x から
•
N = pq
y = RSAe,N(x) = xe mod N
•
x から
y = x
emod N となるyを
求めるのは容易
•
y から
y = x
emod N となる x を
求めるのは困難
x y求めるのは困難
y (=xe mod N)x から出発して
何周して にな たのか?
何周してy になったのか?
偶数回それとも奇数回?
Nが素数のときは・・・
( )
d
•
Nが素数pのときは、y から y = RSA (x) となる x を求
y = RSA
e,N(x) = x
emod N
Nが素数pのときは、y から y RSA
e,p(x) となる x を求
めるのは容易。
φ(p) = p – 1, d = e
‐1mod (p‐1)
RSA
d p= RSA
e p‐1RSA
d,pRSA
e,p•
N = pq のときもRSA
N pq のときもRSA
d N= RSA
e N‐1( d = e
‐1mod φ(N) )。
d,NRSA
e,N( d e mod φ(N) )。
ところが、
φ(N) = ?
φ(N) ?
が分からない。(p, qを知っていれば分かる。)
が分からない。(p, qを知っていれば分かる。)
31RSA暗号
•鍵生成アルゴリズム G:
多項式時間アルゴリズムの3つ組(G,E,D)
•鍵生成アルゴリズム G:
p, q ← 異なるランダムな素数;
N = p q;
e: φ(N) (p 1)(q 1)と互いに素な整数;
e: φ(N)=(p‐1)(q‐1)と互いに素な整数;
d
← e‐1 mod φ(N)pk = {N,e}, sk = {N,d}
•暗号化アルゴリズム E:
E
pk(m) = m
emod N // = RSA
e,N(m)
p ,•復号アルゴリズム D:
D
sk(c) = c
dmod N // = RSA
d N(c)
sk( )
//
d,N( )
• RSA
d N= RSA
e N‐1[ オイラーの定理 ]
d,N e,N[ オイラ の定理 ]
素数を法としたべき乗数
p: 素数
q: p‐1 を割る素数
q p
g : mod p で位数がqの整数
全て異なる巨大な数の(算法つき)集合
{1, g mod p, g
2mod p, …., g
q‐1mod p}
<p, q, g>
指定
全て異なる巨大な数の(算法つき)集合
(g
qmod p = 1)
43
7
4
例
例
<p=43, q=7, g=4>
g
0mod p = 1, g mod p = 4
g
2mod p = 16, g
3mod p = 21
g
4mod p = 41, g
5mod p = 35
g
6mod p = 11
33<p=43, q=7, g=4>
{1,4,16,21,41,35,11}
CDH仮定
p: 素数
q: p‐1 を割る素数
g : mod p で位数がq
g : mod p で位数がq
<p, q, g>に対して
p, q, g に対して
CDH仮定
a, b ←
${1,2,・・・,q}
どんな効率的なアルゴリズムも、g
amod p と g
bmod p を
与えられて、g
abmod p を求めることはできない。
与えられて、g mod p を求める とはできない。
• <p=43, q=7, g=4>
g
3mod p 21 g
5mod p 35
?
?
g
15mod p 4
DDH仮定
<p, q, g>に対して
b
${
}
DDH仮定
a, b, c ←
${1,2,・・・,q}
どんな効率的なアルゴリズムも、g
amod p と g
bmod p を
与えられても、g
abmod p と g
cmod p を区別できない。
すなわち
g
amod p と g
bmod p を教わっても g
abmod p はまったく分からない。
(情けない話ではある)
すなわち、
(情けな 話ではある)
• <p=43, q=7, g=4>
35<p 43, q 7, g 4>
(21, 35, 4) OR (21, 35, 11) どちらが正しい?
エルガマル暗号
•鍵生成アルゴリズム G:
多項式時間アルゴリズムの3つ組(G,E,D)
•鍵生成アルゴリズム G:
p, q, g ← 素数p,qと整数g、ただし q | p‐1, g
q= 1 mod p
x ←
${1, ・・・,q‐1}, y
← gx mod ppk {p g q y} sk {p g q x}
pk = {p,g,q,y}, sk = {p,g,q,x}
•暗号化アルゴリズム E
pk(m):
${
}
r ←
${1, ・・・,q‐1}
c = (g
rmod p, m y
rmod p)
•復号アルゴリズム D
sk(c
1,c
2):
c
2/ c
1xmod p
• DDH仮定のもとでIND‐CPA安全エルガマル暗号のからくり
(
r r)
y
r
= g
xr
y = g
xc = (g
r, m y
r)
y
g
E Decr
Encr
g
x
g
r
x
CDH仮定g
r
g
x
37RSA暗号に対する攻撃
“賛成” pk={n,e} m ∈ {“賛成”,“反対”} S sk={n,d} R R c = “賛成”e mod n c “賛成” ← cd mod n pk={n e} A pk={n,e} “賛成” c1 = “賛成”e mod n c2 = “反対”e mod n c = c ならば“賛成” RSA暗号はな 賛成 c = c1 ならば 賛成 else “反対” IND‐CPAでない。 “賛成” 38識別不可能性 (IND‐CPA)
(G, E, D): 公開鍵暗号 オラクル System 0 : [初期化] (pk,sk) ← G [(m0,m1) に対して] c* ← Epk(m0) [(m0,m1) に対して] c ← Epk(m0) System 1 : 初期化 [初期化] (pk,sk) ← G [(m0,m1) に対して] c* ← Epk(m1) pk m0,m1 c* 識別者 定義 EがIND‐CPA安全 0 or 1 が C 安全 ⇔ どのような現実的な識別者Dに対しても | Pr[D=1 | System0] – Pr[D=1 | System1] | 39 0 or 1 | [ | y ] [ | y ] | が無視できるほど小さい。エルガマル暗号に対する攻撃
m=10 pk={p,g,q,y} m ∈ {(ある商品に対する)注文個数} S sk={p,g,q,x} ( ) R c = (gr, 10yr) c=(c1,c2) pk={p g q y} 1000 ← c2 /c1 x mod n A pk={p,g,q,y} 「本当に1000個も注文するの?」 c2’ = c2 x 100 「本当に1000個も注文するの?」 c’=(c1,c2’) エルガマル暗号は m = 1000/100 = 10 エルガマル暗号は IND‐CCAでない。 (DDH仮定のもとでIND‐CPA)40識別不可能性 (IND‐CCA)
(G, E, D): 公開鍵暗号 オラクル System 0 : [初期化] (pk,sk) ← G [(m0,m1) に対して] c* ← Epk(m0) に対して [c に対して] m ← Dsk(c) (c ≠ c*) System 1 : [初期化] (pk sk) ← G pk m0, m1 c* c m c m [初期化] (pk,sk) ← G [(m0,m1) に対して] c* ← Epk(m1) [c に対して] m ← Dsk(c) (c ≠ c*) 識別者 定義 EがIND‐CCA安全 (*) (*) 識別者 0 or 1 が CC 安全 ⇔ どのような現実的な識別者Dに対しても | Pr[D=1 | System0] – Pr[D=1 | System1] | 41 0 or 1 | [ | y ] [ | y ] | が無視できるほど小さい。ハッシュ関数
効率的な(圧縮)関数
H: {0 1}* → {0 1}
hH: {0,1}* → {0,1}
hHが衝突困難:
Hが衝突困難:
どのような現実的なアルゴリズムも
H(x)=H(y)となるx, y (x≠y) を見つけることはできない。
ランダムオラクルモデル:
プログラム中のすべてのz ← H(x) を
ダムオ ク
問 合わせに置き換える
ランダムオラクルへの問い合わせに置き換える。
H ←$ { H: {0 1}* → {0 1}h } プログラム ... z ← H(x) H ← { H: {0,1} → {0,1} } z = H(x) x プログラム ... z ( )OAEP+
f : {0,1}k → {0,1}k : 置換, g = f ‐1 k0+k1<k, 2‐k0,2‐k1: negligible, n = k‐k 0‐k1 G : {0 1}k0 → {0 1}n H’ : {0 1}n+k0 → {0 1}k1 H : {0 1} n+k1 → {0 1}k0 G : {0,1}k0 → {0,1}n, H : {0,1}n k0 → {0,1}k1, H : {0,1} n k1 → {0,1}k0 x ∈ {0 1}n y g EE x ∈ {0,1} f w = g(y) Dec Dec r ←$ {0,1}k0 s = (G(r) + x) ∥ H’(r ∥ x) H( ) Enc Enc s ∥ t = w r = H(s) + t t = H(s) + r w = s ∥ t y = f(w) x = G(r) + s[0..(n‐1)] c = s[n..(n+k1‐1)] ∥ ? c = H’(r ∥ x): x else j t ? reject f がone‐wayならばOAEP+(f)はランダムオラクルモデルのもとでIND‐CCA 43OAEP+の暗号文
x r x r 暗号文の正当性をチェックするための 冗長な情報 x + G(r)( ) H’(r∥x)( ∥ ) H(s) + r( ) s f r やsを知らずに な を y 正当な暗号文を 作ることはできない。FO変換
π = (K, E, D),
H = {H
n}
nπ’ = (K’, E’, D’) = FO
H(π):
K’(1
k) :
(pk, sk) ← K(1
k), H ←
$H
kpk’ = (pk, H), sk’ = sk
p
(p , ),
E’(pk’,m):
r ←
$R
ランダムオラクルモデルのもとで π: IND‐CPA ∧ γ‐uniformr ← R
m
~= m∥r
c = E
pk(m
~; H(m
~))
∧ γ ⇒ π’ : IND‐CCAD’(sk’,c):
m
~= D
sk(c)
∥
~γ(x,y) =def Pr[ γ←$ R : y = E
pk(x;r)]
m∥r = m
~c =
?E
pk(m
~; H(m
~)) :
m
π is γ‐uniform if ∀x,y, γ(x,y) ≦ γelse
⊥
454 IDベ ス暗号
4. IDベース暗号
IDベース暗号
• (params, master‐key) ← Setup(k)
E = (Setup, Extract, Enc, Dec)
(params master key) ← Setup(k)
鍵配布センター
• d
ID← Extract
params(master‐key, ID)
• c← Enc
params(ID, m)
• m ← Dec
params(d
ID, c)
(params, master‐key) ← Setup(k) ID
dID← Extractparams(master‐key, ID)
params
(
ID, )
params ID m ID params 送信者 params dID params 送信者 受信者 (ID) c ← Encparams(ID, m)c
m ← Decparams(dID, c)
識別不可能性 (IND‐ID‐CPA)
S 0
(Setup, Extract, Enc, Dec): IDベース暗号
System 0 :
[初期化] (params,master‐key) ← Setup [(m0,m1, ID*):] c* ← Encparams(ID*, m0)
[ID ] d ← E t t ( t k ID) (ID ≠ ID*)
オラクル
[ID:] d ← Extractparams(master‐key, ID) (ID ≠ ID*) System 1 : [初期化] ( t k ) ← S t params m0, m1, ID*c* ID d ID d [初期化] (params,master‐key) ← Setup [(m0,m1, ID*):] c* ← Encparams(ID*, m1)
[ID:] d ← Extractparams(master‐key, ID) (ID ≠ ID*)
識別者 定義 EがIND‐ID‐CPA安全 (*) (*) 識別者 0 or 1 が C 安全 ⇔ どのような現実的な識別者Dに対しても | Pr[D=1 | System0] – Pr[D=1 | System1] | 0 or 1 | [ | y ] [ | y ] | が無視できるほど小さい。
Bilinear maps
G
1, G
2: 素数位数q の群
e : G
1x G
1→ G
2が bilinear map とは
1 (Bilinear) e(aP bQ) = e(P Q)
ab(∀P Q∈G ∀a b∈ Z)
1. (Bilinear) e(aP, bQ) = e(P,Q)
(∀P,Q∈G
1, ∀a,b∈ Z)
2. (非退化) e(P,P) ≠ 1 (∀P(≠0)∈G
1)
3. (計算可能) e(P,Q)は効率的に計算可能。(∀P,Q∈G)
楕円曲線上の Weil paring を用いて実現。
楕円曲線上の Weil paring を用いて実現。
49BF暗号
[BF01]
bili
版のエルガマル暗号
BF = (Setup, Extract, Encrypt, Decrypt):
bilinear map版のエルガマル暗号
Encrypt(params, ID, m): QID = H1(ID)Setup(k):
<q, G
1, G
2, e> ←
G(k)
Q ID H1(ID) r ←$ Z q* gID= e(QID, Ppub) c = < rP, m + H2(gIDr)>q,
1,
2,
G( )
P ←
$G
1, s ←
$Z
q*, P
pub= s P
Choose
H
1: {0 1}* → G
1*
c rP, m H2(gID ) Decrypt(params, c=<U,V>, dID): m = V + H2(e(dID, U))H
1: {0,1} → G
1H
2: G
2→ {0,1}
nparams = <q,G
1,G
2,e,n,P,P
pub,H
1,H
2>
master key = s
2( ( ID ))master‐key = s
Extract(ID, params, s):
Q
H (ID) (
G *)
Q
ID= H
1(ID) (∈G
1*)
d
ID= s Q
ID ランダムオラクルモデルにおいて BF暗号はGに対するBDH仮定のもとでG IND‐ID‐CPA安全。BDH仮定
G1, G2: 素数位数q e : G1 x G1 → G2; bilinear map P ∈ G1* P ∈ G1<e, q, P>に対して
, q,
に対して
BDH仮定
a, b, c ←
${1,2,・・・,q}
どんな効率的なアルゴリズムも、aP, bP, cPを
与えられて、e(P,P)
abcを求めることはできない。
与えられて、e(P,P)
を求める とはできない。
51BF暗号のからくり
c = < U, m + H
2(g
IDr)>
g
ID
r
= e(P,P)
ksr
P
pub= sP
U = rP
c
U,
2(g
ID)
g
ID
e( , )
E DecU = rP
Q
ID= kP
k P ( d )
Encr
kP
ksP (=d
ID
)
rP
BDH仮定sP
rP
kP
自由度 ザsP
自由度k ↔ ユーザID今後の暗号について
• ランダムオラクルモデルからの脱却
b l
の意味
•
bilinear map の意味
• 各種多機能暗号
• 各種多機能暗号
– 閾値復号、放送暗号、属性ベース暗号など
– 暗号プロトコルの構成部品としての機能
• より高度または繊細な安全性
フ ワ ドセキ リテ
アダプテ ブセキ リテ
– フォワードセキュリティ、アダプティブセキュリティ
– 量子計算機への対応
53記号
• {0,1}
n: nビットの文字列全体
{0,1}* : 全ての有限長の文字列全体
• k ←
${0,1}
n: nビットの文字列kをランダムに選択
• z = x + y : z は x と y との桁ごとの排他的論理和
0 + 0 = 1 + 1 = 0, 0 + 1 = 1 + 0 = 1
0 0 1 1 0, 0 1 1 0 1
• y ← A(x) : 入力xでアルゴリズムAを実行し、出力y を得た。
• Pr[E] : Eがおきる確率
Pr[E | C] : 条件Cのもとで Eがおきる確率
Pr[E | C] : 条件Cのもとで、Eがおきる確率
•
a mod N: 整数aを整数Nでわった余り。
a mod N: 整数aを整数Nでわった余り。
参考文献
A t S l “P bli K C t h ” S d Editi S i 1996 主なもの
• Arto Salomma, “Public‐Key Cryptography”, Second Edition, Springer, 1996 • [Vaudenay05] Serge Vaudenay, “A Classical Introduction to Cryptography: Applications for Communications Security” Springer 2005
Applications for Communications Security , Springer, 2005
• J Katz Y Lindell "Introduction to Modern Cryptography: • J. Katz, Y. Lindell, Introduction to Modern Cryptography:
Principles And Protocols", Chapman & Hall/Crc, 2007.
• [BF01] D Boneh M Franklin “Identity‐Based Encryption from the Weil Pairing”[BF01] D.Boneh, M.Franklin, Identity Based Encryption from the Weil Pairing , CRYPTO 01, LNCS 2139, pp. 213‐229.