新しい暗号技術

2013/11 セキュリティ(プレ)ミニキャンプ

光成滋生
自己紹介
 大学時代
 京都大学数理解析研究所では代数幾何
コンピュータとは縁のない世界

 暗号にも興味を持つ
 mp3エンコーダ「午後のこ~だ」の開発(LGPL2)

 就職後
 IPAからの依頼で暗号解読プログラムの作成(2004年)
 『機械学習の学習』(CCA-BY3)
2012年ジュンク堂のコンピュータ書籍売り上げ3位
 http://compbook.g.hatena.ne.jp/compbook/20130110

 暗号の高速な実装(2013/8の時点で世界最速)
The Realm of the Pairings(SAC2013)
 http://sac2013.irmacs.sfu.ca/sched.html
2013/11

2 /58
目次
 暗号
 mod pの世界
 巾乗の計算
 離散対数問題
 ElGamal暗号
 Diffie-Hellman鍵共有

 楕円曲線
 楕円曲線上のDLP

 新しい暗号
 ペアリング
IDベース暗号
短い署名

 秘密の検索
2013/11

3 /58
暗号(化)とは
 私とあなたとのやりとりを他人が見ても、
その内容を知られないようにするやり方
 ここでは特に
文をある方法に従って元がわからないものに置き換える方法

2013/11

4 /58
古代の方法
 アルファベットを一文字後にずらす
 Hello => Ifmmp
 一文字前にずらす : IBM => HAL
"n文字ずらす"のnが秘密鍵
これは容易に破られてしまう

 変換テーブルを作る
a

b

c

d

e

f

...

X

k

g

3

5

4

...

 1対1である必要がある
 これも統計情報を使うと容易に破られる
たとえば英語なら
 一番多いアルファベットはe。qの後は大抵uなど
2013/11

5 /58
共通鍵暗号
 秘密鍵暗号とも言われる
 暗号化に必要な鍵と復号に必要な鍵が同じ暗号

 暗号化されたあとの情報をできるだけランダムにする
 AES, MISTY(三菱), Camellia(NTT)など

 暗号強度
 秘密鍵の長さが128bit
鍵の種類が 2128 = 3.4 ∗ 1038個
1秒間に1京(=1016 )回チェックしても全部調べるのに1000兆年

 全数探索しなくてもよい方法が日々研究されている
弱点が見つかると「弱くなった」「破られた」と言われる
2013/11

6 /58
ネットショッピングで使うには
 安全な共通鍵暗号があったとする
 買い物で使うクレジット番号は暗号化して送りたい
 AESで暗号化したとしてその秘密鍵はどうやって送ろうか
その秘密鍵をもう一度暗号化? その暗号化に必要な鍵は???

 二人の間で安全に秘密の数値を共有する必要がある
 どうやって?

2013/11

7 /58
時計の世界
 アナログ時計の時刻は12時間たつと元に戻る
 今10時。1時間後は11時。3時間後は1時。
 12で割った余りだけを考える(時計は1~12の数値だが)

 整数𝑎を整数𝑝で割った余りを𝑎 mod 𝑝と書く。
 𝑎 = 𝑞𝑝 + 𝑟, (0 ≤ 𝑟 < 𝑛) となるように調節する

例
 (10 + 1) mod 12 = 11
 (10 + 3) mod 12 = 1
 -19 mod 12 = 5
-19 = (-2) * 12 + 5
2013/11

8 /58
余りの世界
 足し算と引き算
 (a mod p) ± (b mod p) = (a ± b) mod p
 余りを足したものは足したものの余り

 掛け算も同様
 余りを掛けたものは掛けたものの余り

 巾乗も大きくなる前に余りをとることができる
例
210 = 1024 = 10(mod 13)
29 = 5だから210 = 5 ∗ 2 = 10(mod 13)
𝑎

2

3

4

5

6

7

8

9

10

11

12

2 𝑎 mod 13
2013/11

1

2

4

8

3

6

12

11

9

5

10

7

1
9 /58
Diffie-Hellman鍵共有(1976年)
 AさんとBさんの間で秘密の数字を共有したい
 𝑔と𝑛を二人の間で決める(公開情報)
 Aさんは数字𝑎を決めてK 𝐴 = 𝑔 𝑎 mod 𝑝 を求めて公開
𝑎は非公開(秘密鍵)

 Bさんは数字𝑏を決めてK 𝐵 = 𝑔 𝑏 mod 𝑝を求めて公開
