39
暗号文のままで計算しよう 準同型暗号入門 6回プログラマのための数学勉強会 2016/3/19 光成滋生

暗号文のままで計算しよう - 準同型暗号入門 -

Embed Size (px)

Citation preview

Page 1: 暗号文のままで計算しよう - 準同型暗号入門 -

暗号文のままで計算しよう

準同型暗号入門

第6回プログラマのための数学勉強会

2016/3/19

光成滋生

Page 2: 暗号文のままで計算しよう - 準同型暗号入門 -

• 準同型暗号とは何か

• 加法準同型暗号のデモ

• 楕円ElGamal暗号

• 完全準同型暗号

• その原理の雰囲気の紹介

• 『クラウドを支えるこれからの暗号技術』

• 公開鍵暗号の最先端応用技術・理論

• 準同型暗号が載ってる和書は現時点で本書のみ

• 数学成分高め

• https://herumi.github.io/ango/

概要

2/39

Page 3: 暗号文のままで計算しよう - 準同型暗号入門 -

• 光成滋生(@herumi)

• @IT連載記事「クラウド時代の暗号化技術論」

• http://www.atmarkit.co.jp/ait/series/1990/

• CODE BLUE2015

• Excelのパスワード暗号化にあったバグの話

• http://www.slideshare.net/herumi/ms-office-54510219

• 属性ベース暗号の実装でIEEE trans. on Computers 2014採録

• 『パターン認識と機械学習の学習』(PRML副読本)

• Toypcryptの解読で経産省の情報化月間推進会議議長表彰

• IPA未踏スーパークリエータ

• 午後のこ~だ

自己紹介

3/39

Page 4: 暗号文のままで計算しよう - 準同型暗号入門 -

• cybozu.com

• グループウェアのクラウドサービス( 1万3000社以上)

• 自前インフラ

• We are hiring!

• アーキテクチャ刷新プロジェクト「Neco」の紹介

• http://blog.cybozu.io/entry/2016/03/11/080000

• チームワークあふれる社会を創る

• http://cybozu.co.jp/company/job/recruitment/

• 3/30 第5期サイボウズ・ラボユース成果報告会

• 学生のオープンソースソフトウェアの開発をサポート

• https://atnd.org/events/75830

会社の紹介

4/39

Page 5: 暗号文のままで計算しよう - 準同型暗号入門 -

• 準同型暗号の動機

• 準同型暗号とは何か

• 加法準同型暗号のデモ

目次

5/39

Page 6: 暗号文のままで計算しよう - 準同型暗号入門 -

• 暗号文から平文の情報が得られない

• ごちゃごちゃにかき混ぜる

• ホワイトノイズと区別できない

• 圧縮もできない

• 何もできない

暗号化

秘密の文章 暗号化

6/39

Page 7: 暗号文のままで計算しよう - 準同型暗号入門 -

• クライアントで暗号化すると

• クラウドは単なるデータ置き場

• 検索も計算も何もできない

• クラウドのCPUパワーを活かせない

• 暗号化したまま処理したい!

クラウドにおけるモチベーション

7/39

Page 8: 暗号文のままで計算しよう - 準同型暗号入門 -

• 暗号化したまま計算できる暗号方式

• ひっくり返したコップの中のボールが移動する

テーブルマジックみたいなの

準同型暗号(Homomorphic Encryption)

8/39

Page 9: 暗号文のままで計算しよう - 準同型暗号入門 -

• 暗号化された身長・体重の平均値をクラウド上で計算

• 暗号化された2個のベクトルの近さ(内積)を計算

• マッチング, 集合演算, ロジスティック回帰 etc.

• 各社・組織注力してるジャンル

• http://www.hitachi.co.jp/rd/portal/contents/story/searchable_encryption/

• http://www.nict.go.jp/press/2016/01/14-1.html

• http://pr.fujitsu.com/jp/news/2016/02/15.html

準同型暗号があると

9/39

Page 10: 暗号文のままで計算しよう - 準同型暗号入門 -

楕円ElGamalを用いた加法準同型暗号の

デモ

10/39

Page 11: 暗号文のままで計算しよう - 準同型暗号入門 -

• 楕円ElGamalを用いた加法準同型暗号

• ここの「楕円」は「楕円曲線」

言葉の説明

11/39

Page 12: 暗号文のままで計算しよう - 準同型暗号入門 -

• 楕円

• 曲線

楕円曲線とは

ではない

でもない

12/39

Page 13: 暗号文のままで計算しよう - 準同型暗号入門 -

• 浮輪の表面(トーラス)

• 複素数的な意味で曲線(1次元)なので実数的には2次元

• この上で計算(足し算)する

• どうやって?

