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

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

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