𝑏は非公開(秘密鍵)
𝑎

 Aさんは𝑎と𝐾 𝐵 を使って(K 𝐵 ) =
 Bさんは𝑏と𝐾 𝐴 から(K 𝐴 ) 𝑏 = 𝑔 𝑎

𝑎
𝐾𝐴
2013/11

𝑔
𝑏

𝑏

𝑎

= 𝑔 𝑎𝑏 を求める

= 𝑔 𝑎𝑏 を求める

𝑏
𝐾𝐵

非公開
公開
10 /58
これで秘密に共有できるのか
 𝑎が秘密でK 𝐴 = 𝑔 𝑎 mod 𝑝が公開
 K 𝐴 から𝑎が求められるのではないか?
 数学的にはもちろんyes

 𝑔 𝑎 mod 𝑝が与えられたときに𝑎を具体的に求めよ
 離散対数問題(DLP:Discrete Logarithm Problem)という

 𝑝が十分大きい素数のときDLPは難しい
 と信じられている
今のところ解いたという人はいない

 10進数300桁以上のとき計算機で現実時間内に求められない
 大きくてもDLPが易しい𝑝は存在するのでそれは除外する
2013/11

11 /58
Diffie-Hellman問題
 素朴な疑問
 𝑔, 𝑔 𝑎 , 𝑔 𝑏 が与えられたときに𝑎, 𝑏を求められなくても𝑔 𝑎𝑏 が求め
られたりしないのか
Diffie-Hellman(DH)問題と言われる

 この問題もDLPと同じぐらい難しいと思われている
DLPが解ければDH問題も解けるが、逆が真かは未解決

 なので、今のところDiffie-Hellman鍵共有は安全

2013/11

12 /58
DH鍵共有の注意点
 秘密に鍵共有はできるが途中経路での改竄には弱い
 A, Bが本人であるかの認証機構が別途必要

A
𝐾𝐴

B
𝐾𝐴

𝐾𝐵

𝐾𝐵
正常時

A
𝑎
𝐾𝐴
𝑔𝑑

B
𝑏

悪者

𝐾 𝐴 でなく𝑔 𝑐 を渡す
𝐾 𝐵 でなく𝑔 𝑑 を渡す

Aの秘密鍵=𝑔 𝑑𝑎

𝑔𝑐
𝐾𝐵

Bの秘密鍵=𝑔 𝑏𝑐

𝑔 𝑑𝑎 で暗号化されたものを復号
して𝑔 𝑏𝑐 で再暗号化して渡す
2013/11

13 /58
巾乗の計算
 𝑝が10進数300桁ってたとえば
179769313486231590772930519078902473361797697
894230657273430081157732675805500963132708477
322407536021120113879871393357658789768814416
622492847430639474124377767893424865485276302
219601246094119453082952085005768838150682342
462881473913110540827237163350510684586298239
947245938479716304835356329624224137859

 素朴な疑問
 2 𝑎 mod 𝑝 (aが10進数300桁)とかって計算できるの?
1回の掛け算を1nsec(=10−9 秒)でできたとしても2をa回かけるの
は
10−9 ∗ 10300 = 3 ∗ 10283 年!
2013/11

14 /58
うまい方法がある
 2100 mod 1000000はいくつ?
 2100 = ( 225 2 )2
 225 = 2 ∗ 224 = 2 ∗ 23

8

= 2 ∗ (( 23 2 )2 )2

23 = 8
 23 2 = 64
( 23 2 )2 = 4096
(( 23 2 )2 )2 =777216
225 = 554432
250 = 842624
2100 = 205376

 9回の掛け算で計算できた

2013/11

15 /58
バイナリメソッド
 gの2乗を繰り返したものを作る
 𝑔, 𝑔2 , 𝑔4 , 𝑔8 , 𝑔16 , …
 これは1024回すればよい
繰り返しの数(𝑛)
𝑔2

𝑛

0

2

3

4

...

1024

𝑔

𝑔2

𝑔4

𝑔8

...

𝑔2

1024

 aを2進数展開してビットが立ってところを掛けていく
i番目のビット

1

2

3

4

...

1024

a=0b1...1011

∗ 𝑔

∗ 𝑔2

スキップ

∗ 𝑔8

...

𝑔2

1024

 計算回数
 高々(log 2 𝑎) ∗ 2 回の掛け算で𝑔 𝑎 を計算できる
十分高速に計算可能
2013/11

