JP2024519989A - 部分的なshaベースのハッシュ関数 - Google Patents

部分的なshaベースのハッシュ関数 Download PDF

Info

Publication number
JP2024519989A
JP2024519989A JP2023572620A JP2023572620A JP2024519989A JP 2024519989 A JP2024519989 A JP 2024519989A JP 2023572620 A JP2023572620 A JP 2023572620A JP 2023572620 A JP2023572620 A JP 2023572620A JP 2024519989 A JP2024519989 A JP 2024519989A
Authority
JP
Japan
Prior art keywords
sequence
blocks
message
transaction
sha
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023572620A
Other languages
English (en)
Inventor
ウェイ・ジャン
パトリック・スティーヴン・カフラン
ジョン・マーフィー
アーサー・ゴードン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nchain Holdings Ltd
Original Assignee
Nchain Holdings Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nchain Holdings Ltd filed Critical Nchain Holdings Ltd
Publication of JP2024519989A publication Critical patent/JP2024519989A/ja
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • H04L63/123Applying verification of the received information received data contents, e.g. message integrity
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial cryptography, e.g. electronic payment or e-cash

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

SHAベースのハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応するプリイメージの一部の完全性を検証するコンピュータ実装方法であって、プリイメージは、第1のメッセージと第2のメッセージとを含み、この方法は、a)反復入力ベクトルを受信することと、b)ブロックの第2のシーケンスを取得することと、c)ブロックの第2のシーケンスのそれぞれの位置の順にブロックの第2のシーケンスの各々に対するSHAベースのハッシュ計算の反復を実行することによって最終反復出力ベクトルを生成することであって、ブロックの第2のシーケンスの第1のブロックに対して実行されるSHAベースのハッシュ計算の反復は、取得された反復入力ベクトルに基づく、生成することと、d)最終反復出力ベクトルに基づき候補ハッシュダイジェストを生成することであって、候補ハッシュダイジェストはハッシュダイジェストと比較するためのものである、生成することとをさらに含む、コンピュータ実装方法が提供される。

Description