楕円曲線とは

13/39

Page 14: 暗号文のままで計算しよう - 準同型暗号入門 -

• 長方形になる

楕円曲線を切り開くと

14/39

Page 15: 暗号文のままで計算しよう - 準同型暗号入門 -

• 長方形上の2個のベクトルを足す

• 𝑂, 𝑃, 𝑄, 𝑃 + 𝑄が平行四辺形になる

• 足してはみ出たら反対側に回り込む

楕円曲線上の足し算

𝑃 𝑂

𝑄 𝑃 + 𝑄

𝑃 + 𝑄

15/39

Page 16: 暗号文のままで計算しよう - 準同型暗号入門 -

• ベクトルの向きを反対にしたら−𝑃

楕円曲線上の引き算

𝑃

𝑂

−𝑃

−𝑃

16/39

Page 17: 暗号文のままで計算しよう - 準同型暗号入門 -

• 一歩が𝑃のベクトルを延ばし続ける

• 端に来ても反対側から出て延ばし続ける

点を何倍にもする

𝑃 𝑂

2𝑃 3𝑃

4𝑃 5𝑃 10100𝑃 4𝑃

17/39

Page 18: 暗号文のままで計算しよう - 準同型暗号入門 -

• 点𝑃を𝑛倍するのは簡単だが、

𝑛倍された点𝑛𝑃から𝑛を求めるのは難しい

• 楕円離散対数問題(ECDLP)が困難であるという

楕円曲線の重要な性質

𝑥, 𝑃 𝑄 = 𝑥𝑃 容易

困難

18/39

Page 19: 暗号文のままで計算しよう - 準同型暗号入門 -

• パラメータ設定

• 楕円曲線上の点𝑃と秘密の整数𝑥をとり𝑄 = 𝑥𝑃とする

• 秘密鍵 : 𝑥

• 公開鍵 : (𝑃, 𝑄)

• 他人は𝑃と𝑄から𝑥は求められない(ECDLPが困難)

楕円ElGamal暗号(1/3)

19/39

Page 20: 暗号文のままで計算しよう - 準同型暗号入門 -

• 暗号化

• メッセージ𝑀(楕円曲線の点)に対して乱数𝑟を選ぶ

• 公開鍵 𝑃, 𝑄 に対して

𝐸𝑛𝑐 𝑀 = 𝑟𝑃, 𝑀 + 𝑟𝑄

• 他人は𝑟𝑃から𝑟を求められない

楕円ElGamal暗号(2/3)

20/39

Page 21: 暗号文のままで計算しよう - 準同型暗号入門 -

• 復号

• 暗号文𝑐 = (𝐶1, 𝐶2)に対して秘密鍵𝑥を使って

𝐷𝑒𝑐 𝑐 = 𝐶2 − 𝑥𝐶1

• 元に戻ることの確認

• 𝑄 = 𝑥𝑃

• 𝐸𝑛𝑐 𝑀 = 𝐶1, 𝐶2 = (𝑟𝑃, 𝑀 + 𝑟𝑄)なので

𝐷𝑒𝑐 𝐸𝑛𝑐 𝑀 = 𝑀 + 𝑟𝑄 − 𝑥 𝑟𝑃 = 𝑀 + 𝑟𝑥𝑃 − 𝑥𝑟𝑃 = 𝑀

楕円ElGamal暗号(3/3)

21/39

Page 22: 暗号文のままで計算しよう - 準同型暗号入門 -

• 楕円曲線って「𝑦2 = 𝑥3 + 𝑎𝑥 + 𝑏」じゃないの?

• トーラスと𝑦2 = 𝑥3 + 𝑎𝑥 + 𝑏には深遠な関係がある

• 楕円曲線入門「トーラスと楕円曲線のつながり」

• http://www.slideshare.net/herumi/ss-58815597

• https://twitter.com/herumi/status/703839001107533824

補足

𝑃

𝑄

𝑃 + 𝑄

22/39

Page 23: 暗号文のままで計算しよう - 準同型暗号入門 -

• 楕円ElGamal暗号を用いた加法準同型暗号

• 残りは「加法準同型暗号」

• 暗号化したまま足し算ができる暗号

• どうやって?

ここまで

23/39

Page 24: 暗号文のままで計算しよう - 準同型暗号入門 -

• 二つの暗号文を用意する

• 𝐸𝑛𝑐 𝑀1 = 𝑟1𝑃, 𝑀1 + 𝑟1𝑄

• 𝐸𝑛𝑐 𝑀2 = (𝑟2𝑃, 𝑀2 + 𝑟2𝑄)

• 成分ごとに足してみる

