Verifier TLS Server xxx.bank.co.jp TLS Client Proover ① ID/Passwordで認証 ② 口座残高を表示しているペー ジをレスポンス ③ xxx.bank.co.jp からの ユーザーの口座残高の証明 • ユーザーは証明したい暗号データが、あるTLS Serverからの情報である ことを証明 • 暗号データを復号 or ゼロ知識で平文に関するステートメントを証明 TLSサーバーに手を加えること無く、任意のWebサイトが分散Oracleとして機能する
Verifier TLS Server Prover P Server =x s G P P =x P G P V =x V G ② P V を送信 ③ P Client =P P + P V を送信 ④ 共有シークレット Z = x S ・P Client を計算。 Zのx座標を使ってTLS-PRFを実行し、 KEnc、KMACを生成。 最初に三者間でハンドシェイクを行い、TLSデータの暗号化/復号化に使用するセッション鍵を生成する。 TLS Serverからみた場合、通常のハンドシェイクに見える。 Proverは Z P = x P ・P Server を保持 Verifierは Z V = x V ・P Server を保持 Z = Z P + Z V (互いにZ P とZ V を明かせない) ⑤ 2PCによりKEnc、KMAC P 、KMAC V を生成 2PC + PRF KEnc、KMAC P KMAC V ① P Server を送信
PRF 8 ProverとVerifierはお互いの秘密鍵を明らかにすることなく、 • Prover:KEnc、KMAC P を取得 • Verifier:KMAC V を取得 1. ECtFプロトコルを実行し、楕円曲線の点の加算シェアを有限体F P の加算シェアに変換 Z = Z P + Z V = (x, y) を x = x P + x V となるようなF P の要素に変換し、 両者がZ P 、Z V を明らかにすることなく、Proverはx P をVerifierはx V を受け取るプロトコルを実行 実際の構築にはPaillier暗号などの加法準同型性のある暗号を使って計算。 2. 単一のbinary circuitを使って2PC PRFを実行し、K Enc、KMAC P 、KMAC V を計算 KMAC = KMAC P + KMAC V
ハンドシェイクが完了した時点でProverは データの出処を証明することができるよう になる。 1. Proverはサイトへのクエリを作成し、Verifierと2PC-HMACでクエリ へのタグを計算し、クエリをServerに発行する。 2. Serverからレスポンスを受信すると、 Verifierは2PC-HMACでタグを検証する。 3. ProverはVerifierにクエリ、レスポンスとK MAC P を送り、 VerifierはProverにK MAC V を送る。 4. ProverはVaerifierに対して証明を生成し、Verifierは その証明が正しいか検証する。 a. 復号が可能なKEncを公開する(プライバシー的には‥) b. ゼロ知識技術を利用してデータに関する任意のステートメン トを証明する i. データを部分的に復号しi番目のチャンクであることを証明 ii. ゼロ知識でデータの一部(平文)に関する ステートメントを証明(口座残高 > $10000)