本開示は、SHAベースのハッシュ関数、すなわちSHA256などのSHAハッシュ関数のファミリーの1つであるハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応するプリイメージの一部の完全性を証明し検証する方法に関する。たとえば、プリイメージは、ブロックチェーントランザクションの一部または全部を含み得る。
ブロックチェーンは、ブロックチェーンの複製が分散ピアツーピア(P2P)ネットワーク(以下、「ブロックチェーンネットワーク」と称される)内の複数のノードの各々において維持される、広く公開される分散データ構造の一形態を指す。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは、1つまたは複数のトランザクションを含む。いわゆる「コインベーストランザクション」以外の、各トランザクションは、1つまたは複数のコインベーストランザクションに遡る1つまたは複数のブロックにまたがり得るシーケンス内の前のトランザクションを指す。コインベーストランザクションについては後述する。ブロックチェーンネットワークに提出されたトランザクションは、新しいブロックに含まれる。新しいブロックは、しばしば「マイニング」と称されるプロセスによって作成され、このプロセスは複数のノードの各々が「プルーフオブワーク」を実行することを競う、すなわち、ブロックチェーンの新しいブロックに入れられるのを待つ順序付けられ承認された保留トランザクションの定義されたセットの表現に基づく暗号パズルを解くことを競い合うことを伴う。ブロックチェーンはいくつかのノードのところで剪定されることがあり、ブロックの公開は単なるブロックヘッダの公開を通じて達成され得ることに留意されたい。
ブロックチェーンにおけるトランザクションは、デジタル資産(すなわち、多数のデジタルトークン)を伝達すること、仮想化台帳(virtualised ledger)またはレジストリ内の一連のエントリを順序付けること、タイムスタンプエントリを受信して処理すること、および/またはインデックスポインタを時間順序付けする(time-order)ことのうちの1つまたは複数の目的に使用され得る。ブロックチェーンは、また、ブロックチェーンの上に追加の機能を層化するために利用され得る。たとえば、ブロックチェーンプロトコルは、追加のユーザデータまたはデータへのインデックスをトランザクション内に記憶することを可能にし得る。単一のトランザクション内に記憶できる最大データ容量には事前指定された制限はなく、したがって次第により複雑になってゆくデータが組み込まれ得る。たとえば、これは、ブロックチェーンに電子文書を、またはオーディオもしくはビデオデータを記憶するために使用できる。
ブロックチェーンネットワークのノード(「マイナー」と称されることが多い)は、分散トランザクション登録および検証プロセスを実行するが、これについては後でさらに詳しく説明することにする。要約すると、このプロセスにおいてノードはトランザクションを承認し、それをブロックテンプレートに挿入し、これに対して有効なプルーフオブワークの解を識別することを試みる。有効な解が見つかると、新しいブロックがネットワークの他のノードに伝播され、それにより各ノードがブロックチェーン上に新しいブロックを記録することを可能にする。ブロックチェーンにトランザクションを記録させるために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)はトランザクションをネットワークのノードの1つに送信し、伝播される。トランザクションを受信したノードは、承認されたトランザクションを新しいブロックに組み込むプルーフオブワークの解を見つけるために競争し得る。各ノードは同じノードプロトコルを強制するように構成されており、これにはトランザクションが有効であるための1つまたは複数の条件を含み得る。無効なトランザクションは伝播されることも、ブロックに組み込まれることもない。トランザクションが承認され、それによってブロックチェーン上に受け入れられたと仮定すると、トランザクション(任意のユーザデータを含む)は、不変の公開記録としてブロックチェーンネットワーク内のノードの各々に登録され、インデックスを付けられたままとなる。
最新のブロックを作成するためにプルーフオブワークパズルを解くことに成功したノードは、典型的には、デジタル資産の額、すなわちトークンの数を分配する「コインベーストランザクション」と呼ばれる新しいトランザクションで報われる。無効なトランザクションの検出および拒否は、ネットワークのエージェントとして活動する競合ノードの活動によって強制され、違法行為を報告しブロックするインセンティブを与えられる。情報が広く公開されることは、ユーザがノードのパフォーマンスを継続的に監査することを可能にする。単なるブロックヘッダの公開は、参加者がブロックチェーンの継続的整合性を確実にすることを可能にする。
「出力ベース」モデル(ときにはUTXOベースモデルと称される)では、所与のトランザクションのデータ構造は、1つまたは複数の入力および1つまたは複数の出力を備える。任意の消費可能出力は、進行中の一連のトランザクションから導出可能なデジタル資産の額を指定する要素を含む。消費可能出力は、ときにはUTXO(「未使用トランザクション出力」)と称される。出力は、出力の将来の償還のための条件を指定するロックスクリプトをさらに含んでもよい。ロックスクリプトは、デジタルトークンまたは資産を承認して移転するために必要な条件を定義する述語である。(コインベーストランザクション以外の)トランザクションの各入力は、先行するトランザクションにおけるそのような出力へのポインタ(すなわち参照)を含み、さらに、指し示された出力のロックスクリプトをロック解除するためのロック解除スクリプトを含み得る。そこで、トランザクションのペアを考え、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定する少なくとも1つの出力を含み、出力をロック解除する1つまたは複数の条件を定義するロックスクリプトを含む。第2のターゲットトランザクションは、第1のトランザクションの出力へのポインタを含む少なくとも1つの入力と、第1のトランザクションの出力をロック解除するためのロック解除スクリプトとを含む。
そのようなモデルでは、第2のターゲットトランザクションがブロックチェーンネットワークに送信されてブロックチェーンに伝播され記録されるときに、各ノードで適用される有効性の基準の1つは、ロック解除スクリプトが第1のトランザクションのロックスクリプトで定義された1つまたは複数の条件のすべてを満たすことである。もう1つは、第1のトランザクションの出力が、別の以前の有効なトランザクションによってすでに償還されていないことである。これらの条件のいずれかに従ってターゲットトランザクションが無効であることを発見したノードは、それを(有効なトランザクションとして、しかし場合によっては無効なトランザクションを登録するために)伝播することも、ブロックチェーンに記録されるべき新しいブロックにそれを含めることもしない。
トランザクションモデルの代替的タイプはアカウントベースモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンス内において先行するトランザクションのUTXOを参照することによって振替金額を定義するのではなく、むしろ絶対的な口座残高を参照することによって振替金額を定義する。すべての口座の現在の状態は、ブロックチェーンとは別のノードによって記憶され、常に更新される。
https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf https://en.wikipedia.org/wiki/SHA-2 Secure Hash Standard(https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf)[1]
暗号学的ハッシュ関数SHA256は、ブロックチェーン技術を含む、多くの技術分野において広く採用されてきた。たとえば、SHA256ハッシュ関数は、トランザクションを検証し、プルーフオブワークまたはプルーフオブステークを計算するために使用される。SHA256ハッシュ関数(および一般に暗号学的ハッシュ関数)の一特性は、ハッシュダイジェスト(すなわちハッシュ関数の出力)とプリイメージ(たとえば、メッセージ)が与えられた場合に、プリイメージをハッシュ関数に入力し、出力されたハッシュダイジェストが提供されたハッシュダイジェストと完全に一致することを検証することによって、プリイメージの完全性が検証できることである。この検証は、使用されるハッシュ関数がSHA256であるときに、2つの異なるプリイメージが同じハッシュダイジェストにハッシュする無視できるくらいに小さくなるので可能である。同じことがSHAファミリーの他のハッシュ関数、たとえばSHA384またはSHA512にも当てはまる。
これまで、SHAハッシュ関数、たとえばSHA256は、全体としてのプリイメージの完全性を証明し検証するためにのみ使用されてきた。本開示は、プリイメージの一部、すなわち部分的プリイメージの完全性を証明し検証するための技術を提供する。すなわち、プリイメージは、第1および第2のメッセージを含むものとしてよく、本発明の実施形態は第2のメッセージがプリイメージの一部を形成することを証明し検証することを可能にする。ここでのメッセージは、一般的な意味で使用されており、必ずしも何らかの通信を意味するものではないが、それは排除されないことに留意されたい。
本明細書において開示される一態様によれば、SHAベースのハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応するプリイメージの一部の完全性を検証するコンピュータ実装方法が提供される。プリイメージは、第1のメッセージと第2のメッセージとを含む。この方法は、検証者によって実行され、a)反復入力ベクトル(iteration input vector)を受信することであって、反復入力ベクトルは、SHAベースのハッシュ関数を部分的に実行することによって生成される、受信することを含む。SHAベースのハッシュ関数を部分的に実行することは、i)ブロックの第1のシーケンスを取得することであって、ブロックの第1のシーケンスは、プリイメージの2進表現をパディングして第1のパディング済みシーケンスを生成し、第1のパディング済みシーケンスをブロックの第1のシーケンスに分割すること、または第1のメッセージの2進表現をブロックの第1のシーケンスに分割することのいずれかによって取得される、取得することと、ii)ブロックの第1のシーケンスの各々に対するSHAベースのハッシュ計算の反復を、ブロックの第1のシーケンス内のそれぞれの位置の順に、第2のメッセージを表す1つまたは複数のビットを含むブロックまで、実行することとを含む。この方法は、b)ブロックの第2のシーケンスを取得することであって、第2の複数のブロックは、i)第2のメッセージの2進表現をパディングして第2のパディング済みシーケンスを生成し、ii)第2のパディング済みシーケンスをブロックの第2のシーケンスに分割することによって生成される、取得することをさらに含む。この方法は、c)ブロックの第2のシーケンスのそれぞれの位置の順にブロックの第2のシーケンスの各々に対するSHAベースのハッシュ計算の反復を実行することによって最終反復出力ベクトルを生成することであって、ブロックの第2のシーケンスの第1のブロックに対して実行されるSHAベースのハッシュ計算の反復は、取得された反復入力ベクトルに基づく、生成することと、d)最終反復出力ベクトルに基づき候補ハッシュダイジェストを生成することであって、候補ハッシュダイジェストはハッシュダイジェストと比較するためのものである、生成することとをさらに含む。
本明細書において開示される別の態様によれば、SHAベースのハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応するプリイメージの一部の完全性を証明するコンピュータ実装方法が提供される。プリイメージは、第1のメッセージと第2のメッセージとを含む。この方法は、証明者によって実行され、a)反復入力ベクトルを生成することを含み、反復入力ベクトルは、SHAベースのハッシュ関数を部分的に実行することによって生成され、SHAベースのハッシュ関数を部分的に実行することは、i)ブロックの第1のシーケンスを取得することであって、ブロックの第1のシーケンスは、プリイメージの2進表現をパディングして第1のパディング済みシーケンスを生成し、第1のパディング済みシーケンスをブロックの第1のシーケンスに分割すること、または第1のメッセージの2進表現をブロックの第1のシーケンスに分割することのいずれかによって取得される、取得することと、ii)ブロックの第1のシーケンスの各々に対するSHAベースのハッシュ計算の反復を、ブロックの第1のシーケンス内のそれぞれの位置の順に、第2のメッセージを表す1つまたは複数のビットを含むブロックまで、実行することとを含む。この方法は、b)反復入力ベクトルを検証者が利用できるようにすることをさらに含む。
SHA256アルゴリズムの中間状態は、SHA256を使用してハッシュ値を計算することと同等の計算コストでSHA256ハッシュ値の部分的プリイメージに関する極めてコンパクトな完全性証明を提供するために利用され得ることが認識されている。この完全性証明は、2つに分割することができる任意のプリイメージに使用することができ、部分的プリイメージは後者の部分である。さらに、完全性証明は、第1のメッセージを明らかにせず、したがって必要であれば第1のメッセージが秘密に保たれることを可能にする。同じことがSHAファミリーの他のハッシュ関数、たとえばSHA384またはSHA512にも当てはまる。
一般に、プリイメージは、どのようなデータであってもよく、本明細書において説明されているプリイメージの特定の例に限定されない。例示的な一例として、プリイメージは、ブロックチェーントランザクションの一部または全部であってもよい。部分的プリイメージ(すなわち、第2のメッセージ)は、ブロックチェーントランザクションの1つまたは複数のコンポーネント、たとえば1つまたは複数の消費可能出力を含み得る。説明されている完全性証明は、1つまたは複数のコンポーネント(たとえば、1つまたは複数の消費可能出力)が完全なトランザクションにアクセスすることを必要とせずにブロックチェーントランザクションの一部を形成することを検証することを可能にする。これは、ブロックチェーントランザクションのサイズが大きい(すなわち、大量のデータを含む)ときに特に有利であり、消費可能出力(またはトランザクションの任意の他の重要なコンポーネント)が大量のデータを送信することなく検証されることを可能にするので、帯域幅および必要記憶容量を節約することができる。
別の例示的な例として、プリイメージは、運転免許証、パスポート、出生証明書、移住許可証などの身分証明書であってもよい。完全性証明は、身分証明書を構成する1つまたは複数のデータ項目(たとえば、パスポートに記録された個人の年齢)を、他の機密情報(たとえば、人の性別)を明らかにすることなく証明するために使用され得る。これは、文書の少なくとも一部のプライバシーを維持することが有益である任意の文書(身分証明書だけでなく)に一般化され得る。たとえば、文書は契約書であってもよく、それは、当事者が文書に署名したこと(すなわち、部分的プリイメージが署名を含むこと)を、契約の全条項を明らかにすることなく検証したい場合である。
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、例としてのみ、添付の図面が参照される。
ブロックチェーンを実装するためのシステムの概略ブロック図である。 ブロックチェーンに記録され得るトランザクションのいくつかの例の概略を例示する図である。 部分的プリイメージに対して完全性証明を実装するための例示的なシステムを例示する概略図である。 例示的なブロックチェーントランザクションを例示する概略図である。 シリアル化されたブロックチェーントランザクションの例示的な形式を例示する図である。
1. 例示的システム概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示している。システム100は、パケット交換ネットワーク101、典型的にはインターネットなどのワイドエリアインターネットワークを備え得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように配置構成され得る複数のブロックチェーンノード104を含む。例示されていないが、ブロックチェーンノード104は、ほぼ完全なグラフとして配置構成され得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104と高度に接続されている。
各ブロックチェーンノード104は、ピアのコンピュータ機器を含み、ノード104のうちの異なるノードは異なるピアに属す。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば1つまたは複数の中央演算処理装置(CPU)、アクセラレータプロセッサ、特定用途プロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途集積回路(ASIC)などの他の機器を含む処理装置を含む。各ノードは、また、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読記憶装置を含む。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を採用する1つまたは複数のメモリユニットを含み得る。
ブロックチェーン150は、データのブロック151を含み、ブロックチェーン150のそれぞれのコピーは、分散型またはブロックチェーンネットワーク106内の複数のブロックチェーンノード104の各々において維持される。上述のように、ブロックチェーン150のコピーを維持することは、必ずしもブロックチェーン150を完全に記憶することを意味しない。その代わりに、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(後述)を記憶する限りブロックチェーン150はデータを剪定され得る。チェーン内の各ブロック151は、1つまたは複数のトランザクション152を含み、この文脈でのトランザクションは、一種のデータ構造を指す。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して1つの特定のトランザクションプロトコルを使用する。トランザクションプロトコルの1つの共通のタイプにおいて、各トランザクション152のデータ構造は、少なくとも1つの入力と少なくとも1つの出力とを含む。各出力は、財産としてのデジタル資産の数量を表す額を指定し、その一例は、出力が暗号学的にロックされている(ロックを解除し、それによって償還または支出されるためにそのユーザの署名または他の解を必要とする)ユーザ103である。各入力は、先行するトランザクション152の出力を指し示し、それによってトランザクションをリンクする。
各ブロック151は、また、ブロック151に順序を定義するように、チェーン内の以前に作成されたブロック151を指すブロックポインタ155を含んでいる。各トランザクション152(コインベーストランザクション以外の)は、トランザクションのシーケンスに順序を定義するように、前のトランザクションを指すポインタを含む(注:トランザクションのシーケンス152は分岐することが許されている)。ブロック151のチェーンは、チェーン内の最初のブロックであったジェネシスブロック(Gb)153にまで遡る。チェーン150内の初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくむしろジェネシスブロック153を指していた。
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それによってトランザクション152をネットワーク106全体に伝播するように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104は、また、ブロック151内に組み込まれるのを待っているトランザクション152の順序付けられたセット(または「プール」)154を維持する。順序付けられたプール154は、「mempool」と称されることが多い。本明細書のこの用語は、任意の特定のブロックチェーン、プロトコル、またはモデルに限定することを意図されていない。それは、ノード104が有効であるとして受け入れたトランザクションの順序付けられたセットを指し、それに対してノード104は、同じ出力を消費することを試みる任意の他のトランザクションを受け入れないようにする義務がある。
所与の現在のトランザクション152jにおいて、その(または各)入力は、トランザクションのシーケンス内の先行するトランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還されるかまたは「消費」されるべきであることを指定する。一般に、先行するトランザクションは、順序付きセット154または任意のブロック151内の任意のトランザクションである可能性がある。先行するトランザクション152iは、現在のトランザクション152jが作成されるか、またはさらにはネットワーク106に送信された時点では必ずしも存在している必要はないが、現在のトランザクションが有効であるためには先行するトランザクション152iが存在し、承認される必要がある。したがって、本明細書における「先行する」は、必ずしも時間的シーケンスにおける作成または送信の時点ではない、ポインタによってリンクされた論理的シーケンス内の先行要素を指し、したがって、トランザクション152i、152jが順序から外れて作成されるか、または送信されることを必ずしも排除しない(オーファントランザクションに関する以下の説明を参照)。先行するトランザクション152iは、等しく前のトランザクションまたは先行トランザクションと呼ばれることも可能である。
本トランザクション152jの入力は、また、入力認可、たとえば先行するトランザクション152iの出力がロックされているユーザ103aの署名も含む。次に、本トランザクション152jの出力は、新規ユーザまたはエンティティ103bに暗号的にロックされ得る。本トランザクション152jは、したがって、本トランザクション152jの出力で定義されるように先行するトランザクション152iの入力で定義された額を新規ユーザまたはエンティティ103bに転送することができる。いくつかの場合において、トランザクション152は、複数のユーザまたはエンティティ(そのうちの1つは、釣り銭を渡すために元のユーザまたはエンティティ103aである可能性もある)の間で入力額を分割するために複数の出力を有し得る。いくつかの場合において、トランザクションは、1つまたは複数の先行するトランザクションの複数の出力から金額を集め、現在のトランザクションの1つまたは複数の出力に再分配するための複数の入力を有することもできる。
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個人ユーザまたは組織などの当事者103が、(手動または当事者によって採用される自動化プロセスによって)新規のトランザクション152jを制定することを望むときに、実施当事者は、そのコンピュータ端末102から受信者に新しいトランザクションを送信する。制定当事者または受信者は、最終的にこのトランザクションをネットワーク106のブロックチェーンノード104の1つまたは複数に送信する(現在では典型的にはサーバまたはデータセンターであるが、原理上、他のユーザ端末とすることも可能である)。また、新しいトランザクション152jを制定する当事者103が、このトランザクションをブロックチェーンノード104の1つまたは複数に直接的に送信し、いくつかの例では、受信者に送信しないことも排除されない。トランザクションを受信したブロックチェーンノード104は、ブロックチェーンノード104の各々で適用されるブロックチェーンノードプロトコルに従ってトランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、典型的には、ブロックチェーンノード104が、新規トランザクション152jにおける暗号署名が、トランザクション152の順序付けられたシーケンス内の前のトランザクション152iに依存する、期待される署名と一致することをチェックすることを必要とする。そのような出力ベースのトランザクションプロトコルにおいて、これは、新規トランザクション152jの入力に含まれる当事者103の暗号署名または他の認可が、新規トランザクションが割り当てる先行するトランザクション152iの出力において定義された条件に一致することをチェックすることを含むものとしてよく、この条件は、典型的には、新規トランザクション152jの入力における暗号署名または他の認可が、新規トランザクションの入力がリンクされている前のトランザクション152iの出力をロック解除することを少なくともチェックすることを含む。この条件は、前のトランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義され得る。代替的に、単純にブロックチェーンノードプロトコルだけで修正されるか、またはこれらの組合せに起因することもあり得る。いずれにせよ、新規トランザクション152jが有効である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106内の1つまたは複数の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用するので、新規トランザクション152jを1つまたは複数のさらなるノード104に転送する、というように続く。このようにして、新規トランザクションは、ブロックチェーンノード104のネットワーク全体に伝播される。
出力ベースモデルでは、所与の出力(たとえばUTXO)が割り当てられた(たとえば消費された)かどうかの定義は、ブロックチェーンノードプロトコルに従って、別の、前方のトランザクション152jの入力によってまだ有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、償還することを試みる先行するトランザクション152iの出力が、別のトランザクションによってまだ償還されていないことである。ここでもまた有効でない場合、トランザクション152jは伝播されないか(警告のために無効であるとフラグが立てられ伝播されない限り)、またはブロックチェーン150に記録されない。これは、トランザクション実行者が同じトランザクションの出力を複数回割り当てようとする二重支払いから保護するものである。その一方で、アカウントベースモデルは、勘定残高を維持することによって二重支払いを防止する。ここでもまたトランザクションの定められた順序があるので、勘定残高はどの時点においても単一の定義済み状態を有する。
トランザクションを承認することに加えて、ブロックチェーンノード104は、「プルーフオブワーク」によってサポートされる、マイニングと一般的に称されるプロセスでトランザクションのブロックを最初に作成するものとなる競争を行う。ブロックチェーンノード104では、新規トランザクションが、ブロックチェーン150上に記録されたブロック151内にまだ出現していない有効なトランザクションの順序付けられたプール154に追加される。次いで、ブロックチェーンノードは、暗号パズルを解くことを試みることによってトランザクション152の新しい有効なブロック151を、トランザクション154の順序付けられたセットから組み立てる競争をする。典型的には、これは、「ノンス」を探索することであって、ノンスが保留トランザクション154の順序付けられたプールの表現と連結されハッシュされたときにハッシュの出力が所定の条件を満たすような、探索することを含む。たとえば、所定の条件は、ハッシュの出力が特定の事前定義済みの数の先行ゼロを有することであり得る。これは1つの特定のタイプのプルーフオブワークパズルにすぎず、他のタイプは排除されない。ハッシュ関数の特性は、入力に対して予測不可能な出力を有するという性質である。したがって、この探索は総当りによってのみ実行することができ、したがって、パズルを解こうとしている各ブロックチェーンノード104において処理リソースの実質的な量が消費される。
パズルを解いた最初のブロックチェーンノード104は、これをネットワーク106に発表し、ネットワーク内の他のブロックチェーンノード104が容易にチェックできる証明として解を提供する(ハッシュの解が与えられれば、それがハッシュの出力を条件に合致させることをチェックするのは容易である)。最初のブロックチェーンノード104は、ブロックを受け入れる他のノードの閾値コンセンサスにブロックを伝播し、したがって、プロトコルルールを強制する。次いで、トランザクション154の順序付けられたセットは、ブロックチェーンノード104の各々によってブロックチェーン150内に新しいブロック151として記録されるようになる。ブロックポインタ155も、チェーン内の以前に作成されたブロック151n-1を指す新しいブロック151nに割り当てられる。プルーフオブワークの解を作成するために必要な、たとえばハッシュの形態の、著しい量の労力は、ブロックチェーンプロトコルのルールに従う第1のノード104の意向をシグナリングする。そのようなルールは、以前に承認されたトランザクションと同じ出力を割り当てる場合にトランザクションを有効なものとして受け入れないことを含むが、これは他の場合には二重支払いとしても知られている。作成された後、ブロック151は、ブロックチェーンネットワーク106内のブロックチェーンノード104の各々で認識され維持されるので、修正できない。ブロックポインタ155は、また、ブロック151に順序を課す。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付けられたブロックに記録されるので、これはしたがって、トランザクションの不変の公開台帳を提供する。
任意の所与の時点でパズルを解く競争をしている異なるブロックチェーンノード104は、解を探し始めた時期またはトランザクションが受信された順序に応じて、任意の所与の時点でまだ公開されていないトランザクション154のプールの異なるスナップショットに基づきそうするものとしてよいことに留意されたい。それぞれのパズルを最初に解いた者は、どのトランザクション152が次の新しいブロック151nに含まれ、どの順序で含まれるかを定義し、未公開トランザクションの現在のプール154は更新される。次いで、ブロックチェーンノード104は、未公開トランザクション154の新規に定義された順序付きプールからブロックを作成する競争をする、というように続ける。また、2つのブロックチェーンノード104がブロックチェーンの対立する見解がノード104間で伝播されるような互いの非常に短い時間内にパズルを解く場合である、発生し得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、フォークのどの分岐が最も長く成長しても、決定的なブロックチェーン150になる。これは同じトランザクションが両方のフォークに出現するときにネットワークのユーザまたはエージェントに影響を及ぼしてはならないことに留意されたい。
ビットコインブロックチェーン(およびほとんどの他のブロックチェーン)によれば、新しいブロック104を首尾よく構成したノードは、デジタル資産の追加の定められた量を分配する新しい特殊な種類のトランザクションにおいてデジタル資産の追加の受け入れられた額を新しく割り当てる能力を付与される(1人のエージェントまたはユーザから別のエージェントまたはユーザへデジタル資産の額を転送するエージェント間、またはユーザ間のトランザクションとは対照的に)。この特別なタイプのトランザクションは通常「コインベーストランザクション」と称されるが、「開始トランザクション」または「生成トランザクション」と呼ばれることもある。これは、典型的には、新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、新しいブロックを構築するノードが、この特別なトランザクションが後で償還されることを可能にするプロトコルルールに従うという意向をシグナリングする。ブロックチェーンプロトコルルールでは、この特別なトランザクションが償還され得る前に償還期限、たとえば100ブロック分を必要とし得る。多くの場合に、正規の(非生成)トランザクション152は、また、そのトランザクションが公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を払うために出力の1つで追加のトランザクション手数料を指定する。この手数料は、通常、「トランザクション手数料」と称され、以下で説明する。
トランザクションの承認および公開に関与するリソースに起因して、典型的には、ブロックチェーンノード104の少なくとも各々は、1つまたは複数の物理的サーバユニットを含むサーバ、またはさらにはデータセンター全体の形態をとる。しかしながら、原理上、任意の所与のブロックチェーンノード104は、ユーザ端末またはネットワーク接続されたユーザ端末のグループの形態をとることも可能である。
各ブロックチェーンノード104のメモリは、ブロックチェーンノードプロトコルに従ってそれぞれの1つまたは複数の役割を遂行し、トランザクション152を処理するためにブロックチェーンノード104の処理装置上で実行するように構成されているソフトウェアを記憶する。本明細書においてブロックチェーンノード104に帰される任意の活動は、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることは理解されるであろう。ノードソフトウェアは、アプリケーション層、またはオペレーティングシステム層もしくはプロトコル層などの下位層、またはこれらの任意の組合せにおける1つまたは複数のアプリケーションで実装され得る。
また、ネットワーク101に接続されているのは、消費ユーザの役割を担う複数の当事者103の各々のコンピュータ機器102である。これらのユーザは、ブロックチェーンネットワーク106とインタラクティブにやり取りし得るが、トランザクションを承認することまたはブロックを構築することに参加することはない。これらのユーザまたはエージェント103のいくつかは、トランザクションにおける送信者および受信者として働き得る。他のユーザは、必ずしも送信者または受信者として活動することなくブロックチェーン150とインタラクティブにやり取りし得る。たとえば、いくつかの当事者は、ブロックチェーン150のコピーを記憶する(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得している)ストレージエンティティとして働き得る。
当事者103の何人かまたは全員は、異なるネットワーク、たとえばブロックチェーンネットワーク106の上に重ねられたネットワークの一部として接続され得る。ブロックチェーンネットワークのユーザ(多くの場合に「クライアント」と称される)は、ブロックチェーンネットワーク106を含むシステムの一部であると言われ得るが、これらのユーザは、ブロックチェーンノードの必要な役割を実行しないのでブロックチェーンノード104ではない。その代わりに、各当事者103は、ブロックチェーンノード106に接続する(すなわち、通信する)ことによってブロックチェーンネットワーク106とインタラクティブにやり取りし、それによってブロックチェーン150を利用し得る。2つの当事者103およびそれぞれの機器102、すなわち第1の当事者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ機器102bが例示を目的として示されている。さらに多くのそのような当事者103およびそのそれぞれのコンピュータ機器102が存在し、システム100に参加し得るが、便宜上、それらは例示されていないことは理解されるであろう。各当事者103は、個人であっても組織であってもよい。純粋に例示を用いて、第1の当事者103aは本明細書ではアリスと称され、第2の当事者103bはボブと称されるが、これは限定するものではなく、本明細書におけるアリスまたはボブへの参照は、それぞれ「第1の当事者」および「第2の当事者」と置き換えてもよいことは理解されるであろう。
各当事者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つまたは複数の他のネットワーク接続リソースも備え得る。
クライアントアプリケーション105は、たとえばサーバからダウンロードされた、好適なコンピュータ可読記憶媒体上で任意の所与の当事者103のコンピュータ機器102に最初に提供され得るか、または取り外し可能SSD、フラッシュメモリキー、取り外し可能EEPROM、取り外し可能磁気ディスクドライブ、磁気フロッピーディスクもしくはテープなどの取り外し可能記憶デバイス、CDまたはDVD ROMなどの光ディスク、または取り外し可能光学式ドライブなど、で提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これは、主に2つの機能性を有する。これらのうちの1つは、それぞれの当事者103が、トランザクション152を作成し、認可し(たとえば署名し)、1つまたは複数のビットコインノード104に送信して、次いでブロックチェーンノード104のネットワーク全体に伝播させ、それによってブロックチェーン150に含まれることを可能にすることである。他は、それぞれの当事者に、現在所有しているデジタル資産の額を報告することである。出力ベースシステムでは、この第2の機能は、ブロックチェーン150全体に散らばる様々なトランザクション152の出力において定められた、注目する当事者に属す金額を照合することを含む。
注:様々なクライアント機能が所与のクライアントアプリケーション105に統合されていると説明され得るが、これは必ずしも限定するものではなく、その代わりに本明細書において説明されている任意のクライアント機能が、代わりに、2つまたはそれ以上の異なるアプリケーションの組、たとえば、APIを介してインターフェースされるか、または一方が他方へのプラグインされるもので実装され得る。より一般的には、クライアント機能は、アプリケーション層、またはオペレーティングシステムなどの下位層、またはこれらの任意の組合せで実装されることも可能である。次に、クライアントアプリケーション105に関して説明されるが、これは限定的なものではないことは理解されるであろう。
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能に結合される。これは、クライアント105のウォレット機能がネットワーク106にトランザクション152を送信することを可能にする。クライアント105は、また、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150を問い合わせる(または実施形態ではブロックチェーン150は、一部はその公共の可視性を通してトランザクションに信頼を提供する公共の施設であるので、実際にブロックチェーン150内の他の当事者のトランザクションを検査する)ためにブロックチェーンノード104と連絡を取ることができる。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を定式化し送信するように構成される。上で述べたように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を承認し、ブロックチェーンネットワーク106全体に伝播させるためにトランザクション152を転送するように構成されたソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと一緒になり、一緒に所与のトランザクションモデルを実装する。同じトランザクションプロトコルは、ブロックチェーン150内のすべてのトランザクション152に使用される。同じノードプロトコルは、ネットワーク106内のすべてのノード104によって使用される。
所与の当事者103、たとえばアリスは、ブロックチェーン150に含まれるべき新しいトランザクション152jを送信することを望むときに、アリスは、関連するトランザクションプロトコルに従って(アリスのクライアントアプリケーション105のウォレット機能を使用して)新しいトランザクションを定式化する。次いで、アリスは、クライアントアプリケーション105から、自分が接続されている1つまたは複数のブロックチェーンノード104にトランザクション152を送信する。たとえば、これはアリスのコンピュータ102に最もよく接続されているブロックチェーンノード104である可能性もある。任意の所与のブロックチェーンノード104が新規トランザクション152jを受信したときに、これは、ブロックチェーンノードプロトコルおよびそのそれぞれの役割に従ってそれを処理する。これは、新しく受信されたトランザクション152jが「有効」であるためのある条件を満たすかどうかを最初にチェックすることを含むが、その例は、まもなくより詳細に説明される。いくつかのトランザクションプロトコルでは、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクション毎に構成可能であり得る。代替的に、この条件は、単純にノードプロトコルの組み込み機能であるか、またはスクリプトとノードプロトコルとの組合せによって定義されることも可能である。
新たに受信されたトランザクション152jが有効とみなされることについてのテストに合格するという条件で(すなわち、それが「承認される」という条件で)、トランザクション152jを受信する任意のブロックチェーンノード104は、そのブロックチェーンノード104で維持されているトランザクション154の順序付けられたセットに新しい承認されたトランザクション152を追加する。さらに、トランザクション152jを受信した任意のブロックチェーンノード104は、承認されたトランザクション152をネットワーク106内の1つまたは複数の他のブロックチェーンノード104に前方伝播される。各ブロックチェーンノード104は同じプロトコルを適用するので、次いで、トランザクション152jが有効であると仮定すると、これは、それがすぐにネットワーク106全体にわたって伝播されることを意味する。
所与のブロックチェーンノード104で維持されている保留トランザクション154の順序付けられたプールに入るのを許された後、そのブロックチェーンノード104は、新しいトランザクション152を含むそれぞれのプール154の最新バージョンでプルーフオブワークパズルを解く競争を開始する(他のブロックチェーンノード104はトランザクション154の異なるプールに基づきパズルを解こうとしている可能性があるが、最初にそこに辿り着いた者が最新のブロック151に含まれるトランザクションの集合を定義するということを覚えておこう。最終的にブロックチェーンノード104は、アリスのトランザクション152jを含む順序付けられたプール154の一部に対するパズルを解くことになる)。新規トランザクション152jを含むプール154に対してプルーフオブワークが行われた後、それは、不変的に、ブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、以前のトランザクションを指すポインタを含み、したがってトランザクションの順序もまた、不変的に記録される。
異なるブロックチェーンノード104は、所与のトランザクションの異なるインスタンスを最初に受信し、したがって、インスタンスが新しいブロック151において公開される、すべてのブロックチェーンノード104が公開されたインスタンスが唯一の有効インスタンスであると合意する時点より前に、どのインスタンスが「有効」であるかについて対立する見解を有することがある。ブロックチェーンノード104が1つのインスタンスを有効なものとして受け入れ、次いで第2のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのブロックチェーンノード104はこれを受け入れなければならず、最初に受け入れたインスタンス(すなわち、ブロック151で公開されていないもの)を破棄する(すなわち、無効として扱う)ことになる。
いくつかのブロックチェーンネットワークによって運用されるトランザクションプロトコルの代替的タイプは、アカウントベーストランザクションモデルの一部として、「アカウントベース」プロトコルと称され得る。アカウントベースのケースでは、各トランザクションは、過去のトランザクションのシーケンス内において先行するトランザクションのUTXOを参照することによって振替金額を定義するのではなく、むしろ絶対的な口座残高を参照することによって振替金額を定義する。すべての口座の現在の状態は、ブロックチェーンとは別の、そのネットワークのノードによって記憶され、常に更新される。そのようなシステムでは、トランザクションは、口座の実行中トランザクション集計(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、暗号署名の一部として送信者によって署名され、トランザクション参照計算の一部としてハッシュ化される。それに加えて、任意のデータフィールドもトランザクションにおいて署名され得る。このデータフィールドは、たとえば以前のトランザクションIDがデータフィールドに含まれる場合に、以前のトランザクションを指してもよい。
2. UTXOベースモデル
図2は、トランザクションプロトコルの例を例示している。これは、UTXOベースプロトコルの一例である。トランザクション152(「Tx」と略記)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下は、出力ベースまたは「UTXO」ベースプロトコルを参照して説明される。しかしながら、これは、すべての可能な実施形態に限定されない。例示的なUTXOベースプロトコルは、ビットコインを参照しつつ説明されるが、他の例示的なブロックチェーンネットワーク上で等しく実装され得ることに留意されたい。
UTXOベースモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202、および1つまたは複数の出力203を含むデータ構造を備える。各出力203は、(UTXOがまだ償還されていない場合に)別の新しいトランザクションの入力202のソースとして使用され得る、未使用トランザクション出力(UTXO)を含み得る。UTXOは、デジタル資産の額を指定する値を含む。これは、分散台帳上のトークンの設定された数を表す。UTXOは、また、他の情報の中で、その元となったトランザクションのトランザクションIDも含み得る。トランザクションデータ構造は、また、入力フィールド202および出力フィールド203のサイズのインジケータを含み得る、ヘッダ201を備え得る。ヘッダ201は、また、トランザクションのIDを含むものとしてよい。実施形態において、トランザクションIDは、トランザクションデータのハッシュ(トランザクションIDそれ自体を除く)であり、ノード104に提出された生のトランザクション152のヘッダ201に記憶される。
たとえば、アリス103aが、注目しているデジタル資産の額をボブ103bに転送するトランザクション152jを作成することを望んでいる。図2において、アリスの新規トランザクション152jは「Tx1」とラベル付けされている。これは、シーケンス内の先行するトランザクション152iの出力203においてアリスにロックされているデジタル資産の額を取り、これの少なくとも一部をボブに転送する。先行するトランザクション152iは、図2において「Tx0」とラベル付けされている。Tx0およびTx1は、任意のラベルにすぎない。これらは、必ずしも、Tx0がブロックチェーン151の最初のトランザクションであることも、Tx1がプール154内のすぐ次のトランザクションであることも意味しない。Tx1は、アリスにロックされた未使用の出力203を依然として有する任意の先行する(すなわち前の)トランザクションを指すことも可能である。
先行するトランザクションTx0は、アリスが新規トランザクションTx1を作成する時点、または少なくともネットワーク106に送信する時点までに、すでに正当性を確認され、ブロックチェーン150のブロック151に含まれているものとしてよい。それは、その時点でブロック151のうちの1つにすでに含まれているか、または順序付けられたセット154においてまだ待機しているものとしてよく、その場合、それはすぐに新しいブロック151に含まれることになる。代替的に、Tx0およびTx1は、一緒に作成されてネットワーク106に送信される可能性があるか、またはTx0は、ノードプロトコルが「オーファン」トランザクションのバッファリングを可能にする場合にTx1の後に送信され得ることすら可能である。トランザクションのシーケンスの文脈で本明細書において使用されている「先行する」および「後続の」という言い回しは、トランザクションで指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指しているか、など)によって定義されるようなシーケンス内のトランザクションの順序を指している。これらは、等しく、「先行要素」および「後続要素」、または「前要素」および「子孫」、「親」および「子」、またはそのようなものと置き換えられることも可能である。これは、必ずしも、それらが作成され、ネットワーク106に送信され、または任意の所与のブロックチェーンノード104に到着する順序を暗示するものではない。それでもなお、先行するトランザクション(前のトランザクションまたは「親」)を指す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが承認されるまで、また承認がなされない限り、承認されない。親よりも先にブロックチェーンノード104に到着した子は、オーファンとみなされる。それは、ノードプロトコルおよび/またはノードの挙動に応じて、親を待つために廃棄されるか、または一定時間バッファリングされ得る。
先行するトランザクションTx0の1つまたは複数の出力203のうちの1つは、ここではUTXO0とラベル付けされている、特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、後続のトランザクションが承認され、したがってUTXOが首尾よく償還されるために後続のトランザクションの入力202のロック解除スクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、金額を特定の当事者(それが含まれるトランザクションの受益者)にロックする。すなわち、ロックスクリプトは、典型的には、後続のトランザクションの入力におけるロック解除スクリプトが、先行するトランザクションがロックされている当事者の暗号署名を含む条件を含む、ロック解除条件を定義する。
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有言語で書かれたコードの断片である。このような言語の特定の例は、ブロックチェーンネットワークで使用される「Script」(大文字のS)と呼ばれる。ロックスクリプトは、たとえばアリスの署名の要件など、トランザクション出力203を消費するために必要な情報を指定する。ロック解除スクリプトは、トランザクションの出力内に出現する。ロック解除スクリプト(別名scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有言語で書かれたコードの断片である。たとえば、これはボブの署名を含み得る。ロック解除スクリプトは、トランザクションの入力202内に出現する。
したがって、例示されている例では、Tx0の出力203のUTXO0は、UTXO0が償還されるために(厳密には、UTXO0を償還することを試みる後続のトランザクションが有効であるために)アリスの署名Sig PAを必要とするロックスクリプト[Checksig PA]を備えている。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、Tx1を指すポインタ(たとえば、実施形態ではトランザクション全体Tx0のハッシュである、そのトランザクションID、TxID0を用いて)を含む。Tx1の入力202は、Tx0の任意の他の可能な出力のうちからそれを識別するために、Tx0内でUTXO0を識別するインデックスを含む。Tx1の入力202は、アリスが鍵ペアから秘密鍵をデータ(暗号では「メッセージ」と呼ばれることもある)の事前定義済み部分に適用することによって作成された、アリスの暗号署名を含むロック解除スクリプト<Sig PA>をさらに含む。有効な署名を提供するためにアリスによって署名される必要があるデータ(または「メッセージ」)は、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
新規トランザクションTx1がブロックチェーンノード104に到着すると、そのノードは、ノードプロトコルを適用する。これは、ロックスクリプトおよびロック解除スクリプトを一緒に実行して、ロック解除スクリプトがロックスクリプトで定義されている条件(ここで、この条件は1つまたは複数の基準を含み得る)を満たすかどうかをチェックすることを含む。実施形態では、これは、2つのスクリプトを次のように連結することを含む。
<Sig PA> <PA> || [Checksig PA]
ここで、「||」は連結を表し、「<...>」はスタックにデータを置くことを意味し、「[...]」はロックスクリプト(この例ではスタックベースの言語)によって構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなくむしろ、共通のスタックにより、他方の後にスクリプトを次々に実行され得る。いずれにせよ、一緒に実行したときに、スクリプトは、Tx0の出力内にあるロックスクリプトに含まれるような、アリスの公開鍵PAを使用して、Tx1の入力内にあるロック解除スクリプトが、データの期待される部分に署名するアリスの署名を含むことを認証する。この認証を実行するために、データそれ自体の期待される部分(「メッセージ」)も含まれる必要がある。実施形態において、署名されたデータは、Tx1の全体を含む(したがって、すでに本質的に存在しているので、データの署名された部分を平文で指定する別の要素が含まれる必要はない)。
公開秘密暗号による認証の詳細は、当業者には馴染み深いものであろう。基本的に、アリスが自分の秘密鍵を使用してメッセージを署名している場合、アリスの公開鍵および平文のメッセージが与えられれば、ノード104などの別のエンティティは、メッセージがアリスによって署名されたに違いないと認証することができる。署名は、典型的には、メッセージをハッシュ化し、ハッシュに署名し、これを署名としてメッセージにタグ付けすることを含み、したがって公開鍵の保有者は誰でも署名を認証することができる。したがって、特定のデータ部分またはトランザクションの一部などに署名するという本明細書の言及は、実施形態において、そのデータ部分またはトランザクションの一部のハッシュに署名することを意味し得ることに留意されたい。
Tx1のロック解除スクリプトがTx0のロックスクリプトで指定された1つまたは複数の条件を満たす場合(したがって、図示されている例では、アリスの署名が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内の別の有効なトランザクションへの有効な入力をすでに形成しているかどうかである。
所与のトランザクション152のすべての出力203で指定された総額が、そのすべての入力202によって指されている総額よりも大きい場合、これはほとんどのトランザクションモデルにおいて無効であることに対する別の基準である。したがって、そのようなトランザクションは伝播されず、ブロック151に含まれることもない。
UTXOベーストランザクションモデルでは、所与のUTXOは全体として消費される必要があることに留意されたい。UTXOにおいて定義された金額の一部を、別の部分が消費されている間に、消費済みとして「残す」ことはできない。しかしながら、UTXOからの金額は、次のトランザクションの複数の出力の間に分割され得る。たとえば、Tx0のUTXO0で定義されている金額は、Tx1における複数のUTXOの間に分割され得る。したがって、アリスがボブにUTXO0で定義された金額のすべてを与えたくない場合、アリスは、残りをTx1の第2の出力で自分自身に釣り銭を渡すか、または他の当事者に支払うために使用することができる。
実際には、アリスは、通常、自分のトランザクション104をブロック151に正常に入れるビットコインノード104に対する手数料を含める必要がある。アリスがそのような手数料を含めない場合、Tx0は、ブロックチェーンノード104によって拒絶され、したがって技術的には有効であるが、伝播されずブロックチェーン150に含まれ得ない(ノードプロトコルは、ブロックチェーンノード104にトランザクション152を受け入れることを、そうするのを望まない場合には強制しない)。いくつかのプロトコルでは、トランザクション手数料は、それ自身の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。その代わりに、入力202によって指される総額と、所与のトランザクション152の出力203において指定される総額との間の任意の差額が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。たとえば、UTXO0へのポインタはTx1への唯一の入力であり、Tx1は唯一の入力UTXO1を有するとする。UTXO0で指定されたデジタル資産の額がUTXO1で指定された額よりも大きい場合、その差額は、UTXO1を含むブロックを作成するためにプルーフオブワークの競争に勝ったノード104によって割り当てられ得る。しかしながら、代替的に、またはそれに加えて、トランザクション手数料がトランザクション152のUTXO203のうちのそれ自身の1つにおいて明示的に指定されることが可能であることは、必ずしも除外されない。
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこかにある任意のトランザクション152において彼らにロックされたUTXOからなる。したがって、典型的には、所与の当事者103の資産は、ブロックチェーン150全体における様々なトランザクション152のUTXO全体を通して散らばっている。所与の当事者103の総残高を定義する1つの数がブロックチェーン150内のどこかに記憶されているわけではない。それぞれの当事者にロックされ、別の前方のトランザクションでまだ消費されていないすべての様々なUTXOの値をまとめて照合するのはクライアントアプリケーション105内のウォレット機能の役割である。ビットコインノード104のいずれかに記憶されているようなブロックチェーン150のコピーに問い合わせることによってこれを行うことができる。
スクリプトコードは、多くの場合に概略として表現される(すなわち、正確な言語を使用しない)ことに留意されたい。たとえば、特定の機能を表現するためにオペレーションコード(opcode)を使用してもよい。「OP_...」は、Script言語の特定のオペコードを指す。一例として、OP_RETURNは、ロックスクリプトの始めにOP_FALSEが先行するときに、トランザクション内にデータを記憶することができるトランザクションの消費不可能な出力を作成し、それによってデータをブロックチェーン150内に不変的に記録する、Script言語のオペコードである。たとえば、データは、ブロックチェーンに記憶することが望まれる文書を含み得る。
典型的には、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名するものである。いくつかの実施形態において、所与のトランザクションについて、署名は、トランザクション入力の一部と、トランザクション出力の一部または全部に署名する。署名する出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、通常、どの出力が署名される(したがって、署名の時点で固定される)かを選択する署名の最後に含まれる4バイトコードである。
ロックスクリプトは、これが典型的にはそれぞれのトランザクションがロックされる当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、典型的には対応する署名を提供するという事実を指す「scriptSig」と呼ばれることがある。しかしながら、より一般的に、ブロックチェーン150のすべてのアプリケーションにおいて、UTXOが償還されるための条件が署名を認証することを含むことは不可欠でない。より一般的には、スクリプト言語は、任意の1つまたは複数の条件を定義するために使用されることが可能である。したがって、より一般的な用語である「ロックスクリプト」および「ロック解除スクリプト」が好まれ得る。
3. サイドチャネル
図1に示されているように、アリスおよびボブのコンピュータ機器102a、120bの各々の上のクライアントアプリケーションは、それぞれ、追加の通信機能を備え得る。この追加の機能は、アリス103aが、ボブ103bと(いずれかの当事者または第三者の扇動で)別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークから離れてデータを交換することを可能にする。そのような通信は、ときには「オフチェーン」通信と称される。たとえば、これは、当事者の一方がネットワーク106にブロードキャストすることを選択するまで、トランザクションが(まだ)ブロックチェーンネットワーク106に登録されることなく、またはチェーン150上を進むことなく、アリスとボブとの間でトランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、ときには、「トランザクションテンプレート」を共有すると称される。トランザクションテンプレートは、完全なトランザクションを形成するために必要な1つまたは複数の入力および/または出力を欠いている場合がある。代替的に、またはそれに加えて、サイドチャネル107は、鍵、交渉された金額または条件、データコンテンツなどの任意の他のトランザクション関係データを交換するために使用され得る。
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替的に、またはそれに加えて、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはアリスのデバイス102aとボブのデバイス102bとの間の直接的な有線またはワイヤレスリンクを介してであっても確立され得る。一般的に、本明細書のどこかで参照されているサイドチャネル107は、「オフチェーン」で、すなわちブロックチェーンネットワーク106とは別に、データを交換するための1つまたは複数のネットワーク技術または通信媒体を介した任意の1つまたは複数のリンクを含み得る。複数のリンクが使用される場合、オフチェーンリンクのバンドルまたはコレクションは全体としてサイドチャネル107と称され得る。したがって、アリスおよびボブが、サイドチャネル107上で、いくつかの情報またはデータまたは類似のものを交換すると言われる場合に、これは必ずしもこれらのデータのすべての部分が全く同じリンクまたは同じタイプのネットワーク上で送信されなければならないことを暗示するものではないことに留意されたい。
4. 部分的SHA256
本発明の実施形態は、SHAハッシュ関数(たとえば、SHA256、SHA512)でハッシュされたプリイメージのハッシュダイジェストが与えられた場合に、メッセージ(すなわち、任意のデータ部分)がそのハッシュダイジェストに対するプリイメージの一部を形成することを証明することを可能にする。プリイメージに属することが証明されるべきプリイメージの一部は、本明細書では「部分的プリイメージ」と称される。また、これは「第2のメッセージ」とも称される。一般に、プリイメージは、第1のメッセージ(すなわち、プリイメージの第1の部分)と第2のメッセージ(すなわち。メッセージの第2の部分)から構成され、第1のメッセージは第2のメッセージに先行する。第1および第2のメッセージ(および全体としてのプリイメージ)は、必ずしも2つまたはそれ以上のエンティティの間の通信という意味でのメッセージではないことに留意されたい。すなわち、メッセージという用語は、任意のタイプのデータを指すために使用される。すなわち、本開示で使用される「メッセージ」(第1のメッセージ、第2のメッセージ、または全体としてのプリイメージであろうとなかろうと)は、もちろん除外されないけれども、必ずしも意味のあるコンテンツまたはペイロードを意味しない。たとえば、メッセージは、ソルトまたはノンスなどの、別の(非ユーザコンテンツ)要素と連結されたユーザペイロードおよび/またはコンテンツデータを含み得る。
図3は、本発明の実施形態を実装するための例示的なシステム300を例示している。システム300は、証明者301と検証者302とを含む。証明者301は、第2のメッセージがハッシュダイジェストに対応するプリイメージの一部を形成することを別の当事者(検証者302)に証明したいエンティティである。検証者302は、第2のメッセージがハッシュダイジェストに対応するプリイメージの一部を形成することを検証したいエンティティである。一般に、当事者は、任意のタイプのエンティティ、たとえば、アリス103aまたはボブ103bなどのユーザ、ユーザのグループ、組織、マシン、ブロックチェーンノード104など、であってもよい。
エンティティの特定のタイプにかかわらず、証明者301および検証者302は、1つまたは複数のプロセッサ、たとえば、1つまたは複数のCPU、GPU、DSP、暗号プロセッサ、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを含むそれぞれの処理装置を備えるそれぞれのコンピュータ機器を操作する。証明者301および検証者302のそれぞれのコンピュータ機器は、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読記憶装置をさらに含む。このメモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクもしくは磁気テープなどの磁気媒体、SSD、フラッシュメモリ、もしくはEEPROM、ROM、DRAM、SRAMなどの電子媒体、および/または光ディスクドライブもしくはガラスストレージなどの光学媒体を採用する1つまたは複数のメモリユニットを含み得る。それぞれのコンピュータ機器上のメモリは、処理装置上で実行するように配置構成されている少なくとも1つのクライアントアプリケーションのそれぞれのインスタンスを含むソフトウェアを記憶し得る。本明細書において証明者301および検証者302に帰される任意の活動は、その当事者のそれぞれのコンピュータ機器の処理装置上で実行されるソフトウェアを使用して実行され得ることは理解されるであろう。それぞれのコンピュータ機器は、少なくとも1つのユーザ端末、たとえば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを含む。所与の当事者301、302のコンピュータ機器102は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの、1つまたは複数の他のネットワーク接続リソースも備え得る。
本発明の実施形態は、まず最初に、SHAベースのハッシュ関数がSHA256ハッシュ関数であることに関して説明される。しかしながら、SHAベースのハッシュ関数のどれも使用され得ることは理解されるであろう。
プリイメージ全体、すなわち第1および第2のメッセージの連結にアクセスできる証明者301の観点から出発して、証明者301は、プリイメージに対してSHA256ハッシュ関数を部分的に実行する。すなわち、証明者301は、プリイメージをSHA256ハッシュ関数に入力し、SHA256ハッシュ関数(すなわち、SHA256ハッシュ関数を実装するように構成されているアルゴリズム)のすべてではなく一部を実行する。SHA256ハッシュ関数自体はよく知られており、https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdfで詳細に説明されている。https://en.wikipedia.org/wiki/SHA-2も参照のこと。
証明者301は、SHA256ハッシュ関数を部分的に実行し、反復入力ベクトルを生成する。反復入力ベクトルは、第1のメッセージを表すバイトのブロックを処理した後に出力されるベクトルである。プリイメージは、バイトのシーケンスとして表現される。バイトのシーケンスは、パディング済みシーケンスを生成するために1つまたは複数のバイトでパディングされる。バイトのシーケンスのパディングは、SHA256ハッシュ関数の前処理フェーズの一部として当業者にはよく知られている。パディング済みシーケンスは、次いで、各ブロックのサイズが64バイトであるブロックのシーケンスに分割される(すなわち解析される)。これは、ブロックの第1のシーケンスと称される。ここでもまた、当業者は、この分割を熟知しているであろう。ブロックの第1のシーケンスの第1の複数のブロックは第1のメッセージを表す、すなわち、第1の複数のブロックは第1のメッセージを表すバイトを含む。第1の複数のブロックは、その代わりに、第1のメッセージの2進表現を複数の64バイトブロックに分割することによって、第1のメッセージから直接的に取得され得る。ブロックの第1のシーケンスの第2の複数のブロックは、第2のメッセージと任意のパディングとを表す。つまり、第2の複数のブロックは、第2のメッセージを表すバイトとパディングバイトとを含む。SHA256ハッシュ計算は、次いで、第1の複数のブロックに対して順に実行される。すなわち、SHA256ハッシュ計算の反復は、ブロックの第1のシーケンス内の第1のブロックに対して実行され、次いで、SHA256ハッシュ計算の反復は、ブロックの第1のシーケンス内の第2のブロックに対して実行され、というように続く。反復入力ベクトルは、第1の複数のブロックのうちの最終ブロックに対するSHA256ハッシュ関数の反復の出力である。SHA256ハッシュ計算の各反復は、それぞれの反復入力ベクトルを出力する。したがって、便宜上、第1の複数のブロックのうちの最終ブロックに対するSHA256ハッシュ計算の最終反復後に出力される反復入力ベクトルは、ターゲット反復入力ベクトルと称される。
バイト単位で表されると称される任意のデータ(たとえば、プリイメージ、第1のメッセージ、第2のメッセージ、パディング済みシーケンス、ブロックなど)は、ビット単位で同様に表現され得ることに留意されたい。
第2のメッセージがプリイメージの一部を形成することを証明するために、証明者301は、ターゲット反復入力ベクトルを検証者302が利用できるようにする。これは、たとえば安全な通信チャネルを介して、検証者302にターゲット反復入力ベクトルを送信することを伴い得る。他の例では、ターゲット反復入力ベクトルは、オンラインリソース、たとえばウェブページで利用可能にされるものとしてよく、これは、公開アクセス可能であってもなくてもよい(すなわち、ウェブページのコンテンツにアクセスするためにパスワードまたは同様のものが要求されることがある)。
検証者302は、ハッシュダイジェストに対するアクセス権をすでに有している場合がある。そうでなければ、証明者301は、第2のメッセージがプリイメージの一部であることを検証する際に使用するためにハッシュダイジェストを検証者302に送信し得る。証明者301は、他の方法で、たとえばハッシュダイジェストを公開することによって、ハッシュダイジェストを検証者302が利用できるようにし得る。また、別の当事者が、ハッシュダイジェストを検証者302が利用できるようにすることも排除されない。実際、他の当事者はハッシュダイジェストを生成する当事者であってもよい。
同様に、証明者301は、第2のメッセージを検証者302に送信するか、または他の何らかの形で検証者302が利用できるようにし得る。
以下で説明されるように、いくつかの例では、検証者302は、プリイメージのビット長またはバイト長を知らなければならない。これらの例では、証明者301は、プリイメージのビット長またはバイト長を、検証者302に送信するか、または他の何らかの形で検証者302が利用できるようにし得る。それに加えて、または代替的に、検証者302は、第1のメッセージのビット長またはバイト長を取得し得る。
ターゲット反復入力ベクトルを、たとえば、証明者301から取得した後、検証者302は、第2のメッセージがプリイメージの一部を形成することを検証するために完全性証明を実行する。検証者301は、バイトのシーケンスとして表現された、第2のメッセージにアクセスすることを必要とする。バイトのシーケンスは、パディング済みシーケンスを生成するために1つまたは複数のバイトでパディングされる。パディング済みシーケンスは、次いで、各ブロックのサイズが64バイトであるブロックのシーケンスに分割される(すなわち解析される)。これは、ブロックの第2のシーケンスと称される。第2のシーケンス内の第1のブロックは、第2のメッセージの第1のバイトを含む。検証者302は、前記パディングを実行し得るか、または検証者302は、パディング済みシーケンスを、たとえば証明者301から取得し得る。次いで、SHA256ハッシュ計算は、ブロックの第2のシーケンスに対して順に実行される。すなわち、SHA256ハッシュ計算の反復は、ブロックの第2のシーケンス内の第1のブロックに対して実行され、次いで、SHA256ハッシュ計算の反復は、ブロックの第2のシーケンス内の第2のブロックに対して実行され、というように続く。前述のように、それぞれの反復入力ベクトルが、SHA256ハッシュ関数の各反復の終わりに出力される。便宜上、ブロックの第2のシーケンス内の最終ブロックを処理した後に出力されるそれぞれの反復入力ベクトルは、最終反復出力ベクトルと称される。
わかりやすくするために、反復入力ベクトルおよび反復出力ベクトルは、同じ形式をとり、実際には同一である。「反復入力ベクトル」は、単にSHA256ハッシュ計算の次の反復への入力として使用されるべきベクトルを指すために使用されるだけである。「反復出力ベクトル」は、単にSHA256ハッシュ計算の前の反復の出力を指すために使用されるだけである。
検証者302は、次いで、最終反復出力ベクトル302に基づき、たとえば最終反復出力ベクトルの要素を連結することによって、候補ハッシュダイジェストを生成する。第2のメッセージが本当にプリイメージの一部である場合、候補ハッシュダイジェストは、プリイメージのハッシュであると主張されるハッシュダイジェストと一致するべきである。したがって、検証者302は、候補ハッシュダイジェストと取得されたハッシュダイジェストとを比較し、2つのハッシュダイジェストが等しいことを検証し得る。上述のように、ハッシュダイジェストは、証明者301から直接的に取得され得るか、または他の場所、たとえば、プリイメージがブロックチェーントランザクションを含む場合にはブロックチェーン150から取得され得る。
以下では、説明されている実施形態のさらなる具体例を提示する。
SHA256(m)=hと仮定する。ただしm=m1||m2はm1とm2とを連結したメッセージである。hが知られている場合、SHA256(m)がhに等しいかどうかをチェックすることによってmの完全性を検証することができる。m2の完全性を、ハッシュ値hが与えられたとしてm1を明らかにすることなく検証することも可能である。これは、SHA256の1回の計算と同等の計算コストで行うことができる。
4.1 SHA256の内部動作
バイトのシーケンス、b0、b1、...、bn-1によって表され得る、入力mが与えられた場合、第1のステップは入力をパディングすることである。上述したように、説明されている実施形態は、データ(たとえばプリイメージm)の任意の2進表現に適用することができ、データがバイト単位で表現されることに限定されない。
1.1バイト0x80をbnとして付加する。
2.pを最小の正整数として、0x00のpバイトを、n+1+p=56 mod 64となるまで付加する。
3.入力mのビット長を、ビッグエンディアンにより8バイトで表し、それを付加する。
次のステップは、パディングされた入力を64バイトのブロックに分割することである。各バイトは8ビットであることに留意されたい。
B0={b0,b1,...,b63}
B1={b64,b65,...,b127}
...
Bk={b64k,b64k+1,...,bn+p+8}
ブロックは、次いで、1つずつ処理される。われわれは、そのようなプロセスをブロック反復、または単に反復と呼ぶ。各ブロック反復は、次の2つの入力を取る。
1.各々サイズが4バイトである、要素8個からなるベクトル、および
2.各々サイズが4バイトである、16ワードのパーティションによって表される、ブロックそれ自体。
第1のブロックについては、入力ベクトルは、初期ベクトル(IV)と呼ばれる。SHA256アルゴリズムの標準的な実装では、IVは最初の8個の素数の平方根の小数部分の最初の32ビットに設定される。それ以降のすべてのブロックについては、入力ベクトルは、前のブロック反復からの出力である。われわれは、曖昧なときには、これらの入力ベクトルを反復入力ベクトルと呼ぶ。
各反復は、前処理フェーズと64ラウンドのシャッフルからなる。前処理フェーズは、W0,W1,...W63によって表される、各々サイズが4バイトである、64ワードを生成する。最初の16ワードは処理されるブロックからのものである。後続のワードはすべて、前の16ワードから導出されたものである。
各ラウンドは、次の2つの入力を取る。
1.各々サイズが4バイトである、要素8個からなるベクトル、および
2.ワードW(順に消費される)。
第1のラウンドでは、入力ベクトルは、ブロック反復からの入力ベクトルに初期化される。それ以降のすべてのラウンドについては、入力ベクトルは、前のラウンドからの出力である。反復の入力ベクトルと区別するために、われわれは、それらをラウンド入力ベクトルと呼ぶ。ブロック反復の終わりに、最後のラウンドからの出力は、反復入力ベクトルと組み合わされ、このブロック反復の出力を生成する。
4.2 SHA256を使用する部分的プリイメージの完全性
目標は、SHA256(m1||m2)=hとして、hが与えられた場合に、m1を明らかにすることなく、m2の完全性を証明することである。SHA256の内部動作の記述は、ハッシュ値の計算の任意の時点で停止し、計算を続行するために必要な情報を見つけ出すことを可能にする。言い換えると、われわれは、m1が消費されたときに停止し、必要な情報を中間状態として識別し、m2で計算を継続することができ、中間状態はm1が何であるかを明らかにしない。
われわれは、必要な情報が以下を含むことを導き出すことができる。
1.8個の要素の反復入力ベクトル、
2.上記と異なる場合に8個の要素のラウンド入力ベクトル、
3.現在のブロック反復で処理されるべきワードの残り、および
4.反復されるべきブロックの残り。
m1のバイト長がちょうど64の倍数であれば、項目1および4は、hを算出する計算を続行するのに十分である。そうでない場合、われわれは、現在のブロック反復を完了し、計算の残りに移るのに、項目1、2、および3を必要とする。
項目3は、前に処理された16ワード、またはブロックそれ自体を表す最初の16ワードで置き換えられ得るが、それはワードの残りがそれらから導出できるからであることに留意されたい。
SHA256の安全性は、各ブロック反復によってある程度継承され得るけれども、ブロック反復における各ラウンドについてはおそらくそうならない。したがって、項目2と3を組み合わせることによって、そのブロック反復の最初の16ワードを算出することが計算上可能であると仮定できるならば、われわれは、情報のリストを次のように単純化することができる。
1.IViterationによって示される、8個の要素の反復入力ベクトル、および
2.反復されるべきブロックの残り。
単純化があるので、われわれは、今後、m1の長さはちょうど64の倍数であると仮定することができる。われわれは、また、計算の残りをpartial-SHA256(pS256)と表す。メッセージm2の第2の部分は、ブロックの残りと等価ではないことに留意されたい。最後のブロックは入力mの長さを含むが、その情報はm2では利用できない。したがって、m1を明らかにすることなくm2の完全性を検証する文脈において、われわれは、パディングおよび最後のブロックを構成するためにm1またはmの長さを知る必要がある。われわれは、ここで、アルゴリズムpartial-SHA256を正式に記述することができる。われわれは、mのビット長に対してlを使用する。
命題:メッセージmがビット長lを有し、SHA256(m)=h、m=m1||m2であり、m1は512の倍数であるビット長を有し、m1までSHA256アルゴリズムでmを処理するための出力はIViterationであると仮定する。次いで、任意の
について、
である確率は、SHA256が衝突困難性を有しているという仮定の下で無視できるくらいに小さい。
証明:
であると仮定し、
が成り立つとする。
とし、われわれは、SHA256(m')=hを有する。m'≠m,なので、われわれは、SHA256に対する衝突を見つける。しかしながら、SHA256で衝突を見つける確率は、衝突困難性の仮定の下で無視できるくらいに小さい。したがって、イベント
もまた
である場合に無視できるくらいに小さい確率を有していなければならない。
これで、われわれは、mに対するハッシュ値h、m1に対する中間状態IViteration、およびmのビット長lが与えられた場合に、m1を明らかにすることなく、m2の完全性を証明することができる。これは、m1が提示されるか、伝送されるか、または記憶されるには大きすぎる秘密または何らかのデータであるときに極めて有用である。
これまでのところ、本発明の実施形態はSHA256の文脈において説明されてきた。しかしながら、説明されている実施形態は、Secure Hash Standard(https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf)[1]でカバーされている他の任意のSHA関数に容易に適合され得る。便宜のため、ここで、partial SHA256の説明が繰り返される。
この関数は、4つのコンポーネントにより捕捉され得る。
1.IViteration
2.パディング、
3.ブロック反復、および
4.最終出力。
この技術は、これらのコンポーネントのいくつかまたはすべてに変更を加えるだけで他のSHA関数にも適用され得る。最初にSHA-1およびSHA-224から始めて、4つのコンポーネントは、次のようになる。
他のSHA関数をカバーするために、われわれはSHA512から始める。
4.3 SHA512の内部動作
バイトのシーケンス、b0、b1、...、bn-1によって表され得る、入力mが与えられた場合、第1のステップは入力をパディングすることである。上述したように、説明されている実施形態は、データ(たとえばプリイメージm)の任意の2進表現に適用され、データがバイト単位で表現されることに限定されない。
1.1バイト0x80をbnとして付加する。
2.0x00のpバイトを、n+1+p=112 mod 128となるまで付加する。
3.入力mのビット長を、ビッグエンディアンにより16バイトで表し、それを付加する。
次のステップは、パディングされた入力を128バイトのブロックに分割することである。各バイトは8ビットであることに留意されたい。
B0={b0,b1,...,b127}
B1={b128,b129,...,b255}
...
Bk={b128k,b128k+1,...,bn+p+16}
ブロックは、次いで、1つずつ処理される。われわれは、そのようなプロセスをブロック反復、または単に反復と呼ぶ。
各ブロック反復は、次の2つの入力を取る。
1.各々サイズが8バイトである、要素8個からなるベクトル、および
2.各々サイズが8バイトである、16ワードのパーティションによって表される、ブロックそれ自体。
第1のブロックについては、入力ベクトルは、初期ベクトル(IV)と呼ばれる。SHA512アルゴリズムの標準的な実装では、IVは最初の8個の素数の平方根の小数部分の最初の64ビットに設定される。それ以降のすべてのブロックについては、入力ベクトルは、前のブロック反復からの出力である。われわれは、曖昧なときには、これらの入力ベクトルを反復入力ベクトルと呼ぶ。
各反復は、前処理フェーズと80ラウンドのシャッフルを含む。前処理フェーズは、W0,W1,...W79によって表される、各々サイズが8バイトである、80個のワードを生成する。最初の16ワードは処理されるブロックからのものである。後続のワードはすべて、前の16ワードから導出されたものである。
各ラウンドは、次の2つの入力を取る。
1.各々サイズが8バイトである、要素8個からなるベクトル、および
2.ワードW(順に消費される)。
第1のラウンドでは、入力ベクトルは、ブロック反復からの入力ベクトルに初期化される。それ以降のすべてのラウンドについては、入力ベクトルは、前のラウンドからの出力である。反復の入力ベクトルと区別するために、われわれは、それらをラウンド入力ベクトルと呼ぶ。ブロック反復の終わりに、最後のラウンドからの出力は、反復入力ベクトルと組み合わされ、このブロック反復の出力を生成する。
4.4 SHA512を使用する部分的プリイメージの完全性
目標は、SHA512(m1||m2)=hとして、hが与えられた場合に、m1を明らかにすることなく、m2の完全性を証明することである。SHA512の内部動作の記述は、ハッシュ値の計算の任意の時点で停止し、計算を続行するために必要な情報を見つけ出すことを可能にする。言い換えると、われわれは、m1が消費されたときに停止し、必要な情報を中間状態として識別し、m2で計算を継続することができ、中間状態はm1が何であるかを明らかにしない。
われわれは、必要な情報が以下を含むことを導き出すことができる。
1.8個の要素の反復入力ベクトル、
2.上記のものと異なる場合に8個の要素のラウンド入力ベクトル、
3.現在のブロック反復で処理されるべきワードの残り、および
4.反復されるべきブロックの残り。
m1のバイト長がちょうど128の倍数であれば、項目1および4は、hを算出する計算を続行するのに十分である。そうでない場合、われわれは、現在のブロック反復を完了し、計算の残りに移るのに、項目1、2、および3を必要とする。項目3は、前に処理された16ワード、またはブロックそれ自体を表す最初の16ワードで置き換えられ得るが、それはワードの残りがそれらから導出できるからであることに留意されたい。SHA512の安全性は、各ブロック反復によってある程度継承され得るけれども、ブロック反復における各ラウンドについてはおそらくそうならない。したがって、項目2と3を組み合わせることによって、そのブロック反復の最初の16ワードを算出することが計算上可能であると仮定できるならば、われわれは、情報のリストを次のように簡素化することができる。
1.IViterationによって示される、8個の要素の反復入力ベクトル、および
2.反復されるべきブロックの残り。
単純化があるので、われわれは、今後、m1の長さはちょうど128の倍数であると仮定することができる。われわれは、また、計算の残りをpartial-SHA512(pS512)と表す。メッセージm2の第2の部分は、ブロックの残りと等価ではないことに留意されたい。最後のブロックは入力mの長さを含むが、その情報はm2では利用できない。したがって、m1を明らかにすることなくm2の完全性を検証する文脈において、われわれは、パディングおよび最後のブロックを構成するためにm1またはmの長さを知る必要がある。われわれは、ここで、アルゴリズムpartial-SHA512を正式に記述することができる。われわれは、mのビット長に対してlを使用する。
次に、われわれは、SHA384、SHA512-224、およびSHA512-256をカバーすることができる。
4.5 例示的なユースケース1-大きいサイズのプリイメージ
ビットコインでは、トランザクションは、OP_FALSE OP_RETURN出力でデータを搬送することができる。そのような出力に対するサイズ制限は、ビットコインノードによって構成され得、執筆時点では100キロバイトである。この制限は、将来的に完全に解除されると信じられている。トランザクションの興味深い部分は、消費可能出力である。消費可能出力の完全性を証明するために、トランザクション全体が、トランザクションIDを計算するために提供されなければならない。すなわち、たとえば、標準的なpay-2-public-key-hash出力(出力値を含む34バイト)の完全性を証明するために、現時点では100キロバイト、または将来的には数ギガバイトを超えるサイズになり得るトランザクション全体が提供されなければならなくなる。われわれの解決方法では、トランザクションデータの大部分は、32バイトの一定サイズの、IViterationに編集され得る。例示的なトランザクションが図4に示されている。
トランザクションID TxID1は、二重SHA256を使用して、シリアル化されたトランザクションをハッシュすることによって取得される。シリアル化されたトランザクションは、図5に示されている形式である。
われわれは、m1=version||InputCount||Inputs||OutputCount||Output1、およびm2=Output2||Locktimeを定義することができる。
第2の出力の完全性を証明するために、単に、IViteration、lm、およびm2を提供するだけでよく、IViterationは32バイトであり、lmは上限が8バイトであり、m2は、ロックタイムからの4バイトを含む38バイトである。すなわち、トランザクションがどんなに大きくても、第2の出力を証明するために必要なデータのサイズは、一定の78バイトが上限となる。SHA256が取り得るデータの最大サイズは、パディングにおけるデータの長さのエンコーディングによって上限を決められる。最大値は、2エクサバイト、または2×1018バイトである。4バイトのlmは、最大4GBまでのサイズのトランザクションをカバーすることができる。
この考え方は、最後の出力または最後のいくつかの出力に一般化され得る。その完全性の妥当性は、消費トランザクション中の署名が重要になるときにより明らかである。より正確には、公開鍵がアイデンティティにリンクされているか、特定の方法で解釈され得るときに、前のロックスクリプトが所与の公開鍵に関する署名を本当に必要としたことを確認する必要がある。記述されている完全性の証明は、前のロックスクリプトの完全性を証明する際に著しい節約を提供する。この考え方は、ターゲット部分がデータの末尾にあり、サイズが小さい任意の大規模データ、たとえば大規模映画のクレジットを含む最後のシーンにさらに一般化され得る。これは、映画全体を共有することなくある俳優がある動きを演じたことを証明するために使用されることも可能である。
4.6 例示的なユースケース2-秘密を含むプリイメージ
完全性の証明は、単に大きすぎるのではなく秘密であるのでm1を隠すためにも利用され得る。たとえば、パスポートが人の性別および年齢に関する情報を含んでおり、政府によってデジタル署名されていると仮定する。性別を明らかにすることなくその人が18歳以上であることを証明するために、IViteration、その年齢、およびパスポート書類のビット長を提示するだけでよい。検証者は、提供された情報に基づき書類のハッシュを計算し、したがって政府からのデジタル署名を検証することができる。
5. 結論
開示された技術の他の変更形態またはユースケースは、本明細書において開示を示した後に当業者にとって明らかになるであろう。本開示の範囲は、説明されている実施形態によって限定されず、付属の請求項によってのみ限定される。
たとえば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されてきた。しかしながら、ビットコインブロックチェーンはブロックチェーン150の特定の一例であり、上記の説明は、任意のブロックチェーンに一般的に適用され得ることは理解されるであろう。すなわち、本発明は、決してビットコインブロックチェーンに限定されるものではない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上記の任意の参照は、それぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への参照で置き換えられ得る。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上で説明されているビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の説明されている特性のいくつかまたはすべてを共有し得る。
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成し、公開し、伝播し、および記憶する説明されている機能の少なくともすべてを実行する。これらの機能のうちの1つまたはいくつかだけを実行し、すべてを実行することはない他のネットワークエンティティ(またはネットワーク要素)があり得ることは除外されない。すなわち、ネットワークエンティティは、ブロックを作成し公開することなく、ブロックを伝播し、および/または記憶する機能を実行し得る(これらのエンティティは、好ましいビットコインネットワーク106のノードとは考えられないことを想起されたい)。
本発明の他の実施形態では、ブロックチェーンネットワーク106は、ビットコインネットワークでなくてもよい。これらの実施形態において、ノードがブロックチェーン150のブロック151を作成し、公開し、伝播し、記憶する機能の少なくとも1つまたはいくつかを実行し得るが、すべてを実行するわけではないことは除外されない。たとえば、それらの他のブロックチェーンネットワークにおいて、「ノード」は、ブロック151を作成し、公開するように構成されているが、それらのブロック151を他のノードに記憶しおよび/または伝播することをしないネットワークエンティティを参照するために使用され得る。
さらに一般的には、上記の用語「ビットコインノード」104への任意の参照は、用語「ネットワークエンティティ」または「ネットワーク要素」で置き換えられてもよく、そのようなエンティティ/要素は、ブロックを作成し、公開し、伝播し、記憶する役割のいくつかまたはすべてを実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照しつつ上で説明されているのと同じ方法を用いてハードウェアで実装され得る。
上記の実施形態は、例としてのみ説明されていることは理解されるであろう。より一般的には、次のステートメントのいずれか1つまたは複数による方法、装置、またはプログラムが提供され得る。
ステートメント1。SHAベースのハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応するプリイメージの一部の完全性を検証するコンピュータ実装方法であって、プリイメージは、第1のメッセージと第2のメッセージとを含み、この方法は、検証者によって実行され、
a)反復入力ベクトルを受信することを含み、反復入力ベクトルは、SHAベースのハッシュ関数を部分的に実行することによって生成され、SHAベースのハッシュ関数を部分的に実行することは、
i)ブロックの第1のシーケンスを取得することであって、ブロックの第1のシーケンスは、プリイメージの2進表現をパディングして第1のパディング済みシーケンスを生成し、第1のパディング済みシーケンスをブロックの第1のシーケンスに分割すること、または第1のメッセージの2進表現をブロックの第1のシーケンスに分割することのいずれかによって取得される、取得することと、
ii)ブロックの第1のシーケンスの各々に対するSHAベースのハッシュ計算の反復を、ブロックの第1のシーケンス内のそれぞれの位置の順に、第2のメッセージを表す1つまたは複数のビットを含むブロックまで、実行することとを含み、
方法はさらに、
b)ブロックの第2のシーケンスを取得することを含み、第2の複数のブロックは、
i)第2のメッセージの2進表現をパディングして第2のパディング済みシーケンスを生成し、
ii)第2のパディング済みシーケンスをブロックの第2のシーケンスに分割することによって生成され、
方法はさらに、
c)ブロックの第2のシーケンスのそれぞれの位置の順にブロックの第2のシーケンスの各々に対するSHAベースのハッシュ計算の反復を実行することによって最終反復出力ベクトルを生成することであって、ブロックの第2のシーケンスの第1のブロックに対して実行されるSHAベースのハッシュ計算の反復は、取得された反復入力ベクトルに基づく、生成することと、
d)最終反復出力ベクトルに基づき候補ハッシュダイジェストを生成することであって、候補ハッシュダイジェストはハッシュダイジェストと比較するためのものである、生成することとを含む、コンピュータ実装方法。
SHAベースのハッシュ関数は、Secure Hash Standardにおいて説明されているハッシュ関数である。
検証者は、プリイメージについても第1のメッセージについても知識を有しないことがある。
ステートメント2。
ハッシュダイジェストを取得することと、
第2のメッセージが、候補ハッシュダイジェストと取得されたハッシュダイジェストとの比較に基づき取得されたハッシュダイジェストのプリイメージの一部であることを検証することとを含む、ステートメント1に記載の方法。
ステートメント3。反復入力ベクトルの前記受信は、証明者から反復入力ベクトルを受信することを含む、ステートメント1またはステートメント2に記載の方法。
ハッシュダイジェストおよび/または反復入力ベクトルは、証明者から取得され得る。
ステートメント4。第2のメッセージを取得することを含む、任意の先行するステートメントに記載の方法。
第2のメッセージは、証明者によって証明者に送信され得る。
ステートメント5。ブロックの第2のシーケンスの前記取得は、ブロックの第2のシーケンスを生成することを含む、ステートメント4に記載の方法。
ステートメント6。プリイメージの長さを取得することを含み、第2のパディング済みシーケンスの前記生成は、第2のメッセージ、およびプリイメージの長さに基づく、ステートメント4またはステートメント5に記載の方法。
ステートメント7。第1のメッセージの長さを取得することを含み、第2のパディング済みシーケンスの生成は、第2のメッセージ、および第1のメッセージの長さに基づく、ステートメント4またはステートメント5に記載の方法。
ステートメント8。ブロックの第2のシーケンスの前記取得は、ブロックの第2のシーケンスを受信することを含む、任意の先行するステートメントに記載の方法。
ステートメント9。SHAベースのハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応するプリイメージの一部の完全性を証明するコンピュータ実装方法であって、プリイメージは、第1のメッセージと第2のメッセージとを含み、この方法は、証明者によって実行され、
a)反復入力ベクトルを生成することを含み、反復入力ベクトルは、SHAベースのハッシュ関数を部分的に実行することによって生成され、SHAベースのハッシュ関数を部分的に実行することは、
i)ブロックの第1のシーケンスを取得することであって、ブロックの第1のシーケンスは、プリイメージの2進表現をパディングして第1のパディング済みシーケンスを生成し、第1のパディング済みシーケンスをブロックの第1のシーケンスに分割すること、または第1のメッセージの2進表現をブロックの第1のシーケンスに分割することのいずれかによって取得される、取得することと、
ii)ブロックの第1のシーケンスの各々に対するSHAベースのハッシュ計算の反復を、ブロックの第1のシーケンス内のそれぞれの位置の順に、第2のメッセージを表す1つまたは複数のビットを含むブロックまで、実行することとを含み、
方法はさらに、
b)反復入力ベクトルを検証者が利用できるようにすることを含む、コンピュータ実装方法。
ステートメント10。ハッシュダイジェストを検証者が利用できるようにすることを含む、ステートメント9に記載の方法。
ステートメント11。第2のメッセージを検証者が利用できるようにすることを含む、ステートメント9またはステートメント10に記載の方法。
ステートメント12。プリイメージまたは第1のメッセージのビット長を検証者が利用できるようにすることを含む、ステートメント9から11のいずれか一項に記載の方法。
ステートメント13。第1のメッセージは、検証者には利用可能でなく、それにより第2のメッセージの完全性は、第1のメッセージを明らかにすることなく検証される、任意の先行するステートメントに記載の方法。
ステートメント14。プリイメージは、ブロックチェーントランザクションの少なくとも一部を含む、任意の先行するステートメントに記載の方法。
ステートメント15。第2のメッセージは、ブロックチェーントランザクションの1つまたは複数の出力を含む、ステートメント14に記載の方法。
ステートメント16。プリイメージは、身分証明書の少なくとも一部を含む、ステートメント1から13のいずれか一項に記載の方法。
ステートメント17。身分証明書は、運転免許証、パスポート、出生証明書、および移住許可証のうちの1つを含む、ステートメント16に記載の方法。
ステートメント18。第2のメッセージは、身分証明書の1つまたは複数のデータフィールドを含む、ステートメント16または17に記載の方法。
たとえば、第2のメッセージは、名前、住所、年齢、生年月日、国籍などのうちの1つまたは複数を含み得る。
ステートメント19。SHAベースのハッシュ関数は、SHA-1、SHA-224、SHA256、SHA384、SHA512-224、SHA512-256、またはSHA512-512のうちの1つである、任意の先行するステートメントに記載の方法。
ステートメント20。SHAベースのハッシュ関数は、SHA1、SHA224、またはSHA256のうちの1つであり、
第1のパディング済みシーケンスは、64バイトの倍数を含み、
第2のパディング済みシーケンスは、64バイトの倍数を含み、
各ブロックは、サイズが64バイトである、ステートメント19に記載の方法。
ステートメント21。SHAベースのハッシュ関数は、SHA224であり、候補ハッシュダイジェストは、最終反復出力ベクトルの一番左の224ビットを含む、ステートメント19またはステートメント20に記載の方法。
SHAベースのハッシュ関数がSHA224またはSHA256のうちの1つである実施形態では、第1のパディング済みシーケンスを生成することは、プリイメージの2進表現に1を表す1バイトを付加することを含む。プリイメージの長さに応じて、第1のパディング済みシーケンスの前記生成は、pが最小の正の整数であり、プリイメージがnバイト(すなわち、nはバイト長である)で表される場合に、n+1+p=56 mod 64となるまでゼロを表すpバイトを付加することをさらに含み得る。さらに、前記生成は、ビッグエンディアンで8バイト単位のプリイメージのビット長の表現を付加することをさらに含み得る。反復入力ベクトルは、8つの要素のベクトルを含むものとしてよく、各要素はサイズが4バイトである。第2のパディング済みシーケンスを生成することは、第2のメッセージの2進表現に1を表す1バイトを付加することを含み得る。第1および第2のメッセージの長さに応じて、第2のパディング済みシーケンスの前記生成は、pが最小の正の整数で、lがプリイメージのビット長である場合に、l+1+p=448 mod 512となるまでゼロを表すpバイトを付加することをさらに含み得る。同等のことであるが、ゼロを表すpバイトは、nがプリイメージのバイト長である場合に、n+1+p=56 mod 64となるまで付加され得る。さらに、第2のパディング済みシーケンスの前記生成は、ビッグエンディアンで8バイト単位のプリイメージのビット長の表現を付加することをさらに含み得る。最終反復出力ベクトルは、8つの要素のベクトルを含むものとしてよく、各要素はサイズが4バイトである。
SHAベースのハッシュ関数がSHA1である実施形態では、初期反復ベクトルは5つの要素のベクトルであり、各要素はサイズが4バイトである。同様に、最終反復出力ベクトルは、5つの要素を含み、各要素はサイズが4バイトである。
ステートメント22。SHAベースのハッシュ関数は、SHA384、SHA512、SHA512-224、またはSHA512-256のうちの1つであり、
第1のパディング済みシーケンスは、128バイトの倍数を含み、
第2のパディング済みシーケンスは、128バイトの倍数を含み、
各ブロックは、サイズが128バイトである、ステートメント19に記載の方法。
ステートメント23。SHAベースのハッシュ関数は、SHA384であり、候補ハッシュダイジェストは、最終反復出力ベクトルの一番左の384ビットを含むか、または
SHAベースのハッシュ関数は、SHA521-224であり、候補ハッシュダイジェストは、最終反復出力ベクトルの一番左の224ビットを含むか、または
SHAベースのハッシュ関数は、SHA521-256であり、候補ハッシュダイジェストは、最終反復出力ベクトルの一番左の256ビットを含む、ステートメント19またはステートメント22に記載の方法。
SHAベースのハッシュ関数がSHA384、SHA512、SHA512-224、またはSHA512-256のうちの1つである実施形態では、第1のパディング済みシーケンスを生成することは、プリイメージの2進表現に1を表す1バイトを付加することを含む。プリイメージの長さに応じて、第1のパディング済みシーケンスの前記生成は、pが最小の正の整数であり、プリイメージがnバイト(すなわち、nはバイト長である)で表される場合に、n+1+p=112 mod 128となるまでゼロを表すpバイトを付加することをさらに含み得る。さらに、前記生成は、ビッグエンディアンで16バイト単位のプリイメージのビット長の表現を付加することをさらに含み得る。反復入力ベクトルは、8つの要素のベクトルを含むものとしてよく、各要素はサイズが8バイトである。第2のパディング済みシーケンスを生成することは、第2のメッセージの2進表現に1を表す1バイトを付加することを含み得る。第1および第2のメッセージの長さに応じて、第2のパディング済みシーケンスの前記生成は、pが最小の正の整数で、lがプリイメージのビット長である場合に、l+1+p=896 mod 1024となるまでゼロを表すpバイトを付加することをさらに含み得る。さらに、第2のパディング済みシーケンスの前記生成は、ビッグエンディアンで16バイト単位のプリイメージのビット長の表現を付加することをさらに含み得る。最終反復出力ベクトルは、8つの要素のベクトルを含むものとしてよく、各要素はサイズが8バイトである。
ステートメント24。コンピュータ機器であって、
1つまたは複数のメモリユニットを含むメモリと、
1つまたは複数の処理ユニットを含む処理装置とを備え、メモリは、処理装置上で実行するように配置構成されているコードを記憶し、コードは処理装置上にあるときに任意のステートメント1から23のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
ステートメント25。コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されたときに、ステートメント1から23のいずれか一項に記載の方法を実行するように構成されている、コンピュータプログラム。
本明細書において開示されている別の態様によれば、検証者および証明者のアクションを含む方法が提供され得る。
本明細書において開示されている別の態様によれば、検証者および証明者のコンピュータ機器を備えるシステムが提供され得る。
100 システム
101 パケット交換ネットワーク
102 コンピュータ機器、機器
102a コンピュータ機器、アリスのデバイス
102b コンピュータ機器、ボブのデバイス
103 ユーザ、当事者
103a ユーザ、第1の当事者、アリス
103b 新規ユーザまたはエンティティ、第2の当事者、ボブ
104 ブロックチェーンノード、ノード
105 クライアントアプリケーション
106 ピアツーピア(P2P)ネットワーク、ブロックチェーンネットワーク
107 サイドチャネル
150 ブロックチェーン
151 ブロック
151n ブロック
152 トランザクション
152i トランザクション
152j トランザクション
153 ジェネシスブロック(Gb)
154 順序付けられたセット(または「プール」)、トランザクション
155 ブロックポインタ
201 ヘッダ
202 入力、入力フィールド
203 出力、出力フィールド
300 システム
301 証明者
302 検証者