• 𝐸𝑛𝑐 𝑀1 + 𝐸𝑛𝑐 𝑀2 = ( 𝑟1 + 𝑟2 𝑃, 𝑀1 + 𝑀2 + 𝑟1 + 𝑟2 𝑄)

• 𝑟′ = 𝑟1 + 𝑟2とすると

• 𝐸𝑛𝑐 𝑀1 + 𝐸𝑛𝑐 𝑀2 = (𝑟′𝑃, 𝑀1 + 𝑀2 + 𝑟′𝑄)

• 𝑀1 + 𝑀2を暗号化したものと同じ形!

• 𝐸𝑛𝑐 𝑀1 + 𝐸𝑛𝑐 𝑀2 = 𝐸𝑛𝑐(𝑀1 + 𝑀2)

• この性質を加法準同型という

暗号文を足してみる

24/39

Page 25: 暗号文のままで計算しよう - 準同型暗号入門 -

• 楕円曲線ライブラリ(開発中)

• https://github.com/herumi/mcl

• 先ほどのデモのコード

• https://github.com/herumi/add_he

実装

25/39

Page 26: 暗号文のままで計算しよう - 準同型暗号入門 -

• かなり頑張ってます(for Win/Linux/Mac)

• Xbyak(C++による自作x86/x64 JITアセンブラ)による最適化

• https://github.com/herumi/xbyak

• 注意)C++のコードであってinlineアセンブラではない

• ペアリング暗号の世界最速実装

• https://github.com/herumi/ate-pairing

実装

26/39

Page 27: 暗号文のままで計算しよう - 準同型暗号入門 -

• x64以外はLLVM IR(LLVMのアセンブラ)で記述

• 32/64ビットARMでも動く(はず)

• 単純なコードは手書きアセンブラの速度に匹敵

• 複雑なcarry演算を伴うものはまだ手書きが強い

LLVM

27/39

Page 28: 暗号文のままで計算しよう - 準同型暗号入門 -

• 完全準同型暗号とは何か

• 完全準同型暗号の原理の雰囲気

• ブートストラップ

目次

28/39

Page 29: 暗号文のままで計算しよう - 準同型暗号入門 -

• 何が完全?

• 数学には同型という言葉があるがそれとは違う

• 「準同型」は数学用語

• 「完全」は暗号?用語

• 数学用語なら環準同型

• 足し算だけ、掛け算だけができる暗号は

2000年までに構成されていた

• 足し算と掛け算の両方ができる暗号が長年の夢

• 2009年Gentryが達成

• ただし当初は1bitの平文の暗号文が1GBぐらい

• 現在さかんに改良されている

完全準同型暗号(Fully HE)

29/39

Page 30: 暗号文のままで計算しよう - 準同型暗号入門 -

• 0と1の世界で足し算はxor, 掛け算はandに相当

• 足し算(xor)

• 掛け算(and)

• 両方できると任意の関数を構成できる(完全)

• 関数𝑓に対して𝑓 𝐸𝑛𝑐 𝑚 = 𝐸𝑛𝑐(𝑓 𝑚 )

0と1

+ 0 1

0 0 1

1 1 0

× 0 1

0 0 0

1 0 1

30/39

Page 31: 暗号文のままで計算しよう - 準同型暗号入門 -

• 𝑛 × 𝑚行列𝐴, 𝑚次元ベクトル𝑏が与えられたときに

𝐴𝑠 = 𝑏となる𝑛次元ベクトル𝑠を求めよ

• これは容易

ざっくりとした原理の説明

𝑛

𝐴 𝑚 𝑠 = 𝑏 𝑛 𝑚

31/39

Page 32: 暗号文のままで計算しよう - 準同型暗号入門 -

• 小さい値のノイズ𝑒が入ると

• 𝐴, 𝑏が与えられたときに𝐴𝑠 + 𝑒 = 𝑏となる𝑠, 𝑒を求めよ

• とても難しい

• 秘密の値を知ってる人は𝑒を除去できるが

他人はできない

LWE(Learning with Errors)問題

𝑛

𝐴 𝑚 𝑠 = 𝑏 𝑛 𝑚 + 𝑒

32/39

Page 33: 暗号文のままで計算しよう - 準同型暗号入門 -

• 暗号文は「平文𝑚の情報」+「小さいノイズ」の形

• 「平文𝑚の情報」は𝑚そのものではないが詳細は略

• 楕円曲線は使わない

• 秘密鍵を知っている人は𝑚を取り出せるが他人は無理

• LWE問題が根拠

• ノイズを除去する方法も今回は省略

• 2個の暗号文を考える

• 𝑐1 = 𝑚1 + 𝑒1, 𝑐2 = 𝑚2 + 𝑒2

準同型の雰囲気(注意:原理ではない)