16 /58
公開鍵暗号
 共通鍵暗号は秘密鍵をどうやって渡すかが悩ましい
 暗号化する鍵と復号する鍵を分けたらよいのでは?

 公開鍵暗号
 みなに教える公開鍵𝐾 𝑝𝑢𝑏 と誰にも教えない秘密鍵𝐾 𝑝𝑟𝑣 を使う
𝐾 𝑝𝑢𝑏 から𝐾 𝑝𝑟𝑣 を作れない

 暗号化するときは𝐾 𝑝𝑢𝑏 を使う
𝑐 = 𝐸𝑛𝑐(𝑚, 𝐾 𝑝𝑢𝑏 )

 復号するときは𝐾 𝑝𝑟𝑣 を使う
𝑚 = 𝐷𝑒𝑐(𝑐, 𝐾 𝑝𝑟𝑣 )

 𝐾 𝑝𝑢𝑏 を知ってる人は誰でも暗号化できる
 復号は𝐾 𝑝𝑟𝑣 を知ってる人しかできない
2013/11

17 /58
余りの世界再び
 割り算はどうする
 足し算、引き算、掛け算はよかった
2 * 7 = 14 = 1(mod 13)
2に7を掛けたら1になった。ということは7は2の逆数?

 1/2 = 7(mod 13)と定義しよう
x

1

2

3

4

5

6

7

8

9

10

11

12

𝑥 −1

1

7

9

10

8

11

2

5

3

4

6

12

 逆数がないときもある
p = 12のとき 2 * 6 = 0 mod 12
 二つの数を掛けたら0になってしまった

 pが素数なら0以外の数には必ず逆数がある
 この世界を以後有限体𝐹 𝑝 と呼ぶ

2013/11

18 /58
ElGamal暗号(1984年)
 gとpを固定し皆に公開する
 xをランダムに選び𝑦 = 𝑔 𝑥 mod 𝑝とする
 xが秘密鍵でyが公開鍵

 mの暗号化
 𝑟を乱数として𝐸𝑛𝑐 𝑚 = 𝑐1 , 𝑐2 = (𝑔 𝑟 , 𝑚 𝑦 𝑟 )

 復号
x
 𝐷𝑒𝑐 𝑐1 , 𝑐2 = 𝑐2 /𝑐1 = 𝑚𝑦 𝑟 /𝑔 𝑟𝑥 = 𝑚
 𝑟が入っているので同じ𝑚を暗号化しても毎回異なる値になる

前回と同じものを暗号化したのかもわからない

 これはDLPが難しいという仮定の元で安全
 巾乗は簡単にできるけど逆が難しいという一方向性を使う
2013/11

19 /58
ElGamal暗号の弱点
 復号はできないけれども値の変更は可能
 中間者は𝐸𝑛𝑐 𝑚 = 𝑐1 , 𝑐2 を取得し 𝑐1 , 2𝑐2 を渡す
 受信者が復号するとDec 𝑐1 , 2𝑐2 = 2𝑚となる
 もし𝑚が商品の値段だったら2倍になってしまう!

𝐸𝑛𝑐(1000)

悪者
復号はできないが
′ ′
𝑐1 , 𝑐2 = (𝑐1 , 10𝑐2 )にする

′ ′
𝐷𝑒𝑐 𝑐1 , 𝑐2
= 10000

 改竄されていないかのチェック機構が必要
 Cramer-Shoup暗号(1998年)
ElGamal暗号にハッシュ関数を組み合わせたもの
2013/11

20 /58
2次元の世界へ
 𝐹 𝑝 の世界は1次元的
 p進むと元に戻るのは円周上を
うろうろしていることに相当

−𝑝

0

𝑝

2𝑝

𝑝=0

 2次元にすると球面?
 実はうまくいかない
2次元球面にはきれいな足し算の構造を入れられない

2013/11

21 /58
ドラクエ3の世界(1/3)
 ぱっと見は普通の世界地図だが
 右へ進むと左から出てくる
 上に進むと下から出てくる

 これはどんな形をしている?

2013/11

22 /58
ドラクエ3の世界(2/3)
 ぱっと見は普通の世界地図だが
 右へ進むと左から出てくる
 上に進むと下から出てくる

 上辺と下辺をくっつける

2013/11

23 /58
ドラクエ3の世界(3/3)
 ぱっと見は普通の世界地図だが
 右へ進むと左から出てくる
 上に進むと下から出てくる

 上辺と下辺をくっつける

 左辺と右辺をくっつける
 浮輪の形になる
 球面ではない!(地球と違う世界)
