JP2023539432A - しきい値署名 - Google Patents

しきい値署名 Download PDF

Info

Publication number
JP2023539432A
JP2023539432A JP2023507541A JP2023507541A JP2023539432A JP 2023539432 A JP2023539432 A JP 2023539432A JP 2023507541 A JP2023507541 A JP 2023507541A JP 2023507541 A JP2023507541 A JP 2023507541A JP 2023539432 A JP2023539432 A JP 2023539432A
Authority
JP
Japan
Prior art keywords
signature
message
participant
public key
transaction
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
JP2023507541A
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 JP2023539432A publication Critical patent/JP2023539432A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/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
    • H04L9/3255Cryptographic 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 using group based signatures, e.g. ring or threshold 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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • 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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/085Secret sharing or secret splitting, e.g. threshold schemes
    • 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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/088Usage controlling of secret information, e.g. techniques for restricting cryptographic keys to pre-authorized uses, different access levels, validity of crypto-period, different key- or password length, or different strong and weak cryptographic algorithms
    • 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/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Abstract

デジタル署名のシェアを生成するコンピュータ実装方法であって、各参加者は、第1の共有秘密鍵のそれぞれのシェアを有し、方法は、第1の参加者によって実行され、第1のメッセージを取得することと、少なくとも第1の外部データ項目のハッシュに基づいて第1のデータ項目を生成することと、第1のデータ項目と、各他の参加者によって生成されたそれぞれのデータ項目とに基づいて、エフェメラル秘密鍵の第1のエフェメラル秘密鍵シェアを生成することと、エフェメラル秘密鍵に対応するエフェメラル公開鍵を生成することと、第1のメッセージと、第1のエフェメラル秘密鍵シェアと、第1の共有秘密鍵の第1のシェアと、エフェメラル公開鍵とに基づいて、第1の署名シェアを生成することと、少なくともしきい値数の署名シェアに基づいて第1の署名を生成するために、第1の署名シェアをコーディネータが利用できるようにすることとを含む、方法。

Description