𝑚1

𝑒1

𝑚2

𝑒2

33/39

Page 34: 暗号文のままで計算しよう - 準同型暗号入門 -

• 2個の暗号文を足してみる

• 𝑐1 = 𝑚1 + 𝑒1, 𝑐2 = 𝑚2 + 𝑒2

• 足すと: 𝑐1 + 𝑐2 = 𝑚1 + 𝑚2 + (𝑒1 + 𝑒2)

• これは「𝑚1 + 𝑚2の情報」+「ノイズ」の形

• 暗号文から𝑚1 + 𝑚2を取り出せる

• 加法準同型!

加法準同型

𝑚1 𝑚2

𝑒1 + 𝑒2

34/39

Page 35: 暗号文のままで計算しよう - 準同型暗号入門 -

• 2個の暗号文を掛けてみる

• 𝑐1 = 𝑚1 + 𝑒1, 𝑐2 = 𝑚2 + 𝑒2

• 𝑐1𝑐2 = 𝑚1 + 𝑒1 𝑚2 + 𝑒2 = 𝑚1𝑚2 + 𝑚1𝑒2 + 𝑚2𝑒1 + 𝑒1𝑒2 = 𝑚1𝑚2 + 𝑒′

• 𝑒1, 𝑒2が𝑚1, 𝑚2に比べて十分小さければ

𝑒′ = 𝑚1𝑒2 + 𝑚2𝑒1 + 𝑒1𝑒2は𝑚1𝑚2に比べて小さい

• 𝑐1𝑐2は「𝑚1𝑚2の情報」+「ノイズ」の形

• 暗号文から𝑚1𝑚2を取り出せる

• 乗法準同型!

• 加法と乗法の両方ができるので完全準同型暗号

乗法準同型

35/39

Page 36: 暗号文のままで計算しよう - 準同型暗号入門 -

• これって何度もやってるとノイズが増えない?

• yes

• 「小さいノイズ」ではなくなって復号に失敗する

• 演算回数に上限がある

• 特に掛け算が辛い

• Somewhat HE(ちょっとだけ完全準同型?)と言う

• ただしSHEでも十分役に立つケースは多い

• 例:ベクトルの内積𝑎1𝑏1 + 𝑎2𝑏2 + ⋯ + 𝑎𝑛𝑏𝑛

• 掛け算一度だけの後、足すだけなのでノイズは増えにくい

疑問

36/39

𝑒 範囲を越えると復号できない

𝑚

Page 37: 暗号文のままで計算しよう - 準同型暗号入門 -

• SHEからFHEへ

• 回数制限のないHEの構成手法

• ノイズのある暗号文を

「暗号化したまま復号する回路」に入れて

きれいな暗号文にする

• おまえは何を言っているんだ

• http://people.csail.mit.edu/shaih/pubs/3.FHE.pdf p.7より引用

ブートストラップ(1/2)

𝐸𝑛𝑐 𝑚 + 𝑒 𝐸𝑛𝑐 𝑚

37/39

Page 38: 暗号文のままで計算しよう - 準同型暗号入門 -

• ノイズが増えてきた暗号文をc = 𝐸𝑛𝑐 𝑚 + 𝑒とする

• 秘密鍵𝑠を使って復号すると𝐷𝑒𝑐 𝑠, 𝑐 = 𝑚

• ここで𝑓𝑐 𝑥 = 𝐷𝑒𝑐(𝑥, 𝑐)としてみる

• 𝑓𝑐は𝑠を入れると𝑚がでる関数 : 𝑓𝑐 𝑠 = 𝐷𝑒𝑐 𝑠, 𝑐 = 𝑚

• 𝑓𝑐をSHEを使って実装する:𝑓 𝑐

• 𝑓𝑐 は「暗号化したまま復号する」関数

• 𝑓𝑐 に「秘密鍵𝑠の暗号文」𝐸𝑛𝑐(𝑠)を入れると

𝑓 𝑐 𝐸𝑛𝑐 𝑠 = 𝐸𝑛𝑐 𝑓𝑐 𝑠 = 𝐸𝑛𝑐(𝑚)

• ノイズが無くなった!

• ブートストラップで回数制限を取り除ける→完全準同型へ

• 暗号化したままAESを計算する実装もある

• おまえは何を(略

ブートストラップ(2/2)

38/39

Page 39: 暗号文のままで計算しよう - 準同型暗号入門 -

• 準同型暗号を使うと暗号化したまま計算できる

• 加法準同型暗号の一つに楕円ElGamal暗号があり

十分実用的

• 完全準同型は現在活発に研究されている

• 一部制限のあるSHEの様々な応用が提案されている

まとめ

39/39