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.

Post-quantum zk-SNARKs on Hyperledger Fabric​

254 views

Published on

ブロックチェーン上での匿名性を担保する技術として、ゼロ知識証明の利用が検討されている。
本講演では、ZcashやEthereum等で利用されているゼロ知識証明:zk-SNARK方式をコンソーシアムブロックチェーン向けに最適化し、さらに量子計算機耐性を有するように改良した方式を提案する。
また、Hyperledger Fabricに提案方式を実装し、チェインコード上でzk-SNARKを利用する際のアーキテクチャ、パフォーマンス評価の結果に関しても述べる。

講演者 : 長沼 健 氏 株式会社日立製作所
2019年12月5日開催 Hyperleger Tokyo Meetup にて講演

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Post-quantum zk-SNARKs on Hyperledger Fabric​

  1. 1. © Hitachi,Ltd. 2019.All rights reserved. Post-quantum zk-SNARKs on Hyperledger Fabric 株式会社日立製作所 社会システム研究部 長沼健
  2. 2. © Hitachi,Ltd. 2019. All rights reserved. 2 目次 • ゼロ知識証明とは? • ブロックチェーンでどうやってゼロ知識証明を使うのか? • セキュアスマートコントラクト • Hyperledger Fabricでの実装アーキテクチャ • 評価実験 • まとめ
  3. 3. © Hitachi,Ltd. 2019. All rights reserved. 3 目次 • ゼロ知識証明とは? • ブロックチェーンでどうやってゼロ知識証明を使うのか? • セキュアスマートコントラクト • Hyperledger Fabricでの実装アーキテクチャ • 評価実験 • まとめ
  4. 4. © Hitachi,Ltd. 2019. All rights reserved. 4 ゼロ知識証明とは? ゼロ知識証明(zero-knowledge proof)とは、証明者(Prover)が検証者(Verifier)に、 自分の持っている命題が真であることを伝えるのに、真であること以外、 何の知識も伝えることなく証明できるような対話(非対話)知識証明プロトコルである。 by Wikipedia Alice (Prover)は命題Pが真(True)である事を誰かに証明したい 命題P: 私は二十歳以上だ 命題P: 私はある暗号の秘密鍵 を知っている
  5. 5. © Hitachi,Ltd. 2019. All rights reserved. 5 ゼロ知識証明とは? Alice (Prover)は命題Pが真(True)である事をBob(Verifier)にゼロ知識証明したい 命題P: 私は二十歳以上だ 命題Pの証明(真である証拠)出せ 運転免許証提示 運転免許証提示でAlice (Prover)は命題Pが真(True)である事をBobに証明 できるがゼロ知識ではない。生年月日から年齢などが漏れている。 どんなものがゼロ知識証明と言えるのか? Alice Bob
  6. 6. © Hitachi,Ltd. 2019. All rights reserved. 6 ゼロ知識証明とは? Alice (Prover)は命題Pが真(True)である事をBob(Verifier)にゼロ知識証明したい Enc(pk, r) 乱数[r]を生成 Bob(Verifier)は自分で生成した乱数[r]を貰うだけなので、 対話終了後に秘密鍵に関する知識をゲットしていない⇒ゼロ知識っぽい 命題P: 私は公開鍵[pk]に対する 秘密鍵を知っている r 秘密鍵を知っているのでEnc(pk, r) を復号して平文[r]を計算可能 ※当然、AliceがBobに秘密鍵を渡せばPが真である事は 証明できるが、ゼロ知識でない(Bobは秘密鍵に関する情報を得ているので)。
  7. 7. © Hitachi,Ltd. 2019. All rights reserved. 7 目次 • ゼロ知識証明とは? • ブロックチェーンでどうやってゼロ知識証明を使うのか? • セキュアスマートコントラクト • Hyperledger Fabricでの実装アーキテクチャ • 評価実験 • まとめ
  8. 8. © Hitachi,Ltd. 2019. All rights reserved. 8 プラバシー vs 透明性 Blockchain data Tx Data ID:101のbitcoinは Aliceが持っています Tx Data ID:100のbitcoinは Tomが持っています Tx Data ID:101のbitcoinは AliceからBobに送金 されました Aliceの署名 Tx Data ID:101のbitcoinは BobからTomに送金さ れました Bobの署名 参照可能 参照可能 参照可能 透明性 プライバシ Public Blockchainの台帳データはネットワーク上の誰でも参照可能 ⇒透明性maxでプライバシーなし トランザクションデータを暗号化(or hash化)したら、プライバシーは保たれるが、 マイナーがトランザクションの正当性を確認不能になる
  9. 9. © Hitachi,Ltd. 2019. All rights reserved. 9 もしトランザクションが暗号化されていると・・・ プライバシ保護のためUTXOで送金額が暗号化されたとすると・・・ [inputの金額の合計]=[outputの金額の合計] (手数料は0とする) また、送金額は0以上の値 BCネットワーク TX data [input] 100coin from: Tom to: Alice [output] Enc(80coin) from: Alice to: Bob [output] Enc(50coin) from: Alice to: Alice 悪いAlice Aliceは100coin分のunspent transactionのうち80をBobに送金、20をAliceに送金(おつ り)するが、送金額が暗号化されている事をいいことに、おつりを50に不正に変更。 マイナーは復号化鍵をもっていないので金額不正に気付かない! Miner or Endorser Miner or Endorser
  10. 10. © Hitachi,Ltd. 2019. All rights reserved. 10 ブロックチェーンとゼロ知識証明の関係 一般的なゼロ知識証明の使い方 トランザクション内のプライバシ情報を秘匿化した際に正当性をゼロ知識で与える 秘匿化されたTx +ゼロ知識証明 Tx Data ID:101のbitcoinは Aliceが持っています Tx Data ID:100のbitcoinは Tomが持っています Tx Data From: ??? To: ??? Amount: ??? Aliceの署名 プライバシ情報は秘匿化されているが、 正当性を示すゼロ知識証明が付いている Miner or Endorser 不正は無さそうだ な!!
  11. 11. © Hitachi,Ltd. 2019. All rights reserved. 11 目次 • ゼロ知識証明とは? • ブロックチェーンでどうやってゼロ知識証明を使うのか? • セキュアスマートコントラクト • Hyperledger Fabricでの実装アーキテクチャ • 評価実験 • まとめ
  12. 12. © Hitachi,Ltd. 2019. All rights reserved. 12 Secure Smart Contractのイメージ Blockchain data Smart Contract SC logic deploy 引数 arg1 引数 arg2 戻り値 result この部分を秘匿化(正確にはアクセス制御)したい! ・Alice(contract owner)はSCをBC上にdeploy ・Tom, BobはそのSCに対してargument txを送信 ・Alice(or 誰かが)SCをargに対して実行し、結果をBCに記録 この時、arg, resultを適切にアクセス制御したい (i.e., argは本人とAlice(contract owner)のみ閲覧可能、resultも関係者のみ閲覧可) SCのロジック自体は誰でも閲覧可能(open) Alice Tom Bob
  13. 13. © Hitachi,Ltd. 2019. All rights reserved. 13 実例:2nd price auction auction seller Bidder A Bidder B Bidder C 1000円! 2000円! 500円! Bidder B 落札者 (Winner) priceは1000円(2nd price) ・各入札者は1度だけ払っても良い最高額を入札する(bidding) ・最高額を入札した人が落札者winnerになる(下の図ではbidder A) ・落札者が支払う金額は入札額2位の人の金額(下の図ではbidder Cの9万円) ※1st priceオークションと違い、払いすぎる心配がない
  14. 14. © Hitachi,Ltd. 2019. All rights reserved. 14 BC上で2nd priceオークションは可能か? Blockchain data Smart Contract hogehoge deploy 引数 arg1 = 1000円 引数 arg2 = 2000円 引数 arg3 = 500円 戻り値 winner = bidder B 2nd price = 1000円 引数に対してSC実行Bidder A Bidder B Bidder C 【懸念点】引数、戻り値がopenだと・・・ ・2nd priceオークションにならない、公開入札(English auction)になる ・Bidder A入札後、Sellerの利得最大化のために、1,999円で入札される(1st price) ・みんなの入札金額、落札者がopenになる(プライバシ問題) ⇒引数、戻り値の暗号化が必要 【懸念点】引数、戻り値を暗号化し、Sellerにのみ開示すると・・・ ・Sellerが実行結果を改ざんできる(e.g. 2nd price=1,999円) Seller
  15. 15. © Hitachi,Ltd. 2019. All rights reserved. 15 2nd priceオークションのロジック 1: winner = 0 2: max = 0 3: 2nd_price = 0 4: 5: // Nは入札者数 6: for i=0;i<N;i++ 7: 8: // 勝者判定 9: if bidder[i].price > max 10: winner = i 11: 2nd_price = max 12: max = bidder[i].price 13: 14: return {winner, 2nd_price} ※疑似コード 後でSellerが実行する。 全員の入札金額はSellerしか知らないので、不正改ざんしてもばれない。
  16. 16. © Hitachi,Ltd. 2019. All rights reserved. 16 ゼロ知識証明を使って不正改ざんを防止 Blockchain dataChaincode hogehoge pk Seller Endorser Phase 1, 2(initialization & deploy): Sellerは2nd priceオークションのチェインコードをデプロイ (Fabric)CAはこのチェインコードに対して以下のzk-SNARKのパラメータを生成する ・ゼロ知識証明生成用の鍵pk⇒Sellerに渡す ・ゼロ知識証明検証用の鍵vk⇒Peerに渡す vk
  17. 17. © Hitachi,Ltd. 2019. All rights reserved. 17 ゼロ知識証明を使って不正改ざんを防止 Blockchain dataChaincode hogehoge pk Seller Phase 3(betting): 各Bidderはtemp key(KA,KB,KC)を生成し、入札金額のHmac値を台帳に書く vk 引数 arg1 = Hmac(KA, 1000) 引数 arg2 = Hmac(KB, 2000) 引数 arg3 = Hmac(KC, 500) Bidder A Bidder B Bidder C Endorser
  18. 18. © Hitachi,Ltd. 2019. All rights reserved. 18 ゼロ知識証明を使って不正改ざんを防止 Blockchain dataChaincode hogehoge pk Seller Phase 4(execution): オフライン処理に注意!! 各Bidderはtemp keyと入札金額をSellerに渡す(Logicの引数たち) Sellerは2nd priceオークションのロジックを実行し、winnerと2nd priceを算出、 確かにロジックを実行した、という証拠にpkを使ってゼロ知識証明[π]を生成 vk 引数 arg1 = Hmac(KA, 1000) 引数 arg2 = Hmac(KB, 2000) 引数 arg3 = Hmac(KC, 500) Bidder A Bidder B Bidder C (KB, 2000)(KA, 1000) (KC, 500) Endorser
  19. 19. © Hitachi,Ltd. 2019. All rights reserved. 19 ゼロ知識証明を使って不正改ざんを防止 Blockchain dataChaincode hogehoge pk Seller Phase 5(result): Sellerは(winner, 2nd price, π)を台帳に書き込む(現状版では戻り値はopen) が、この際にPeerが[正しい引数(1000, 2000, 500)]で[2nd priceのロジック]が 実行されたかを検証する(invalidならtxは書き込まれない) この検証は検証鍵[vk]と[π]と台帳上の[HMAC値]のみで可能 vk 引数 arg1 = Hmac(KA, 1000) 引数 arg2 = Hmac(KB, 2000) 引数 arg3 = Hmac(KC, 500) Bidder A Bidder B Bidder C 戻り値 winner = Bidder B 2nd price = 1000円 ZKP: π Check Endorser
  20. 20. © Hitachi,Ltd. 2019. All rights reserved. 20 目次 • ゼロ知識証明とは? • ブロックチェーンでどうやってゼロ知識証明を使うのか? • セキュアスマートコントラクト • Hyperledger Fabricでの実装アーキテクチャ • 評価実験 • まとめ
  21. 21. © Hitachi,Ltd. 2019. All rights reserved. 21 Hyperledger Fabricでの実装アーキテクチャ ・ゼロ知識証明したいコントラクトをユーザが指定 ・Fabric CAがコントラクトのロジックに対して、ゼロ知識証明生成鍵/検証鍵を生成 ・ゼロ知識証明生成鍵をユーザ、検証鍵をEndorserに配布 ・ユーザはendorsementの際に、ゼロ知識証明を生成、txに付与 ・Endorserは検証鍵を使ってゼロ知識証明を検証 BCネットワーク Endorserユーザ Fabric CA PK (証明生成鍵) VK(証明検証鍵) Chaincode hogehoge Chaincode hogehoge TX+ZKP: π
  22. 22. © Hitachi,Ltd. 2019. All rights reserved. 22 修正版:2nd priceオークションのロジック 1: winner = 0 2: max = 0 3: 2nd_price = 0 4: 5: // Nは入札者数 6: for i=0;i<N;i++ 7: 8: // 入力値の不正チェック 9: if bidder[i].hashed_price != hmac(bidder[i].hash_key, bidder[i].price) 10: abort() 11: 12: // 勝者判定 13: if bidder[i].price > max 14: winner = i 15: 2nd_price = max 16: max = bidder[i].price 17: 18: return {winner, 2nd_price} ※疑似コード ロジックに入力金額の不正が無いかチェックする機能を追加(8~10行目) ZKP + verification keyと公開情報のみを用いて、上記のロジックが 確かに実行された事を確認可能(verifiable computation)
  23. 23. © Hitachi,Ltd. 2019. All rights reserved. 23 目次 • ゼロ知識証明とは? • ブロックチェーンでどうやってゼロ知識証明を使うのか? • セキュアスマートコントラクト • Hyperledger Fabricでの実装アーキテクチャ • 評価実験 • まとめ
  24. 24. © Hitachi,Ltd. 2019. All rights reserved. 24 性能評価実験 0.0 5.0 10.0 15.0 20.0 25.0 0 5000 10000 15000 20000 25000 30000 35000 0.0000 0.0002 0.0004 0.0006 0.0008 0.0010 0.0012 0 5000 10000 15000 20000 25000 30000 35000 回路サイズ回路サイズ 処 理 時 間 ( 秒 ) 処 理 時 間 ( 秒 ) ユーザ処理 ゼロ知識証明生成 Endorser処理 ゼロ知識証明検証 評価方法 量子計算機への耐性を考慮し、LWE暗号方式をベースに方式設計 zk-SNARKの標準ライブラリlibsnarkの一部機能を利用し実装 様々な回路サイズ(スマートコントラクトのサイズ)に対して評価実験を実施 実験結果(評価PCはIntel(R) Core(TM) i7-9700K CPU @ 3.60GHz ×8) ・ユーザ側の処理時間(ゼロ知識証明生成)は回路サイズに比例して増加 ⇒Hash関数の評価には210秒, 300GBのメモリが必要になる計算 ・Endorserの処理時間(ゼロ知識証明検証)は回路サイズによらず1msec程度
  25. 25. © Hitachi,Ltd. 2019. All rights reserved. 25 目次 • ゼロ知識証明とは? • ブロックチェーンでどうやってゼロ知識証明を使うのか? • セキュアスマートコントラクト • Hyperledger Fabricでの実装アーキテクチャ • 評価実験 • まとめ
  26. 26. © Hitachi,Ltd. 2019. All rights reserved. 26 まとめ やったことのまとめ 1. 量子計算機耐性を有するzk-SNARK方式を設計、libsnarkへ実装 2. Hyperledger Fabric向けの実装アーキテクチャを設計、Endorsement Peerへゼロ知識証明の検証機能をプラグイン実装 3. ゼロ知識証明初心者向けに、いくつかのガジェット作成 今後の課題 1. ゼロ知識証明生成の処理軽量化 2. Universal Circuitへの対応(Fabric CAの処理軽量化&trustless) 3. 初心者向け&開発効率向上に向けたガジェットの拡充 4. ユーザ証明書の属性、資格情報をゼロ知識証明する機能等

×