この世界には足し算の構造が入る
2013/11

24 /58
トーラス(浮輪の表面)
 地図の上の足し算
𝑃 + 𝑄を
周りこませる

𝑒2

𝑃+ 𝑄

𝑄

𝑃+ 𝑄
地図からはみ出た

𝑃

𝑒1
 トーラス𝐸上の点𝑃は𝑃 = 𝑎𝑒1 + 𝑏𝑒2 とかける
 (𝑒1 , 𝑒2 )は基底ベクトル, 𝑎, 𝑏は整数
 𝑎, 𝑏はそれぞれ有限体の世界で考える
 二つの点𝑃, 𝑄の和𝑃 + 𝑄は矢印をつないだもの(ベクトルの和)
ただし端まで行ったら反対から出てくる
浮輪の上をぐるぐる回る
2013/11

25 /58
足し算ができるなら
 ある点𝑃の𝑛倍も考えられる
 𝑛𝑃 = 𝑃 + 𝑃 + … + 𝑃(𝑛回足す)
 𝑛倍の計算は𝐹 𝑝 の巾乗の計算と同様に効率よく求められる
 𝑛𝑃と𝑃が与えらえたときに𝑛は求められるのだろうか
 No!
正確には𝑛が大きいととても難しい
例外的に簡単に求められる楕円曲線の形もある

2013/11

26 /58
楕円曲線暗号(1985年)
 楕円曲線(トーラス)上で組み立てられた暗号
 複素数上の曲線なので実2次元

 楕円離散対数問題(ECDLP:Elliptic Curve)
𝑃と𝑛𝑃が与えられたとき𝑛を求める問題
 大きな素数上の楕円曲線についてECDLPは難しい
 有限体と楕円曲線の対比
 掛け算が足し算に変わった以外は形が似てる
有限体
離散対数問題
DH問題
2013/11

𝑔と𝑔 𝑎 から𝑎
𝑔と𝑔 𝑎 と𝑔 𝑏 から𝑔 𝑎𝑏

楕円曲線

𝑃と𝑎𝑃から𝑎
𝑃と𝑎𝑃と𝑏𝑃から𝑎𝑏𝑃
27 /58
楕円ElGamal暗号
 有限体上のElGamal暗号を楕円曲線上に焼き直す
 𝐸と𝑃を固定し皆に公開する
 𝑥をランダムに選び𝑄 = 𝑥𝑃とする
 𝑥が秘密鍵で𝑄が公開鍵

 𝑚の暗号化
 𝑚を𝐸の点に写す
 𝑟を乱数として𝐸𝑛𝑐 𝑚 = 𝑐1 , 𝑐2 = (𝑟𝑃, 𝑚 + 𝑟𝑄)

 復号
 𝐷𝑒𝑐 𝑐1 , 𝑐2 = 𝑐2 − 𝑥𝑐1 = 𝑚 + 𝑟𝑄 − 𝑟𝑥𝑃 = 𝑚

 これはECDLPが難しいという仮定の元で安全
2013/11

28 /58
楕円曲線暗号のメリット
 安全性の比較
 1024bitの有限体上の暗号≒160bitの楕円曲線暗号
 同じぐらいの安全性を持つ有限体上の暗号に対して
小さい鍵サイズでよい
(注意)演算対象が違うので単純に6分の1ではない

 ICカードなどの中の小さいコンピュータでも計算しやすい

2013/11

29 /58
加法群
 "足し算"と引き算と単位元が定義されたものの集まり
 整数の集合を抽象化したもの
 足し算があると、整数倍を定義できる
 楕円曲線では演算は点の足し算、単位元は原点
 有限体では演算は数値の掛け算を"足し算"と思う
単位元は1

 他の加法群を使って暗号を作ることも可能
 超楕円曲線
 アーベル多様体 etc
それがうれしい(解きにくい・計算しやすい)かは別の問題

2013/11

30 /58
公開鍵基盤(PKI)と認証局
 Aさんの公開鍵は本当にAさんのものか
 普段メールやwebなどでいつもやりとりするときに公開鍵を
添付していればだいたい安心
いろんな経路を全て乗っ取り改竄されるとはあまり想像できない

 赤の他人(やショップ)と初めてやりとりするときはわからない

 公開鍵証明書
 Aさんの公開鍵がAさんのものであることを証明するもの

 認証局
 証明書の発行、登録、破棄などの管理する機構
VeriSign, Symantec

 公開鍵基盤
 認証局やその他の方法によって証明書を扱う枠組み