本開示は、デジタル署名のシェア(share)を生成する方法に関する。特に、本方法は、外部データがデジタル署名のシェア内に埋め込まれることを可能にする。
一般に、共有シークレットは、参加者のグループの間で分散されるデータ項目を共有するために使用され得る。各参加者は、シークレットの異なるシェアを有する。通常、シークレットは、特定の数(「しきい値」と呼ばれる)の参加者が、例えば、シークレットを計算するために一緒に組み合わされるように、それぞれのシェアを利用できるようにしたときにのみ、再構築されることができる。
公開鍵暗号法は、鍵のペア、すなわち、秘密鍵の所有者のみに知られている秘密鍵と、対応する秘密鍵に基づいて生成され、秘密鍵のセキュリティを損なうことなく配布され得る公開鍵とを使用する暗号システムの一種である。
公開鍵暗号法は、送信者が受信者の公開鍵(すなわち、受信者のみに知られている秘密鍵に対応する公開鍵)を使用してメッセージを暗号化することを可能にする。そのため、暗号化されたメッセージは、受信者の秘密鍵を使用してのみ復号することができる。
同様に、送信者は、例えば、メッセージが送信者によって送信されていることを証明するために、および/または、送信者がメッセージに同意することを示すために、自身の秘密鍵を使用してメッセージに署名することができる。署名者(すなわち、署名を生成する当事者)は、自身の秘密鍵を使用して、メッセージに基づいてデジタル署名を作成する。メッセージに基づいてデジタル署名を作成することは、メッセージおよび秘密鍵の両方に基づいて署名を生成する関数に、メッセージおよび秘密鍵を供給することを意味する。署名は、メッセージに追加される(例えば、タグ付けされる)か、または他の方法でメッセージに関連付けられる。署名者の対応する公開鍵を有する者であれば、同じメッセージおよびメッセージ上のデジタル署名を使用して、署名が有効に作成されたかどうか、すなわち、署名が実際に署名者の秘密鍵を使用して作成されたかどうかを検証することができる。デジタル署名は、メッセージの真正性を保証するだけでなく、メッセージの完全性および否認防止も保証する。すなわち、デジタル署名は、メッセージが署名で署名されてから変更されていないこと、および署名の作成者が署名を作成したことを将来否定することができないことを証明するために使用することができる。
デジタル署名方式は、典型的に、3つの手順、すなわちアルゴリズムを含む。鍵生成アルゴリズムは、ランダムな秘密鍵および対応する公開鍵を生成するために使用される。署名アルゴリズムは、メッセージと秘密鍵とに基づいて署名を生成するために使用される。検証アルゴリズムは、公開鍵およびメッセージが与えられた場合に、署名が、対応する秘密鍵を使用して、および、署名アルゴリズムにしたがって生成されたかどうかを検証するために使用される。
共有シークレットの一般的な使用は、秘密鍵-公開鍵ペアの共有秘密鍵としての使用である。すなわち、秘密鍵は、単一の参加者では秘密鍵を入手できないように、参加者のグループの間で分散され得る。したがって、単一の参加者がメッセージの有効な署名を生成することはできない。代わりに、署名が生成されるためには、参加者の一部または全部が一緒に秘密鍵を生成しなければならない。
署名を生成するために参加者が自身の秘密鍵シェアを共有する代わりに、参加者は、しきい値署名方式を使用してもよい。しきい値署名方式では、グループ内のしきい値数の参加者は、秘密鍵を参加者が利用できるようにすることなく、共有秘密鍵の個々のシェアを使用して、メッセージに基づいてデジタル署名を作成することができる。ここで、デジタル署名は、署名されるべきメッセージに基づいて生成される署名である。そのような方式では、署名は、しきい値数の参加者が、メッセージに対する署名を生成することに同意する場合にのみ作成することができる。より少ない数の参加者を使用して署名を生成しようとしても、有効な署名は生成されない。したがって、グループによる有効な署名(すなわち、メッセージおよび共有秘密鍵を使用して生成された署名)は、証明可能に、しきい値数の人が署名を生成することに同意していることを意味する。これはまた、秘密鍵を用いて署名を偽造するためには、任意の敵対者がその秘密鍵のしきい値数のシェアを取得する必要があることを意味する。
上述したように、共有シークレットは、共有秘密鍵であり得、参加者のグループの各々は、共有秘密鍵のそれぞれのシェアを有する。しきい値数の参加者は、共有秘密鍵を実際に生成することなく、共有秘密鍵を使用して有効な署名を一緒に生成し得る。公開鍵は、署名を妥当性確認するために、すなわち、少なくともしきい値数の参加者が署名を生成することに同意したことを検証するために、第三者が利用できるようにされ得る。これらの場合、参加者は、自身が署名の生成に寄与したことを証明することができることが望ましい。
本明細書に開示される一態様によれば、デジタル署名のシェアを生成するコンピュータ実装方法であって、参加者のグループの各参加者は、第1の共有秘密鍵のそれぞれのシェアを有し、方法は、グループの第1の参加者によって実行され、第1のメッセージを取得することと、少なくとも第1の外部データ項目のハッシュに基づいて第1のデータ項目を生成することと、エフェメラル秘密鍵(ephemeral private key)の第1のエフェメラル秘密鍵シェアを生成することであって、第1のエフェメラル秘密鍵シェアは、第1のデータ項目と、各他の参加者によって生成されたそれぞれのデータ項目とに基づいて生成される、ことと、エフェメラル秘密鍵に対応するエフェメラル公開鍵(ephemeral public key)を生成することと、第1のメッセージと、第1のエフェメラル秘密鍵シェアと、第1の共有秘密鍵の第1のシェアと、エフェメラル公開鍵とに基づいて、第1の署名シェア(signature share)を生成することと、少なくともしきい値数のそれぞれの署名シェアに基づいて第1の署名を生成するために、第1の署名シェアをコーディネータが利用できるようにすることとを含む方法が提供される。
本明細書で開示される別の態様によれば、デジタル署名が第1の参加者によって部分的に生成されたことを検証するコンピュータ実装方法であって、方法は、検証当事者によって実行され、第1の署名構成要素(signature component)および第2の署名構成要素を含む第1の署名を取得することと、第1の参加者からの候補の第1の外部データ項目と、それぞれのデータ項目に対応する1つまたは複数のそれぞれの公開鍵とを、他の参加者ごとに1つずつ取得することと、候補の第1の外部データ項目のハッシュに基づいて候補の公開鍵を生成することと、候補の公開鍵と、取得された1つまたは複数の公開鍵とに基づいて、候補のエフェメラル公開鍵を生成することと、候補のエフェメラル公開鍵に基づいて候補の第1の署名構成要素を生成することと、候補の第1の署名構成要素が第1の署名構成要素に対応するかどうかに基づいて、第1の署名が第1の参加者によって部分的に生成されたことを検証することとを含む方法が提供される。
第1の参加者は、メッセージに署名するためのデジタル署名のシェアを生成する。ブロックチェーンの文脈では、メッセージは、トランザクションであり得、例えば、署名は、前のトランザクションの出力をロック解除するためにトランザクションの入力に含まれ得る。一般に、メッセージは、任意の形態のメッセージ、例えば文書であり得、必ずしもブロックチェーンに関連する必要はない。署名シェアは、エフェメラル秘密鍵シェア、例えば、1回使用の秘密鍵のシェアに少なくとも部分的に基づいて生成される。エフェメラル秘密鍵シェアは、外部情報、すなわち「外部データ項目」に少なくとも部分的に基づいて生成される。外部データ項目は、第1の参加者の識別子、例えば、名前、住所、電話番号、国民保険番号、パスポート番号、公開鍵などを含み得、および/またはそれに基づいて生成され得る。いくつかの例では、外部データ項目は、第1の参加者によって生成されたデジタル署名である。第1の参加者は、十分な他の署名シェアとともに完全な署名を生成するために、署名シェアをコーディネータが利用できるようにする。コーディネータは、いくつかの例では、第1の参加者であり得る。
一旦生成されると、署名は、共有秘密鍵に対応する公開鍵を使用して検証することができる。しかしながら、それでは、第1の参加者が署名のシェアを生成したことを第1の参加者が検証当事者に証明することはできない。むしろ、第1の参加者のみが、署名シェアを生成するために使用される外部データ項目を知っているので、第1の参加者は、外部データ項目を明らかにし、検証当事者が署名の少なくとも一部(すなわち、「第1の署名構成要素」)を再構築することを可能にすることができる。すなわち、検証当事者は、外部データ項目に基づいて候補の第1の署名構成要素を生成する。再構築された第1の署名構成要素(すなわち、候補の第1の署名構成要素)が第1の署名構成要素と一致すると、検証当事者は、第1の参加者が実際に署名に寄与したことを確信することができる。
本発明は、外部情報が署名に組み込まれること、すなわち、署名内に埋め込まれることを可能にする。外部情報は、第1の参加者によって提供されない限り、検証当事者には知られない。具体的には、外部情報は、署名を導出するために使用される。例えば、第1の参加者は、第1の参加者のアイデンティティにリンクされた公開鍵を、異なる秘密鍵(すなわち、埋め込まれた公開鍵に対応しない共有秘密鍵)を使用して作成された署名に埋め込み得る。これにより、第1の参加者は、自身が署名のシェアを生成したことを証明することができる。
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、単なる例として添付の図面を参照する。
ブロックチェーンを実装するためのシステムの概略ブロック図である。 ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す。 クライアントアプリケーションの概略ブロック図である。 図3Aのクライアントアプリケーションによって提示され得る例示的なユーザインターフェースの概略モックアップである。 本発明の実施形態を実装するための例示的なシステムの概略ブロック図である。 本発明のいくつかの実施形態による、デジタル署名シェアを生成するための例示的な方法を示すフローチャートである。 本発明のいくつかの実施形態による、当事者がデジタル署名シェアを生成したことを検証するための例示的な方法を示すフローチャートである。 本発明のいくつかの実施形態にしたがって生成された例示的なマークルツリーを示す。
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットなどの広域インターネットワークであるパケット交換ネットワーク101で構成され得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように構成され得る複数のブロックチェーンノード104を含む。図示されていないが、ブロックチェーンノード104は、ほぼ完全なグラフとして構成され得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
各ブロックチェーンノード104は、ピアのコンピュータ機器を含み、ノード104の異なるものは、異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、例えば、1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途向け集積回路(ASIC)などの他の機器を含む処理装置を備える。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を採用する1つまたは複数のメモリユニットを備え得る。
ブロックチェーン150は、データブロック151のチェーンを含み、ブロックチェーン150のそれぞれのコピーは、分散型またはブロックチェーンネットワーク106内の複数のブロックチェーンノード104の各々で維持される。上述したように、ブロックチェーン150のコピーを維持することは、ブロックチェーン150を完全に記憶することを必ずしも意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(後述する)を記憶している限り、データがプルーニングされ得る。チェーン内の各ブロック151は、1つまたは複数のトランザクション152を含み、この文脈におけるトランザクションは、データ構造の一種を指す。データ構造の性質は、トランザクションモデルまたは方式の一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、特性としてデジタル資産の量を表す額を指定し、その例は、出力が暗号的にロックされている(ロック解除され、それによって償還または使用されるためにはそのユーザの署名または他のソリューションを必要とする)ユーザ103である。各入力は、先行するトランザクション152の出力を指し示し、それによってトランザクションをリンクする。
各ブロック151はまた、ブロック151への順番を定義するために、チェーン内の前に作成されたブロック151を指し示すブロックポインタ155を含む。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスへの順序を定義するために、前のトランザクションへ戻るポインタを含む(注意:トランザクション152のシーケンスは分岐することが可能である)。ブロック151のチェーンは、チェーン内の最初のブロックであった発生ブロック(Gb:genesis block)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は、現在のトランザクションが有効となるためには存在および妥当性確認される必要があるが、先行するトランザクション152iは、現在のトランザクション152jが作成されるときまたはネットワーク106に送信されるときに必ずしも存在する必要はない。したがって、本明細書における「先行する(preceding)」は、ポインタによってリンクされた論理シーケンスにおける先行するものを指し、必ずしも時間シーケンスにおける作成または送信の時間を指すものではなく、したがって、トランザクション152i、152jが順不同に作成または送信されることを必ずしも除外するものではない(オーファントランザクションに関する以下の説明を参照)。先行するトランザクション152iは、同様に、先のトランザクション(antecedent transaction)または先行したトランザクション(predecessor transaction)とも呼ばれる。
現在のトランザクション152jの入力はまた、入力認可、例えば、先行するトランザクション152iの出力がロックされている先のユーザ103aの署名を含む。次に、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義された額を、現在のトランザクション152jの出力において定義されたように、新しいユーザまたはエンティティ103bに転送することができる。場合によっては、トランザクション152は、複数のユーザまたはエンティティ(そのうちの1つは残り(change)を与えるために元のユーザまたはエンティティ103aであり得る)間で入力額を分割するために複数の出力を有し得る。場合によっては、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額をまとめ、現在のトランザクションの1つまたは複数の出力に再分配するために複数の入力を有することができる。
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個々のユーザまたは組織などの当事者103が(手動でまたは当事者によって採用される自動プロセスによって)新しいトランザクション152jを制定することを望むとき、制定を行う当事者は、新しいトランザクションをそのコンピュータ端末102から受信者に送信する。制定を行う当事者または受信者は、最終的に、このトランザクションをネットワーク106のブロックチェーンノード104の1つまたは複数(これは、現在では、典型的にはサーバまたはデータセンタであるが、原則として他のユーザ端末であってもよい)に送信する。新しいトランザクション152jを制定する当事者103がトランザクションをブロックチェーンノード104の1つまたは複数に直接送信し、いくつかの例では、受信者に送信しないことも除外されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々で適用されるブロックチェーンノードプロトコルにしたがって、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、典型的には、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付きシーケンス内で前のトランザクション152iに依存する予想される署名と一致することをチェックするようにブロックチェーンノード104に求める。そのような出力ベースのトランザクションプロトコルでは、これは、新しいトランザクション152jの入力に含まれる当事者103の暗号署名または他の認可が、新しいトランザクションが割り当てる先行するトランザクション152iの出力において定義される条件と一致することをチェックすることを含み得、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名または他の認可が、新しいトランザクションの入力がリンクされている前のトランザクション152iの出力をロック解除することを少なくともチェックすることを含む。条件は、先行するトランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義され得る。代替的に、単にブロックチェーンノードプロトコルのみによって固定されてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが有効である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106内の1つまたは複数の他のブロックチェーンノード104にフォワードする。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルにしたがって同じテストを適用し、そして、新しいトランザクション152jを1つまたは複数のさらなるノード104にフォワードし、以下同様である。このようにして、新しいトランザクションはブロックチェーンノード104のネットワーク全体に伝搬される。
出力ベースのモデルでは、所与の出力(例えば、UTXO)が割り当てられる(例えば、使用される)かどうかの定義は、それがブロックチェーンノードプロトコルにしたがって別の前方のトランザクション152jの入力によって有効に償還されたかどうかである。トランザクションが有効であるための別の条件は、それが償還しようとする先行するトランザクション152iの出力が、別のトランザクションによってまだ償還されていないことである。この場合も同様に、有効ではない場合、トランザクション152jは、(無効としてフラグ付けされ、警告のために伝搬されない限り)伝搬されることも、ブロックチェーン150内に記録されることもない。これは、トランザクタ(transactor)が同じトランザクションの出力を複数回割り当てようとする二重支出を防止する。一方、アカウントベースのモデルは、アカウント残高を維持することによって二重支出を防止する。ここでも、トランザクション順序が定義されているので、アカウント残高は常に単一の定義された状態にある。
トランザクションを妥当性確認することに加えて、ブロックチェーンノード104はまた、「プルーフオブワーク」によって支持される、一般にマイニングと呼ばれるプロセスにおいてトランザクションのブロックを最初に作成しようと競い合う。ブロックチェーンノード104において、新しいトランザクションが、ブロックチェーン150上に記録されたブロック151内にまだ現れていない有効なトランザクションの順序付きプール154に追加される。次いで、ブロックチェーンノードは、暗号パズルを解こうとすることで、トランザクションの順序付きセット154からトランザクション152の新しい有効なブロック151を組み立てようと競い合う。典型的には、これは、ナンスが保留中のトランザクションの順序付きプール154の表現と連結されハッシュされたときにハッシュの出力が所定の条件を満たすような「ナンス」値を探索することを含む。例えば、所定の条件とは、ハッシュの出力が特定の所定の数の先行ゼロを有することであり得る。これは、プルーフオブワークパズルの1つの特定のタイプにすぎず、他のタイプが除外されないことに留意されたい。ハッシュ関数の特性は、その入力に対して予測不可能な出力を持つことである。したがって、この探索は、総当たりでしか実行することができないので、パズルを解こうとしている各ブロックチェーンノード104でかなりの量の処理リソースを消費する。
最初にパズルを解いたブロックチェーンノード104は、これをネットワーク106に公表し、後にネットワーク内の他のブロックチェーンノード104によって容易にチェックすることができるその解を証拠として提供する(ハッシュに対する解が与えられると、ハッシュの出力が条件を満たすことをチェックすることは簡単である)。この最初のブロックチェーンノード104は、ブロックを、このブロックを受け入れる他のノードのしきい値コンセンサスに伝搬し、プロトコルルールを実施する。次いで、トランザクションの順序付きセット154は、ブロックチェーンノード104の各々によってブロックチェーン150内に新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーン内の前に作成されたブロック151n-1を指し示す新しいブロック151nに割り当てられる。プルーフオブワークの解を作成するために必要とされる、例えばハッシュの形態の、かなりの量の労力は、ブロックチェーンプロトコルのルールに従うという最初のノード104の意図を示す。そのようなルールは、別名二重支出としても知られている、前に妥当性確認されたトランザクションと同じ出力の割当てを行う場合、トランザクションを有効として受け入れないことを含む。ブロック151は、一旦作成されると、ブロックチェーンネットワーク106内のブロックチェーンノード104の各々において認識および維持されるので、修正することができない。ブロックポインタ155はまた、ブロック151に順番を付与する。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付きブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
任意の所与の時間にパズルを解こうと競い合う異なるブロックチェーンノード104は、それらがいつ解を探索し始めたかまたはトランザクションが受信された順序に応じて、任意の所与の時間に、まだ公開されていないトランザクションのプール154の異なるスナップショットに基づいてそれを行っていてもよいことに留意されたい。誰がそれぞれのパズルを最初に解いても、どのトランザクション152が次の新しいブロック151nにどの順序で含まれるかを定義し、公開されていないトランザクションの現在のプール154が更新される。次いで、ブロックチェーンノード104は、新たに定義された、公開されていないトランザクションの順序付きプール154からブロックを作成しようと競い合い続け、以下同様である。2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解いて、ブロックチェーンの相反する見解がノード104間で伝搬される場合に発生し得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、フォークのどちらのプロングが最も長く成長しても、確定的なブロックチェーン150となる。同じトランザクションが両方のフォークに現れるので、これがネットワークのユーザまたはエージェントに影響を与えないことに留意されたい。
ビットコインブロックチェーン(およびほとんどの他のブロックチェーン)によれば、新しいブロック104の構築に成功したノードには、(あるエージェントまたはユーザから別のエージェントまたはユーザにある額のデジタル資産を転送するエージェント間またはユーザ間のトランザクションとは対照的に)追加の定義された量のデジタル資産を分配する新しい特別な種類のトランザクションにおいて、受け入れられた追加の額のデジタル資産を新たに割り当てる能力が与えられる。この特別なタイプのトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始トランザクション(initiation transaction)」または「生成トランザクジョン(generation transaction)」と呼ばれることもある。これは典型的に、新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、新しいブロックを構築するノードが、この特別なトランザクションが後に償還されることを可能にするプロトコルルールに従うという意図を示す。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還され得る前に、満期期間、例えば100個のブロックを必要とし得る。多くの場合、通常の(非生成)トランザクション152はまた、そのトランザクションが公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、その出力のうちの1つにおいて追加のトランザクション手数料を指定する。この手数料は通常「トランザクション手数料」と呼ばれ、以下に説明する。
トランザクション妥当性確認および公開に関与するリソースに起因して、典型的には、ブロックチェーンノード104の少なくとも各々は、1つまたは複数の物理サーバユニットを含むサーバの形態をとるか、さらにはデータセンタ全体の形態をとる。しかしながら、原則として、任意の所与のブロックチェーンノード104は、ユーザ端末または互いにネットワーク化されたユーザ端末のグループの形態をとることができる。
各ブロックチェーンノード104のメモリは、そのそれぞれの1つまたは複数の役割を実行し、ブロックチェーンノードプロトコルにしたがってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で実行されるように構成されたソフトウェアを記憶する。本明細書においてブロックチェーンノード104に帰する任意のアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーション層、またはオペレーティングシステム層もしくはプロトコル層などの下位層、またはこれらの任意の組合せにおける1つまたは複数のアプリケーションにおいて実装され得る。
消費ユーザの役割を果たす複数の当事者103の各々のコンピュータ機器102もネットワーク101に接続されている。これらのユーザは、ブロックチェーンネットワーク106と対話し得るが、トランザクションの妥当性確認にもブロックの構築にも参加しない。これらのユーザまたはエージェント103のうちのいくつかは、トランザクションの送信者および受信者として動作し得る。他のユーザは、必ずしも送信者または受信者として動作することなくブロックチェーン150と対話し得る。例えば、いくつかの当事者は、(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)ブロックチェーン150のコピーを記憶するストレージエンティティとして動作し得る。
当事者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つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージをさらに備える。このメモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を採用する1つまたは複数のメモリユニットを備え得る。各当事者103のコンピュータ機器102上のメモリは、処理装置上で実行されるように構成された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。本明細書において所与の当事者103に帰する任意のアクションは、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各当事者103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを含む。所与の当事者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの1つまたは複数の他のネットワーク化されたリソースを含み得る。
クライアントアプリケーション105は、最初に、1つまたは複数の適切なコンピュータ可読ストレージ上で任意の所与の当事者103のコンピュータ機器102に提供され得、例えば、サーバからダウンロードされ得るか、またはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのリムーバブル記憶デバイス上で提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これは2つの主要な機能を有する。これらのうちの1つは、それぞれの当事者103が、トランザクション152を作成し、認可し(例えば署名し)、1つまたは複数のビットコインノード104に送信することを可能にして、トランザクション152を、ブロックチェーンノード104のネットワーク全体に伝搬させ、それによってブロックチェーン150に含まれるようにすることである。もう1つは、それぞれの当事者に、その当事者が現在所有しているデジタル資産の額を報告することである。出力ベースのシステムでは、この第2の機能は、当該当事者に属するブロックチェーン150全体に散在している様々なトランザクション152の出力において定義された額を照合することを含む。
様々なクライアント機能が、所与のクライアントアプリケーション105に統合されるものとして説明され得るが、必ずしもこれに限定されず、代わりに、本明細書で説明される任意のクライアント機能は、例えば、APIを介してインターフェースする、または一方が他方へのプラグインである2つ以上の別個のアプリケーション一式において実装され得ることに留意されたい。より一般的には、クライアント機能は、アプリケーション層もしくはオペレーティングシステムなどの下位層、またはこれらの任意の組合せにおいて実装され得る。以下では、クライアントアプリケーション105に関して説明するが、これに限定されないことが理解されよう。
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能はトランザクション152をネットワーク106に送信することができる。クライアント105はまた、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150にクエリを行うためにブロックチェーンノード104にコンタクトすることができる(または、実施形態では、ブロックチェーン150は、部分的にその公開性(public visibility)を通じてトランザクションにおける信頼を提供する公共施設であるので、実際にブロックチェーン150における他の当事者のトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルにしたがってトランザクション152を定式化し、送信するように構成される。上述したように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルにしたがってトランザクション152を妥当性確認し、トランザクション152をフォワードして、それらをブロックチェーンネットワーク106全体に伝搬するように構成されたソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルに従い(go with)、一緒に所与のトランザクションモデルを実装する。ブロックチェーン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は、最初、所与のトランザクションの異なるインスタンスを受信し得るので、1つのインスタンスが新しいブロック151において公開される(この時点で、公開されたインスタンスが唯一の有効なインスタンスであることにすべてのブロックチェーンノード104が同意している)までは、どのインスタンスが「有効」であるかについて相反する見解を有する。ブロックチェーンノード104が1つのインスタンスを有効として受け入れ、次いで、別のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのブロックチェーンノード104は、これを受け入れなければならず、最初に受け入れたインスタンス(すなわち、ブロック151で公開されていないもの)を破棄する(すなわち、無効として扱う)。
いくつかのブロックチェーンネットワークによって動作される代替タイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれ得る。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個にそのネットワークのノードによって記憶され、絶えず更新される。そのようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者によってその暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。加えて、トランザクションにおけるオプションのデータフィールドも署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを指し示し得る。
UTXOベースのモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と略記される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下では、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明する。しかしながら、これはすべての可能な実施形態に限定されない。例示的なUTXOベースのプロトコルは、ビットコインを参照して説明されるが、他の例示的なブロックチェーンネットワーク上でも等しく実装され得ることに留意されたい。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を含むデータ構造を含む。各出力203は、未使用トランザクション出力(UTXO)を含み得、これは、(UTXOがまだ償還されていない場合)別の新しいトランザクションの入力202のソースとして使用され得る。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の後に送信することさえもできる。トランザクションのシーケンスの文脈において本明細書で使用される「先行する」および「後続の」という用語は、トランザクション内で指定されているトランザクションポインタ(どのトランザクションがどの他のトランザクションを指し示すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、同様に、「先行するもの(predecessor)」および「後続するもの(successor)」、または「先の」および「後の」、「親」および「子」などと置き換えられ得る。これは、それらの作成、ネットワーク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は、(例えば、実施形態ではトランザクションTx0全体のハッシュであるそのトランザクションID、TxID0によって)Tx1を指し示すポインタを含む。Tx1の入力202は、Tx0の任意の他の可能な出力の中からUTXO0を識別するために、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が、保留中のトランザクションの順序付きプール154にTx1を追加することとなることを意味する。ブロックチェーンノード104はまた、トランザクションTx1をネットワーク106内の1つまたは複数の他のブロックチェーンノード104にフォワードして、トランザクションTx1がネットワーク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を必要としない)。代わりに、所与のトランザクション152の入力(複数可)202によって指し示される総額と出力(複数可)203で指定されている総額との間の任意の差が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1は唯一の出力UTXO1を有するとする。UTXO0において指定されたデジタル資産の額がUTXO1において指定された額よりも大きい場合、その差分は、UTXO1を含むブロックを生成するためのプルーフオブワーク競争に勝つノード104によって割り当てられ得る。しかしながら、代替的にまたは追加的に、トランザクション手数料がトランザクション152のUTXO203のうちのそれ自体の1つにおいて明示的に指定され得ることは必ずしも除外されない。
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこかで任意のトランザクション152においてそれらにロックされたUTXOから構成される。したがって、典型的には、所与の当事者103の資産は、ブロックチェーン150全体にわたる様々なトランザクション152のUTXO全体に散在している。ブロックチェーン150内のどこにも、所与の当事者103の総残高を定義する数字は記憶されない。クライアントアプリケーション105におけるウォレット機能の役割は、それぞれの当事者にロックされ、別の前方のトランザクションでまだ使用されていない様々なUTXOのすべての値を一緒に照合することである。これは、ビットコインノード104のいずれかに記憶されたブロックチェーン150のコピーにクエリを行うことによって行うことができる。
スクリプトコードは、多くの場合、概略的に(すなわち、正確な言語を使用せずに)表されることに留意されたい。例えば、特定の機能を表すためにオペレーションコード(オペコード)が使用され得る。「OP_...」は、スクリプト言語の特定のオペコードを指す。例として、OP_RETURNは、ロックスクリプトの最初にOP_FALSEが先行するときに、トランザクション内にデータを記憶することができ、それによってデータをブロックチェーン150内に不変的に記録することができる、トランザクションの使用不可能な出力を作成するスクリプト言語のオペコードである。例えば、データは、ブロックチェーンに記憶することが望まれる文書を含み得る。
典型的には、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、データの特定の一部分に署名する。いくつかの実施形態では、所与のトランザクションについて、署名は、トランザクション入力の一部、およびトランザクション出力の一部または全部に署名する。署名された出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、通常、どの出力が署名されるかを選択するために署名の最後に含まれる4バイトコードである(したがって、署名時に固定される)。
ロックスクリプトは、典型的には、それぞれのトランザクションがロックされる当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、典型的には、それが対応する署名を供給するという事実を指して「scriptSig」と呼ばれることがある。しかしながら、より一般的には、UTXOが償還されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語を使用して、任意の1つまたは複数の条件を定義することができる。したがって、より一般的な用語「ロックスクリプト」および「ロック解除スクリプト」が好まれ得る。
図1に示すように、アリスおよびボブのコンピュータ機器102a、120bの各々上のクライアントアプリケーションは、それぞれ、追加の通信機能を含み得る。この追加の機能により、(いずれかの当事者または第三者の扇動で)アリス103aは、ボブ103bと別個のサイドチャネル107を確立することができる。サイドチャネル107は、ブロックチェーンネットワークとは別でのデータの交換を可能にする。そこのような通信は、「オフチェーン」通信と呼ばれることがある。例えば、これは、当事者の一方がトランザクションをネットワーク106にブロードキャストすることを選択するまで、トランザクションが(まだ)ブロックチェーンネットワーク106に登録されることなく、またはチェーン150上に進むことなく、アリスとボブとの間でトランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、「トランザクションテンプレート」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いていてもよい。代替的にまたは追加的に、サイドチャネル107は、鍵、交渉された額または条件、データコンテンツなどの任意の他のトランザクション関連データを交換するために使用され得る。
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替的にまたは追加的に、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはさらにはアリスのデバイス102aとボブのデバイス102bとの間の直接のワイヤードまたはワイヤレスリンクを介して確立され得る。一般に、本明細書のどこでも、参照されるサイドチャネル107は、「オフチェーン」すなわちブロックチェーンネットワーク106とは別でデータを交換するための1つまたは複数のネットワーキング技術または通信媒体を介した任意の1つまたは複数のリンクを含み得る。2つ以上のリンクが使用される場合、全体としてのオフチェーンリンクの束または集合は、サイドチャネル107と呼ばれ得る。したがって、アリスおよびボブがサイドチャネル107上で情報またはデータの特定の部分などを交換すると言われている場合、これは、これらのデータの部分のすべてが全く同じリンクまたは同じタイプのネットワーク上で送信されなければならないことを必ずしも意味するものではないことに留意されたい。
クライアントソフトウェア
図3Aは、本開示の方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)層402を含む。トランザクションエンジン401は、上述した方式にしたがって、および、さらに詳細に簡潔に説明されるように、例えば、トランザクション152を定式化し、サイドチャネル301上でトランザクションおよび/または他のデータを受信および/または送信し、および/またはトランザクションを1つまたは複数のノード104に送信してブロックチェーンネットワーク106全般に伝搬させるために、クライアント105の基本的なトランザクション関連機能を実装するように構成される。
UI層402は、機器102のユーザ出力手段を介してそれぞれのユーザ103に情報を出力すること、および機器102のユーザ入力手段を介してそれぞれのユーザ103から入力を受信することを含む、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成される。例えば、ユーザ出力手段は、視覚出力を提供するための1つまたは複数のディスプレイスクリーン(タッチスクリーンまたは非タッチスクリーン)、オーディオ出力を提供するための1つまたは複数のスピーカ、および/または触覚出力を提供するための1つまたは複数の触覚出力デバイスなどを含み得る。ユーザ入力手段は、例えば、1つまたは複数のタッチスクリーン(出力手段のために使用されるものと同一または異なる)の入力アレイ、マウス、トラックパッド、またはトラックボールなどの1つまたは複数のカーソルベースのデバイス、発話または音声入力を受信するための1つまたは複数のマイクロホンおよび発話または音声認識アルゴリズム、手動または身体ジェスチャの形態で入力を受信するための1つまたは複数のジェスチャベースの入力デバイス、あるいは1つまたは複数の機械式ボタン、スイッチ、またはジョイスティックなどを含み得る。
本明細書の様々な機能は、同じクライアントアプリケーション105に統合されるものとして説明され得るが、これは、必ずしも限定的ではなく、代わりに、それらは、2つ以上の別個のアプリケーション一式で実装され得、例えば、一方が他方へのプラグインであるか、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースしていることに留意されたい。例えば、トランザクションエンジン401の機能が、UI層402とは別個のアプリケーションにおいて実装されてもよいし、トランザクションエンジン401などの所与のモジュールの機能が、2つ以上のアプリケーション間で分割されてもよい。説明された機能のうちのいくつかまたはすべてが、例えばオペレーティングシステム層で実装され得ることも除外されない。本明細書のどこでも単一のまたは所与のアプリケーション105などを参照する場合、これは単なる例であり、より一般的には、説明される機能は任意の形態のソフトウェアで実装され得ることが理解されよう。
図3Bは、アリスの機器102a上のクライアントアプリケーション105aのUI層402によってレンダリングされ得るユーザインターフェース(UI)500の例のモックアップを与える。同様のUIが、クライアント105bによってボブの機器102b上に、または任意の他の当事者の機器上にレンダリングされ得ることが理解されよう。
例示として、図3Bは、アリスの視点からのUI500を示す。UI500は、ユーザ出力手段を介して別個のUI要素としてレンダリングされる1つまたは複数のUI要素501、502、502を含み得る。
例えば、UI要素は、異なるオンスクリーンボタン、またはメニュー内の異なるオプションなどであり得る1つまたは複数のユーザ選択可能要素501を含み得る。ユーザ入力手段は、ユーザ103(この場合、アリス103a)が、スクリーン上のUI要素をクリックもしくはタッチすることまたは所望のオプションの名前を言うことなどによって、オプションのうちの1つを選択または他の方法で動作させることを可能にするように構成される(注意:本明細書で使用される「手動」という用語は、自動との対比を意味し、必ずしも1つまたは複数の手の使用に限定されない)。オプションにより、ユーザ(アリス)は、トランザクション内に埋め込まれる署名を生成することができる。
代替的にまたは追加的に、UI要素は、1つまたは複数のデータ入力フィールド502を含み得、それを通して、ユーザは、署名内に埋め込まれるデータを入力することができる。これらのデータ入力フィールドは、ユーザ出力手段、例えばオンスクリーンを介してレンダリングされ、データは、ユーザ入力手段、例えば、キーボードまたはタッチスクリーンを通してフィールドに入力され得る。代替的に、データは、例えば、音声認識に基づいて、口頭で受信され得る。
代替的にまたは追加的に、UI要素は、ユーザに情報を出力するために出力される1つまたは複数の情報要素503を含むことができる。例えば、これ/これらは、スクリーン上にまたは音声でレンダリングされ得る。
様々なUI要素をレンダリングし、オプションを選択し、データを入力する特定の手段は重要ではないことが理解されよう。これらのUI要素の機能については、以下でより詳細に説明する。図3に示されるUI500は、単に図式化されたモックアップであり、実際には、簡潔にするために図示されていない1つまたは複数のさらなるUI要素を含み得ることも理解されよう。
暗号プレリミナリ(CRYPTOGRAPHY RELIMINARIES)
ECDSA-楕円曲線群
Figure 2023539432000002
は、有限体
Figure 2023539432000003
上の巡回楕円曲線群であり、pは素数である。Eの要素の数はnであり、nは素数である。G∈Eは、楕円曲線群の生成点であり、以下を意味する:
Figure 2023539432000004
群演算
Figure 2023539432000005
は、標準楕円曲線点加算であり、i・Gは、Gに対する群演算のi回の反復を表す:
Figure 2023539432000006
以下において、文脈上他の意味に解すべき場合を除き、整数に対するすべての演算はモジュロnである。
楕円曲線デジタル署名アルゴリズム
鍵生成は以下のように行われる:
1)署名用の秘密鍵j∈{1,…,n-1}を選択する
2)公開鍵は、Y=j・Gであり、Gは、生成点である。
署名アルゴリズムは、秘密鍵jメッセージおよびエフェメラル鍵kを取り、署名を生成する:
3)ランダムなk∈{1,…,n-1}(エフェメラル鍵)を選択する
4)R=(rx,ry)=k・G-EC点を計算する
5)r=rx mod nを計算する
6)r=0である場合、ステップ3に進む
7)署名s=k-1(e+jr)を生成する。ここで、e=hash(m)である
8)s=0である場合、ステップ3に進む
9)[r,s]をメッセージmの署名として出力する
次いで、検証アルゴリズムは、署名およびメッセージを取り、署名者の公開鍵を使用してrを再構築し、署名で与えられるr値を検証する。
1)e=hash(m)を計算する
2)k1=es-1 mod nおよびk2=rs-1 mod nを計算する
3)Q=(qx,qy)=k1・G+k2・Yを計算する
4)
Figure 2023539432000007
である場合、署名は有効である
そうでなければ無効である。
署名には以下の表記が使用される:
Figure 2023539432000008
ここで、[rY,sY]は、公開鍵Yを使用して検証されたときに、有効な署名である。
共同検証可能ランダム秘密分散(JVRSS)方式
N人の参加者が、この方式の参加者のうちの少なくとも(i+1)によってのみ再生成することができる共同シークレットを作成したいと望むと仮定する。共有シークレットを作成するために、以下のステップが行われる:
1)参加者は、各参加者の一意のラベルiに合意する。各参加者iは、(t+1)個の乱数
Figure 2023539432000009
を生成し、ここで、∈Rは、集合
Figure 2023539432000010
のランダムに生成された要素を意味し、
Figure 2023539432000011
は、集合{1,…,n-1}の表記である。次いで、各参加者は、i=1,…,Nに対して、次数tのシークレット多項式(secret polynomial)
Figure 2023539432000012
を有する。なお、これ以降mod nの表記は省略され、整数に対するすべての算術演算はモジュロnで行われると仮定する。
2)各参加者iは、例えば、参加者jとのセキュアな通信チャネルだけを使用して、値fi(j)を参加者jに送信する。
3)各参加者iは、共有シークレット多項式の自身のプライベートなシークレットシェアを以下のように計算する:
Figure 2023539432000013
共有シークレットシェアは、形式(i,ai)を有する点であり、ここで、iは、方式における参加者ラベルである。aのシークレットシェアを生成するためのこの方法は、ステップ1~3に説明されるように、本明細書では、参加者iについて、ai=JVRSS(i)と表記される。「JVRSS」は、典型的に、「Joint verification random secret sharing」の略であり、ステップ4および5も含むことに留意されたい。しかしながら、本明細書を通して、JVRSSは、少なくともステップ1~3を実行することを意味するものと解釈され、ステップ4および5は、オプションのステップである。
参加者が、共有多項式を生成しているので、参加者はそれぞれ、他の参加者がすべての参加者に正しい情報を共有したこと、およびすべての参加者が同じ共有多項式を有することを検証することができる。これは次のように行われる。
4)各参加者iは、k=0,…,tに対して、難読化された係数aik・Gをすべての参加者にブロードキャストする
5)各参加者iは、fj(i)・Gを計算し、以下を検証することによって、各参加者jが多項式点fj(i)を正しく計算したことをチェックする:
Figure 2023539432000014
この式が各多項式に対して成立することをすべての参加者が確認すると、グループは、それらがすべて同じ共有多項式を作成したことを集合的に確信することができる。
共有シークレットの再構成
参加者が、共有多項式のゼロ次である共有シークレットaを再構築したいと望むと仮定する。
Figure 2023539432000015
の形態のこの多項式上の(t+1)個の点が与えられると、共有シークレットaを見つけるために、以下が計算され、
Figure 2023539432000016
これは、「ラグランジュ補間」として知られる一般式から導出される。
公開鍵計算
JVRSSのステップ4で共有されたj=1,…,Nに対して、N個のゼロ次のプライベート多項式係数の公開鍵ai0・Gが与えられると、各参加者は、共有シークレットaに対応する
Figure 2023539432000017
を使用して、共有公開鍵Pを計算する。
共有シークレットの加算
例えば、いずれのエンティティも個々のシークレットを知ることなく、N人の参加者のグループの間で共有される2つの共有シークレットの加算を計算するために、各シークレット多項式が次数tを有する場合、以下のステップが行われる:
1)第1の共有シークレットaを生成する。ここで、参加者iのシェアは、しきい値が(t+1)のi=1,…,Nに対して、ai=JVRSS(i)で与えられる。
2)第2の共有シークレットbを生成する。ここで、参加者iのシェアは、bi=JVRSS(i)で与えられ、しきい値は(t+1)である。
3)各参加者iは、自身の加法的シェア(additive share)を計算する:
Figure 2023539432000018
4)すべての参加者は、自身の加法的シェアνiを他のすべての参加者にブロードキャストする。
5)各参加者は、シェアνiのうちの少なくとも(t+1)個にわたって補間して、以下を計算する:
Figure 2023539432000019
共有シークレットの加算のためのこの方法は、参加者iについて、ADDSS(i)と表記され、この結果、各参加者iは、ν=(a+b)を知ることとなる。
共有シークレットの積
N人の参加者のグループ間で共有される2つの共有シークレットの積を計算するために、各シークレット多項式が次数tを有する場合、グループは以下のステップを行う:
1)第1の共有シークレットaを生成する。ここで、参加者iのシェアは、i=1,…,Nに対して、ai=JVRSS(i)で与えられる。共有シークレット多項式は次数tを有し、これは、それを再作成するために(t+1)人の参加者が必要とされることを意味する。
2)第2の共有シークレットbを生成する。ここで、参加者iのシェアは、bi=JVRSS(i)で与えられ、共有シークレット多項式は、この場合も次数tを有する。
3)各参加者は、以下を使用して、自身の乗法的シェア(multiplicative share)μiを計算する:
Figure 2023539432000020
4)すべての参加者は、自身の乗法的シェアμiをすべての他の参加者にブロードキャストする。
5)各参加者は、0においてシェアμiのうちの少なくとも(2t+1)個にわたって補間して、以下を計算する:
Figure 2023539432000021
2つの共有シークレットの積を計算するためのこの方法は、本明細書では、参加者iについて、μ=ab=PROSS(i)と表記される。
共有シークレットの逆数(inverse)
共有シークレットaの逆数を計算するために、以下のステップが行われる:
1)すべての参加者は、共有シークレットの積PROSS(i)を計算し、その結果は、μ=ab mod nである。
2)各参加者は、μのモジュラ逆数を計算し、その結果、以下となる:
Figure 2023539432000022
3)各参加者iは、以下を計算することによって、自身の逆数シークレットシェア(inverse secret share)を計算する。
Figure 2023539432000023
共有シークレットの逆数を計算するためのこの方法は、参加者iについて、以下のように表記される:
Figure 2023539432000024
共有秘密鍵の生成および検証
N≧2t+1人の参加者の間の共有秘密鍵aを計算するために、そのうちのt+1人が署名を作成することが求められる場合、参加者は、上述したように公開鍵計算およびしきい値t+1を用いてJVRSSを実行する。その結果、すべての参加者i=1,…,Nが秘密鍵シェアaiと、対応する共有公開鍵P=(a・G)とを有する。
エフェメラル鍵シェアの生成
署名において必要とされるような、エフェメラル鍵シェアおよび対応するrを生成するために、しきい値(t+1)の共有秘密鍵aを有するサイズNのグループは、以下のステップを実行する:
1)共有シークレットの逆数シェア(inverse share)
Figure 2023539432000025
を生成する。ここで、それを再作成するためには(t+1)個のシェアが必要とされる。2)各参加者は、以下を計算する。
Figure 2023539432000026
3)kiの検証で共有された難読化された係数を使用して、以下を計算する。
Figure 2023539432000027
4)各参加者iは、以下を記憶する。
Figure 2023539432000028
非最適署名生成
少なくとも2t+1人の参加者がメッセージに対する署名を作成したいと思っており、参加者のうちの1人がこれを調整することを選択すると仮定する。共有秘密鍵を有するグループによる署名を作成するために、以下のステップが行われる。
1)コーディネータは、少なくとも1つの2t+1人の参加者に、メッセージに対する署名を要求する。
2)各参加者iは、前のセクションで計算されたエフェメラル鍵
Figure 2023539432000029
を復元する。すべてのユーザは、同じエフェメラル鍵に対応するシェアを使用しなければならない。
3)各参加者は、メッセージダイジェストe=SHA-256(SHA-256(message))を計算する。
4)各参加者iは、自身の署名シェアsを計算する:
Figure 2023539432000030
ここで、aiは、各参加者の秘密鍵シェアである。
5)各参加者は、自身の署名シェア(r,si)をコーディネータに送信する。
6)コーディネータは、2t+1個の署名シェアを受信すると、
Figure 2023539432000031
を計算し、この署名を(r,s)として出力する。
7)コーディネータは、標準ECDSA検証を使用して署名を検証する。これが失敗した場合、シェアのうちの少なくとも1つが誤っているはずであり、署名生成アルゴリズムを再度実行する必要がある。
ディフィーヘルマン(DH)鍵交換
2つの当事者は、以下の方法で対称シークレット鍵を作成することによって、セキュアな通信チャネルを確立し得る。アリスとボブが共有シークレット鍵(shared secret key)を作成したいと望み、アリスが、公開鍵PKA=skA・Gに対応する秘密鍵skA)を知っており、ボブが、ボブの公開鍵PKB=skB・Gに対応する秘密鍵skBを知っていると仮定する。
共有シークレット鍵を見つけるために、以下のステップを行う。
1.アリスは、ディフィーヘルマン鍵skAB=skA・PKBを計算する。
2.ボブは、ディフィーヘルマン鍵skAB=skB・PKAを計算する。
共有シークレット鍵を確立するための別の方法は、国際公開第2017/145016号に記載されており、この方法では、事前合意されたメッセージがDH鍵に追加され、新しい鍵が作成される。このメッセージは、送信される新しい通信ごとに変更することができ、決定論的鍵のセットを作成する。例えば、メッセージは、m=hash(date||time)であり得る。次いで、アリスは、メッセージを使用して秘密鍵skA1= skA+hash(date||time)を生成し、同様に、ボブは、秘密鍵skB1=skB+hash(date||time)を生成することができる。そのため、アリスとボブの両方が、共有秘密鍵skAB1=skA1・PKB1=skB1・PKA1を生成することができる。
HDウォレット
階層的決定論的ウォレットは、ビットコイン改善提案32(BIP32:Bitcoin Improvement Proposal 32)ウォレットがその特定のタイプであり、多くの鍵が単一の入力から導出され得る決定論的ウォレットである。入力は、シードと呼ばれる何らかのランダムエントロピーであり、そこからマスタ鍵が導出される。次いで、マスタ鍵は、図2に示されるように、複数の子鍵を導出するために使用される。
BIP32では、マスタ秘密鍵は、シードのHMAC-SHA512の結果の左の32バイトであり、または明示的に、それは、
Figure 2023539432000032
であり、チェーンコードは、
Figure 2023539432000033
であり、すべての子鍵はこれらから導出することができ、ここで、
Figure 2023539432000034
は、SHA512ハッシュ関数を使用するHMACである。上記の式において、opadは、ブロックサイズの外側パディングであり、ipadは、ブロックサイズの内部パディングである。
HMACは、2つの入力、すなわち、cおよびKを必要とする。簡潔にするために、かつユーザが単一のシードを覚えるまたは記憶することのみを要求されるように、BIP32プロトコルは、第1の入力を文字列「Bitcoin Seed」として設定、すなわち、c=‘Bitcoin Seed’とする。これは、HDウォレットを生成するための1つの例示的プロトコルであり、異なるプロトコルは、異なる入力、例えば、2つのランダムに生成されたシードを必要とし得ることが理解されよう。言い換えると、文字列「Bitcoin Seed」の使用は、HDウォレットを生成するための必要要件ではない。
親秘密鍵skparentから、強化された子秘密鍵skchildを計算するための式は、以下の通りである:
Figure 2023539432000035
ここで、cparentは、親チェーンコードであり、0≦index<231は子インデックスであり、HMAC-SHA512Lは、SHA-512ハッシュ関数を用いて計算されたHMAC関数の結果の左の32バイトである。子公開鍵のための対応する式は、この式にベースポイントGを単純に点乗算(point multiply)することによって導出される。子チェーンコードcchildは、HMAC関数の結果の右の32バイトであると定義される:
Figure 2023539432000036
親公開鍵pkparentおよび親秘密鍵skparentから、強化されていない子秘密鍵skchildを計算するための式は以下である:
Figure 2023539432000037
ここで、cparentは、親チェーンコードであり、231≦index<232は子インデックスであり、HMAC-SHA512は、SHA-512ハッシュ関数を用いて計算されたHMAC関数である。強化された鍵と同様に、強化されていない鍵の子チェーンコードcchildは、HMAC関数の結果の右の32バイトであると定義される:
Figure 2023539432000038
この第2のタイプの子鍵により、親公開鍵およびチェーンコードの知識を有する者であれば、以下の式を使用して、子公開鍵を導出することができる:
Figure 2023539432000039
これを使用して、外部当事者は、必要に応じて様々な支払いアドレスを導出し、通信および記憶の回数を減らすと同時に、鍵の再使用を回避することができる。
一般に、HDウォレットは、秘密鍵-公開鍵ペアの何らかの階層ツリー状構造を生成する必要がある。これにより、1つのシードからすべて再生成することができる多数の鍵ペアが提供される。
しきい値デジタル署名
図4は、本発明のいくつかの実施形態による、デジタル署名を生成するための例示的なシステム400を示す。システムは、各々が共有秘密鍵のそれぞれのシェアを有する複数の参加者401を含む。共有秘密鍵は、秘密分散方式(secret sharing scheme)、例えば、JVRSSまたはShamirの秘密分散方式を使用して生成され得る。共有秘密鍵は、ディーラーを伴う方式を使用して、またはディーラーを伴わない方式を使用して生成されていてもよい。図4には3人の参加者のみが示されているが、一般に、システムは任意の数の参加者401を含み得る。システムはまた、検証当事者402、すなわち署名検証当事者と、コーディネータ404とを含む。コーディネータ404は、しきい値数の署名シェアに基づいて署名を生成するように構成され、各署名シェアは、それぞれの参加者によって生成される。コーディネータ404は、図4では別個のものとして示されているが、いくつかの例では、コーディネータは、参加者のうちの1つ、例えば第1の参加者401aと同じエンティティであってもよい。いくつかの例では、システムは、1つまたは複数のブロックチェーンノード104を含む。
各参加者401、検証当事者402、およびコーディネータ404は、それぞれのコンピューティング機器(図示せず)を操作する。各それぞれのコンピューティング機器は、1つまたは複数のプロセッサ、例えば1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ(GPU)、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)を含むそれぞれの処理装置を備える。それぞれのコンピューティング機器はまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備え得る。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を採用する1つまたは複数のメモリユニットを備え得る。それぞれのコンピューティング機器は、少なくとも1つのユーザ端末、例えば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを含み得る。代替的にまたは追加的に、それぞれのコンピューティング機器は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの1つまたは複数の他のネットワーク化されたリソースを含み得る(クラウドコンピューティングリソースは、1つまたは複数のサイトで実装される1つまたは複数の物理サーバデバイスのリソースを含む)。システム400の当事者によって実行されるものとして説明される任意の行為は、その当事者によって操作されるそれぞれのコンピューティング装置によって実行され得ることが理解されよう。
本発明は、ブロックチェーンの文脈での使用のみに限定されないが、以下では、第1の参加者401aを、図1~図3を参照して説明されたアリス103aと同等として説明する。すなわち、いくつかの例では、アリス103aは第1の参加者401aである。検証当事者402は、以下ではキャロル402と呼ばれる。
これらの実施形態では、アリス401aは、メッセージのための署名のシェアを生成し、自身がその署名シェアを生成したことをキャロル402に証明したいと思う。
アリス401aは、署名されるべきメッセージ、例えば、ブロックチェーントランザクション、文書、またはコントラクトなどのうちのいくつかまたは一部を取得する。アリス401aは、自らメッセージを生成してもよいし、アリス401aは、例えば、別の参加者401またはコーディネータ404からメッセージを受信してもよい。アリス401aは、外部データ項目も取得する。アリス401aは、例えば、名前、パスポート番号、公開鍵などの外部データ項目をすでに有していてもよいし、アリス401aは、外部データ項目を生成してもよい。例えば、以下でより詳細に説明するように、外部データ項目は、アリス401aによって生成された署名(「第2の署名」)であり得る。
アリス401aは、外部データ項目のハッシュに基づいてエフェメラル秘密鍵シェアを生成する。各他の参加者、例えば第2の参加者401bおよび第3の参加者401cも、それぞれのエフェメラル秘密鍵シェアを生成する。他の参加者は、それぞれの外部データ項目のハッシュに基づいてそれぞれのエフェメラル秘密鍵シェアを生成することが好ましいが、これは必須ではない。
他の参加者のエフェメラル秘密鍵シェアがそれぞれの外部データ項目に基づくかどうかにかかわらず、各参加者のエフェメラル秘密鍵シェアは、他の参加者によって生成された入力(「データ項目」)に基づいて生成される。すなわち、アリスのエフェメラル秘密鍵シェアは、すべての他の参加者からのそれぞれのデータ項目に基づいて生成され、他の参加者のそれぞれのエフェメラル秘密鍵シェアは、アリスからのデータ項目の関数である。特定の例として、各参加者は、それぞれの外部データ項目に基づくそれぞれのデータ項目(例えば、多項式のゼロ次係数)を生成し得る。プライバシーを保護するために、データ項目は、秘密分散方式を使用して共有され得る。参加者は、参加者が他の参加者のインデックスで評価された多項式を共有する上述したJVRSS方式を使用し得る。JVRSS方式は、ランダムに生成されるのとは対照的に、外部データ項目に基づいて多項式のゼロ次係数を計算することによってわずかに修正される。これについては以下でより詳細に説明する。
アリスのエフェメラル秘密鍵シェアは、ここではアリスの外部データ項目をハッシュした結果の関数である。外部データ項目のハッシュを生成するために使用されるハッシュ関数は、任意の適切なハッシュ関数、例えば、SHA256、SHA512であり得、1つまたは複数のハッシュ関数を複数回適用することを含み得る。例えば、ハッシュ関数は、ダブルハッシュ関数、例えば、SHA256d(x)=SHA256(SHA256(x))であり得る。
アリス401aによって生成された署名シェアは、エフェメラル秘密鍵シェア、または特定の署名アルゴリズムによっては、エフェメラル秘密鍵シェアの逆数を必要とする。それぞれのエフェメラル秘密鍵シェアがそれぞれの参加者に対してプライベートなままであるために、例えば、アリス103aのみがアリスのそれぞれのエフェメラル秘密鍵シェアを知るように、参加者は、秘密分散方式を使用してそれぞれのエフェメラル秘密鍵シェアを生成し得、すなわち、各参加者は、各々が同じシークレットのシェアを生成するのに十分な情報を他の参加者と共有はするが、シークレット自体を実際に生成することはない。この場合、共有シークレットはエフェメラル秘密鍵である。例えば、参加者は、JVRSSの修正バージョンを使用し得る。JVRSSのステップは上に詳述されている。この修正バージョン(JVRSS-Aと呼ぶ)では、ステップ1)において、参加者は、それぞれのプライベート多項式(private polynomial)のゼロ次係数ai0を、それぞれのデータ項目のハッシュ(例えば、ダブルハッシュ)と等しいものとして設定する。他の多項式係数は、通常のJVRSSの場合のようにランダムに選択されてもよい。次いで、JVRSSの残りのステップ1)~5)を通常通りに行う。次いで、各参加者は、それぞれのエフェメラル秘密鍵シェアと、難読化されたデータ項目(すなわち、データ項目に対応する公開鍵)のセットとを、他の参加者ごとに1つずつ有する。JVRSS、またはむしろJVRSS-Aは、秘密分散方式の特定の例であり、他の方式、例えば、Shamirの秘密分散方式が使用されてもよいことに留意されたい。
アリス401aは、自身のデータ項目に対応する公開鍵を生成する。例えば、これは、」データ項目を生成点で難読化することによって行われる。アリス401aは、各他の参加者401からそれぞれの公開鍵を取得し、これらの公開鍵を使用して、エフェメラル秘密鍵に対応するエフェメラル公開鍵を生成する。例えば、参加者は、JVRSS-Aを使用して、エフェメラル公開鍵を生成し得る。「エフェメラル公開鍵」は、ここではエフェメラル公開鍵のx構成要素(またはx座標)の省略表現として使用されていることに留意されたい。
エフェメラル秘密鍵シェアおよびエフェメラル公開鍵(すなわち、共有エフェメラル秘密鍵に対応する公開鍵)を生成した後、アリス401aは、自身の署名シェアを生成することができる。アリスの署名シェアは、メッセージ(例えば、ブロックチェーントランザクション)と、共有秘密鍵のアリスのそれぞれのシェアと、(逆数)エフェメラル秘密鍵シェアと、エフェメラル公開鍵とに基づいて生成される。この場合も同様に、使用されている特定の署名方式に応じて、署名シェアは、エフェメラル秘密鍵の逆数に基づいて生成され得ることに留意されたい。いずれにしても、エフェメラル秘密鍵シェアが外部データ項目に基づいて生成されると仮定すると、その外部データ項目は、ここで、署名シェア内に埋め込まれている。
次いで、アリス401aは、自身の署名シェアをコーディネータ404に送信し得、コーディネータは、アリスの署名シェアと、それぞれの参加者401によって生成された1つまたは複数のそれぞれの署名シェアとに基づいて第1の署名を生成することができる。コーディネータ404は、有効な署名を生成するためにしきい値数の署名シェアを必要とする。上記で簡単に述べたように、アリス401aは、実際にはコーディネータ404であってもよい。その場合、アリスは、自身の署名シェアをすでに入手しており、他の参加者401からそれぞれの署名シェアを受信する。
したがって、署名は、この時点でアリス401aのみに知られている外部データ項目、例えば個人識別子を組み込む。外部データ項目自体が秘密(secret)である必要はないことに留意されたい。外部データ項目が署名内に埋め込まれるという事実は、最初は秘密に保たれることが好ましいが、これは必須ではない。例えば、外部データ項目は、それ自体1つまたは複数の当事者に知られているが、外部データ項目としてのその使用は知られていない、アリスの証明された公開鍵であってもよい。
アリス401aは、第1の署名のシェアを生成したことを証明するために、署名をキャロル402が利用できるようにし得る。例えば、アリス401aは、署名をキャロル402に送信してもよいし、アリスは、署名を公開するか、または他の方法でブロードキャストしてもよい。他の例では、キャロル402は、異なる当事者、例えばコーディネータ404から署名を取得し得る。アリス401aはまた、メッセージをキャロル402に送信し得る。署名およびメッセージは、一緒に送信または公開されることが好ましい。
アリス401aはまた、署名と同時に、または異なる時間に、例えば後の時間に、外部データ項目をキャロル402が利用できるようにし得る。署名と同じ方法で、または異なる方法で外部データ項目を利用できるようにし得る。例えば、アリス401aは、セキュアな通信チャネルを介して外部データ項目をキャロル402に送信し得る。アリス401aが署名シェアを生成したことを検証するために、キャロル402は、他の参加者401によって生成されたそれぞれのデータ項目に対応するそれぞれの公開鍵(例えば、ゼロ次係数を難読化する公開鍵)を必要とする。アリス401は、これらをキャロル402に送信し得るか、または他の参加者は、それぞれのエフェメラル公開鍵シェアをキャロル402に送信し得る。
上述したように、外部データ項目は、別の署名であり得るか、または少なくとも別の署名を含み得る。その場合、アリス401aは、第2のメッセージを取得し、少なくとも第2のメッセージと「主秘密鍵」とに基づいて第2の署名を生成する。最も広い例では、「主(main)」は、単にラベルとして使用される。すなわち、主秘密鍵は、アリス401aによって所有される任意の秘密鍵であり得る。
アリス401は、第2のメッセージの少なくとも一部を自ら生成し得る。追加的にまたは代替的に、アリス401aは、別の当事者、例えばキャロル402から、第2のメッセージの少なくとも一部を受信するか、または他の方法で取得し得る。すなわち、キャロル402が、第2のメッセージの一部または全部をアリス401aに送信してもよいし、アリス401aおよびキャロル402が、第2のメッセージの少なくとも一部に関して事前に合意していてもよい。例えば、アリス401aおよびキャロル402は、第2の署名が生成された時間および/またはデータの指示を含めることに合意していてもよい。いくつかの例では、第2のメッセージは、第1のメッセージを含むか、またはそれに基づいて生成され得る。例えば、第2のメッセージは、第1のメッセージの始まりまたは終わりに連結された追加データを有する第1のメッセージを含み得る。
いくつかの例では、各参加者401は、同じ第2のメッセージを使用して、それぞれの第2の署名を生成する。すなわち、各参加者401は、第2のメッセージと、受け入れ可能な主秘密鍵とに基づいてそれぞれの第2の署名を生成する。
アリス401aは、少なくとも第2の署名をキャロル402に送信し得るか、またはアリス401aは、第2の署名を公開し得る。キャロル402が第2のメッセージをまだ入手していない場合、アリス401aは、第2のメッセージをキャロル402に送信するか、または第2のメッセージを公開し得る。アリス401aはまた、主秘密鍵に対応する主公開鍵をキャロル402に送信し得るか、または少なくとも、キャロル402が主公開鍵を取得し得る場所、例えば、証明機関によって公開され、主公開鍵がアリス401aにリンクされていることを証明する証明書を記憶している位置を示し得る。
エフェメラル秘密鍵シェアは、少なくとも外部データ項目のハッシュ、例えば第2の署名のダブルハッシュに基づく(すなわち、その関数である)。エフェメラル秘密鍵シェアはまた、ランダムに生成されたソルト値、すなわち、外部データ項目のハッシュに追加された値に基づき得る。より具体的には、アリスのエフェメラル秘密鍵シェアを生成するために使用されるデータ項目は、ソルト値に基づき得る。好ましくは、ソルト値は一度だけ使用され、すなわち、第1の署名の異なるインスタンスを生成するためには異なるソルト値が使用される。これらの例では、アリス401aは、第3のメッセージとソルト値とに基づいて第3の署名を生成し得る。すなわち、ソルト値は、第3の署名を生成するための秘密鍵として使用される。第3のメッセージは、第1のメッセージおよび/または第2のメッセージに基づいて生成され得る。第3のメッセージは、第2のメッセージと同じであってもよい。アリス401aは、第3の署名をキャロル402に送信し得る。アリス401aが第3のメッセージを生成した場合、アリスはそれもキャロル402に送信し得る。あるいは、キャロル402は、第3のメッセージをアリス401aに送信している場合があり、その場合、アリス401aは、それをキャロル402に送り返す必要はないが、送り返すことを選択してもよい。
第3の署名を生成する代わりに、アリス103aは、ゼロ知識証明(zero-knowledge proof:ZKP)を使用してランダムソルト値の知識を証明し得る。当業者は、ZKP自体に精通しているので、本明細書では詳細に説明しない。例示的なZKPを以下に提供する。
オプションで、アリス401aは、データ項目に対応するそれぞれの公開鍵、すなわち、アリス401aによって生成された公開鍵および他の参加者から取得された公開鍵を使用して、ハッシュツリー、例えばマークルツリーを生成し得る。これらの公開鍵の各々は、ハッシュツリーのそれぞれのリーフハッシュを形成するためにハッシュされる。アリス401aは、結果として得られたハッシュルート(例えば、マークルルート)をキャロル402に送信し得るか、またはハッシュルートを公開し得る。同時にまたは後の時間に、アリス401aは、アリスの公開鍵がハッシュツリーの要素であることを証明するために、ハッシュプルーフ(例えば、マークルプルーフ)をキャロル402に送信し得る。いくつかの例では、第1のメッセージは、ハッシュルートを含み、したがって、署名シェアを生成する各参加者は、同じハッシュルートを証明する(attest to)。すなわち、それらは、ハッシュルートを生成するために使用された公開鍵を証明する。例示的なハッシュルートを図7に示す。
上述したように、本発明の実施形態は、ブロックチェーン150との併用に限定されない。しかしながら、そのようなものでは、第1のメッセージは、ブロックチェーントランザクションであり得る。例えば、アリス401aは、ブロックチェーントランザクションの一部または全部、例えばトランザクションの1つまたは複数の入力および/または1つまたは複数の出力に署名するために使用される署名のシェアを生成し得る。次いで、コーディネータ404は、アリスが署名していないトランザクションの入力に第1の署名を含め得る。トランザクションは、異なる当事者、例えばボブ103bおよび/またはキャロル402にロックされた出力を含み得、例えば、出力は、ボブ103bによって所有される公開鍵にロックされたpay-to-public-key(P2PK)またはpay-to-public-key-hash(P2PKH)出力であり得る。第2のメッセージは、トランザクションを含み得る。第2のメッセージは、ブロックチェーン150に関するデータ、例えば、トランザクションが生成されたときのブロックチェーンの現在のブロック高さを含み得る。これらの例では、アリス401aまたはコーディネータ404は、ブロックチェーン150へのトランザクションを送信することによって、第1のメッセージをキャロル402が利用できるようにし得、そこから、キャロル402がアクセスし得る。これは図4に示されている。ハッシュルートは、ブロックチェーントランザクションの出力に含まれ得る。
図5は、本発明のいくつかの実施形態による、署名シェアを生成するためにアリス401aによって行われ得るステップの例示的なシーケンスを示す。ステップのいくつかが異なる順序で実行され得ることは理解されよう。ステップS501において、アリス401aは、第1のメッセージ、例えば、ブロックチェーントランザクションを取得する。ステップS502において、アリス401aは、外部データ項目、例えば、第2の署名を取得する。ステップS503において、アリス401aは、外部データ項目に基づいて、例えば、第2の署名のハッシュに基づいて、エフェメラル秘密鍵シェアを生成する。ステップS504において、アリス401aは、共有エフェメラル秘密鍵に対応するエフェメラル公開鍵を生成する。ステップS505において、アリス401aは、署名シェアを生成し、ステップS506において、アリスは、それをコーディネータ404に送信する。コーディネータ404が署名を生成し、それをキャロル402が利用できるようにした後、アリス401aは、少なくとも外部データ項目をキャロル402に送信する。
次に、検証当事者であるキャロル402が行うアクションについて説明する。キャロル402は、アリス401aに、アリス401aが第1の署名のシェアを生成したことを証明してもらいたい。キャロル402は、第1の署名を取得する。アリス401aが第1の署名をキャロル402に送信し得るか、または第1の署名は、公的に入手可能であり、例えば、ブロックチェーン150上に記録され得る。第1の署名がブロックチェーントランザクションの入力に含まれる場合、キャロル402は、トランザクションから第1の署名を抽出することによって第1の署名を取得する。キャロル402はまた、アリス401aから候補の外部データ項目を取得する。ここで、「候補(の)(candidate)」は、アリス401aが、第1の署名内に、すなわちそれぞれの署名シェアに埋め込まれていると主張する外部データ項目を指すために使用される。実際にそうである場合、候補の外部データ項目は、上述した外部データ項目と同じである。しかしながら、この時点で、キャロル402は、そうであることを確認することができないので、「候補の」としている。
キャロル402は、候補の外部データ項目を使用して、候補のエフェメラル公開鍵を生成する。これを行うために、キャロルは、アリスの外部データ項目(または、第1のデータ項目が外部データ項目だけでなくそれ以外にも基づいて生成される場合は第1のデータ項目)を取得し、対応する公開鍵を生成する。キャロル402はまた、他の参加者のデータ項目に対応する公開鍵を取得する。キャロル402は、候補を使用して候補のエフェメラル公開鍵を生成し、公開鍵を取得する。候補のエフェメラル公開鍵は、第1の構成要素および第2の構成要素、例えば、x値およびy値を含む。
キャロル401によって取得された第1の署名は、第1の署名構成要素および第2の署名構成要素を含む。アリス401aが第1の署名に寄与したことを検証するために、キャロル402は、候補の第1の署名構成要素を候補のエフェメラル公開鍵の第1の構成要素と比較する。それらが一致する場合、キャロル402は、アリス401aが実際に第1の署名のシェアを生成したことを確信することができる。すなわち、候補のエフェメラル公開鍵の第1の構成要素(候補の第1の署名構成要素と同等のx構成要素を含む)と第1の署名構成要素とが一致するためには、候補の外部データ項目は、アリスの署名シェアを生成するために使用された外部データ項目でなければならない。アリス401aがキャロル402に候補の外部データ項目を提供したので、これは、アリス401aが署名のシェアを生成したことを証明する。このプロセスは、図6のステップS601~S605に示されている。
キャロル402はまた、対応する公開鍵に対して妥当性確認されたとき、第1の署名が有効な署名であることを検証し得る。第1の署名がブロックチェーントランザクションに署名するために使用され、そのトランザクションがブロックチェーンに記録されている場合、キャロル401は、第1の署名が有効な署名であると仮定し得る(すなわち、署名が有効でなかった場合、トランザクションはブロックチェーンノードによって受け入れられていなかったであろう)。しかしながら、キャロル401は、使用されているロック解除スクリプトが署名チェックを含むことを依然として検証し得る(すなわち、ブロックチェーンノードがトランザクション妥当性確認中に署名に対して署名チェックを実行したことを確認するために)。これを行うために、キャロル401は、使用されたトランザクションのロック解除スクリプトがOP_CHECKSIGスクリプトを含むことをチェックし得る。
アリスの観点から本発明の実施形態を説明する際に上述したように、外部データ項目は、それ自体が、署名、すなわち第2の署名であってもよい。この場合、キャロル402は、例えばアリス401aから、第2のメッセージを取得し、例えば、証明された公開鍵などの、アリス401aによって提供されるかまたは他の方法でアリス401aにリンクされた公開鍵を使用して検証されたときに、第2の署名が有効な署名であることを検証し得る。
アリス401aが、第1の署名を生成するために使用されるエフェメラル秘密鍵シェアを生成するためにソルト値を使用した場合、アリス401aは、ソルト値に対応する公開鍵をキャロル402に提供し得る。次いで、キャロル402は、「ソルト公開鍵」に基づいて、例えば、候補のエフェメラル公開鍵シェアとソルト公開鍵との組合せに基づいて、候補の第1の署名構成要素を生成し得る。上記組合せのx値は、候補の第1の署名構成要素を生成するために使用され得る。一例を以下にさらに提供する。これらの例では、アリス401aはまた、キャロル402に第3の署名および第3のメッセージを提供し得る。キャロル402は、ソルト公開鍵を使用して検証されたときに、第3の署名が有効な署名であることを検証し得る。別のオプションの特徴として、アリス401aは、アリス401aがソルト値を知っていることを検証するためにキャロル402が使用し得るZKPをキャロル402に提供し得る。
以下に、ディーラーを伴わないECDSAしきい値署名で使用されるシークレットシェアにアイデンティティデータを埋め込む具体的な例を説明する。
N人の参加者A1,…,ANのグループは、しきい値署名グループを形成することに同意する。修正されたJVRSS(JVRSS-A)を実行するために必要なデータを生成するために、i∈{1,…,N}に対して、各参加者401が秘密鍵skAi(「主秘密鍵」)と、対応する公開鍵PKAi=skAi・Gとを有すると仮定する。公開鍵PKAiは、証明された公開鍵であってもよいし、証明された公開鍵から導出されてもよい。
グループは、公開されており、後の時点で証明(attestation)に使用される証明メッセージMattest(「第2のメッセージ」)に合意する。各グループメンバ401は、証明メッセージに署名して、「第2の署名」(すなわち、外部データ項目)を生成する:
Figure 2023539432000040
各参加者401はまた、自身の署名の(ダブル)ハッシュ
Figure 2023539432000041
を計算し、これを、生成点を用いて難読化する:
Figure 2023539432000042
署名およびハッシュされたデータは、しきい値秘密分散および証明アルゴリズムの両方で使用される。
N人の参加者間の共有シークレットは、秘密分散方式、例えば、上述したJVRSS法を使用して生成することができる。JVRSS-A変形の場合、アルゴリズムは、ゼロ次(y切片)を規定することによって修正される。以下の修正を加えて、JVRSSのステップ1)~5)に従う。
ステップ1)において、各参加者401は、(値をランダムに選択するのではなく)自身のプライベート多項式のゼロ次を計算する:
Figure 2023539432000043
他のすべての多項式係数はランダムに選択される。
N人の参加者間の共有シークレットの逆数は、上述したINVSS方法を使用して計算することができる。INVSSを使用することで、N個のグループエフェメラル鍵と、2t+1個の逆数シェアを生成することができる。証明セットアップを使用することによって、INVSSは、ID埋込みを組み込むように修正される。これは単に、共有エフェメラル秘密鍵k(むしろ、完全な秘密鍵自体は実際には生成されないので、共有エフェメラル秘密鍵のシェア)を生成するために、参加者401が、通常のJVRSSの代わりにJVRSS-A法を使用するようにするためのものである。
参加者はまた、多項式のゼロ次に対応する公開鍵を使用してマークルツリーを作成する。参加者は、以下のステップを行う。
1.各参加者401は、JVRSS-A法ri0=ki0・Gからの参加者の難読化された係数を使用して、以下のマークルツリーおよび対応するマークルルートRを計算することができ、ここで、各参加者401は、それらの署名の(ダブル)ハッシュに基づいて生成されたそれぞれのデータ項目ki0と、データ項目に対応するそれぞれの公開鍵ri0とを有する。
2.次いで、参加者401は、この値をすべての参加者401にブロードキャストすることによって、全員が同じマークルルートを有することを確認することができる。その後、このマークルルートは、対応するエフェメラル鍵を使用して署名されるメッセージに含まれ得る。
セットアップ:N人の独立した参加者A1,…,ANは、しきい値秘密分散グループへの参加に同意する。その参加者らはまた、将来の証明を可能にするトラストレスセットアップを使用することに同意する。参加者は、N人の参加者のグループのための証明メッセージセットアップを使用するとともに(ri0の和に基づいて)証明メッセージ依存グループエフェメラル鍵rを生成する。証明メッセージが、署名されているトランザクションになることをグループが望む場合、このステップは、一旦メッセージが知られると、署名の作成中に完了される必要があることに留意されたい。
各参加者401は、JVRSSに従って、秘密鍵シェアai=JVRSS(i)を計算する。公開鍵は、プライベート多項式の難読化されたゼロ次値を加算することによって計算される:
Figure 2023539432000044
しきい値公開鍵および秘密鍵シェア導出は修正されないことに留意されたい。秘密鍵シェア導出は、証明なしでJVRSSに従うべきである。
2t+1人の参加者A1,…,A2t+1のサブセットが、PKBに支払うトランザクションに署名したいと望む。
その参加者らは、署名入力の一部として、証明メッセージ依存エフェメラル鍵rを使用して、上述した「非最適署名生成」のステップ1)~7)に従う。代わりに最適な署名生成方法が使用されてもよいことに留意されたい。以下に概要を示す。
すべての署名参加者401がトランザクションTx’threshold(以下の表を参照)について合意する。
Figure 2023539432000045
各参加者401は、メッセージダイジェストe=SHA-256d(Tx’threshold)を計算する。
各参加者401は、署名シェア
Figure 2023539432000046
を計算し、ここで、
Figure 2023539432000047
(それぞれのエフェメラル秘密鍵シェアの逆数)およびr(共有エフェメラル秘密鍵に対応する公開鍵)は、上述した方法を使用して導出される。
コーディネータ404は、署名シェアを収集し、補間する:
Figure 2023539432000048
出力(「第1の署名」)は、[r,s]であり、トランザクションは署名することができる(完全なトランザクションについては以下の表を参照)。
Figure 2023539432000049
参加者A1,…,ANのアイデンティティは、この時点で、エフェメラル鍵rに埋め込まれており、したがって、第1の署名に埋め込まれている。Mattest(これは、提供されてもよいし、公に知られていてもよい)が与えられると、参加者401は、自身がしきい値グループのメンバであることを証明することができる。
アリス401aが、秘密アイデンティティ鍵skA1を有する参加者A1であると仮定する。値Mattestは公開されており、アリス401aは、第2の署名を生成することができる:
Figure 2023539432000050
グループ公開エフェメラル鍵rを生成するためのアルゴリズムを実行した結果、アリスはまた、各データ項目に対応する公開鍵
Figure 2023539432000051
と、Txthresholdに埋め込まれる対応するマークルルートRとを保持する。
検証者402は、第1の署名[r,s]を有するTxthresholdおよび参加者の数Nを知る。
証明プルーフを実行するために、アリス401aは、最初に、検証者であるキャロル402に下記を提供する:
Figure 2023539432000052
キャロル(検証者)は、候補のエフェメラル公開鍵(x構成要素およびy構成要素を含む)を計算する:
Figure 2023539432000053
また、候補のエフェメラル公開鍵のx構成要素に基づいて候補の第1の署名構成要素を計算する:
Figure 2023539432000054
そして、r’=rであること(すなわち、候補の第1の署名構成要素が第1の署名構成要素と一致すること)をチェックする。
キャロルはまた、[r,s]が、グループ公開鍵PK(ここで、PK=a.Gである)を使用して妥当性確認されたときに、有効な署名であることを検証する。
以下では、マークルプルーフ証明について説明する。キャロル402はマークルルートRを知っていると仮定する。アリスは、マークルプルーフを生成して、
Figure 2023539432000055
が、Rによって表される集合の要素であることを立証する。アリス401aは、セットアップ中に他のグループメンバからすべてのエフェメラル鍵シェアを受信し終わっているので、マークルツリー全体を再生成してプルーフを生成することができることに留意されたい。
検証者がすべての参加者を訪ね、共有エフェメラル秘密鍵kを作成するのに十分な情報を入手し、次いで、その結果を署名とともに使用して共有秘密鍵を導出するという攻撃がある。これを防止するために、アリス401aは、秘密のソルト値を含めることができる。明示的に、ゼロ次の参加者iのエフェメラル鍵は以下のように設定され得る:
Figure 2023539432000056
次いで、アリス401aは、ゼロ知識証明を提供することによって、またはwで生成された署名を提供することによって、これの知識を証明することができる。このソルトは秘密にしておくべきである。
この方法は、メッセージがトランザクションであることに関連して説明されているが、署名が行われるメッセージは、これに限定される必要はないことに留意されたい。
以下は、説明される方法のいくつかのセキュリティ面の考察である。
エフェメラル鍵シェアkA1をマスクするためのソルト値の使用は、スプーフィング攻撃に対する保護として機能する。仮にエフェメラル鍵が第1のトランザクション署名のみに依存する場合(追加のランダム性なし)、敵対者は、アリス(証明者)から受信した情報を単に保持することによって他者にプルーフをリプレイすることが可能であり得、元のトランザクション署名者を、プルーフを見ただけの人と区別することを困難にする。
署名対署名マップにおいて1回限りのシークレット値の使用を採用することで、すべての秘密鍵が安全であるだけでなく、敵対者がアリス401aになりすますために取得したいかなる情報も使用することができないことが保証される。したがって、この方法は、キャロル(検証者)402が正直な当事者であることも信頼できる当事者であることも必要としない。
しきい値署名者プルーフは、マークルプルーフが提供されない限り、スプーフィングに対して脆弱であり得る。マークルプルーフが証明の一部として含まれていない場合、および証明メッセージが公に知られている場合、非グループメンバは、プルーフデータをリバースエンジニアリングすることができる。
イブ(盗聴者)が、(x’,y’)(ここで、r’=x’ mod n)と、グループ証明メッセージMattestとを知っている場合、イブは、自分自身の秘密鍵skEを取って、署名
Figure 2023539432000057
を生成することができる。
次いで、イブは、U=(x’,y’)-SHA256d([rE,sE])・Gを計算することができ、Uを部分U1,U2,…,UN-1(ここで、U=U1+…+UNである)に自明に分割する。
イブは、計算されたデータを使用して、自身がグループ署名イベントの参加者であったと装うことができる。実際のグループ署名者から秘密情報が漏洩することはないが、第三者が、グループ署名イベントに参加したと装うことはできる。
グループによって署名されたメッセージにマークルルートを含めることによって、このスプーフィングが不可能になる。
結論
開示された技法の他の変形または使用事例は、本明細書の開示が与えられると、当業者には明らかになり得る。本開示の範囲は、記載された実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。
例えば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上記の説明は一般に任意のブロックチェーンに適用され得ることが理解されよう。すなわち、本発明は、決してビットコインブロックチェーンに限定されるものではない。より一般的には、ビットコインネットワーク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.デジタル署名のシェアを生成するコンピュータ実装方法であって、参加者のグループの各参加者は、第1の共有秘密鍵のそれぞれのシェアを有し、方法は、グループの第1の参加者によって実行され、
第1のメッセージを取得することと、
少なくとも第1の外部データ項目のハッシュに基づいて第1のデータ項目を生成することと、
エフェメラル秘密鍵の第1のエフェメラル秘密鍵シェアを生成することであって、第1のエフェメラル秘密鍵シェアは、第1のデータ項目と、各他の参加者によって生成されたそれぞれのデータ項目とに基づいて生成される、ことと、
エフェメラル秘密鍵に対応するエフェメラル公開鍵を生成することと、
第1のメッセージと、第1のエフェメラル秘密鍵シェアと、第1の共有秘密鍵の第1のシェアと、エフェメラル公開鍵とに基づいて、第1の署名シェアを生成することと、
少なくともしきい値数のそれぞれの署名シェアに基づいて第1の署名を生成するために、第1の署名シェアをコーディネータが利用できるようにすることと
を含む方法。
外部データ項目は、第1の当事者の識別子、例えば、名前、住所、電話番号、国民保険番号、パスポート番号、公開鍵などを含み得る。
好ましくは、第1の署名は、ECDSA署名である。「エフェメラル公開鍵」は、「エフェメラル公開鍵のx構成要素」の省略表現として使用される。
好ましくは、各他の参加者は、同じ方法で、それぞれの外部データ項目に基づいて、それぞれのエフェメラル公開鍵シェアを生成する。
ステートメント2.第1のエフェメラル秘密鍵シェアを生成することは、他の参加者の各々との秘密分散方式を実行することを含む、ステートメント1に記載の方法。
ステートメント3.秘密分散方式は、共同検証可能秘密分散(JVRSS)方式である、ステートメント2に記載の方法。
より正確には、秘密分散方式は、各参加者がランダムな多項式係数を生成する代わりに、各参加者が第1の外部データ項目のハッシュとしてゼロ次係数を設定するJVRSS方式の修正バージョンであり得る。ランダムな多項式係数は、真にランダムまたは擬似ランダムであり得る(例えば、任意に選択され得る)。
ステートメント4.第1のデータ項目は、第1の多項式のゼロ次係数であり、JVRSS方式は、
第1の多項式のそれぞれのインスタンスを他の参加者の各々に送信することであって、第1の多項式のそれぞれのインスタンスは、それぞれの参加者のそれぞれのインデックスに基づいて生成される、ことと、
各他の参加者からそれぞれの多項式を取得することであって、それぞれの多項式は、第1の参加者のそれぞれのインデックスと、他の参加者によって生成されたそれぞれのデータ項目とに基づいて生成される、ことと
を含む、ステートメント3に記載の方法。
ステートメント5.エフェメラル秘密鍵に対応するエフェメラル公開鍵を生成することは、
第1のデータ項目に対応する第1の公開鍵を生成することと、
各他の参加者から、その他の参加者によって生成されたそれぞれのデータ項目に対応するそれぞれの公開鍵を取得することと、
を含む、先行ステートメントのいずれかに記載の方法。
ステートメント6.第1の参加者が第1の署名を生成したことを証明するために、第1の外部データ項目と、それぞれのデータ項目に対応する取得されたそれぞれの公開鍵とを検証当事者が利用できるようにすることを含む、ステートメント5に記載の方法。
ステートメント7.第1のメッセージを取得することは、第1のメッセージを生成することを含み、方法は、第1のメッセージを検証当事者が利用できるようにすることを含む、先行ステートメントのいずれかに記載の方法。
ステートメント8.
第2のメッセージを取得することと、
少なくとも第2のメッセージと第1の参加者の主秘密鍵とに基づいて第2の署名を生成することと
を含み、外部データ項目は第2の署名を含む、
先行ステートメントのいずれかに記載の方法。
ステートメント9.各参加者は、同じ第2のメッセージに基づいて、それぞれの外部データ項目を生成する、ステートメント8に記載の方法。
ステートメント10.第1の参加者の主秘密鍵は、第1の参加者のアイデンティティにリンクされた主公開鍵に対応する、ステートメント8またはステートメント9に記載の方法。
ステートメント11.第1の共有秘密鍵の第1のシェアは、秘密分散方式を使用して生成される、先行ステートメントのいずれかに記載の方法。
例えば、JVRSSである。
ステートメント12.第1の参加者はコーディネータであり、方法は、
少なくともしきい値数のそれぞれの署名シェアを受信することと、
第1の署名構成要素および第2の署名構成要素を含む第1の署名を生成することと
を含み、第1の署名構成要素は、エフェメラル公開鍵に基づいて生成され、第2の署名構成要素は、少なくともしきい値数のそれぞれの署名シェアに基づいて生成される、先行ステートメントのいずれかに記載の方法。
ステートメント13.第1のデータ項目は、ランダムソルト値に基づいて生成される、先行ステートメントのいずれかに記載の方法。
ステートメント14.方法は、ランダムソルト値の知識を証明するためのゼロ知識証明を検証当事者に提供することを含む、ステートメント13に記載の方法。
ステートメント15.ランダムソルト値は秘密鍵であり、方法は、
第3のメッセージを取得することと、
少なくともランダムソルト値と第3のメッセージとに基づいて第3の署名を生成することと、
ランダムソルト値に対応する公開鍵を使用して検証されたときに、第3の署名が第3のメッセージの有効な署名であることを証明するために、第3の署名と、第3のメッセージと、ランダムソルト値に対応する公開鍵とを検証当事者が利用できるようにすることと
を含む、ステートメント13またはステートメント14に記載の方法。
ステートメント16.第3のメッセージは第2のメッセージを含む、ステートメント15に記載の方法。
例えば、第3のメッセージは、第2のメッセージと同じであってもよい。
ステートメント17.
ハッシュツリーのルートハッシュを生成することであって、それぞれのデータ項目に対応する各それぞれの公開鍵が、ハッシュツリーのそれぞれのリーフハッシュを生成するためにハッシュされる、ことと、
ハッシュツリーのルートを参加者のうちの1つまたは複数および/または検証当事者に送信することと
を含む、先行ステートメントのいずれかに記載の方法。
ステートメント18.第1のデータ項目に対応する第1の公開鍵がハッシュツリーの要素であることを検証するために、ハッシュプルーフを検証当事者に送信することを含む、ステートメント15に記載の方法。
好ましくは、ハッシュツリーはマークルツリーであり、ハッシュルートはマークルルートであり、ハッシュプルーフはマークルプルーフである。
ステートメント19.第1のメッセージは、ブロックチェーントランザクションの少なくとも一部を含む、先行ステートメントのいずれかに記載の方法。
例えば、第1の署名は、ブロックチェーントランザクションに署名するために使用され得る。
ステートメント20.ブロックチェーントランザクションはハッシュルートを含む、ステートメント18およびステートメント19の方法。
ステートメント21.ブロックチェーントランザクションは、第1の署名を含む、ステートメント19またはステートメント20に記載の方法。
ステートメント22.第1のメッセージを検証当事者が利用できるようにすることは、ブロックチェーントランザクションをブロックチェーンネットワークに送信することを含む、ステートメント19から21のいずれかに記載の方法。
ステートメント23.外部データ項目のハッシュは、外部データ項目のダブルハッシュである、先行ステートメントのいずれかに記載の方法。
ステートメント24.デジタル署名が第1の参加者によって部分的に生成されたことを検証するコンピュータ実装方法であって、方法は、検証当事者によって実行され、
第1の署名構成要素および第2の署名構成要素を含む第1の署名を取得することと、
第1の参加者からの候補の第1の外部データ項目と、それぞれのデータ項目に対応する1つまたは複数のそれぞれの公開鍵とを、他の参加者ごとに1つずつ取得することと、
候補の第1の外部データ項目のハッシュに基づいて候補の公開鍵を生成することと、
候補の公開鍵と、取得された1つまたは複数の公開鍵とに基づいて、候補のエフェメラル公開鍵を生成することと、
候補のエフェメラル公開鍵に基づいて候補の第1の署名構成要素を生成することと、
候補の第1の署名構成要素が第1の署名構成要素に対応するかどうかに基づいて、第1の署名が第1の参加者によって部分的に生成されたことを検証することと
を含む方法。
ステートメント25.第1の署名は第1のメッセージに署名し、方法は、
第1の署名を生成するために使用された共有秘密鍵に対応する共有公開鍵を取得することと、
第1の公開鍵を使用して検証されたときに、第1の署名が第1のメッセージの有効な署名であることを検証することと
を含む、ステートメント24に記載の方法。
ステートメント26.候補の外部データ項目は第2の署名である、ステートメント24またはステートメント25に記載の方法。
ステートメント27.第2の署名は第2のメッセージに署名し、方法は、
第2の署名を生成するために使用された秘密鍵に対応する第2の公開鍵を取得することと、
第2の公開鍵を使用して検証されたときに、第2の署名が第2のメッセージの有効な署名であることを検証することと
を含む、ステートメント24から26のいずれかに記載の方法。
ステートメント28.候補の公開鍵は、ランダムソルト値に基づいて生成され、方法は、
ランダムソルト値の知識を証明するためのゼロ知識証明を受信することと、
第1の参加者がランダムソルト値の知識を有することを検証することと
を含む、ステートメント24またはステートメント27に記載の方法。
ステートメント29.候補の公開鍵は、ランダムソルト値に基づいて生成され、方法は、
第3のメッセージを取得することと、
第3の署名を取得することと、
ランダムソルト値に対応する公開鍵を使用して検証されたときに、第3の署名が第3のメッセージの有効な署名であることを検証することと
を含む、ステートメント24から28のいずれかに記載の方法。
ステートメント30.
ハッシュプルーフおよびハッシュルートを取得することであって、第1のメッセージはハッシュルートを含む、ことと、
ハッシュプルーフに基づいて、候補の第1のエフェメラル公開鍵シェアが、ハッシュルートを含むハッシュツリーの要素であることを検証することと
を含む、ステートメント24から29のいずれかに記載の方法。
ステートメント31.第1の署名は、第1の当事者から受信される、ステートメント24から30のいずれかに記載の方法。
ステートメント32.第1のメッセージは、第1の参加者から受信される、ステートメント24から31のいずれかに記載の方法。
ステートメント33.第1のメッセージは、検証当事者によって生成される、ステートメント24から31のいずれかに記載の方法。
ステートメント34.第1のメッセージは、ブロックチェーントランザクションの少なくとも一部を含む、ステートメント24から33のいずれかに記載の方法。
ステートメント35.第1のメッセージを取得することは、ブロックチェーンからブロックチェーントランザクションを取得することを含む、ステートメント34に記載の方法。
ステートメント36.第1の署名を取得することは、ブロックチェーントランザクションから第1の署名を抽出することを含む、ステートメント35に記載の方法。
ステートメント37.ブロックチェーントランザクションの入力は、第1の署名を含み、方法は、
ブロックチェーントランザクションの入力によって参照される前のブロックチェーントランザクションの出力が署名検証スクリプトを含むことを検証すること
を含む、ステートメント33から36のいずれかに記載の方法。
ステートメント38.コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置と、
を備え、メモリは、処理装置上で実行されるように構成されたコードを記憶し、コードは、処理装置上にあるときに、ステートメント1から37のいずれかに記載の方法を実行するように構成される、
コンピュータ機器。
ステートメント39.コンピュータ可読ストレージ上に具現化されたコンピュータプログラムであって、1つまたは複数のプロセッサ上で実行されると、ステートメント1から37のいずれかに記載の方法を実行するように構成されたコンピュータプログラム。
本明細書で開示される別の態様によれば、第1の参加者および検証当事者のアクションを含む方法が提供され得る。
本明細書で開示される別の態様によれば、第1の参加者および検証当事者のコンピュータ機器を備えるシステムが提供され得る。

