SlideShare a Scribd company logo
1 of 50
Download to read offline
ブロックチェーン系プロジェクトで
着目される暗号技術
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

More Related Content

What's hot

暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がりMITSUNARI Shigeo
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料Tetsuyuki Oishi
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advancedMITSUNARI Shigeo
 
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明MITSUNARI Shigeo
 
範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコルMITSUNARI Shigeo
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたことMITSUNARI Shigeo
 
『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会MITSUNARI Shigeo
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界maruyama097
 
Post-quantum zk-SNARKs on Hyperledger Fabric​
Post-quantum zk-SNARKs on Hyperledger Fabric​Post-quantum zk-SNARKs on Hyperledger Fabric​
Post-quantum zk-SNARKs on Hyperledger Fabric​Hyperleger Tokyo Meetup
 

What's hot (20)

暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
暗認本読書会12
暗認本読書会12暗認本読書会12
暗認本読書会12
 
技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料技術勉強会(楕円曲線暗号)資料
技術勉強会(楕円曲線暗号)資料
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
暗認本読書会11
暗認本読書会11暗認本読書会11
暗認本読書会11
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advanced
 
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
レベル2準同型暗号の平文バイナリ制約を与えるコンパクトな非対話ゼロ知識証明
 
集約署名
集約署名集約署名
集約署名
 
範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会『データ解析におけるプライバシー保護』勉強会
『データ解析におけるプライバシー保護』勉強会
 
暗認本読書会7
暗認本読書会7暗認本読書会7
暗認本読書会7
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界「型の理論」と証明支援システム -- COQの世界
「型の理論」と証明支援システム -- COQの世界
 
暗認本読書会10
暗認本読書会10暗認本読書会10
暗認本読書会10
 
Post-quantum zk-SNARKs on Hyperledger Fabric​
Post-quantum zk-SNARKs on Hyperledger Fabric​Post-quantum zk-SNARKs on Hyperledger Fabric​
Post-quantum zk-SNARKs on Hyperledger Fabric​
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 

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

『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算MITSUNARI Shigeo
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
Provable Security3
Provable Security3Provable Security3
Provable Security3Satoshi Hada
 
Introduction to Locally Testable Codes and Related Topics (in Japanese)
Introduction to Locally Testable Codes and Related Topics (in Japanese)Introduction to Locally Testable Codes and Related Topics (in Japanese)
Introduction to Locally Testable Codes and Related Topics (in Japanese)Nobutaka Shimizu
 
バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案MITSUNARI Shigeo
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用MITSUNARI Shigeo
 
CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)航貴 齋藤
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001Teruaki Tsubokura
 
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノートWataru Shito
 
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則koba cky
 
Synchronized Aggregate Signatures and Computational Assumptions
Synchronized Aggregate Signatures and Computational AssumptionsSynchronized Aggregate Signatures and Computational Assumptions
Synchronized Aggregate Signatures and Computational AssumptionsMASAYUKITEZUKA1
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!inaz2
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説AtCoder Inc.
 

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

『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
Provable Security3
Provable Security3Provable Security3
Provable Security3
 
Introduction to Locally Testable Codes and Related Topics (in Japanese)
Introduction to Locally Testable Codes and Related Topics (in Japanese)Introduction to Locally Testable Codes and Related Topics (in Japanese)
Introduction to Locally Testable Codes and Related Topics (in Japanese)
 
バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)CoinOtaku授業用スライド(ビットコインの仕組み)
CoinOtaku授業用スライド(ビットコインの仕組み)
 
6 Info Theory
6 Info Theory6 Info Theory
6 Info Theory
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
 
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
 
20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則20130716 はじパタ3章前半 ベイズの識別規則
20130716 はじパタ3章前半 ベイズの識別規則
 
Synchronized Aggregate Signatures and Computational Assumptions
Synchronized Aggregate Signatures and Computational AssumptionsSynchronized Aggregate Signatures and Computational Assumptions
Synchronized Aggregate Signatures and Computational Assumptions
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
 
CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 

More from MITSUNARI Shigeo

Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化MITSUNARI Shigeo
 
LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介MITSUNARI Shigeo
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介MITSUNARI Shigeo
 
A compact zero knowledge proof to restrict message space in homomorphic encry...
A compact zero knowledge proof to restrict message space in homomorphic encry...A compact zero knowledge proof to restrict message space in homomorphic encry...
A compact zero knowledge proof to restrict message space in homomorphic encry...MITSUNARI Shigeo
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生MITSUNARI Shigeo
 
Practical Two-level Homomorphic Encryption in Prime-order Bilinear Groups
Practical Two-level Homomorphic Encryption in Prime-order Bilinear GroupsPractical Two-level Homomorphic Encryption in Prime-order Bilinear Groups
Practical Two-level Homomorphic Encryption in Prime-order Bilinear GroupsMITSUNARI Shigeo
 

More from MITSUNARI Shigeo (18)

暗認本読書会9
暗認本読書会9暗認本読書会9
暗認本読書会9
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
暗認本読書会8
暗認本読書会8暗認本読書会8
暗認本読書会8
 
暗認本読書会6
暗認本読書会6暗認本読書会6
暗認本読書会6
 
暗認本読書会5
暗認本読書会5暗認本読書会5
暗認本読書会5
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 
自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介
 
A compact zero knowledge proof to restrict message space in homomorphic encry...
A compact zero knowledge proof to restrict message space in homomorphic encry...A compact zero knowledge proof to restrict message space in homomorphic encry...
A compact zero knowledge proof to restrict message space in homomorphic encry...
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
Practical Two-level Homomorphic Encryption in Prime-order Bilinear Groups
Practical Two-level Homomorphic Encryption in Prime-order Bilinear GroupsPractical Two-level Homomorphic Encryption in Prime-order Bilinear Groups
Practical Two-level Homomorphic Encryption in Prime-order Bilinear Groups
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

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

  • 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の検証可能な秘密分散(Verifiable SS) • 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 Succinct Non-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/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. • 例:𝑓 𝑐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