ブラウザには最初からいくつかの証明書が入っている
2013/11

31 /58
公開鍵、PKIへの攻撃
 認証局(Comodo, DigiNotar)への攻撃(2011年)
 偽の証明書を発行してしまう
DIgiNotarは破綻

 本物と区別つかないので盗聴など可能になってしまう
ブラウザ側で特別な対応

 弱い公開鍵
 失効できない弱い(512bit RSA)鍵を発行
1999年に512bit RSAが解読されている

 Microsoft Updateへのなりすまし(2012年)
 Flameというマルウェア
2004, 2007年に攻撃されたMD5の脆弱性を利用?

2013/11

32 /58
ここまでのまとめ
 有限体上の巾乗は易しいが、
何乗したらその値になるかを求めるのは難しい
 この非対称性を用いて公開鍵暗号を作ることができる

 同じ形をしているなら別に有限体じゃなくてもいい
 楕円曲線を使うと楕円離散対数問題、楕円曲線暗号を作れる
 鍵のサイズが小さいのでうれしい

 公開鍵暗号はその公開鍵が本人のものであることを
別の手段で示す必要がある
 公開鍵基盤

2013/11

33 /58
新しい暗号
 2000年以降に登場したいくつかの暗号を紹介
 沢山あるのでほんの一部

2013/11

34 /58
ペアリング(1/2)
 𝐸上の二つの点に対して対応する"面積"を与える関数
 𝑃 = 𝑎𝑒1 + 𝑏𝑒2 , 𝑄 = 𝑐𝑒1 + 𝑑𝑒2 に対し
𝑒 𝑃, 𝑄 = 𝑔 𝑎𝑑−𝑏𝑐
𝑄 = (𝑐, 𝑑)

𝑒2

𝑒1

この平行四辺形の面積
(符号つき)

𝑃 = (𝑎, 𝑏)

ここで𝑔 = 𝑒(𝑒1 , 𝑒2 )は有限体上のある特別な値

 双線形性(面積はそれぞれの辺の長さに比例する)
 𝑒 𝑃1 + 𝑃2 , 𝑄 = 𝑒 𝑃1 , 𝑄 𝑒 𝑃2 , 𝑄
 𝑒 𝑃, 𝑄1 + 𝑄2 = 𝑒 𝑃, 𝑄1 𝑒 𝑃, 𝑄2
2013/11

35 /58
ペアリング(2/2)
 何を手に入れたのか

𝑒 𝑎𝑃, 𝑏𝑄 = 𝑔 𝑎𝑏
 𝑎𝑃や𝑏𝑄は楕円曲線上の点なのでDH問題の困難さから
𝑎𝑏𝑃や𝑎𝑏𝑄みたいなものは求められない
 しかしペアリングにより有限体上でならそれと似た働
きをする𝑔 𝑎𝑏 を計算できている!
 一度だけならDH問題を解ける手段を手に入れた

 ペアリングを双線形写像ともいう
2013/11

36 /58
IDベース暗号
 "公開鍵"を自分の好きなIDに選べる暗号
 たとえば自分のメールアドレスを使う
公開鍵暗号は公開鍵と本人のマッチングが必要だった
メールアドレスは改竄されるとそもそも届かない

 代わりに鍵生成センターがいる
公開鍵暗号の代替になるわけではない

 概念自体は昔(1980年代)からあった
 しかしどうやって実現するのか悩ましい
 多項式を使って作ったものは破られやすい

2013/11

37 /58
ペアリングによるIDベース暗号
 鍵共有方法(1999年~)
 鍵生成
 各ユーザに対してメールアドレスを数値化する
ASCIIコードなどを使って適切に約束を決める

 生成局はアドレスから楕円曲線上の点へのハッシュ関数と整
数𝑠を一つ決める
 ID 𝑢に対して𝐾 𝑢 = 𝑠𝐻 𝑢 を計算しユーザに渡す(秘密鍵)

 AとBの秘密の通信
 AはBのメールアドレス𝑢 𝐵 と自身の𝐾 𝐴 を使って
𝑠 𝐴 = 𝑒 𝐾 𝐴 , 𝐻 𝑢 𝐵 を計算する。
 BはAのメールアドレス𝑢 𝐴 と自身の𝐾 𝐵 を使って
𝑠 𝐵 = 𝑒 𝐻 𝑢 𝐴 , 𝐾 𝐵 を計算する。
 𝑠𝐴 = 𝑒 𝐻 𝑢𝐴 , 𝐻 𝑢 𝐵