Claims (39)

  1. デジタル署名のシェアを生成するコンピュータ実装方法であって、参加者のグループの各参加者は、第1の共有秘密鍵のそれぞれのシェアを有し、前記方法は、前記グループの第1の参加者によって実行され、
    第1のメッセージを取得することと、
    少なくとも第1の外部データ項目のハッシュに基づいて第1のデータ項目を生成することと、
    エフェメラル秘密鍵の第1のエフェメラル秘密鍵シェアを生成することであって、前記第1のエフェメラル秘密鍵シェアは、前記第1のデータ項目と、各他の参加者によって生成されたそれぞれのデータ項目とに基づいて生成される、ことと、
    前記エフェメラル秘密鍵に対応するエフェメラル公開鍵を生成することと、
    前記第1のメッセージと、前記第1のエフェメラル秘密鍵シェアと、前記第1の共有秘密鍵の第1のシェアと、前記エフェメラル公開鍵とに基づいて、第1の署名シェアを生成することと、
    少なくともしきい値数のそれぞれの署名シェアに基づいて第1の署名を生成するために、前記第1の署名シェアをコーディネータが利用できるようにすることと
    を含む方法。
  2. 前記第1のエフェメラル秘密鍵シェアを生成することは、前記他の参加者の各々との秘密分散方式を実行することを含む、請求項1に記載の方法。
  3. 前記秘密分散方式は、共同検証可能秘密分散(JVRSS)方式である、請求項2に記載の方法。
  4. 前記第1のデータ項目は、第1の多項式のゼロ次係数であり、前記JVRSS方式は、
    前記第1の多項式のそれぞれのインスタンスを前記他の参加者の各々に送信することであって、前記第1の多項式の前記それぞれのインスタンスは、前記それぞれの参加者のそれぞれのインデックスに基づいて生成される、ことと、
    各他の参加者からそれぞれの多項式を取得することであって、前記それぞれの多項式は、前記第1の参加者のそれぞれのインデックスと、前記他の参加者によって生成された前記それぞれのデータ項目とに基づいて生成される、ことと
    を含む、請求項3に記載の方法。
  5. 前記エフェメラル秘密鍵に対応する前記エフェメラル公開鍵を生成することは、
    前記第1のデータ項目に対応する第1の公開鍵を生成することと、
    各他の参加者から、その他の参加者によって生成された前記それぞれのデータ項目に対応するそれぞれの公開鍵を取得することと
    を含む、請求項1から4のいずれか一項に記載の方法。
  6. 前記第1の参加者が前記第1の署名を生成したことを証明するために、前記第1の外部データ項目と、前記それぞれのデータ項目に対応する前記取得されたそれぞれの公開鍵とを検証当事者が利用できるようにすることを含む、請求項5に記載の方法。
  7. 前記第1のメッセージを取得することは、前記第1のメッセージを生成することを含み、前記方法は、前記第1のメッセージを前記検証当事者が利用できるようにすることを含む、請求項1から6のいずれか一項に記載の方法。
  8. 第2のメッセージを取得することと、
    少なくとも前記第2のメッセージと前記第1の参加者の主秘密鍵とに基づいて第2の署名を生成することと
    を含み、前記外部データ項目は前記第2の署名を含む、
    請求項1から7のいずれか一項に記載の方法。
  9. 各参加者は、同じ第2のメッセージに基づいて、それぞれの外部データ項目を生成する、請求項8に記載の方法。
  10. 前記第1の参加者の前記主秘密鍵は、前記第1の参加者のアイデンティティにリンクされた主公開鍵に対応する、請求項8または9に記載の方法。
  11. 前記第1の共有秘密鍵の前記第1のシェアは、秘密分散方式を使用して生成される、請求項1から10のいずれか一項に記載の方法。
  12. 前記第1の参加者は前記コーディネータであり、前記方法は、
    少なくとも前記しきい値数のそれぞれの署名シェアを受信することと、
    第1の署名構成要素および第2の署名構成要素を含む前記第1の署名を生成することと
    を含み、前記第1の署名構成要素は、前記エフェメラル公開鍵に基づいて生成され、前記第2の署名構成要素は、少なくとも前記しきい値数のそれぞれの署名シェアに基づいて生成される、請求項1から11のいずれか一項に記載の方法。
  13. 前記第1のデータ項目は、ランダムソルト値に基づいて生成される、請求項1から12のいずれか一項に記載の方法。
  14. 前記方法は、前記ランダムソルト値の知識を証明するためのゼロ知識証明を前記検証当事者に提供することを含む、請求項13に記載の方法。
  15. 前記ランダムソルト値は秘密鍵であり、前記方法は、
    第3のメッセージを取得することと、
    少なくとも前記ランダムソルト値と前記第3のメッセージとに基づいて第3の署名を生成することと、
    前記ランダムソルト値に対応する前記公開鍵を使用して検証されたときに、前記第3の署名が前記第3のメッセージの有効な署名であることを証明するために、前記第3の署名と、前記第3のメッセージと、前記ランダムソルト値に対応する公開鍵とを前記検証当事者が利用できるようにすることと
    を含む、請求項13または14に記載の方法。
  16. 前記第3のメッセージは前記第2のメッセージを含む、請求項15に記載の方法。
  17. ハッシュツリーのルートハッシュを生成することであって、前記それぞれのデータ項目に対応する各それぞれの公開鍵が、前記ハッシュツリーのそれぞれのリーフハッシュを生成するためにハッシュされる、ことと
    前記ハッシュツリーの前記ルートを前記参加者のうちの1つまたは複数および/または前記検証当事者に送信することと
    請求項1から16のいずれか一項に記載の方法。
  18. 前記第1のデータ項目に対応する前記第1の公開鍵が前記ハッシュツリーの要素であることを検証するために、ハッシュプルーフを前記検証当事者に送信することを含む、請求項15に記載の方法。
  19. 前記第1のメッセージは、ブロックチェーントランザクションの少なくとも一部を含む、請求項1から18のいずれか一項に記載の方法。
  20. 前記ブロックチェーントランザクションは前記ハッシュルートを含む、請求項18および19に記載の方法。
  21. 前記ブロックチェーントランザクションは、前記第1の署名を含む、請求項19または20に記載の方法。
  22. 前記第1のメッセージを前記検証当事者が利用できるようにすることは、前記ブロックチェーントランザクションを前記ブロックチェーンネットワークに送信することを含む、請求項19から21のいずれか一項に記載の方法。
  23. 前記外部データ項目の前記ハッシュは、前記外部データ項目のダブルハッシュである、請求項1から22のいずれか一項に記載の方法。
  24. デジタル署名が第1の参加者によって部分的に生成されたことを検証するコンピュータ実装方法であって、前記方法は、検証当事者によって実行され、
    第1の署名構成要素および第2の署名構成要素を含む第1の署名を取得することと、
    前記第1の参加者からの候補の第1の外部データ項目と、それぞれのデータ項目に対応する1つまたは複数のそれぞれの公開鍵とを、他の参加者ごとに1つずつ取得することと、
    前記候補の第1の外部データ項目のハッシュに基づいて候補の公開鍵を生成することと、
    前記候補の公開鍵と、前記取得された1つまたは複数の公開鍵とに基づいて、候補のエフェメラル公開鍵を生成することと、
    前記候補のエフェメラル公開鍵に基づいて候補の第1の署名構成要素を生成することと、
    前記候補の第1の署名構成要素が前記第1の署名構成要素に対応するかどうかに基づいて、前記第1の署名が前記第1の参加者によって部分的に生成されたことを検証することと
    を含む方法。
  25. 前記第1の署名は第1のメッセージに署名し、前記方法は、
    前記第1の署名を生成するために使用された共有秘密鍵に対応する共有公開鍵を取得することと、
    前記第1の公開鍵を使用して検証されたときに、前記第1の署名が前記第1のメッセージの有効な署名であることを検証することと
    請求項24に記載の方法。
  26. 前記候補の外部データ項目は第2の署名である、請求項24または25に記載の方法。
  27. 前記第2の署名は第2のメッセージに署名し、前記方法は、
    前記第2の署名を生成するために使用された秘密鍵に対応する第2の公開鍵を取得することと、
    前記第2の公開鍵を使用して検証されたときに、前記第2の署名が前記第2のメッセージの有効な署名であることを検証することと
    を含む、請求項24から26のいずれか一項に記載の方法。
  28. 前記候補の公開鍵は、ランダムソルト値に基づいて生成され、前記方法は、
    前記ランダムソルト値の知識を証明するためのゼロ知識証明を受信することと、
    前記第1の参加者が前記ランダムソルト値の知識を有することを検証することと
    を含む、請求項24または27に記載の方法。
  29. 前記候補の公開鍵は、ランダムソルト値に基づいて生成され、前記方法は、
    第3のメッセージを取得することと、
    第3の署名を取得することと、
    前記ランダムソルト値に対応する公開鍵を使用して検証されたときに、前記第3の署名が前記第3のメッセージの有効な署名であることを検証することと
    を含む、請求項24から28のいずれか一項に記載の方法。
  30. ハッシュプルーフおよびハッシュルートを取得することであって、前記第1のメッセージは前記ハッシュルートを含む、ことと、
    前記ハッシュプルーフに基づいて、前記候補の第1のエフェメラル公開鍵シェアが、前記ハッシュルートを含むハッシュツリーの要素であることを検証することと
    を含む、請求項24から29のいずれか一項に記載の方法。
  31. 前記第1の署名は、前記第1の当事者から受信される、請求項24から30のいずれか一項に記載の方法。
  32. 前記第1のメッセージは、前記第1の参加者から受信される、請求項24から31のいずれか一項に記載の方法。
  33. 前記第1のメッセージは、前記検証当事者によって生成される、請求項24から31のいずれか一項に記載の方法。
  34. 前記第1のメッセージは、ブロックチェーントランザクションの少なくとも一部を含む、請求項24から33のいずれか一項に記載の方法。
  35. 前記第1のメッセージを取得することは、前記ブロックチェーンから前記ブロックチェーントランザクションを取得することを含む、請求項34に記載の方法。
  36. 前記第1の署名を取得することは、前記ブロックチェーントランザクションから前記第1の署名を抽出することを含む、請求項35に記載の方法。
  37. 前記ブロックチェーントランザクションの入力は、前記第1の署名を含み、前記方法は、
    前記ブロックチェーントランザクションの前記入力によって参照される前のブロックチェーントランザクションの出力が署名検証スクリプトを含むことを検証すること
    を含む、請求項33から36のいずれか一項に記載の方法。
  38. コンピュータ機器であって、
    1つまたは複数のメモリユニットを備えるメモリと、
    1つまたは複数の処理ユニットを備える処理装置と
    を備え、前記メモリは、前記処理装置上で実行されるように構成されたコードを記憶し、前記コードは、前記処理装置上にあるときに、請求項1から37のいずれか一項に記載の方法を実行するように構成される、
    コンピュータ機器。
  39. コンピュータ可読ストレージ上に具現化されたコンピュータプログラムであって、1つまたは複数のプロセッサ上で実行されると、請求項1から37のいずれか一項に記載の方法を実行するように構成されたコンピュータプログラム。
