Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ブラウザで動く準同型暗号
2017/10/18
emscripten night#5
光成滋生(@herumi)
• サイボウズ・ラボで暗号とセキュリティ関係のR&D
• バックアップシステムWalB(https://github.com/walb-linux)
• @IT クラウド時代の暗号化技術論連載2015
• Microsoft MVP Devel...
• そもそも暗号化とは
• 秘密の情報を他人に読めないようにすること
• 暗号文はホワイトノイズと区別できない
準同型暗号の前に
秘密の文章
3 / 13
• サーバから見るとディスクを食うだけのゴミデータ
• クラウドのCPUパワーを使えない
• 安全性と利便性のジレンマ
• クラウドに暗号化したまま処理させたい!
クラウドに暗号文をアップロードすると
4 / 13
• 暗号化したまま足し算や掛け算ができる暗号
• クラウドはカプセルの中を見ずに(復号せずに)計算
• 今回は内積(𝑥1 𝑦1 + ⋯ + 𝑥 𝑛 𝑦𝑛)を計算できる暗号
準同型暗号(Homomorphic Encryption)
+×1 3 ...
• 『クラウドを支えるこれからの暗号技術』を見てね
そんなことできるの?と思ったら
6 / 13
• 統計データの計算
• データの平均、分散、相関
• 個人情報を隠したまま喫煙者と肺癌患者の関係
• ビールを買う人とおつまみを買う人の相関
• 最小二乗法
• ベクトルのコサイン類似度
• ニューラルネットの畳み込み etc.
内積を計算で...
暗号化したまま内積を求めるデモ
https://herumi.github.io/mcl/demo/she2.html
(https://herumi.github.io/mcl/demo/she-ja.html 日本語版)
• https://github.com/herumi/mcl
• 高速で汎用的なペアリング演算
• Windows/Linux/OS X
• x86/x64/ARM/ARM64対応
準同型暗号ライブラリmcl
ペアリング
楕円曲線
準同型暗号...
• 多倍長演算にどのバックエンドを使う?
• Xbyak(https://github.com/herumi/xbyak)
• C++用x86/x64専用JITアセンブラ
• Intelの機械学習・深層学習ライブラリのJIT部分で利用される
•...
• mclはLLVM IR(LLVMのアセンブリ言語)で
記述された多倍長演算ルーチンを持っている
• (高速)Xbyak > LLVM > GMP > Vint(低速)
• -march=wasm32で楽勝と思って始めた数カ月前
• llcの...
• キャリー演算が無い
• キャリー : 整数x, yを足したときに繰り上がりを示すフラグ
• 無いと多倍長演算が辛い
• 64bit x 64bit → 128bit整数演算命令が無い
• 64bit x 64bit → (下位)64bitは...
• ペアリング演算(回数/sec)on Core i7-6700 3.4GHz
• WASMはnative(0.3msec)の10倍程度の遅さ
• それでも3msecなので実用できるかも
• それよりメモリがネックか
ベンチマーク
WASM
V...
Upcoming SlideShare
Loading in …5
×

ブラウザで動く準同型暗号

1,624 views

Published on

emscripten & WebAssembly night !! #5
https://emsn.connpass.com/event/66304/

Published in: Technology

ブラウザで動く準同型暗号

  1. 1. ブラウザで動く準同型暗号 2017/10/18 emscripten night#5 光成滋生(@herumi)
  2. 2. • サイボウズ・ラボで暗号とセキュリティ関係のR&D • バックアップシステムWalB(https://github.com/walb-linux) • @IT クラウド時代の暗号化技術論連載2015 • Microsoft MVP Developer Security 2015~ • 『パターン認識と機械学習の学習普及版』暗黒通信団 • よく使う言語はC++/x64アセンブラ • https://github.com/herumi/ • JavaScriptは素人… 自己紹介 2 / 13
  3. 3. • そもそも暗号化とは • 秘密の情報を他人に読めないようにすること • 暗号文はホワイトノイズと区別できない 準同型暗号の前に 秘密の文章 3 / 13
  4. 4. • サーバから見るとディスクを食うだけのゴミデータ • クラウドのCPUパワーを使えない • 安全性と利便性のジレンマ • クラウドに暗号化したまま処理させたい! クラウドに暗号文をアップロードすると 4 / 13
  5. 5. • 暗号化したまま足し算や掛け算ができる暗号 • クラウドはカプセルの中を見ずに(復号せずに)計算 • 今回は内積(𝑥1 𝑦1 + ⋯ + 𝑥 𝑛 𝑦𝑛)を計算できる暗号 準同型暗号(Homomorphic Encryption) +×1 3 42 × 14= 5 / 13
  6. 6. • 『クラウドを支えるこれからの暗号技術』を見てね そんなことできるの?と思ったら 6 / 13
  7. 7. • 統計データの計算 • データの平均、分散、相関 • 個人情報を隠したまま喫煙者と肺癌患者の関係 • ビールを買う人とおつまみを買う人の相関 • 最小二乗法 • ベクトルのコサイン類似度 • ニューラルネットの畳み込み etc. 内積を計算できたら何がうれしい? 名前 煙草 ビール あられ 肺癌 ?さん ? ? ? ? ?さん ? ? ? ? ?さん ? ? ? ? ?さん ? ? ? ? 喫煙 禁煙 合計 肺癌になる 72 42 114 ならない 28 58 86 合計 100 100 200 個人情報を 秘匿しつつ集計 7 / 13
  8. 8. 暗号化したまま内積を求めるデモ https://herumi.github.io/mcl/demo/she2.html (https://herumi.github.io/mcl/demo/she-ja.html 日本語版)
  9. 9. • https://github.com/herumi/mcl • 高速で汎用的なペアリング演算 • Windows/Linux/OS X • x86/x64/ARM/ARM64対応 準同型暗号ライブラリmcl ペアリング 楕円曲線 準同型暗号 有限体 多倍長演算 Xbyak ; x64 LLVM;ARM64 etc. GMP Vint ; WASM WASMのために今回追加 mclの階層構造 9 / 13
  10. 10. • 多倍長演算にどのバックエンドを使う? • Xbyak(https://github.com/herumi/xbyak) • C++用x86/x64専用JITアセンブラ • Intelの機械学習・深層学習ライブラリのJIT部分で利用される • 最速だが(もちろん)今回は使えない • GMP(https://gmplib.org/) • GNUの広く使われている多倍長ライブラリ • アセンブリコード部分は使えない • Cのみでbuildしたが動かなかった(詳細未調査) mclをWASMに対応させるまで 10 / 13
  11. 11. • mclはLLVM IR(LLVMのアセンブリ言語)で 記述された多倍長演算ルーチンを持っている • (高速)Xbyak > LLVM > GMP > Vint(低速) • -march=wasm32で楽勝と思って始めた数カ月前 • llcのWASM出力は64 bitを越えるレジスタに対応してなかった • (注意)一昨日、最新版で試したら対応したっぽい? • 仕方がない、WASMを手書きか? LLVM Unsupported: %z = mul i128 %x, %y LLVM ERROR: Binary operator type not yet supported for integer types larger than 64 bits 11 / 13
  12. 12. • キャリー演算が無い • キャリー : 整数x, yを足したときに繰り上がりを示すフラグ • 無いと多倍長演算が辛い • 64bit x 64bit → 128bit整数演算命令が無い • 64bit x 64bit → (下位)64bitはあるが 乗算にかかるコストが全然違う • それなら手書きWASMでがんばらず、 C++で書いても速度はあまり変わらないのでは • Vint(簡易多倍長整数ライブラリ)を作成 WASMの不満点 12 / 13
  13. 13. • ペアリング演算(回数/sec)on Core i7-6700 3.4GHz • WASMはnative(0.3msec)の10倍程度の遅さ • それでも3msecなので実用できるかも • それよりメモリがネックか ベンチマーク WASM Vint wo/mul Vint w/mul Xbyak Xbyak Vint w/mul ; 64x64→128 mul Vint wo/mul ; 64x64→64 mul WASM ; Vint on Firefox fast 13 / 13

×