Claims (25)

  1. SHAベースのハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応する前記プリイメージの一部の完全性を検証するコンピュータ実装方法であって、前記プリイメージは、第1のメッセージと第2のメッセージとを含み、前記方法は、検証者によって実行され、
    a)反復入力ベクトルを受信するステップを含み、前記反復入力ベクトルは、前記SHAベースのハッシュ関数を部分的に実行することによって生成され、前記SHAベースのハッシュ関数を部分的に実行することは、
    i)ブロックの第1のシーケンスを取得するステップであって、ブロックの前記第1のシーケンスは、前記プリイメージの2進表現をパディングして第1のパディング済みシーケンスを生成し、前記第1のパディング済みシーケンスをブロックの第1のシーケンスに分割するステップ、または前記第1のメッセージの2進表現をブロックの前記第1のシーケンスに分割するステップのいずれかによって取得される、ステップと、
    ii)ブロックの前記第1のシーケンスの各々に対するSHAベースのハッシュ計算の反復を、ブロックの前記第1のシーケンス内のそれぞれの位置の順に、前記第2のメッセージを表す1つまたは複数のビットを含むブロックまで、実行するステップとを含み、
    前記方法はさらに、
    b)ブロックの第2のシーケンスを取得するステップを含み、前記第2の複数のブロックは、
    i)前記第2のメッセージの2進表現をパディングして第2のパディング済みシーケンスを生成し、
    ii)前記第2のパディング済みシーケンスをブロックの前記第2のシーケンスに分割することによって生成され、
    前記方法はさらに、
    c)ブロックの前記第2のシーケンスのそれぞれの位置の順にブロックの前記第2のシーケンスの各々に対する前記SHAベースのハッシュ計算の反復を実行することによって最終反復出力ベクトルを生成するステップであって、ブロックの前記第2のシーケンスの第1のブロックに対して実行される前記SHAベースのハッシュ計算の前記反復は、前記取得された反復入力ベクトルに基づく、ステップと、
    d)前記最終反復出力ベクトルに基づき候補ハッシュダイジェストを生成するステップであって、前記候補ハッシュダイジェストは前記ハッシュダイジェストと比較するためのものである、ステップとを含むコンピュータ実装方法。
  2. 前記ハッシュダイジェストを取得するステップと、
    前記第2のメッセージが、前記候補ハッシュダイジェストと前記取得されたハッシュダイジェストとの比較に基づき前記取得されたハッシュダイジェストの前記プリイメージの一部であることを検証するステップとを含む請求項1に記載の方法。
  3. 前記反復入力ベクトルの前記受信は、証明者から前記反復入力ベクトルを受信するステップを含む請求項1または請求項2に記載の方法。
  4. 前記第2のメッセージを取得するステップを含む請求項1から3のいずれか一項に記載の方法。
  5. ブロックの前記第2のシーケンスの前記取得は、ブロックの前記第2のシーケンスを生成するステップを含む請求項4に記載の方法。
  6. 前記プリイメージの長さを取得するステップを含み、前記第2のパディング済みシーケンスの前記生成は、前記第2のメッセージ、および前記プリイメージの前記長さに基づく請求項4または請求項5に記載の方法。
  7. 前記第1のメッセージの長さを取得するステップを含み、前記第2のパディング済みシーケンスの生成は、前記第2のメッセージ、および前記第1のメッセージの前記長さに基づく請求項4または請求項5に記載の方法。
  8. ブロックの前記第2のシーケンスの前記取得は、ブロックの前記第2のシーケンスを受信するステップを含む請求項1から7のいずれか一項に記載の方法。
  9. SHAベースのハッシュ関数でプリイメージをハッシュすることによって生成されたハッシュダイジェストに対応する前記プリイメージの一部の完全性を証明するコンピュータ実装方法であって、前記プリイメージは、第1のメッセージと第2のメッセージとを含み、前記方法は、証明者によって実行され、
    a)反復入力ベクトルを生成するステップを含み、前記反復入力ベクトルは、前記SHAベースのハッシュ関数を部分的に実行することによって生成され、前記SHAベースのハッシュ関数を部分的に実行することは、
    i)ブロックの第1のシーケンスを取得するステップであって、ブロックの前記第1のシーケンスは、前記プリイメージの2進表現をパディングして第1のパディング済みシーケンスを生成し、前記第1のパディング済みシーケンスをブロックの第1のシーケンスに分割するステップ、または前記第1のメッセージの2進表現をブロックの前記第1のシーケンスに分割するステップのいずれかによって取得される、ステップと、
    ii)ブロックの前記第1のシーケンスの各々に対するSHAベースのハッシュ計算の反復を、ブロックの前記第1のシーケンス内のそれぞれの位置の順に、前記第2のメッセージを表す1つまたは複数のビットを含むブロックまで、実行するステップとを含み、
    前記方法はさらに、
    b)前記反復入力ベクトルを検証者が利用できるようにするステップを含むコンピュータ実装方法。
  10. 前記ハッシュダイジェストを前記検証者が利用できるようにするステップを含む請求項9に記載の方法。
  11. 前記第2のメッセージを前記検証者が利用できるようにするステップを含む請求項9または請求項10に記載の方法。
  12. 前記プリイメージまたは前記第1のメッセージのビット長を前記検証者が利用できるようにするステップを含む請求項9から11のいずれか一項に記載の方法。
  13. 前記第1のメッセージは、前記検証者には利用可能でなく、それにより前記第2のメッセージの前記完全性は、前記第1のメッセージを明らかにすることなく検証される請求項1から12のいずれか一項に記載の方法。
  14. 前記プリイメージは、ブロックチェーントランザクションの少なくとも一部を含む請求項1から13のいずれか一項に記載の方法。
  15. 前記第2のメッセージは、前記ブロックチェーントランザクションの1つまたは複数の出力を含む請求項14に記載の方法。
  16. 前記プリイメージは、身分証明書の少なくとも一部を含む請求項1から13のいずれか一項に記載の方法。
  17. 前記身分証明書は、運転免許証、パスポート、出生証明書、および移住許可証のうちの1つを含む請求項16に記載の方法。
  18. 前記第2のメッセージは、前記身分証明書の1つまたは複数のデータフィールドを含む請求項16または17に記載の方法。
  19. 前記SHAベースのハッシュ関数は、SHA-1、SHA-224、SHA256、SHA384、SHA512-224、SHA512-256、またはSHA512-512のうちの1つである請求項1から18のいずれか一項に記載の方法。
  20. 前記SHAベースのハッシュ関数は、SHA1、SHA224、またはSHA256のうちの1つであり、
    前記第1のパディング済みシーケンスは、64バイトの倍数を含み、
    前記第2のパディング済みシーケンスは、64バイトの倍数を含み、
    各ブロックは、サイズが64バイトである請求項19に記載の方法。
  21. 前記SHAベースのハッシュ関数は、SHA224であり、前記候補ハッシュダイジェストは、前記最終反復出力ベクトルの一番左の224ビットを含む請求項19または請求項20に記載の方法。
  22. 前記SHAベースのハッシュ関数は、SHA384、SHA512、SHA512-224、またはSHA512-256のうちの1つであり、
    前記第1のパディング済みシーケンスは、128バイトの倍数を含み、
    前記第2のパディング済みシーケンスは、128バイトの倍数を含み、
    各ブロックは、サイズが128バイトである請求項19に記載の方法。
  23. 前記SHAベースのハッシュ関数は、SHA384であり、前記候補ハッシュダイジェストは、前記最終反復出力ベクトルの一番左の384ビットを含むか、または
    前記SHAベースのハッシュ関数は、SHA521-224であり、前記候補ハッシュダイジェストは、前記最終反復出力ベクトルの一番左の224ビットを含むか、または
    前記SHAベースのハッシュ関数は、SHA521-256であり、前記候補ハッシュダイジェストは、前記最終反復出力ベクトルの一番左の256ビットを含む請求項19または請求項22に記載の方法。
  24. 1つまたは複数のメモリユニットを含むメモリと、
    1つまたは複数の処理ユニットを含む処理装置とを備え、前記メモリは、前記処理装置上で実行するように配置構成されているコードを記憶し、前記コードは前記処理装置上にあるときに請求項1から23のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
  25. コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されたときに、請求項1から23のいずれか一項に記載の方法を実行するように構成されている、コンピュータプログラム。
