(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-12-26
(54)【発明の名称】機密データのブロック
(51)【国際特許分類】
H04L 9/32 20060101AFI20231219BHJP
【FI】
H04L9/32 200C
H04L9/32 200Z
H04L9/32 200E
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023537942
(86)(22)【出願日】2021-12-22
(85)【翻訳文提出日】2023-07-19
(86)【国際出願番号】 IB2021062201
(87)【国際公開番号】W WO2022137173
(87)【国際公開日】2022-06-30
(32)【優先日】2020-12-22
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】キラス,メフメット サビル
(72)【発明者】
【氏名】リウ,ワイ
(72)【発明者】
【氏名】ヴォーン,オーウェン
(57)【要約】
メッセージ内の機密データをブロックする方法であって、コンピューティング装置上で実行され、前記メッセージのコピーを作成するステップと、少なくとも1つのゼロ知識証明を生成し、前記少なくとも1つのゼロ知識証明の各々を生成することは、前記コピーのビット内の少なくとも1つの機密ビットの位置を特定するマスクビット列を取得することと、前記少なくとも1つの機密ビットに所定の値を割り当てることで、前記コピーの前記ビットを変更することにより、公開ビット列を計算することと、秘密ビット列を決定することであって、前記秘密ビット列は、前記少なくとも1つの機密ビットを含み、かつ、前記コピーの前記ビットが、前記公開ビット列、前記マスクビット列及び前記秘密ビット列を用いたビットごとの論理計算の出力と等しいという要件を満たすことと、前記メッセージのコピー又はその一部をハッシングして出力ハッシュ値を生成することと、前記公開ビット列、前記マスクビット列、前記出力ハッシュ値、前記秘密ビット列を用いてゼロ知識証明を生成することと、を含む、ステップと、前記コピーから前記少なくとも1つの機密ビットの各々を削除して、変更されたメッセージを生成するステップと、前記少なくとも1つの出力ハッシュ値、及び受信者が前記変更されたメッセージが有効であることを証明できるようにするための前記少なくとも1つのゼロ知識証明とともに、前記変更されたメッセージを前記受信者に出力するステップと、を含む方法。
【特許請求の範囲】
【請求項1】
メッセージ内の機密データをブロックする方法であって、コンピューティング装置上で実行され、
前記メッセージのコピーを作成するステップと、
少なくとも1つのゼロ知識証明を生成し、前記少なくとも1つのゼロ知識証明の各々を生成することは、
前記コピーのビット内の少なくとも1つの機密ビットの位置を特定するマスクビット列を取得することと、
前記少なくとも1つの機密ビットに所定の値を割り当てることで、前記コピーの前記ビットを変更することにより、公開ビット列を計算することと、
秘密ビット列を決定することであって、前記秘密ビット列は、前記少なくとも1つの機密ビットを含み、かつ、前記コピーの前記ビットが、前記公開ビット列、前記マスクビット列及び前記秘密ビット列を用いたビットごとの論理計算の出力と等しいという要件を満たすことと、
前記メッセージのコピー又はその一部をハッシングして出力ハッシュ値を生成することと、
前記公開ビット列、前記マスクビット列、前記出力ハッシュ値、前記秘密ビット列を用いてゼロ知識証明を生成することと、
を含む、ステップと、
前記コピーから前記少なくとも1つの機密ビットの各々を削除して、変更されたメッセージを生成するステップと、
前記少なくとも1つの出力ハッシュ値、及び受信者が前記変更されたメッセージが有効であることを証明できるようにするための前記少なくとも1つのゼロ知識証明とともに、前記変更されたメッセージを前記受信者に出力するステップと、
を含む方法。
【請求項2】
少なくとも1つのゼロ知識証明を生成する前に、前記コピーが、ハッシングするときに使用されるハッシュ関数によって定義される入力メッセージサイズの正の整数倍の長さを持つように、前記メッセージのコピーをパディングするステップと、
前記コピーの長さが前記ハッシュ関数によって定義される前記入力メッセージサイズに対応する場合、前記メッセージのコピーをハッシングすることによって単一のゼロ知識証明が生成され、公開初期化ベクトルを使用して前記出力ハッシュ値を生成するステップと、
を更に含む請求項1に記載の方法。
【請求項3】
少なくとも1つのゼロ知識証明を生成する前に、前記コピーが、ハッシングに使用されるハッシュ関数によって定義される入力メッセージサイズの正の整数倍の長さを持つように、前記メッセージのコピーをパディングするステップ、を更に含み、
パディング後の前記コピーの長さが、前記ハッシュ関数によって定義される前記入力メッセージサイズよりも大きい場合、前記方法は、
前記ハッシュ関数によって定義される前記入力メッセージサイズに対応する長さを各々持つ複数のメッセージブロックに、前記メッセージのコピーを分割するステップと、
機密データを含む1つ以上のメッセージブロックを識別するステップと、
を含み、
機密データを含む前記1つ以上のメッセージブロックの各々に対してゼロ知識証明が生成される、請求項1に記載の方法。
【請求項4】
前記少なくとも1つのゼロ知識証明のうちの1つ以上について、前記コピーのビットは、前記1つ以上のメッセージブロックのうちのメッセージブロックのビットに対応し、前記ゼロ知識証明は、前記メッセージブロックをハッシングして出力ハッシュ値を生成することによって生成される、請求項3に記載の方法。
【請求項5】
前記複数のメッセージブロックは、第1メッセージブロックと1つ以上の更なるメッセージブロックを含み、前記第1メッセージブロックが機密データを含む場合、前記第1メッセージブロックのハッシングには公開初期化ベクトルが使用され、前記更なるメッセージブロックが機密データを含む場合、前記更なるメッセージブロックのハッシングには、前記更なるメッセージブロックの直前のメッセージブロックのハッシングからの出力ハッシュ値が使用される、請求項4に記載の方法。
【請求項6】
前記複数のメッセージブロックのうちの幾つかのメッセージブロックが機密データを含み、前記方法は、前記幾つかのメッセージブロックの各々についてゼロ知識証明を並列に生成するステップ、を含む請求項3に記載の方法。
【請求項7】
前記少なくとも1つのゼロ知識証明のうちの1つについて、前記コピーのビットは、マージされたブロックのビットに対応し、前記マージされたブロックは、機密データを各々含む複数の隣接するメッセージブロックを含み、前記ゼロ知識証明は、前記マージされたブロックの中の各メッセージブロックを反復的にハッシングすることによって生成され、出力ハッシュ値は、最後のメッセージブロックの直前にある前記複数の隣接するメッセージブロックのうちのメッセージブロックのハッシングからの出力ハッシュ値を使用して、前記マージされたブロックのうちの前記最後のメッセージブロックをハッシングすることによって生成される、請求項3に記載の方法。
【請求項8】
機密データを含むメッセージブロックが、所定の閾値未満の数の機密ビットを含むことを識別するステップと、
前記メッセージブロックを、機密データを含む少なくとも1つの隣接するメッセージブロックとマージして、マージされたブロックを生成するステップと、
を更に含む請求項7に記載の方法。
【請求項9】
前記所定の閾値は、前記ハッシュ関数の衝突耐性によって定義される、請求項8に記載の方法。
【請求項10】
前記秘密ビット列は、前記コピーの前記ビットが、(i)公開ビット列と(ii)前記マスクビット列と前記秘密ビット列のビット毎のAND計算の結果とのビット毎のXOR計算に等しいという要件を満たす、請求項1に記載の方法。
【請求項11】
前記マスクビット列を取得することが、メモリから前記マスクビット列を読み出すことを含む、請求項1に記載の方法。
【請求項12】
前記マスクビット列を取得することが、
前記メッセージのコピーのビット内の少なくとも1つの機密ビットの位置を特定することと、
前記コピー内の前記少なくとも1つの機密ビットの位置を特定するマスクビット列を生成することと、
を含む、請求項1に記載の方法。
【請求項13】
前記少なくとも1つのマスクビット列を前記受信者に出力するステップ、を更に含む請求項1に記載の方法。
【請求項14】
前記出力するステップは、前記少なくとも1つの出力ハッシュ値、前記少なくとも1つの公開ビット列、及び前記少なくとも1つのゼロ知識証明とともに、前記受信者に関連付けられたリモート装置に前記変更されたメッセージを送信することを含む、請求項1に記載の方法。
【請求項15】
前記メッセージはブロックチェーントランザクションデータを含み、前記変更されたメッセージは変更されたブロックチェーントランザクションデータを含む、請求項14に記載の方法。
【請求項16】
前記コンピューティング装置はブロックチェーンネットワーク内のブロックチェーンノードである、請求項15に記載の方法。
【請求項17】
前記ブロックチェーントランザクションデータは、ブロックチェーントランザクションをブロックチェーンに記録することを要求するクライアント装置から受信され、前記リモート装置は、前記ブロックチェーンネットワーク内の更なるブロックチェーンノードであり、前記変更されたブロックチェーントランザクションデータが前記ブロックチェーンネットワーク内での伝播のために前記更なるブロックチェーンノードに送信される、請求項16に記載の方法。
【請求項18】
前記リモート装置は前記ブロックチェーンネットワーク内の更なるブロックチェーンノードであり、前記方法は、
ブロックチェーントランザクションを受信するステップと、
ブロックチェーンに記録されるべきブロックを生成するステップであって、前記ブロックは、前記変更されたブロックチェーントランザクションデータを含む、ステップと、
前記変更されたブロックチェーントランザクションデータを含む前記ブロックを前記ブロックチェーンネットワーク内の前記更なるブロックチェーンノードに送信するステップと、
を含む請求項16に記載の方法。
【請求項19】
前記コンピューティング装置はブロックチェーンネットワークの外部にあり、前記リモート装置はクライアント装置である、請求項15に記載の方法。
【請求項20】
ブロックチェーンに記録されたブロックを受信するステップであって、前記ブロックは前記ブロックチェーントランザクションデータを含む、ステップ、を含む請求項16又は19に記載の方法。
【請求項21】
前記ブロックを受信するステップに応答して、前記生成するステップ、前記削除するステップ、前記送信するステップが行われる、請求項20に記載の方法。
【請求項22】
前記生成するステッ及び前記削除するステップは、前記ブロックを受信することに応答して行われ、前記送信するステップは、前記リモート装置からの前記ブロックに対する要求を受信することに応答して行われる、請求項20に記載の方法。
【請求項23】
前記リモート装置からの前記ブロックに対する要求を受信するステップに応答して、前記生成するステップ、前記削除するステップ、前記送信するステップが行われる、請求項20に記載の方法。
【請求項24】
前記少なくとも1つのゼロ知識証明がzkSNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)証明である、請求項1に記載の方法。
【請求項25】
前記ゼロ知識証明を生成するステップは、証明鍵を使用することを更に含む、請求項24に記載の方法。
【請求項26】
更に、前記変更されたメッセージの生成後、メモリから前記メッセージを削除し、前記変更されたメッセージをメモリに格納するステップ、を更に含む請求項1に記載の方法。
【請求項27】
コンピュータ可読記憶装置上に具現化されたコンピュータプログラムであって、コンピュータ機器上で実行すると請求項1に記載の方法を実行するよう構成される、コンピュータプログラム。
【請求項28】
プロセッサとメモリを含むコンピュータ装置であり、前記メモリは、前記プロセッサによって実行されると前記コンピュータ装置に請求項1に記載の方法を実行させる命令を格納している、コンピュータ装置。
【請求項29】
変更されたメッセージが有効であることを検証する方法であって、前記変更されたメッセージは元のメッセージから機密データを除去したものに対応し、前記方法は、コンピュータ装置上で実行され、
前記変更されたメッセージを取得するステップであって、前記変更されたメッセージが、前記元のメッセージの各機密ビットに所定の値を割り当てたものに対応する、ステップと、
前記変更されたメッセージの出力ハッシュ値を取得し、前記コンピューティング装置のメモリに格納されたデータを使用して前記出力ハッシュ値を検証するステップと、
送信側装置から、前記変更されたメッセージのビットに関連する少なくとも1つのゼロ知識証明を受信するステップと、
以下:(i)前記ゼロ知識証明を生成するために使用された秘密ビット列を導出するために、前記送信側装置により使用された、ビットごとの論理計算の知識、又はそれに関連する検証鍵、(ii)前記変更されたメッセージのビット、(iii)前記変更されたメッセージのビット内の少なくとも1つの機密ビットの位置を特定するマスクビット列、(iv)前記変更されたメッセージのビットのハッシュ値又はその一部、及び(v)前記変更されたメッセージのビットの入力ハッシュ値、を使用して前記少なくとも1つのゼロ知識証明の各々を検証するステップと、
を含む方法。
【請求項30】
前記変更されたメッセージを取得するステップが、前記変更されたメッセージを前記送信側装置から受信することを含む、請求項29に記載の方法。
【請求項31】
前記変更されたメッセージを取得するステップが、
前記元のメッセージの公開ビットのみを含む、前記元のメッセージのバージョンを受信することと、
前記元のメッセージの前記バージョンと前記マスクビット列を使用して、前記変更されたメッセージを生成するステップと、
を含む、請求項29に記載の方法。
【請求項32】
前記変更されたメッセージのビットは、変更されたメッセージ全体に対応し、前記変更されたメッセージは、前記変更されたメッセージの出力ハッシュ値を生成するために使用されるハッシュ関数によって定義される入力メッセージサイズに対応する長さを持つ、請求項29に記載の方法。
【請求項33】
前記変更されたメッセージは、複数のメッセージブロックを含み、前記出力ハッシュ値は、前記複数のメッセージブロックのうちの最後のメッセージブロックのハッシュであり、前記複数のメッセージブロックは、前記出力ハッシュ値を生成するために使用されるハッシュ関数によって定義される入力メッセージサイズに対応する長さを持つ、請求項29に記載の方法。
【請求項34】
前記変更されたメッセージのビットは、前記複数のメッセージブロックのいずれかに対応する、請求項33に記載の方法。
【請求項35】
マージされたブロックは、機密データを含む複数の隣接するメッセージブロックを含み、前記ゼロ知識証明を検証するステップは、前記マージされたブロックの最後のメッセージブロックのハッシュ値を使用する、請求項29に記載の方法。
【請求項36】
前記元のメッセージがブロックチェーントランザクションであり、前記コンピューティング装置のメモリに格納されたデータが、前記ブロックチェーントランザクションに関連付けられたトランザクション識別子であり、出力ハッシュ値を検証するステップは、前記出力ハッシュ値をハッシングし、ハッシングの出力を前記トランザクション識別子と比較することを含む、請求項29に記載の方法。
【請求項37】
前記変更されたメッセージのビットに関連付けられた複数のゼロ知識証明は、前記送信側装置から受信され、前記複数のゼロ知識証明を検証するステップは並行して行われる、請求項29に記載の方法。
【請求項38】
コンピュータ可読記憶装置上に具現化されたコンピュータプログラムであって、コンピュータ装置上で実行すると請求項29に記載の方法を実行するよう構成される、コンピュータプログラム。
【請求項39】
プロセッサとメモリを含むコンピュータ装置であり、前記メモリは、前記プロセッサによって実行されると前記コンピュータ装置に請求項29に記載の方法を実行させる命令を格納している、コンピュータ装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、メッセージ内の機密データをブロックすることに関する。
【背景技術】
【0002】
ブロックチェーンとは、分散型ピアツーピア(P2P)ネットワーク(以下で「ブロックチェーンネットワーク」とも呼ばれる)内の複数のノードの各々において、ブロックチェーンの重複コピーが維持され広く公表される、分散データ構造の形態を指す。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは1つ以上のトランザクションを含む。所謂「コインベーストランザクション」以外の各トランザクションは、シーケンス内の先行するトランザクションをポイントする。シーケンスは、1つ以上のコインベーストランザクションまで遡る1つ以上のブロックに跨がってよい。コインベーストランザクションは以下で更に議論される。ブロックチェーンネットワークに提出されるトランザクションは、新しいブロックに含まれる。新しいブロックは、「マイニング」として知られる処理により生成される。「マイニング」は、複数のノードの各々が「proof-of-work」を実行するために競争する、つまり、ブロックチェーンの新しいブロックに含まれることを待っている順序付き及び妥当性確認済みの保留中のトランザクションの定義されたセットの提示に基づき、暗号パズルを解くことを含む。留意すべきことに、ブロックチェーンは幾つかのノードにおいてプルーニング(pruned)されてよく、ブロックの公開はブロックヘッダのみの公開を通じて達成できる。
【0003】
ブロックチェーン内のトランザクションは、以下の目的:デジタルアセット(つまり、多数のデジタルトークン)を運ぶこと、仮想台帳又はレジストリの中のエントリのセットを順序付けること、タイムスタンプエントリを受信し処理すること、及び/又はインデックスポインタを時系列にすること、のうちの1つ以上のために使用できる。ブロックチェーンの上に追加の機能をレイヤ化するために、ブロックチェーンを利用することもできる。例えば、ブロックチェーンプロトコルは、トランザクション内のデータに追加のユーザデータ又はインデックスを格納できるようにし得る。単一トランザクション内に格納できる最大データ容量に対する予め指定された限度は存在しない。従って、より複雑なデータを組み込むことができる。例えば、これは、ブロックチェーン内に電子文書(electronic document)、或いはオーディオ若しくはビデオデータを格納するために使用され得る。
【0004】
ブロックチェーンネットワークのノード(「マイナー」と呼ばれることがある)は、以下に詳細に説明する分散型トランザクション登録及び検証処理を実行する。つまり、この処理の間、ノードは、トランザクションの妥当性確認を行い、それらをブロックテンプレイトに挿入し、それに対して有効なproof-of-work解を特定しようと試みる。有効な解が見付かると、新しいブロックはネットワークの他のノードへと伝播され、それにより、各ノードがブロックチェーンに新しいブロックを記録できるようになる。トランザクションをブロックチェーンに記録させるために、ユーザ(例えば、ブロックチェーンクライアントアプリケーション)は、伝播させるために、ネットワークのノードの1つにトランザクションを送信する。トランザクションを受信したノードは、proof-of-work解を見付けるために競争し、妥当性確認されたトランザクションを新しいブロックに組み込む。各ノードは、トランザクションが有効であるための1つ以上の条件を含む同じノードプロトコルを実施するよう構成される。無効なトランザクションは、伝播されず、ブロックに組み込まれることもない。トランザクションが妥当性確認され、それによってブロックチェーンに受け入れられたと仮定すると、(任意のユーザデータを含む)トランザクションは、従って、不変の公開レコードとしてブロックチェーンネットワークの各ノードに登録されインデックスされたままである。
【0005】
最新のブロックを生成するためにproof-of-workパズルを解くことに成功したノードは、標準的に、デジタルアセットの新しい量、つまりトークンの数を生成する「コインベーストランザクション(coinbase transaction)」と呼ばれる新しいトランザクションにより報酬を受ける。無効なトランザクションの検出及び拒否は、ネットワークのエージェントとして動作し及び不法行為を報告及び阻止するよう奨励される競合ノードの動作により実施される。情報の広範な公開により、ユーザはノードの性能を継続的に監査できる。単なるブロックヘッダの公開により、参加者はブロックチェーンの現下の完全性を保証できる。
【0006】
「アウトプットベースの」モデル(UTXOに基づくモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つ以上のインプット及び1つ以上のアウトプットを含む。任意の使用可能アウトプットは、先行するトランザクションシーケンスから導出可能なデジタルアセットの量を指定する要素を含む。使用可能アウトプットは、時にUTXO(unspent transaction output、未使用トランザクションアウトプット)と呼ばれる。アウトプットは、アウトプットの将来の償還(redemption)のための条件を指定するロックスクリプトを更に含んでよい。ロックスクリプトは、デジタルトークン又はアセットを妥当性確認し及び移転するために必要な条件を定義する述部(predicate)である。(コインベーストランザクション以外の)トランザクションの各インプットは、先行するトランザクション内のそのようなアウトプットへのポインタ(つまり参照)を含み、ポイントされたアウトプットのロックスクリプトをアンロックするためのアンロックスクリプトを更に含んでよい。従って、トランザクションのペアを考えるとき、それらを、第1トランザクション及び第2トランザクション(又は「ターゲット」トランザクション)と呼ぶ。第1トランザクションは、デジタルアセットの量を指定する、及びアウトプットをアンロックする1つ以上の条件を定義するロックスクリプトを含む、少なくとも1つのアウトプットを含む。第2ターゲットトランザクションは、第1トランザクションのアウトプットへのポインタと、第1トランザクションのアウトプットをアンロックするためのアンロックスクリプトとを含む、少なくとも1つのインプットを含む。
【0007】
このようなモデルでは、第2ターゲットトランザクションがブロックチェーンで伝播され記録されるブロックチェーンネットワークに送られるとき、各ノードで適用される有効性の基準の1つは、アンロックスクリプトが第1トランザクションのロックスクリプトで定義された1つ以上の条件のすべてを満たすことである。もう1つは、第1トランザクションのアウトプットが、別の前の有効なトランザクションによって未だ償還されていないことである。これらの条件のうちのいずれかに従いターゲットトランザクションが無効であると分かった任意のノードは、該トランザクションを(有効なトランザクションとして)伝搬させず(しかし、無効なトランザクションを登録する場合がある)、ブロックチェーンに記録させるために新しいブロックに含めることもしない。
【0008】
トランザクションモデルの代替のタイプは、アカウントに基づくモデルである。この場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。すべてのアカウントの現在の状態は、ブロックチェーンと分離してノードによって保管され、絶えず更新される。
【発明の概要】
【0009】
ブロックチェーン(例えばビットコインブロックチェーン)の不変性は、公開台帳にアップロードされたデータはすべて検閲されないことを意味すると考えられてきた。ビットコイントランザクション内の一部のデータペイロード(例えば、銀行口座番号、パスポート番号)の配布が管理当局によってブロックされているシナリオでは、ビットコインネットワークの参加者は、データがネットワーク全体に伝播されるのをブロックするか、同じデータがネットワーク全体に拡散するのを許可するかのジレンマに直面する。前者のケースではブロックチェーンの不変性が破られるが、後者のケースでは他の参加者に害を及ぼすことになり、データを共有する参加者に法的な結果をもたらす可能性がある。
【0010】
本開示の実施例では、ブロックチェーンの不変性を維持しながら、ブロックチェーントランザクションの一部の(必要に応じて多い又は少ない)データをブロックするメカニズムが提供される。つまり、データがブロックされているにもかかわらず、参加者はブロックチェーンの履歴の完全性を検証することができる。
【0011】
本開示の実施例は、ブロックチェーントランザクションの任意のフィールドの任意の部分に含まれる機密データをブロックする(すなわち、隠す)ために使用することができる。例えば、本開示の実施例は、ブロックチェーントランザクションのOP_FALSE OP_RETURNフィールドに含まれる機密データをブロックするために使用することができる。
【0012】
ゼロ知識証明(Zero-Knowledge Proof (ZKP))とは、証明者として知られるパーティが、ステートメントが真実であるという事実以外の情報を明らかにすることなく、検証者として知られる別のパーティに対して、そのステートメントが真実であることを証明することができる方法である。本開示の実施例では、1つ以上のZKPが生成され、変更されたメッセージの有効性を証明するために必要な機密データを明らかにすることなく、(機密データが削除された)変更されたメッセージが依然として有効であるという証明を提供する。すなわち、「ゼロ知識証明」という用語は、ここでは、機密/秘密データに関する情報が明らかにされない証明者と検証者との間の知識の証明を意味するために使用される。ブロックチェーントランザクションのコンテキストでは、ZKPは、「これらのフィールドは、所与のトランザクションIDを持つトランザクションの一部である」というステートメントを証明するために使用されるが、ステートメントを証明するために必要な情報、つまりブロックされたデータを提供する必要はない。従って、ブロックされたデータを開示せずに、変更されたブロックチェーントランザクションアウトプットの妥当性を検証することができる。
【0013】
本明細書に開示される一態様によると、メッセージ内の機密データをブロックする方法であって、コンピューティング装置上で実行され、
前記メッセージのコピーを作成するステップと、
少なくとも1つのゼロ知識証明を生成し、前記少なくとも1つのゼロ知識証明の各々を生成することは、
前記コピーのビット内の少なくとも1つの機密ビットの位置を特定するマスクビット列を取得することと、
前記少なくとも1つの機密ビットに所定の値を割り当てることで、前記コピーの前記ビットを変更することにより、公開ビット列を計算することと、
秘密ビット列を決定することであって、前記秘密ビット列は、前記少なくとも1つの機密ビットを含み、かつ、前記コピーの前記ビットが、前記公開ビット列、前記マスクビット列及び前記秘密ビット列を用いたビットごとの論理計算の出力と等しいという要件を満たすことと、
前記メッセージのコピー又はその一部をハッシングして出力ハッシュ値を生成することと、
前記公開ビット列、前記マスクビット列、前記出力ハッシュ値、前記秘密ビット列を用いてゼロ知識証明を生成することと、
を含む、ステップと、
前記コピーから前記少なくとも1つの機密ビットの各々を削除して、変更されたメッセージを生成するステップと、
前記少なくとも1つの出力ハッシュ値、及び受信者が前記変更されたメッセージが有効であることを証明できるようにするための前記少なくとも1つのゼロ知識証明とともに、前記変更されたメッセージを前記受信者に出力するステップと、
を含む方法が提供される。
【0014】
本明細書に開示される一態様によると、変更されたメッセージが有効であることを検証する方法であって、前記変更されたメッセージは元のメッセージから機密データを除去したものに対応し、前記方法は、コンピュータ装置上で実行され、
前記変更されたメッセージを取得するステップであって、前記変更されたメッセージが、前記元のメッセージの各機密ビットに所定の値を割り当てたものに対応する、ステップと、
前記変更されたメッセージの出力ハッシュ値を取得し、前記コンピューティング装置のメモリに格納されたデータを使用して前記出力ハッシュ値を検証するステップと、
送信側装置から、前記変更されたメッセージのビットに関連する少なくとも1つのゼロ知識証明を受信するステップと、
以下:(i)前記ゼロ知識証明を生成するために使用された秘密ビット列を導出するために、前記送信側装置により使用された、ビットごとの論理計算の知識、又はそれに関連する検証鍵、(ii)前記変更されたメッセージのビット、(iii)前記変更されたメッセージのビット内の少なくとも1つの機密ビットの位置を特定するマスクビット列、(iv)前記変更されたメッセージのビットのハッシュ値又はその一部、及び(v)前記変更されたメッセージのビットの入力ハッシュ値、を使用して前記少なくとも1つのゼロ知識証明の各々を検証するステップと、
を含む方法が提供される。
【0015】
本明細書ではブロックチェーントランザクションであるメッセージに関連して実施形態が記述されているが、本開示の実施形態は、ビットコイン及び他のブロックチェーンの文脈の外に拡張され、任意の長さのメッセージの任意の部分をブロックするために使用することができる。以下に説明するように、実施形態は、同時実行(すなわち並列計算)によって、大きなデータサイズのメッセージの一部を効率的にブロックすることができる。
【図面の簡単な説明】
【0016】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、例としてのみ以下の添付の図面を参照する:
【
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
【
図2】ブロックチェーンに記録されるトランザクションの幾つかの例を概略的に示す。
【
図3A】クライアントアプリケーションの概略ブロック図である。
【
図3B】
図3Aのクライアントアプリケーションにより提示され得る例示的なユーザインタフェースの概略的模擬表示である。
【
図4】トランザクションを処理するための特定のノードソフトウェアの概略ブロック図である。
【
図6A】メッセージ内のデータをブロックするプロセスを示している。
【
図6B】メッセージ内のデータをブロックするプロセスを示している。
【
図6C】メッセージ内のデータをブロックするプロセスを示している。
【
図6D】メッセージ内のデータをブロックするプロセスを示している。
【
図8】単一の圧縮を適用するゼロ知識証明を生成するために使用される回路を示している。
【
図9】複数のラウンドの圧縮を適用する少なくとも1ゼロ知識証明を生成するために使用される回路を示している。
【
図10A】変更されたメッセージが有効であることを検証するプロセスを示している。
【
図10B】変更されたメッセージが有効であることを検証するプロセスを示している。
【発明を実施するための形態】
【0017】
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含んでよい。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように配置され得る複数のブロックチェーンノード104を含む。図示されないが、ブロックチェーンノード104は、ほぼ完全なグラフとして配置されてよい。各ブロックチェーンノード104は、従って、他のブロックチェーンノード104と高度に結合される。
【0018】
各ブロックチェーンノード104は、異なるピアに属するノード104のうちの異なるノード104を有す、ピアのコンピュータ装置を含む。各ブロックチェーンノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)、及び特定用途向け集積回路(ASIC)のような他の機器を含む処理装置を含む。各ノードはまた、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体又は媒体の形態のコンピュータ読み取り可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。
【0019】
ブロックチェーン150は、データのブロック151のチェーンを含み、ブロックチェーン150の各々のコピーは、分散型又はブロックチェーンネットワーク106内の複数のノード104の各々において維持される。上述のように、ブロックチェーン150のコピーを維持することは、必ずしも、ブロックチェーン150全体を格納することを意味しない。代わりに、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(後述する)を格納する限り、ブロックチェーン150からデータを取り除くことができる。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、ここでは、この文脈におけるトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデル又はスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各アウトプットは、資産としてのデジタルアセットの量を表す量を指定する。この例では、アウトプットが暗号的にロックされているのはユーザ103である(ロックを解除し、それによって償還又は使用するために、そのユーザの署名又は他の解を必要とする)。各インプットは、先行するトランザクション152のアウトプットを指し示し、それによって、トランザクションをリンクする。
【0020】
各ブロック151は、また、ブロック151への逐次的順序を定義するように、チェーン内の先に生成されたブロック151を遡ってポイントするブロックポインタ155を含む。(コインベーストランザクション以外の)各トランザクション152は、トランザクションのシーケンスに順序を定義するために、前のトランザクションへのポインタを含む(注:トランザクション152のシーケンスは、分岐することが許される)。ブロック151のチェーンは、チェーンの第1ブロックであったジェネシスブロック(genesis block (Gb))153にまで戻る。チェーン150の初期に1つ以上のオリジナルトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
【0021】
ブロックチェーンノード104の各々はトランザクション152を他のブロックチェーンノード104へ転送し、それにより、ネットワーク106に渡りトランザクション152を伝播させるよう構成される。各ブロックチェーンノード104は、ブロック151を生成し、同じブロックチェーン150の各々のコピーを自身の各々のメモリに格納するよう構成される。各ブロックチェーンノード104はまた、ブロック151に組み込まれるのを待つトランザクション152の順序付きセット(又はプール)154を維持する。順序付きプール154は、時に「メモプール(mempool)」と呼ばれる。この用語は、本願明細書では、任意の特定のブロックチェーン、プロトコル、又はモデルに限定されない。それは、ノード104が有効であるとして受け付けた、及びノード104が同じアウトプットを使用しようと試みる他のトランザクションを受け付けないよう義務付けられたトランザクションの順序付きセットを表す。
【0022】
所与の現在のトランザクション152jにおいて、インプット(又はその各々)は、トランザクションのシーケンスの中の先行トランザクション152iのアウトプットを参照するポインタを含み、このアウトプットが現在のトランザクション152jにおいて償還されるか又は「使用される(spent)」ことを指定する。一般に、先行するトランザクションは、順序付きセット154又は任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、必ずしも、現在のトランザクション152jが生成された又はネットワーク106へ送信されたときに存在する必要はないが、先行するトランザクション152iは、現在のトランザクションが有効であるために存在し妥当性確認されている必要がある。従って、本願明細書で「先行する」は、ポインタによりリンクされた論理的シーケンスの中で先行するものを表し、必ずしも時系列の中での生成又は送信の時間を表さない。従って、それは、必ずしも、トランザクション152i,152jが順不同で生成され又は送信されることを排除しない(以下の親のない(orphan)トランザクションに関する議論を参照する)。先行するトランザクション152iは、等しく、祖先(antecedent)又は先行(predecessor)トランザクションと呼ばれ得る。
【0023】
現在のトランザクション152jのインプットは、インプット認可、例えば先行するトランザクション152iのアウトプットがロックされているユーザ103aの署名も含む。次に、現在のトランザクション152jのアウトプットは、新しいユーザ又はエンティティ103bに暗号的にロックすることができる。従って、現在のトランザクション152jは、先行するトランザクション152iのインプットに定義された量を、現在のトランザクション152jのアウトプットに定義された新しいユーザ又はエンティティ103bに移転することができる。ある場合には、トランザクション152は、複数のユーザ又はエンティティ間でインプット量を分割するために複数のアウトプットを有してもよいエンティティ(そのうちの1つは、お釣りを与えるために、元のユーザ又はエンティティ103aであってもよい)。幾つかの場合には、トランザクションが複数のインプットを有し、1つ以上の先行するトランザクションの複数のアウトプットから量をまとめ、現在のトランザクションの1つ以上のアウトプットに再分配することもできる。
【0024】
ビットコインのようなアウトプットに基づくトランザクションプロトコルによると、個人ユーザ又は組織のようなエンティティ103は、(手動で又はパーティにより利用されている自動処理によって)新しいトランザクション152jに作用したいとき、作用側エンティティは新しいトランザクションを自身のコンピュータ端末102から受信側へ送信する。作用側パーティ又は受信側は、結局、このトランザクションをネットワーク106のブロックチェーンノード104のうちの1つ以上(これらは、今日では、標準的にサーバ又はデータセンタであるが、原理的に他のユーザ端末も可能である)へと送信する。幾つかの例では、新しいトランザクション152jに作用するパーティ103が、トランザクションを、受信側ではなくブロックチェーンノード104のうちの1つ以上へと直接送信し得ることも排除されない。トランザクションを受信するブロックチェーンノード104は、各ブロックチェーンノード104に適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、典型的には、ブロックチェーンノード104に、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付きシーケンスの中の前のトランザクション152iに依存する、期待される署名と一致することをチェックすることを要求する。このようなアウトプットに基づくトランザクションプロトコルの場合、これは、新しいトランザクション152jのインプットに含まれるパーティ103の暗号署名又は他の認証が、新しいトランザクションが割り当てる先行するトランザクション152jのアウトプットに定義された条件と一致することをチェックすることを含んでよく、この条件は、典型的には、新しいトランザクション152jのインプット内の暗号署名又は他の認証が、新しいトランザクションのインプットがリンクされた前のトランザクション152iのアウトプットをアンロックすることを少なくともチェックすることを含む。条件は、先行するトランザクション152iのアウトプットに含まれるスクリプトにより少なくとも部分的に定義されてよい。あるいは、単にブロックチェーンノードプロトコルだけで固定することもできるし、あるいは、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、ブロックチェーンノード104は、新しいトランザクションをブロックチェーンネットワーク106内の1つ以上の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つ以上のさらなるノード104に転送し、以下で同様である。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に伝播される。
【0025】
アウトプットベースのモデルでは、与えられ割り当てアウトプット(例えば、UTXO)が割り当てられる(例えば使用される)かどうかの定義は、ブロックチェーンノードプロトコルに従って別の今後の(onward)トランザクション152jのインプットによって既に有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが償還を試みる先行するトランザクション152iのアウトプットが、別のトランザクションによって未だ償還されていことである。ここでも、有効でない場合、トランザクション152jは、(無効であるとしてフラグが立てられ変更するために伝播されない限り)ブロックチェーン150に伝播又は記録されない。これは、取引者が同じトランザクションのアウトプットを複数回割り当てようとする二重支出を防ぐ。一方、アカウントベースモデルは、口座残高を維持することによって、二重支出を防ぐ。この場合も、トランザクションの順序が定義されているため、口座残高は、一度に単一の定義された状態を有する。
【0026】
妥当性確認トランザクションに加えて、ブロックチェーンノード104は、また、「proof -of -work」により支えられているマイニングと呼ばれるプロセスで、トランザクションのブロックを最初に作成するために競合する。ブロックチェーンノード104では、ブロックチェーン150に記録されたブロック151にまだ現れていない有効なトランザクションの順序付きプール154に新しいトランザクションが追加される。ブロックチェーンノードは、次に、暗号パズルを解くことを試みることにより、トランザクションの順序付きセット154からトランザクション152の新しい有効なブロック151を組み立てるために競争する。これは、典型的には、ノンス(nonce)が保留トランザクションの順序付きプール154の表現と連結され、ハッシュされるときに、ハッシュのアウトプットが所定の条件を満たすような「ノンス」値を探すことを含む。例えば、所定の条件は、ハッシュのアウトプットが、所定の数の先頭ゼロを有することであってもよい。これは、単に1つの特定の種類のproof-of-workパズルであり、他の種類が排除されないことに留意する。ハッシュ関数の特性は、インプットに関して予測不可能なアウトプットを持つことである。従って、この探索は、ブルートフォースによってのみ実行することができ、従って、パズルを解決しようとしている各ブロックチェーンノード104において、相当量の処理リソースを消費する。
【0027】
パズルを解いた第1ブロックチェーンノード104は、これをネットワーク106に通知し、その解を証明として提供する。この解は、ネットワーク内の他のブロックチェーンノード104によって簡単にチェックすることができる(ハッシュに対する解が与えられれば、ハッシュのアウトプットが条件を満たすことを確認することは簡単である)。第1ブロックチェーンノード104は、該ブロックを受け入れる閾値の他のノードの合意に、ブロックを伝播させ、従ってプロトコルルールを実施する。トランザクションの順序付きセット154は、次に、ブロックチェーンノード104の各々により、ブロックチェーン150内の新しいブロック151として記録されるようになる。また、新しいブロック151nにはブロックポインタ155が割り当てられ、チェーン内で前に作成されたブロック151n-1を指すようになっている。proof-of-work解を生成するために必要とされる例えばハッシュの形式の有意な量の労力が、ブロックチェーンプロトコルのルールに従うという第1ノード104の意図をシグナリングする。そのようなルールは、前に妥当性確認されたトランザクションと同じアウトプットを割り当てる場合に有効としてトランザクションを受け付けないこと、或いは二重支払いとして知られいることを含む。一旦生成されると、ブロック151は、ブロックチェーンネットワーク106内のブロックチェーンノード104の各々で認識され、維持されるので、修正することができない。また、ブロックポインタ155は、ブロック151に順序を課す。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付きブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
【0028】
パズルを解決するために常に競争している異なるブロックチェーンノード104は、いつ解を探し始めたか、又はトランザクションが受信された順序によって、いつでも未だ公開されていないトランザクションのプール154の異なるスナップショットに基づいてパズルを解いているかもしれないことに留意する。パズルを解く者は誰でも、最初に次の新しいブロック151nに含まれるトランザクション152を定義し、その順序で、未公開のトランザクションの現在のプール154が更新される。そして、ブロックチェーンノード104は、新たに定義された未公開トランザクションの順序付きプール154からブロックを作り出すために、競争を続ける。また、生じ得る「分岐(フォーク、fork)」を解決するためのプロトコルも存在する。これは、2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解き、ブロックチェーンの矛盾したビューがノード104の間で伝播する場合である。要するに、分岐の枝が伸びるときは常に、最長のものが最終的なブロックチェーン150になる。これは、同じトランザクションが両方の分岐に現れるので、ネットワークのユーザ又はエージェントに影響しないことに留意する。
【0029】
ビットコインブロックチェーン(及び殆どの他のブロックチェーン)によると、新しいブロック104を構成するのに成功したノードは、デジタルアセットの追加の定義された量を分配する新しい特別な種類のトランザクションの中でデジタルアセットの追加の承認された量を新たに割り当てる能力を与えられる(1人のエージェント又はユーザから別のエージェント又はユーザへとデジタルアセットの量を移転するエージェント間又はユーザ間トランザクションと異なる)。この特別な種類のトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始(initiation)トランザクション」又は「生成(generation)トランザクション」とも呼ばれることがある。それは標準に新しいブロック151nの第1トランザクションを形成する。proof-of-workは、この特別なトランザクションが後に償還できるように、新しいブロックを構成したノードがプロトコルルールに従うことを意図していることをシグナリングする。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還できる前に、満期、例えば100ブロックを必要としてよい。通常の(非生成)トランザクション152は、そのアウトプットの1つに追加のトランザクション料を指定し、そのトランザクションが公開されたブロック151nを生成したブロックチェーンノード104にさらに報酬を与えることが多い。この手数料は、通常、「トランザクション料」と呼ばれ、後述する。
【0030】
トランザクションの妥当性確認及び公開に関連するリソースのために、典型的には、少なくともブロックチェーンノード104の各々は、1つ以上の物理的サーバユニットを含むサーバ、又はデータセンタ全体の形態をとる。しかしながら、原理的に、任意の所与のブロックチェーンノード104は、ユーザ端末又は互いにネットワーク接続されたユーザ端末又はユーザ端末のグループの形態をとることができる。
【0031】
各ブロックチェーンノード104のメモリは、各々の1つ以上の役割を実行し、ブロックチェーンノードプロトコルに従ってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。ブロックチェーンノード104に属するいずれの動作も、各々のコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーションレイヤにおける1つ以上のアプリケーション、又はオペレーティングシステムレイヤ若しくはプロトコルレイヤのような下位レイヤ、又はこれらの任意の組合せの中に実装されてよい。
【0032】
また、ネットワーク101には、消費者ユーザの役割を果たす複数のパーティ103の各々のコンピュータ装置102も接続されている。これらのユーザは、ブロックチェーンネットワークと相互作用できるが、トランザクションの妥当性確認及びブロックの構築には参加しない。これらのユーザ又はエージェントのうちの一部は、トランザクションにおいて送信側及び受信側として動作してよい。他のユーザは、必ずしも送信側又は受信側として動作することなく、ブロックチェーン150と相互作用してよい。例えば、幾つかのパーティは、ブロックチェーン150のコピーを格納する(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして動作してよい。
【0033】
パーティ103の一部又は全部は、異なるネットワーク、例えば、ブロックチェーンネットワーク106の上に重ねられたネットワークの部分として結合されてよい。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれることが多い)は、ブロックチェーンネットワーク106を含むシステムの部分であると言うことができる。しかしながら、これらのユーザは、ブロックチェーンノードの要求される役割を実行しないので、ブロックチェーンノード104ではない。代わりに、各パーティ103は、ブロックチェーンネットワーク106と相互作用し、それにより、ブロックチェーンノード106に結合する(つまり通信する)ことにより、ブロックチェーン150を利用してよい。2つのパーティ103及び各々の機器102は、説明のために示されており、第1パーティ103a及びその各々のコンピュータ機器102a、ならびに第2パーティ103b及びその各々のコンピュータ機器102bである。より多くのこのようなパーティ103及びそれらの各々のコンピュータ機器102がシステム100に存在し、参加することができるが、便宜上、それらは図示されていないことが理解されよう。各パーティ103は、個人又は組織であってもよい。純粋に例示として、第1パーティ103aは、本明細書においてAliceと称され、第2パーティ103bは、Bobと称されるが、これは限定的なものではなく、本明細書においてAlice又はBobという言及は、各々「第1パーティ」及び「第2パーティ」と置き換えることができることは理解されるであろう。
【0034】
各パーティ103のコンピュータ機器102は、1つ以上のプロセッサ、例えば、1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はFPGAを備える各々の処理装置を備える。各パーティ103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的コンピュータ読み取り可能媒体又は媒体の形態のコンピュータ読み取り可能記憶装置を備える。このメモリは、1つ以上のメモリ媒体、例えば、ハードディスクのような磁気媒体、SSD、フラッシュメモリ又はEEPROMのような電子媒体、及び/又は光学ディスクドライブのような光学媒体を使用する1つ以上のメモリユニットを含むことができる。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105の各々のインスタンスを含むソフトウェアを記憶する。本明細書で与えられたパーティ103に帰属するいずれのアクションも、各々のコンピュータ装置102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えばデスクトップ又はラップトップコンピュータ、タブレット、スマートフォン、又はスマートウォッチのようなウェアラブルデバイスを備えている。所与のパーティ103のコンピュータ装置102は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースのような、1つ以上の他のネットワーク化されたリソースを含んでもよい。
【0035】
クライアントアプリケーション105は、最初に、1つ以上の適切なコンピュータ読み取り可能な記憶媒体、例えばサーバからダウンロードされたもの、又はリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスク又はテープ、光ディスク、例えばCD又はDVD ROM、又はリムーバブル光学ドライブなどのリムーバブル記憶装置上で、任意の所与のパーティ103のコンピュータ機器102に提供され得る。
【0036】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには主に2つの機能を有する。これらのうちの1つは、各々のパーティ103が、ブロックチェーンノード104のネットワーク全体にわたって伝播され、それによってブロックチェーン150に含まれるべきトランザクション152を作成し、認可し(例えば署名し)、送信することを可能にすることである。もう1つは、現在所有しているデジタルアセットの量を各々のパーティに報告することである。アウトプットベースのシステムでは、この第2機能は、当該パーティに属するブロックチェーン150全体に散在する様々なトランザクション152のアウトプットの中で定義される量を照合することを含む。
【0037】
注:種々のクライアント機能が所与のクライアントアプリケーション105に統合されるとして説明されることがあるが、これは、必ずしも限定的ではなく、代わりに、本願明細書に記載される任意のクライアント機能が2つ以上の異なるアプリケーションのスーツに実装されてよく、例えばAPIを介してインタフェースし、又は一方が他方へのプラグインである。より一般的には、クライアント機能は、アプリケーションレイヤ、又はオペレーティングシステムのような下位レイヤ、又はこれらの任意の組合せにおいて実装され得る。以下は、クライアントアプリケーション105の観点で説明されるが、これは限定的ではないことが理解される。
【0038】
各コンピュータ機器102上のクライアントアプリケーション又はソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、ブロックチェーンノード104にコンタクトして、各々のパーティ103が受信側である任意のトランザクションについてブロックチェーン150に問い合わせることができる(又は、実施形態では、ブロックチェーン150は、部分的にその公開視認性を通じてトランザクションの信頼を提供する公開的設備であるため、実際には、ブロックチェーン150内の他のパーティのトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を形成し、送信するように構成される。上述のように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従いトランザクション152を妥当性確認し、トランザクション152をブロックチェーンネットワーク106全体に渡り伝播させるために、トランザクション152を転送するよう構成されるソフトウェアを実行する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に所与のトランザクションモデルを実装する。同じトランザクションプロトコルは、ブロックチェーン150内の全部のトランザクション152について使用される。同じノードプロトコルは、ネットワーク106内の全部のノード104について使用される。
【0039】
所与のパーティ103、例えばAliceがブロックチェーン150に含まれる新たなトランザクション152jを送信したいと望む場合、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新たなトランザクションを作成する(formulate)。彼女は、次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上のブロックチェーンノード104に送信する。例えば、これは、Aliceのコンピュータ102に最も良好に接続されているブロックチェーンノード104であってもよい。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信すると、ブロックチェーンノードプロトコル及びその各々の役割に従って、それを処理する。これは、最初に、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たしているかどうかをチェックすることを含み、その例については、簡単に詳述する。幾つかのトランザクションプロトコルでは、妥当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であってよい。或いは、条件は単にノードプロトコルの組み込み機能であってもよく、或いはスクリプトとノードプロトコルの組み合わせによって定義されてもよい。
【0040】
新たに受信されたトランザクション152jが、有効であると見なされるテストに合格したという条件で(すなわち、「妥当性確認された」という条件で)、トランザクション152jを受信した任意のブロックチェーンノード104は、そのブロックチェーンノード104に維持されているブロックチェーンの順序付きセット154に、新たな妥当性確認済みトランザクション152を追加する。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、妥当性確認済みトランザクション152をネットワーク106内の1つ以上の他のブロックチェーンノード104に伝播する。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、ネットワーク106全体に間もなく伝播されることを意味する。
【0041】
所与のブロックチェーンノード104において維持される保留中トランザクションの順序付きプール154に入れられると、該ブロックチェーンノード104は、新しいトランザクション152を含む、彼ら各々のトランザクションのプールの最新バージョンについて、proof-of-workパズルを解く競争を開始する(他のブロックチェーンノード104は、トランザクションの異なるプール154に基づきパズルを解こうとしているが、誰であっても1番の者が、最新のブロック151に含まれるトランザクションのセットを定義することに留意する。)。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付きプール154の一部についてパズルを解くだろう。)。一旦、新しいトランザクション152jを含むプール154についてproof-of-workが行われると、それはブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、以前のトランザクションへのポインタから構成されるので、トランザクションの順序もまた、不変的に記録される。
【0042】
異なるブロックチェーンノード104は、最初に所与のトランザクションの異なるインスタンスを受信する可能性があり、従って、1つのインスタンスが公開(Publishing)されて新しいブロック151になる前に、どのインスタンスが「有効」であるかについて矛盾するビューを有することがあり、その時点で、全部のブロックチェーンノード104は公開されたインスタンスのみが有効なインスタンスであることに合意する。ブロックチェーンノード104が1つのインスタンスを有効であるとして受け入れ、次に第2インスタンスがブロックチェーン150に記録されていることを発見した場合、該ブロックチェーンノード104は、これを受け入れなければならず、最初に受け入れたインスタンス(つまり未だブロック151の中で公開されていないもの)を破棄する(つまり、無効であるとして扱う)。
【0043】
アカウントベースのトランザクションモデルの一部として、幾つかのブロックチェーンネットワークにより運用される別のタイプのトランザクションプロトコルを「アカウントベース」のプロトコルと呼ぶことがある。アカウントベースの場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。すべてのアカウントの現在の状態は、ブロックチェーンと分離して、ネットワークのノードにより格納され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの連続したトランザクション記録(いわゆる「ポジション」)を用いて発注される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。さらに、任意的なデータフィールドもトランザクションに署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを遡ってポイントしてよい。
【0044】
UTXOベースのモデル
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベース又は「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。例示的なUTXOベースのプロトコルは、ビットコインを参照して説明されるが、他の例示的なブロックチェーンネットワーク上でも等しく実施できることに留意する。
【0045】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202及び1つ以上のアウトプット203を含むデータ構造を含む。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含んでもよく、これは、別の新しいトランザクションのインプット202のソースとして使用することができる(UTXOが未だ償還されていない場合)。UTXOは、デジタルアセットの量を指定する値を含む。これは、分散型台帳上のトークンの設定数を表す。また、他の情報の中でも、UTXOは、それが由来するトランザクションのトランザクションIDも含んでよい。トランザクションデータ構造はまた、ヘッダ201も含んでよく、ヘッダ201は、インプットフィールド202及びアウトプットフィールド203のサイズの指示子を含んでもよい。ヘッダ201は、トランザクションのIDも含んでもよい。実施形態において、トランザクションIDは、トランザクションデータ(トランザクションID自体を除く)のハッシュであり、ノード104に提出された未処理トランザクション152のヘッダ201に格納される。
【0046】
例えばAlice103aは、問題のデジタルアセットの量をBob103bに移転するトランザクション152jを作成したいと考えているとする。
図2において、Aliceの新しいトランザクション152jは「Tx1」とラベル付けされている。これは、Aliceにロックされているデジタルアセットの量を、シーケンス内の先行するトランザクション152iのアウトプット203に取り入れ、その少なくとも一部をBobに移転する。先行するトランザクション152iは、
図2において「Tx0」とラベル付けされている。Tx0とTx1は、単なる任意のラベルある。これらは、必ずしも、Tx0がブロックチェーン151の第1トランザクションであること、又は、Tx1がプール154の直ぐ次のトランザクションであることを意味しない。Tx1は、まだAliceにロックされた未使用アウトプット203を有する任意の先行する(つまり祖先)トランザクションのいずれかを指し示すことができる。
【0047】
先行するトランザクションTx0は、Aliceがその新しいトランザクションTx1を作成するとき、又は少なくとも彼女がそれをネットワーク106に送信するときまでに、既に検証され、ブロックチェーン150のブロック151に含まれていてもよい。それは、その時点で既にブロック151のうちの1つに含まれていてもよく、あるいは、順序付きセット154内でまだ待機していてもよく、その場合、新しいブロック151にすぐに含まれることになる。或いは、Tx0及びTx1が生成されネットワーク106に送信されることができ、或いは、ノードプロトコルが「孤児(orphan)」トランザクションのバッファリングを許容する場合にはTx1の後にTx0が送信されることもできる。ここでトランザクションのシーケンスの文脈で使用される「先行する」及び「後の」という用語は、トランザクション内で指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、「先行する」及び「相続する」又は「祖先」及び「子孫」、「親」及び「子」、等により、等しく置き換えられ得る。これは、必ずしも、それらが作成され、ネットワーク106に送られ、又は任意の所与のブロックチェーンノード104に到達する順序を意味しない。それにもかかわらず、先行するトランザクション(祖先トランザクション又は「親」)を指す後続のトランザクション(子孫トランザクション又は「子」)は、親トランザクションが妥当性確認されない限り、妥当性確認されない。親の前にブロックチェーンノード104に到着した子は孤児とみなされる。それは、ノードプロトコル及び/又はノードの行動に応じて、親を待つために特定の時間、破棄又はバッファリングされることがある。
【0048】
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、本明細書でUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタルアセットの量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202の中のアンロックスクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、特定のパーティ(それが含まれているトランザクションの受益者)に量をロックする。すなわち、ロックスクリプトは、標準的に以下のようなアンロック条件を定義する:後続のトランザクションのインプット内のアンロックスクリプトは、先行するトランザクションがロックされたパーティの暗号署名を含む。
【0049】
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、ブロックチェーンネットワークにより使用される「スクリプト」(Script,大文字S)と呼ばれる。ロックスクリプトは、トランザクションアウトプット203を消費するために必要な情報、例えば、Aliceの署名の必要条件を指定する。トランザクションのアウトプットには、アンロックスクリプトが現れる。アンロックスクリプト(別名:scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、Bobの署名を含んでもよい。アンロックスクリプトは、トランザクションのインプット202に現れる。
【0050】
図示の例では、Tx0のアウトプット203のUTXO0は、ロックスクリプト[Checksig PA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、Aliceの署名Sig PAを必要とする。[Checksig PA]は、Aliceの公開-秘密鍵ペアからの公開鍵PAの表現(つまりハッシュ)を含む。Tx1のインプット202は、Tx1を指すポインタ(例えば、そのトランザクションID、実施形態ではトランザクションTx0全体のハッシュであるTxID0)を含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、さらに、Aliceが鍵ペアからのAliceの秘密鍵をデータの所定の部分(暗号において「メッセージ」と呼ばれることもある)に適用することによって作成された、Aliceの暗号署名を含むアンロックスクリプト<SigPA>を含む。有効な署名を提供するためにAliceが署名する必要があるデータ(又は「メッセージ」)は、ロックスクリプトにより、又はノードプロトコルにより、又はこれらの組み合わせによって定義され得る。
【0051】
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトとアンロックスクリプトを一緒に実行して、アンロックスクリプトがロックスクリプトで定義されている条件(この条件は1つ以上の基準を含むことができる)を満たしているかどうかをチェックすることを含む。実施形態では、これは、2つのスクリプトの連結を含む。
【数1】
ここで、「||」は連結を表し、「<...>」はスタックにデータを配置することを意味し、「[...]」はロックスクリプトに含まれる機能である(本例では、スタックベースの言語)。同等に、スクリプトは。、スクリプトを連結するのではなく共通のスタックにより1つずつ実行されてよい。いずれにせよ、一緒に実行する場合、スクリプトは、Tx0のアウトプットのロックスクリプトに含まれるように、Aliceの公開鍵PAを使用して、Tx1のインプットのアンロックスクリプトが、データの期待される部分に署名するAliceの署名を含むことを認証する。また、データの期待部分(「メッセージ」)も、この認証を実行するために含まれる必要がある。実施形態において、署名されたデータは、Tx1の全体を含む(従って、平文のデータの署名された部分がすでに本質的に存在するので、それを指定する別個の要素を含める必要がない)。
【0052】
公開-秘密暗号法による認証の詳細は、当業者には周知であろう。基本的に、Aliceが彼女の秘密鍵を用いてメッセージに署名した場合、Aliceの公開鍵とそのメッセージが平文ならば、ノード104のような別のエンティティは、そのメッセージがAliceによって署名されていなければならないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、署名としてメッセージにこれをタグ付けすることによって、公開鍵の所有者が署名を認証することを可能にする。従って、実施形態では、特定のデータ片又はトランザクションの部分等に署名するという言及は、データ片又はトランザクションの部分のハッシュに署名することを意味し得る。
【0053】
Tx1のアンロックスクリプトが、Tx0のロックスクリプトで指定された1つ以上の条件を満たす場合(例では、Aliceの署名がTx1で提供され、認証されている場合)、ブロックチェーンノード104は、Tx1が有効であるとみなす。これは、ブロックチェーンノード104がTx1を保留トランザクションの順序付きプール154に追加することを意味する。ブロックチェーンノード104は、トランザクションTx1をネットワーク106内の1つ以上の他のブロックチェーンノード104に転送し、それによって、それがネットワーク106全体に伝播されることになる。一旦、Tx1が妥当性確認され、ブロックチェーン150に含まれると、これは、Tx0からのUTXO0を消費したものとして定義する。Tx1は、未使用トランザクションアウトプット203を使用する場合にのみ有効であることに留意されたい。別のトランザクション152によって既に消費されたアウトプットを消費しようとする場合、Tx1は、たとえ他のすべての条件が満たされていても無効となる。従って、ブロックチェーンノード104は、先行するトランザクションTx0において参照されたUTXOが既に消費されているかどうか(既に別の有効なトランザクションへの有効なインプットを形成しているかどうか)もチェックする必要がある。これが、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である理由の1つである。実際には、所与のブロックチェーンノード104は、トランザクション152が消費されたUTXO203をマークする別個のデータベースを維持することができるが、最終的には、UTXOが消費されたかどうかを定義するのは、ブロックチェーン150内の別の有効なトランザクションへの有効なインプットを既に形成しているかどうかである。
【0054】
所与のトランザクション152の全部のアウトプット203の中で指定された総量が全部のそのインプット202により指される総量より大きい場合、これは、殆どのトランザクションモデルにおいて無効の別の基礎である。従って、このようなトランザクションは、伝播されず、ブロック151に含まれることもない。
【0055】
UTXOベースのトランザクションモデルでは、所定のUTXOを全体として使用する必要があることに注意する。UTXOで定義されている量のうち、別の分量が消費されている一方で、ある分量を「残しておく」ことはできない。ただし、UTXOからの量は、次のトランザクションの複数のアウトプットに分割できる。例えば、Tx0のUTXO0で定義された量は、Tx1の複数のUTXOに分割できる。従って、AliceがBobにUTXO0で定義された量の全てを与えることを望まない場合、彼女は残りの量を使って、Tx1の第2アウトプットの中で自分自身にお釣りを与えるか、又は別のパーティに支払うことができる。
【0056】
特に、Aliceは、通常、彼女のトランザクション104をブロック151に含めることに成功したビットコインノード104のための手数料も含める必要がある。Aliceがそのような手数料を含まない場合、Tx0はブロックチェーンノード104によって拒否される可能性が高く、したがって、技術的には有効であるが、それは伝播されず、ブロックチェーン150に含まれない(ノードプロトコルは、彼らが望まない場合には、ブロックチェーンノード104にトランザクション152を受け入れることを強制しない)。一部のプロトコルでは、トランザクション手数料は、独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、インプット202によって示される総量と、所与のトランザクション152のアウトプット203で指定される総量との間の差は、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1しか持っていないとする。UTXO0で指定されたデジタルアセットの量がUTXO1で指定された量より多い場合、その差は、UTXO1を含むブロックを生成するproof-of-work競争の勝者であるノード104により割り当てられてよい。しかし、代替的又は追加的に、必ずしも、トランザクション152のUTXO203のうちの独自のものにおいて、トランザクション手数料を明示的に指定できることは除外されない。
【0057】
Alice及びBobのデジタルアセットは、ブロックチェーン150内の任意のトランザクション152の中で彼らにロックされたUTXOで構成されている。従って、典型的には、所与のパーティ103のアセットは、ブロックチェーン150を通して、様々なトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与のパーティ103の総残高を定義する1つの数値は記憶されていない。各パーティへのロックされた、別の将来の(onward)トランザクションに未だ使用されていない全ての様々なUTXOの値をまとめることは、クライアントアプリケーション105におけるウォレット機能の役割である。ビットコインノード104のいずれかに格納されたブロックチェーン150のコピーをクエリすることにより、これを行うことができる。
【0058】
スクリプトコードは、概略的に表現されることが多い(すなわち、正確な言語を用いない)ことに注意する。例えば、特定の機能を表現するオペレーションコード(opcode、オペコード)を使用してよい。「OP_....」は、スクリプト言語の特定のオペコードを表す。例として、OP_RETURNは、ロックスクリプトの始めにあるOP_FALSEが先行するとき、トランザクション内にデータを格納することができ、それによってデータをブロックチェーン150に不変に記録することができるトランザクションの使用不可能アウトプットを生成するためのスクリプト言語のオペコードである。例えば、データは、ブロックチェーンに格納することが望ましい文書を含むことができる。
【0059】
通常、トランザクションのインプットは、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。幾つかの実施形態では、所与のトランザクションについて、署名はトランザクションインプットの一部、及びトランザクションアウトプットの全部又は一部に署名する。署名するアウトプットの特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、通常、署名の最後に含まれる4バイトのコードであり、どのアウトプットが署名されるかを選択する(従って、署名の時点で固定される)。
【0060】
ロックスクリプトは、通常、各々のトランザクションがロックされているパーティの公開鍵を含んでいることを表す「scriptPubKey」と呼ばれることがある。アンロックスクリプトは、通常、対応する署名を提供することを表す「scriptSig」と呼ばれることがある。しかし、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語は、任意の1つ以上の条件を定義するために使用され得る。したがって、より一般的な用語「ロックスクリプト」及び「アンロックスクリプト」が好ましい。
【0061】
クライアントソフトウェア
図3Aは、本開示の方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装を示す。クライアントアプリケーション105は、トランザクションエンジン401と、ユーザインタフェース(UI)レイヤ402と、を含む。トランザクションエンジン401は、クライアント105の基礎トランザクション関連機能、例えばトランザクション152を形成し、ブロックチェーンネットワーク106を介して伝播されるように1つ以上のノード104にトランザクションを送信するように、上述したスキームに従って、さらに詳細に説明するように、構成される。
【0062】
UIレイヤ402は、各々のユーザコンピュータ機器102のユーザ入力/出力(I/O)手段を介して、機器102のユーザ出力手段により各々のユーザ103へ情報を出力すること及び機器102のユーザ入力手段により各々のユーザ103から入力を受信することを含む、ユーザインタフェースをレンダリングするよう構成される。例えば、ユーザ出力手段は、視覚的出力を提供する1つ以上のディスプレイスクリーン(タッチ又は非タッチスクリーン)、オーディオ出力を提供する1つ以上のスピーカ、及び/又は触覚出力を提供する1つ以上の触覚出力装置、等を含み得る。ユーザ入力手段は、例えば、1つ又は複数のタッチスクリーンの入力アレイ(出力手段に使用されるものと同じか又は異なる)、マウス、トラックパッド又はトラックボールなどの1つ又は複数のカーソルベースの装置、音声又は声の入力を受け取るための1つ又は複数のマイクロフォン及び音声認識アルゴリズム、手動又は身体のジェスチャの形態で入力を受け取るための1つ又は複数のジェスチャベースの入力装置、又は1つ又は複数の機械的ボタン、スイッチ又はジョイスティックなどを含むことができる。
【0063】
注:本明細書における種々の機能は、同一のクライアントアプリケーション105に統合されていると記述することができるが、これは、必ずしも限定するものではなく、代わりに、2つ以上の別個のアプリケーション、例えば、一方が他方へのプラグインであるか、又はAPI(アプリケーションプログラミングインタフェース)を介したインタフェースで実装することができる。例えば、トランザクションエンジン401の機能は、UIレイヤ402と別個のアプリケーション、又は所与のモジュールの機能に実装されてよく、トランザクションエンジン401が1つより多くのアプリケーションの間で分割されてよい。また、記載の機能の一部又は全部が、例えばオペレーティングシステムレイヤに実装されることを除外しない。本願明細書のどこかで、単一の又は所与のアプリケーション105等を参照する場合、これが単に例としてであること、より一般的には、記載の機能が任意の形式のソフトウェアで実装され得ることが理解される。
【0064】
図3Bは、Aliceの機器102a上のクライアントアプリケーション105aのUI層402によりレンダリングされてよいユーザインタフェース(UI)500の例の模擬表示を与える。同様のUIが、任意の他のパーティのクライアント105b、Bobの機器102b、又は任意の他のパーティの機器によりレンダリングされてよいことが理解される。
【0065】
例示として、
図3Bは、Aliceの観点からUI500を示す。UI500は、ユーザ出力手段を介して別個のUI要素として描画される1つ以上のUI要素501、502、502を含んでもよい。
【0066】
例えば、UI要素は、例えば、画面上の異なるボタン、又はメニュー内の異なるオプション等の1つ以上のユーザ選択可能要素501を含むことができる。ユーザ入力手段は、スクリーン上のUI要素をクリック若しくはタッチすることにより、又は所望のオプションの名称を発話することにより、ユーザ103(この場合にはAlice103a)がオプションのうちの1つを選択又は操作できるよう構成される(注:ここで使用される「手動(manual)」は単に自動の反対を意味し、必ずしも手の使用に限定されない)。オプションは、ユーザ(Alice)がトランザクション152を形成し、トランザクションを1つ以上のノード104に送信して、ブロックチェーンネットワーク106を介して伝播させることを可能にする。
【0067】
代替又は追加で、UI要素は、1つ以上のデータエントリフィールド502を含むことができ、これを通じて、ユーザはトランザクション152を形成し、トランザクションを1つ以上のノード104に送信して、ブロックチェーンネットワーク106を介して伝播させることができる。これらのデータエントリフィールドは、ユーザ出力手段、例えば、オンスクリーンを介してレンダリングされ、データは、ユーザ入力手段、例えば、キーボード又はタッチスクリーンを介してフィールドに入力することができる。あるいは、データは、例えば、音声認識に基づいて口頭で受信され得る。
【0068】
代替的又は追加的に、UI要素は、ユーザに情報を出力するために出力される1つ以上の情報要素503を含んでもよい。例えば、これ/これらは、スクリーン上に描画されるか、又は可聴でレンダリングされることがある。
【0069】
例えば、この/これらは、スクリーン上に描画されるか、又は可聴で描画されることがある。これらのUI要素の機能は、間もなく更に詳細に議論される。また、
図3に示されたUI500は、単に概略的なモックアップであり、実際には、1つ以上のさらなるUIエレメントを含んでもよく、これは、簡潔さのために示されていないことが理解される。
【0070】
ノードソフトウェア
図4は、UTXO又はアウトプットに基づくモデルの例における、ネットワーク106の各ブロックチェーンノード104で実行され得るノードソフトウェア450の例を示す。別のエンティティが、ネットワーク106上でノード104として分類されずに、つまり、ノード104に必要なアクションを実行せずに、ノードソフトウェア450を実行できることに注意する。ノードソフトウェア450は、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベルの決定エンジン454、及び1つ以上のブロックチェーン関連機能モジュールのセット455を含んでよいが、それらに限定されない。各ノード104は、合意モジュール455C(例えば、proof-of-work)、伝播モジュール455P、及びストレージモジュール455S(例えば、データベース)の3つすべてを含むが、これらに限定されないノードソフトウェアを実行できる。プロトコルエンジン401は、標準的に、トランザクション152の異なるフィールドを認識し、それらをノードプロトコルに従い処理するよう構成される。トランザクション152j(Tx
j)が受信され、別の先行するトランザクション152i(Tx
m-1)のアウトプット(例えばUTXO)をポイントするインプットを有するとき、プロトコルエンジン451は、Tx
j内のアンロックスクリプトを識別し、それをスクリプトエンジン452に渡す。プロトコルエンジン451は、更に、Tx
jのインプットの中のポインタに基づき、Tx
iを識別し検索する。Tx
iはブロックチェーン150上で公開されてよい。この場合、プロトコルエンジンは、ノード104に格納されているブロックチェーン150のブロック151のコピーからTxiを取得できる。又は、Tx
iは、まだブロックチェーン150上で公開されていない可能性がある。その場合、プロトコルエンジン451は、ノード154によって保持されている未公開トランザクションの順序付きセット154からTx
iを取得することができる。いずれの方法も、スクリプトエンジン451は、Txiの参照されるアウトプットの中のロックスクリプトを識別し、これをスクリプトエンジン452に渡す。
【0071】
スクリプトエンジン452は、従って、Tx
iのロックスクリプト、及びTx
j対応するインプットからのアンロックスクリプトを有する。例えば、Tx
0及びTx
1が
図2に示されるが、同じことがトランザクションの任意のペアに適用され得る。スクリプトエンジン452は、前述のように2つのスクリプトを一緒に実行し、これらは、使用されているスタックに基づくスクリプト言語(例えばScript)に従い、スタック453にデータを置くことと、データを検索することとを含む。
【0072】
スクリプトを一緒に実行することにより、スクリプトエンジン452は、アンロックスクリプトがロックスクリプトの中で定義された1つ以上の基準を満たすか否か、つまり、それがロックスクリプトが含まれるアウトプットを「アンロック」するか否かを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。スクリプトエンジン452は、アンロックスクリプトは対応するロックスクリプトの中で指定された1つ以上の基準を満たすと決定した場合、結果「真」を返す。その他の場合、それは結果「偽」を返す。
【0073】
アウトプットに基づくモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの有効性についての条件のうちの1つである。標準的に、同様に満たされなければならない、プロトコルエンジン451により評価される1つ以上の更なるプロトコルレベルの条件が更にあり、Txjのアウトプットの中で指定されたデジタルアセットの総量がそのインプットによりポイントされる総量を超えないこと、Txiのポイントされるアウトプットは別の有効なトランザクションにより未だ使用されていないこと、等である。プロトコルエンジン451は、1つ以上のプロトコルレベルの条件と一緒にスクリプトエンジン452からの結果を評価し、それら全部が真である場合、トランザクションTxjを妥当性確認する。プロトコルエンジン451は、トランザクションが有効であるかどうかの指示を、アプリケーションレベル決定エンジン454に出力する。Txjが実際に妥当性確認されたことのみを条件として、決定エンジン454は、合意モジュール455C及び伝播モジュール455Pの一方又は両方を、それらの各々のブロックチェーンに関連する機能をTxjに関して実行するよう制御することを選択してよい。これは、ブロック151に組み込むためにノードの各々の順序付きトランザクションセット154にTxjを追加する合意モジュール455Cと、ネットワーク106内の別のブロックチェーンノード104にTxjを転送する伝播モジュール455Pを含む。任意的に、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のうちのいずれか又は両方をトリガする前に、1つ以上の追加条件を適用してよい。例えば、決定エンジンは、トランザクションがだとうせされたこと、及び十分なトランザクション手数料が残されることの両方を条件としてのみ、トランザクションを公開することを選択してよい。
【0074】
用語「真(true)」及び「偽(false)」は、本願明細書では、必ずしも単一の2進数字(ビット)のみの形式で表現される結果を返すことに限定しないが、それは勿論1つの可能な実装であることに留意する。より一般的には、「真」は、成功又は肯定的な結果を示す任意の状態を表すことができ、「偽」は、不成功又は非肯定的な結果を示す任意の状態を表すことができる。例えば、アカウントに基づくモデルでは、「真」の結果は、署名の暗示的なプロトコルレベルの検証と、スマートコントラクトの追加の肯定的なアウトプットとの組合せにより示され得る(全体の結果は、両方の個々の結果が真である場合に、真を伝達すると考えられる)。
【0075】
データのブロック
前述のように、スクリプトパターンOP_FALSE OP_RETURNは、ブロックチェーンにアップロードされるデータを使用不可能な出力に含めることを容易にする。これを実現するために、ユーザは通常、アップロードするデータのサイズに応じた少額の料金を支払う。例えば、BitcoinSVでは、トランザクションデータのペイロードサイズは事実上無制限であるため、ユーザは単純なテキストからフルビデオまで何でもアップロードできる。他のブロックチェーンでは、スクリプトパターンOP_RETURNのみを使用してアウトプットを使用不可能にすることができる。
【0076】
スクリプトオペコードOP_RETURNと、任意のデータを元帳に格納するために使用できるスクリプトオペコードOP_FALSE OP_RETURNの組み合わせは、ブロックチェーンのサイズの増加につながり、完全なデータを格納する必要のあるブロックチェーンノードのディスクスペースを消費してしまう。
【0077】
ビットコイントランザクション内の一部のデータペイロード(例えば、銀行口座番号、パスポート番号)の配布が管理当局によってブロックされているシナリオでは、一見、これは大きな問題ではない。ペイロードは使用不可能なアウトプット内にあるため、このデータをブロックしてもコインの移動は制限されないのである。従って、UTXOセットはこのアクションの影響を受けない。ただし、第3者がUTXOセットを検証する必要がある場合は、問題が提起される。これは、トランザクションID(トランザクション内のすべてのデータのダブルハッシュと等しい)を生成するために、トランザクションのすべてのフィールドが必要であるためである。従って、ブロックされたデータがないと、第3者はトランザクションの使用可能なアウトプットの完全性を妥当性確認できない。また、ブロックヘッダに格納されているすべてのトランザクションのMerkleルートを計算するときにトランザクションIDが必要になるため、第3者はトランザクションを含むブロックを妥当性確認できない。例えば新たなマイナーがビットコインネットワークに参入した場合に、この問題に直面する。彼らはブロックチェーン全体をダウンロードし、UTXOセットを構築するためにすべてのトランザクションを妥当性確認しなければならない。彼らは、すべてのデータが彼らに利用可能であり、それが改ざんされていない場合、及びその場合にのみ、これを行うことができる。これは、ブロックチェーンの不変性と呼ばれるものである。
【0078】
本開示の実施形態により、ネットワーク参加者は、ブロックチェーンの履歴の完全性を検証することが可能でありながら、データをブロックすることができる。本開示の実施形態は、ブロックチェーントランザクション又はその一部に存在するデータをブロックするために使用できる。
【0079】
図5は、初期化ベクトルと入力メッセージ(preimage)を入力として受け取り、ハッシュ出力(ハッシュダイジェスト)を提供するハッシュ関数を示している。ハッシュ関数Hは、任意のサイズのデータを固定サイズのデータにマッピングする関数である。すなわち、kビットのハッシュ関数Hは次のように定義される関数である:
【数2】
ここで、kは正の整数である。
【0080】
暗号化ハッシュ関数には、次のプロパティが必要である:
-決定性(Deterministic):ハッシュ関数は、同じプリイメージに対して同じダイジェストを生成する必要がある。
-速度:ハッシュダイジェストは、迅速に計算できる必要がある。
-一方向(プリイメージ耐性):ダイジェストが与えられた場合に、プリイメージを見つけることは不可能である必要がある。
-弱い衝突耐性(第2プリイメージ耐性):ハッシュ値が与えられた場合、同じハッシュを生成する任意のメッセージを生成することは不可能である必要がある。
-強い衝突耐性:2つのプリイメージが同じハッシュを生じることは実現不可能である必要がある。
-拡散:プリイメージの少なくとも1ビットが変更されると、ダイジェスト内の各ビットが50%の確率で変更される。
【0081】
ハッシュ関数は、一部のデータの完全性をチェックする方法を提供する。ハッシュダイジェストのプリイメージとして与えられたデータについて、人はそのデータの現在のハッシュダイジェストを以前のものと比較することによって、後でそのデータの完全性をチェックすることができる。
【0082】
通常、ハッシュ出力を妥当性確認するために、第3者は入力メッセージのすべての内容を必要とする。本開示の実施形態は、第3者は、メッセージの機密部分にアクセスすることなく、ハッシュ出力が有効であることを妥当性確認することができる。「機密」データとは、ここでは、ユーザ又は管理主体がブロックする可能性のあるデータを指す。機密データには、ユーザにとってプライベートなもの(例えば、銀行口座番号、パスポート番号)、違法なもの、悪意のあるもの、中傷的なもの、見苦しいものなどがある。
図5に示すように、既知の技術とは対照的に、本開示の実施例では、入力メッセージ(プリイメージ)を使用して、公開メッセージ、機密メッセージ、及び入力メッセージ内の公開ビットと機密ビットの位置を識別するマスクを決定する。機密メッセージは、入力が論理回路への入力として提供される(入力として公開メッセージとマスクも受信する)ときに、論理回路が出力として入力メッセージ(プリイメージ)をハッシュ関数に提供するように決定される。以下でより詳細に説明するように、論理回路への入力は、入力メッセージ内の他のデータを公衆にアクセス可能にしながら、入力メッセージの機密ビットをブロック/非表示にできるゼロ知識証明を生成するために使用される。入力メッセージ内の任意の場所にある機密ビットは、受信者からブロック/非表示にすることができる。本開示の実施形態は、人が異なるマスクを生成して、同じデータの異なる部分の情報を異なる時間に異なるエンティティに選択的に開示することを可能にする柔軟性を可能にする。
【0083】
図6A~Dは、本開示の実施形態による、メッセージ内のデータをブロックするためのプロセス600を示すフローチャートである。プロセス600は、コンピューティング装置により実行されてよい。
【0084】
本開示の実施形態は、まず、ブロックチェーントランザクションデータを含むメッセージと、ブロックチェーンノード104によって実行されるプロセス600を参照して説明される。これらの例では、メッセージは、1つ以上のブロックチェーントランザクションの全部又は一部である場合がある。
【0085】
ステップS602で、ブロックチェーンノード104は、ブロックチェーントランザクションの形式でメッセージを受信し、ステップS604で、ここでRealContentと呼ばれるブロックチェーントランザクションのコピーを作成する。
図7に示すように、RealContentの長さはLビットである。このコピーは実際のデータとして伝えられるが、ブロックチェーンノード104は、その特定のコピーで実際に表示されるべき情報を制御する。
【0086】
ステップS604で、ブロックチェーンノード104は、ハッシュアルゴリズムに従ってメッセージ文字列RealContentをパディングビット702でパディングし、ここではRealContentPadと呼ばれるメッセージ文字列を生成する。パディングの結果、メッセージ文字列RealContentPadは、ハッシュアルゴリズムによって定義された入力メッセージサイズの正の整数倍の長さを持つ。ハッシュアルゴリズムの一例は、SHA256ハッシュ関数である。
【0087】
ビットコインに関しては、SHA256ハッシュ関数を使用してトランザクションのTxIDを導出する。特に、トランザクションID(Transaction ID、TxID)は、シリアル化されたビットコイントランザクション(例えば、32ビットバージョン、32ビットLockTime、トランザクションインプットのリスト、Dataを含むトランザクションアウトプットのリスト)のダブルSHA256ハッシュ(又はSHA256d=SHA256(SHA256(.)))である。
【0088】
SHA256の圧縮関数は次のとおりである:
【数3】
ここで、256ビットのチェーン値と512ビットのメッセージブロックを256ビットの出力値に圧縮する。従って、
図7に示すように、メッセージ文字列RealContentPadの長さは512nビットであり、nは正の整数である。
【0089】
メッセージRealContentの長さがlであり、447ビット以下であると仮定すると、ステップS604で実行されるパディングは、RealContentの末尾に値が1の単一ビットを追加することを含む。次に、k個の0のビットが追加される。ここで、kは、式l+1+k=448mod512の最小の正の解である。最後に、バイナリ形式で記述されたメッセージ長lの表現である64ビットのブロックが追加される。例えば、メッセージRealContentの長さが24ビットであるとする。メッセージRealContentは最初に1でパディングされ、次に448-(24+1)=423個の0のビットが64ビットブロックと共に追加されて、RealContentが512ビットのパディングされたメッセージRealContentPadに変換される。
【0090】
一般的なハッシュ関数は、反復的なアプローチ(Merkle-Damgard構築として知られている)に従って、より長いメッセージM(448ビット以上)を処理する。これは、Mをk個のビットのn個のブロックに分割する。すなわち:
【数4】
個々のメッセージブロックは、次式のように定義される圧縮関数によって繰り返し処理される。
【数5】
ここで、m、kは正の整数値、kはチェーン値のサイズ、mはメッセージブロックのサイズを表す。
【0091】
RealContentPadの長さが512ビットの場合(ステップS608を参照)、プロセス600は
図6Bに示すステップS610に進む。
【0092】
ステップS610で、ブロックチェーンノード104は、512ビットのパディングされたメッセージRealContentPadのビットの中の少なくとも1つの機密ビットの場所を識別する。ブロックチェーンノード104は、ブロックチェーンノード104のメモリをクエリすることによってステップS610を実行する。
【0093】
例えば、ブロックチェーンノード104のメモリには、以前に機密と識別されたコンテンツに対応する1つ以上のビット列が格納されている場合がある。
【0094】
別の例では、ブロックチェーンノード104のメモリに、機密データを定義する1つ以上の事前に定義されたルールが格納されている場合がある。例えば、メモリには、特定のドメイン名を含む任意のURLをブロックする必要があることを示す事前に定義されたルールが格納されている場合がある。別の例では、「パスポート番号」という単語の後に続く9桁の数字をブロックする必要があるという事前に定義されたルールがメモリに格納されている場合がある。
【0095】
ステップS612で、ブロックチェーンノード104はマスクビット列Maskを生成する。これは、512ビットのパディングされたメッセージRealContentPad内の公開ビット(複数可)と機密ビット(複数可)の位置を識別する。特に、ブロックチェーンノード104は、次式に従ってマスクビット列Maskを生成する:
【数6】
【0096】
他の実施形態では、ステップS610及びS612の代替として、ブロックチェーンノード104は、ブロックチェーンノード104のメモリからマスクビット列を読み出すことによって、マスクビット列Maskを取得することができる。マスクビット列Maskの取得方法にかかわらず、この実施形態では、マスクビット列Maskの長さは512ビットである。
【0097】
ステップS614で、ブロックチェーンノード104は、すべての機密ビットに同じ所定値(例えば、0又は1)を割り当て、公開ビット値を保持することでRealContentPadを変更することによって、公開ビット列PublicDataを計算する。従って、この実施形態では、公開ビット列PublicDataの長さは512ビットである。公開ビット列PublicDataがどのように計算されるかを説明するために、ここでは、すべての機密ビットに0の値を割り当てることによってRealContentPadを変更することを参照するが、これは単なる例である。
【0098】
ステップ614で、ブロックチェーンノード104は、機密ビット列SecretDataも計算する。これは512ビットの長さを持ち、機密ビットを含む。ブロックチェーンノード104は、RealContentPadを取得し、そこに含まれる機密ビットを保持することによって、秘密ビット列SecretDataを計算することができ、SecretDataの残りのビットは任意の値を取ることができる。
【0099】
秘密ビット列SecretDataは、RealContentPadが、公開ビット列PublicData、及び秘密ビット列SecretDataとマスクビット列Maskを入力として使用するビット毎の論理計算(複数の論理演算を含む)の出力と等しいという要件を満たしている。
【0100】
一例として、秘密ビット列SecretDataは、次の要件を満たす場合がある:
【数7】
【0101】
特に、秘密ビット列SecretDataは、RealContentPadが(i)公開ビット列と、(ii)マスクビット列と秘密ビット列のビットごとのAND計算の結果と、のビットごとのXOR計算に等しいという要件を満たす。この構成は、
図8に破線で示された回路の一部として示されている。上記で説明し、
図8に示したものとは別の論理回路構成が可能であることは、論理回路構成が入力として(i)公開ビット列PublicData、(ii)秘密ビット列SecretData、及び(iii)マスクビット列Mask、を取り込み、及びそこに含まれるビットごとの論理演算が出力としてRealContentPadを提供することを前提としている。
【0102】
ステップS616で、ブロックチェーンノード104は、メッセージ文字列RealContentPadをハッシングすることによってハッシュ値Hashvalueを計算する。ここで、Hashvalue=SHA256(RealContentPad)である。ステップS616で使用される公開初期化ベクトルH
i
0は、SHA256ハッシュアルゴリズムが使用される場合の実施形態では、Secure Hash Standard(SHS)からのものになる。SHA256の場合、初期ハッシュ値H
i
0は、次の8個の32ビットワードで構成されるものとする:
【数8】
【0103】
ステップS618で、ブロックチェーンノード104は、以下を使用してゼロ知識証明を生成する:
公開ビット列、PublicData、
マスクビット列、Mask、
出力ハッシュ値、Hashvalue、
秘密ビット列、SecretData。
【0104】
ゼロ知識証明(Zero-Knowledge Proofs (ZKP))は、暗号の構成ブロックであり、パーティ(証明者)が、ステートメントの真実であること以外の情報を明らかにすることなく、ステートメントが真実であることを別のパーティ(検証者)に証明することを可能にする。
【0105】
ステップS618で生成されたゼロ知識証明は、証明者がステートメントの妥当性を証明するだけでなく、秘密の情報について何も明らかにすることなく、それを知っていることを保証する証明の一種である。
【0106】
対話型のゼロ知識証明は証明者と検証者の間の相互作用を必要とするが、証明者がステートメントが真であることを検証者に納得させるために「証明(プルーフ、proof)」と呼ばれるメッセージを1つだけ生成する非対話型ゼロ知識(Non-Interactive Zero-Knowledge)証明も存在する。ステップS618で生成されるゼロ知識証明はNIZK証明である可能性がある。
【0107】
zkSNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)は、簡潔で証明が非常に短く検証が容易なNIZKの知識証明である。ステートメントは、ステートメントの証明を生成するために使用される論理回路によって表される。最も効率的な構成では、検証者は単に定数のグループ操作を実行する。ステップS618で生成されるゼロ知識証明はzkSNARK証明である可能性がある。
【0108】
ステップS618で生成されたゼロ知識証明がzkSNARK証明である例では、zkSNARK証明の生成で証明鍵(ブロックチェーンノード104のメモリから読み出される)が追加で使用される。
【0109】
zkSNARKプロトコルは、一般に次の3つのフェーズで構成される。
a.設定(Setup)ステートメントが与えられると、代数回路生成、R1CS(Rank-1 Constraint System)、QAP(Quadratic Span Programs)などの幾つかの内部ステップを通じて、証明鍵と検証鍵のペアが計算される。これらにアクセスすると攻撃が発生する可能性があるため、プライベート情報は破棄され、二度と存在しないようにする必要がある。
b.証明生成(Proof generation)公開情報、証明鍵、公開及び非公開入力を与えられると、証明者は、証明を生成して検証者に送信する。
c.検証(Verification)公開情報、検証鍵、及び公開入力が与えられると、検証者は検証を実行する。
【0110】
zkSNARKプロトコルは、次のプロパティを満たす必要がある。
完全性(Completeness):ステートメントが真であり、検証者と証明者が正直である場合、証明は受け入れられる。
健全性(Soundness):ステートメントが偽であれば、不正な証明者は無視できる確率を除いて、それが真実であることを正直な検証者に納得させることができない。
ゼロ知識(Zero-Knowledge):ゼロ知識証明は、ステートメントの真実以外の情報を検証者に明らかにしない。
簡潔(Succinct):証明は回路サイズよりも短く、検証者は回路サイズよりも少ない数の暗号操作を行う必要がある。
非対話型(Non-Interactive):証明は1ステップのみで検証者に送信される。
知識の引数(Arguments of Knowledge):証明は計算上健全であると見なされる。すなわち、(量子コンピュータのような)無制限の証明者は、検出されることなく虚偽のステートメントを証明できる。
知識(Knowledge):証明者は確かに証拠(witness)を知っており、証拠(これはステートメントを証明するために必要な秘密の入力である)にアクセスすることなく証明を構成することはできない。すなわち、証明者と対話して証拠を出力する抽出アルゴリズムが存在する。
【0111】
ステップS618で生成されるゼロ知識証明は、マルチパーティ計算(multi-party computation (MPC))ベースのゼロ知識証明(例えば、zkBOO)、zkSNARK、STARK、又はBulletproofなど、他の任意の既知のタイプのゼロ知識証明であってもよい。
【0112】
当業者に知られているように、証明鍵及び検証鍵はzkSNARKのコンテキスト内で機能するが、MPCベースの証明(zkBOOなど)、STARK、又はBulletproofなどの他のタイプのゼロ知識証明では機能しない。
【0113】
ステップS620で、ブロックチェーンノード104はメッセージ文字列RealContentPadから機密ビットを削除し、変更されたメッセージ(例えば、変更されたブロックチェーントランザクション)RealContentPublicを生成する。一例では、ブロックチェーンノード104は、すべての機密ビットに同じ所定値(例えば、0)を割り当て、RealContentPadの公開ビット値を保持することによって、ステップS620を実行する。RealContentPadが512ビットに等しい長さを持つこの例では、変更されたメッセージRealContentPublicも512ビットに等しい長さを持つことが理解される。
【0114】
変更されたメッセージ(例えば、変更されたブロックチェーントランザクション)が生成されると、元のメッセージはコンピューティング装置のメモリから削除され、変更されたメッセージに置き換えられる場合がある。代替として、元のメッセージは、変更されたメッセージ(例えば、変更されたブロックチェーントランザクション)の生成後にコンピューティング装置のメモリに保持される場合がある。
【0115】
変更されたブロックチェーントランザクションRealContentPublicは、次に受信者に出力される。例えば、変更されたブロックチェーントランザクションRealContentPublicは、ブロックチェーンネットワーク106内の受信者ブロックチェーンノード104に送信される場合がある。
【0116】
受信者ブロックチェーンノード104が、変更されたブロックチェーントランザクションRealContentPublicが有効であることを証明できるようにするために、ブロックチェーンノード104は更に次のものを送信する:
ゼロ知識証明、
出力ハッシュ値、Hashvalue。
【0117】
マスクビット列Maskが公衆に知られている場合、ブロックチェーンノード104がマスクビット列Maskを受信者ブロックチェーンノード104に送信する必要はない。しかし、マスクビット列Maskが公衆に知られていない場合、ブロックチェーンノード104はマスクビット列Maskを受信者ブロックチェーンノード104に更に送信する。
【0118】
図10Aに、RealContentPublicが512ビット長の場合に検証者コンピューティング装置によって実行される検証プロセス1000を示す。コンピューティング装置が受信者ブロックチェーンノード104である実施形態では、ステップS1002で、受信者ブロックチェーンノード104は変更されたブロックチェーントランザクションRealContentPublicを取得する。一例では、受信者ブロックチェーンノード104は、変更されたブロックチェーントランザクションRealContentPublicを、(プロセス600を実行する)送信者ブロックチェーンノード104から受信する。変更されたブロックチェーントランザクションRealContentPublicの長さが512ビット(ステップS1004で決定される)の場合、プロセス1000はステップS1006に進む。
【0119】
ステップS1006で、受信者ブロックチェーンノード104は、出力ハッシュ値HashvalueのSHA256ハッシュを計算することによって出力ハッシュ値Hashvalueを検証し、SHA256(Hashvalue)が変更されたブロックチェーントランザクションRealContentPublicに関連付けられた公開トランザクションIDと等しいことを確認する。この検証が失敗した場合、プロセス1000は終了する。受信者ブロックチェーンノード104が出力ハッシュ値Hashvalueの検証に成功した場合、プロセス1000はステップS1008に進む。
【0120】
ステップS1008で、受信者ブロックチェーンノード104は、以下を使用してゼロ知識証明を検証する:
ゼロ知識証明、
変更されたメッセージ、RealContentPublic、
ステップS616で使用される入力ハッシュ値(このシナリオでは、初期化ベクトルHi
0)、
出力ハッシュ値、Hashvalue、
マスクビット列、Mask。
【0121】
受信者ブロックチェーンノードがゼロ知識証明の検証に成功した場合、受信者ブロックチェーンノード104は、変更されたブロックチェーントランザクションRealContentPublicが有効であることを検証できる。
【0122】
ステップS618で生成されたゼロ知識証明がzkSNARK証明である例では、zkSNARK証明の検証で検証鍵(受信者ブロックチェーンノード104のメモリから読み出される)が追加で使用される。
【0123】
当業者に知られているように、ゼロ知識証明の検証は、入力情報を使用した1つ以上のチェックを含み、検証の出力は、ゼロ知識証明が有効であるか無効であるかを示す決定である。実行されるチェックは、ゼロ知識証明の種類に固有であり、当業者に知られている。すべての種類のゼロ知識証明について、検証者は、すべてのチェックが合格した場合にのみ、ゼロ知識証明を受け入れる。
【0124】
zkSNARK証明のコンテキストでは、回路(例えば、
図8に示す)は設定フェーズ中に使用されているため、設定パラメータ(証明鍵と検証鍵)によって、専用回路が実際に使用されていることが保証される。証明者は、証明鍵と回路を使用してzkSNARK証明を生成する。検証者は検証鍵を使用してチェックを実行する。検証鍵は、検証者が回路を直接使用せずに、事前に定義されたステートメント(回路を意味する)が実際に妥当性確認されていることを検証者に保証する。対照的に、Bulletproofのコンテキストでは、証明者と検証者は最初に回路について合意する。次に、回路に基づいて、証明者は証明を生成し、それを妥当性確認のために検証者に送信する。検証者は、証明を妥当性確認するために回路の知識も使用する。その他のMPCベースの証明は、検証者が検証プロセスで回路を直接使用したという点で、Bulletproofと似ている。
【0125】
ステップS1006とS1008は任意の順序で実行できるが、ステップS1006はステップS1008よりも実行する計算量が少ないため、ステップS1006を最初に実行してから、ステップS1006のチェックが成功した場合にのみ、ステップS1008に進む方が有利である。
【0126】
以下では、マスクビット列Maskの効果を説明するための簡単な例を参照する。AliceがRealContent="11011011"を持っていると仮定する。ここで、第14ビット"1101"は彼女が他の人と共有できる彼女の公開データに対応し、"1011"は彼女の秘密データである。また、AliceはRealContentをBobと共有する必要があるが、第14ビットのみを開示したいとする。従って、この特定の例では、Mask="00001111"となる。また、Bobが以下を知っているとする:
【数9】
【0127】
マスクビット列Maskがなければ、構成は次のようになる:
【数10】
【0128】
Aliceが不誠実であれば、公開データについてBobに次のように嘘をつくことができる(例えば、1101を0110に変更する)。
1.Aliceは偽の公開データをPublicData=01100000として選択し、それによって機密ビット「1011」の各々が0に設定されている。
2.彼女はまた、8ビット10111011全体を秘密データとして選択する。
a.11011011=01100000XOR10111011であり、回路の出力ハッシュ値は実際のOutput=SHA256(11011011)と同じになることに注意する。
従って、マスクがなければ、証明がまだ有効である間、彼女はデータの公開部分について嘘をつくことができる。
【0129】
しかし、マスクが使用されていて公に知られている場合、次の理由でこの攻撃は不可能になる。
a.彼女は偽の入力PublicData=01100000を選択し、Bobと共有する。10111011は部分的に偽物である秘密データである(すなわち、左端の4ビット)。
b.Bobはマスク値00001111を知っている。
c.01100000、00001111、及びOutput(=SHA256(11011011))が与えられると、次式の理由で、zkSNARK証明はBobによって検証されない:
【数11】
従って、不正なAliceは、検出されずにコンテンツを操作することはできない。
【0130】
上記の例では、"1011"の各機密ビットが0に設定されるが、これは単なる例である。別の方法として、"1011"の各機密ビットをPublicData=01101111のように1に設定することもできる。これにより、論理計算は次のように変更される:
【数12】
ゼロを使用した上記のシナリオの結果は:
01101111 AND NOT(00001111)
これは以下の通りになる:
0110 0000
【0131】
ただし、各機密ビットを1に設定すると、追加の操作(AND)が必要になるため、各機密ビットを0に設定するよりも効率が悪くなる。
【0132】
【0133】
RealContentPadの長さが512ビットより長い場合、つまり512nビットの長さを有し、n≧2である場合(ステップS608を参照)、プロセス600は
図6Bに示すステップS622に進む。つまり、RealContentのサイズが447ビットを超える場合、プロセス600は
図6cに示すステップS622に進む。
【0134】
ステップS622で、ブロックチェーンノード104は、メッセージ文字列RealContentPadを、ハッシュ関数によって定義された入力メッセージサイズに対応する512ビットの長さを各々持つ複数のメッセージブロックRealContent
iに分割する。
【数13】
【0135】
図7は、RealContentPadが3072ビット長で、512ビット長の6つのメッセージブロックに分割される例を示している。
【0136】
ステップS624でiの値を1に設定し、ステップS626でブロックチェーンノード104がRealContentiを読み出す。1回目のステップS626が実行されると、ブロックチェーンノード104は第1512ビットメッセージブロックRealContent1を読み出すことが分かる。
【0137】
ステップS628で、ブロックチェーンノード104は入力ハッシュ値を読み出す。1回目のステップS628が実行されると、ブロックチェーンノード104は、SHA256ハッシュアルゴリズムが使用される場合の実施形態では、Secure Hash Standard(SHS)からの事前に決定された公開初期化ベクトルを読み出すことが理解されるだろう。その後の回でステップS628が実行されると、ブロックチェーンノード104は以前の出力ハッシュ値、すなわちHashvaluei-1を読み出す。SHA256アルゴリズムのコンテキストでは、入力ハッシュ値の長さは256ビットである。
【0138】
ステップS630で、ブロックチェーンノード104は、メッセージブロックRealContentiをハッシングすることによってハッシュ値Hashvalueiを計算する。ここで、Hashvaluei=SHA256(RealContenti)である。ステップS628で読み出された入力ハッシュ値は、ステップS630で実行される圧縮で使用される。ハッシュ値Hashvaluei-1は、次回にステップS628が実行されるときに入力ハッシュ値として読み出される。例えば、ハッシュ値Hashvalue1は、第2メッセージブロックRealContent2の圧縮の入力ハッシュ値として使用される。
【0139】
メッセージブロックRealContent
iが機密ビットを含まない(ステップS632で決定される)場合、プロセスは
図6Dに示すステップS644に進む。処理する機密データで構成されるメッセージブロックが更にある場合(ステップS644で決定)、プロセスはステップS646に進み、ここでブロックチェーンノード104はiの値を1つ増やし、プロセス600はステップS626にループバックし、ここでブロックチェーンノード104は次のRealContent
iを読み出す。
【0140】
メッセージブロックRealContent
iが機密ビットを含む(ステップS632で決定される)場合、ブロックチェーンノード104は、
図6Dに示すステップS634、S636、S638、S640、及びS642を実行する。S634、S636、S638、S640、及びS642は、S610、S612、S614、S618、及びS620に相当する。
【0141】
ステップS642で、ブロックチェーンノード104はRealContentPadからRealContentiの機密ビットを削除する。一例では、ブロックチェーンノード104は、RealContentPad内のすべての機密ビットに同じ所定値(例えば、0)を割り当て、RealContentPadの公開ビット値を保持することによって、ステップS642を実行する。
【0142】
ステップS634及びS636の代替として、ブロックチェーンノード104は、ブロックチェーンノード104のメモリからマスクビット列を読み出すことによって、マスクビット列Maskiを取得することができる。マスクビット列Maskiの取得方法にかかわらず、この実施形態では、マスクビット列Maskiの長さは512ビットである。
【0143】
ステップS642が実行された後、プロセス600は前述のステップS644に進む。
【0144】
処理する機密データを含むメッセージブロックがこれ以上ない場合(ステップS644で決定される)、プロセス600は終了する。プロセス600の終了時に、ブロックチェーンノード104は、変更されたメッセージ(例えば、変更されたブロックチェーントランザクション)RealContentPublicを生成するために、メッセージ文字列RealContentPadからすべての機密ビットを削除している。
【0145】
上記のことから明らかなように、プロセス600では、第1メッセージブロックRealContent
1の圧縮に、SHA256ハッシュアルゴリズムが使用されている場合の実施形態では、Secure Hash Standard(SHS)からのものとなる、事前に決定された公開初期化ベクトルX
0が使用されている。第1圧縮のダイジェスト(digest)Hashvalue
1は、第2メッセージブロックRealContent
2の圧縮で、入力ハッシュ値X
1として使用される。第2圧縮のダイジェスト(digest)Hashvalue
2は、第3メッセージブロックRealContent
3の圧縮で、入力ハッシュ値X
2として使用され、以下同様である。
図9は、前述のこの再帰的ハッシングの回路例を示している。前述のように、シークレットビット列SecretData
iを導出するために使用される正確なビット単位の論理演算は、
図9に示すものと異なる場合がある。各メッセージブロックについて、PublicData
i、Mask
i、及びSecretData
iの長さは512ビットであるため、ビット単位の論理計算の最終出力RealContent
iの長さは512ビットになる。
【0146】
上記から明らかなように、機密ビットを含む任意のメッセージブロックRealContentiのプロセス600では、ブロックチェーンノード104は次を使用してゼロ知識証明を生成する:
公開ビット列、PublicDatai、
マスクビット列、Maski、
出力ハッシュ値、Hashvaluei、
秘密ビット列SecretDatai。
【0147】
ステップS640で生成されたゼロ知識証明がzkSNARK証明である例では、zkSNARK証明の生成で証明鍵(ブロックチェーンノード104のメモリから読み出される)が追加で使用される。
【0148】
複数のメッセージブロックが機密データを持つシナリオでは、
図6C及び6Dは反復プロセスを示しているが、幾つかの実施形態では証明生成プロセスは並行して実行される。これらの実施形態では、各メッセージブロックは、前のブロックのハッシングされた出力(ダイジェスト)に対応する入力ハッシュ値(又は、第1メッセージブロックの場合は前述のように事前に決定された初期化ベクトルX
0)を使用してハッシングされる。機密データを含むメッセージブロックに関連付けられた計算されたハッシュ値Hashvalue
iを使用して、これらのメッセージブロックのゼロ知識証明を互いに独立して並列に生成することができる。この並列実行では、十分な計算リソースがあると仮定して、単一のゼロ知識証明を生成するのにかかる時間と同じ時間でN個のゼロ知識証明を作成できる。この並列証明生成は、大きなメッセージを効率的に処理できるという利点がある。
【0149】
変更されたブロックチェーントランザクションRealContentPublicは、次に受信者に出力される。例えば、変更されたブロックチェーントランザクションRealContentPublicは、ブロックチェーンネットワーク106内の受信者ブロックチェーンノード104に送信される場合がある。
【0150】
受信者ブロックチェーンノード104が、変更されたブロックチェーントランザクションRealContentPublicが有効であることを証明できるようにするために、ブロックチェーンノード104は機密ビットを含むRealContenti毎に、更に次のものを送信する:
ゼロ知識証明、
出力ハッシュ値、Hashvaluei。
【0151】
マスクビット列Maskiが公衆に知られている場合、ブロックチェーンノード104がマスクビット列Maskiを受信者ブロックチェーンノード104に送信する必要はない。しかし、マスクビット列Maskiが公衆に知られていない場合、ブロックチェーンノード104はマスクビット列Maskiを受信者ブロックチェーンノード104に更に送信する。
【0152】
図10Bに、RealContentPublicが512ビット長を超える(すなわち、512nビットの長さを持ち、n≧2である)場合に、検証者コンピューティング装置によって実行される検証プロセス1050を示す。
【0153】
ステップS1010で、コンピューティング装置(例えば、受信者ブロックチェーンノード104)は、RealContentPublicの最後のメッセージブロックRealContenttのハッシュ値Hashvaluetを取得し、HashvaluetのSHA256ハッシュを計算して、SHA256(Hashvaluet)が変更されたブロックチェーントランザクションRealContentPublicに関連付けられた公開トランザクションIDと等しいことを確認する。
【0154】
最後のメッセージブロックRealContenttが機密ビットを含む例では、受信者ブロックチェーンノード104は、送信者コンピューティング装置から最後のメッセージブロックのハッシュ値Hashvaluetを受信する。最後のメッセージブロックRealContenttが機密ビットを含まない例では、受信者ブロックチェーンノード104は、送信者コンピューティング装置から最後のメッセージブロックRealContenttのハッシュ値Hashvaluetを受信する場合がある。代替として、受信者ブロックチェーンノード104は、最後のメッセージブロックRealContenttのSHA256ハッシュを(前のメッセージブロックRealContentt-1のハッシングからの出力ハッシュ値を入力ハッシュ値として使用して)計算して、出力ハッシュ値Hashvaluetを生成する場合がある。
【0155】
この検証が失敗した場合、プロセス1050は終了する。ステップS1010は、処理するメッセージブロックがなくなったら、プロセス1050の最後に実行できるが、ステップS1010がゼロ知識証明検証よりも実行する計算量が少ないため、ステップS1010を最初に実行してから、ステップS1010のチェックが成功した場合にのみ、ゼロ知識証明検証の実行に進む方が有利である。
【0156】
受信者ブロックチェーンノード104が出力ハッシュ値Hashvaluetの検証に成功した場合、プロセス1000はステップS1012に進む。
【0157】
ステップS1012で、ブロックチェーンノード104は、メッセージ文字列RealContentPublicを、ハッシュ関数によって定義された入力メッセージサイズに対応する512ビットの長さを各々持つ複数のメッセージブロックRealContent
iに分割する。
【数14】
【0158】
ステップS1014でiの値を1に設定し、ステップS1016でブロックチェーンノード104がRealContentiを読み出す。1回目のステップS626が実行されると、ブロックチェーンノード104は第1512ビットメッセージブロックRealContent1を読み出すことが分かる。
【0159】
ステップS1018で、ブロックチェーンノード104はマスクビット列Maskiを使用して、メッセージブロックRealContentiに機密ビットが存在するかどうかを決定する。
【0160】
メッセージブロックRealContentiが機密ビットを含まない場合、プロセス1050はステップS1020に進み、受信者ブロックチェーンノード104が入力ハッシュ値を読み出す。1回目のステップS1020が実行されると、ブロックチェーンノード104は、SHA256ハッシュアルゴリズムが使用される場合の実施形態では、Secure Hash Standard(SHS)からの事前に決定された公開初期化ベクトルを読み出すことが理解されるだろう。その後の回でステップS1020が実行されると、ブロックチェーンノード104は以前の出力ハッシュ値、すなわちHashvaluei-1を読み出す。
【0161】
ステップS1022で、ブロックチェーンノード104は、メッセージブロックRealContentiをハッシングすることによってハッシュ値Hashvalueiを計算する。ここで、Hashvaluei=SHA256(RealContenti)である。ステップS1020で読み出された入力ハッシュ値は、ステップS1022で実行される圧縮で使用される。
【0162】
メッセージブロックRealContentiが機密ビットを含む場合、プロセス1050はステップS1024に進み、受信者ブロックチェーンノード104が、RealContentiについて以下を用いてゼロ知識証明を検証する:
RealContentiのゼロ知識証明、
メッセージブロックRealContenti、
出力ハッシュ値、Hashvaluei。
【0163】
RealContentiの入力ハッシュ値(Hashvaluei-1)、すなわち前のブロックのハッシングされた出力(ダイジェスト)、
変更されたメッセージの圧縮に使用される入力ハッシュ値、
マスクビット列、Maski、
ステップS640で生成されたゼロ知識証明がzkSNARK証明である例では、zkSNARK証明の検証で検証鍵(受信者ブロックチェーンノード104のメモリから読み出される)が追加で使用される。
【0164】
前述のように、ステップS1020はステップs1022の前に実行することが望ましいが、ステップ1020とS1022は任意の順序で実行することができる。
【0165】
処理するメッセージブロックが更にある場合(ステップS1025で決定される)、プロセスはステップS1026に進み、ここでブロックチェーンノード104はiの値を1つ増やし、プロセス1050はステップS1016にループバックし、ここでブロックチェーンノード104は次のRealContentiを読み出す。
【0166】
受信者ブロックチェーンノードがゼロ知識証明の各々の検証に成功した場合、受信者ブロックチェーンノード104は、変更されたブロックチェーントランザクションRealContentPublicが有効であることを検証できる。
【0167】
複数のメッセージブロックが機密データを持つシナリオでは、
図10Bは反復プロセスを示しているが、幾つかの実施形態では証明検証プロセスは並行して実行される。前述のように、機密ビットを含む各メッセージブロックRealContent
iについて、受信者ブロックチェーンノード104は、そのメッセージブロックのゼロ知識証明と、そのメッセージブロックの出力ハッシュ値Hashvalue
iを持っている。ブロックチェーンノード104は、前のブロックのハッシングされた出力(ダイジェスト)に対応する入力ハッシュ値(又は、第1メッセージブロックの場合は前述のように事前に定義された初期化ベクトルX
0)を使用してメッセージブロックをハッシングすることで、機密データを含まないブロックの残りのハッシュ値Hashvalue
iを計算できる。すべてのハッシュ値Hashvalue
iが計算されると、ステップS1024で実行された機密データを含むメッセージブロックに関連付けられたゼロ知識証明の各検証を並行して実行できる。この並列実行では、十分な計算リソースがあると仮定して、単一のゼロ知識証明を検証するのにかかる時間と同じ時間でN個のゼロ知識証明を検証できる。
【0168】
図7は、RealContentPadの長さが3072で、6つのメッセージブロックRealContent
1~RealContent
6に分割されている例を示している。
図7の例では、メッセージブロックRealContent
4とRealContent
5が機密ビット704を含む。
【0169】
プロセス600を実装することで、公開データRealContent1~RealContent3を含む各メッセージブロックがハッシングされ、各々の出力ハッシュ値が生成されるが、これらには公開データのみが含まれるため、メッセージブロックRealContent1~RealContent3のゼロ知識証明は生成されない。
【0170】
メッセージブロックRealContent4は機密データを含むため、ブロックチェーンノード104は以下を使用してRealContent4のゼロ知識証明を生成する:
公開ビット列、PublicData4、
マスクビット列、Mask4、
出力ハッシュ値、Hashvalue4(メッセージブロックRealContent3の圧縮のダイジェストHashvalue3を入力ハッシュ値として計算される)、
秘密ビット列、SecretData4、
ブロックチェーンノード104のメモリから読み出された証明鍵(zkSNARK証明のようにゼロ知識証明が信頼できる設定を使用する場合)。
【0171】
メッセージブロックRealContent5は機密データを含むため、ブロックチェーンノード104は以下を使用してRealContent5のゼロ知識証明を生成する:
公開ビット列、PublicData5、
マスクビット列、Mask5、
出力ハッシュ値、Hashvalue5(メッセージブロックRealContent4の圧縮のダイジェストHashvalue4を入力ハッシュ値として計算される)、
秘密ビット列、SecretData5、
ブロックチェーンノード104のメモリから読み出された証明鍵(zkSNARK証明のようにゼロ知識証明が信頼できる設定を使用する場合)。
【0172】
プロセス600の最後に、RealContentPadから機密ビット704が削除され、変更されたブロックチェーントランザクションRealContentPublicが生成される。
【0173】
変更されたブロックチェーントランザクションRealContentPublicは、次に受信者に出力される。例えば、変更されたブロックチェーントランザクションRealContentPublicは、ブロックチェーンネットワーク106内の受信者ブロックチェーンノード104に送信される場合がある。
【0174】
受信者ブロックチェーンノード104が、変更されたブロックチェーントランザクションRealContentPublicが有効であることを証明できるようにするために、ブロックチェーンノード104は更に次のものを送信する:
RealContent4のゼロ知識証明、
出力ハッシュ値、Hashvalue4、
RealContent5のゼロ知識証明、
出力ハッシュ値、Hashvalue5。
【0175】
マスクビット列Mask4が公衆に知られている場合、ブロックチェーンノード104がマスクビット列Mask4を受信者ブロックチェーンノード104に送信する必要はない。しかし、マスクビット列Mask4が公衆に知られていない場合、ブロックチェーンノード104はマスクビット列Mask4を受信者ブロックチェーンノード104に更に送信する。同様に、マスクビット列Mask5が公衆に知られている場合、ブロックチェーンノード104がマスクビット列Mask5を受信者ブロックチェーンノード104に送信する必要はない。しかし、マスクビット列Mask5が公衆に知られていない場合、ブロックチェーンノード104はマスクビット列Mask5を受信者ブロックチェーンノード104に更に送信する。
【0176】
変更されたブロックチェーントランザクションRealContentPublicが有効であることを確認するために、受信者ブロックチェーンノード104は、第1メッセージブロックRealContent1の圧縮で、SHA256ハッシュアルゴリズムが使用されている場合の実施形態ではSecure Hash Standard (SHS)からの事前に定義された公開初期化ベクトルX0を使用する。第1圧縮のダイジェストHashvalue1は、第2メッセージブロックRealContent2の圧縮で、入力ハッシュ値X1として使用される。第2圧縮のダイジェストHashvalue2は、第3メッセージブロックRealContent3の圧縮で、入力ハッシュ値X2として使用される。
【0177】
受信者ブロックチェーンノード104は、以下を使用してRealContent4のゼロ知識証明を検証する:
RealContent4のゼロ知識証明、
RealContentPadのメッセージブロックRealContent4、
出力ハッシュ値、Hashvalue4、
RealContent4の入力ハッシュ値(Hashvalue3)、すなわち前のブロックのハッシングされた出力(ダイジェスト)、
マスクビット列、Mask4、
受信者ブロックチェーンノード104のメモリから読み出された証明鍵(zkSNARK証明のようにゼロ知識証明が信頼できる設定を使用する場合)。
【0178】
受信者ブロックチェーンノード104は、以下を使用してRealContent5のゼロ知識証明を検証する:
RealContent5のゼロ知識証明、
RealContentPadのメッセージブロックRealContent5、
出力ハッシュ値、Hashvalue5、
RealContent5の入力ハッシュ値(Hashvalue4)、すなわち前のブロックのハッシングされた出力(ダイジェスト)、
マスクビット列、Mask5、
受信者ブロックチェーンノード104のメモリから読み出された検証鍵(ゼロ知識証明がzkSNARK証明である場合)。
【0179】
この例では、最後のメッセージブロックRealContent6が機密データを含まないため、受信者ブロックチェーンノード104は、(第5メッセージブロックRealContent5に関連付けられた出力ハッシュ値Hashvalue5を入力ハッシュ値として使用して)最後のメッセージブロックRealContent6のSHA256ハッシュを計算して、出力ハッシュ値Hashvalue6を生成できる。
【0180】
次に、受信者ブロックチェーンノード104は、Hashvalue6のSHA256ハッシュを計算して、SHA256(Hashvalue6)が変更されたブロックチェーントランザクションRealContentPublicに関連付けられた公開トランザクションIDと等しいことを確認する。
【0181】
一方、
図6Cと
図6Dは、機密データを含む各メッセージブロックに対するゼロ知識証明の生成を示している。他の実施形態では、機密データを含むRealContentPadの隣接するメッセージブロックをマージでき、マージされたブロックに対して1つのゼロ知識証明が生成される。
【0182】
図7の例に戻ると、RealContentPadが3072の長さを持ち、6つのメッセージブロックRealContent
1~RealContent
6に分割され、メッセージブロックRealContent
4とRealContent
5が機密ビット704を含む。これらの他の実施形態では、ブロックチェーンノード104はRealContent
4とRealContent
5を連結することによって1024ビットのマージされたブロックを生成する。つまり、RealContent
merged=RealContent
4││RealContent
5である。
【0183】
これらの他の実施形態では、ブロックチェーンノード104は、以下を使用してマージされたブロックのゼロ知識証明を生成する:
機密ビットにゼロ値を割り当て、公開ビット値を保持することによって、RealContent
mergedを変更することによって計算される公開ビット列PublicData
merged。この例では、PublicDataの長さは1024ビットである。
マスクビット列Mask
mergedは、マージされたブロックRealContent
merged内の機密ビットの位置を識別する。この例では、Mask
merged=Mask
4||Mask
5(連結された)であるため、Mask
mergedの長さは1024ビットである。
マージされたブロックRealContent
merged内の最後のメッセージブロックのハッシュ値。この例では出力ハッシュ値Hashvalue
5(メッセージブロックRealContent
4の圧縮のダイジェストHashvalue
4を入力ハッシュ値として使用して計算される)。ここで、最後のメッセージブロックはマージされたブロックRealContent
mergedの一部である。
マージされたブロックRealContent
mergedの機密ビットを含むシークレットビット列SecretData
merged。ブロックチェーンノード104は、RealContent
mergedを取得し、そこに含まれる機密ビットを保持することによって秘密ビット列SecretData
mergedを計算する。SecretDatavの残りのビットは任意の値を取ることができる。シークレットビット列SecretData
mergedは、次の要件を満たしている。
【数15】
この例では、SecretData
mergedの長さは1024ビットである。
ブロックチェーンノード104のメモリから読み出された証明鍵(zkSNARK証明のようにゼロ知識証明が信頼できる設定を使用する場合)。
【0184】
受信者ブロックチェーンノード104は、以下を使用してRealContentmergedのゼロ知識証明を検証する:
RealContentmergedのゼロ知識証明、
マージされたブロック、RealContentmerged、
マージされたブロックRealContentmergedの入力ハッシュ値、この例ではHashvalue3、
出力ハッシュ値、Hashvalue5、
マスクビット列、Maskmerged、
受信者ブロックチェーンノード104のメモリから読み出された検証鍵(zkSNARK証明のようにゼロ知識証明が信頼できる設定を使用する場合)。
【0185】
受信者ブロックチェーンノード104は、第3メッセージブロックRealContent3をハッシングするハッシュ出力を知り、これをRealContentmergedへの入力ハッシュ値として使用する。Hashvalue5であるRealContentmergedのハッシングは、第6メッセージブロックRealContent6の圧縮の入力ハッシュ値として使用される。
【0186】
隣接するブロックをマージする上記の手法は、メッセージブロックRealContentiに十分なエントロピーがないため、メッセージブロックRealContentiに存在する機密ビットを取得するために悪意のあるパーティによる総当たり攻撃を受ける可能性がある場合に使用できる。メッセージブロックRealContenti内の機密ビットの数が所定の閾値未満の場合、メッセージブロックRealContentiは十分なエントロピーを持っていないと見なされることがある。所定の閾値は、本開示の実施形態で使用されるハッシュ関数に関連する衝突耐性セキュリティレベルであってもよい。例えば、SHA256ハッシュ関数に関連する衝突耐性セキュリティレベルは128ビットである。これは、総当たり攻撃でシステムを破壊するには最大2128が必要であることを意味する。
【0187】
従って、本開示の実施形態では、ブロックチェーンノード104は、機密データを含むメッセージブロックが、事前に設定された閾値未満の数の機密ビットを含むことを識別し、そのメッセージブロックを、機密データを含む少なくとも1つの隣接するメッセージブロックとマージして、マージされたブロックRealContentmergedを生成するように構成することができる。このマージは、マージされたブロックRealContentmerged内の機密ビットの数が事前に設定された閾値を超えるように実装できる。
【0188】
例えば、512ビットのメッセージブロックRealContent4に56個の機密ビットが含まれ、512ビットのメッセージブロックRealContent5に100個の機密ビットが含まれている場合、RealContentmergedはSHA256ハッシュ関数に関連付けられている128ビットの衝突耐性セキュリティレベルを超える156個の機密ビットを含む。
【0189】
(2つのメッセージブロックを連結して生成される)マージされたブロックに対して単一のゼロ知識証明を生成するために発生する計算コストは、2つのメッセージブロックの各々に対してゼロ知識証明を生成するために発生する計算コストと同じだが、単一のゼロ知識証明の生成にかかる時間は倍になる。これは、元のコンテンツからのすべての中間状態(ハッシュ値)を含むすべての必要な入力があるため、2つのメッセージブロックの各々に対してゼロ知識証明を生成することは並列に計算でき、つまり各ブロックを独立して計算できるためである。
【0190】
更に、ブロックチェーンノード104は、機密データを含むメッセージブロックが、事前に設定された閾値未満の数の機密ビットを含むことを識別し、エントロピーを増加させるために、公開ビットの1つ以上を機密ビットとして指定するように構成できる。
【0191】
前述のように、メッセージは、コンピューティング装置によって受信されるブロックチェーントランザクションである可能性がある。
【0192】
一例の実装では、コンピューティング装置はブロックチェーンノード104である。ブロックチェーンノード104は、ブロックチェーンネットワーク106のユーザのコンピュータ端末102からブロックチェーントランザクションを受け取ることができる。コンピュータ端末102は、ブロックチェーントランザクションの伝播とブロックチェーンへの記録を要求する。ブロックチェーンノード104は、変更されたブロックチェーントランザクションを検証するために必要な情報により変更されたブロックチェーントランザクションを、ネットワーク106内の他のブロックチェーンノード104に伝播する前に、ブロックチェーントランザクションから機密データを削除するために、ここで説明する方法を実行することができる。
【0193】
別の実装では、コンピューティング装置はブロックチェーンノード104である。ブロックチェーンノード104は、ブロックチェーンネットワーク106のユーザのコンピュータ端末102又は別のブロックチェーンノード104からブロックチェーントランザクションを受け取ることができ、それにより、トランザクションがブロックチェーンに記録される。受信したトランザクションをメモプール(mempool)に追加する前に、ブロックチェーンノード104は、ここで説明する方法を実行して、ブロックチェーントランザクションから機密データを削除することができる。変更されたブロックチェーントランザクションは、次にメモプールに追加される。ブロックチェーンノード104が有効なproof-of-workソリューションを識別すると、ブロックチェーンノード104によって、変更されたブロックチェーントランザクションを含む新しいブロックチェーンブロック151が生成される。その後、新しいブロック151は、変更されたブロックチェーントランザクションの正確性を妥当性確認するために必要な情報と共にネットワークの他のノードに伝播されるため、各ノードは新しいブロック151をブロックチェーンに記録できる。
【0194】
別の実装例では、コンピューティング装置は、別のブロックチェーンノード104からブロックチェーンに記録されたブロック151を受信する場合がある。このブロックは、トランザクションを含む。
【0195】
コンピューティング装置は、例えばブロックチェーンノード104であってよい。ブロック151の受信に応答して、ブロックチェーンノード104は、ここで説明する方法を実行して、ブロックチェーントランザクションから機密データを削除することができる。変更されたブロックチェーントランザクションを含むブロック151は、次に、変更されたブロックチェーントランザクションの正確性を妥当性確認するために必要な情報と共にネットワークの他のノードに送信されるため、各ノードは新しいブロック151をブロックチェーンに記録できる。代替として、ブロックチェーンノード104は、受信者ブロックチェーンノード104からブロック151の要求を受信することに応答して、変更されたブロックチェーントランザクションを含むブロック151と、変更されたブロックチェーントランザクションを妥当性確認するために必要な情報を受信者ブロックチェーンノード104に送信する。例えば、受信者ブロックチェーンノード104は、ブロックチェーン全体をダウンロードし、UTXOセットを構築するためにすべてのトランザクションを妥当性確認する必要があるビットコインネットワークに入った新しいマイナーである可能性がある。
【0196】
上記の変形では、ブロック151の受信に応答して、ブロックチェーンノード104がブロックをメモリに格納する場合がある。ブロックチェーンノード104は、受信者ブロックチェーンノード104からブロックの要求を受信することに応答して、ここで説明する方法を実行して、ブロックチェーントランザクションから機密データを削除することができる。変更されたブロックチェーントランザクションを含むブロックは、次に、変更されたブロックチェーントランザクションの正確性を妥当性確認するために必要な情報と共にネットワークの他のノードに送信される。例えば、受信者ブロックチェーンノード104は、ブロックチェーン全体をダウンロードし、UTXOセットを構築するためにすべてのトランザクションを妥当性確認する必要があるビットコインネットワークに入った新しいマイナーである可能性がある。
【0197】
別の実装例では、コンピューティング装置はブロックチェーンネットワーク106上のブロックチェーンノード104ではない(つまり、ブロックチェーンネットワーク106上のアクティブノードではない)。つまり、コンピューティング装置はブロックチェーンネットワーク106の外部にある。コンピューティング装置は、例えばブロックチェーンネットワーク106に結合されてよい。コンピューティング装置は、ブロックチェーン150のコピーを保持し、ブロックチェーンデータ(例えばブロックチェーン150に記録されたブロック151)をクライアント装置102に提供する。コンピューティング装置は、ブロックチェーンノード104の1つ以上からブロックチェーン150に記録されたブロックを受信する場合がある。ブロックの受信に応答して、コンピューティング装置は、ここに説明する方法を実行して、ブロックチェーントランザクションから機密データを削除することができる。変更されたブロックチェーントランザクションを含むブロックは、次に、変更されたブロックチェーントランザクションの正確性を妥当性確認するために必要な情報と共にクライアント装置に送信される。代替として、コンピューティング装置は、クライアント装置からブロックの要求を受信することに応答して、変更されたブロックチェーントランザクションを含むブロックと、変更されたブロックチェーントランザクションを妥当性確認するために必要な情報を、クライアント装置に送信する。上記の変形では、ブロックの受信に応答して、コンピューティング装置がブロックをメモリに格納する場合がある。コンピューティング装置は、クライアント装置からブロックの要求を受信することに応答して、ここで説明する方法を実行して、ブロックチェーントランザクションから機密データを削除することができる。変更されたブロックチェーントランザクションを含むブロックは、次に、変更されたブロックチェーントランザクションの正確性を妥当性確認するために必要な情報と共にクライアント装置に送信される。
【0198】
ここでは、コンピューティング装置のメモリからマスクビット列を取得することによって、コンピューティング装置がマスクビット列を取得できる例について説明する。これは、政府機関又は規制機関が、ブロックチェーンに既に記録されているブロックのトランザクションが機密(例えば違法)データを含むことを識別する場合に可能になる可能性がある。このシナリオでは、政府/規制機関は、トランザクションIDとマスクビット列をコンピューティング装置、例えばネットワーク106のブロックチェーンノード104に公開できる。
【0199】
本明細書ではブロックチェーントランザクションであるメッセージに関連して実施形態が記述されているが、本開示の実施形態は、ビットコイン及び他のブロックチェーンの文脈の外に拡張され、ハッシュプリイメージの任意の部分をブロックするために使用することができる。
【0200】
一例として、メッセージは人のパスポート情報である場合がある。つまり、RealContentPadが3072の長さを持ち、6つのメッセージブロックRealContent
1~RealContent
6に分割されている
図7の例では、各メッセージブロックは、各々、その人のID属性(例えば、氏名、生年月日、出生地、パスポート番号、発行日、有効期限)を含む。
【0201】
この例では、メッセージブロックRealContent1~RealContent6は、最後のメッセージブロックRealContent6のハッシュ値Hashvalue6に対する政府の署名とともに、電子パスポートに保存できる。電子パスポートは、データの保存と処理のための埋め込み集積回路(例えば、コンピューティング装置)を含む物理パスポート文書の形式である場合がある。つまり、物理パスポート文書上の埋め込み集積回路は、本開示の実施形態を実行するように構成することができる。
【0202】
あるいは、電子パスポートは、コンピューティング装置(例えば、携帯電話)のメモリに保存される電子パスポート文書の形式であってもよい。これは、e-Passportなど、すでに発行されている政府の資格情報から取得できる仮想モバイルIDにすることができる。このe-Passportは、電話やトークンなどのモバイル装置に安全に読み込むことができる。
【0203】
メッセージブロックRealContent4及びRealContent5が機密ビットを含む場合、コンピューティング装置は、ここで説明する方法を実行して、パスポート情報のコピーから機密データを削除し、元のパスポート情報の選択された属性のみを含む変更されたパスポート情報を生成することができる。その後、変更されたパスポート情報は、変更されたパスポート情報を妥当性確認するために必要な情報と共に受信者に出力される。例えば、コンピューティング装置は、変更されたパスポート情報を妥当性確認するために必要な情報と共に、変更されたパスポート情報をリモート装置(例えば空港のコンピュータ端末)に送信する場合がある。別の例では、コンピューティング装置は、変更されたパスポート情報と、変更されたパスポート情報を妥当性確認するために必要な情報をコンピューティング装置のディスプレイに出力し、表示された情報を受信者が検証できるようにする場合がある。
【0204】
変更されたメッセージ(例えば、変更されたパスポート情報)が生成されると、元のメッセージ(人のパスポート情報)は、後で他のエンティティとの検証に必要になるため、メモリから削除されない。
【0205】
リモート装置が変更されたパスポート情報が有効であることを証明できるようにするために、コンピューティング装置は更に、機密ビットを含むRealContentiごとに、次のものを送信する:
ゼロ知識証明、
出力ハッシュ値、Hashvaluei。
【0206】
マスクビット列Maskiが公衆に知られている場合、ブロックチェーンノード104がマスクビット列Maskiをリモート装置に送信する必要はない。しかし、マスクビット列Maskiが公衆に知られていない場合、コンピューティング装置はマスクビット列Maskiをリモート装置に更に送信する。
【0207】
リモート装置は、プロセス1050を使用して、変更されたパスポート情報が有効であることをプロセス1050を使用して、以下により検証できる:
1)RealContentPadの最後のメッセージブロックのハッシュ値Hashvaluetを取得し、取得したハッシュ値Hashvaluetをリモート装置のメモリに事前に保存された信頼できるハッシュ値と比較して、Hashvaluetがリモート装置のメモリに事前に保存された信頼できるハッシュ値と等しいことを確認する。この例では、Hashvaluetは最後のメッセージブロックRealContent6のハッシュ値Hashvalue6に対応している。従って、ビットコインのシナリオ(ステップS1010を参照して前述した)では、それが信頼される値であるトランザクションIDであるのに対し、パスポート情報のコンテキストでは、信頼される値はリモート装置のメモリに事前に保存された信頼されるハッシュ値である。
【0208】
前述のように、最終的なメッセージブロックが機密ビットを含む場合、コンピューティング装置はHashvaluetをリモート装置に送信する。最終的なメッセージブロックが機密ビットを含まない場合、コンピューティング装置は実行する検証プロセスからHashvaluetを取得できるため、コンピューティング装置がHashvaluetをリモート装置に送信する必要はない。
【0209】
2)以下を使用して、RealContentiごとにゼロ知識証明を検証する:
RealContentiのゼロ知識証明、
RealContenti出力ハッシュ値、Hashvaluei、
RealContentiの初期化ベクトル(Hashvaluei-1)、マスクビット列、Maski、
リモート装置のメモリから読み出された検証鍵(ゼロ知識証明がzkSNARK証明である場合)。
【0210】
その他の例も可能である。例えば、本開示の実施形態は、個人の居住地及び/又は手書きの署名などの他の情報を開示することなく、(例えば、18歳以上であることを証明するために)運転免許証に保存された幾つかの情報を選択的に開示することを可能にする。運転免許証は、物理的な書類やカードであってもよいし、コンピュータ装置のメモリに電子的に保存されていてもよい。
【0211】
別の例では、本開示の実施形態は、IDカードに保存されている幾つかの情報の選択的開示を可能にし、他の情報を開示することなく、ある人がロンドンの居住者であることを証明する。IDカードは、物理的なオブジェクトであってもよいし、コンピュータ装置のメモリに電子的に保存されていてもよい。
【0212】
本開示の実施形態は、人が異なるマスクを生成して、同じデータの異なる部分の情報を異なる時間に異なるエンティティに選択的に開示することを可能にする柔軟性を可能にする。
【0213】
結論
開示された技術の他の変形例又は使用事例は、本明細書で開示されると、当業者に明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。
【0214】
例えば、実施形態はSHA256ハッシュ関数(ここではハッシュアルゴリズムとも呼ばれる)を参照して上述されてきたが、本開示の実施形態は任意のハッシュ関数を利用することができる。単なる例として、Pedersen又はMiMCハッシュ関数のような他の種類のハッシュ関数を使用することができる。
【0215】
更に、本開示の実施形態は、特定の種類のゼロ知識証明を使用することに限定されない。単なる例として、ゼロ知識証明は、Jens Grothによる論文「On the size of pairing-based non-interactive arguments. In Advances in Cryptology」-EUROCRYPT 2016-35th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Vienna, Austria, May 8-12, 2016, Proceedings, PartII, pages 305-326, 2016に示されているアルゴリズムを利用することができる。
【0216】
ステップS620及びS642でのRealContentPadからの機密ビットの削除は、すべての機密ビットに同じ所定値(例えば、0)を割り当て、RealContentPadの公開ビット値を保持することに関して説明されているが、他の実施形態では、これらのステップは、RealContentPadのこの変更されたバージョンが公開ビットのみを含むように、RealContentPadから機密ビットの場所を完全に削除することを含む場合がある。その後、RealContentPadの変更されたバージョンのメッセージ文字列が受信者に出力される。例えば、RealContentPublicの変更されたバージョンは、ブロックチェーンネットワーク106内の受信者ブロックチェーンノード104に送信される場合がある。従って、これらの例では、受信者ブロックチェーンノード104は、(プロセス600を実行した)送信者ブロックチェーンノード104から変更されたブロックチェーントランザクションRealContentPublicを受信するのではなく、RealContentPadの変更されたバージョンとマスクビット列Maskを使用して、変更されたブロックチェーントランザクションRealContentPublic(すべての機密ビットが同じ所定の値を割り当てられている)を再構築できる。
【0217】
上述の幾つかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104の観点で説明された。しかしながら、ビットコインブロックチェーンは、ブロックチェーン150の1つの特定の例であり、上述の説明は任意のブロックチェーンに一般的に適用されてよいことが理解される。つまり、本発明は、ビットコインブロックチェーンに何ら限定されない。より一般的には、上述のビットコインネットワーク106、ビットコインブロックチェーン150、及びビットコインノード104への言及は、ブロックチェーンネットワーク106、ブロックチェーン150、及びブロックチェーンノード104により各々置き換えられてよい。ブロックチェーン、ブロックチェーンネットワーク、及び/又はブロックチェーンノードは、ビットコインブロックチェーン150、ビットコインネットワーク106、及びビットコインノード104の上述の特性の一部又は全部を共有してよい。
【0218】
本発明の好適な実施形態では、ブロックチェーンネットワーク106は、ビットコインネットワークであり、ビットコインノード104はブロックチェーン150のブロック151を生成し、公開し、伝播し、及び格納する上述の機能の少なくとも全部を実行する。これらの機能の全部ではなく1つ又は一部のみを実行する他のネットワークエンティティ(又はネットワーク要素)が存在することが除外されない。つまり、ネットワークエンティティは、ブロックを伝播し及び/又は格納する機能を実行してよいが、ブロックを生成し公開しなくてよい(これらのエンティティが好適なビットコインネットワーク106のノードと見なされないことを思い出してほしい)。
【0219】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークでなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を生成し、公開し、伝播し、及び格納する機能の全部ではなく少なくとも1つ又は一部を実行してよいことが除外されない。例えば、これらの他のブロックチェーンネットワークでは、「ノード」は、ブロック151を生成し公開するよう構成されるが該ブロック151を格納し及び/又は他のノードに伝播しないネットワークエンティティを表すために使用されてよい。
【0220】
更に一般的には、上述の用語「ビットコインノード」104の言及は、用語「ネットワークエンティティ」又は「ネットワーク要素」と置き換えられてよい。このようなエンティティ/要素は、ブロックを生成し、公開し、伝播し、及び格納する役割のうちの一部又は全部を実行するよう構成される。そのようなネットワークエンティティ/要素の機能は、ハードウェアで、ブロックチェーンノード104を参照して上述したのと同じ方法で実装されてよい。
【0221】
上記の実施形態は、単なる例示として説明したものであることが理解されるであろう。より一般的には、以下の記述のうちの任意の1つ以上に従った方法、装置又はプログラムが提供され得る。
【0222】
本開示の側面は、以下の条項を参照して以下に定義される。
【0223】
(項1)
メッセージ内の機密データをブロックする方法であって、コンピューティング装置上で実行され、
前記メッセージのコピーを作成するステップと、
少なくとも1つのゼロ知識証明を生成し、前記少なくとも1つのゼロ知識証明の各々を生成することは、
前記コピーのビット内の少なくとも1つの機密ビットの位置を特定するマスクビット列を取得することと、
前記少なくとも1つの機密ビットに所定の値を割り当てることで、前記コピーの前記ビットを変更することにより、公開ビット列を計算することと、
秘密ビット列を決定することであって、前記秘密ビット列は、前記少なくとも1つの機密ビットを含み、かつ、前記コピーの前記ビットが、前記公開ビット列、前記マスクビット列及び前記秘密ビット列を用いたビットごとの論理計算の出力と等しいという要件を満たすことと、
前記メッセージのコピー又はその一部をハッシングして出力ハッシュ値を生成することと、
前記公開ビット列、前記マスクビット列、前記出力ハッシュ値、前記秘密ビット列を用いてゼロ知識証明を生成することと、
を含む、ステップと、
前記コピーから前記少なくとも1つの機密ビットの各々を削除して、変更されたメッセージを生成するステップと、
前記少なくとも1つの出力ハッシュ値、及び受信者が前記変更されたメッセージが有効であることを証明できるようにするための前記少なくとも1つのゼロ知識証明とともに、前記変更されたメッセージを前記受信者に出力するステップと、
を含む方法。
【0224】
(項2)
少なくとも1つのゼロ知識証明を生成する前に、前記コピーが、ハッシングするときに使用されるハッシュ関数によって定義される入力メッセージサイズの正の整数倍の長さを持つように、前記メッセージのコピーをパディングするステップと、
前記コピーの長さが前記ハッシュ関数によって定義される前記入力メッセージサイズに対応する場合、前記メッセージのコピーをハッシングすることによって単一のゼロ知識証明が生成され、公開初期化ベクトルを使用して前記出力ハッシュ値を生成するステップと、
を更に含む項1に記載の方法。
【0225】
(項3)
少なくとも1つのゼロ知識証明を生成する前に、前記コピーが、ハッシングに使用されるハッシュ関数によって定義される入力メッセージサイズの正の整数倍の長さを持つように、前記メッセージのコピーをパディングするステップ、を更に含み、
パディング後の前記コピーの長さが、前記ハッシュ関数によって定義される前記入力メッセージサイズよりも大きい場合、前記方法は、
前記ハッシュ関数によって定義される前記入力メッセージサイズに対応する長さを各々持つ複数のメッセージブロックに、前記メッセージのコピーを分割するステップと、
機密データを含む1つ以上のメッセージブロックを識別するステップと、
を含み、
機密データを含む前記1つ以上のメッセージブロックの各々に対してゼロ知識証明が生成される、項1に記載の方法。
【0226】
(項4)
前記少なくとも1つのゼロ知識証明のうちの1つ以上について、前記コピーのビットは、前記1つ以上のメッセージブロックのうちのメッセージブロックのビットに対応し、前記ゼロ知識証明は、前記メッセージブロックをハッシングして出力ハッシュ値を生成することによって生成される、項3に記載の方法。
【0227】
(項5)
前記複数のメッセージブロックは、第1メッセージブロックと1つ以上の更なるメッセージブロックを含み、前記第1メッセージブロックが機密データを含む場合、前記第1メッセージブロックのハッシングには公開初期化ベクトルが使用され、前記更なるメッセージブロックが機密データを含む場合、前記更なるメッセージブロックのハッシングには、前記更なるメッセージブロックの直前のメッセージブロックのハッシングから出力されるハッシュ値が使用される、項4に記載の方法。
【0228】
(項6)
前記複数のメッセージブロックのうちの幾つかのメッセージブロックが機密データを含み、前記方法は、前記幾つかのメッセージブロックの各々についてゼロ知識証明を並列に生成するステップ、を含む項3~5のいずれかに記載の方法。
【0229】
(項7)
前記少なくとも1つのゼロ知識証明のうちの1つについて、前記コピーのビットは、マージされたブロックのビットに対応し、前記マージされたブロックは、機密データを各々含む複数の隣接するメッセージブロックを含み、前記ゼロ知識証明は、前記マージされたブロックの中の各メッセージブロックを反復的にハッシングすることによって生成され、出力ハッシュ値は、終了メッセージブロックの直前にある前記複数の隣接するメッセージブロックのうちのメッセージブロックをハッシングすることから出力されるハッシュ値を使用して、前記マージされたブロックのうちの前記終了メッセージブロックをハッシングすることによって生成される、項3~6のいずれかに記載の方法。
【0230】
(項8)
機密データを含むメッセージブロックが、所定の閾値未満の数の機密ビットを含むことを識別するステップと、
前記メッセージブロックを、機密データを含む少なくとも1つの隣接するメッセージブロックとマージして、マージされたブロックを生成するステップと、
を更に含む項7に記載の方法。
【0231】
(項9)
前記所定の閾値は、前記ハッシュ関数の衝突耐性によって定義される、項8に記載の方法。
【0232】
(項10)
前記秘密ビット列は、前記コピーの前記ビットが、(i)公開ビット列と(ii)前記マスクビット列と前記秘密ビット列のビット毎のAND計算の結果とのビット毎のXOR計算に等しいという要件を満たす、項1~9のいずれかに記載の方法。
【0233】
(項11)
前記マスクビット列を取得することが、メモリから前記マスクビット列を読み出すことを含む、項1~10のいずれかに記載の方法。
【0234】
(項12)
前記マスクビット列を取得することが、
前記メッセージのコピーのビット内の少なくとも1つの機密ビットの位置を特定することと、
前記コピー内の前記少なくとも1つの機密ビットの位置を特定するマスクビット列を生成することと、
を含む、項1~10のいずれかに記載の方法。
【0235】
(項13)
前記少なくとも1つのマスクビット列を前記受信者に出力するステップ、を更に含む項1~12のいずれかに記載の方法。
【0236】
(項14)
前記出力するステップは、前記少なくとも1つの出力ハッシュ値、前記少なくとも1つの公開ビット列、及び前記少なくとも1つのゼロ知識証明とともに、前記受信者に関連付けられたリモート装置に前記変更されたメッセージを送信することを含む、項1~16のいずれかに記載の方法。
【0237】
(項15)
前記メッセージはブロックチェーントランザクションデータを含み、前記変更されたメッセージは変更されたブロックチェーントランザクションデータを含む、項13に記載の方法。
【0238】
(項16)
前記コンピューティング装置はブロックチェーンネットワーク内のブロックチェーンノードである、項14に記載の方法。
【0239】
(項17)
前記ブロックチェーントランザクションデータは、前記ブロックチェーントランザクションをブロックチェーンに記録することを要求するクライアント装置から受信され、前記リモート装置は、前記ブロックチェーンネットワーク内の更なるブロックチェーンノードであり、前記変更されたブロックチェーントランザクションデータが前記ブロックチェーンネットワーク内での伝播のために前記更なるブロックチェーンノードに送信される、項16に記載の方法。
【0240】
(項18)
前記リモート装置は前記ブロックチェーンネットワーク内の更なるブロックチェーンノードであり、前記方法は、
前記ブロックチェーントランザクションを受信するステップと、
ブロックチェーンに記録されるべきブロックを生成するステップであって、前記ブロックは、前記変更されたブロックチェーントランザクションデータを含む、ステップと、
前記変更されたブロックチェーントランザクションデータを含む前記ブロックを前記ブロックチェーンネットワーク内の前記更なるブロックチェーンノードに送信するステップと、
を含む項1~15のいずれかに記載の方法。
【0241】
(項19)
前記コンピューティング装置はブロックチェーンネットワークの外部にあり、前記リモート装置はクライアント装置である、項15に記載の方法。
【0242】
(項20)
ブロックチェーンに記録されたブロックを受信するステップであって、前記ブロックは前記ブロックチェーンのトランザクションデータを含む、ステップ、を含む項16又は19に記載の方法。
【0243】
(項21)
前記ブロックを受信するステップに応答して、前記生成するステップ、前記削除するステップ、前記送信するステップが行われる、項20に記載の方法。
【0244】
(項22)
前記生成するステッ及び前記削除するステップは、前記ブロックを受信することに応答して行われ、前記送信するステップは、前記リモート装置からの前記ブロックに対する要求を受信することに応答して行われる、項20に記載の方法。
【0245】
(項23)
前記リモート装置からの前記ブロックに対する要求を受信するステップに応答して、生成するステップ、削除するステップ、送信するステップが行われる、項20に記載の方法。
【0246】
(項24)
少なくとも1つのゼロ知識証明がzkSNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)証明である、項1~23のいずれかに記載の方法。
【0247】
(項25)
前記ゼロ知識証明を生成するステップは、証明鍵を使用することを更に含む、項24に記載の方法。
【0248】
(項26)
更に、前記変更されたメッセージの生成後、メモリから前記メッセージを削除し、前記変更されたメッセージをメモリに格納するステップ、を更に含む項1~25のいずれかに記載の方法。
【0249】
(項27)
コンピュータ可読記憶装置上に具現化されたコンピュータプログラムであって、コンピュータ機器上で実行すると項1~26のいずれかに記載の方法を実行するよう構成される、コンピュータプログラム。
【0250】
(項28)
プロセッサとメモリを含むコンピュータ装置であり、前記メモリは、前記プロセッサによって実行されると前記コンピュータ装置に項1~26のいずれかに記載の方法を実行させる命令を格納する、コンピュータ装置。
【0251】
(項29)
変更されたメッセージが有効であることを検証する方法であって、前記変更されたメッセージは元のメッセージから機密データを除去したものに対応し、前記方法は、コンピュータ装置上で実行され、
前記変更されたメッセージを取得するステップであって、前記変更されたメッセージが、前記元のメッセージの各機密ビットに所定の値を割り当てたものに対応する、ステップと、
前記変更されたメッセージの出力ハッシュ値を取得し、前記コンピューティング装置のメモリに格納されたデータを使用して前記出力ハッシュ値を検証するステップと、
送信側装置から、前記変更されたメッセージのビットに関連する少なくとも1つのゼロ知識証明を受信するステップと、
以下:(i)前記ゼロ知識証明を生成するために使用された秘密ビット列を導出するために、前記送信側装置により使用された、ビットごとの論理計算の知識、又はそれに関連する検証鍵、(ii)前記変更されたメッセージのビット、(iii)前記変更されたメッセージのビット内の少なくとも1つの機密ビットの位置を特定するマスクビット列、(iv)前記変更されたメッセージのビットのハッシュ値又はその一部、及び(v)前記変更されたメッセージのビットの入力ハッシュ値、を使用して前記少なくとも1つのゼロ知識証明の各々を検証するステップと、
を含む方法。
【0252】
(項30)
前記変更されたメッセージを取得するステップが、前記変更されたメッセージを前記送信側装置から受信することを含む、項29に記載の方法。
【0253】
(項31)
前記変更されたメッセージを取得するステップが、
前記元のメッセージの公開ビットのみを含む、前記元のメッセージのバージョンを受信することと、
前記元のメッセージの前記バージョンと前記マスクビット列を使用して、前記変更されたメッセージを生成するステップと、
を含む、項29に記載の方法。
【0254】
(項32)
前記変更されたメッセージのビットは、変更されたメッセージ全体に対応し、前記変更されたメッセージは、前記変更されたメッセージの出力ハッシュ値を生成するために使用されるハッシュ関数によって定義される入力メッセージサイズに対応する長さを持つ、項29~31のいずれかに記載の方法。
【0255】
(項33)
前記変更されたメッセージは、複数のメッセージブロックを含み、前記出力ハッシュ値は、前記複数のメッセージブロックのうちの終了メッセージブロックのハッシュであり、前記複数のメッセージブロックは、前記出力ハッシュ値を生成するために使用されるハッシュ関数によって定義される入力メッセージサイズに対応する長さを持つ、項29~31のいずれかに記載の方法。
【0256】
(項34)
前記変更されたメッセージのビットは、前記複数のメッセージブロックのいずれかに対応する、項33に記載の方法。
【0257】
(項35)
前記コピーのビットは、マージされたブロックのビットに対応し、前記マージされたブロックは、機密データを含む複数の隣接するメッセージブロックを含み、前記ゼロ知識証明を検証するステップは、前記マージされたブロックの終了メッセージブロックのハッシュ値を使用する、項29~31のいずれかに記載の方法。
【0258】
(項36)
前記元のメッセージがブロックチェーントランザクションであり、前記コンピューティング装置のメモリに格納されたデータが、前記ブロックチェーントランザクションに関連付けられたトランザクション識別子であり、出力ハッシュ値を検証するステップは、前記出力ハッシュ値をハッシングし、ハッシングの出力を前記トランザクション識別子と比較することを含む、項29~35のいずれかに記載の方法。
【0259】
(項37)
前記変更されたメッセージのビットに関連付けられた複数のゼロ知識証明は、前記送信側装置から受信され、前記複数のゼロ知識証明を検証するステップは並行して行われる、項29~36のいずれかに記載の方法。
【0260】
(項38)
コンピュータ可読記憶装置上に具現化されたコンピュータプログラムであって、コンピュータ機器上で実行すると項29~37のいずれかに記載の方法を実行するよう構成される、コンピュータプログラム。
【0261】
(項39)
プロセッサとメモリを含むコンピュータ装置であり、前記メモリは、前記プロセッサによって実行されると前記コンピュータ装置に項29~37のいずれかに記載の方法を実行させる命令を格納する、コンピュータ装置。
【国際調査報告】