[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
暗号文のままで計算しよう
準同型暗号入門
第6回プログラマのための数学勉強会
2016/3/19
光成滋生
• 準同型暗号とは何か
• 加法準同型暗号のデモ
• 楕円ElGamal暗号
• 完全準同型暗号
• その原理の雰囲気の紹介
• 『クラウドを支えるこれからの暗号技術』
• 公開鍵暗号の最先端応用技術・理論
• 準同型暗号が載ってる和書は現時点で本書のみ
• 数学成分高め
• https://herumi.github.io/ango/
概要
2/39
• 光成滋生(@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
• 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
• 準同型暗号の動機
• 準同型暗号とは何か
• 加法準同型暗号のデモ
目次
5/39
• 暗号文から平文の情報が得られない
• ごちゃごちゃにかき混ぜる
• ホワイトノイズと区別できない
• 圧縮もできない
• 何もできない
暗号化
秘密の文章
暗号化
6/39
• クライアントで暗号化すると
• クラウドは単なるデータ置き場
• 検索も計算も何もできない
• クラウドのCPUパワーを活かせない
• 暗号化したまま処理したい!
クラウドにおけるモチベーション
7/39
• 暗号化したまま計算できる暗号方式
• ひっくり返したコップの中のボールが移動する
テーブルマジックみたいなの
準同型暗号(Homomorphic Encryption)
8/39
• 暗号化された身長・体重の平均値をクラウド上で計算
• 暗号化された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
楕円ElGamalを用いた加法準同型暗号の
デモ
10/39
• 楕円ElGamalを用いた加法準同型暗号
• ここの「楕円」は「楕円曲線」
言葉の説明
11/39
• 楕円
• 曲線
楕円曲線とは
ではない
でもない
12/39
• 浮輪の表面(トーラス)
• 複素数的な意味で曲線(1次元)なので実数的には2次元
• この上で計算(足し算)する
• どうやって?
楕円曲線とは
13/39
• 長方形になる
楕円曲線を切り開くと
14/39
• 長方形上の2個のベクトルを足す
• 𝑂, 𝑃, 𝑄, 𝑃 + 𝑄が平行四辺形になる
• 足してはみ出たら反対側に回り込む
楕円曲線上の足し算
𝑃
𝑂
𝑄
𝑃 + 𝑄
𝑃 + 𝑄
15/39
• ベクトルの向きを反対にしたら−𝑃
楕円曲線上の引き算
𝑃
𝑂
−𝑃
−𝑃
16/39
• 一歩が𝑃のベクトルを延ばし続ける
• 端に来ても反対側から出て延ばし続ける
点を何倍にもする
𝑃
𝑂
2𝑃
3𝑃
4𝑃5𝑃 10100 𝑃
4𝑃
17/39
• 点𝑃を𝑛倍するのは簡単だが、
𝑛倍された点𝑛𝑃から𝑛を求めるのは難しい
• 楕円離散対数問題(ECDLP)が困難であるという
楕円曲線の重要な性質
𝑥, 𝑃 𝑄 = 𝑥𝑃
容易
困難
18/39
• パラメータ設定
• 楕円曲線上の点𝑃と秘密の整数𝑥をとり𝑄 = 𝑥𝑃とする
• 秘密鍵 : 𝑥
• 公開鍵 : (𝑃, 𝑄)
• 他人は𝑃と𝑄から𝑥は求められない(ECDLPが困難)
楕円ElGamal暗号(1/3)
19/39
• 暗号化
• メッセージ𝑀(楕円曲線の点)に対して乱数𝑟を選ぶ
• 公開鍵 𝑃, 𝑄 に対して
𝐸𝑛𝑐 𝑀 = 𝑟𝑃, 𝑀 + 𝑟𝑄
• 他人は𝑟𝑃から𝑟を求められない
楕円ElGamal暗号(2/3)
20/39
• 復号
• 暗号文𝑐 = (𝐶1, 𝐶2)に対して秘密鍵𝑥を使って
𝐷𝑒𝑐 𝑐 = 𝐶2 − 𝑥𝐶1
• 元に戻ることの確認
• 𝑄 = 𝑥𝑃
• 𝐸𝑛𝑐 𝑀 = 𝐶1, 𝐶2 = (𝑟𝑃, 𝑀 + 𝑟𝑄)なので
𝐷𝑒𝑐 𝐸𝑛𝑐 𝑀 = 𝑀 + 𝑟𝑄 − 𝑥 𝑟𝑃 = 𝑀 + 𝑟𝑥𝑃 − 𝑥𝑟𝑃 = 𝑀
楕円ElGamal暗号(3/3)
21/39
• 楕円曲線って「𝑦2 = 𝑥3 + 𝑎𝑥 + 𝑏」じゃないの?
• トーラスと𝑦2 = 𝑥3 + 𝑎𝑥 + 𝑏には深遠な関係がある
• 楕円曲線入門「トーラスと楕円曲線のつながり」
• http://www.slideshare.net/herumi/ss-58815597
• https://twitter.com/herumi/status/703839001107533824
補足
𝑃
𝑄
𝑃 + 𝑄
22/39
• 楕円ElGamal暗号を用いた加法準同型暗号
• 残りは「加法準同型暗号」
• 暗号化したまま足し算ができる暗号
• どうやって?
ここまで
23/39
• 二つの暗号文を用意する
• 𝐸𝑛𝑐 𝑀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
• 楕円曲線ライブラリ(開発中)
• https://github.com/herumi/mcl
• 先ほどのデモのコード
• https://github.com/herumi/add_he
実装
25/39
• かなり頑張ってます(for Win/Linux/Mac)
• Xbyak(C++による自作x86/x64 JITアセンブラ)による最適化
• https://github.com/herumi/xbyak
• 注意)C++のコードであってinlineアセンブラではない
• ペアリング暗号の世界最速実装
• https://github.com/herumi/ate-pairing
実装
26/39
• x64以外はLLVM IR(LLVMのアセンブラ)で記述
• 32/64ビットARMでも動く(はず)
• 単純なコードは手書きアセンブラの速度に匹敵
• 複雑なcarry演算を伴うものはまだ手書きが強い
LLVM
27/39
• 完全準同型暗号とは何か
• 完全準同型暗号の原理の雰囲気
• ブートストラップ
目次
28/39
• 何が完全?
• 数学には同型という言葉があるがそれとは違う
• 「準同型」は数学用語
• 「完全」は暗号?用語
• 数学用語なら環準同型
• 足し算だけ、掛け算だけができる暗号は
2000年までに構成されていた
• 足し算と掛け算の両方ができる暗号が長年の夢
• 2009年Gentryが達成
• ただし当初は1bitの平文の暗号文が1GBぐらい
• 現在さかんに改良されている
完全準同型暗号(Fully HE)
29/39
• 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
• 𝑛 × 𝑚行列𝐴, 𝑚次元ベクトル𝑏が与えられたときに
𝐴𝑠 = 𝑏となる𝑛次元ベクトル𝑠を求めよ
• これは容易
ざっくりとした原理の説明
𝑛
𝐴𝑚 𝑠 = 𝑏𝑛 𝑚
31/39
• 小さい値のノイズ𝑒が入ると
• 𝐴, 𝑏が与えられたときに𝐴𝑠 + 𝑒 = 𝑏となる𝑠, 𝑒を求めよ
• とても難しい
• 秘密の値を知ってる人は𝑒を除去できるが
他人はできない
LWE(Learning with Errors)問題
𝑛
𝐴𝑚 𝑠 = 𝑏𝑛 𝑚+ 𝑒
32/39
• 暗号文は「平文𝑚の情報」+「小さいノイズ」の形
• 「平文𝑚の情報」は𝑚そのものではないが詳細は略
• 楕円曲線は使わない
• 秘密鍵を知っている人は𝑚を取り出せるが他人は無理
• LWE問題が根拠
• ノイズを除去する方法も今回は省略
• 2個の暗号文を考える
• 𝑐1 = 𝑚1 + 𝑒1, 𝑐2 = 𝑚2 + 𝑒2
準同型の雰囲気(注意:原理ではない)
𝑚1
𝑒1
𝑚2
𝑒2
33/39
• 2個の暗号文を足してみる
• 𝑐1 = 𝑚1 + 𝑒1, 𝑐2 = 𝑚2 + 𝑒2
• 足すと:
𝑐1 + 𝑐2 = 𝑚1 + 𝑚2 + (𝑒1 + 𝑒2)
• これは「𝑚1 + 𝑚2の情報」+「ノイズ」の形
• 暗号文から𝑚1 + 𝑚2を取り出せる
• 加法準同型!
加法準同型
𝑚1
𝑚2
𝑒1 + 𝑒2
34/39
• 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
• これって何度もやってるとノイズが増えない?
• yes
• 「小さいノイズ」ではなくなって復号に失敗する
• 演算回数に上限がある
• 特に掛け算が辛い
• Somewhat HE(ちょっとだけ完全準同型?)と言う
• ただしSHEでも十分役に立つケースは多い
• 例:ベクトルの内積𝑎1 𝑏1 + 𝑎2 𝑏2 + ⋯ + 𝑎 𝑛 𝑏 𝑛
• 掛け算一度だけの後、足すだけなのでノイズは増えにくい
疑問
36/39
𝑒
範囲を越えると
復号できない
𝑚
• SHEからFHEへ
• 回数制限のないHEの構成手法
• ノイズのある暗号文を
「暗号化したまま復号する回路」に入れて
きれいな暗号文にする
• おまえは何を言っているんだ
• http://people.csail.mit.edu/shaih/pubs/3.FHE.pdf p.7より引用
ブートストラップ(1/2)
𝐸𝑛𝑐 𝑚 + 𝑒 𝐸𝑛𝑐 𝑚
37/39
• ノイズが増えてきた暗号文をc = 𝐸𝑛𝑐 𝑚 + 𝑒とする
• 秘密鍵𝑠を使って復号すると𝐷𝑒𝑐 𝑠, 𝑐 = 𝑚
• ここで𝑓𝑐 𝑥 = 𝐷𝑒𝑐(𝑥, 𝑐)としてみる
• 𝑓𝑐は𝑠を入れると𝑚がでる関数 : 𝑓𝑐 𝑠 = 𝐷𝑒𝑐 𝑠, 𝑐 = 𝑚
• 𝑓𝑐をSHEを使って実装する:𝑓𝑐
• 𝑓𝑐は「暗号化したまま復号する」関数
• 𝑓𝑐に「秘密鍵𝑠の暗号文」𝐸𝑛𝑐(𝑠)を入れると
𝑓𝑐 𝐸𝑛𝑐 𝑠 = 𝐸𝑛𝑐 𝑓𝑐 𝑠 = 𝐸𝑛𝑐(𝑚)
• ノイズが無くなった!
• ブートストラップで回数制限を取り除ける→完全準同型へ
• 暗号化したままAESを計算する実装もある
• おまえは何を(略
ブートストラップ(2/2)
38/39
• 準同型暗号を使うと暗号化したまま計算できる
• 加法準同型暗号の一つに楕円ElGamal暗号があり
十分実用的
• 完全準同型は現在活発に研究されている
• 一部制限のあるSHEの様々な応用が提案されている
まとめ
39/39

More Related Content

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