JP2023572620A 2021-05-24 2022-04-25 部分的なshaベースのハッシュ関数 Pending JP2024519989A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2107350.7 2021-05-24
GB2107350.7A GB2607283A (en) 2021-05-24 2021-05-24 Partial SHA-based hash function
PCT/EP2022/060827 WO2022248130A1 (en) 2021-05-24 2022-04-25 Partial sha-based hash function

Publications (1)

Publication Number Publication Date
JP2024519989A true JP2024519989A (ja) 2024-05-21

Family

ID=76637732

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023572620A Pending JP2024519989A (ja) 2021-05-24 2022-04-25 部分的なshaベースのハッシュ関数

Country Status (7)

Country Link
EP (1) EP4348927A1 (ja)
JP (1) JP2024519989A (ja)
KR (1) KR20240012503A (ja)
CN (1) CN117561697A (ja)
GB (1) GB2607283A (ja)
TW (1) TW202247626A (ja)
WO (1) WO2022248130A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230015000A1 (en) * 2022-09-02 2023-01-19 Intel Corporation Non-cryptographic hashing using carry-less multiplication

Also Published As

Publication number Publication date
KR20240012503A (ko) 2024-01-29
WO2022248130A1 (en) 2022-12-01
EP4348927A1 (en) 2024-04-10
CN117561697A (zh) 2024-02-13
GB202107350D0 (en) 2021-07-07
GB2607283A (en) 2022-12-07
TW202247626A (zh) 2022-12-01