2013/11

𝑠

= 𝑠 𝐵 なので秘密の鍵を共有できる
38 /58
公開鍵暗号との違い
 その人のメールアドレスを使って暗号化
 本人に間違いがない(はず)

 鍵生成局に強い権限
 生成局はなんでも見えてしまう(全部盗聴できる)
 生成局を分散化する手法

 暗号化されたファイルを受信してから秘密鍵をもらう
ことができる
 受け取った人が、自身の秘密鍵をもっていなかったら鍵生成
局に聞いてもらえばよい(本人認証は別途必要)

 注意
 公開鍵暗号の代わりとなるものではない
2013/11

39 /58
IDベース暗号の応用
 タイムリリース暗号
 指定した時刻に復号できるようにする暗号
 その時刻よりは前に復号できない
 時報局による(署名つき)時報で復号

受信者

発信者

正しい時刻を
知らせる

情報

時刻を決め
て暗号化

時報局

指定時刻以前
は読めない

情報

時間が来た
ら読める
2013/11

40 /58
タイムリリース暗号
 IDベース暗号でIDとして時刻を使う
 時刻に対する秘密鍵
時刻の署名に使える
 時報局がその時刻の署名として秘密鍵を公開

 特長
 暗号化したい人は鍵管理から開放される

 応用例
 会社のIR情報の提供
今日の3時になると読めるようになる
証券会社などへの事前提供による情報漏れの低減
2013/11

41 /58
電子署名
 ある文章を私が書いたものであることを保証する
 ペアリングを使うとHash関数なしの短い署名を構成できる

 鍵生成
 点𝑃, 𝑄と乱数𝑥, 𝑦を決めて𝑅 = 𝑥𝑄, 𝑆 = 𝑦𝑄, 𝑔 = 𝑒(𝑃, 𝑄)とする
 𝑄, 𝑅, 𝑆, 𝑔 が公開鍵 𝑃, 𝑥, 𝑦 が秘密鍵

 文章𝑚に対する署名
 𝑟をランダムに選び𝑠 =

1
𝑥+𝑚+𝑦𝑟

𝑃として 𝑠, 𝑟 を署名とする

 検証
 𝑠, 𝑟 に対して
𝑒 𝑠, 𝑅 + 𝑚𝑄 + 𝑟𝑆 = 𝑒 𝑠, 𝑥 + 𝑚 + 𝑦𝑟 𝑄 = 𝑔を確認する
2013/11

42 /58
クイズ
 どれが一番難しい?
 (A) 𝑃, 𝑎𝑃, 𝑏𝑃から𝑎𝑏𝑃
 (B) 𝑃, 𝑎𝑃から𝑎2 𝑃
 (C) 𝑃, 𝑎𝑃から 1 𝑎 𝑃

2013/11

43 /58
比較してみる
 (A)ができるなら(B)は解ける
 ∵𝑃, 𝑎𝑃が与えらえたとする。𝑃, 𝑎𝑃, 𝑎𝑃として(A)を使うと
𝑎𝑎𝑃 = 𝑎2 𝑃が求める。

 (B)ができるなら(A)は解ける
 ∵𝑃, 𝑎𝑃, 𝑏𝑃が与えらえたとする。
𝑎𝑃 + 𝑏𝑃 = 𝑎 + 𝑏 𝑃を求める。(B)を使うと
𝑎2 𝑃, 𝑏 2 𝑃, 𝑎 + 𝑏 2 𝑃が求まる。
 𝑎 + 𝑏 2 𝑃 − 𝑎2 𝑃 − 𝑏 2 𝑃 = 2𝑎𝑏𝑃。よって𝑎𝑏𝑃が求まる。

 というわけで(A)の難しさと(B)の難しさは同程度。
 𝑃, 𝑎𝑃 の組を 𝑎𝑃, 𝑎−1 𝑎𝑃 と(B)=(C)もわかる。

 つまり全て同じ難しさ
2013/11

44 /58
電子署名の安全性
 DLPのイメージ
 𝑃, 𝑎𝑃の線形和からその外に出られない
 ならば「𝑃, 𝑎𝑃, 𝑎2 𝑃から1 𝑎 𝑃」はもとめられない?
 「𝑃, 𝑎𝑃, 𝑎2 𝑃, 𝑎3 𝑃から1 𝑎 𝑃」も多分無理?

 「𝑃, 𝑎𝑃, 𝑎2 𝑃, 𝑎3 𝑃, …が与えられたときに