JP2023507541A 2020-08-18 2021-07-19 しきい値署名 Pending JP2023539432A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2012874.0A GB2598112A (en) 2020-08-18 2020-08-18 Threshold signatures
GB2012874.0 2020-08-18
PCT/EP2021/070124 WO2022037869A1 (en) 2020-08-18 2021-07-19 Threshold signatures

Publications (1)

Publication Number Publication Date
JP2023539432A true JP2023539432A (ja) 2023-09-14

Family

ID=72615433

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023507541A Pending JP2023539432A (ja) 2020-08-18 2021-07-19 しきい値署名

Country Status (6)

Country Link
US (1) US20230308287A1 (ja)
EP (1) EP4169206A1 (ja)
JP (1) JP2023539432A (ja)
CN (1) CN115885498A (ja)
GB (1) GB2598112A (ja)
WO (1) WO2022037869A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113094675B (zh) * 2021-04-29 2023-03-28 香港中文大学(深圳) 基于分布式模型训练的用户认证方法及装置
US11902451B2 (en) * 2021-07-01 2024-02-13 Fujitsu Limited Cross-blockchain identity and key management
CN115412260B (zh) * 2022-08-30 2023-10-20 云海链控股股份有限公司 Sm2门限签名方法、系统、设备及计算机可读存储介质
CN116915416B (zh) * 2023-09-14 2023-12-15 北京信安世纪科技股份有限公司 一种证书签名方法、装置以及一种证书获取方法、装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
LT3268914T (lt) * 2016-02-23 2018-11-12 nChain Holdings Limited Bendros paslapties, skirtos saugiems informacijos mainams, nustatymas ir hierarchiniai determinuoti kriptografiniai raktai
JP7202358B2 (ja) * 2017-08-15 2023-01-11 エヌチェーン ライセンシング アーゲー 閾ボールトを生成する、コンピュータにより実施される方法
GB201805633D0 (en) * 2018-04-05 2018-05-23 Nchain Holdings Ltd Computer implemented method and system