Similar Documents

Publication Publication Date Title
US20220278859A1 (en) Digital contracts using blockchain transactions
JP2022533753A (ja) 知識証明
JP2022533777A (ja) プルーフ・オブ・ワーク
JP2023547716A (ja) マークル証明エンティティ
EP4022839A1 (en) Cryptographically linked identities
JP2022533845A (ja) 知識証明
US20230308292A1 (en) Digital signatures
JP2024519989A (ja) 部分的なshaベースのハッシュ関数
WO2024002758A1 (en) Proof of ownership
US20230224150A1 (en) Bio-locked seed
US20230230078A1 (en) Custom transaction scripts
JP2024529317A (ja) コンピュータにより実施される方法及びシステム
WO2024041862A1 (en) Blockchain transaction
US20240214179A1 (en) Blockchain-implemented hash function
GB2621857A (en) Blockchain transaction
WO2024052065A1 (en) Determining shared secrets using a blockchain
WO2024002756A1 (en) Proof of ownership
WO2024061562A1 (en) Zero-kowledge proof
WO2024061547A1 (en) Zero-kowledge proof
JP2024525888A (ja) ブロックチェーントランザクションに対する条件の強制
JP2024525887A (ja) ブロックチェーントランザクションに対する条件の強制
WO2024028077A1 (en) Wrapped encryption
WO2023227529A1 (en) Hash masks
WO2023057151A1 (en) Implementing a layer 2 token protocol using a layer 1 blockchain
WO2023156105A1 (en) Blockchain transaction

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240123