1
ある𝑐 ≠ 0に対して
𝑃を求める問題」
𝑎+𝑐

が難しいということを安全性の根拠にしている

2013/11

45 /58
安全性の根拠をどこにおくのか
 できるだけ皆に調べられているものが望ましい
 離散対数問題、DH問題が難しいという仮定だけが一番
 複雑な機能を実現しようとするとそれよりもきつい仮定を置
くことがよくある
あまりマイナーな仮定を置くのは好まれない

2013/11

46 /58
他には
 放送用暗号
 ユーザにはそれぞれ別々の秘密鍵を配布したい
同じ鍵だと他人にコピーされてしまう
 たとえばクレジットカード番号を鍵に埋めてしまうと抑制力が働く

 コンテンツは一つの鍵で暗号化したい
巨大なデータをユーザごとに暗号化するには帯域が足りない

 属性ベース暗号
 IDベース暗号の拡張
社内秘の文章を読めるのは、部長以上の人、あるいは、特別開発
部の社員の一部だけ
○○という属性を持つ人だけが復号可能な暗号システム

 関数型暗号
 http://www.mitsubishielectric.co.jp/corporate/randd/spotlight/spotlight15.html

 などなどなど
2013/11

47 /58
秘密計算による化合物DBの検索(2011~)
 薬などの化合物は原子の小さい固まり(=基)の集まり
 フェニル基(C6H5-)、ヒドロキシ基(-OH)など

 基は化合物の性質を決める要素の一つ
 二つの化合物は似た基を多く持つと性質も似る傾向がある
 新しい薬を作るときは既存の物との類似性を調べるのが重要

 膨大な化合物の性質の辞書(データベース:DB)
 特定の性質に特化した化合物のDBは売り物になる

2013/11

48 /58
ジレンマ
 研究者(C:クライアント)
 自分の研究分野に特化したDBが欲しい
 何について研究しているかは教えたくない(企業秘密)

 DB販売者(S:サーバ)
 自社のDBを使って買ってほしい
 "立ち読み"されるのは困る

 要求
 Cは自分の調べたい化合物をSに知られたくないが、Sの持つ
DBの中にどれぐらい類似物があるか知りたい
 SはCに類似物がいくつあるか以外のことは教えたくない
2013/11

49 /58
秘匿検索プロトコル
 化合物の類似度
 化合物Xを01の数値列として表す
たとえば𝐵 𝑖 基があればi番目が1, なければ0
C6H5-

N=

-OH

...

X

1

0

1

...

Y

0

1

1

...

 Tversky指数(の簡単な形)
c(X, Y) = # (X and Y) / #(X or Y)
ここで#(何か)は何かのうち1になるものの個数とする
 #(X or Y) = #X + #Y - #(X and Y)

完全一致すると1, 全部違うと0

2013/11

50 /58
ElGamal暗号再び
 ElGamal暗号の弱点だった
𝐸𝑛𝑐 𝑚 𝐸𝑛𝑐 𝑚′ = 𝐸𝑛𝑐 𝑚𝑚′
 暗号化したものの積が元の値の積を暗号化したものに等しい
 この性質を乗法性準同型暗号という

 ElGamal暗号をちょっとひねる
 hをとり𝐸𝑛𝑐 𝑚 = 𝑐1 , 𝑐2 = (𝑔 𝑟 , ℎ 𝑚 𝑦 𝑟 )とすると
′
𝑟 𝑟′
𝑚+𝑚′ 𝑟+𝑟 ′
𝐸𝑛𝑐 𝑚 𝐸𝑛𝑐 𝑚 = 𝑔 𝑔 , ℎ
𝑦
= 𝐸𝑛𝑐(𝑚 + 𝑚′ )
𝑚はあまり大きくないという制約あり

 この性質を加法性準同型暗号という
実現方法は他にもいくつか知られている

 両方同時に満たす暗号を完全準同型暗号という
 2009年に初めて構成される
実用的なものにするため改良研究がさかん
2013/11

51 /58
共通部分を求める
 今回は加法性準同型を使えばできる
 クライアントは検索したい化合物𝑋 = (𝑥 𝑖 )に対して
𝑐 𝑖 = 𝐸𝑛𝑐(𝑥 𝑖 )を求めてサーバSに送る
 Sは各化合物𝑌 = 𝑦 𝑖 について𝑦 𝑖 = 1となる𝑖について
𝐸𝑛𝑐 𝑥 𝑖 を足していく
𝑧=