Also Published As

Publication number Publication date
GB2598112A (en) 2022-02-23
CN115885498A (zh) 2023-03-31
GB202012874D0 (en) 2020-09-30
WO2022037869A1 (en) 2022-02-24
US20230308287A1 (en) 2023-09-28
EP4169206A1 (en) 2023-04-26

Similar Documents

Publication Publication Date Title
JP7371015B2 (ja) ブロックチェーンを使って原子的スワップを実行するためのコンピュータ実装されるシステムおよび方法
JP2023539432A (ja) しきい値署名
JP2023504535A (ja) アイデンティティ(id)ベース公開鍵生成プロトコル
CN113875186A (zh) 知识证明
JP2022534056A (ja) ハッシュ関数攻撃
WO2020240293A1 (en) Blockchain transaction comprising runnable code for hash-based verification
WO2021176283A1 (en) Method of generating a public key
WO2020240289A1 (en) Knowledge proof
TW202231018A (zh) 識別阻斷服務攻擊之技術
US20230308292A1 (en) Digital signatures
TW202232913A (zh) 共享金鑰產生技術
US20230134619A1 (en) Method of generating a hash-based message authentication code
KR20230002941A (ko) 비밀 공유를 갖는 (ec)dsa 임계값 서명
WO2023208809A1 (en) Non-native blockchain signatures
WO2024041862A1 (en) Blockchain transaction
TW202345545A (zh) 用於證明與驗證子金鑰真實性之技術
WO2024110170A1 (en) Communication protocol
WO2023156105A1 (en) Blockchain transaction
CN117941317A (zh) 生成区块链事务
WO2023036548A1 (en) Signature verification
WO2024002756A1 (en) Proof of ownership
WO2023117274A1 (en) Signature-based atomic swap
WO2024052065A1 (en) Determining shared secrets using a blockchain
CN117121434A (zh) 区块链实现的散列函数