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.

ブロックチェーン系プロジェクトで着目される暗号技術

2,376 views

Published on

2018/10/10 JEITA ハードウェアセキュリティ技術分科会講演資料

Published in: Technology
  • Be the first to comment

ブロックチェーン系プロジェクトで着目される暗号技術

  1. 1. ブロックチェーン系プロジェクトで 着目される暗号技術 JEITA ハードウェアセキュリティ技術分科会 2018/10/10 光成滋生
  2. 2. • Bitcoin(easy part) • 電子署名 • 楕円曲線 • ハッシュ関数 • ブロックチェーン • 合意形成と取引の秘匿化 • 高度な暗号技術(hard part) • ペアリング • BLS署名と秘密分散 • コミットメント • 準同型暗号 • ゼロ知識証明 • zk-SNARK 目次 2 / 50
  3. 3. • 光成滋生 • サイボウズ・ラボで暗号・セキュリティ系のR&D • 『クラウドを支えるこれからの暗号技術』秀和システム, 2015 • http://herumi.github.io/ango • 検索可能暗号, プロキシ暗号, 放送型暗号, IDベース暗号, 準同型暗号, ゼロ知識証明などの高機能暗号のサーベイ 自己紹介 3 / 50
  4. 4. • 分散型仮想通貨(1号仮想通貨)の一つ • 不特定の相手に対して • 物品の購入などの代価の支払いのために利用できる • 円などの法的通貨と相互に交換できる • 電子的方法で記録され、移転できる • オルトコイン(2号仮想通貨) • 不特定の相手に対して1号仮想通貨と交換できるもの • 円や電子マネーは仮想通貨ではない • 資金決済に関する法律 http://elaws.e- gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=421AC0000000059#5 Bitcoin 4 / 50
  5. 5. • 電子署名 • あるデータを作ったものが当人であることを検証できる • Bitcoinの電子署名は楕円曲線を利用している • ブロックチェーン • 取引履歴をつなげて改竄しにくくしたもの Bitcoinで用いられる暗号技術 5 / 50
  6. 6. • 鍵生成 • 署名鍵𝑠𝑘と検証鍵𝑝𝑘を作る • 𝑠𝑘は秘密にしたままで𝑝𝑘はみなに公開する • 署名 • メッセージ𝑚に対して𝑠𝑘で署名 • 𝜎 ≔ Sign 𝑠𝑘, 𝑚 • 検証 • 𝑚と𝜎に対して𝑝𝑘で正当性を検証 • Verify 𝑝𝑘, 𝑚, 𝜎 = 1 𝑜𝑟 0 • 注意 • 署名は暗号化ではない(𝑚を復元できるわけではない) • そもそも𝑚のサイズより𝜎のサイズが小さいことも多い 電子署名 6 / 50
  7. 7. • Aliceの署名𝜎 = Sign(𝑠𝑘, 𝑚)に対して • 誰もがAliceの署名を受理する • Verify 𝑝𝑘, 𝑚, 𝜎 = 1 for all 𝜎 = Sign(𝑠𝑘, 𝑚) • 𝑠𝑘を知っているAlice以外は𝜎を偽造できない 電子署名が満たすべき性質 𝑚, 𝜎 : OK 𝑚, 𝜎′ : NG X𝑠𝑘 𝑝𝑘 7 / 50
  8. 8. • 幾何学的には • 長方形の両端をつなげて出来るトーラス • 楕円曲線上の点の演算 • 一歩が𝑃のベクトルずつ進む • 端に来たら反対側から出る 楕円曲線 𝑃𝑂 2𝑃 3𝑃 4𝑃5𝑃 10100 𝑃 4𝑃 8 / 50
  9. 9. • 現在地から何歩歩いたか求めるのは難しい • 楕円離散対数問題の困難性 • 𝑃を𝑥倍するのは容易 𝑥𝑃から𝑥を求めるのは困難 • DLP(discrete logarithm problem) 楕円曲線の性質 𝑃 2𝑃 3𝑃𝑥𝑃 どれだけ歩いたっけ? 9 / 50
  10. 10. • Bitcoinで使われる電子署名の種類 • secp256kは楕円曲線の種類を表す名前 • 楕円曲線の点𝑃は固定 • 署名鍵 : 𝑠 ∈ {1, … , 𝑝 − 1} ; ランダムに選ぶ • 検証鍵 : 𝑄 ≔ 𝑠𝑃 • 𝑠𝑃を見ても𝑠は分からない(DLP困難性による) • 具体的な署名・検証アルゴリズムは省略 ECDSA/secp256k 10 / 50
  11. 11. • 任意長のビット列を固定長のビット列に変換する関数 • 衝突困難性 • 異なる2個の𝑚1, 𝑚2に対してそのハッシュ関数𝐻の値について 𝐻 𝑚1 = 𝐻(𝑚2)となるものを見つけるのが難しい • BitcoinはSHA256とRIPEMD-160を利用 ハッシュ関数 11 / 50
  12. 12. • 取引のための口座番号 • Bitcoinアドレスは公開鍵𝑄から作られる • ℎ ≔RIPEMD-160(SHA256 𝑄 ) • ℎ′ ≔ NetworkID||ℎ ; Network IDは1byteのデータ • checksum ≔ 4 byte𝑠 of SHA256(SHA256 ℎ′ ) • Bitcoinアドレス ≔ ℎ′ ||checksum Bitcoinアドレス 𝑄 ℎ ハッシュ ID ℎℎ′ = c checksumID ℎ 12 / 50 Bitcoinアドレス=
  13. 13. • ブロックチェーン=ブロックの連鎖 • ブロック(取引データをまとめたもの) • 取引データのハッシュ(Merkle root) • 前のブロックのハッシュ • nonce ; ハッシュの値を調整するためのもの ブロックチェーン h0 h1 h2 h3 block0 block1 • 取引1 • h0 block2 • 取引2 • h1 block3 • 取引3 • h2 block4 • 取引4 • h3 13 / 50
  14. 14. • 複数のデータのハッシュを木構造で管理 • ブロックにはrootのみ保持 • 必要に応じて個別のデータを参照 • 複数のノードの結果を保持しておくことで 再チェック時に必要最小限の再計算で検証可能 Merkle木 root h1 h1 h2 h2 h3 h4 取引1 取引2 取引3 取引4 14 / 50
  15. 15. • どこからどこへいくら送金したかの情報 • input • Aliceのアドレス10BTC • output • Bobのアドレス1BTC • Aliceの(お釣り)アドレス8.9BTC • 残り0.1BTCは手数料 • 手数料はマイナー(採掘者)へ行く • 送金 • 取引データをAliceの署名鍵で署名して公開する • 誰もがAliceの検証鍵で取引データを検証できる 取引データ 15 / 50
  16. 16. 取引A, B, C, D, E, X • 送信された取引の検証 • 取引データのフォーマット(署名)の検証 • 取引データが二重支払いになっていないかなどの意味の検証 • ブロックチェーンの過去の履歴を確認 • 全世界のマシンでデータを共有して確認 取引承認 取引A, B, C, E 取引C, D, A 取引A, B メモリプール 二重使用 X マイナー (採掘者) X 新しいブロック 16 / 50
  17. 17. • マイナー • 正当な取引を集めて新しいブロックを作る • ブロックのハッシュ値の先頭が0で続くようにnonceを選ぶ • Proof of Work • コンピュータの演算能力に合わせて0が延ばされる • 現在18個ほど • 取引の手数料と新しいブロックに対して 得られるビットコインがマイニングの動機(早い者勝ち) • 承認 • 取引がブロックチェーンに取り込まれると取引確認(10分) • チェーンが分岐したら • 一番長いブロックチェーンが正しい取引 マイニング 17 / 50
  18. 18. • Bitcoinの全取引は全世界に公開 • 「BitcoinアドレスAからBへいくら送金した」 という情報は全世界で共有される • あるアドレスからのBitcoinの流れは全て把握できる • 取引所 • Bitcoinとリアルな情報とのリンクが行われる • マネーロンダリングなどを防ぐため(完全ではない) • 取引自体を秘匿化したいという動機 • 公開すべき情報なら秘匿しなくてもよいが • 電子投票や医療情報などは全世界に公開できない 匿名性 18 / 50
  19. 19. • スマートコントラクト • 取引などの契約の自動化を行うプロトコル • cf. ビットコインスクリプトもこれに含まれる • Ethereum(https://www.ethereum.org) • スマートコントラクトの履歴をブロックチェーンに記録 • 原理的に任意のプログラムを実行可能 • 合意形成アルゴリズム • BitcoinのPoWは電気代がかかるという批判 • それに変わるブロックの作成者を選択する手法の提案 • Proof of Stake ; ブロック作成者の資産などに着目 • Proof of Importance ; ネットワークにおける重要度に着目 • その他いろいろ スマートコントラクトとEthereum 19 / 50
  20. 20. • https://dfinity.org • 効率的な合意形成のためにランダムビーコンを提案 • 複数のユーザが一定数合意すると一意に乱数が定まる • BLS署名と秘密分散を利用 Dfinity 20 / 50
  21. 21. • 𝐺1, 𝐺2を素数位数𝑝の加法巡回群とする • 2種類の楕円曲線のそれぞれの生成元を𝑃, 𝑄とする • 𝐺1 = 𝑃 = 0, 𝑃, 2𝑃, … , 𝑝 − 1 𝑃 • 𝐺2 = 𝑄 = {0, 𝑄, 2𝑄, … , 𝑝 − 1 𝑄} • 論文によっては乗法群表記{1, 𝑔, 𝑔2, … , 𝑔 𝑝−1}が使われる • 𝐺 𝑇を位数𝑝の乗法巡回群とする • 有限体上での1の𝑝乗根の集合 • 𝑒: 𝐺1 × 𝐺2 → 𝐺 𝑇 ; 非退化双線形写像(ペアリング) • 双線形 : 𝑒 𝑎𝑃, 𝑏𝑄 = 𝑒 𝑃, 𝑄 𝑎𝑏 for 𝑎, 𝑏 ∈ 𝔽 𝑝 • 非退化 : 𝑔 ≔ 𝑒(𝑃, 𝑄)が𝐺 𝑇の生成元(𝑔 ≠ 1, 𝑔 𝑝 = 1) ペアリング 21 / 50
  22. 22. • 鍵生成 • ペアリング ; 𝑒: 𝐺1 × 𝐺2 → 𝐺 𝑇 • ハッシュ関数 ; 𝐻: 0,1 ∗ → 𝐺1 ; 衝突困難なもの • 𝑄 ∈ 𝐺2 ; 公開パラメータ • 𝑠 ∈ 𝔽 𝑝 ; 署名(秘密)鍵, 𝑠𝑄 ; 検証(公開)鍵 • 署名 • 署名鍵𝑠とメッセージ𝑚に対してSign 𝑠, 𝑚 ∶= 𝑠𝐻(𝑚) • 検証 • 検証鍵𝑠𝑄とメッセージ𝑚と署名𝑆に対して 𝑒 𝐻 𝑚 , 𝑠𝑄 ∶= 𝑒 𝑆, 𝑄 が等号成立すれば受理, そうでなければ棄却する • 正当性 • 双線型性から𝑒 𝑆, 𝑄 = 𝑒 𝑠𝐻 𝑚 , 𝑄 = 𝑒(𝐻 𝑚 , 𝑠𝑄) BLS署名 22 / 50
  23. 23. • 秘密の𝑠を𝑛個に分散, そのうち𝑘個集めると復元 • 𝑠 = 𝑓0とし乱数𝑓1, … , 𝑓𝑘−1で𝑘 − 1次多項式𝑓 𝑥 = σ𝑖 𝑓𝑖 𝑥 𝑖を構成 • 異なる𝑛個の点𝑥1, … , 𝑥 𝑛を選びユーザ𝑖に(𝑥𝑖, 𝑠𝑖 ≔ 𝑓 𝑥𝑖 )を配布 • 𝑘 − 1次多項式は𝑘個の点が決まると一意に決まる 𝑛 = 5, 𝑘 = 4の例 Shamirの秘密分散(SS : Secret Sharing) 𝑦 = 𝑓 𝑥 = 𝑓0 + 𝑓1 𝑥 + 𝑓2 𝑥2 + 𝑓3 𝑥3 0 𝑥 𝑦 𝑠0 (𝑥1, 𝑦1) (𝑥2, 𝑦2) (𝑥4, 𝑦4) (𝑥5, 𝑦5) (𝑥3, 𝑦3) 23 / 50
  24. 24. • 𝑘 − 1次多項式𝑓 𝑥 = 𝑓0 + 𝑓1 𝑥 + ⋯ + 𝑓𝑘−1 𝑥 𝑘−1 • 𝑛人中の𝑘個の点集合{ 𝑢1, 𝑓 𝑢1 , … , 𝑢 𝑘, 𝑓 𝑢 𝑘 } • {𝑢1, … , 𝑢 𝑘}から𝑐𝑖 ≔ ς 𝑗∈{1,…,𝑘}∖ 𝑖 −𝑢 𝑗 𝑢 𝑖−𝑢 𝑗 ∈ 𝔽 𝑝を計算する • 𝑠0 = 𝑓 0 = σ𝑖=1 𝑘 𝑐𝑖 𝑓(𝑢𝑖)で復元 • 𝑓(𝑢𝑖)の𝔽 𝑝の元の線形和 Lagrange補間 (𝑥1, 𝑓 𝑥1 ) (𝑥2, 𝑓 𝑥2 ) (𝑥 𝑛, 𝑓 𝑥 𝑛 ) 𝑠0 ... (𝑢1, 𝑓 𝑢1 ) (𝑢 𝑘, 𝑓 𝑢 𝑘 ) ... 𝑛人に配布 𝑘人集まる 𝑠0 復元秘密の値 24 / 50
  25. 25. • BLS署名の要素は全て「𝑠 ×○」という形 • 署名鍵 : 𝑠 = 𝑠0 • 検証鍵 : 𝑠𝑄 • 署名 : 𝑠𝐻(𝑚) • 署名鍵だけでなく検証鍵や署名も秘密分散可能 BLS署名と秘密分散 25 / 45 𝑥𝑖, 𝑠𝑖 = 𝑓 𝑥𝑖 , 𝑠𝑖 𝑄 𝑠 ... 𝑠𝑖 𝐻(𝑚) ... 各自に署名鍵𝑠𝑖と 検証鍵𝑠𝑖 𝑄を配布 各自が署名 𝑠0 𝐻(𝑚) 署名を復元マスター 署名鍵 マスター 検証鍵𝑠𝑄で 検証可能 𝑠𝑖 𝑄で検証可能 25 / 50
  26. 26. • 𝑛人のグループ𝐺 • DKG(後述)を用いてそれぞれに𝑠𝑖を配布, 𝑠𝑖 𝑄を共有 • 全体の検証鍵𝑠𝑄はそれぞれの𝑠𝑖 𝑄から復元可能 • 𝑠は誰も知らない • 合意形成 • 各自が署名𝑠𝑖 𝐻(𝑚)を作る • 𝑛人のうち𝑘人が集まると𝑠𝐻(𝑚)を復元 • この値を元に次の乱数を決める • これらのステップで決まる値は • DKG後の初期値から全て決定的で一意 • 合意無しにはだれも予測できない 乱数の更新 26 / 50
  27. 27. • 信頼された第三者機関に頼らずに 複数人のユーザが秘密鍵と公開鍵を共有する • Feldmanの検証可能な秘密分散(Verifiable SS) • Shamirの秘密分散で最初に𝑓0 𝑃, … , 𝑓𝑘−1 𝑃を公開 • ユーザ𝑖は受け取った(𝑢𝑖, 𝑓 𝑢𝑖 )から σ 𝑗 𝑢𝑖 𝑗 𝑓𝑗 𝑃 = 𝑓 𝑢𝑖 𝑃を計算 • これが𝑓 𝑢𝑖 × 𝑃に等しいことを確認 • 秘密分散した人が嘘をつけない DKG(distributed key generation) 27 / 50
  28. 28. • 各自がFeldmanのVSSを実行しそれらを結合する • ユーザ𝑖は𝑓𝑖 𝑥 ∶= σ 𝑘 𝑓𝑖,𝑘 𝑥 𝑘を作り{𝑓𝑖,0 𝑃, … , 𝑓𝑖,(𝑘−1) 𝑃}を公開 • ユーザ𝑗に(𝑢𝑗, 𝑓𝑖 𝑢𝑗 )を配布 • ユーザ𝑖は受け取った𝑓𝑗(𝑢𝑖))を検証しσ 𝑗 𝑓𝑗(𝑢𝑖)を計算 • 𝑓 𝑥 ≔ σ 𝑗 𝑓𝑗(𝑥)とすると各ユーザは𝑓(𝑢𝑖)を取得できた • 𝑓の値はだれも知らない • 厳密には𝑓の分布が完全ランダムにはならない攻撃がある • https://link.springer.com/chapter/10.1007/3-540-48910-X_21 • Dfinityのケースでは安全性に影響がないと判断 joint-Feldman SS 𝑖 𝑓𝑖(𝑢1) 1 𝑗 𝑓𝑖(𝑢𝑗) 𝑖1 𝑗 𝑓1(𝑢𝑖) 𝑓𝑗(𝑢𝑖) 配布 検証 ෍ 𝑗 𝑓𝑗(𝑢𝑖) 結合 28 / 50
  29. 29. • 誰が誰にいくら払ったのか隠したい • こうしたい • 𝑎, 𝑏, 𝑐, 𝑑の中身を知らなくても 𝑎 = 𝑏 + 𝑐 + 𝑑が成り立つことを確認したい 秘匿性 Aliceの100円 手数料5円 Bobの30円 Aliceの65円 ?の𝑎円 手数料𝑑円 ?の𝑏円 ?の𝑐円 29 / 50
  30. 30. • 公平なジャンケンをするためのもの • Aliceが手を決めてコミットメント𝑐をBobに渡す • Bobも同様に𝑐′をAliceに渡す • 𝑐, 𝑐′を受け取ったら手を明かす • その手からコミットメントが正しいかを確認する • 秘匿性 : コミットメントから手の情報は得られない • 拘束性 : コミットメント時の情報は後で変えられない コミットメント 30 / 50
  31. 31. • 𝑃, 𝑄を互いに何倍か分からない楕円曲線の点とする • 𝑥に対するコミットメント • 乱数𝑟をとり𝑐 𝑥, 𝑟 ≔ 𝑥𝑃 + 𝑟𝑄とする • オープン • 𝑥, 𝑟を公開する𝑐 𝑥, 𝑟 = 𝑐を確認する • 拘束性 • 𝑐 𝑥, 𝑟 = 𝑐(𝑥′, 𝑟′)となる𝑥′ ≠ 𝑥を作れたとすると 𝑥𝑃 + 𝑟𝑄 = 𝑥′ 𝑃 + 𝑟′ 𝑄 ⟺ 𝑃 = 𝑟′ − 𝑟 𝑥 − 𝑥′ 𝑄 • 離散対数の困難さからこれは無理 • 加法準同型性 • 𝑐 𝑥, 𝑟 + 𝑐 𝑥′, 𝑟′ = 𝑥 + 𝑥′ 𝑃 + 𝑟 + 𝑟′ 𝑄 = 𝑐(𝑥 + 𝑥′, 𝑟 + 𝑟′) Pedersenのコミットメント 31 / 50
  32. 32. • 暗号化(or その他の変換)したまま計算できる • 加法準同型暗号 • 𝐸𝑛𝑐 𝑚1 + 𝐸𝑛𝑐 𝑚2 = 𝐸𝑛𝑐 𝑚1 + 𝑚2 • 𝐸𝑛𝑐 𝑎 = 𝐸𝑛𝑐 𝑏 + 𝐸𝑛𝑐 𝑐 + 𝐸𝑛𝑐(𝑑)を確認すれば 中身を知らなくても𝑎 = 𝑏 + 𝑐 + 𝑑を確認できる • 注意 • 2個の暗号文𝐸𝑛𝑐(𝑥)と𝐸𝑛𝑐(𝑦)があったときに それらを比較しても𝑥 = 𝑦か不明(通常𝐸𝑛𝑐 𝑥 ≠ 𝐸𝑛𝑐(𝑦)) • 暗号の安全性に関わる性質 • 𝑥, 𝑦を知らずに𝑥 = 𝑦を確認する(ゼロ知識証明) 準同型性 32 / 50
  33. 33. • 𝐸𝑛𝑐 𝑎 = 𝐸𝑛𝑐 𝑏 + 𝐸𝑛𝑐(𝑐)が確認できたとしても • 100円 = 1000円 +(-900)円かもしれない • マイナスを許すとお金を増やせてしまう • 暗号文の範囲制約が必要 • 範囲制約の一つのやり方 • 𝑥 = σ𝑖 𝑥𝑖2𝑖と2進数展開(0 ≤ 𝑥 < 232を仮定) • 𝐸𝑛𝑐(𝑥𝑖)は𝑥𝑖 = 0 or 1を暗号化したもの • これはゼロ知識証明を使って検証できる • {𝐸𝑛𝑐 𝑥𝑖 }が全て0 or 1であることを検証したら 𝐸𝑛𝑐 𝑥 = 𝐸𝑛𝑐(σ𝑖 2𝑖 𝑥𝑖) = σ𝑖 2𝑖 𝐸𝑛𝑐(𝑥𝑖)で𝐸𝑛𝑐(𝑥)を構成 • 0 ≤ 𝑥 < 232を保証できる • コミットメントではリング署名などを利用 範囲制約 33 / 50
  34. 34. • 動機 • Aliceは関数𝑓と秘密の入力𝑤と秘密でない入力𝑥に対して 𝑦 = 𝑓(𝑥, 𝑤)を計算する • BobはAliceがちゃんと𝑓(𝑥, 𝑤)を計算したことを確認したい • ただし𝑤も𝑦も知らないままで • 𝑓を𝑓 − 𝑦に置き換えるとBobは 「Aliceが𝑥に対して𝑓 𝑥, 𝑤 = 0となる𝑤を知っている」 ことを確認することになる • 利用しているところ • Zcash(https://z.cash) 匿名仮想通貨 • Ethereumのスマートコントラクト zk-SNARK 34 / 50
  35. 35. • 鍵生成 • 多項式系回路𝐶に対して証明鍵𝑝𝑘と検証鍵𝑣𝑘を出力 • 証明 • 𝑝𝑘と𝐶 𝑥, 𝑤 = 0となる任意の𝑥, 𝑤に対して証明𝜋を出力 • 検証 • 𝑣𝑘と𝑥と𝜋に対して𝐶 𝑥, 𝑤 = 0となる𝑤が存在することを 確信できれば1, そうでなければ0を返す • 満たすべき性質 • 完全性 ; 証明者が正しく𝜋を出力すれば必ず検証は通る • 健全性 ; 証明者が𝐶 𝑥, 𝑤 = 0となる𝑤を知らずに作った𝜋は 検証を通らない • ゼロ知識性 ; 𝜋から𝑤に関する情報は得られない 定式化 35 / 50
  36. 36. • Zero-Knowledge Succinct Non-interactive ARGument of Knowledge • Zero-Knowledge ; ゼロ知識 • Succinct ; 証明の大きさが小さい(簡潔) • Non-interactive ; 非対話(一方向通信が一度だけ) • ARGument ; 証明者の演算能力に計算量的制約を仮定 • 仮定しない場合はProof zk-SNARK名前の由来 36 / 50
  37. 37. • boolean回路 • and, or, notなどと0 or 1の値をとる変数からできている • 𝑛𝑜𝑡 𝑥 = 1 − 𝑥 • 𝑎𝑛𝑑 𝑥1, 𝑥2 = 𝑥1 𝑥2 • 𝑜𝑟 𝑥1, 𝑥2 = 𝑛𝑜𝑡(𝑎𝑛𝑑(𝑛𝑜𝑡 𝑥1 , 𝑛𝑜𝑡 𝑥2 ) = 1 − 1 − 𝑥1 1 − 𝑥2 • 充足可能性問題(SAT: satisfiability problem) • 与えられた多項式を1にする{𝑥𝑖}が見つかるか • 算術回路 • 加減算, 乗算からなる多項式 • 例:𝑓 𝑐1, 𝑐2, 𝑐3 = 𝑐1 𝑐2(𝑐1 + 𝑐3) 回路 𝑐1 × 𝑐2 𝑐3 + × 𝑓(𝑐1, 𝑐2, 𝑐3) 37 / 50
  38. 38. • Quadratic Span/Arithmetic Problem • 一つの式に掛け算一つになるよう 変数を増やして式を分解する • 𝑐1 𝑐2 = 𝑐4 • 𝑐4 𝑐1 + 𝑐3 = 𝑐5 • 掛け算のノードにラベルを振る • 𝑔1 = 1, 𝑔2 = 2とし 𝑏𝑖 𝑔𝑗 = 𝛿𝑖𝑗となる多項式を準備 • 𝑏1 𝑥 = 2 − 𝑥, 𝑏2 𝑥 = 𝑥 − 1 • 各ノードの左辺, 右辺の入力と出力に 多項式𝐿𝑖, 𝑅𝑖, 𝑂𝑖を割り当てる • 𝑔𝑖上で𝐿𝑖 𝑅𝑖 = 𝑂𝑖 QSP/QAP 𝑐1 × 𝑐2 𝑐3 + × 𝑓(𝑐1, 𝑐2, 𝑐3) 38 / 50 𝑔𝑖 𝐿𝑖 𝑅𝑖 𝑂𝑖 𝑔1 𝑔2
  39. 39. • 例:𝑓 𝑐1, 𝑐2, 𝑐3 = 𝑐1 𝑐2(𝑐1 + 𝑐3) • 𝑐4 = 𝑐1 𝑐2, 𝑐5 = 𝑐4(𝑐1 + 𝑐3) • 𝑏1 𝑥 = 2 − 𝑥, 𝑏2 𝑥 = 𝑥 − 1 • 割り当て表 • 𝐿 𝑥 ≔ σ𝑖 𝑐𝑖 𝐿𝑖 𝑥 = 𝑐1 𝑏1(𝑥) + 𝑐4 𝑏2 𝑥 • 𝑅 𝑥 ≔ σ𝑖 𝑐𝑖 𝑅𝑖 𝑥 = 𝑐2 𝑏1 𝑥 + 𝑐1 + 𝑐3 𝑏2(𝑥) • 𝑂 𝑥 ≔ σ𝑖 𝑐𝑖 𝑂𝑖 𝑥 = 𝑐4 𝑏1 𝑥 + 𝑐5 𝑏2(𝑥) • 𝑉 𝑥 ≔ 𝐿 𝑥 𝑅 𝑥 − 𝑂(𝑥) 算術回路からQAP 𝒄 𝟏 𝒄 𝟐 𝒄 𝟑 𝒄 𝟒 𝒄 𝟓 𝐿𝑖 𝑏1 0 0 𝑏2 0 𝑅𝑖 𝑏2 𝑏1 𝑏2 0 0 𝑂𝑖 0 0 0 𝑏1 𝑏2 39 / 50 𝑐1 𝑔1 𝑐2 𝑐4 𝑐4 𝑔2 𝑐1 + 𝑐3 𝑐5
  40. 40. • ラベル𝑔𝑖 = 𝑖上で𝑏𝑖 𝑔𝑗 = 𝛿𝑖𝑗なので • 𝑃 1 = 𝑐1 𝑐2 − 𝑐4 • 𝑃 2 = 𝑐4 𝑐1 + 𝑐3 − 𝑐5 • 𝑃 1 = 𝑃 2 = 0なら𝑐1 𝑐2 = 𝑐4, 𝑐4 𝑐1 + 𝑐3 = 𝑐5 • これはもとの𝑓()を正しく計算していることになる • ターゲット多項式 • 𝑇 𝑥 ≔ ς𝑖(𝑥 − 𝑔𝑖) ; 今の場合は𝑇 𝑥 = (𝑥 − 1)(𝑥 − 2) • 𝑉 𝑔𝑖 = 0 ⇔ 𝑉(𝑥)が𝑇(𝑥)で割り切れる • 定義 • 多項式𝐿𝑖, 𝑅𝑖, 𝑂𝑖, 𝑇の組をQAPという • 𝑉が𝑇で割り切れるとき(𝑐𝑖)はQAPを満たすという • QAPを満たすことを確認できれば答えを知っている QAPの性質 40 / 50
  41. 41. • 𝑑次多項式𝑓は高々𝑑個の解しか持たない • 勝手な𝑠に対して𝑓 𝑠 = 0となる確率は極めて低い • 𝑓 𝑠 = 0なら無視できる確率を除いて𝑓 ≡ 0である • 多項式のチェックを1点で代用する • Alice ; 多項式𝐿, 𝑅, 𝑂, 𝐻を選ぶ(𝑇は公開されている) • Bob ; 勝手な𝑠を選び 𝐿 𝑠 𝑅 𝑠 − 𝑂 𝑠 = ? 𝑇 𝑠 𝐻 𝑠 を確認すればAliceが正しい計算をしたと受理する • 要件 • Aliceは多項式を教えたくない • Bobは𝑠を教えたくない • どうやって? 多項式の確認 41 / 50
  42. 42. • Pedersenのコミットメント的なことをする • 𝑃を楕円曲線の点として𝐸 𝑥 = 𝑥𝑃とする • 多項式𝑓 𝑥 = σ𝑖 𝑎𝑖 𝑥 𝑖に対して 𝐸 𝑓 𝑠 = σ𝑖 𝑎𝑖(𝑠 𝑖 𝑃)は𝑃, 𝑠𝑃, 𝑠2 𝑃, …の線形和で計算可能 • サブプロトコル • Bobは𝑃, 𝑠𝑃, 𝑠2 𝑃, …を公開する • Aliceは𝐸(𝑓 𝑠 )を計算してBobに送る 𝑠の秘匿化 42 / 50
  43. 43. • Bobは𝐸(𝑓 𝑠 )が正しいと検証できるのか? • 𝑓(𝑥)を知らないのに • 𝑑-KC(Knowledge of Coefficient)仮定 • 𝑠, 𝛼を秘密とする 𝑃, 𝛼𝑃 , 𝑠𝑃, 𝛼𝑠𝑃 , … , (𝑠 𝑑 𝑃, 𝛼𝑠 𝑑 𝑃)が与えられたとき (𝑋, 𝛼𝑋)となっている𝑋はそれらの線形和の形でしか作れない • ペアリングベースはKnowledge of Exponentなどの派生仮定 • サブプロトコル • Bobが 𝑃, 𝛼𝑃 , 𝑠𝑃, 𝛼𝑠𝑃 , … , (𝑠 𝑑 𝑃, 𝛼𝑠 𝑑 𝑃)を公開する • Aliceは𝐸(𝑓 𝑠 )と𝐸(𝛼𝑓 𝑠 )を計算して返す • Bobは𝛼𝐸 𝑓 𝑠 = 𝐸(𝛼𝑓 𝑠 )を確認して 何らかの多項式を評価したものだと受理する 𝐸(𝑓 𝑠 )の確認 43 / 50
  44. 44. • ペアリング再び • 𝐺1 = 𝑃 , 𝐺2 = 𝑄 , 𝑒: 𝐺1 × 𝐺2 → 𝐺 𝑇とする • 𝐸1 𝑥 = 𝑥𝑃, 𝐸2 𝑥 = 𝑥𝑄とすると • 𝑠𝑃, 𝑠2 𝑃, …, 𝑠𝑄, 𝑠2 𝑄, … , 𝛼𝑠𝑃, 𝛼𝑠2 𝑃, …を公開しておけば 𝐸1 𝑓 𝑠 , 𝐸2 𝑔 𝑠 を計算できる • ペアリングの性質から 𝑒(𝐸1 𝑓 𝑠 , 𝐸2(𝑔 𝑠 )) = 𝑒(𝑃, 𝐸2(𝑓 𝑠 𝑔 𝑠 )) より𝐸1(𝑓 𝑠 )と𝐸2(𝑔 𝑠 )を「乗算」可能 𝐿(𝑠)と𝑅(𝑠)の乗算が必要 44 / 50
  45. 45. • 準備 • ペアリングの選択 • Bobは𝑠を選び𝑠𝑃, 𝑠2 𝑃, …を公開する • Aliceは𝐿, 𝑅, 𝑂, 𝐻を選び 𝐸1 𝐿 𝑠 , 𝐸2 𝑅 𝑠 , 𝐸1 𝑂 𝑠 , 𝐸1(𝐻 𝑠 )を計算して送る • Bobはそれらの正当性を確認したら𝐸2(𝑇 𝑠 )を計算し 𝑒 𝐸1 𝐿 𝑠 , 𝐸2 𝑅 𝑠 𝑒 −𝐸1 𝑂 𝑠 , 𝑄 = ? 𝑒 𝐸1 𝐻 𝑠 , 𝐸2 𝑇 𝑠 を比較して𝐿 𝑠 𝑅 𝑠 − 𝑂 𝑠 = 𝐻 𝑠 𝑇(𝑠)を確認する • 正しく回路の計算をしたと受理する 秘匿化されたプロトコル 45 / 50
  46. 46. • ゼロ知識化 • 𝐸(𝐿 𝑠 )などからの情報漏洩をなくす • 非対話型化 • 検証可能な公開鍵の配布方法など • zk-STARK • Scalable Transparent ARguments of Knowledge • SNARKでは鍵生成時に必要な信頼された機関を取り除く • 高いスケーラビリティ • Scalable, transparent, and post-quantum secure computational integrity, https://eprint.iacr.org/2018/046 その他のテクニック 46 / 50
  47. 47. • BN254 ; 256bit BN曲線 • 近年の攻撃手法の改良により100~110bitセキュリティレベル • https://github.com/herumi/ate-pairing • 0.2msec on Intel Core i7-7700 3.6GHz • 2015年時世界最速(おそらく今でも) • BN381 ; 128bitセキュリティレベルぐらい? • BLS12-381 ; Zcashが選定 ; 群の位数が256bitに納まる • https://z.cash/blog/new-snark-curve • BN254の3倍程度重い ペアリングの種類 47 / 50
  48. 48. • いくつかの実装比較 • 粟野, 市橋, 池田, “2次拡大体上の汎用演算器を用いた254bit素 数ペアリング向けASICコプロセッサ”, SCIS2018 2D4-3 p.8 ペアリングのハードウェア実装 48 / 50 私のソフトウェア実装
  49. 49. • WebAssembly(https://webassembly.org) • JavaScriptを補完するブラウザで動作する仮想マシン • 各種言語(C/C++, C#, Haskellなど)から生成可能 • 標準化されているため Edge, Chrome, Firefox, Safari, Android, iPhoneなどで動作 • 仮想通貨を扱うアプリをWASM上で動作させる • EVM ; Ethereum用WASMのサブセット • サンプルデモ • BLS署名(https://github.com/herumi/bls-wasm) • L2準同型暗号(https://github.com/herumi/she-wasm) • 我々のASIACCS2018の結果を実装したもの (暗号技術ではないが)WASM 49 / 50
  50. 50. • 仮想通貨は新しい暗号技術の採用に積極的 • 準同型暗号 • 高機能署名 • ゼロ知識証明 • ペアリング • 従来の楕円曲線暗号に比べて重たい処理が多い • ハードウェアによる支援 • 将来的にはWASM VMのハードウェア化? まとめ 50 / 50

×