𝐸𝑛𝑐 𝑥 𝑖 = 𝐸𝑛𝑐(𝑥 𝑖 = 𝑦 𝑖 = 1となる𝑖の個数)
𝑦 𝑖 =1

暗号化されているのでSはXのことは何もわからない
 これでandの個数がでる
 𝐸𝑛𝑐 𝑥 𝑖 より#𝑋もわかる。=> orの個数もわかる
 (注意)実際にはこれに加えてデータの攪乱などの操作をする
2013/11

52 /58
悪意あるクライアントに対する対策
 サーバは𝑥 𝑖 = 0 𝑜𝑟 1と信じて𝐸𝑛𝑐(𝑥 𝑖 )を処理する
 本当はどういう値かわからない
 𝑥 𝑖 に極端に大きい値をいれて𝑦 𝑖 の情報を引き出そうとするかも

 サーバは𝑥 𝑖 が0と1のどちらなのか分からない
 しかし、それ以外の値を暗号化したものではない
ということは知りたい

2013/11

53 /58
ゼロ知識証明
 ある人が自分の持っているある命題が真であることを
それ以外の知識を何も教えずに証明する手法
 1985年に初めて定式化

 様々なパターン
 対話式ゼロ知識証明
何度かやりとりすることで相手に納得させる
 素因数分解を知っている
 離散対数問題の答えを知っている

納得はさせるがそれ以外の情報は与えない

 非対話ゼロ知識証明
一度で相手に納得させる
2013/11

54 /58
対話的ゼロ知識証明の例
 離散対数の答えを知っていることを示す
 私Aは「𝑦 = 𝑔 𝑥 mod 𝑝となる𝑥を知っている 𝑔, 𝑝, 𝑦は公開 」
ことを𝑥を教えることなく他人Bに証明したい
 次の対話をする

A(証明したい人)
Step1 : 𝑟を選び𝑎 = 𝑔 𝑟

B(検証したい人)
𝑎を受け取る

Step2 : 𝑏 = 0 𝑜𝑟 1

0か1を選び送る

Step3 : 𝑐 = 𝑟 + 𝑏𝑥

𝑐を受け取る

Step4:𝑔 𝑐 と𝑎𝑦 𝑏 が
等しいか確認
2013/11

55 /58
AはBをだませるか
 Aが実は𝑥を知らない場合
 𝑏 = 0が来ると予想していれば
適当に𝑟を作って𝑎 = 𝑔 𝑟 を渡せばOK
しかし𝑏 = 1が来るとStep 3で𝑐 = 𝑟 + 𝑥を渡せない

 𝑏 = 1が来ると予想していれば
𝑦 −1

𝑟 ′ を渡し、Step
𝑔

Step 1で適当に𝑟′を作って𝑎 =
3で𝑟 ′ を渡す
しかし𝑏 = 0が来るとStep 3で𝑐(= 𝑟 − 𝑥)を作れない

 AがBをだませる確率
 𝑥を知らずに当てずっぽうでStep 4をクリアする確率は1/2
このやりとりをN回連続すると

1

2

𝑁 の確率(Nが大きいと無理)

 今回の例では非対話ゼロ知識証明を用いる
 DLPとHash関数を組み合わせる(詳細は略:2013)
2013/11

56 /58
まとめ
 共通鍵暗号
 暗号化鍵 = 復号鍵

 公開鍵暗号
 暗号化鍵 ≠ 復号鍵

 2000年以降の暗号
 ペアリングなどの数学的な道具立てを利用
 時代の要請に応じた新しい概念、機能

2013/11

57 /58
もっと知りたい人は
 楕円曲線暗号入門(伊豆哲也)
 http://researchmap.jp/mulzrkzae-42427/

 PKIへの攻撃について
 サイバー攻撃ツールとしての公開鍵証明書の役割(神田雅透)
 http://www.jnsa.org/seminar/pki-day/2012/data/PM01_kanda.pdf

 ペアリングに関する最近の研究動向(岡本栄司他)
 https://www.jstage.jst.go.jp/article/essfr/1/1/1_1_1_51/_pdf

 加法準同型暗号を用いたデータベースの秘匿検索(産総研)
 http://www.nstac.go.jp/services/pdf/121116_6-1.pdf

 ゼロ知識証明について
 知識の証明と暗号技術(有田正剛)
 http://www.iisec.ac.jp/proc/vol0001/iisec_proc_001_p033.pdf

2013/11

58 /58

新しい暗号技術