IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エヌチェーン ホールディングス リミテッドの特許一覧

特開2024-45358トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法
<>
  • 特開-トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法 図1
  • 特開-トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法 図2
  • 特開-トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法 図3
  • 特開-トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法 図4
  • 特開-トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法 図5
  • 特開-トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法 図6
  • 特開-トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024045358
(43)【公開日】2024-04-02
(54)【発明の名称】トラストレスゼロ知識付帯支払のためのコンピュータ実装されたシステム及び方法
(51)【国際特許分類】
   H04L 9/32 20060101AFI20240326BHJP
   G09C 1/00 20060101ALI20240326BHJP
【FI】
H04L9/32 200Z
H04L9/32 200C
G09C1/00 650A
【審査請求】有
【請求項の数】28
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024012420
(22)【出願日】2024-01-31
(62)【分割の表示】P 2020549645の分割
【原出願日】2019-03-18
(31)【優先権主張番号】1804739.9
(32)【優先日】2018-03-23
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】1804742.3
(32)【優先日】2018-03-23
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】1804740.7
(32)【優先日】2018-03-23
(33)【優先権主張国・地域又は機関】GB
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】トレヴェサン,トーマス
(57)【要約】      (修正有)
【課題】算術回路充足可能性と公開鍵の妥当性に関する従属ステートメント(キーステートメントプルーフ)の両方を同時に必要とする複合ステートメントの効率的なゼロ知識検証方法を提供する。
【解決手段】証明者Pが検証者Vに、所与の関数回路出力及び楕円曲線点に対して、関数回路のワイヤへの関数回路入力が対応する楕円曲線点乗数に等しいか判定するm個のゲート及びn個のワイヤWiを有する算術回路を有したステートメントS及び回路のワイヤについての個々のワイヤコミットメントCom及び/又はバッチにされたコミットメント、算術回路内のワイヤに対する入力及び関数回路出力を送信する。証明者は、検証者からチャレンジ値xを受信し、応答するか又は証明キーを検証者に送信する。検証者が、回路が満たされると判定し、楕円曲線点を計算して、ステートメントを検証し、証明者がステートメントに対する証拠を保持していると判定する。
【選択図】図5
【特許請求の範囲】
【請求項1】
売り手すなわち証明者からのアクセスデータの交換における買い手すなわち検証者からのトラストレスゼロ知識付帯支払又は報酬データの交換を可能にするためのコンピュータ実装された方法であって、前記アクセスデータは秘密鍵へのアクセスを提供し、当該方法はプロセッシングリソースによって実行され、当該方法は、
買い手から、買い手秘密鍵(sk)を楕円曲線生成点(G)と乗算することから導出された買い手公開鍵(pk)を受信し、
売り手秘密鍵(i)を楕円曲線生成点(G)と乗算することから決定される売り手公開鍵(pk)を生成し、前記売り手秘密鍵は、前記アクセスデータであり、又は前記買い手によって要求された前記アクセスデータを保護するために使用されており、
データセットを準備して前記買い手に送信し、前記データセットは、ゼロ知識証明ステートメントを含み、該ステートメントを表現する算術回路の所与の関数回路出力と、楕円曲線点とに対して、関数回路入力が、前記売り手秘密鍵(i)に等しく、前記ステートメントは、前記買い手が、前記回路が満たされると判定して前記ステートメントを検証すること、故に、前記アクセスデータをアンロックするのに必要な前記売り手秘密鍵を前記売り手が保持していると判定することを可能にし、
前記買い手から、前記売り手秘密鍵(i)を用いてアクセス可能なものである、前記報酬データを前記買い手に割り当てる出力を含む第1のトランザクションTxを受信し、
前記第1のトランザクションに署名して前記第1のトランザクションをブロックチェーン上でブロードキャストして、それがブロックへとマイニングされるようにし、そして、前記報酬データをアンロックするための前記売り手秘密鍵(i)を与える第2のトランザクションTxを提供することによって前記第1のトランザクションTxの前記出力から前記報酬データにアクセスし、前記売り手秘密鍵(i)がブロックチェーン上で明らかにされることで、前記売り手によって提供された前記アクセスデータを前記買い手が取得することを可能にする、
ことを含むコンピュータ実装された方法。
【請求項2】
前記証明者すなわち売り手は、前記検証者すなわち買い手から楕円曲線公開鍵pkを受信し、前記買い手は、安全なランダム秘密鍵skから該公開鍵を生成しており、
pk=sk×Gであり、Gは楕円曲線点であり、
前記証明者すなわち売り手は、アクセスデータ=pk+i×Gであるように、提供される前記アクセスデータをロック値iで保護し、
前記売り手は、前記買い手に送信する前記データセットに、pk=i×Gである公開鍵(pk)と、前記関数回路入力が前記ロック値iである前記関数回路からの出力f(i)とを含める、
請求項1に記載のコンピュータ実装された方法。
【請求項3】
前記売り手は、前記売り手からの署名と前記関数回路入力とによってアクセスされることが可能な、前記受信される報酬データを含む出力を含んだ前記トランザクションTxを、前記買い手から受信し、
前記売り手は、前記トランザクションに署名して前記トランザクションをブロックチェーン上でブロードキャストし、それがブロックへとマイニングされて、前記トランザクションをアンロックするための署名及び前記値iを与える前記第2のトランザクションTxを提供することによって、前記トランザクションTxの出力から前記売り手が前記アクセスデータを取得することを可能にし、そして、前記トランザクションは、前記ブロックチェーン上で明らかにされることで、前記買い手が、前記ロック値iを特定して、前記売り手によって提供された前記アクセスデータを取得することを可能にする、
請求項2に記載のコンピュータ実装された方法。
【請求項4】
売り手すなわち証明者からのアクセスデータの交換における買い手すなわち検証者からのトラストレスゼロ知識付帯支払又は報酬データの交換を可能にするためのコンピュータ実装された方法であって、
売り手に、買い手秘密鍵(sk)を楕円曲線生成点(G)と乗算することから導出された買い手公開鍵(pk)を送信し、
前記売り手からデータセットを受信し、該データセットは、ゼロ知識プルーフステートメントを含み、該ステートメントを表現する算術回路の所与の関数回路出力と、楕円曲線点とに対して、関数回路入力が売り手秘密鍵(i)に等しく、売り手公開鍵(pk)が、該売り手秘密鍵(i)を楕円曲線生成点(G)と乗算することから導出され、前記売り手秘密鍵は、前記アクセスデータであり、又は前記アクセスデータを保護するために使用されており、
前記プルーフを検証し、
前記売り手秘密鍵(i)を用いてアクセス可能なものである、前記アクセスデータを取得するための交換において前記報酬データを前記買い手に割り当てる出力を含む第1のトランザクションTxを、前記買い手が送信し、
ブロックチェーン上で、前記売り手が前記第1のトランザクションに署名して前記第1のトランザクションをブロードキャストして、それがブロックへとマイニングされるようにしたことを確認し、斯くして、前記報酬データをアンロックするための署名及び前記売り手秘密鍵(i)を与える第2のトランザクションTxを提供することによって、前記売り手が前記第1のトランザクションTxの前記出力から前記報酬データにアクセスすることを可能にし、
前記売り手によって提供された前記アクセスデータを取得する、
ことを含み、
前記売り手に楕円曲線公開鍵pkを送信し、前記買い手は、安全なランダム秘密鍵skから該公開鍵を生成しており、
pk=sk×Gであり、Gは楕円曲線点であり、
前記売り手は、アクセスデータ=pk+i×Gであるように、提供される前記アクセスデータをロック値iで保護し、
前記売り手から、前記データセットで、pk=i×Gである公開鍵と、前記関数回路入力が前記ロック値iである前記関数回路からの出力f(i)とを受信する、
ことを更に含む、
コンピュータ実装された方法。
【請求項5】
前記売り手からの署名と前記関数回路入力とによってアクセスされることが可能な、前記受信されるアクセスデータを含む出力を含んだ前記トランザクションTxを、前記買い手が送信し、
前記売り手は、前記トランザクションに署名して前記トランザクションをブロックチェーン上でブロードキャストし、それがブロックへとマイニングされて、前記トランザクションをアンロックするための署名及び前記値iを与える第2のトランザクションTxを提供することによって、前記トランザクションTxの出力から前記売り手が前記データにアクセスすることを可能にし、そして、前記トランザクションが、前記ブロックチェーン上で明らかにされ、
前記ブロックチェーンにアクセスし、前記ロック値iを特定して、前記売り手によって提供されたデジタルコンテンツにアクセスする、
ことを更に含む請求項4に記載のコンピュータ実装された方法。
【請求項6】
前記売り手から受信される前記報酬データは暗号通貨支払を含む、請求項1乃至5のいずれか一項に記載のコンピュータ実装された方法。
【請求項7】
前記売り手によって提供される前記アクセスデータは、バニティアドレスの秘密鍵であり、又はバニティアドレスの秘密鍵の特定を可能にする、請求項1乃至6のいずれか一項に記載のコンピュータ実装された方法。
【請求項8】
証明者が、検証者に対して、ステートメントが真であることを、該ステートメントに対する証拠(w)を秘密にしたまま証明するものである、ステートメント(S)のゼロ知識証明又は検証を可能にするための、請求項1乃至7のいずれか一項に記載のコンピュータ実装された方法であって、当該方法は、
証明者が検証者に:
関数回路を実装して、所与の関数回路出力(h)及び楕円曲線点(P)に対して、前記関数回路のワイヤへの関数回路入力(s)が対応する楕円曲線点乗数(s)に等しいかを判定する、ように構成されたm個のゲート及びn個のワイヤを有する算術回路によって表されるステートメント(S)と、
前記回路のワイヤについての個々のワイヤコミットメント及び/又はバッチにされたコミットメントと、
関数回路出力(h)と、
証明キー(PrK)と、
を送信することを含み、
これにより、前記検証者が、前記回路が満たされることを決定し、前記楕円曲線点(P)を計算して、前記ステートメントを検証すること、故に、前記証明者が前記ステートメントに対する前記証拠(w)を保持していると決定することを可能にする、
コンピュータ実装された方法。
【請求項9】
前記証明者は、前記証拠(w)の知識を証明するために、個々のワイヤコミットメントを送信し、Σプロトコルを使用して前記検証者と通信する、請求項8に記載のコンピュータ実装された方法。
【請求項10】
前記証明者は、前記検証者からチャレンジ値(x)を受信し、オープニングで応答する、請求項8又は9に記載のコンピュータ実装された方法。
【請求項11】
前記証明者は、前記検証者が前記ステートメントが真であると判定して前記楕円曲線点(P)を計算することを可能にするランダム値(x)を前記検証者に送信する、請求項8に記載のコンピュータ実装された方法。
【請求項12】
前記ランダム値(x)は、少なくとも1つのコミットメントの関数である、請求項11に記載のコンピュータ実装された方法。
【請求項13】
前記ランダム値(x)は、前記証明者によって生成されて前記検証者に送信された全ての前記コミットメントの連結をハッシュすることによって計算される、請求項11又は12に記載のコンピュータ実装された方法。
【請求項14】
前記コミットメントWは、W=Com(w,r)であり、
Comは前記関数回路へのコミットメントであり、
はワイヤ値であり、
は、ワイヤコミットメントごとに異なる乱数であり、
iはワイヤ種類であり、
Com(w,r)=w×G+r×Fとされ、
F及びGは楕円曲線点である、
請求項8乃至13のいずれか一項に記載のコンピュータ実装された方法。
【請求項15】
前記算術回路内のワイヤlに対する入力が、ko=r×Fであり、
koはキーオープニング入力であり、
は乱数であり、
Fは楕円曲線上の点である、
請求項14に記載のコンピュータ実装された方法。
【請求項16】
前記検証者は、前記回路が満たされることを確認し、楕円曲線点減算:
pk=Com(w,r)-ko
を介してワイヤlに対する公開鍵を計算することができる、請求項15に記載のコンピュータ実装された方法。
【請求項17】
前記証明者は、ワイヤコミットメントのバッチを送信し、各ワイヤについて楕円曲線点を計算するための乱数を生成して、前記証明キー(PrK)を形成する、請求項8に記載のコンピュータ実装された方法。
【請求項18】
前記証拠に関する前記バッチにされたコミットメントは、
【数1】
であり、
rは、証明者によって生成された乱数であり、
証明者は、ワイヤ値w(for i=1,…,n)のベクトルwへのコミットメントを計算し、
は、キーオープンされるものであり、
は、計算された楕円曲線点であり、
はワイヤ値であり、
Fは楕円曲線上の点である、
請求項17に記載のコンピュータ実装された方法。
【請求項19】
前記算術回路内のワイヤnに対する入力は、
【数2】
であり、
koはキーオープニング入力であり、
rは乱数であり、
Fは楕円曲線上の点である、
請求項18に記載のコンピュータ実装された方法。
【請求項20】
前記検証者は、楕円曲線演算:
【数3】
を介して、キーステートメントワイヤの公開鍵オープニングを計算する、請求項19に記載のコンピュータ実装された方法。
【請求項21】
前記証明者は更に、完全にオープンにされたコミットメントを前記関数回路の少なくとも1つのワイヤに送る、請求項1乃至20のいずれか一項に記載のコンピュータ実装された方法。
【請求項22】
当該方法はPedersenコミットメントを使用する、請求項1乃至21のいずれか一項に記載のコンピュータ実装された方法。
【請求項23】
前記ステートメントは、前記関数回路に対して1つの算術回路のみを使用する、請求項1乃至22のいずれか1項に記載のコンピュータ実装された方法。
【請求項24】
前記関数回路は、好ましくはSHA-256ハッシュ関数であるハッシュ関数を実装する、請求項1乃至23のいずれか一項に記載のコンピュータ実装された方法。
【請求項25】
コンピュータ実行可能命令を有したコンピュータ読み取り可能記憶媒体であって、前記コンピュータ実行可能命令は、実行されるときに、請求項1乃至24のいずれか一項に記載の方法を実行するようにプロセッサを構成する、コンピュータ読み取り可能記憶媒体。
【請求項26】
インタフェース装置と、
前記インタフェース装置に結合された1つ以上のプロセッサと、
前記1つ以上のプロセッサに結合されたメモリであり、当該メモリはコンピュータ実行可能命令を格納しており、該コンピュータ実行可能命令は、実行されるときに、請求項1乃至24のいずれか一項に記載の方法を実行するように前記1つ以上のプロセッサを構成する、メモリと、
を有するエレクトロニクス装置。
【請求項27】
ブロックチェーンネットワークのノードであって、請求項1乃至24のいずれか一項に記載の方法を実行するように構成されたノード。
【請求項28】
請求項27に記載のノードを有するブロックチェーンネットワーク。
【発明の詳細な説明】
【技術分野】
【0001】
この明細書は、概して、例えばブロックチェーンネットワークのノードなどのコンピュータプロセッサ又は一群のそのようなプロセッサにおける実装に適した、コンピュータ実装された方法及びシステムに関する。ステートメントの効率的なゼロ知識検証を可能にするプルーフを生成する改良された方法が提供される。当該方法は、双線形ペアリングフレンドリー楕円曲線の使用を必要としない既存の回路充足可能性のための離散対数ベースゼロ知識プルーフプロトコルに組み込むのに好適である。本発明は、以下に限られないが、特に、トラストレスでの公正なデータ交換に適している。参加者間の安全なトラストレスでのやり取りを実現するために、当事者のうちの1つが、キー又はステートメントの知識を、そのステートメントを明らかにすることなく証明することができる。特に、交換されるデータは、ブロックチェーンネットワーク上の指定バニティアドレスに関する秘密鍵の特定を可能にする。
【背景技術】
【0002】
本文書おいて、用語‘ブロックチェーン’は、全ての形態の電子的な、コンピュータベースの、分散型台帳を含む。これらは、合意に基づく(コンセンサスベースの)ブロックチェーン及びトランザクションチェーンの技術、許可された及び許可されていない台帳、共有台帳、並びにこれらの変形を含む。ブロックチェーン技術の最も広く知られている用途はビットコイン台帳であるが、他のブロックチェーン実装も提案及び開発されている。
【0003】
ここでは、便宜及び説明のために、ビットコインを参照することがあるが、留意されたいことには、本発明は、ビットコインブロックチェーンとの使用に限定されず、それに代わるブロックチェーン実装及びプロトコルも本発明の範囲内にある。用語“ユーザ”は、ここでは、人間又はプロセッサベースのリソースを指す。ブロックチェーンは、トランザクションからなる複数のブロックで構成されるコンピュータベースの非中央集権的な分散システムとして実装されるピア・ツー・ピアの電子台帳である。
【0004】
各トランザクションは、ブロックチェーンシステムにおける参加者間でのデジタル資産の管理の移転を符号化するデータ構造であり、少なくとも1つのインプットと少なくとも1つのアウトプットとを含む。各ブロックが、そのブロックが一緒にチェーン化される先行ブロックのハッシュを含むことで、その開始以前にそのブロックチェーンに書き込まれた全てのトランザクションの恒久的で変更不可能な記録を作り出す。トランザクションは、それらのインプット及びアウトプットに埋め込まれるスクリプトとして知られた小プログラムを含み、それらが、トランザクションのアウトプットが誰によってどのようにアクセスされ得るかを指定する。ビットコインプラットフォーム上では、これらのスクリプトは、スタックベースのスクリプト言語を使用して書かれる。
【0005】
さらに、この文書では、算術回路を使用する既知のゼロ知識プルーフプロトコル及びシステムの構造を参照する。ブロックチェーンは、第三者仲裁又は第三者預託を必要とせずに2つの相互に信頼のない2つの当事者間で公正なやり取りすることの問題に対するソリューションを可能にする非中央集権化された許可なしでのグローバル機構を提供した。金銭的報のための又は例えばデジタルグッズなどの情報との交換での、データ又は情報の公正な交換は、ZKCP(Zero-Knowledge Contingent Payments)(非特許文献2)として知られるトランザクションプロトコルにて具体化されている。ZKCPでは、支払が確認された場合にのみ、指定されたデータが売り手から買い手に転送され、買い手から売り手への支払は、この指定されたデータが売却の条件に従って有効である場合にのみ完了される。このようなプロトコルの詳細は知られている(非特許文献1)が、それは基本的に、ハッシュ時間ロック契約(hash-time-locked contract;HTLC)とゼロ知識プルーフとの組み合わせに基づいており、これは、暗号化された情報(‘デジタルグッズ’)が有効/正確であることと、この情報を解読する‘パスワード’が支払いを請求するためにブロックチェーン上で明らかにされなければならないデータであることとを同時に検証するものである。
【0006】
ZKCPプロトコルの中心コンポーネントは、データ/情報の妥当性又は正確性、キーの妥当性、及び対応するハッシュ値に関する一連の従属ステートメントに対するゼロ知識プルーフである。このような複雑な複合ステートメントは、全般的な計算のために効率的なゼロ知識プルーフシステムを必要とし、突き詰めると、これは、1つの当事者が、秘密の入力を用いて任意のプログラムを走らせ、そして、秘密の入力又はプログラムの実行に関する情報を何ら明らかにすることなく、他の当事者に対し、プログラムが入力を有効であると認めて正しく実行されたことを証明することを可能にする。既知のZKCPの例では、採用された汎用ゼロ知識プルーフシステムは、Pinocchioプロトコル(非特許文献3)及びC++ libsnarkライブラリ(非特許文献4)で実装されるような、知識の簡潔な非対話型論証(succinct non-interactive arguments of knowledge;SNARK)フレームワークに基づいてきた。
【0007】
ゼロ知識SNARK(zkSNARK)は、算術回路として表現可能な任意の計算の妥当性をゼロ知識で証明する方法を提供する。zkSNARKの2つの主な特徴的性質は、それらが非対話的である(証明者が検証者に一手(1ムーブ)でプルーフを送る)こと及び簡潔である(プルーフが小さくて検証容易である)ことである。しかしながら、それらはかなりの制限を持つ:
- プルーフ生成が、極めて計算的要求が大きいものである。
- 証明キーが非常に大きく、回路サイズに比例する。
- それらは、強力でテストされていない暗号仮定(すなわち、エクスポーネント仮定及びペアリングベース仮定の知識)に依存する。
- 所与のプログラム(回路)に対して、それらは、設定パラメータを削除するために信頼されなければならない第三者によって共通参照文字列(common reference string;CRS)が計算されることを必要とする。設定パラメータの知識を持つ者が、偽のプルーフを作成する能力を持つ。
【0008】
任意の暗号化楕円曲線キー操作を伴うステートメントを証明するzkSNARKの構築は、今日まで試みられていないが、仮説的に、何十万又は何百万ものゲートを備える算術回路で構成されることになり、結果として、プルーフ生成時間が数分かかることになるとともに、証明キーが数百メガバイトのサイズになるであろう。
【0009】
技術的背景
対話型ゼロ知識プルーフのための基本システムは、証明者と検証者との間での何度かの通信ステップを伴うΣ(シグマ)プロトコルを使用することができる。通常、Σプロトコルは三手(3ムーブ)を必要とし、すなわち、証明者が最初のコミットメント(a)を検証者に送り、次いで、検証者がランダムチャレンジ(x)で応答し、最後に証明者が最終応答すなわち‘opening’(z)で応答する。そして、検証者が、トランスクリプト(a,x,z)に基づくステートメントを受け入れる又は拒絶する。
【0010】
Σプロトコルは、証明者のみに知られている証拠(w)の知識又は該証拠(w)についてのステートメントを証明するために使用されることができる。コミットメントが、証拠に関するステートメントが真実であるという事実を除いて、証拠に関する情報すなわち秘密を検証者に明らかにしない場合、このプロトコルはゼロ知識である(非特許文献5)。
【0011】
多くの対話型ゼロ知識プロトコルの中心は、算術回路の充足可能性に関して使用されるものであるコミットメント方式である。コミットメントによって、証明者が前もって秘密値にコミットし、その後、検証可能に秘密値を明らかにする(開く)ことが可能にされる。コミットメントスキームは、2つの主な性質を持つ。第一に、それは隠れていて、コミットメントが値を秘密のままにする。第二に、それは結びついていて、コミットメントは、元のコミットされた値に対してのみ開かれることができる。Pedersenコミットメント(非特許文献5)スキームは、全ての当事者に知られた素数位数pの群Gの中のG及びFという、2つの楕円曲線生成点を含む。コミットする者(コミッタ)が、素な整数Zのフィールドでセキュアな乱数rを生成し、秘密値sへのコミットメント:
Com(s,r)=s×G+r×F
を(楕円曲線加算/乗算によって)計算し、ここで、×は楕円曲線点乗算を表す。
【0012】
コミッタは、後の段階で、値s及びrを提供することによって、コミットメントを完全に開くことができる(すなわち、それが検証されることができる)。コミッタはまた、秘密s又は乱数rを明らかにすることなく、Σプロトコルの一部として特定のチャレンジ値に応答してコミットメントを開くことができる。
【0013】
Pedersenコミットメントは相加的に同形(ホモモルフィック)であり、すなわち、(楕円曲線上で)2つのコミットメントを加えることが、コミットされた値の和に対するコミットメントをもたらし、すなわち:
(s×G+r×F)+(s×G+r×F)=(s+s)×G+(r+r)×F
である。
【0014】
算術回路充足可能性の証明は‘ゼロ知識’で達成されることができる。(フィールドZ上の)算術回路は、ワイヤによって接続され(有向非循環グラフを形成する)算術ゲートの仮想構成であり、これは、任意の複雑な計算を実行することが可能であり、計算は整数演算に限定され、データ依存ループ又は可変状態を持たないものでなければならない。
【0015】
各ゲートが、2つの入力ワイヤ及び1つの出力ワイヤを持ち、入力に対して乗算(×)又は加算(+)演算を実行する。図1(a)は、左(w)及び右(w)のワイヤ入力と1つのワイヤ出力(w)を有する乗算ゲートの概略図を示し、図1(b)は、3つのゲート、3つの入力ワイヤ(w,w,w)、1つの出力ワイヤ(w)、及び2つの内部ワイヤ(w,w)を有する単純な算術回路の概略図を示している。
【0016】
実際には、完全な回路は、外部(回路)入出力値を定めるフリー入力ワイヤ及びフリー出力ワイヤを持つ。合法的割り当て(リーガルアサインメント)は、ワイヤの値を、回路を満たすものとして定めるものであり、すなわち、各ワイヤが値を割り当てられ、各ゲートの出力が入力の積又は和に正確に対応する(すなわち、そのゲートは一貫性がある)。
【0017】
所与の算術回路について、証明者は、まず(Pedersenコミットメントを用いて)合法的割り当てにて各ワイヤ値にコミットし、次いで、ワイヤ値を証拠として、(並列に実行されることができる)回路内の各ゲートに対して検証者を持つ特別なΣプロトコルを、実行することによって、ワイヤ値を明らかにすることなく、回路に対する合法的割り当てを知っていることを検証者に対して証明することができる。これらのΣプロトコルは、後述するように、Pedersenコミットメントの同形性を活用する。
【0018】
(回路が満たされることの)プルーフを生成するために、最初に証明者は回路内の各ワイヤw(ワイヤ数をnとして、i=1,…,n)に対するコミットメント:
=Com(w,r
を生成し、これらを検証者に送る。
【0019】
回路内の各‘加算’ゲート(図1(b)に1つ示される)に対してΣzeroプロトコルが実行され、これは、w+w-w=0であること(すなわち、入力ワイヤw及びwが出力ワイヤwに等しくて、加算ゲートが満たされること)を(ゼロ知識で)証明することを伴う。これは、以下のステップを含み、すなわち:
1. 証明者が、ゼロに対するコミットメント:B=Com(0,r)を生成して検証者に送る。
2. 検証者が、ランダムチャレンジ値:x←Zで応答する。
3. 次いで、証明者が、開ける値(オープニング値):z=x(r+r-r)+rを計算し、それを検証者に送る。
4. 検証者が、がw+w-w=0であることのプルーフとして、Com(0,z)=x×(W+W-W)+Bを証明する。
Bは、公開鍵と同様の曲線点を表す;B=r×F+0×G
は、対応するペアの秘密鍵を表す。
【0020】
各‘乗算’ゲート(図1(a)に示される)に対してΣprodプロトコルが実行され、これは、各乗算ゲートに対してw・w=wであること(すなわち、乗算ゲートが満たされること)を(ゼロ知識で)証明することを伴う。
1. 証明者が、5つのランダムバインディング値:t,t,t,t,t←Zを生成する。
2. 証明者が、C=Com(t,t)、C=Com(t,t)、C=t×W+t×Fを計算し、これらを検証者に送る。
3. 検証者が、ランダムチャレンジ値:x←Zで応答する。
4. 証明者が、開ける値:
=wx+t
=wRx+t
=rx+t
=rx+t
=(r-w)x+t
を計算し、これらを検証者に送る。
5. そして、検証者が、w・w=wであることの証明として、次式:
Com(e,z)=x×W+C
Com(e,z)=x×W+C
×W+z×F=x×W+C
を検査する。
【0021】
Σzeroプロトコル及びΣprodプロトコルは、回路内の各ゲートの検証のために並列に動作されることができ、全てのゲートに対して同じ検証チャレンジ値(x)を使用することができる。
【0022】
一例として、図1(b)の回路を考えると、合法的割り当て(すなわち、回路を満たすワイヤ値)を知っていることを証明者が検証者に対してゼロ知識で証明するために、証明者は、最初に、各ゲートに対するワイヤコミットメント(W,…,W)及びΣプロトコルコミットメント(すなわち、各加算ゲートに対して1つの追加コミットメント、各乗算ゲートに対して5つの追加コミットメント)を検証者に送る。
【0023】
次いで、検証者がランダムチャレンジx←Zで応答し、証明者が各ゲートの開ける値(各加算に1つ、各乗算に5つ)を計算して検証者に送り返す。そして、検証者が、Σプロトコルチェックを実行して、
・w=w
・w=w
+w=w
であり、故に、従って、コミットメントW,…,Wがワイヤ値w,…,wを満たすことに対応する、ことを検証する。
【0024】
証明者が、回路を満たすことに加えて、特定のワイヤが特定の値を持つことを示すことを望む場合、それらは、関連するワイヤに対するコミットメントを完全に開くことができる。この例では、検証者は更に、wが特定の合法的な割り当てからの実際の出力であることを示すために、値w及びrを検証者に送ることができる(そして、検証者は、W=Com(w,r)であることを検証することができる)。
【0025】
図1(b)の例は、簡単な回路である。実際には、有用な回路はもっと多くのゲートで構成される。特に関心があるのは、SHA-256ハッシュ関数に関する算術回路であり、この回路は、証明者が、特定の(出力)値にハッシュするSHA-256関数へのプリイメージ(入力)を知っていることを、プリイメージを明らかにすることなく示すことを可能にする。SHA-256アルゴリズムに関する回路の最も効率的な実装の1つは、27,904個の算術ゲートからなる(Zcash2016)。すると、SHA-256プリイメージの知識を証明することは、上のプロトコルの最初のコミットメント及びオープニングラウンドの両方で約5MBのデータを送信することを必要とすることになり、証明者と検証者の両方に対して約200,000回の楕円曲線演算を必要とする(各々が数秒のプロセッサ時間を要する)。
【0026】
算術回路充足可能性を証明するためについての並列Σプロトコルアプローチの性能を有意に改善するために開発された方法が幾つか存在する。既知のアプローチ(非特許文献5、非特許文献6)は、証明者から検証者に送られなければならないデータのサイズを実質的に減らす(すなわち、通信の複雑さを減らす)ために、回路ワイヤ値へのコミットメントをバッチにすることを伴う。これらの方法は、通信複雑性がO(n)からO(√n)又はO(log(n))に低減される証明システムを可能にする。
【0027】
これまた、同じSHA回路の充足可能性を証明することについての比較として、そのプロトコル(非特許文献5)は、ほんの5KBの証明キーサイズ及び180msの鍵生成時間を持つ。プルーフサイズは24KBであり、生成するのに約4秒かかり、そのプルーフはまた、検証するのにも約4秒かかる。
【0028】
これらの方法については、採用されているメインベクトルバッチングプロトコルを以下のステップで説明することを除いて、ここで完全に説明することはしない。これは、通常のPedersenコミットメントと同じ性質に従うが、n個の要素(m=m,…,m)へのコミットメントが、単一のグループ要素を送信することを要するのみであり:
1. 証明者及び検証者が、グループ要素F←Gについて合意する。
2. 証明者が、n個の乱数x,…,x←Zを生成する。
3. 証明者が、点K=x×F(for i=1,…,n)を計算する。これらの値は、検証者に送られる証明キーPrKを形成する。
4. 証明者が、乱数:r←Zを生成する。
5. 証明者が、コミットメント:
【数1】
を計算し、それを検証者に送信する。
【先行技術文献】
【非特許文献】
【0029】
【非特許文献1】Campanelli, Matteo, et al. "Zero-knowledge contingent paymentsrevisited: Attacks and payments for services." Commun. ACM (2017).
【非特許文献2】https://github.com/zcash-hackworks/pay-to-sudoku
【非特許文献3】Parno, Bryan, et al. "Pinocchio: Nearly practical verifiablecomputation." Security and Privacy (SP), 2013 IEEE Symposium on. IEEE,2013.
【非特許文献4】https://github.com/scipr-lab/libsnark
【非特許文献5】Bootle, Jonathan, et al. "Efficient zero-knowledge proofsystems." Foundations of Security Analysis and Design VIII. Springer,Cham, 2015. 1-31.
【非特許文献6】Groth, Jens. "Linear Algebra with Sub-linear Zero-KnowledgeArguments." CRYPTO. Vol. 5677. 2009.
【非特許文献7】https://bitcointalk.org/index.php?topic=81865.msg901491#msg901491
【非特許文献8】Bootle, Jonathan, et al. "Efficient zero-knowledge argumentsfor arithmetic circuits in the discrete log setting." Annual InternationalConference on the Theory and Applications of Cryptographic Techniques.Springer, Berlin, Heidelberg, 2016.
【非特許文献9】Standards for Efficient Cryptography (SEC) (Certicom Research,http://www.secg.org/sec2-v2.pd
【非特許文献10】Bitcoin Developer Reference(http://bitcoin.org/en/developer-reference)
【発明の概要】
【0030】
全体として、本発明は、ステートメントのゼロ知識証明又は検証を可能にするためのコンピュータ実装された方法にある。証明者は、ここでの方法を用いて、ステートメントに対する証拠を秘密にしながら、ステートメントが真であることを検証者に対して証明することができる。
【0031】
特に、証拠とは、取得されたときに、当該証拠によって保護されたデータに検証者がアクセスすることを可能にするアクセスデータとすることができる。保護されるデータは、ブロックチェーンネットワークとその機能を使用して保護されることができる。より具体的には、証拠は、ブロックチェーンネットワーク上の指定バニティアドレスに関する秘密鍵の特定を可能にするアクセスデータとし得る。
【0032】
これらのステートメントは、算術回路充足可能性と公開鍵の妥当性に関する従属ステートメント(キーステートメントプルーフ)の両方を同時に必要とする複合ステートメントである。
【0033】
ここでの方法は、例えば既存の離散対数ベースのゼロ知識プルーフプロトコルなどの、回路充足可能性に関する既知のプロトコルにおいて使用されることができる。当該方法は特に、双線形ペアリングフレンドリー楕円曲線の使用を必要としないプロトコルに適している。
【0034】
当該方法においては、証明者が検証者に、所与の関数回路出力及び楕円曲線点に関するものであるステートメントを含む一組のデータを送信することを含み、関数回路入力は、対応する楕円曲線点乗数(s)に等しい。
【0035】
ステートメントは、証明者がブロックチェーンネットワーク上の指定バニティアドレスに関する秘密鍵を知っているというものとすることができる。
【0036】
データは、ステートメントの回路についての個々のワイヤコミットメント及び/又はバッチにされたコミットメント、入力、及び出力を含む。証明者は、ステートメントで使用される楕円曲線又は各楕円曲線の仕様を、データに含めることができ、又は予め共有していることができる。そして、証明者は、検証者からのチャレンジに応答してオープニングを送信する。あるいは、証明者は更に証明キーを含める。
【0037】
証明者から受信したデータを用いて、検証者は、回路が満たされると判定して、ステートメントを検証すること、故に、証明者がステートメントに対する証拠を保持していると決定することができる。楕円曲線点も計算されることができる。データを受信すると、検証者は、計算を通じて、データがステートメントに適合することを決定する。本発明は特に、ハッシュプリイメージ及び楕円曲線秘密鍵の等価性のゼロ知識証明に適する。
【0038】
従って、本発明によれば、添付の特許請求の範囲に規定される方法及びシステムが提供される。
【0039】
故に、売り手又は証明者からのアクセスデータの交換における買い手又は検証者からのトラストレスゼロ知識付帯支払又は報酬データの交換を可能にするためのコンピュータ実装された方法を提供することが望ましい。報酬データは、例えば未使用トランザクション出力(unspent transaction outputs;UTXO)の割り当てなどの、支払に関連するデータとし得る。アクセスデータは、ECキーペアからの秘密キーとすることができ、又はそれへのアクセスを提供することができる。全体として、当該方法は、検証者が、要求されたデータを保有していることを証明すること、を可能にする。
【0040】
売り手すなわち証明者からのアクセスデータの交換における買い手すなわち検証者からのトラストレスゼロ知識付帯支払又は報酬データの交換を可能にするためのコンピュータ実装された方法が提供されることができ、当該方法は、
買い手から、買い手秘密鍵(sk)を楕円曲線生成点(G)と乗算することから導出された買い手公開鍵(pk)を受信し、
売り手秘密鍵(i)を楕円曲線生成点(G)と乗算することから決定される売り手公開鍵(pk)を生成し、売り手秘密鍵は、アクセスデータであり、又は買い手によって要求されたアクセスデータを保護するために使用されており、
データセットを準備して買い手に送信し、データセットは、ゼロ知識証明ステートメントを含み、該ステートメントを表現する算術回路の所与の関数回路出力と、楕円曲線点とに対して、関数回路入力が、売り手秘密鍵(i)に等しく、ステートメントは、買い手が、回路が満たされると判定してステートメントを検証すること、故に、アクセスデータをアンロックするのに必要な売り手秘密鍵を売り手が保持していると判定することを可能にし、
買い手から、売り手秘密鍵(i)を用いてアクセス可能なものである、報酬データを買い手に割り当てる出力を含む第1のトランザクションTxを受信し、
第1のトランザクションに署名して第1のトランザクションをブロックチェーン上でブロードキャストして、それがブロックへとマイニングされるようにし、そして、報酬データをアンロックするための売り手秘密鍵(i)を与える第2のトランザクションTxを提供することによって第1のトランザクションTxの出力から報酬データにアクセスし、売り手秘密鍵(i)がブロックチェーン上で明らかにされることで、売り手によって提供されたアクセスデータを買い手が取得することを可能にする、
ことを含む。
【0041】
当該方法は、買い手から、買い手秘密鍵を楕円曲線生成点と乗算することから導出された買い手公開鍵(pk)を受信することを含む。この買い手公開鍵は、アクセスデータを保護するため又はアクセスデータ若しくは秘密鍵の機密性を維持するために使用される‘シード’とし得る。当該方法はまた、売り手秘密鍵を楕円曲線生成点と乗算することから決定される売り手公開鍵を生成することを含み、売り手秘密鍵は、上記アクセスデータであり、又は買い手によって要求された上記アクセスデータを保護するために使用される。さらに、当該手法は、データセットを準備して買い手に送信することであり、該データセットは、ゼロ知識証明ステートメントを含み、該ステートメントを表現する算術回路の所与の関数回路出力と、楕円曲線点とに対して、関数回路入力が、売り手秘密鍵に等しく、ステートメントは、買い手が、回路が満たされると判定してステートメントを検証すること、故に、アクセスデータをアンロックするのに必要な売り手秘密鍵を売り手が保持していると判定することを可能にする、送信することと、買い手から、売り手秘密鍵を用いてアクセス可能なものである、報酬データを買い手に割り当てる出力を含む第1のトランザクションTxを受信することと、を含む。この秘密鍵は、回路関数入力とし得る。最後に、当該手法は、第1のトランザクションに署名して第1のトランザクションをブロックチェーン上でブロードキャストして、それがブロックへとマイニングされるようにし、そして、報酬データをアンロックするための売り手秘密鍵を与える第2のトランザクションTxを提供することによって第1のトランザクションTxの出力から報酬データにアクセスし、それがブロックチェーン上で明らかにされることで、売り手によって提供されたアクセスデータを買い手が取得することを可能にする、ことを含む。検証者はまた、売り手秘密鍵に加えて、自身の署名を提供することができる。
【0042】
当該方法は、例えば暗号鍵などのアクセスデータに関するゼロ知識付帯トランザクションを可能にするために、証明者又は売り手によって使用され得る。証明者は、提供される報酬データ及び受信されるアクセスデータを確認するように検証者又は買い手と連携することができ、検証者との通信チャンネルを確立する。通信チャンネルはオープンであるとし得る。
【0043】
証明者又は売り手は、検証者又は買い手から楕円曲線公開鍵pkを受信し、買い手は、安全なランダム秘密鍵skから該公開鍵を生成しており、
pk=sk×Gであり、Gは楕円曲線点であり、
証明者又は売り手は、アクセスデータ=pk+i×Gであるように、提供されるアクセスデータをロック値iで保護することができ、
売り手は、買い手に送信するデータセットに、pk=i×Gである公開鍵と、関数回路入力がロック値iである関数回路からの出力f(i)とを含めることができる。
【0044】
証明者又は売り手は、検証者又は買い手に、関数回路への入力がpkに対応する秘密鍵であることを検証者に対して証明するステートメント(S)プルーフを送信することができる。これは、検証者がプルーフを検証し、pk=pk+pkに対応するアドレスが合意したパターンと一致することを確認することを可能にし、故に、ロック値iを知ることが、アクセスデータ(sk+i)に関する完全な秘密鍵の導出を可能にすると判定するとともに、ロック値iが関数回路への関数回路入力であると判定することを可能にする。
【0045】
売り手は、売り手からの署名と関数回路入力とによってアクセスされることが可能な、受信される報酬データを含む出力を含んだトランザクションTxを、買い手から受信することができ、
売り手は、トランザクションに署名してトランザクションをブロックチェーン上でブロードキャストすることができ、それがブロックへとマイニングされて、トランザクションをアンロックするための署名及び値iを与える第2のトランザクションTxを提供することによって、トランザクションTxの出力から売り手がアクセスデータを取得することを可能にし、そして、トランザクションは、ブロックチェーン上で明らかにされることで、買い手が、ロック値iを特定して、売り手によって提供されたアクセスデータを取得することを可能にし、
sk=sk+iであり、
pk=sk×Gである。
【0046】
本発明の方法がプラグソケット式で検証者によってとられる逆のアクションにまで及ぶように、買い手又は検証者の視点からの相補的なコンピュータ実装された方法を提供することが等しく望ましい。本発明は、証明者と検証者との間の完全な共同作業にまで及ぶ。
【0047】
従って、本発明はまた、売り手すなわち証明者からのアクセスデータの交換における買い手すなわち検証者からのトラストレスゼロ知識付帯支払又は報酬データの交換を可能にするためのコンピュータ実装された方法にあり、当該方法は:売り手に、買い手秘密鍵を楕円曲線ジェネレータと乗算することから導出された買い手公開鍵を送信し;売り手からデータセットを受信し、該データセットは、ゼロ知識プルーフステートメントを含み、所与の関数回路出力と楕円曲線点とに対して、関数回路入力が売り手秘密鍵に等しく、売り手公開鍵が、該売り手秘密鍵を楕円曲線ジェネレータと乗算することから導出され、売り手秘密鍵は、アクセスデータであり、又はアクセスデータを保護するために使用されており;プルーフを検証し;売り手秘密鍵を用いてアクセス可能なものである、アクセスデータを取得するための交換において報酬データを買い手に割り当てる出力を含む第1のトランザクションTxを、買い手が送信し;ブロックチェーン上で、売り手が第1のトランザクションに署名して第1のトランザクションをブロードキャストして、それがブロックへとマイニングされるようにしたことを確認し、斯くして、報酬データをアンロックするための署名及び売り手秘密鍵を与える第2のトランザクションTxを提供することによって、売り手が第1のトランザクションTxの出力から報酬データにアクセスすることを可能にし;そして、売り手によって提供されたアクセスデータを取得する、ことを含む。当該方法は、例えば暗号鍵などのデータに関するゼロ知識付帯トランザクション又は支払を行うために、買い手又は検証者によって使用され得る。
【0048】
当該方法は更に、売り手に楕円曲線公開鍵pkを送信し、売り手は、安全なランダム秘密鍵skから該公開鍵を生成しており、
pk=sk×Gであり、Gは楕円曲線であり、
売り手は、アクセスデータ=pk+i×Gであるように、提供されるアクセスデータをロック値iで保護し、
売り手から、データセットで、pk=i×Gである公開鍵と、関数回路入力がロック値iである関数回路からの出力f(i)とを受信する、
ことを含み得る。
【0049】
証明者又は売り手は、検証者又は買い手に、関数回路への入力がpkに対応する秘密鍵であることを検証者に対して証明するステートメント(S)プルーフを送信することができる。これは、検証者がプルーフを検証し、pk=pk+pkに対応するアドレスが合意したパターンと一致することを確認することを可能にし、故に、ロック値iを知ることが、アクセスデータ(sk+i)に関する完全な秘密鍵の導出を可能にすると判定するとともに、ロック値iが関数回路への関数回路入力であると判定することを可能にする。
【0050】
当該方法は更に、売り手からの署名と関数回路入力とによってアクセスされることが可能な、受信されるアクセスデータを含む出力を含んだトランザクションTxを、買い手が送信し、売り手は、トランザクションに署名してトランザクションをブロックチェーン上でブロードキャストし、それがブロックへとマイニングされて、トランザクションをアンロックするための署名及び値iを与える第2のトランザクションTxを提供することによって、トランザクションTxの出力から売り手がデータにアクセスすることを可能にし、そして、トランザクションが、ブロックチェーン上で明らかにされ、ブロックチェーンにアクセスし、ロック値iを特定して、売り手によって提供されたデジタルコンテンツにアクセスすることを含むことができ、
sk=sk+iであり、
pk=sk×Gである。
【0051】
売り手から受信される報酬データは暗号通貨支払を含む。該データは、未使用トランザクション出力、すなわち、UTXOとすることができる。該データは、ビットコイン支払を含み得る。この出願を通して参照されるブロックチェーンは、ビットコインブロックチェーンとし得る。
【0052】
売り手によって提供されるアクセスデータは、バニティアドレスの秘密鍵であり、又はバニティアドレスの秘密鍵の特定を可能にする。売り手秘密鍵は、デジタルコンテンツを保護するために使用されて買い手によって要求されるロック値iとし得る。所望のバニティアドレスが予め指定される。
【0053】
故に、証明者が、検証者に対して、ステートメントが真であることを、該ステートメントに対する証拠(w)を秘密にしたまま証明するものである、ステートメント(S)のゼロ知識証明又は検証を可能にするためのコンピュータ実装された方法を提供することも望ましい。この証明は、明示的な証明とすることができる。
【0054】
当該方法は、証明者が一組のデータ(データのセット)を検証者に送信することを含む。データのセットは、関数回路を実装し、所与の関数回路出力(h)及び楕円曲線点(P)に対して、関数回路への又は関数回路内のワイヤへの関数回路入力(s)が対応する楕円曲線点乗数(s)に等しいかを判定する、ように構成されたm個のゲート及びn個のワイヤを有する算術回路を持つステートメントを含む。関数回路は、ハッシュ関数の機能を実装する回路とし得る。ハッシュ関数回路に対する又は関数回路内のワイヤに対するプリイメージは、対応する楕円曲線点乗数に等しいことができる。
【0055】
データはまた、個々のワイヤコミットメント及び/又はバッチにされたコミットメントを含む。該コミットメント又は各コミットメントは、回路のゲートに関するワイヤ入力及び出力(これらは暗号化される)とし得る。データはまた、入力を含む。入力は、算術回路[楕円曲線点(P)]のワイヤに対するキーオープニングとしての働きをする。証明者又は検証者のいずれかがワイヤに名前を付け得る。入力又はキーオープニングは、回路内の最初のワイヤに対するものとし得る。データはまた、関数回路出力を含む。ステートメント内で使用される楕円曲線又は各楕円曲線の仕様をデータに含めることができる。
【0056】
データを送信した後、証明者は、検証者からチャレンジ値を受信し、オープニングで応答する。オープニングは、Σ(シグマ)プロトコルに従った値ステートメントとし得る。オープニング値は、検証者が、ステートメントが真であると判定して楕円曲線点を計算することを可能にする回路の各ゲートに対するものとし得る。
【0057】
チャレンジを待つことの代わりとして、証明者は更に証明キーを検証者に送信し得る。証明キーは、プルーフの一部であるデータから生成され得る。証明キーは、プルーフに使用される乱数のうちの1つ以上の乱数のハッシュとし得る。
【0058】
検証者に送信されるデータは、検証者が、回路が満たされることを決定し、楕円曲線点を計算し、ステートメントを検証すること、故に、証明者がステートメントに対する証拠を保持していると決定することを可能にする。
【0059】
検証者に送信されるデータのセット、及び/又は検証者に送信されるチャレンジへのオープニングは、検証者とは無関係に作成されるキーのように機能することができる。検証者からのチャレンジは、証明者の身元及びキーの完全性を決定することに類似している。
【0060】
入力又はキーオープニングは、算術回路内の最初のワイヤに対するものとし得る。しかしながら、中間ワイヤの知識を証明することは、最初のワイヤの知識を証明することよりも困難であるため、ランダムなワイヤが選択されることが好ましい。さらに、最初のワイヤ以外のランダムなワイヤを選択することは、よりロバストであり、悪意ある第三者によるプルーフ又は証拠の発見を阻止する。
【0061】
検証者が、証明者から受信したデータを分析することによって、ステートメントに対する証拠(w)を知ることなく、ステートメントが真であることを検証するものであるステートメントのゼロ知識証明又は検証を可能にするための相補的なコンピュータ実装された方法を提供することが等しく望ましい。明確にしておくに、本発明の方法は、プラグソケット式に検証者によってとられる逆のアクションにまで及ぶ。本発明は、証明者と検証者との間の完全な共同作業にまで及ぶ。
【0062】
証明者は、チャレンジ値を待つことに加えて、あるいは代えて、検証者が、ステートメントが真であると判定して楕円曲線点を計算することを可能にするランダム値を検証者に送信し得る。証明者からのデータの受信を受けて、検証者は代わりに、検証者が、ステートメントが真であると判定して楕円曲線点を計算することを可能にするランダム値を受信し得る。ランダム値は、少なくとも1つのコミットメントの関数とし得る。この関数は、ハッシュ関数とすることができる。
【0063】
ランダム値又はチャレンジは、プロセスの利便性及び効率を向上させるために置き換えられ得る。また、証拠に関する情報を抽出しようという試みにおいて検証者が非ランダムなチャレンジを生成することに伴うリスクも存在する。さらに、チャレンジ値を、証明者によって提供されるランダム値で置き換えることは、この方法を対話型のものから非対話型のものに変換する。証明者は、独立的且つ公開的に検証されることが可能なプルーフをオフラインで生成することができる。ランダム値は、ハッシュ関数からの出力とし得る。ランダム値(x)の代わりに、1つ以上のコミットメントのハッシュからの出力を用いることは、フィアット-シャミア(Fiat-Shamir)原理を利用する。
【0064】
ランダム値は、証明者によって生成されて検証者に送信された全てのコミットメントの連結をハッシュすることによって計算され得る。
【0065】
コミットメントは、W=Com(w,r)とすることができ、
Comは関数回路へのコミットメントであり、
はワイヤ値であり、
は乱数であり、すなわち、これはワイヤコミットメントごとに異なり、
iはワイヤ種類であり、
Com(w,r)=w×G+r×Fとされ、
F及びGは楕円曲線点である。
【0066】
算術回路内のワイヤlに対する入力は、ko=r×Fとすることができ、
koはキーオープニング入力であり、
は乱数であり、
Fは楕円曲線上の点である。
【0067】
ワイヤは、回路内の最初のワイヤとし得る。
【0068】
検証者は、回路が満たされることを確認することができ、楕円曲線点減算:
pk=Com(w,r)-ko
を介してワイヤlに対する公開鍵を計算することができる。
【0069】
証明者は、ワイヤコミットメントのバッチを送信し得るとともに、各ワイヤについて楕円曲線点を計算するための乱数を生成して、証明キーを形成し得る。
【0070】
証拠に関するバッチにされたコミットメントは、
【数2】
とすることができ、
rは、証明者によって生成された乱数であり、
証明者は、ワイヤ値w(for i=1,…,n)のベクトルwへのコミットメントを計算し、
は、キーオープンされるものであり、
は、計算された楕円曲線点であり、
はワイヤ値であり、
Fは楕円曲線上の点である。
【0071】
算術回路内のワイヤnに対する入力は、
【数3】
であり、
koはキーオープニング入力であり、
rは乱数であり、
Fは楕円曲線上の点である。
【0072】
入力は、最初のワイヤに対するものとし得る。
【0073】
検証者は、楕円曲線演算:
【数4】
を介して、キーステートメントワイヤの公開鍵オープニングを計算し得る。
【0074】
証明者は更に、完全にオープンにされたコミットメントを少なくとも1つのワイヤに送り得る。当該方法はPedersenコミットメントを使用し得る。ステートメントは、関数回路に対して1つの算術回路のみを使用し得る。関数回路は、ハッシュ関数を実装し得る。ハッシュ関数は、SHA-256ハッシュ関数とし得る。
【0075】
当該方法は、証明者によって、暗号鍵などのデータに対するゼロ知識付帯トランザクション(これは、ゼロ知識付帯トランザクションとし得る)を可能にするために使用されることができ、証明者は、提供されるデータ(これは、バニティアドレスとし得る)及び受信されるデータ(該データは、UTXOの形態の支払とし得る)を確認するために検証者と連携し、検証者との通信チャンネル(該チャネルはオープンとし得る)を確立し、証明者は、検証者から、安全なランダム秘密鍵skBから検証者が生成した楕円曲線公開鍵pkを受信し、pk=sk×Gであり、Gは楕円曲線点であり、
証明者は、データ=pk+i×Gであるように、提供されるデータをロック値iで保護する。
【0076】
証明者は、iを変えることによって得られたBase58符号化アドレスにおける必要パターンの検索を実行しているとし得る。証明者は、pk=i×Gであるそれらの公開鍵と、関数回路入力(例えば、プリイメージ)がロック値iである関数回路からの出力f(i)と、を検証者に送信する。
【0077】
証明者は、関数回路への入力が、pkに対応する秘密鍵であることを検証者に証明するステートメントプルーフを検証者に送信することができ、故に、検証者がプルーフを検証し、pk=pk+pkに対応するアドレスが合意されたパターンと一致することを確認することで、ロック値iを知ることが、データに関する完全な秘密鍵の導出を可能にすることと、ロック値iが関数回路への関数回路入力であることと、を特定することを可能にし得る。
【0078】
証明者は、証明者からの署名と関数回路入力とによってアクセスされることが可能な、受信されるデータを含む出力を含んだトランザクションTxを受信し得る。該トランザクションは、ハッシュ時間ロック関数とし得る。受信されるデータが、UTXOへのアクセスを提供し得る。
【0079】
証明者は、該トランザクションに署名して該トランザクションをブロックチェーン上でブロードキャストすることができ、それがブロックへとマイニングされて、該トランザクションをアンロックするための署名及び値iを供給する第2のトランザクションTxを提供することによって、トランザクションTxの出力からデータに証明者がアクセスすることを可能にし、そして、該トランザクションは、ブロックチェーン上で明らかにされ、斯くして、検証者が、ロック値iを特定して、証明者によって提供されたデータにアクセスすることを可能にし、
sk=sk+iであり、
pk=sk×Gである。
【0080】
証明者によって提供されるデータはバニティアドレスを含み得る。検証者から受信されるデータは暗号通貨支払(例えば、UTXO)を含み得る。
【0081】
トランザクションは、完全にアトミックでトラストレスとすることができ、買い手は有効な値iを提供した場合にのみ支払いを受け、値iはブロックチェーン上で公然に明かされる。秘密鍵の分割により、ブロックチェーン上で露わにされる値は、他の誰にも役に立たず、完全な秘密鍵のセキュリティを損なわない。
【0082】
あるコンピュータ実装された方法は、証明者が検証者との(第三者による集中化された交換を用いない)トラストレスでの公正なデータ交換を実行することを伴い得る。これは、クロスチェーン・アトミック・スワップ又はアトミックトレードとして記述されることができる。何故なら、この文脈では、両者がトランザクションを完了するか両者とも完了しないかのいずれかであるという公正な交換性を参照するからである。このスワップは、ハッシュされた時間ロックされた契約を可能にするスクリプト機能をサポートするブロックチェーン間で実行されることができる。
【0083】
証明者は、第1のブロックチェーン上の例えば1ビットコインのUTXOなどの第1のデータへのアクセスを持ち、検証者は、第2のブロックチェーン上にある例えば100LTCなどの第2のデータへのアクセスを持ち、証明者及び検証者は、データを交換することに合意する。当該方法は、証明者が、第2のブロックチェーンに対する鍵ペアを生成し、公開鍵を検証者に送信し、秘密鍵を保持することと、証明者が、第1のブロックチェーンに対する検証者公開鍵を受信し、検証者は、第1のブロックチェーンに対する鍵ペアを生成して秘密鍵(s)を保持していることと、証明者が、ステートメントと、1つ以上のコミットメントと、入力若しくはキーオープニング及び関数回路出力(h)と、楕円曲線仕様とを送信することと、を含む。
【0084】
証明者は、第1のデータを共有公開鍵アドレスに送信する第1のブロックチェーントランザクションTxを作成することができ、そして、該トランザクションを第1のブロックチェーンネットワーク上でブロードキャストし、該アドレスは、入力と検証者公開鍵との和によって定められる。このデータは、24時間以内にスワップが実行されなかった後に、証明者によってアクセスされることができる。
【0085】
証明者は、第2のブロックチェーントランザクションTxを検証することができ、該トランザクションは、第1のブロックチェーンに第1のブロックチェーントランザクションTxが含まれることを確認した後に、検証者によって作成されて第2のブロックチェーンネットワーク上でブロードキャストされ、該トランザクションは、100LTCの形態の第2のデータを証明者公開鍵アドレスに送り、該証明者公開鍵アドレスは、該証明者公開鍵アドレスに関する有効な署名、及び関数回路出力を決定する関数回路入力である値、を用いて証明者によってアクセス可能である。このデータは、24時間以内にスワップが実行されなかった後に、検証者によってアクセスされることができる。
【0086】
証明者は、第2のブロックチェーントランザクションTxが第2のブロックチェーン上に含まれることを確認し、署名と、関数回路出力の関数回路入力である上記値と、を提供することによって第2のデータにアクセスし、斯くして、検証者が、関数回路出力を決定する関数回路入力である上記値を観測し、(楕円曲線点乗算の同形性からs+sであるPの)秘密鍵を用いて署名を提供することによって第1のデータにアクセスすることを可能にする。
【0087】
交換されるデータは暗号通貨とすることができ、第1のデータは、好ましくはビットコイン(Bitcoin)である第1の暗号通貨の量に対応し、第2のデータは、好ましくはライトコイン(Litecoin)である第2の暗号通貨の量に対応する。
【0088】
上述のように、証明者による全てのアクションは、プルーフを検証するための検証者による逆のアクションを必要とする。本発明は、検証者によって実行される方法又はアクションにまで及ぶ。従って、証明者が、検証者に対して、ステートメントが真であることを、該ステートメントに対する証拠を秘密にしたまま、好ましくは明示的に、証明するものである、ステートメントのゼロ知識証明又は検証を可能にするためのコンピュータ実装された方法が提供され、当該方法は、検証者が証明者から:好ましくはハッシュ関数である関数回路を実装して、所与の関数回路の、そして好ましくは指定された関数回路の出力及び楕円曲線点に対して、関数回路への関数回路入力又はプリイメージが楕円曲線点乗数に等しいかを判定する、ように構成されたm個のゲート及びn個のワイヤを有する算術回路を持つステートメント、を受信することを含む。検証者はまた、回路のワイヤについての、暗号化されたワイヤ入力及び出力である個々のワイヤコミットメント及び/又はバッチにされたコミットメントと、算術回路内のワイヤ(好ましくは、最初のワイヤ以外のワイヤ)に対する入力又はキーオープニングと、関数回路出力(h)と、を受信する。検証者はまた、ステートメントで使用される楕円曲線又は各楕円曲線の仕様を受信し得る。検証者は、証明者にチャレンジ値を送信することができ、その後、オープニングを受信する。オープニングは、Σプロトコルに従うものとすることができ、検証者が、ステートメントが真であると判定して楕円曲線点を計算する、ことを可能にする回路の各ゲートについての値を含むことができる。加えて、あるいは代わりに、検証者は、証明者から証明キーを受信し得る。
【0089】
そして、検証者は、回路が満たされると判定し、楕円曲線点(P)を計算し、故に、証明者がステートメントに対する証拠(w)を保持していると判定する。
【0090】
これは、ステートメント回路の各ゲートについての値を証明者が知っていることを、証明が対話型である場合にはシグマプロトコルを用いて、あるいは、フィアット-シャミアヒューリスティックが使用される場合には証明キーを用いて、ゼロ知識で証明することによって達成され得る。検証者は、証明者から各ゲートに対するΣ_zero及びΣ_prodコミットメントを受信し、チャレンジ値で応答し、証明者からオープニング値を受信し、そして、コミットメントと照合することができる。検証者は、楕円曲線点減算を介してワイヤlに対する公開鍵を計算することによって、回路が満たされることを確認し得る。検証者は、各ワイヤについての各公開鍵が、ステートメントで指定された(1つ以上の)鍵と一致することを確認し得る。検証者は、完全にオープンにされたワイヤが、ステートメント内の指定可能な値と一致すると判定して、検証を完了することができる。
【0091】
コンピュータ実行可能命令を有したコンピュータ読み取り可能記憶媒体を提供することも望ましく、該コンピュータ実行可能命令は、実行されるときに、証明者によって、検証者によって、又は証明者と検証者とが協働することによって実行される方法を実行するようにプロセッサを構成する。
【0092】
インタフェース装置と、該インタフェース装置に結合された1つ以上のプロセッサと、該1つ以上のプロセッサに結合されたメモリとを有するエレクトロニクス装置を提供することも望ましく、メモリはコンピュータ実行可能命令を格納しており、該コンピュータ実行可能命令は、実行されるときに、ここに特許請求される方法を実行するように上記1つ以上のプロセッサを構成する。特許請求される方法を実行するように構成された、ブロックチェーンネットワークのノードを提供することも望ましい。そのようなノードを有するブロックチェーンネットワークを提供することも望ましい。
【図面の簡単な説明】
【0093】
本発明の態様が、ここに記載される実施形態を参照して解明されて明らかになる。以下、本発明の実施形態が、単なる例として、以下を含む添付の図面を参照して説明される。
図1図1(a)及び(b)は、技術的背景のセクションで対話型ゼロ知識証明に関する基本システムを上述した際に使用した図であり、図1(a)、左及び右のワイヤ入力と1つのワイヤ出力とを有する乗算ゲートの概略図であり、図1(b)は、3つのゲート、3つの入力ワイヤ、1つの出力ワイヤ、及び2つの内部ワイヤを有する算術回路の概略図である。
図2】ハッシュ関数及び楕円曲線乗算のための算術回路を含む、ステートメントに関する複合回路の概略図である。
図3】1つの算術回路のみが必要とされる、図1の複合ステートメントに関する算術回路の代替概略図である。
図4】4つのゲートと5つのワイヤを持つ算術回路の概略図であり、ワイヤは、その公開鍵を有し、その公開鍵は、キーオープニング値でワイヤコミットメントから明らかにされる又はオープンにされる自身の公開鍵を持つ。
図5】回路記述を有し且つ最初のワイヤが対応する公開鍵を持つステートメントSの証明のために証明者と検証者との間で交換されるデータの概略表現である。
図6】証明者と検証者との間で交換されるデータの他の概略表現である。
図7図4の回路が満たされること、入力ワイヤが必要な公開鍵を持つこと、及び出力ワイヤのハッシュが必要な値を持つことを検証するために検証者によって実行されるチェックの概略図である。
【発明を実施するための形態】
【0094】
概説
本発明は、算術回路充足可能性と公開鍵の妥当性に関する従属ステートメント(キーステートメントプルーフ)の両方を同時に必要とする複合ステートメントの効率的なゼロ知識検証を可能にする。公開鍵楕円曲線仕様が、回路充足可能性を証明するために、同形コミットメント関数内で採用される。これは、効率的なやり方で回路入力及び/又は出力として使用される秘密鍵に対応する公開鍵ステートメントの証明を可能にする。
【0095】
回路充足可能性及び楕円曲線キーペアの両方を含むステートメントに関するプルーフを生成することのプルーフサイズ及び計算費用を大きく低減することができる。ここでの方法は、双線形ペアリングフレンドリー楕円曲線の使用を必要としないものである回路充足可能性に関する既存の離散対数ベースのゼロ知識プルーフプロトコルに容易に組み込むことができる。当該方法は、ビットコインsecp256k1標準に完全に適合する。
【0096】
例えばビットコインブロックチェーンなどのブロックチェーン上の2者間の公正な交換トランザクションに関係する2つの用途が記述される。1つ目は、アウトソーシングされたバニティアドレスのトラストレス販売に関するゼロ知識付帯支払いを含み、これは、SHA256ハッシュプリイメージと楕円曲線(例えば、ビットコイン)秘密鍵とが等しいことのゼロ知識証明を必要とする。2つ目は、クロスチェーン・アトミック・スワップのセキュリティを向上させることを含み、これは、SHA256ハッシュプリイメージが、未知の秘密鍵(提供された公開鍵を有する)に、提供されたナンスを乗じたものに等しいことの証明を必要とする。
【0097】
全般的ソリューション
この発明は、(楕円曲線点乗算に基づく)楕円曲線公開/秘密鍵ペアとの関係を含む特定のクラスの複合ステートメントの証明を可能にする方法に関する。
【0098】
任意の暗号楕円曲線キー操作を含むステートメントを証明するためにzkSNARKを用いることは非現実的と考えられ、従って、当該方法は、一般的な回路充足可能性に関するプルーフの構築に使用される“同形隠蔽(homomorphic hiding)”(又はコミットメントスキーム)から直接抽出される楕円曲線公開鍵に関する情報を使用する。当該方法のステートメントに関与する特定タイプの楕円曲線は、回路コミットメントスキームで使用されるものと同じである。
【0099】
しかしながら、SNARK法はペアリング操作を必要とし、それ故に、特別な双線形ペアリングフレンドリー楕円曲線を必要とする。このことは、一部のブロックチェーン上で使用される楕円曲線は双線形ペアリングフレンドリー楕円曲線と互換性がないので、zk-SNARKの使用を不可能にする。
【0100】
例として、ビットコイン公開鍵に関係するステートメントは、互換性のないものであるビットコインsecp256k1曲線を使用している。
【0101】
従って、本発明の方法は、ペアリングに頼らずにいっそう少ない暗号仮定を有した、算術回路充足可能性を証明するための他のプロトコルに適合する。全体的に、本発明の方法はzkSNARKSよりも効率的である。何故なら、より少ない計算しか必要とされず、トラストレス交換用途でのプルーフサイズが小さくなるからである。
【0102】
例として、後述の“ステートメント1”に関する複合回路を表すものである図2の概略図は、ハッシュ関数と楕円曲線乗算の両方のサブ回路を含む。図2において、その概略図は、秘密鍵‘s’並びにそれが有する対応する対を為す公開鍵‘P’及び値‘h’(これは秘密鍵‘s’のハッシュである値)という、3つの入力(Input)を持っている。この概略図は2つの算術回路を含んでおり、1つ目は、秘密鍵に対するハッシュ(Hash)を実行し、2つ目は、秘密鍵に対する楕円曲線乗算(EC mult)を実行する。これらの回路の出力(Out)が入力と比較される。
【0103】
なお、これら内部ゲートは単に例示目的でのものである。この回路は、ハッシュの出力が楕円曲線(EC)公開鍵に等しいことを検査する。入力‘h’、‘P’、及び出力のみが検証者に対して完全に明らかにされる。そのたの値は全て暗号化される。
【0104】
ステートメント1
“ハッシュ関数(H)の出力hと楕円曲線点P(公開鍵)を所与として、ハッシュs(すなわち、h=H(s))のプリイメージが、楕円曲線点乗数(秘密鍵、すなわち、P=s×G、ただし、Gは楕円曲線生成点)に等しい”。
【0105】
当該方法は、証明者がこの特定のステートメントをゼロ知識で証明することを可能にする。このような方法からの恩恵を受ける用途の例が、トラストレスでのデータ交換(例えば、アウトソーシングされたビットコインバニティアドレスの販売)、及び匿名化されたセキュアなクロスチェーン・アトミック・スワップに関して後述される。
【0106】
ステートメント1が真であることの検証は、例として、入力‘h’、‘P’、‘s’をとって、ステートメントが真である場合に‘1’を出力し、それ以外の場合には‘0’を出力するものである以下の擬似コード関数を用いて決定可能である:
int verify(h,P,s)
{
if(h == H(s) && P == s x G) {
return 1
}
else {
return 0
}
}
【0107】
‘ステートメント1’を、ゼロ知識で検証すること、すなわち、zkSNARKシステムで証明者が‘s’の値を検証者から秘密にしたままで検証することは、図2のように、ハッシュ関数と楕円曲線点乗算の両方について算術回路を必要とすることになる。
【0108】
SHA-256ハッシュ関数に関する算術回路は広く使用され、最適化されて、典型的に30,000未満の乗算ゲートを含むが、文献において、暗号楕円曲線点乗算実装に関する算術回路の例は知られていない。そのような回路が知られていたとしても、それらは、そのサイズ及び複雑さのために実用的でなく、より多くのゲートを含む。
【0109】
当該方法は、図2に示すような、単一ハッシュ関数のための完全な算術回路で機能し、これは、キーステートメントプルーフと、ハッシュ関数用の1つの算術回路のみを使用する複合ステートメント1に関する算術回路の概略図を有している。この回路は、ハッシュの出力が正しいこと、及び公開鍵がECの暗号化された入力(キーステートメントプルーフ)に等しいことを検査する。青色でハイライトされた値、すなわち、入力‘h’、‘P’及び出力‘1’は検証者に対して明らかにされ、その他全ての値は暗号化される。
【0110】
図3の回路を用いて、証明者は、回路充足可能性を介して、秘密鍵‘s’のハッシュが‘h’になること、及び、楕円曲線生成点をGとして、鍵ペアの対応する公開鍵‘P’が‘s×G’に等しいことを、明示的に証明することができる。秘密鍵‘s’は、ハッシュのプリイメージ、又は関数への入力であり、ステートメントを証明するときに検証者には明らかにされない。
【0111】
言うまでもなく、‘s×G’が‘P’に等しいことを検証することは、プルーフプロトコルの一部としてコミットメントスキームにおいて必要な楕円曲線を使用することにより、無視できる追加の計算コストで回路プルーフから抽出されることができる。このような操作は‘キーステートメントプルーフ(key-statement proof)’と呼ばれており、‘キーオープニング(key-opening)’と呼ばれるコミットメントオープン手順を使用する。
【0112】
技術的効果
既知のzk-SNARK(Zero-knowledge Succinct Non-interactive Arguments of Knowledge)は、算術回路充足可能性に関する汎用証明システムの一実装である。SNARKフレームワークにおいて、算術回路としてエンコードされるステートメントは、多項式の集合から成る二次算術プログラム(Quadratic Arithmetic Program;QAP)と呼ばれる構成へと変換される。そして、この式の集合の妥当性を単一の点で実証することによって、ステートメントを証明することができる。SNARK法の主な利点は、検証者が数少ない楕円曲線(ペアリング)演算(数ミリ秒を要する)を実行するだけでよく、プルーフが非常に小さく(288バイト)いとともに回路サイズに依存しないということである。
【0113】
SNARK法によって達成される非常に小さいプルーフ及び検証時間は、トラストのあるセットアップ、標準的でない暗号仮定、及び証明者に課される遥かに重い計算負荷という犠牲のもとでもたらされる。SNARK法はまた、楕円曲線双線形ペアリングの使用を必要とする。しかしながら、計算的に実現可能な双線形ペアリングの使用は、特別な‘ペアリングフレンドリー’楕円曲線の使用を必要とする。これは、ビットコインsecp256k1を含む、多くの標準的な暗号楕円曲線パラメータセットの使用を排する。すると、一般的な楕円曲線点乗算を含むステートメントは、明示的な回路(非常に大きくなり得る)を使用しなければならない。
【0114】
前節で説明したSHA回路充足可能性を証明するためのΣプロトコルアプローチとの比較として、SNARK(ピノキオ)フレームワークを用いる場合、証明キーは生成するのに約10秒を要し、約7MBのサイズになり、プルーフも生成するのに約10秒を要することになる。しかしながら、プルーフサイズは288Bとなり、検証するのに要するのは約5msのみである(非特許文献8)。
【0115】
さらに、明示的な楕円曲線乗算(キーステートメント)を回路に組み込むことは、証明キーサイズ及びプルーフ生成時間の両方に、少なくとも1桁の大きさを乗じることになる。
【0116】
本発明は、一般的な算術回路充足可能性と同時での、楕円曲線公開鍵-秘密鍵関係を含むステートメントのゼロ知識証明を可能にする。これは、算術回路充足可能性を証明することの域を超えて無視できる計算費用で達成され、証明の計算費用をかなり増加させるものである楕円曲線点乗算演算用の明示的算術回路を作成することを不要にする。
【0117】
実装
以下、本発明の実装を、バッチ式及び非バッチ式の両方のコミットメントベースゼロ知識証明システムについて説明する。
【0118】
これら例では、ゼロ知識証明プロトコルに、証明者(P)及び検証者(V)の二者が関与する。このプロトコルの目的は、証明者が、所与のステートメント(S)が真であることを、そのステートメントに対する証拠についての情報を秘密にしたまま、検証者に確信させることである。ステートメントは、m個のゲート及びn個のワイヤを有する算術回路(C)と、回路ワイヤ値のうちの1つ(又はそれ以上)に対応する楕円曲線公開鍵:pkについての従属アサーションとで構成される。ここで、下付き文字のlは、キーステートメントのワイヤインデックスである。さらに、ステートメントはまた、完全にオープンにされた(公開)ワイヤ値(すなわち、回路の公開入力/出力)についてのアサーションを含んでもよい。
【0119】
ステートメントで指定される(1つ以上の)楕円曲線公開鍵は、ターゲット楕円曲線仕様(これは、楕円曲線パラメータの全集合:T=(p,a,b,G,n,h)によって規定される)に対応する。
【0120】
ビットコインスクリプトの場合、これらのパラメータはsecp256k1(非特許文献9)の仕様によって規定される。この使用は、ベース生成点Gを含む。ベース点を指定することに加えて、ステートメントはまた、第2の点Fも指定しなければならない(ここで、F=f×Gであり、fはZの要素である)。証明者にfの自由選択を許すことは証明者が偽のプルーフを生成することを可能にすることになり得るので、fの値は、証明的にランダムでなければならず(例えば、ビットコインジェネシスブロックハッシュ)、あるいは、例えばπのバイナリ表現の最初の256ビットなどの“奥の手以外の何物でもない(nothing up my sleeve)”数字でなければならない。
【0121】
バッチにされたコミットメント及びバッチにされていないコミットメントを、4つのゲート及び5つのワイヤを有する代表的な算術回路である図4に関連して説明する。入力ワイヤ(w)は、‘キーオープニング’値koを有するワイヤコミットメントWから明らかにされる又はオープンにされるその公開鍵を持つ。
【0122】
実装 - 個々のワイヤコミットメント
図4を一例として用いるに、‘キーオープニング’は、証明者によって作成されて検証者に送信される、回線内の各ワイヤに対する個々のコミットメントである。これらのキーオープニングは、算術回路充足可能性に関する既知のΣプロトコルに従う。図5は、証明者と検証者との間で交換されるデータを示している。
【0123】
充足可能性は、以下のように、幾つかのステップを含めることによって達成される:
1. 回路の各ワイヤi(i=1,…,n)に対して、Pedersenコミットメントを用いてコミットされる:
=Com(w,r
ここで、
Com(w,r)=w×G+r×F
2. それが対応する公開鍵の照明(キーステートメントプルーフ)を必要とする回路ワイヤlに対して、証明者はまた、キーオープニング:
ko=r×F
も送信する。
3. オプションで、回路ワイヤjが公然に明らかにされていること(完全に公開されたワイヤ)を必要とする場合、証明者は完全なオープニングタプル:
(w,r
を送信する。
4. 次いで、Σプロトコルを用いてゼロ知識で、回路の各ゲートが満たされることが証明され、これは、証明者が、各ゲートについてΣzero及びΣprodコミットメント(すなわち、それぞれ、B、又はC,C,C)を計算して送信し、検証者がチャレンジ値(x)で応答し、次いで証明者がオープニング値(z及びe値)を送信し、そして、検証者がコミットメントと照合することを含む。
5. 回路が満たされることを検証者が確認すると、次いで、検証者が、楕円曲線点減算:
pk=Com(w,r)-ko
を介してワイヤlに関する公開鍵を計算する。
6. そして、検証者が、各pkがステートメント中で指定された(1つ以上の)キーと一致すること(及び完全にオープンにされたワイヤが指定値と一致すること)を確認して、検証を完了する。
【0124】
詳細な実装 - 個々のワイヤコミットメント
図4を続けて参照して、この例の個々のコミットメント及び検証を詳述する明示的な例を提供する。これは、ワイヤのうちの1つのキーステートメントプルーフ及び他の1つのワイヤの完全な開示の両方で、単純な算術回路の充足可能性を検証することを記述するものである。
【0125】
図4に示す回路Cは、5つのワイヤw(i=1,…,5)と4つのゲートg(j=1,…,4)とを有している。ゲート1及び3は加算ゲートであり、ゲート2及び4は乗算ゲートである。
【0126】
証明者及び検証者は、楕円曲線及びコミットメント仕様と共に、回路、ワイヤ5の値、及びワイヤ1の公開鍵を含むステートメントに同意する。それが真であることを証明者が検証者に対して証明することを望むステートメント(S)は:
“私は、回路Cへの充足割り当て(すなわち、全てのゲートを満たすワイヤ値{wi=1 を知っており、ただし、ワイヤ1は公開鍵P(すなわち、P=w×G)を持っており、ワイヤ5は値h(すなわち、w=h)を持っている”
である。
【0127】
ワイヤ1から4の値は明らかにされない。そして、図6に示すように、また以下に説明するように、証明者及び検証者がインタラクトする:
1. 証明者が、5つのランダムなブラインディング値(r,…,r)を生成し、次いで、5つのワイヤコミットメント(W,…,W)を計算し、それらを検証者に送信する。
2. 証明者が、ワイヤ1に対するキーオープニング:ko=r×Fを計算し、それを検証者に送信する。
3. 証明者が、ワイヤ5に関する完全なオープニング情報(w,r)を検証者に送信する。
4. 加算ゲート(g及びg)について、証明者が、(ランダムなナンスrB1及びrB3を用いて)ゼロに対するコミットメント:B=Com(0,rB1)及びB=Com(0,rB3)を生成し、それらを検証者に送信する。
5. 乗算ゲート(g及びg)について、証明者が、次のようにコミットメントを生成し、すなわち:
ゲート2について:
12=Com(t12,t32
=Com(t22,t52) 及び
=t12×W+t42×F
ゲート4について:
14=Com(t14,t34
=Com(t24,t54) 及び
=t14×W+t44×F
のようにコミットメントを生成し、ここで、txx値は、ランダムなブラインディングナンスである。証明者は、これらのコミットメントを検証者に送信する。
6. 次いで、検証者が、ランダムチャレンジ値xを生成し、それを証明者に送信する。あるいは、検証者は、フィアット-シャミアヒューリスティックを用いて、全てのコミットメントの連結をハッシュすることによって、値xを生成してもよい。
7. 加算ゲート(g及びg)について、証明者が、以下のオープニング:
=x(r+r-r)+rB1
=x(r+r-r)+rB3
を計算し、それらを検証者に送信する。
8. 乗算ゲート(g及びg)について、証明者が、以下のオープニング:
12=wx+t12
22=wx+t22
12=rx+t32
22=rx+t52
32=(r-w)x+t42

14=wx+t14
24=wx+t24
14=rx+t34
24=rx+t54
34=(r-w)x+t44
を計算し、それらを検証者に送信する。
9. 最後に、検証者が、等価性を検査する。これらが合格すると、証明が検証される。
【0128】
検証者によって実行される検証は、図7にまとめられており、内側のボックス内の検査が、回路が満たされること、及び、第1のワイヤが必要な公開鍵を有し、第5のワイヤが必要な値を有することを検証する。
【0129】
図5及び図6のチャレンジ‘x’は、対話的な証明を提供し、証明者と検証者との間で通信が往復する。
【0130】
売り手と買い手が同時には応対できない、あるいはオンラインでないことがあり得るので、このインタラクションは、ゼロ知識付帯支払い(zero-knowledge contingent payment;ZKCP)が行われるときに不便であり得る。また、買い手(検証者)が、プルーフが公開的に検証可能であることを望むことがあり、例えば、それがデジタルグッズの広告の一部であることがある。
【0131】
さらに、証明が厳密にゼロ知識であるのは、完全特別正直検証者(perfect special-honest verifier)モデルにおいてのみであり、すなわち、検証者がチャレンジとして真の乱数を生成するのであって、証拠についての情報を試して取り出すためのチャレンジ値を選択したりはしないと仮定されるときのみである。
【0132】
これらの問題を解決するために、フィアット-シャミアヒューリスティックが適用され、これは、ランダムチャレンジ値‘x’を、証明者によって作成されたコミットメントのハッシュの出力で置き換える。ランダムオラクルモデル(暗号ハッシュ関数の出力が真にランダムとみなされる)では、証明者は不正を働くことができず、検証者は生成されたチャレンジ値を検査することができ。
【0133】
従って、この例は、フィアット-シャミアヒューリスティックを使用して対話型証明システムを非対話型のものに変換することによって改善さることができ、また、証明者は、オフラインで独立して公開的に検証されることができるプルーフを生成することができる。
【0134】
より具体的には、チャレンジ値(x)が、証明者によって生成されたコミットメントの全て(すなわち、ワイヤコミットメントの全てと、和ゲート及び積ゲートそれぞれに対するB及びC,C,Cコミットメントの全て)の連結を(例えば、SHA-256で)ハッシュすることによって計算される値で置き換えられる。
【0135】
実装 - バッチ化ベクトルコミットメント
ベクトルコミットメントのバッチ化を伴う回路充足可能性に関する圧縮証明システム(非特許文献8、非特許文献6)は、以下に記載される方法を使用し、当該方法は、バッチにされた回路ワイヤコミットメントからキーステートメントプルーフを抽出することを可能にする。
【0136】
繰り返しを避けるため、完全なプロセスを記載することはせず、以下のステップは、バッチにされたワイヤコミットメントの生成と、それが指定された公開鍵を含むことを例証することとに焦点を当てている。以下のステップでは、ワイヤlが、キーオープニングを与えられるものであり、n個のワイヤがベクトルコミットメント内で共にバッチにされるとして、以下のように、バッチにされたコミットメントが生成される。
1. 証明者が、n-1個の乱数x,…,xn-1←Zを生成する。
2. 証明者が、楕円曲線点K=x×G(for i=1,…,n-1)を計算する。これらの値にK=Gを足したものが、検証者に送られる証明キーPrKを形成する。
3. 証明者が、ランダム値:r←Zを生成する。
4. wがキーオープンされるものであるとして、証明者が、ワイヤ値w(for i=1,…,n)のベクトルwへのコミットメント:
【数5】
を計算し、それを検証者に送信する。
5. 証明者がまた、ベクトルコミットのためのキーオープニング:
【数6】
を送信する。
6. 検証者が、楕円曲線演算:
【数7】
を介して、キーステートメントワイヤの公開鍵オープニングを計算する。
【0137】
発明概要
ハッシュプリイメージ及び楕円曲線秘密鍵の等価性の証明は、数多くの用途で利用されることができる。以下、利用のためのキーステートメントゼロ知識プルーフの具体例の構築を概説するものである2つの用途について説明する。
【0138】
以下のステートメントSは、適用例の目的で、上述のステートメント1のより具体的なバージョンである:
S:
“公開出力hを有するSHA-256ハッシュ関数(H)及びsecp256k1楕円曲線上の公開点Pが所与であり、ハッシュの秘密のプリイメージs(すなわち、h=H(s))が、楕円曲線点乗数(すなわち、対応する秘密鍵、すなわち、P=s×G)に等しい。”
【0139】
提供される例において、このステートメントは、入力ワイヤ(w1)が公開点Pの秘密鍵である、及び出力ワイヤ(wn)がhに等しい、というアサーションとともに、SHA-256ハッシュ関数CSHA256(n個のワイヤw(i=1,…,n)及びm個のゲートを有する)に関する単一の算術回路で構成され、すなわち、
【数8】
で構成される。
【0140】
従って、このステートメントを完全に検証するために、証明者は、検証者に対して、secp256k1ベースのコミットメントスキームを使用して、SHA256回路への充足割り当てを知っていることを実証し、そして、ワイヤ1についてのキーオープニング(ko)及びワイヤnについての完全オープニング(w,r)を単純に提供しなければならない。検証者は、入力ワイヤ(w)の値を教わらず、すなわち、完全にオープンにされる出力ワイヤwを除く他のワイヤのいずれの値も教わらない。
【0141】
用途I
上の実装セクションで説明した本発明の例は、支払い又はリソースへのアクセスのために交換されるデータを表すものである、アウトソーシングされたビットコインバニティアドレスに関するZKCPに適用されることができる。
【0142】
ビットコインアドレスは、公開、コピー及び転記するのが容易なものとするために、人間読み取り可能な英数字フォーマット(Base58エンコーディング)でエンコードされる。このフォーマットの使用は、所謂バニティアドレスの人気につながっており、例えば下に示すもの:
[外1]
などの、所望の(名前のような)文字列を含むアドレスを生じる秘密鍵を見つけるために、鍵空間がブルートフォース(総当たり)探索される。
【0143】
有意なパターンを有するバニティアドレスを導出することは計算的に高くつくため(例えば、上に示したアドレスは、一致が見つかるまでにおよそ1013個の異なる公開鍵の生成を必要とした)、検索をアウトソーシングすることが一般的であり、バニティアドレスが委託販売されているオンラインマーケットプレイスが幾つか存在している。これは、楕円曲線点乗算の同形性を用いて安全に行われることができる(非特許文献7)。
【0144】
生成をアウトソーシングすることは安全であるが、バニティアドレスの販売は信用できない。売り手が支払いを受ける前に買い手が必要値を得たり、売り手が必要値を渡す前に支払いを受けたり、あるいは両者ともが第三者預託サービスを信頼しなければならなかったりする。本発明は、ZKCPを介したバニティアドレスのトラストレス販売を可能にするために使用されることができる。以下にて、買い手/検証者と売り手/証明者との間でとられるステップを説明する。
1. 買い手と売り手が、必要なバニティパターン(Str)及び価格(aビットコイン)について合意し、セキュアである必要のない通信チャンネルを確立する。
2. 買い手が、セキュアなランダム秘密鍵skB及び対応する楕円曲線公開鍵を生成し、公開鍵pk=sk×Gである。
3. 買い手が売り手にpkを送信する。
4. 次いで、売り手が、iを変化させることによってpk=pk+i×Gから導出されるBase58エンコードされたアドレスにおいて必要なパターンの探索を実行する。
5. 必要なパターンを持つアドレスが見つかった場合、売り手はiを保存し、買い手にシグナリングして、pk=i×G及びSHA256ハッシュH(i)を送信する。
6. 売り手はまた、上の例で説明したように、H(i)に対するプリイメージが、pkに対応する秘密鍵であることのプルーフを買い手に提供する。
7. 買い手が、プルーフを検証し、また、pk=pk+pkに対応するアドレスが合意したパターンに一致することを確認する。この時点で(プルーフによって)、買い手は、値iを教わることで、自身がバニティアドレスに関する完全な秘密鍵(sk+i)を導出することが可能になること、及び特定の値iがh=H(i)にハッシュすることを知る。
8. 次いで、買い手が、合意した手数料(a)を含むアウトプットを含んだ、ハッシュ時間ロック契約(HTLC)トランザクションTxを構築する。この出力は、2通りのやり方でアンロックされることができ、すなわち:
i. 任意の時に、売り手からの署名と、ハッシュプリイメージiとを用いて、
ii. 例えば、指定された時間又はブロック高さまで出力が消費されることを防ぐために使用され得るものであるCHECKLOCKTIMEVERIFY (OP_CLTV)スクリプトopコードを使用して、指定された時間の後に買い手からの署名を用いて、
アンロックされることができる。
9. 次いで、買い手が、このトランザクションに署名してブロックチェーンにブロードキャストし、それがブロックへとマイニングされる。
10. 確認されると、売り手は、自身の署名とハッシュロックを解除するための値iを供給するトランザクションTxを提供することによって、Txの出力における手数料を請求することができ、そして、値iはブロックチェーン上で明らかにされる。
11. 買い手は、最終的なバニティアドレス秘密鍵sk=sk+iを計算することができ、pk=sk×Gである。
12. 買い手が指定のOP_CLTV時間の前に値iを供給しない場合、売り手は(非協力的な買い手によって手数料が失われることを防ぐために)署名を提供して手数料を再請求することができる。
【0145】
すると、トランザクションは、完全にアトミックでトラストレスであり、買い手は有効な値iを提供した場合にのみ支払いを受け、値iはブロックチェーン上で公然に明かされる。秘密鍵の分割により、この値は、他の誰にも役に立たず、完全な秘密鍵のセキュリティを損なわない。
【0146】
用途II
上の実装セクションで説明した本発明の例は、各々がそれぞれの、異なるブロックチェーン上に記録された交換されるべきデータを持つ二者間での私的なデータ交換に適用されることができる。
【0147】
より具体的には、本発明は、アトミックトレードとしても知られた、ブロックチェーントランザクション機構を活用するトラストレスでの公正な交換プロトコルであるプライバシーを保護するクロスチェーン・アトミック・スワップに適用されることができる。このプロトコルは、第三者集中型の交換を用いずに、2つの異なるブロックチェーン上で2つの異なる暗号通貨トークンを取引するために使用される。この文脈での単語‘アトミック’は、公正な交換の性質を指し、両者がトランザクションを完了するか、あるいは両者とも完了しないかのいずれかである。
【0148】
既知の基本プロトコルの一例は、以下のステップに従って実行される。安全であるために、スワップで使用される暗号通貨の両方が、ハッシュされ且つ時間ロックされた契約を可能にするスクリプト機能を持たなければならない。このスワップには、アリスとボブの二者が関与する。この例では、アリスが1ビットコインを保有しており、それをボブの100ライトコインと取引することに合意している。
1. アリスが、ボブに送信するライトコイン公開鍵Pを生成する。
2. ボブが、アリスに送信するビットコイン公開鍵Pを生成する。
3. アリスが、セキュアな乱数xを生成する。
4. アリスが、xのSHA-256ハッシュ:h=H(x)を計算する。
5. アリスが、以下であるビットコイントランザクションTx、すなわち、
i. 有効な署名 AND hにハッシュする値を用いて、1ビットコインをPに支払う、
ii. OR 24時間後に1ビットコインをアリスに払い戻す、
ものであるビットコイントランザクションTxを作成する。
6. アリスが、該トランザクションをビットコインネットワークにブロードキャストする。
7. ボブが、ビットコインブロックチェーン上でTxが確認されたことを観測すると、以下であるライトコイントランザクションTx、すなわち、
i. 有効な署名 AND hにハッシュする値を用いて、100ライトコインをPに支払う、
ii. OR 24時間後に100ライトコインをボブに払い戻す、
ものであるビットコイントランザクションTxを作成する。
8. ボブが、該トランザクションをライトコインネットワークにブロードキャストする。
9. トランザクションが確認されると、アリスは、自身の署名及び値xを提供することによって、ライトコイン出力を請求することができる。
10. ボブは、ライトコインブロックチェーン上で値xを観測すると、自身の署名及び値xを提供することによって、ビットコイン出力を請求することができる。
【0149】
この例は、両者ともコインを手に入れる又は両者とも手に入れないのいずれかであることを確実にする。アリスはハッシュ値を生成し、彼女のみがプリイメージを知っているが、彼女は、コインを請求するためにこのプリイメージを明らかにすることを要求され、そして、それが、ボブが彼のコインを請求することを可能にする。どちらかの者が完了に向けてプロトコルに従わない場合、それらの両者がロックアウト期間後に自身のコインを再請求することができる。
【0150】
上述した既知のプロトコルの1つの重大な欠点は、両方のブロックチェーン上のトランザクションが自明にリンク付け可能なことであり、いったん確認されると、固有値xが、永久に、両方のブロックチェーン上で公然と見えてしまう。これは、コインの交換性及びトランザクションのプライバシーの両方に影響を及ぼす。
【0151】
2つのトランザクションをリンク付けないためには、各チェーン上の出力に異なるキーが使用されなければならないが、プロトコルがセキュア且つトラストレスであるために、ボブは、アリスによって、彼女が彼女のハッシュプリイメージを明らかにするときに彼が彼のコインをアンロックするのに必要な情報を教わることになる、というプルーフを与えられなければならない。
【0152】
上の例で説明したキーステートメントプルーフを採用することにより、第2のブロックチェーン上のハッシュロックされた出力を、通常のpay-to-public-key-hash(P2PKH)出力に変換することができ、トランザクションの性質を隠すとともに如何なる可能なリンクも破ることができる。
【0153】
アリスが1ビットコインを保有しており、それをボブの100ライトコインと取引することに合意しているという上の例に適用して、改良プロセスは、以下のアクションを含むことになる:
2. アリスが、ボブに送信するライトコイン公開鍵Pを(秘密鍵sで)を生成する。
3. ボブが、アリスに送信するビットコイン公開鍵Pを(秘密鍵sで)生成する。
4. アリスが、セキュアな乱数x←Zを生成する。
5. アリスが、xのSHA-256ハッシュ:h=H(x)と、xに対応する楕円曲線公開鍵:P=x×Gとを計算する。
6. アリスが、h及びPの両方をボブにセキュアに送信する。
7. アリスはまた、hのプリイメージがPを生成した秘密鍵に等しいことのキーステートメントプルーフをボブに送信する。
8. アリスが、以下であるビットコイントランザクションTx、すなわち、
i. 1ビットコインを公開鍵P=P+Pに支払う、
ii. OR 24時間後に1ビットコインをアリスに払い戻す、
ものであるビットコイントランザクションTxを作成する。
9. アリスが、該トランザクションをビットコインネットワークにブロードキャストする。
10. ボブが、ビットコインブロックチェーン上でTxが確認されたことを観測すると、以下であるライトコイントランザクションTx、すなわち、
i. 有効な署名 AND hにSHA-256ハッシュする値を用いて、100ライトコインをPに支払う、
ii. OR 24時間後に100ライトコインをボブに払い戻す、
ものであるビットコイントランザクションTxを作成する。
11. ボブが、該トランザクションをライトコインネットワークにブロードキャストする。
12. トランザクションが確認されると、アリスは、自身の署名及び値xを提供することによって、ライトコイン出力を請求することができる。
13. ボブは、ライトコインブロックチェーン上で値xを観測すると、楕円曲線点乗算の同形性からs+xであるPの秘密鍵を用いて署名を提供することによってビットコイン出力を要求することができる。
【0154】
用途全般
本発明は、証明者が、検証者に対して、ステートメントが真であることを、該ステートメントに対する証拠(w)を秘密にしたまま証明するものである、ステートメント(S)のゼロ知識証明又は検証に適する。秘密は、例えばハッシュ関数などの関数によって処理されることができるが、例えば公開鍵に関するステートメントの妥当性といった、暗号楕円曲線キー操作を更に含むことができる。上の例において、本発明の方法は、バニティアドレスに関するトラストレスでのZKCPを可能にするために使用されている。これはまた、例えば、パスワードの導出、例えばパスポート又は身元証明書などの有効な機械読み取り可能文書の検証、又は他のそのような機密トランザクションにも適用されることができる。
【0155】
なお、上述の実施形態は、本発明を限定するものではなく、例示するものであり、当業者は、添付の請求項によって規定される本発明の範囲から逸脱することなく、数多くの代わりの実施形態を設計することができる。
【0156】
請求項において、括弧内に置かれた如何なる符号も、請求項を限定するものと解釈されるべきでない。用語“有している”及び“有する”並びにこれらに類するものは、いずれかの請求項又は明細書全体に列挙されたもの以外の要素又はステップの存在を除外するものではない。本明細書において、“有する”は“含む又はからなる”を意味し、“有している”は“含んでいる又はからなっている”を意味する。
【0157】
単数形での要素の参照は、それらの要素の複数形での参照を除外するものではなく、その逆もまた然りである。本発明は、幾つかの別個の要素を有するハードウェアによって、また、適切にプログラムされたコンピュータによって実装され得る。
【0158】
幾つかの手段を列挙するデバイスクレームにおいて、それらの手段のうちの幾つかが、同一のハードウェアアイテムによって具現化されてもよい。特定の複数の手段が相互に異なる従属請求項に記載されているという単なる事実は、それらの手段の組み合わせが有利に使用され得ないということを指し示すものではない。
図1
図2
図3
図4
図5
図6
図7
【外国語明細書】