(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-12
(54)【発明の名称】ブロックチェーントランザクションの生成
(51)【国際特許分類】
H04L 9/32 20060101AFI20240905BHJP
【FI】
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024515062
(86)(22)【出願日】2022-08-15
(85)【翻訳文提出日】2024-03-07
(86)【国際出願番号】 EP2022072787
(87)【国際公開番号】W WO2023041270
(87)【国際公開日】2023-03-23
(32)【優先日】2021-09-14
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】アンマール,バッセム
(72)【発明者】
【氏名】ライト,クレイグ,スティーヴン
(57)【要約】
ブロックチェーントランザクションを生成するコンピュータ実装方法である。ここで、複数の第2当事者の各当事者は、それぞれのr部分を導出可能なそれぞれの秘密番号kを有し、マークルツリーが定義されており、前記マークルツリーの少なくとも1つのリーフノードは、前記それぞれのr部分のうち少なくとも1つに基づいている。前記方法は、第1当事者によって実行され、かつ、第1ブロックチェーントランザクションを生成するステップであり、前記第1ブロックチェーントランザクションは、前記マークルツリーに対応しているターゲットマークルツリー部分を含んでいる、第1ロッキングスクリプトを含み、前記第1ロッキングスクリプトは、第2ブロックチェーントランザクションの第1アンロッキングスクリプトと共に実行されると、前記第1アンロッキングスクリプトからr部分を抽出し、前記抽出されたr部分から導出されるハッシュ値を生成し、前記生成されたハッシュおよび前記第1アンロッキングスクリプトのマークルプルーフ部分に基づいて、候補マークルツリー部分を計算し、前記計算された候補マークルツリー部分が、前記ターゲットマークルツリー部分に一致することを検証し、前記第1アンロッキングスクリプトの公開鍵に基づいて、前記第1アンロッキングスクリプトの署名部分を検証する、ように構成されているステップ、および、前記第1ブロックチェーントランザクションを、ブロックチェーンネットワークの1つ以上のノードに利用可能にするステップを含む。
【特許請求の範囲】
【請求項1】
ブロックチェーントランザクションを生成するコンピュータ実装方法であって、
複数の第2当事者の各当事者は、それぞれのr部分を導出可能なそれぞれの秘密番号kを有し、
マークルツリーが定義されており、
前記マークルツリーの少なくとも1つのリーフノードは、前記それぞれのr部分のうち少なくとも1つに基づいており、
前記方法は、第1当事者によって実行され、かつ、
第1ブロックチェーントランザクションを生成するステップであり、
前記第1ブロックチェーントランザクションは、前記マークルツリーに対応しているターゲットマークルツリー部分を含んでいる、第1ロッキングスクリプトを含み、
前記第1ロッキングスクリプトは、第2ブロックチェーントランザクションの第1アンロッキングスクリプトと共に実行されると、
前記第1アンロッキングスクリプトからr部分を抽出し、
前記抽出されたr部分から導出されるハッシュ値を生成し、
前記生成されたハッシュおよび前記第1アンロッキングスクリプトのマークルプルーフ部分に基づいて、候補マークルツリー部分を計算し、
前記計算された候補マークルツリー部分が、前記ターゲットマークルツリー部分に一致することを検証し、
前記第1アンロッキングスクリプトの公開鍵に基づいて、前記第1アンロッキングスクリプトの署名部分を検証する、
ように構成されている、
ステップと、
前記第1ブロックチェーントランザクションを、ブロックチェーンネットワークの1つ以上のノードに利用可能にするステップと、
を含む、方法。
【請求項2】
前記r部分は、前記第1アンロッキングスクリプトの前記署名部分の楕円曲線デジタル署名アルゴリズム(ECDSA)シグネチャから抽出され、
前記r部分は、前記ECDSAシグネチャのr部分である、
請求項1に記載の方法。
【請求項3】
前記マークルツリーの各リーフノードは、複数のr部分の組み合わせのハッシュであり、
前記第1ロッキングスクリプトは、前記第1アンロッキングスクリプトから複数のr部分を抽出し、かつ、前記複数のr部分を組み合わせるように構成されており、
前記ハッシュ値は、前記組み合わされた複数のr部分のハッシュである、
請求項2に記載の方法。
【請求項4】
前記r部分は、加法および連結のうち1つを使用して、組み合わされている、
請求項3に記載の方法。
【請求項5】
前記マークルツリーの前記少なくとも1つのリーフノードは、複数のr部分の和のハッシュであり、
前記第1ロッキングスクリプトは、
前記第1アンロッキングスクリプトから複数のr部分を抽出し、前記複数のr部分それぞれは、複数の当事者のうちの1つに対応しており、
抽出された前記複数のr部分の和を計算し、
前記第1アンロッキングスクリプトからr部分合計を抽出し、前記r部分合計は、前記複数のr部分の和であり、
前記計算された前記抽出された複数のr部分の和、および、前記抽出されたr部分合計に基づいて、前記抽出された複数のr部分を検証する、
ように構成されており、
前記複数のr部分および前記r部分合計は、楕円曲線点である、
請求項1に記載の方法。
【請求項6】
前記ハッシュ値は、前記計算された前記抽出された複数のr部分の和、および、前記抽出されたr部分合計のうち1つのハッシュである、
請求項5に記載の方法。
【請求項7】
前記第1ロッキングスクリプトは、さらに、
前記第1アンロッキングスクリプトから、1つ以上の勾配値を抽出し、
前記抽出された1つ以上の勾配値および前記抽出された複数のr部分に基づいて、前記抽出された1つ以上の勾配値それぞれが、前記抽出された複数のr部分のうちの2つの間の勾配に等しいことを検証する、
ように構成されている、請求項5に記載の方法。
【請求項8】
前記勾配値の数は、前記秘密番号kのうちの1つに対応している抽出された複数のr部分の数よりも少ないものである、
請求項7に記載の方法。
【請求項9】
前記第1ロッキングスクリプトは、前記第1アンロッキングスクリプトの複数の署名部分それぞれを検証するように構成されており、
前記複数の署名部分それぞれは、対応する公開鍵を用いて提供され、
前記複数の署名部分それぞれの前記検証は、前記提供された対応する公開鍵に基づいている、
請求項3に記載の方法。
【請求項10】
前記対応する公開鍵は、前記第1アンロッキングスクリプトにおいて提供される、
請求項9に記載の方法。
【請求項11】
前記r部分合計は、前記第1アンロッキングスクリプトの署名部分から抽出される、
請求項5に記載の方法。
【請求項12】
前記マークルツリーの前記少なくとも1つのリーフノードは、複数のr部分の組み合わせのハッシュであり、
前記抽出されたr部分は、前記第1ロッキングスクリプトのマークルツリー部分に対応している前記リーフノードの前記複数のr部分の組み合わせに等しい、
請求項1に記載の方法。
【請求項13】
マークルツリー部分は、前記マークルツリーのマークルルートである、
請求項1に記載の方法。
【請求項14】
マークルツリー部分は、前記マークルルート以外の前記マークルツリーのノードである、
請求項1に記載の方法。
【請求項15】
前記r部分は、楕円曲線点である、
請求項1に記載の方法。
【請求項16】
ブロックチェーントランザクションを生成するコンピュータ実装方法であって、
複数の第2当事者の各当事者は、r部分を導出可能な秘密番号kを有し、
マークルツリーが定義されており、
前記マークルツリーの少なくとも1つのリーフノードは、それぞれの前記r部分のうち少なくとも1つに基づいており、
第1ブロックチェーントランザクションは、前記マークルツリーに対応しているターゲットマークルツリー部分を含み、
第1ロッキングスクリプトは、第2ロックトランザクションの第1アンロッキングスクリプトと共に実行されると、
前記第1アンロッキングスクリプトからr部分を抽出し、
前記抽出されたr部分から導出されるハッシュ値を生成し、
前記生成されたハッシュおよび前記第1アンロッキングスクリプトのマークルプルーフ部分に基づいて、候補マークルツリー部分を計算し、
前記計算された候補マークルツリー部分が、前記第1ロッキングスクリプトの前記ターゲットマークルツリー部分に一致することを検証し、
前記第1アンロッキングスクリプトの公開鍵に基づいて、前記第1アンロッキングスクリプトの署名部分を検証する、
ように構成されており、
前記方法は、前記第2当事者の少なくとも1つによって実行され、かつ、
第2ブロックチェーントランザクションを生成するステップであり、
前記第2ブロックチェーントランザクションは、前記第1ブロックチェーントランザクションの前記第1ロッキングスクリプトおよび前記第1アンロッキングスクリプトを参照する入力を含み、
前記第1アンロッキングスクリプトは、前記マークルプルーフ部分、前記署名部分、および、前記公開鍵を含む、
ステップと、
前記第2ブロックチェーントランザクションを、ブロックチェーンネットワークの1つ以上のノードに対して利用可能にする、ステップと、
を含む、方法。
【請求項17】
前記署名部分は、前記第1アンロッキングスクリプトの前記署名部分の楕円曲線デジタル署名アルゴリズム(ECDSA)シグネチャを含み、
前記r部分は、前記ECDSAシグネチャのr部分である、
請求項16に記載の方法。
【請求項18】
前記r部分は、前記複数の第2当事者の前記秘密番号kから導出された複数のr部分の組合せである、
請求項17に記載の方法。
【請求項19】
前記第1アンロッキングスクリプトは、さらに、前記r部分を含む、
請求項16に記載の方法。
【請求項20】
前記第1アンロッキングスクリプトは、さらに、1つ以上の勾配値を含み、
前記第1アンロッキングスクリプトは、
前記第1アンロッキングスクリプトから前記1つ以上の勾配値を抽出し、かつ、
前記抽出された1つ以上の勾配値、および、前記第1アンロッキングスクリプトから抽出された複数のr部分に基づいて、前記抽出された1つ以上の勾配値それぞれが、抽出された前記複数のr部分のうちの2つの間の勾配に等しいことを検証する、
ように構成されている、
請求項16に記載の方法。
【請求項21】
前記第1アンロッキングスクリプトは、アンロッキングスクリプトから抽出され、かつ、複数の前記秘密番号kのうちの1つに対応するr部分の数より少ない勾配値の数を含む、
請求項20に記載の方法。
【請求項22】
前記r部分は、前記秘密番号に対応する公開鍵から導出される、
請求項1に記載の方法。
【請求項23】
コンピュータ装置であって、
1つ以上のメモリユニットを備えるメモリと、
1つ以上の処理ユニットを備える処理装置と、を含み、
前記メモリは、前記処理装置上で実行されるように構成されたコードを保管しており、
前記コードは、実行されると、請求項1乃至22いずれか一項に記載の方法を前記処理装置に実施させるように構成されている、
コンピュータ装置。
【請求項24】
コンピュータプログラムであって、
コンピュータ可読ストレージ装置に保管されており、かつ、
1つ以上のプロセッサ上で実行されると、請求項1乃至22いずれか一項に記載の方法を実施するように構成されている、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、任意の個人または個人の閾値によってアンロッキングされ得るブロックチェーントランザクションの出力を生成するための方法、および、そうした出力をアンロッキングするためのブロックチェーントランザクションを生成するための方法に関する。
【背景技術】
【0002】
「ブロックチェーン(“blockchain”)」とは、分散データ構造の一形態を指し、そこでは、ブロックチェーンの重複コピーが、分散ピアツーピア(P2P)ネットワーク(以下、「ブロックチェーンネットワーク(“blockchain network”)」と称される)内の複数のノードそれぞれにおいて維持され、そして、広く公開される。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは、1つ以上のトランザクションを含む。各トランザクション、いわゆる「コインベーストランザクション(“coinbase transaction”)」以外のものは、1つ以上のコインベーストランザクションまで1つ以上のブロックに拡がり得る順序で、先行するトランザクションに戻って指し示す。コインベースのトランザクションについては、以下で、さらに説明される。ブロックチェーンネットワークにサブミットされるトランザクションは、新しいブロックに含まれる。新しいブロックは、しばしば、「マイニング(“mining”)」と呼ばれるプロセスによって生成され、このことは、「プルーフオブワーク(“proof of work”)を実行するために競合する複数のノードそれぞれを巻き込み、すなわち、ブロックチェーンの新しいブロックに含まれることを待つ順序付けられ、かつ、検証された保留中(pending)のトランザクションの定義されたセットの表現に基づいて、暗号パズルを解決する。ブロックチェーンはいくつかのノードで削除されてよく、そして、ブロックの公開は単なるブロックヘッダの公開によって達成されることが留意されるべきである。
【0003】
ブロックチェーン内のトランザクションは、以下の目的のうち1つ以上のために使用され得る。デジタル資産(すなわち、デジタルトークンの数)を伝達するため、仮想化された台帳またはレジストリ内のエントリのセットをオーダーするため、タイムスタンプエントリを受け取り、かつ、処理するため、かつ/あるいは、インデックスポインタを時間順(time-order)にするため、である。ブロックチェーンは、また、ブロックチェーンの上に追加的な機能性を積み重ねる(layer)ために使用することもできる。例えば、ブロックチェーンプロトコルは、トランザクション内のデータに対する追加的なユーザデータまたはインデックスのストレージを可能にする。単一トランザクション内に保管できる最大データ容量について事前に規定された制限は存在せず、そして、従って、ますます、より複雑なデータを組み込むことができる。例えば、このことは、ブロックチェーン内の電子文書、もしくは、オーディオまたはビデオデータを保管するために使用され得る。
【0004】
ブロックチェーンネットワークのノード(しばしば、「マイナ(“miners”)」と称されるもの)は、分散トランザクション登録および検証プロセスを実行する。これについては、以降に、より詳しく説明される。要約すると、このプロセスの最中に、ノードは、トランザクションを検証し、そして、有効なプルーフオブワークソリューションを識別しようと試みるブロックテンプレートの中へそれらを挿入する。一旦、有効なソリューションが見つかると、新しいブロックがネットワークの他のノードへ伝搬され、従って、各ノードが新しいブロックをブロックチェーンに記録できるようになる。ブロックチェーン内にトランザクションを記録させるために、ユーザ(例えば、ブロックチェーンクライアントアプリケーション)は、伝搬されるネットワークのノードの1つにトランザクションを送信する。トランザクションを受信するノードは、検証されたトランザクションを新しいブロックに組み込むプルーフオブワークソリューションを見つけるために競争し得る。各ノードは、同じノードプロトコルを実施するように設定されおり、プロトコルは、トランザクションが有効であるための1つ以上の条件を含んでいる。無効なトランザクションは、ブロックに伝搬されず、また、組み込まれもしない。トランザクションが検証されており、そして、それによってブロックチェーンに受け入れられたと仮定すると、トランザクション(任意のユーザデータを含む)は、ブロックチェーンネットワーク内のノードそれぞれにおいて不変的な公的レコードとして登録され、そして、インデックス付けされたままとなる。
【0005】
最新のブロックを作成するためにプルーフオブワークパズルを成功裡に解決したノードは、典型的に、デジタル資産の総額、すなわち、トークンの数、を配布する「コインベーストランザクション(“coinbase transaction”)」と呼ばれる新しいトランザクションで報酬を受け取る。無効なトランザクションの検出と拒否は、ネットワークのエージェントとして動作し、かつ、不正行為を報告し、ブロッキングするようにインセンティブを持つ競合ノードの動作によって実施される。情報が広く公開されることにより、ユーザは、ノードのパフォーマンスを継続的に監査することができる。単なるブロックヘッダの公開により、参加者は、ブロックチェーンの進行中の完全性(integrity)を保証することができる。
【0006】
「出力ベース(“output-based”)」モデル(ときどき、UTXOベースモデルと称されるもの)において、所与のトランザクションのデータ構造は、1つ以上の入力および1つ以上の出力を含んでいる。任意の支出可能な出力は、トランザクションの先行するシーケンスカラ導き出せるデジタル資産の総額を指定する要素を含んでいる。使用可能な出力は、ときどき、UTXO(「未使用トランザクション出力(“unspent transaction output”)」)と称される。出力は、さらに、出力の将来の償還(redemption)のための条件を指定するロッキングスクリプトを含み得る。ロッキングスクリプトは、デジタルトークンまたは資産を検証し、かつ、移転するために必要な条件を定義する述部(predicate)である。トランザクションの各入力(コインベーストランザクション以外のもの)は、先行するトランザクションにおけるそうした出力に対するポインタ(すなわち、参照)を含み、そして、さらに、指し示された出力のロッキングスクリプトを解除するためのアンロッキングスクリプトを含み得る。よって、トランザクションのペアについて、第1および第2トランザクション(または「ターゲット(“target”)」トランザクション)と呼ぶ。第1トランザクションは、デジタル資産の総額を指定する少なくとも1つの出力を含み、そして、出力をアンロッキングする1つ以上の条件を定義するロッキングスクリプトを含まれている。第2、ターゲットトランザクションは、第1トランザクションの出力に対するポインタ、および、第1トランザクションの出力をアンロッキングするためのアンロッキングスクリプトを含む、少なくとも1つの入力を含む。
【0007】
そうしたモデルにおいては、第2、ターゲットトランザクションが、伝搬され、ブロックチェーン内に記録されるように、ブロックチェーンネットワークに対して送信されるとき、各ノードで適用される有効性の基準の1つは、アンロッキングスクリプトが第1トランザクションのロッキングスクリプトで定義された1つ以上の条件の全てを満たすことである。もう1つは、第1トランザクションの出力が、以前に有効であった、別のトランザクションによって未だに償還されていないことである。これらの条件のいずれかに従ってターゲットトランザクションが無効であることを発見した任意のノードは、そのトランザクションを伝搬せず(有効なトランザクションとして、しかし、無効なトランザクションを登録する可能性がある)、または、ブロックチェーンに記録される新しいブロックに含めない。
【0008】
代替的なタイプのトランザクションモデルは、アカウントベースのモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOに戻って参照することによって、移転される総額を定義することはないが、むしろ、絶対的な勘定残高(account balance)を参照することによる。全てのアカウントの現在の状態は、ブロックチェーンと分離されたノードによって保管され、そして、常に更新されている。
【発明の概要】
【0009】
ブロックチェーントランザクションにおいては、典型的に、UTXOは、ロッキングスクリプト内に受信者の公開鍵を含めることによって、事前定義されたユーザにロックされる。しかしながら、ロッキングスクリプトを生成する時点で、UTXOの受信者が未知である状況が存在し得る。
【0010】
本明細書に開示される一態様に従って、ブロックチェーントランザクションを生成するコンピュータ実装方法が提供される。本方法において、複数の第2当事者の各当事者は、それぞれのr部分を導出可能なそれぞれの秘密番号kを有し、マークルツリーが定義されており、前記マークルツリーの少なくとも1つのリーフノードは、前記それぞれのr部分のうち少なくとも1つに基づいている。前記方法は、第1当事者によって実行され、かつ、第1ブロックチェーントランザクションを生成するステップであり、前記第1ブロックチェーントランザクションは、前記マークルツリーに対応しているターゲットマークルツリー部分を含んでいる、第1ロッキングスクリプトを含み、前記第1ロッキングスクリプトは、第2ブロックチェーントランザクションの第1アンロッキングスクリプトと共に実行されると、前記第1アンロッキングスクリプトからr部分を抽出し、前記抽出されたr部分から導出されるハッシュ値を生成し、前記生成されたハッシュおよび前記第1アンロッキングスクリプトのマークルプルーフ部分に基づいて、候補マークルツリー部分を計算し、前記計算された候補マークルツリー部分が、前記ターゲットマークルツリー部分に一致することを検証し、前記第1アンロッキングスクリプトの公開鍵に基づいて、前記第1アンロッキングスクリプトの署名部分を検証する、ように構成されているステップと、前記第1ブロックチェーントランザクションを、ブロックチェーンネットワークの1つ以上のノードに利用可能にするステップと、を含む。
【0011】
r部分は、知識証明(knowledge proof)の一形態である、「Rパズル(“R-puzzle”)」に対応している。これにより、ユーザは、rを導出するために使用される秘密番号kを知っている場合、ロッキングスクリプトとは無関係である、任意の有効な公開鍵-秘密鍵のペアを使用して、UTXOをアンロッキングすることができる。従って、UTXOは、rパズルを知って、ロックされ得るものであり、そして、その後に、UTXOがロックされる、以前のトランザクションを変更する必要なく、秘密値kが受信者に提供され得る。すなわち、UTXOをロッキングするトランザクションは、受信者の知識なしに生成され得る。
【0012】
マークルツリー(Merkle tree)は、知識証明の別の形態である。アンロッキング側(unlocker)は、リーフノードがそこから導出されるデータ、および、マークルツリーのマークルルートを計算するために必要とされる情報を提供する、マークルプルーフの両方を知らねばならない。従って、rパズルをマークルツリーと組み合わせることによって、アンロッキング側は、そこからリーフノードが導出される秘密値k、および、その特定のリーフノードに対応するマークルプルーフを知らなければならない。
【0013】
従って、開示される方法は、ブロックチェーントランザクションの柔軟性と外部当事者の機密性の両方を改善する。ユーザのグループのうちの任意の1人または任意のセットが、トランザクションをアンロッキングすることを可能にすることによって、柔軟性は改善され、一方で、ユーザが、データ項目の範囲(すなわち、マークルプルーフ部分、署名部分、および、公開鍵)の知識を有するように要求する必要とすることによって、秘密性が改善される。
【0014】
スクリプトにおけるマークルツリーの使用は、また、既知の閾値アンロックスキームに対して、より効率的で、かつ、スケーラブルな方法も提供する。これは、ロッキングスクリプトが、UTXOをアンロッキングするために使用され得る鍵の全て、または、M-of-Nスキームの場合に可能な鍵のセットの全てを含まないためである。
【図面の簡単な説明】
【0015】
本開示の実施形態の理解を助け、かつ、そうした実施形態がどのように実施され得るかを示すために、単なる例として、添付の図面が参照される。
【
図1】
図1は、ブロックチェーンを実装するためのシステムに係る概略ブロック図である。
【
図2】
図2は、ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示している。
【
図3A】
図3Aは、クライアントアプリケーションに係る概略ブロック図である。
【
図3B】
図3Bは、
図3Aのクライアントアプリケーションによって提示され得る例示的なユーザインターフェイスに係る概略的なモックアップである。
【
図4】
図4は、トランザクションを処理するためのいくつかのノードソフトウェアに係る概略ブロック図である。
【
図5】
図5は、マークルツリー(Merkle tree)の例を示している。
【
図6A】
図6Aは、楕円曲線デジタル署名アルゴリズム(ECDSA)の背後にある原理を概略的に示している。
【
図6B】
図6Bは、楕円曲線デジタル署名アルゴリズム(ECDSA)の背後にある原理を概略的に示している。
【
図6C】
図6Cは、楕円曲線デジタル署名アルゴリズム(ECDSA)の背後にある原理を概略的に示している。
【
図6D】
図6Dは、楕円曲線デジタル署名アルゴリズム(ECDSA)の背後にある原理を概略的に示している。
【
図7】
図7は、1-of-N署名アンロッキング要件のためにRパズルおよびマークルツリーを使用する方法を概略的に示している。
【
図8】
図8は、M-of-N署名アンロッキング要件のためにRパズルおよびマークルツリーを使用する方法を概略的に示している。
【
図9】
図9は、M-of-N署名アンロッキング要件のために、Rパズル、マークルツリー、およびスクリプト内楕円曲線点加法を使用する方法を概略的に示している。
【
図10】
図10は、M-of-N署名アンロッキング要件のために、Rパズル、マークルツリー、およびスクリプト内楕円曲線点加法を使用する代替的な方法を概略的に示している。
【
図11A】
図11Aは、ロッキングスクリプトの異なるマークル部分が与えられた場合、所与のマークルツリーにおけるマークルパスを概略的に示している。
【
図11B】
図11Bは、ロッキングスクリプトの異なるマークル部分が与えられた場合、所与のマークルツリーにおけるマークルパスを概略的に示している。
【
図11C】
図11Cは、ロッキングスクリプトの異なるマークル部分が与えられた場合、所与のマークルツリーにおけるマークルパスを概略的に示している。
【発明を実施するための形態】
【0016】
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示している。システム100は、典型的には、インターネットといった広域インターネットワークである、パケット交換ネットワーク101を含み得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように配置され得る複数のブロックチェーンノード104を含んでいる。図示されていないが、ブロックチェーンノード104は、ほぼ完全なグラフ(graph)として配置されてよい。従って、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続されている。
【0017】
各ブロックチェーンノード104は、異なるピアに属するノード104のうち異なるものを有する、ピアのコンピュータ装置を含む。各ブロックチェーンノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ及び/又はフィールドプログラマブルゲートアレイ(FPGA)、および、特定用途向け集積回路(ASIC)を含む処理装置を含んでいる。各ノードは、また、メモリ、すなわち、非一時的コンピュータ読取可能媒体または媒体の形態におけるコンピュータ読取可能ストレージを備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクといった磁気媒体、固体ドライブ、フラッシュメモリ、またはEEPROMといった電子媒体、及び/又は、光ディスクドライブといった光媒体を使用する、1つ以上のメモリユニットを含み得る。
【0018】
ブロックチェーン150は、データ151のブロックのチェーンを含み、ブロックチェーン150それぞれのコピーは、分散またはブロックチェーンネットワーク106内の複数のブロックチェーンノード104それぞれに維持される。上述のように、ブロックチェーン150のコピーを維持することは、必ずしもブロックチェーン150を完全に保管することを意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下で説明される)を保管する限り、データの剪定(pruned)であり得る。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、ここで、このコンテキストにおけるトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通じて1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルにおいて、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、プロ当事者として、ある量のデジタル資産を表す総額(amount)を指定し、その例は、その出力が暗号的にロックされているユーザ103である(そのユーザの署名または他のソリューションがアンロックされ、それによって、償還または使用されることを要求している)。各入力は、先行するトランザクション152の出力へ戻って指し示し(points back to)、それによって、トランザクションをリンクしている。
【0019】
各ブロック151は、また、ブロック151に対する逐次的な順序を規定するように、チェーン内で先行して生成されたブロック151へ戻って指し示すブロックポインタ155も含んでいる。各トランザクション152(コインベーストランザクション以外のもの)は、トランザクションのシーケンスへの順序を定義するために、以前のトランザクションへ戻って指し示すポインタを含む(トランザクションのN.B.シーケンス152は分岐可能である)。ブロック151のチェーンは、チェーン内で第1ブロックであった生成ブロック(Gb)153に戻る。チェーン150内で初期の1つ以上のオリジナルトランザクション152は、先行するトランザクションではなく、生成ブロック153を指し示していた。
【0020】
ブロックチェーンノード104それぞれは、トランザクション152を他のブロックチェーンノード104に移転するように構成されており、そして、それによって、トランザクション152は、ネットワーク106の全体を通して伝搬される。各ブロックチェーンノード104は、ブロック151を生成し、同じブロックチェーン150それぞれのコピーをそれぞれのメモリに保管するように構成されている。各ブロックチェーンノード104は、また、ブロック151に組み込まれるのを待つトランザクション152の順序付きセット(ordered set)(または、プール(“pool”))154を維持する。順序付きプール154は、しばしば、「メンプール(“mempool”)」と呼ばれる。この用語は、ここにおいて、特定のブロックチェーン、プロトコル、またはモデルに限定するように意図されていない。このことは、ノード104が有効として受け入れ、かつ、ノード104が同じ出力を消費しようとする他のトランザクションを受け入れないように義務付けられた、トランザクションの順序付きセットを参照する。
【0021】
所与の現在トランザクション152jにおいて、入力(または各入力)は、トランザクションのシーケンスにおいて先行するトランザクション152iの出力を参照するポインタを含み、この出力が現在トランザクション152jにおいて償還されるか、または「消費される(“spent”)」ことを指定する。一般的に、先行するトランザクションは、順序付きセット154または任意のブロック151における任意のトランザクションであり得る。先行するトランザクション152iは、必ずしも現在トランザクション152jが作成される時、または、ネットワーク106に送信される時にさえ存在する必要はないが、先行するトランザクション152iは、現在トランザクションが有効であるために存在し、かつ、検証される必要がある。従って、ここにおいては、「先行する(“preceding”)」とは、ポインタによってリンクされた論理的な順序での先行を指し、そして、従って、必ずしも時間的な順序で作成または送信する時刻を指すのではなく、従って、トランザクション152i、152jが順序狂いで(out-of-order)作成または送信されることを必ずしも排除しない(孤児(orphan)トランザクションに関する以下の説明を参照のこと)。先行するトランザクション152iは、同様に、先立(antecedent)トランザクションまたは前任(predecessor)トランザクションと呼ばれ得る。
【0022】
現在トランザクション152jの入力は、また、入力認可(input authorisation)、例えば、先行するトランザクション152iの出力がロックされているユーザ103aの署名も含んでいる。次に、現在トランザクション152jの出力は、新しいユーザまたはエンティティ103bに対して暗号的にロックされ得る。従って、現在トランザクション152jは、先行するトランザクション152iの入力に定義された総額を、現在トランザクション152jの出力に定義された新しいユーザまたはエンティティ103bに移転することができる。ある場合に、トランザクション152は、複数のユーザまたはエンティティ(そのうちの1つは、変更を与えるために、オリジナルのユーザまたはエンティティ103aであってよい)の間で入力量を分割するために複数の出力を有し得る。ある場合に、トランザクションは、また、複数の入力を有し、1つ以上の先行するトランザクションの複数の出力から総額を集め、そして、現在トランザクションの1つ以上の出力に対して再配分することもできる。
【0023】
ビットコインといった出力ベースのトランザクションプロトコルに従って、個人ユーザまたは組織(organization)といった当事者(party)103が新しいトランザクション152jを(手動、または、当事者によって採用される自動化されたシステムのいずれかによって)実行することを望む場合、制定当事者(enacting party)は、そのコンピュータ端末102から受信者に対して新しいトランザクションを送信する。エンティティまたは受信者は、最終的に、このトランザクションをネットワーク106のブロックチェーンノード104の1つ以上に送信する(今日では、典型的に、サーバまたはデータセンタであるが、原則として、他のユーザ端末であってよい)。新規トランザクション152jを実行する当事者103は、また、トランザクションを1つ以上のブロックチェーンノード104に対して、直接的に送信することもでき、そして、いくつかの例では、受信者に対しては送信しないことも除外されない。トランザクションを受信するブロックチェーンノード104は、各ブロックチェーンノード104に適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるか否かをチェックする。ブロックチェーンノードプロトコルは、典型的には、新規トランザクション152jにおける暗号署名が、トランザクション152の順序付けされたシーケンスにおける以前のトランザクション152iに依存する、期待される署名と一致することをチェックするために、ブロックチェーンノード104を必要とする。そうした出力ベースのトランザクションプロトコルにおいて、このことは、新しいトランザクション152jの入力に含まれる当事者103の暗号署名または他の認可が、新しいトランザクションが割り当てる先行するトランザクション152iの出力に定義された条件と一致することをチェックすることを含み得る。ここで、この条件は、典型的に、新しいトランザクション152jの入力における暗号署名または他の認可が、新しいトランザクションの入力がリンクされる以前のトランザクション152iの出力をアンロッキングすることを、少なくともチェックすることを含む。本条件は、少なくとも部分的に、先行するトランザクション152iの出力に含まれるスクリプトによって定義され得る。代替的に、ブロックチェーンノードプロトコルだけで単純に固定することもできるし、または、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効である場合、ブロックチェーンノード104は、ブロックチェーンネットワーク106内の1つ以上の他のブロックチェーンノード104に対して、それを転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、そして、新しいトランザクション152jを1つ以上のさらなるノード104に対してそのように転送する。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体を通じて伝搬される。
【0024】
出力ベースのモデルにおいて、所与の出力(例えば、UTXO)が割り当てられる(例えば、支払われる)か否かの定義は、それが、ブロックチェーンノードプロトコルに従って、別の、前方の(onward)トランザクション152jの入力によって未だ有効に償還されているか否かである。トランザクションが有効である別の条件は、それが償還を試みる先行するトランザクション152iの出力が、別のトランザクションによって既に償還されていないことである。有効でない場合、再度、トランザクション152jは、(無効としてフラグ付けされ、そして、警告のために伝搬されない限り)伝搬されず、または、ブロックチェーン150内に記録されない。このことは、二重の支出(double-spending)を防ぎ、それによって、取引者(transactor)は、同じトランザクションの出力を複数回割り当てようとする。一方で、アカウントベースのモデルは、アカウントバランスを維持することによって、二重の支出を防ぐ。再度、トランザクションの定義された順序が存在するので、口座残高(account balance)は、任意の一時において単一の定義された状態を有している。
【0025】
トランザクションの検証に加えて、ブロックチェーンノード104は、また、「プルーフオブワーク(“proof-of-work”)」によってサポートされる、一般的にマイニング(mining)と呼ばれるプロセスにおいてトランザクションのブロックを最初に作成するためにも競争する。ブロックチェーンノード104では、ブロックチェーン150に記録されたブロック151内に未だ現れていない、有効なトランザクション154の順序付きプールに対して新しいトランザクションが追加される。次いで、ブロックチェーンノードは、暗号パズルを解決しようと試みることによって、トランザクション154の順序付きセットからトランザクション152の新しい有効なブロック151を組み立てるために競争する。典型的に、このことは、ナンス(“nonce”)が保留中(pending)トランザクション154の順序付きプールの表現と連結され、そして、ハッシュされるときに、ハッシュの出力が所定の条件を満たすように、「ナンス」値を検索することを含む。例えば、事前に決定された条件は、ハッシュの出力が、所定の事前定義された数の先頭ゼロ(leading zero)を有することであってよい。このことは、プルーフオブワークパズルの1つの特定のタイプに過ぎず、そして、他のタイプは除外されないことに注意すること。ハッシュ関数の特性は、その入力に関して予測不可能な出力を有することである。従って、この検索は、ブルートフォース(brute force)によってのみ実行することができ、よって、パズルを解決しようとしている各ブロックチェーンノード104において、相当量の処理リソースを消費している。
【0026】
パズルを解決するための第1ブロックチェーンノード104は、これをネットワーク106にアナウンスし、その解を証明(proof)として提供し、次いで、それは、ネットワーク内の他のブロックチェーンノード104によって容易にチェックすることができる(一旦ハッシュに対する解が与えられると、それが条件を満たすハッシュの出力を生じさせることをチェックするのは簡単である)。第1ブロックチェーンノード104は、ブロックを受け入れ、そして、従って、プロトコルルールを実施する他のノードの閾値コンセンサスに対してブロックを伝搬する。トランザクションの順序付きセット154は、次いで、ブロックチェーンノード104それぞれによってブロックチェーン150内の新しいブロック151として記録されるようになる。ブロックポインタ155は、また、チェーン内で先に生成されたブロック151n-1に戻って指し示す新しいブロック151nに対しても割り当てられる。プルーフオブワークソリューションを作成するために必要とされる、例えば、ハッシュの形式の著しい量の努力は、ブロックチェーンプロトコルのルールに従うための第1ド104の意図を信号化(signal)する。そうしたルールには、以前に検証されたトランザクションと同じ出力を割り当てる場合、トランザクションを有効とはしないことが含まれる。一旦生成されると、ブロック151は、ブロックチェーンネットワーク106内のブロックチェーンノード104それぞれで認識され、維持されるので、修正することができない。ブロックポインタ155は、また、ブロック151に逐次的な順序を課す。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付けされたブロックに記録されるので、このことは、トランザクションに係る不変的な公開台帳を提供する。
【0027】
任意の所与の時間にパズルを解決するために競争している異なるブロックチェーンノード104は、いつソリューションの検索探索を開始したか、または、トランザクションが受信された順序に依存して、任意の所与の時間における未公開の(yet to be published)トランザクション154に係るプールの異なるスナップショットに基づいて、そうすることができることに留意すること。誰がそれぞれのパズルを最初に解くかは、どのトランザクション152が次の新しいブロック151nに含まれ、かつ、どの順序で含まれるかを定義し、そして、未公開のトランザクションの現在プール154が更新される。次いで、ブロックチェーンノード104は、未公開のトランザクション154の新しく定義された順序付きプールからブロックを作成する、といったために、競争を続ける。また、生じ得る任意の「フォーク(“fork”)」を解決するためのプロトコルも存在し、それは、2つのブロックチェーンノード104が互いの非常に短い時間内にそれらのパズルを解決するものであり、その結果、ブロックチェーンの矛盾した見方(conflicting view)がノード104間で伝播される。要するに、フォークのどの突起(prong)が伸びても、最も長いものが最終的なブロックチェーン150になる。このことは、同じトランザクションが両方のフォークに現れるので、ネットワークのユーザまたはエージェントに影響を与えないことに注意すること。
【0028】
ビットコインブロックチェーン(および、他の大部分のブロックチェーン)に従って、新しいブロック104を成功裡に構築するノードは、デジタル資産の追加的な定義された数量を配布する新しい特別な種類のトランザクションにおいて、デジタル資産の追加的な受け入れられた総額を新たに割り当てる能力が与えられる(エージェント間、または、あるエージェントまたはユーザから別のものへデジタル資産の総額を移転するユーザ間のトランザクションとは対照的である)。この特別なタイプのトランザクションは、たいてい、「コインベーストランザクション(“coinbase transaction”)」と呼ばれるが、また、「開始トランザクション(“initiation transaction”)」または「生成トランザクション(“generation transaction”)」とも呼ばれる。これは、典型的には、新しいブロック151nの第1トランザクションを形成する。プルーフオブワークは、新しいブロックを構成するノードの意図を、プロトコルルールに従って、この特別なトランザクションが後で償還されることを可能にするように信号化する。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還される前に、例えば、100ブロックの成熟期間を必要とし得る。しばしば、正規の(非世代の(non-generation))トランザクション152は、また、そのトランザクションが発行されたブロック151nを作成したブロックチェーンノード104にさらなる報酬を与えるために、その出力の1つにおいて追加的なトランザクション料を指定する。この料金は、通常、「トランザクション料金(“transaction fee”)」と呼ばれ、そして、以下で説明される。
【0029】
トランザクションの検証および公開に含まれるリソースのせいで、典型的に、少なくともブロックチェーンノード104それぞれは、1つ以上の物理的サーバーユニット、または、データセンタ全体を含む、サーバの形態をとる。しかしながら、原則として、任意の与えられたブロックチェーンノード104は、一つのユーザ端末、または、互いにネットワーク接続されたユーザ端末のグループの形態をとることができる。
【0030】
各ブロックチェーンノード104のメモリは、それぞれの役割または複数の役割を実行し、ブロックチェーンノードプロトコルに従ってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で動作するように構成されたソフトウェアを保管している。ここにおいて、ブロックチェーンノード104に帰属される任意の動作は、それぞれのコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されるだろう。ノードソフトウェアは、アプリケーション層、オペレーティングシステム層またはプロトコル層といった下位レイヤ、もしくは、これらの任意の組み合わせにおいて、1つ以上のアプリケーションで実装することができる。
【0031】
また、接続されたネットワーク101は、消費するユーザの役割における複数の当事者103それぞれのコンピュータ装置102でもある。これらのユーザは、ブロックチェーンネットワーク106と対話(interact)し得るが、トランザクションの検証またはブロックの構築には参加しない。これらのユーザまたはエージェント103のいくつかは、トランザクションの送信者および受信者として動作することができる。他のユーザは、必ずしも送信者または受信者として動作することなくブロックチェーン150と対話することができる。例えば、いくつかの当事者は、ブロックチェーン150のコピーを保管する保管エンティティとして動作することができる(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得したこと)。
【0032】
当事者103の一部または全部は、例えば、ブロックチェーンネットワーク106の上にオーバーレイされたネットワークである、異なるネットワークの一部として接続されてよい。ブロックチェーンネットワークのユーザ(しばしば「クライアント(“clients”)」と呼ばれるもの)は、ブロックチェーンネットワーク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当事者」と置き換えることができることが理解されるだろう。
【0033】
各当事者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つ以上の他のネットワーク化されたリソースを含んでもよい。
【0034】
クライアントアプリケーション105は、最初に、適切なコンピュータ読取可能記憶媒体または媒体における任意の所与の当事者103のコンピュータ装置102に提供されてよい。例えば、サーバからダウンロードされ、または、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピー(登録商標)ディスクまたはテープ、CDまたはDVD ROMといった光ディスク、もしくは、リムーバブル光学ドライブ、等といった、リムーバブルストレージ装置上に提供されてよい。
【0035】
クライアントアプリケーション105は、少なくとも「ウォレット(“wallet”)」機能を備えている。これは、2つの主な機能を有している。これらのうち1つは、それぞれの当事者103が、1つ以上のビットコインノード104に対してトランザクション152を作成し、許可し(例えば、署名)、そして、送信し、次いで、ブロックチェーンノード104のネットワーク全体を通じて伝搬され、そして、それによって、ブロックチェーン150に含まれることを可能にすることである。他の1つは、彼または彼女が現在所有しているデジタル資産の総額をそれぞれの当事者に戻って報告することである。出力ベースのシステムにおいて、この第2機能は、問題の当事者に属するブロックチェーン150の全体を通じて散在する様々なトランザクション152の出力において定義される総額を照合することを含む。
【0036】
注記:様々なクライアント機能は、所与のクライアントアプリケーション105へと統合されているものとして説明することができるが、一方で、このことは、必ずしも限定的なものではなく、そして、代わりに、ここにおいて説明されている任意のクライアント機能は、例えば、APIを介したインターフェイス、または、一方が他方へのプラグインであるような、2つ以上の別個のアプリケーションのスイート(suite)において実装することができる。より一般的に、クライアント機能は、アプリケーション層、または、オペレーティングシステムといった下位層、もしくは、これらの任意の組み合わせで実装することができる。以下は、クライアントアプリケーション105に関して説明されているが、このことは、限定的ではないことが理解されるだろう。
【0037】
各コンピュータ装置102におけるクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104の少なくとも1つに対して動作可能に結合されている。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。また、クライアント105は、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150を照会するために、ブロックチェーンノード104にコンタクトすることもできる(もしくは、実施例において、ブロックチェーン150は、公の視認性(public visibility)を通じて部分的に、トランザクション内で信頼を提供する公共施設(“public facility”)であるため、実際には、ブロックチェーン150内の他の当事者のトランザクションを検査する)。各コンピュータ装置102におけるウォレット機能は、トランザクションプロトコルに従って、トランザクション152を形成し、そして、送信するように構成されている。上述のように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従って、トランザクション152を検証し、それらをブロックチェーンネットワーク106全体を通じて伝播させるためにトランザクション152を転送するように構成されたソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは、互いに対応し、そして、所与のトランザクションプロトコルは、所与のノードプロトコルと共に、所与のトランザクションモデルを実施する。同じトランザクションプロトコルが、ブロックチェーン150内の全てのトランザクション152について使用される。同じノードプロトコルが、ネットワーク106内の全てのノード104によって使用されている。
【0038】
所与の当事者103、例えばアリスが、ブロックチェーン150に含まれるように新しいトランザクション152jを送信することを望む場合に、彼女は、関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105においてウォレット機能を使用して)新しいトランザクションを策定する。彼女は、次いで、クライアントアプリケーション105から、接続されている1つ以上のブロックチェーンノード104に対して、トランザクション152を送信する。例えば、これは、アリスのコンピュータ102に最も良好に接続されているブロックチェーンノード104であってよい。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信したとき、ノードは、ブロックチェーンノードプロトコルおよびそれぞれの役割に従って、それを処理する。このことは、最初に、新たに受信されたトランザクション152jが「有効(“valid”)」であるための特定の条件を満たすか否かをチェックすることを含み、その例については、直ぐに以下で詳細に説明する。いくつかのトランザクションプロトコルにおいて、検証のための条件は、トランザクション152に含まれるスクリプトによって、トランザクションごとに設定可能である。代替的に、条件は、単にノードプロトコルのビルトイン(built-in)機能であってよく、または、スクリプトおよびノードプロトコルの組み合わせによって定義されてよい。
【0039】
新たに受信されたトランザクション152jが、有効であるとみなされるテストを通過するという条件で(すなわち、「有効(“validated”)」という条件で)、トランザクション152jを受信する任意のブロックチェーンノード104は、そのブロックチェーンノード104において維持されるトランザクション154の順序付きセットに対して、新たな有効トランザクション152を追加する。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、有効トランザクション152を、ネットワーク106内の1つ以上の他のブロックチェーンノード104に向けて伝搬させる。各ブロックチェーンノード104は、同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、このことは、ネットワーク106全体を通じて、間もなく伝搬されることを意味する。
【0040】
一旦所与のブロックチェーンノード104において維持されている保留中トランザクション154の順序付きプールについて認められると、そのブロックチェーンノード104は、新しいトランザクション152を含むトランザクション154に係るそれぞれのプールの最新バージョンについてプルーフオブワークパズルを解決するために競争を開始する(他のブロックチェーンノード104は、異なるトランザクション154のプールに基づいてパズルを解決しようとしているが、そこに最初に到達した者は誰でも、最新のブロック151に含まれるトランザクションのセットを定義することを想起すること。最終的には、ブロックチェーンノード104が、アリスのトランザクション152jを含む順序付きプール154の一部についてのパズルを解決する)。一旦、新しいトランザクション152jを含む順序付きプール154についてプルーフオブワークが行われると、それは、不変的に、ブロックチェーン150内のブロック151のうちの1つの一部分となる。各トランザクション152は、以前のトランザクションに戻って指し示すポインタを含んでおり、トランザクションの順序も、また、不変的に記録される。
【0041】
異なるブロックチェーンノード104は、最初に、所与のトランザクションの異なるインスタンスを受信することができ、そして、従って、1つのインスタンスが新しいブロック151において公開される前に、どのインスタンスが「有効(“valid”)」であるかについて相反する見解を有してよく、その時点で、全てのブロックチェーンノード104は、公開されたインスタンスが唯一の有効なインスタンスであることに同意する。ブロックチェーンノード104が1つのインスタンスを有効なものとして受け入れ、そして、次いで、2つのインスタンスがブロックチェーン150に記録されていることを発見した場合に、そのブロックチェーンノード104は、これを受け入れなければならず、そして、最初に受け入れたインスタンス(すなわち、ブロック151内で公開されていないインスタンス)を破棄する(すなわち、無効として扱う)。
【0042】
いくつかのブロックチェーンネットワークによって運用される代替的なタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース(“account-based”)」プロトコルと呼ばれてよい。アカウントベースの場合に、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOに戻って参照することによって、しかし、むしろ、絶対的な口座残高を参照することによって、移転されるべき総額を定義しない。全てのアカウントの現在の状態は、そのネットワークのノードによって、ブロックチェーンに分離されて保管されており、そして、常に更新されている。そうしたシステムにおいて、トランザクションは、アカウントの実行中のトランザクション勘定(tally)(「ポジション(“position”)」とも呼ばれるもの)を使用して順序付けされる。この値は、暗号署名の一部として送信者によって署名され、そして、トランザクション参照計算の一部としてハッシュされる。加えて、任意的なデータフィールドも、また、署名されたトランザクションであってよい。このデータフィールドは、例えば、以前のトランザクションIDがデータフィールドに含まれている場合に、以前のトランザクションに戻って指し示すことができる。
【0043】
UTXOベースのモデル
図2は、一つの例示的なトランザクションプロトコルを示している。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含んでいる)の基本的なデータ構造である。以下は、出力ベースのプロトコルまたは「UTXO」ベースのプロトコルを参照して説明される。しかしながら、このことは、全ての可能な実施形態に限定されるものではない。例示的なUTXOベースのプロトコルは、ビットコインを参照して説明されているが、他の例示的なブロックチェーンネットワーク上で同様に実装され得ることに注意すること。
【0044】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上の入力202および1つ以上の出力203を含むデータ構造を含んでいる。各出力203は、未経過のトランザクション出力(UTXO)を含んでよく、これは、別の新しいトランザクションの入力202のソースとして使用することができる(UTXOが既に償還されていない場合)。UTXOは、デジタル資産の総額を指定する値が含まれている。これは、配布された台帳に設定されたトークンの数を表している。UTXOは、また、その他の情報の中でも、UTXOの元となったもののトランザクションIDをも含み得る。トランザクションデータ構造は、また、入力フィールド202および出力フィールド203のサイズのインジケータを含み得る、ヘッダ201を含んでよい。ヘッダ201は、また、トランザクションのIDを含んでよい。実施形態において、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、そして、ノード104に提出された生(raw)トランザクション152のヘッダ201に保管されている。
【0045】
アリス103aは、問題のデジタル資産の総額をボブ103bに移転するトランザクション152jを作成したいと考えていると仮定する。
図2では、アリスの新しいトランザクション152jが「Tx
1」とラベル付けされている。それは、先行するトランザクション152iの出力203においてアリスにロックされているデジタル資産の総額を順番に取り、そして、その少なくとも一部をボブに移転する。先行するトランザクション152iは、
図2では「Tx
0」とラベル付けされており、Tx
0およびTx
1は、単なる任意のラベルである。これらは、必ずしも、Tx
0がブロックチェーン151の第1トランザクションであること、または、Tx
1がプール154において直ぐに次のトランザクションであることを意味するものではない。Tx
1は、アリスにロックされた未使用の出力203を依然として有する、先行する(すなわち、先立つ)トランザクションのいずれかへ戻って指し示すことができる。
【0046】
先行するトランザクションTx0は、アリスが新しいトランザクションTx1を作成する時点、または、少なくとも彼女がそれをネットワーク106に送信する時点で、既に検証され、そして、ブロックチェーン150のブロック151に含まれてよい。それは、その時点で既にブロック151のうちの1つに含まれてよく、または、順序付きセット154内で未だに待機していてよく、その場合には、まもなく新しいブロック151内に含まれることになる。代替的に、ノードプロトコルが「孤児(“orphan”)オーファン」のバッファリングを許可する場合には、Tx0およびTx1が作成されて、一緒にネットワーク106へ送信され得るし、または、Tx0がTx1の後に送信され得る。ここにおいてトランザクションシーケンスのコンテキストで使用される「先行(“preceding”)」および「後続(“subsequent”)」という用語は、トランザクションで指定されたトランザクションポインタによって定義されるシーケンスにおけるトランザクションの順序を指す(どのトランザクションポイントが、他のトランザクションを指すか、等)。これらは、「前任者」および「後任者」(“predecessor”and“successor”,or“antecedent”and“descendant”)、「親(“parent”)」および「子(“child”)」、等と置き換えることもできる。このことは、必ずしも、それらが生成され、ネットワーク106に送信され、または、任意の与えられたブロックチェーンノード104に到着する順序を意味するものではない。それにもかかわらず、先行するトランザクション(先立つトランザクションまたは「親」)を指す後続トランザクション(子孫トランザクションまたは「子」)は、親トランザクションが検証されるまで、かつ、親トランザクションが検証されない限り、検証されない。親ノード104に到達する前にブロックチェーンノード104に到着した子は、孤児とみなされる。ノードプロトコル及び/又はノードの挙動に応じて、それは、破棄され、または、親を待つために一定時間バッファされ得る。
【0047】
先行するトランザクションTx0の1つ以上の出力203のうちの1つは、ここにおいてUTXO0とラベル付けされた特定のUTXOを含んでいる。各UTXOは、UTXOによって表されるデジタル資産の総額を指定する値、および、後続のトランザクションが検証されるため、そして、従って、UTXOが成功裡に償還されるために、後続のトランザクションの入力202においてアンロッキングスクリプトによって満たされなければならない条件を定義するロッキングスクリプトを含む。典型的に、ロッキングスクリプトは、総額を特定の当事者に対してロッキングする(それが含まれているトランザクションの受益者)。すなわち、ロッキングスクリプトは、アンロッキング条件を定義し、典型的には、後続のトランザクションの入力におけるアンロッキングスクリプトが、先行するトランザクションがロックされる当事者の暗号署名を含む、という条件を含んでいる。
【0048】
ロッキングスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そうした言語の特定の例は、ブロックチェーンネットワークによって使用される「スクリプト(“Script”)」(Sは大文字)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を消費するために必要とされる情報、例えば、アリスの署名の必要条件を指定する。トランザクションの出力には、アンロッキングスクリプトが表示される。アンロッキングスクリプト(別名scriptSig)は、ロッキングスクリプトの基準を満たすために必要とされる情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、それは、ボブの署名を含み得る。アンロッキングスクリプトは、トランザクションの入力202に現れる。
【0049】
図示の例において、Tx0の出力203のUTXO0は、ロッキングスクリプト[Checksig PA]を含み、それは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、アリスの署名Sig PAを必要とする。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、Tx1へ戻って指し示すポインタを含む(例えば、そのトランザクションID、TxID0によるものであり、実施形態においてはトランザクションTx0全体のハッシュである)。Tx1の入力202は、Tx0の任意の他の可能な出力の中でそれを識別するために、Tx0内でUTXO0を識別するインデックスを含む。Tx1の入力202は、さらに、鍵ペアからのアリスの秘密鍵をデータの所定の部分に適用することによって作成された、アリスの暗号署名を含むアンロッキングスクリプト<Sig PA>を含む(ときどき、暗号では「メッセージ(“message”)」と呼ばれる)。有効な署名を提供するためにアリスによって署名される必要があるデータ(または「メッセージ」)は、ロッキングスクリプト、ノードプロトコル、または、これらの組み合わせによって定義することができる。
【0050】
新しいトランザクションTx1がブロックチェーンノード104に到着すると、ノードは、ノードプロトコルを適用する。このことは、ロッキングスクリプトおよびアンロッキングスクリプトを一緒に実行して、アンロッキングスクリプトがロッキングスクリプトで定義されている条件を満たしているか否かをチェックすることを含んでいる(ここで、この条件は1つ以上の基準(criteria)を含むことができる)。実施形態において、これは、2つのスクリプトを連結することを含む。
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、「<...>」はデータをスタック上に置くことを意味し、そして、「[...]」はロッキングスクリプト(この例ではスタックベースの言語)で構成される関数である。同様に、スクリプトは、スクリプトを連結するのではなく、共通のスタックを用いて、交互に実行することができる。いずれにせよ、一緒に実行する場合、スクリプトは、Tx0の出力のロッキングスクリプトに含まれるように、アリスの公開鍵PAを使用して、Tx1の入力におけるアンロッキングスクリプトが、データの期待される部分に署名するアリスの署名を含むことを認証する。この認証を実行するために、データ自体の期待される部分(「メッセージ」)も、また、含まれる必要がある。実施形態において、署名されたデータは、Tx1の全体を含む(よって、データの署名された部分をクリアに(in the clear)指定する別個の要素は、既に、すでに本質的に存在するので、含める必要はない。)。
【0051】
公開鍵-暗号鍵暗号による認証の詳細は、当業者にとって周知であろう。基本的に、アリスが秘密鍵を使用してメッセージに署名した場合、アリスの公開鍵およびメッセージがクリアに(in the clear)与えられると、ノード104といった別のエンティティは、そのメッセージがアリスによって署名されなければならないことを認証することができる。署名は、典型的に、メッセージをハッシュし、ハッシュに署名し、そして、署名としてメッセージにタグ付けすることを含み、従って、公開鍵の任意の所有者が署名を認証できるようにしている。従って、ここにおいて、データの特定の部分またはトランザクションの一部、などに署名することに対する言及は、実施形態において、そのデータの一部分またはトランザクションの一部のハッシュに署名することを意味することができることに留意すること。
【0052】
Tx1におけるアンロッキングスクリプトが、Tx0のロッキングスクリプトで指定された1つ以上の条件を満たす場合に(例では、アリスの署名がTx1で提供され、認証されている場合)、ブロックチェーンノード104は、Tx1が有効であるとみなす。このことは、ブロックチェーンノード104が、保留中トランザクション154の順序付きプールにTx1を追加することを意味する。ブロックチェーンノード104は、また、トランザクションTx1をネットワーク106内の1つ以上の他のブロックチェーンノード104へ転送し、その結果、ネットワーク106全体を通じて伝搬される。一旦、Tx1が検証され、そして、ブロックチェーン150に含まれると、これは、Tx0からのUTXO0を消費されたものとして定義する。Tx1は、未使用のトランザクション出力203を使用する場合にのみ有効であることに留意すること。別のトランザクション152によって既に消費された出力を消費しようと試みる場合に、Tx1は、たとえ他の全ての条件が満たされていても無効となる。従って、ブロックチェーンノード104は、また、先行するトランザクションTx0において参照されたUTXOが既に消費されているか否か(すなわち、それが既に別の有効なトランザクションへの有効な入力を形成しているか否か)をチェックする必要もある。これは、ブロックチェーン150にとって、トランザクション152に定義された順序を課すことが重要である理由の1つである。実際に、所与のブロックチェーンノード104は、トランザクション152が消費されたUTXO 203の別個のデータベースマークを維持することができるが、最終的に、UTXOが消費されたか否かを定義するものは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力を既に形成しているか否かである。
【0053】
所与のトランザクション152の全ての出力203において指定された全ての総額が、その全ての入力202によって指し示される全ての総額よりも大きい場合に、このことは、大部分のトランザクションモデルにおける無効性の別の根拠である。従って、そうしたトランザクションは、伝搬されず、また、ブロック151内に含まれない。
【0054】
UTXOベースのトランザクションモデルでは、所与のUTXOを全体として消費する必要があることに注意すること。UTXOで定義されている総額のうち一部を消費されたものとして「残しておく(“leave behind”)」ことはできず、一方で、別の部分は消費されている。しかしながら、UTXOからの総額は、次のトランザクションの複数の出力間で分割できる。例えば、Tx0においてUTXO0内で定義された総額は、Tx1における複数のUTXO間で分割できる。従って、アリスがボブにUTXO0で定義された総額全てを与えることを望まない場合には、残りの量を使用して、Tx1の第2出力において自分自身を釣り(change)を与え、または、別の当事者に支払うことができる。
【0055】
実際に、アリスは、また、たいてい、ブロック151において彼女のトランザクション104を成功裡に含む、ビットコインノード104に対する料金も含める必要がある。アリスがそうした料金を含まない場合、Tx0は、ブロックチェーンノード104によって拒否され得る。そして、従って、技術的には有効であるが、伝搬されず、かつ、ブロックチェーン150に含まれない(ノードプロトコルは、望まない場合には、ブロックチェーンノード104に、トランザクション152を受け入れるように強制しない)。いくつかのプロトコルにおいて、トランザクション料は、それ自身の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、入力202によって示される全ての総額と、所与のトランザクション152の出力203で指定される全ての総額との間の差は、トランザクションを発行するブロックチェーンノード104に対して自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一の入力であり、かつ、Tx1は1つの出力UTXO1しか持っていないと仮定する。UTXO0で指定されたデジタル資産の総額が、UTXO1で指定された量より大きい場合、その差分は、UTXO1を含むブロックを生成するためのプルーフオブワーク競争に勝利する、ノード104によって割り当てられ得る。しかしながら、代替的または追加的に、トランザクション料が、トランザクション152のUTXO203のうち自身のものにおいて明示的に指定され得ることは、必ずしも除外されない。
【0056】
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこかで、任意のトランザクション152においてロックされたUTXOから成る。従って、典型的に、所与の当事者103の資産は、ブロックチェーン150の全体を通して、様々なトランザクション152のUTXO全体を通じて分散される。ブロックチェーン150内のどこにも、所与の当事者103の総残高(total balance)を定義する1つの数字は保管されていない。各当事者に対してロックされ、かつ、別の前方のトランザクションにおいて未だに消費されていない全ての様々なUTXOの値を一緒にまとめることが、クライアントアプリケーション105におけるウォレット機能の役割である。このことは、任意のビットコインノード104に保管されたものとしてブロックチェーン150のコピーを照会することによって行うことができる。
【0057】
スクリプトコードは、しばしば、概略的に表現されること(すなわち、正確な言語を使用しないこと)に注意すること。例えば、特定の機能を表すためにオペレーションコード(オペコード(opcodes)を使用することができる。「OP_...」は、スクリプト言語の特定のオペコードを指す。一つの例として、OP_RETURNは、スクリプト言語のオペコードであり、ロッキングスクリプトの先頭でOP_FALSEが先行すると、トランザクション内にデータを保管することができる、トランザクションの支払不能(unspendable)な出力を生成し、そして、それによって、データをブロックチェーン150に不変に記録することができる。例えば、データは、ブロックチェーンに保管することが望ましい文書を含むことができる。
【0058】
典型的に、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含んでいる。実施形態において、これは、楕円曲線secp256k1を使用するECDSAに基づくものである。デジタル署名は、データの特定のピース(piece)に署名する。いくつかの実施形態において、所与のトランザクションについて、署名は、トランザクション入力の一部、および、トランザクション出力の一部または全部に署名する。署名する出力に係る特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、たいてい、署名の末尾に含まれる4バイトのコードであり、どの出力が署名されるか(そして、従って、署名時に固定されるか)を選択する。
【0059】
ロッキングスクリプトは、それぞれのトランザクションがロックされている当事者の公開鍵を、典型的に、含んでいるという事実を参照して、ときどき、「scriptPubKey」と呼ばれる。アンロッキングスクリプトは、対応する署名を、典型的に、提供するという事実を参照して、ときどき、「scriptSig」と呼ばれる。しかしながら、より一般的に、ブロックチェーン150の全てのアプリケーションにおいて、UTXOについて、償還される条件が署名を認証することを含むことは必須ではない。より一般的に、スクリプト言語は、任意の1つ以上の条件を定義するために使用され得る。従って、より一般的な用語である「ロッキングスクリプト」および「アンロッキングスクリプト」が好まれ得る。
【0060】
サイドチャネル
図1に示されるように、アリスおよびボブのコンピュータ装置102a、120b、それぞれにおけるクライアントアプリケーションは、追加的な通信機能を備えることができる。この追加機能により、アリス103aは、ボブ103bと別個のサイドチャネル107を確立することができる(いずれかの当事者または第三者の勧誘により)。サイドチャネル107は、ブロックチェーンネットワークとは別にデータの交換を可能にする。そうした通信は、ときどき、「オフチェーン(“off-chain”)」通信と呼ばれる。例えば、これは、当事者の一方がネットワーク106にブロードキャストすることを選択するまで、ブロックチェーンネットワーク106にトランザクションが登録されることなく、または、チェーン150上にそのように進むことなく、アリスとボブとの間でトランザクション152を交換するために使用することができる。このようにトランザクションを共有することは、ときどき、「トランザクションテンプレート(“transaction plate”)」の共有と呼ばれる。トランザクションテンプレートは、完全なトランザクションを形成するために必要な1つ以上の入力、及び/又は、出力を欠く場合がある。代替的または追加的に、サイドチャネル107は、キー、交渉された総額または条件、データコンテンツ、等の他のトランザクション関連データを交換するために使用され得る。
【0061】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立されてよい。代替的または追加的に、サイドチャネル301は、移動セルラネットワークといった異なるネットワーク、または、ローカル無線ネットワークといったローカルエリアネットワーク、もしくは、アリスとボブの装置102a、102bとの間の直接的な有線または無線リンクを介して、確立することができる。一般的に、ここにおけるいずれかの箇所で参照されるサイドチャネル107は、「オフチェーン(“off-chain”)」で、すなわち、ブロックチェーンネットワーク106とは別に、データを交換するための1つ以上のネットワーク技術または通信媒体を介した任意の1つ以上のリンクを含んでよい。2つ以上のリンクが使用される場合、全体としてのオフチェーンリンクのバンドルまたはコレクションは、サイドチャネル107と称され得る。従って、アリスとボブが、サイドチャネル107を介して、特定の情報またはデータ、またはそうしたものを交換すると言われる場合、このことは、これらのデータの全てが正確に同じリンクまたは同じタイプのネットワークを介して送信されなければならないことを、必ずしも意味しないことに注意すること。
【0062】
クライアントソフトウェア
図3Aは、現在開示されているスキームの実施形態を実装するためのクライアントアプリケーション105の例示的な実装を示している。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェイス層402を含んでいる。トランザクションエンジン401は、クライアント105の根底にあるトランザクション関連機能を実装するように構成されている。トランザクション152を形成し、トランザクション及び/又はサイドチャネル301を介して他のデータを受信及び/又は送信し、かつ/あるいは、ブロックチェーンネットワーク106を介して伝搬される1つ以上のノード104にトランザクションを送信する、といったものである。ここにおいて開示される実施形態に従って、各クライアント105のトランザクションエンジン401は、1つ以上のr部分に基づくリーフノードを有するマークルツリー、マークルツリーに対応するマークルルート、マークルツリーに対応するマークルプルーフ、秘密値kから導出されるr部分、導出されたr部分のうちの2つ以上に基づく結合されたr部分、および、2つの楕円曲線点間の勾配λ、のうちの1つ以上を導出する関数403を含んでいる。
【0063】
UI層402は、装置102のユーザ入力/出力(I/O)手段を介してユーザインターフェイスを描画するように構成されており、ユーザのコンピュータ装置102のユーザ出力手段を介してそれぞれのユーザ103に情報を出力すること、および、装置102のユーザ入力手段を介してそれぞれのユーザ103からの入力を受け取ることを含んでいる。例えば、ユーザ出力手段は、視覚出力を提供するための1つ以上の表示スクリーン(タッチスクリーンまたは非タッチスクリーン)、オーディオ出力を提供するための1つ以上のスピーカ、及び/又は、触覚出力を提供するための1つ以上の触覚出力装置、等を含み得る。ユーザ入力手段は、例えば、1つ以上のタッチスクリーン(出力手段に使用されるものと同じか、または、異なるもの)、マウス、トラックパッド、またはトラックボールといった1つ以上のカーソルベースの装置、および、スピーチまたは声の入力を受け取るための1つ以上のマイクロホンおよび音声認識アルゴリズム、手動または身体のジェスチャの形態で入力を受け取るための1つ以上のジェスチャベースの入力装置、または、1つ以上の機械的なボタン、スイッチまたは、ジョイスティック、等に係る入力アレイを含み得る。
【0064】
注記:ここにおける種々の機能性は、同一のクライアントアプリケーション105に統合されていると記述することができるが、一方、このことは、必ずしも限定するものではなく、そして、代わりに、2つ以上の別個のアプリケーションを伴い実装され得る。、例えば、一方が他方へのプラグインであり、または、API(アプリケーションプログラミングインターフェイス)を介したインターフェイスするものである。例えば、トランザクションエンジン401の機能性は、UI層402とは別のアプリケーションで実装されてよく、または、トランザクションエンジン401といった所与のモジュールの機能性は、複数のアプリケーション間で分割されてよい。また、説明された機能の一部または全てが、例えば、オペレーティングシステム層で実装され得ることも除外されない。ここにおけるいずれかの箇所で単一または所与のアプリケーション10、5などを参照する場合に、これは単なる例示としてのものであり、そして、より一般的には、説明された機能性は、任意の形態のソフトウェアで実施され得ることが理解されるだろう。
【0065】
図3Bは、アリスの装置102a上のクライアントアプリケーション105aのUI層402によってレンダリングされ得るユーザインターフェイス500に係る一つの例示的なモックアップを示している。同様なUIが、ボブの装置102b上のクライアント105b、または、任意の他方の当事者のものによって、レンダリングされ得ることが理解されるだろう。
【0066】
例示として、
図3Bは、アリスの観点からUI 500を示している。UI 500は、ユーザ出力手段を介して別個のUIエレメントとしてレンダリングされる1つ以上のUIエレメント501、502、503を含み得る。
【0067】
例えば、UIエレメントは、異なる画面上のボタン、または、メニュー内の異なるオプション、などといったもの、であり得る、1つ以上のユーザ選択可能エレメント501を含むことができる。ユーザ入力手段は、ユーザ103(この場合、アリス103a)が、オプションの1つを選択または他の方法で操作できるように構成されている。画面上のUIエレメントをクリックまたはタッチすること、または、所望のオプションの名前を話すこと、による、といったものである(注、用語「手動(“manual”)」は、自動(automatic)に対してのみコントラストを意味し、そして、必ずしも手または複数の手の使用に限定されない)。オプションは、ユーザ(アリス)が、そこからr部分が導出される秘密値k、および、マークルツリーまたはその識別子のうちの1つ以上を選択することを可能にする。
【0068】
代替的または追加的に、UIエレメントは、1つ以上のデータ入力フィールド502を含むことができ、それを通じて、ユーザは、そこからr部分が導出される秘密値k、および、マークルツリーまたはその識別子のうちの1つ以上を入力して選択することができる。これらのデータ入力フィールドは、ユーザ出力手段、例えば、オンスクリーン、を介してレンダリングされ、そして、データは、ユーザ入力手段、例えば、キーボードまたはタッチスクリーンを介して、フィールドへと入力され得る。代替的に、データは、例えば、音声認識に基づいて口頭で受信され得る。
【0069】
代替的または追加的に、UIエレメントは、ユーザに情報を出力するために出力される1つ以上の情報エレメント503を含んでよい。例えば、これ/これらは、スクリーン上で、または、聞こえるようにレンダリングされ得る。
【0070】
種々のUIエレメントをレンダリングし、オプションを選択し、そして、データを入力することに係る所定の手段は不可欠ではないことが理解されるだろう。これらのUIエレメントの機能性について、より詳細が簡単に説明される。また、
図3に示されたUI 500は、単に概略的なモックアップであり、そして、実際には、1つ以上のさらなるUIエレメントを含んでよく、このことは、簡潔さのために示されていないことも理解されるだろう。
【0071】
ノードソフトウェア
図4は、UTXOベースまたは出力ベースのモデルの例において、ネットワーク106の各ブロックチェーンノード104上で実行されるノードソフトウェア450に係る一つの例を示している。他のエンティティは、ネットワーク106上のノード104として分類されることなく、すなわち、ノード104に要求されるアクションを実行することなく、ノードソフトウェア450を実行することができることに留意さすること。ノードソフトウェア450は、これらに限定されるわけではないが、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベル決定エンジン454、および、1つ以上のブロックチェーン関連機能モジュール455のセット、を含み得る。各ノード104は、コンセンサスモジュール455C(例えば、プルーフオブワーク)、伝搬モジュール455P、および、ストレージモジュール455S(例えば、データベース)の3つ全てを含むが、これらに限定されない、ノードソフトウェアを実行することができる。プロトコルエンジン401は、典型的に、トランザクション152の異なるフィールドを認識し、そして、ノードプロトコルに従ってそれらを処理するように構成されている。トランザクション152j(Tx
j)が、別の、先行するトランザクション152i(Tx
i)の出力(例えば、UTXO)を指し示す入力を有して受信されると、プロトコルエンジン451は、Tx
jにおけるアンロッキングスクリプトを識別し、そして、それをスクリプトエンジン452に渡す。プロトコルエンジン451は、また、Tx
jの入力におけるポインタに基づいて、Tx
iを識別し、かつ、検索する。Tx
iは、ブロックチェーン150において公開されており、その場合、プロトコルエンジンは、ノード104に保管されたブロックチェーン150のブロック151のコピーからTx
iを検索することができる。代替的に、Tx
iは、未だブロックチェーン150において公開されていないことがある。その場合、プロトコルエンジン451は、ノード104によって維持される未公開トランザクションの順序付きセット154からTx
iを検索することができる。いずれにせよ、スクリプトエンジン451は、Tx
iの参照された出力内のロッキングスクリプトを識別し、そして、これをスクリプトエンジン452に渡す。
【0072】
従って、スクリプトエンジン452は、Tx
iのロッキングスクリプト、および、Tx
jの対応する入力からのロッキングスクリプトを有している。例えば、Tx
0およびTx
1とラベルが付けされたトランザクションが
図2に図示されているが、トランザクションの任意のペアについても同様であり得る。スクリプトエンジン452は、使用されるスタックベースのスクリプト言語(例えば、スクリプト)に従って、データをスタック453上に配置すること、および、スタック453からデータを取り出すことを含む、2つのスクリプトを、上述のように、一緒に実行する。
【0073】
スクリプトを一緒に実行することによって、スクリプトエンジン452は、アンロッキングスクリプトがロッキングスクリプトに定義された1つ以上の基準を満たすか否か-すなわち、アンロッキングスクリプトが含まれる出力を「アンロック(“unlock”)」するか否か?、を判断する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に戻す。スクリプトエンジン452は、アンロッキングスクリプトが対応するロッキングスクリプトに指定された1つ以上の基準を満たすと判断した場合に、結果「真(“true”)」を返す。それ以外の場合には、結果「偽(“false”)」を返す。
【0074】
出力ベースのモデルにおいて、スクリプトエンジン452からの結果「真」は、トランザクションの有効性のための条件の1つである。典型的には、また、同様に満たされる必要がある、プロトコルエンジン451によって評価される1つ以上の更なるプロトコルレベルの条件も存在する。例えば、Txjの出力の中で指定されたデジタル資産の総量が、その入力によって指し示された総量を超えないこと、および、Txjの指し示された出力が、別の有効なトランザクションによって既に消費されていないこと、といったものである。プロトコルエンジン451は、スクリプトエンジン452からの結果を、1つ以上のプロトコルレベルの条件と一緒に評価し、そして、それらが全て真である場合にのみ、トランザクションTxjを検証する。プロトコルエンジン451は、トランザクションが有効であるか否かの指示をアプリケーションレベル決定エンジン454に対して出力する。Txjが実際に検証されたという条件のみで、決定エンジン454は、コンセンサスモジュール455Cおよび伝搬モジュール455Pの両方を制御することができ、Txjに関してそれぞれのブロックチェーン関連機能を実行するように選択する。これは、ブロック151内に組み込むためにトランザクション154に係るノードそれぞれの順序付けセットに対してTxjを追加するコンセンサスモジュール455C、および、ネットワーク106内の別のブロックチェーンノード104に対してTxjを転送する伝搬モジュール455Pを含む。任意的に、実施形態において、アプリケーションレベル決定エンジン454は、これらの機能のいずれかまたは両方をトリガする前に、1つ以上の追加条件を適用し得る。例えば、意思決定エンジンは、トランザクションが有効であり、かつ、十分なトランザクション料が残ることの両方を条件にしてのみ、トランザクションを公開することを選択することができる。
【0075】
また、ここにおいて「真(“true”)」および「偽(“false”)」という用語は、必ずしも単一の2進数(ビット)の形式のみで表される結果を返すことに限定されないが、このことは、確かに1つの可能な実装であることにも注意されたい。より一般的に、「真」は、成功または肯定的な結果を示す任意の状態を指し、そして、「偽」は、失敗または否定的な結果を示す任意の状態を指す。例えば、アカウントベースのモデルにおいて、「真」の結果は、署名の暗黙的なプロトコルレベルの検証、および、スマートコントラクトの追加的な肯定的出力の組み合わせによって示され得る(両方の結果が真であれば、全体的な結果は真であるとみなされる)。
【0076】
Rパズル(R-PUZZLES)
楕円曲線デジタル署名アルゴリズム(ECDSAs)
公開鍵暗号は、いくつかの異なるブロックチェーン・アーキテクチャにおいてトランザクションをセキュアにするための基礎として使用さていれる。公開鍵暗号の使用は、公開鍵暗号化およびデジタル署名方式を含んでいる。公開鍵暗号は、所定の関数は計算が容易であるが、いくらかの特別な知識なしでは逆変換が困難であるという原理に基づいている。そうした関数はトラップドア関数と呼ばれ、そして、それをリバースするのに必要な特別な知識は、その関数のトラップドアと称される。計算が容易であるとは、妥当な時間フレームで所与の入力(または、入力のセット)についてトラップドア関数を計算することが計算的に実行可能であり、そして、トラップドアの知識なしで、結果からその入力(または、それらの入力)を推論することが計算的に実行不可能であることをリバースするのは困難である。
【0077】
公開鍵暗号化のコンテキストにおいて、鍵ペア(key pair)は、公開鍵(誰にでも自由に利用可能にすることができる)、および、対応する秘密鍵(特定のエンティティまたはグループにのみ知られているという意味で秘密であると仮定されている)を意味する。公開鍵は、トラップドア関数を定義し、そして、対応する秘密鍵は、その関数をリバースするために必要なトラップドアである。
【0078】
公開鍵暗号化のコンテキストにおいて、暗号化は、トラップドア関数に基づく(すなわち、暗号化は「順方向(“forward direction”)」に実行される)が、一方で、復号は、トラップドアが知られているときにのみ実現可能な、逆トラップドア関数(reversal the trapdoor function)に基づいている(すなわち、復号は「逆方向(“reverse direction”)」に実行される)。
【0079】
デジタル署名のコンテキストにおいて、署名検証(signature verification)は、公開鍵を使用して順方向で実行され、そして、署名生成は、逆方向で実行され、かつ、秘密鍵を使用してのみ実行することが可能である。
【0080】
ブロックチェーンのコンテキストにおいて、公開鍵暗号化に基づくデジタル署名は、暗号によってトランザクションに署名し、かつ、トランザクション署名を検証するための基礎として使用されている。
【0081】
ECCは、楕円曲線の数学的特性を利用する公開鍵暗号の一形態であり、そして、DSA(Digital Secure Algorithm)といった他の暗号方式に対して様々な利点を有している。
【0082】
「楕円曲線デジタル署名アルゴリズム」(ECDSA)は、デジタル署名生成および検証のための基礎としてECCを使用する、デジタル署名方式のクラスを指す。ECDSAの所定の原理が、以下で概説される。
【0083】
数学用語において、ECCは、素数位数の有限体(finite field)上の楕円曲線の代数構造を利用する。有限体は、要素の有限集合、および、集合内の要素に適用されたときに、算術の通常の規則(結合性、可換性、等)を満たす乗法、加法、減法、および、除法の関連する演算の集合を意味する。すなわち、「通常の(“normal”)」意味で、加法、乗法、等である必要はないが、本質的に同じように挙動する演算である。
【0084】
楕円曲線演算
ECCのコンテキストにおいて、加法、減法、および乗法の演算は、それぞれに、本明細書において「+」で示される、楕円曲線点加法、本明細書において「-」で示される、楕円曲線点減法、および、本明細書において「・」で示される、楕円曲線スカラ乗法、である。加法演算および減法演算は、楕円曲線上の2つの点にそれぞれ適用され、そして、楕円曲線上の第3点を返す。しかしながら、乗法演算は、楕円曲線上のスカラおよび単一の点に適用され、そして、楕円曲線上の第2点を返す。対照的に、除法は、スカラ上で定義される。
【0085】
例示の目的のために、
図6Aは、
【数1】
(以降は、R
2と表記する)
における楕円曲線εを示している。R
2は、実数値の2次元座標の集合であり、かつ、(x,y)∈R
2は、R
2の要素を表している。楕円曲線εは、以下の式を満たす点の集合である。
ε:y
2=x
3+ax+b
【0086】
追記:εの数学的特性は、楕円曲線ε上で任意の2点が与えられると、AおよびBを横切る線が、εおよび、Cと示される、1つの追加点のみを再交差することである。AおよびBの楕円曲線加法、すなわちA+Bは、Cの「反射(“reflection”)」として定義される。Cの反射は、その線が交差する楕円曲線上の他の点である。この定義は、Cが、今や、Aでのεの接線がεに再交差する点であるという修正を用いて、A=Bのケースにも当てはまる。この定義は、2つの点を交差する線が垂直である場合について、成り立つようにされる。楕円曲線上の点として、∞で示される、無限遠にあり、かつ、任意の垂直線が楕円曲線と交差する点を定義することによるものである(例えば、DおよびEとラベル付けされた点は、垂直に、水平に整列され、従って、D+E=∞である)。
【0087】
減法/加法的逆元(inverse):反射の上記定義は、任意の点に適用され、そして、楕円曲線点減法の定義を提供する。A-Bは、Bの反射を伴うAの和である。Bの反射は、より正式には、Bの「加法的逆元(“additive inverse”)」と称され、次に、-Bで示される。この表記を使用して、楕円曲線減法は、数学的表記で、以下のように定義することができる。
A-B=A+(-B)
【0088】
従って、
図6Bにおいて、C=-(A+B)and(A+B)=-Cである。また、この定義の下では、D=-Eであり、代数構造の一般的な規則を反映していることにも留意すること。すなわち、楕円曲線上の任意の点と、その加法的逆元との楕円点加法は、無限遠の点である。つまり、以下のようである。
A+(-A)=∞ ∀A∈ε
【0089】
無限遠点∞は、より正式には「単位元(“identity element”)」と称される(通常の算術との並列および通常の算術からの偏差の両方に留意すること。通常の算術において、任意の数aと、その加法的逆元である-aとの和は0であり、0は通常の算術の単位元である)。識別要素の別の特性は、以下のようである。∞は、通常の算術を映し(mirror)、∞自身を含む、εにおける任意のAについて、A+∞=Aである(任意の実数aについて、a+0=0であるステートメントと類似している)。
【0090】
乗法:楕円曲線点加法の定義から、楕円曲線スカラ乗法の定義は、以下のとおりである。楕円曲線点Aと、整数νとの乗法は次のように定義される。
【数2】
【0091】
すなわち、Aと自分自身とのν回の楕円曲線点加法である。
【0092】
注記:楕円曲線スカラ乗法は、また、当技術分野では楕円曲線点乗法とも呼ばれる。これらの2つの用語は、本開示において同じ意味を有している。
【0093】
除法/乗法的逆元:除法の演算は、スカラに関して定義されている。所与のスカラνについて、その「乗法的逆元(“multiplicative inverse”)」は、スカラν-1で定義され、その結果、以下のようである。
νν-1=1
【0094】
図6Aは、上記の動作の直感的な視覚化を提供する。そこで、εは、全ての実数
【数3】
(以降は、Rと表記する)
を含む、無限フィールドにわたり定義されている。
【0095】
図6Bは、上記の演算がECCのコンテキストにおいて実際にどのように適用されるかをより詳細に表している。以下の式によって定義される楕円曲線ε
nを示すようにである。
ε
n:y
2=x
3+ax+b mod p
ここで、pは、素数(素数モジュラス)であり、かつ、modは、剰余演算(modulo operation)を示す。上記の式を満たす点の集合は有限であり、そして、それらの点のうちの1つを除く全てが
図6Bにおいて白丸として表されており、残りの点は単位元∞である。素数pは、楕円曲線の定義の一部を形成し、かつ、自由に選択することができる。楕円曲線が良好な暗号特性を有するために、pは、十分に大きくなければならない。例えば、所定のブロックチェーンモデルにおいては、256ビットのpが指定される。
【0096】
下付き文字「n」は、対照的に、上記で定義された点加法の下で楕円曲線の点によって形成される群の位数(order of the group)と称される
「楕円曲線の位数」は、本明細書では、上記で定義された点加法の下で楕円曲線の点によって形成される群の位数と称される(省略表現として、これは、楕円曲線εnの位数と称され得る)。以下を、参照のこと。
【0097】
別の言リーフで言えば、nは、グループの位数(order)次数であり、そして、pは、フィールドの位数である。全部でn個の楕円曲線点が存在する。楕円曲線上の各点は、2つの数/座標(x,y)によって表される。ここで、xおよびyは、-(p-1),…0,…,(p-1) の全範囲にある。
【0098】
以下のことが分かる。
図6Bでのε
nは、水平対称を示しており、
図6Aでのεのものと類似している。それは、素数ファイルにわたる楕円曲線の一般的な特性であり、従って、ε
nにおける点の加法的逆元は、依然として保持される。いくつかの点は、水平に整列された対位点(counterpoint)を有さない(例えば、(0,0))。そして、そうした点は、それら自体の加法的逆元である。
【0099】
ε
n上の2点AおよびBに交差している「ライン(“line”)」l
A,Bは、より小さい黒丸によって表され、点の有限集合になり、類似の幾何学的要件を満たしており、そして、楕円曲線スカラ乗法の定義は、依然として保持されている。
図6Aと同様に、
図6Bは、点A+B=-Cを示しており、それは、点C=-(A+B)の加法的逆数であり、そこで、ラインl
A,Bは、ε
nと再交差する。
【0100】
ε
n上の任意の2点に係る楕円曲線加法A+B=-Cは、以下の式によって代数的に定義することができる。
【数4】
【0101】
上記の目的のために、整数νの乗法的逆元ν-1の定義は、以下のように修正される。
νν-1≡1(mod p)
【0102】
すなわち、整数νの乗法的逆元は、ν mod pのモジュラ逆数である。
【0103】
B=-Aのケースは特殊であり、そして、単位元∞の導入によって解決される。示されるように、その場合、A+B=A+(-A)=∞である。B=∞も、また、特殊なケースであり、上記のようにA+∞=Aとして、解決される。
【0104】
楕円曲線スカラ乗法の定義は、この楕円曲線加法の定義を採用しており、かつ、それ以外は同じである。
【0105】
他のコンテキストにおいて、スカラνの乗法的逆元ν-1の定義は、注意して、以下のようである。
νν-1≡1(mod n)
【0106】
コンテキストにおいて、mod n、または、mod pに関して、乗法的逆元が定義されるか否かは明らかであろう。
【0107】
実際には、数が、mod n、または、mod pとして扱うべきか否かを識別するために、以下のチェックを適用することができる。
1.その数はEC点の座標を表している?
a.はいの場合には、mod pである。
2.その数はEC点を乗法するために使用されるか?
a.はいの場合には、mod nである。
【0108】
両方のチェックが肯定の答えを出す場合があり、その場合に、その数は、mod p、かつ、mod nでなければならないことに留意すること。
【0109】
楕円曲線暗号(ECC)
楕円曲線演算は、秘密値を隠ぺい(obscuring)することにユニークな能力を提供し、そして、多くの現代の暗号システムの基礎を形成している。特に、有限体上の楕円曲線点のスカラ乗法をリバースすることは、困難な問題である(実行することは計算的に実行不可能である)。
【0110】
秘密鍵Vは、整数の形式をとり、そして、対応する公開鍵Pは、「ジェネレータポイント(“generator point”)」Gから導出される楕円曲線ε
n上のポイントPであえい、それは、また、以下のように、楕円曲線ε
n上の点でもある。
【数5】
ここで、「・」は、a、b、およびn(楕円曲線パラメータ)で示される、楕円曲線ε
nおける楕円曲線スカラ倍算を表す。
【0111】
十分に大きいVについて、Pを導出するために楕円曲線加法をVだけ実際に実行することは困難であり、すなわち、計算的に実行不可能である。しかしながら、Vが既知である場合に、Pは、楕円曲線演算の代数的特性を利用することによって、はるかに効率的に計算することができる。Pを計算するために使用され得る、効率的なアルゴリズムの一つの例は、「ダブルアンドアッド(“double and add”)」アルゴリズムであり、重要なことに、これは、Vが既知である場合にのみ実施することができる。
【0112】
逆に、Vが既知でない場合は、Vを導出する(すなわち、スカラ乗法をリバースする)計算上実行可能な方法は、。GおよびPの両方が既知である場合(これはいわゆる「離散対数問題(“discrete-logarithm problem”)」である)でさえも、存在しない。攻撃者は、Gから出発し、そして、Pに達するまで楕円曲線点の追加を繰り返し実行することによって、「ブルートフォース(“brute force”)」を試みることができる。その時点で、Vが、彼が実行しなければならない楕円曲線点加法の数であることを、彼は知るだろうが、計算的に実行不可能であることがわかる。従って、Vは、上記の意味でトラップドア(trapdoor)の要件を満たす。
【0113】
ECCにおいて、公開鍵P、生成器鍵G、および、楕円曲線εnは公開されており、そして、既知であることが仮定されているが、一方で、秘密鍵Vは、秘密である。
【0114】
楕円曲線デジタル署名検証アルゴリズム(ECDSA)
秘密鍵システムにおいて、ユーザまたは他のエンティティは、典型的に、秘密鍵Pを保持しており、これは、彼らのアイデンティティおよび対応する公開鍵を証明するために使用され、そして、対応する秘密鍵Pは、以下のように計算することができるだろう。
P=V・G
【0115】
秘密鍵Vは、ECDSAを使用して、一つのデータm(「メッセージ(“message”)」)に署名するために使用され得る。
【0116】
ECDSAのさらなる詳細は、例えば、参照によりその全体が本明細書に組み込まれる、以下の文献において見出すことができる。
「RFC6979-デジタル署名アルゴリズム(DSA)および楕円曲線デジタル署名アルゴリズム(ECDSA)の決定論的使用法(“RFC 6979-Deterministic Usage of the Digital Signature Algorithm(DSA) and Elliptic Curve Digital Signature Algorithm(ECDSA)”)」、Tools.ietf.org、2019。
【0117】
図6Cは、署名生成機能の概略的な機能ブロック図を示しており、署名生成器(signature genarator_600)は、公開鍵-秘密鍵ペア(V,P)についてECDSA署名(r,s)を生成する。ECDSA署名は、値のペアであり、本明細書では、r部(r)およびs部(s)と、それぞれ称される
【0118】
署名生成は、同じ楕円曲線εn、および、公開鍵Pを導出するために使用される生成器ポイントGに基づいており、従って、楕円曲線パラメータa、b、およびn、並びに、生成器ポイントGは、署名生成器600に対する入力として示されている。
【0119】
署名生成器600のエフェメラルキー(ephemeral key)生成器602は、「一時的な(ephemeral)」鍵kを生成する。k∈[1,n-1]であり、すなわち、1から10までの範囲を含む。
【0120】
r部生成器604は、以下のように、kから、対応する公開エフェメラルキーを計算する。
R=k・G
そして、次いで、計算されたポイントのx座標をとる([]xは、楕円曲線点のx座標をとるプロセスを示している)。
r=[R]x mod n
これは、署名のr部分である。
【0121】
s部生成器606は、以下のように、k mod nの逆数k-1(すなわち、k-1K≡1(mod n)となる-上記を参照のこと)、および、H(m)で示される、メッセージのハッシュ(必要ならば切り捨てられる)を使用して、署名のs部を計算する。
s=k-1(H(m)+rV) mod n
【0122】
本実施例において、メッセージmは、トランザクション608に含まれるべきデータ(本実施例では1つ以上のトランザクション出力)を含んでいる。これは、メッセージmに署名するプロセスと称されてよく、そして、mは、トランザクションの署名された部分と称され得る。
【0123】
メッセージmおよび署名(r,s)は、トランザクション608の一部を形成している。本実施例において、署名(r,s)は、アンロッキングスクリプトの一部としてトランザクション608の入力に含まれている。
【0124】
図6Dは、トランザクション608を検証するための署名検証機能(signature verifier)620の概略的な機能ブロック図を示している。署名検証器(signature verifier)620によって実行される計算は、上述のように、公開されている、同じ楕円曲線ε
n、および、発生器ポイントGに基づいている。
【0125】
署名は、入力として秘密鍵Vを必要とし、有効な署名を生成するために、その知識を要するが、一方で、署名ペア(r,s)、メッセージm、および、公開鍵Pのみが署名(r,s)を検証するために必要である。署名を検証するために、署名検証器620は、(署名(r,s)を生成するために使用されたのと同じハッシュ関数を適用して)トランザクションmの署名された部分をハッシュする。検証プロセスが、次いで、以下の計算を使用して実行される。
R’=H(m)s-1・G + rs-1・P
【0126】
本署名は、[R’]x mod n=r
である場合にのみ有効であり(すなわち、署名検証が成功する)、そうでない場合に、それは無効である(すなわち、署名検証は失敗する)。本例において、rは、トランザクション608に含まれる署名のr部分を示している。
【0127】
署名検証プロセスにおいて使用される公開鍵Pは、例えば、先行するトランザクションのロッキングスクリプトにおいて指定され得る。この場合には、先行するトランザクションのロッキングスクリプトで指定された公開鍵、並びに、署名された部分mおよび(後の)トランザクション608の署名(r,s)を使用して、署名検証が実行され、-そして、署名(r,s)が、先行するトランザクションにおいて指定された公開鍵P、および、後のトランザクション608の署名された部分mに基づいて生成されたものでなければ、失敗(fail)する。従って、秘密鍵Vを保持する人だけが、(典型的には、後のトランザクション608の出力に自身の署名を含めることによって)先行するトランザクションの出力を要求することができ、そして、後のトランザクション608の署名部分mは、署名(r,s)を無効にすることなく、変更することはできない。
【0128】
知識証明(Knowledge Proof)
「rパズル(r-puzzle)」は、任意の有効な公開鍵-秘密鍵ペアを使用して支出当事者が入力UTXOに署名することを可能にする、あるタイプのトランザクションスクリプトである。鍵ペアは、アプリケーション固有であるか、または、1回限りの使用(one-off use)のためにランダムに生成され得る。
【0129】
そうした知識証明において、署名者は、秘密番号(secret number)kを使用して、署名(r,s)のr部分を導出する。
【0130】
rパズルを使用する一つの例示的なロッキングスクリプトは、以下の形式を有することができる。
【数6】
【0131】
OP_HASH160の代わりに、ハッシングを実行する任意のオペコードが使用されることが理解されるであろう。例えば、OP_RIPEMD160、OP_SHA1、OP_SHA256、または、OP_Hash256である。
【0132】
簡潔にするために、ロッキングスクリプトは、次のように表すことができる。
【数7】
ここで、Extract_rは、署名からrを抽出するopコード(op-code)のコレクションに対する略語である。Extract_rは、以下のように与えられる。
【数8】
【0133】
上記スクリプトは、署名の最初の3バイトをドロップし、次いで、署名のr部分を抽出して、次に、署名の残りをドロップする。
【0134】
アンロッキングスクリプトは、以下の形式を有している。
<Sig><PK>
ここで、署名は、(r,s)の形式をとる。rは、秘密番号kから導出され、そして、<PK>は、署名者の公開鍵である。
【0135】
署名者、アンロッキングスクリプトを提供する人は、kG=(x,y)かつr=x mod nである、rを知っている。すなわち、署名者は、Gにより乗算されると、モジュラスnをとるときに、x座標がrであるポイントを生成する、kを知っている。
【0136】
<Hash(r)>は、ロッキングスクリプトにおいて提供され、そして、従って、公開(public)されている。秘密は、kである。スクリプトの実行は、以下の表におけるものである。メインスタック(Main Stack)、スクリプト(Script)。
【表1】
【0137】
署名者は、メッセージに署名するために任意の秘密鍵-公開鍵ペアを使用することができる。これは、ロッキングスクリプトを作成する際に、秘密鍵も、対応する公開鍵も使用されないからである。従って、ロッキングスクリプトを提供する当事者は、トランザクションを生成する時点で、誰がアンロッキングスクリプトを提供するのかを知る必要がない。
【0138】
ペイツーRパズル(pay-to-R-Puzzle)は、また、P2RP HASH(r)として表すこともできる。
【0139】
署名ツリー(SIGNATURE TREES)
マークルツリー(Merkle Trees)
マークルツリーは、データのコレクションのセキュアな検証を可能にする、階層データ構造である。マークルツリーにおいて、木における各ノードには、インデックスペア(i,j)が与えられており、そして、N(i,j)として表される。インデックスi、jは、木における特定の位置に関連する単なる数値ラベルである。
【0140】
マークルツリーの重要な特徴は、そのノードそれぞれの構成が、以下の式によって支配されることである。
【数9】
ここで、Hは、暗号ハッシュ関数である。
【0141】
これらの式に従って構築されたバイナリマークルツリーが、
図5に示されている。図示されるように、i=jである場合はリーフノードに対応していることが分かる。これは、単に、データD
iの対応するi番目(i
th)パケットのハッシュである。i≠jである場合は、内部ノードまたは親ノードに対応しており、これは、1つの親(マークルルート)が見つかるまで、子ノードを再帰的にハッシュして、かつ、連結することによって生成される。
【0142】
例えば、ノードN(0,3)は、4個のデータパケットD
0,…,D
3から、以下のように構成される。
【数10】
【0143】
ツリー深度Mは、木におけるノードの最低レベルとして定義され、そして、ノードの深さmは、ノードが存在するレベルである。例えば、m
root=0、かつ、m
leaf=Mであり、ここでは、
図5においてM=3である。
【0144】
ビットコイン、および、いくつかの他のブロックチェーンにおけるマークルツリーについて、ハッシュ関数は、ダブルSHA256であり、標準ハッシュ関数SHA-256を2回適用するものである。つまり、H(x)=SHA256(SHA256(x))。
【0145】
マークルプルーフ(Merkle proofs)
マークルツリーの主な機能は、いくつかのパケットDiが、N個のデータパケット
【数11】
(以降は、Dと表記する)、
D∈{D
0,…,D
N-1}のリストまたはセットのメンバーであることを検証することである。検証のためのメカニズムは、マークルプルーフとして知られており、そして、所与のデータパケットD
iおよびマークルルートRについてマークルパス(Merkle path)として知られているハッシュのセットを取得することを含んでいる。データパケットのためのマークルプルーフは、繰り返されるハッシュおよび連結としてルートRを再構築するために必要とされるハッシュの単なる最小リストである。これは、しばしば「認証プルーフ(authentication proof)」と称される。
【0146】
存在のプルーフは、全てのパケットD0,…,DN-1が存在し、かつ、それらの順序が証明者に知られている場合には、自明に実行され得る。しかしながら、このことは、マークルプルーフよりもはるかに大きいストレージオーバーヘッドを必要とし、並びに、データセット全体が証明者に利用可能であることを必要としている。マークルプルーフを使用すること、および、リスト全体を使用することの間の比較が、以下の表に示されている。ここでは、バイナリマークルツリーを使用しており、そして、データブロックの数Nは、整数の2乗に正確に等しいことが仮定されている。
【0147】
以下の表は、マークルツリーにおけるリーフノード(leaf node)の数と、マークルプルーフ(または、マークル照明)に必要とされるハッシュの数との間の関係を示している。
【表2】
【0148】
この簡略化されたシナリオ-ここでは、データパケットの数がリーフノードの数に等しい-において、マークルプルーフを計算するのに必要なハッシュ値の数は、対数的に増減する(scale)ことが分かる。明らかに、log2Nハッシュを含むマークルプルーフを計算することは、N個のデータハッシュを保管し、かつ、明示的なプルーフを計算するよりも、はるかに効率的であり、そして、実用的である。
【0149】
方法(Method)
マークルルートRが与えられると、データブロックD0が、Rによって表される順序リストD∈{D0,…,DN-1}に属することを証明したい場合に、我々は、以下のようにマークルプルーフを実行することができる。
i. 信頼できるソースからマークルルートR取得する。
ii. ソースから、マークルプルーフΓを取得する。この場合にΓは、ハッシュのセットである。
Γ={N(1,1),N(2,3),N(4,7)}
iii. D1およびΓを使用して、以下のようにマークルプルーフを計算する。
a.取得のためにデータブロックをハッシュする。
N(0,0)=H(D0)
b.N(1,1)と連結し、かつ、取得のためにハッシュする。
N(0,1)=H(N(0,0)||N(1,1))
c.N(2,3)と連結し、かつ、取得のためにハッシュする。
N(0,3)=H(N(0,1)||N(2,3))
d.N(4,7)と連結し、かつ、ルートを取得するためにハッシュする。
N(0,7)=H(N(0,3)||N(4,7))
R'=N(0,7)
e.計算されたR'を(i)で取得されたルートRと比較する。
1.R'=Rである場合、ツリーにおけるD0の存在、そして、従ってデータセットDが確認される。
2.R'≠Rである場合、プルーフは失敗であり、そして、D0はDメンバーであると確認されない。
【0150】
これは、マークルツリー、および、そのルートによって表されるデータセットの一部として、いくつかのデータについて存在のプルーフを提供するための効率的なメカニズムである。例えば、データD0がブロックチェーントランザクションに対応しており、かつ、ルートRがブロックヘッダの一部として公に利用可能である場合に、我々は、トランザクションがそのブロックに含まれていたことを迅速に証明することができる。
【0151】
例示的なマークルツリーの一部としてD
0の存在を認証するプロセスが、
図6に示されている。これは、所与のブロックD
0およびルートRについてマークルプルーフを実行することが、必要な最小数のハッシュ値のみを使用することによって、マークルツリーを「上方へ(“upwards”)」効果的にトラバースしていることをデモンストレーションしている。
【0152】
マークルプルーフを構築するための最小情報
単一のリーフマークルプルーフを構築するとき、必要とされる最小情報(minimal information)は、以下である。
1.リーフのインデックス:マークルツリーでのリーフ層におけるリーフの位置。
2.ハッシュ値の順序付きリスト:マークルルートを計算するために必要とされるハッシュ値。
【0153】
リーフのインデックスがどのように機能するかを説明するために、
図5におけるマークルツリーを考える。ボブ(Bob)は、ルートRを知っているが、ツリーの全てのリーフを知っているわけではない。D
0のマークルブランチは、1つのインデックス、0、および、3個のハッシュ値(円で囲まれている)で構成されている。インデックスは、提供されたハッシュ値が、計算されたハッシュ値の左または右のいずれに連結されるべきかを示している。
【0154】
マークルツリーはN=2
M個のリーフを有していると仮定する。層(layer)0でのインデックスiを仮定して、i
0=i、b
0=i
0 mod 2、p
0=i
0+(-1)
boとする。すなわち、以下のとおりである。
【数12】
【0155】
p0は、インデックスi0を有するリーフノードに係るペアリーフノードのインデックスである。これらは、マークルツリーにおけるそれらの親ハッシュノードを計算するために、連結され、かつ、ハッシュされるので(上記を参照のこと)、ペアと称される。インデックスp0を有するノードは、また、i0リーフノードのマークルルートを計算するときに提供されなければならないので、「提供されたハッシュ(“the provided hash”)」または「必要なデータ(“the required hash”)」とも呼ばれる。
【0156】
従って、我々は、層mで、以下を定義し、有する。
【数13】
【0157】
次いで、提供されるハッシュのインデックスは、以下である。
【数14】
【0158】
上記の式は、インデックスが0で始まることを仮定している。
【0159】
署名ツリー(Signature Tree)
署名ツリーは、閾値署名(threshold signature)要件についての効率的な代替案であり、ここでは、トランザクションに署名するために閾値数の当事者が必要とされる。この方法において、マークルツリーが作成され、ここでは、そのリーフそれぞれが1つの支出条件を表すことができる。ロッキングスクリプトは、マークルツリーのルート、および、マークルプルーフを検証するためのオペコードを含んでいる。アンロッキングスクリプトは、マークルプルーフ、および、支出条件のうちの1つ(すなわち、リーフノードのうちの1つ、または、そこからリーフノードが導出され得る情報)を含んでいる。
【0160】
図5のマークルツリーを参照すると、リーフノードD
nは、可能な署名者の公開鍵から導出される。
【0161】
1-of-Nマルチシグ(Multisig)
1-of-Nのマルチシグネチャ(multisignature)等価マークルツリーにおいて、ロッキングスクリプト生成ステップは、以下のとおりである。
1. 関連する公開鍵のハッシュを計算し、そして、ツリーのリーフとしてハッシュを置く。すなわち、例えば、ユーザ1は、公開鍵P
1を有しており、X
1=Hash(P
1)とする。
2. マークルルートを計算する。
3. 以下のロッキングスクリプトを形成する。
【数15】
【0162】
ここで、ストリング(OP_SWAP OP_IF OP_SWAP OP_ENDIF OP_CAT OP_SHA256)*3は、括弧の間のオペコードが、
【数16】
回だけ繰り返されることを意味する。
【0163】
アンロッキングスクリプトは、シグネチャ、公開鍵、および、マークルプルーフで構成されている。
【0164】
マークルプルーフは、<sibling_node><0 if sibling is to the left and 1 if it is to the right>で構成されている。
【0165】
例えば、
図5のマークルツリーのデータ項目D
4である公開鍵P
5を有する、ユーザ5に対して、以下のアンロッキングスクリプトを提供する。
<Sig><PK><N(0,3)><0><N(6,7)><1><N(5,5)><1>
【0166】
スクリプトの実行は、以下のとおりである。
【表3】
【0167】
マークルプルーフ構造(Merkle Proof Construct)
ここでは、[Merkle Root Derivation(マークルルート導出)]を、以下の略語として使用する。
(OP_SWAP OP_IF OP_SWAP OP_ENDIF OP_CAT OP_SHA256)をt回だけ反復する。ここで、tは、マークルプルーフの長さであり、そして、
【数17】
によって与えられる。
【0168】
毎回、ストリングは、連結されるべき2つのシブリング(sbling)ツリーノード、および、計算されるべき連結のハッシュを計算させる。ハッシュは、2つのシブリングツリーノードの親ノードである。
[Merkle Root Derivation]=<Merkle Tree point A><0 if A is left, or 1 otherwise><Merkle Tree point>→<Parent node>
【0169】
説明のために、ストリングのこの部分の実行は、以下のとおりである。
【表4】
【0170】
M-of-Nマルチシグ(Multisig)
上記の方法は、N個のうちM個の署名者の閾値を可能にするために使用され得る。その場合に、各リーフは、N個のうちのM個(M-of-N)の組み合わせのうち1つに対応している(すなわち、NはMを選択)。
【0171】
例えば、5人のユーザ{U
1,U
2,U
3,U
4,U
5}が存在しており、かつ、5人のユーザのうちの4人が署名する要件、すなわち、4-of-5マルチシグ、が存在する場合に、ツリーは、以下によって与えられるX
iを用いて構成される。
【数18】
【0172】
奇数(odd number)のリーフが存在するので、「ダミー(“dummy”)」リーフX
6が導入され、その結果、偶数(even number)のリーフが存在している。ダミーリーフは、1の値、何らかの他の事前定義された定数、または、そのシブリングリーフの値を有し得る(すなわち、
【数19】
に設定する)。
【0173】
ロッキングスクリプトは、ツリーのルートを含む。アンロッキングスクリプトは、ルートへのリンクを証明するマークルプルーフを提供する必要がある。
【0174】
スクリプト内楕円曲線点加法検査(IN-SCRIPT ELLIPTIC CURVE POINT ADDITION CHECKING)
スクリプト内楕円曲線点加法検査(IECPAC)は、スクリプトにおいてP1+P2=P3であること検査するための方法を提供する。ここで、Pi=(xi,yi)は、楕円曲線(EC)点である。これは、以下の関数を確立している。
<Point Add P1、P2、λ、P3>
これは、入力としてP1、P2、λ、P3をとり、そして、λがP1とP2との間の線(line)の勾配であり、かつ、P3=P1+P2である場合に、真(TRUE)を返す。これら2つの検証は、スクリプト内で行われる。
本関数は、2つのステップを含んでいる。
1. λの値は、以下をチェックすることによって検証される。
P1≠P2である場合に、
λ(x2-x1) mod p = y2-y1 mod p
または、P1=P2である場合に、
2λy1 mod p = 3x1
2 mod p
2. P3の値は、P3=(x3,y3)の座標が以下を満たすことをチェックすることによって検証される。
x3=λ2-x1-x2 mod p
y3=λ(x1-x3)-y1 mod p
【0175】
この方法は、任意の数の点に拡張することができる。例えば、3つのEC点であるP=P
1+P
2+P
3の追加を検証するための演算は、以下のとおりである。
【数20】
ここで、P'=P
1+P
2であり、値λ'は、P
1とP
2との間の勾配であり、そして、値λは、P'とP
3との間の勾配である。
【0176】
P1、P2、P3、およびλは、アンロッキングスクリプトにおいて提供されてよく、チェックは、スクリプト内で実行される。
【0177】
マークルツリーによるRパズル(R-PUZZLE)
本開示の実施形態に従って、Rパズルおよび署名ツリーの概念は、ブロックチェーントランザクションの出力をロッキングするフレキシブルで、かつ、セキュアな方法を提供するために有利に組み合わされ得る。第1ユーザ(例えば、アリス103a)は、第1トランザクションの出力をロッキングするロッキングスクリプトを含む、第1トランザクションを構築する。ロッキングスクリプトは、第2ユーザ(例えば、ボブ103b)またはユーザのグループによって生成された第2トランザクションのアンロッキングスクリプトが、マークルプルーフ部分、署名部分、および公開鍵を含むことを要求するように構成されている。ロッキングスクリプトを成功裡にアンロッキングするために、署名部分は、r部分を含む必要がある。それは、ハッシュされたときに、マークルツリーの一部を形成するハッシュ値を生成する。ロッキングスクリプトは、ハッシュ値およびマークルプルーフを使用して、マークルプルーフを実行し、そして、ロッキングスクリプトに含まれるマークルツリーのノード(または部分)に一致することを検証する(テスト1)。例えば、ノードは、マークルツリーのマークルルートであってよい。加えて、署名部分は、公開鍵を使用して検証される(テスト2)。各テストが満たされた場合にのみ、ロッキングスクリプトおよびアンロッキングスクリプトが、成功裡に実行される。
【0178】
ユーザのセットそれぞれは、秘密値kを知っている。マークルツリーは、ユーザの秘密値から導出されたr値またはR値(または「r部分(“r-portions”)」)に基づいているノードを用いて定義される。上記のように、
r = [R]x mod n
R = kG
であり、ここで、ECDSA署名は、(r,s)の形式をとる。
【0179】
用語「r部分」は、本明細書では、Rおよびrの両方を指すように使用されている。rは、ECDSA署名のr部分である。
【0180】
本明細書ではECDSA署名に対して参照がなされるが、ECDSAは、デジタル署名スキームの1つのタイプにすぎず、そして、一般的に、任意の同等のスキームが使用され得ることに留意すること。
【0181】
1-of-NのR値(R-values)
図7は、システムを実装するための、例示的なマークルツリー、第1トランザクションTx
1、および第2トランザクションTx
2を示しており、そこでは、N人のユーザのうち1人が、第1ユーザ103aによって生成された、第1トランザクションTx
1のロッキングスクリプト203Aをアンロッキングすることを要求される。
【0182】
この場合に、各ユーザUiは、秘密kiを有している。マークルツリーの各リーフノードは、ユーザのうち1人の秘密値kiから導出されたr部分のハッシュである。
【0183】
以下のステップが実施される。
1. Ri = kiG = (xi,yi)を計算する。
2. ri = xi mod N を得る。
3. リーフ値Xi = Hash(ri)を計算する
4. 残りのユーザまたはコーディネータとXiを共有し、その結果、マークルツリーが構築され得る。
5. リーフXiから、ツリーのマークルルートを計算する。
【0184】
Xiからriを導出することはできないので、他のユーザとXiを共有することはセキュリティに影響しない。
【0185】
マークルルートは、また、「マークルツリー部分(“Merkle tree portion”)」とも称される。同様に、マークルツリーのリーフノードまたは中間ノードも、また、マークルツリー部分とも称され得る。
【0186】
ロッキングスクリプトは、以下の形式をとることができる。
【数21】
【0187】
【0188】
アンロッキングスクリプトは、以下の形式であってよい。
<Sig><PK><Merkle Proof>
【0189】
すなわち、アンロッキングスクリプトは、(ri,si)形式の署名を含んでいおり、ここで、riは、ロッキングスクリプトのr部分、署名者の公開鍵PK、および、マークルプルーフ部分である。
【0190】
アンロッキングスクリプト202Aは、第2ユーザ103bによって生成された、第2トランザクションTx
2において提供される。
図7の実施例において、ユーザ5は、アンロッキングスクリプト202Aを生成する。このインスタンスにおいて、マークルプルーフは、<Z
1><0><Y
4><1><X
6><1>である。
【0191】
アンロッキングスクリプト202Aと共に実行されると、アンロッキングスクリプト203Aは、以下のステップが実施させるようにする。
1. アンロッキングスクリプト202Aから、署名のr部分が抽出される。
2. r部分がハッシュされる。
3. 抽出されたr部分およびアンロッキングスクリプト202Aのマークルプルーフを使用して、候補マークルツリールートが生成される(ステップA)。
4. 候補マークルプルーフは、それがロッキングスクリプト203Aにおいて提供されるマークルルート(ターゲットマークルルート)に等しいことをチェックすることによって、検証される。
5. 署名は、アンロッキングスクリプト202Aに提供された公開鍵を使用して検証される。
【0192】
アンロッキングスクリプトは、以下の条件が全て真である場合に限り、任意の<Sig><PK>について有効である。
1. 署名から抽出されたr値のハッシュが、ツリーのリーフの1つと一致する。
2. 提供されたマークルプルーフは、ロッキングスクリプトにおける値に一致するルートを計算する。
3. <Sig><PK>ペアは、OP_CHECKSIGによって検証される。
【0193】
M-of-NのR値
図8は、システムを実装するための、例示的なマークルツリー、第1トランザクションTx
1、および第2トランザクションTx
2を示しており、そこでは、N人のユーザのうちM人が、第1ユーザ103aによって生成された、第1トランザクションTx
1のロッキングスクリプト203Bをアンロッキングすることを要求される。
【0194】
再び、各ユーザUiは、秘密kiを有している。しかしながら、この場合に、マークルツリーの各リーフノードは、ロッキングスクリプト202Bを一緒にアンロッキングすることができるユーザのグループに係る秘密値kiから導出されたr部分の組み合わせのハッシュである。
【0195】
2-of-4のシステムにおいて、各リーフX
iは、6つの可能な4-choose-2組み合わせ(4C2)のうちの1つに対応している。
【数23】
【0196】
対応するマークルツリーは6つのリーフを有している。すなわち、X7またはX8は存在しない。ツリーのバランスをとるために、リーフノードを有しない、Y4は1に設定される。Y4は「ダミー(“dummy”)」ノードと称される。その代わり、奇数のリーフノードが存在する場合に、ダミーノードは、ダミーリーフノードであり、また、1にも等しい。
【0197】
上記のrUi値が合計されるが、これらの値は、任意の他の方法で、例えば、グループにおける各ユーザのr部分を連結または乗算することによって、組み合わせられ得ることが理解されるだろう。
【0198】
ロッキングスクリプトは、2個のr-extractor、単一のマークルプルーフ、および、2個のOP_CHECKSIGを含み得る。
【数24】
【0199】
アンロッキングスクリプトは、2つの<Sig><PK>および1つのマークルプルーフを含んでいる。
<Sig1><PK1><Sig2><PK2><Merkle proof>
【0200】
すなわち、アンロッキングスクリプト202Bは、各ユーザについて署名-鍵ペアを含んでおり、各署名は、r部分およびマークルプルーフ部分を含む。
【0201】
X
6についてスクリプトの実行は、以下のとおりである。ここで、U
3は、r
3を計算して、<Sig
U3><PK
U3>を提供するために、k
3を使用し、そして、U
4は、同様に、k
4を使用し、そして、<Sig
U4><PK
U4>を提供する。
【表5】
【0202】
図8を参照すると、2人のユーザ、U
1およびU
2は、アンロッキングスクリプト202Bを含む第2トランザクションを生成する。組み合わせr
U1+r
U3は、リーフノードX
2に対応しており、その結果、提供されるマークルプルーフは<Z
2><1><Y
2><1><X
1><0>である。
【0203】
ロッキングスクリプト203B、がアンロッキングスクリプト202Bと一緒に実行されるとき、以下のステップが実施される。
1. 署名それぞれのr部分が、アンロッキングスクリプト202Bから抽出される。
2. 2つのr部分が合計され、そして、その合計がハッシュされる。
3. 抽出されたr部分、および、アンロッキングスクリプト202Bのマークルプルーフを使用して、候補マークルツリールートが生成される(ステップA)。
4. 候補マークルプルーフは、それがロッキングスクリプト203Bにおいて提供される、ターゲットマークルルートに等しいことをチェックすることによって、検証される。
5. 署名それぞれは、アンロッキングスクリプト202Bにおいて提供される、対応している公開鍵を使用して検証される。
【0204】
アンロッキングスクリプトは、以下の条件が全て真である限りにおいて、任意の<Sig><PK>に対して有効である。
1. 署名から抽出されたr値の組み合わせのハッシュが、ツリーのリーフのうちの1つと一致する。
2. 提供されたマークルプルーフは、ロッキングスクリプトにおける値に一致するルートを計算する。
3. 署名-鍵ペア<Sig><PK>両方が、OP_CHECKSIGによって検証される。
【0205】
上記の方法は、任意のM-of-Nまで拡張するでき、その結果、ロッキングスクリプトが、以下によって与えられ得る。
【数25】
【0206】
ここでtは、マークルプルーフの長さである。
【数26】
Mは、閾値、すなわち、必要とされる署名者の数であり、そして、OP_CHECKSIG*Mは、OP_CHECKSIGをM回繰り返すことを意味している。
【0207】
リーフノードがM個のr値の組み合わせのハッシュである、上述のマークルツリーの使用は、M-of-N署名要件についてより効率的なソリューションである。これは、ロッキングスクリプトおよびアンロッキングスクリプトが、M人の署名者についてM個の別個のパスが存在し、各リーフが単一のユーザに対応しており、その結果、マークルツリーがN個のリーフを有するであろう、M-of-Nシステムに対する代替ソリューションの場合よりも小さいからである。
【0208】
M個の別個の経路の場合において、アンロッキングスクリプトは、M個のマークルプルーフを含んでいる。ここで、単一のマークルプルーフは、長さ
【数27】
ノードである。
【0209】
しかしながら、各リーフノードがN-choose-Mの可能性の1つに対応するように設定される場合に、ツリーは、
【数28】
リーフを有し、そして、アンロッキングスクリプトは、
【数29】
ノードのマークルプルーフを含んでいる。
【0210】
全ての正の整数に対して、常に、
【数30】
であろう。ここで、M≦Nである。
【0211】
従って、上述のM-of-Nツリーの使用は、ツリーおよびスクリプトのサイズ、そして、従って、コストが低減されるので、より安価で、かつ、より効率的である。
【0212】
上記で提案された方法は、OP_CHECKSIGをM回繰り返すことを必要とする。この要件を除去するために、ユーザの各グループ(マークルツリーにおけるリーフに対応している)は、単一の署名鍵を有している。このことは、OP_CHECKSIGオペコードの数を1つまで削減し、そして、アンロッキングスクリプトのサイズを小さくする。このことは、アンロッキングスクリプトおよびロッキングスクリプトの両方が短く、かつ、それらの実行がより少ないステップを有するので、コストを低減し、そして、効率を改善する。
【0213】
R点楕円曲線加法(R POINTS ELLIPTICAL CURVE ADDITION)
rパズルのリーフノードを含む署名ツリーは、リーフを生成するためにEC点加法が使用されるように、修正することができる。IECPACは、次いで、アンロッキングスクリプトから抽出されるEC点、Rxiが、実際にはM個のECポイント、R1,…,RMの合計であることをチェックするために使用される。それは、また、アンロッキングスクリプトからも抽出される。一旦、IECPACチェックが実行されると、ツリーリーフに対するRxiのリンク、そして、その後に、ロッキングスクリプトにおいて提供されるルート値に対するリンクが、マークルプルーフ導出を使用して検証される。
【0214】
以前のセクションのように、マークルツリーが形成され、ここで、各リーフは、可能なN-choose-Mの組み合わせのそれぞれに対応している。
【0215】
IEPCA法の使用は、リーフデータ(すなわち、R値の合計)、および、リーフデータがそこから導出されるR値(またはr部分)(すなわち、M人のユーザのR値)の両方を、ユーザが知っていることを証明するための技法を提供する。
【0216】
個別署名スキーム(Individual Signature Scheme)
図9は、システムを実装するための、一つの例示的なマークルツリー、第1トランザクションTx
1、および、第2トランザクションTx
2を示しており、システムにおいては、N人のユーザのうちのM人が、第1ユーザ103aによって生成された、第1トランザクションTx
1のロッキングスクリプト203Cをアンロッキングするように要求されている。
【0217】
再び、各ユーザU
iは、秘密k
iを有している。マークルツリーの各リーフノードは、ロッキングスクリプト202Cを一緒にアンロッキングすることができる、ユーザのグループの秘密値k
iから導出されたM個のr値の和から導出されたx座標のハッシュである。すなわち、M=2の場合、
【数31】
であり、ここで、R
xi=R
α+R
βである。
【0218】
2-of-4のマルチシグシステムが一つの例として提供される。マークルツリーの各リーフX
iは、
図8の実施例のように、ロッキングスクリプト203Cをアンロッキングすることができる、ユーザの6つの可能な4-choose-2の組み合わせのうちの1つに対応している。例えば、リーフX
iは、ユーザU
1およびU
2によって生成される。Y
4は、マークルツリーのバランスをとるために、再び1に設定される。
【0219】
個別署名方式では、各グループメンバーが、彼ら自身の署名を提供する。
【0220】
以下のステップが実施される。
1. 各Uiは、秘密値kiを有する。
2. Ri= kiG= (xi,yi)を計算する
3. 楕円曲線点を加法して、RX1=R1+R3=(xX1,yX1)を得る。
4. X1=hash(xX1)
【0221】
N-choose-Mグループのそれぞれは、マークルツリーを構築するために、彼らのXiを、他のユーザまたはコーディネータのいずれかと共有する
【0222】
マークルツリー自体は
図8に示されるものと同様であるが、ロッキングスクリプト203Cおよびアンロッキングスクリプト202Cは、IECPACのために使用される追加的なコンポーネントを含んでいる。
【0223】
ロッキングスクリプト203Cは、以下を含んでいる。
1. 前記ツリーのルート、
2. 2つのOP_CHECKSIGオペコード、
3. 2つのExtract_rオペコードストリング、
4. IECPACに対するオペコードストリング、
5. マークルルート導出オペコードストリング。
【0224】
第2トランザクションは、リーフノードX3に対応しているユーザ1および3によって提供される。アンロッキングスクリプト202Cは、以下を含んでいる。
1. 2つの署名および2つの公開鍵であり、各ペアはユーザの1つに対応している。
<r1,s1><PK1><r3,s3><PK3>
する。
2. 楕円曲線点 <R1,R3,RX3>
3. 2つのEC点R1,R3の間の勾配 <λR1R3>
4. <Merkle Proof>
【0225】
勾配 <λR1R3>は、R1+R3=RX3であることを検証するためにIECPACによって使用される。
【0226】
マークルツリーは、ユーザのそれぞれについてRまたはrのいずれかを使用して構築され得る。
図9の実施例において、各X
iは、合計R(または、そのx座標)のハッシュであり、例えば、R
1+R
3=R
X3=(x
X3,y
X3)、かつ、X
3=hash(x
X3)であり、リーフのプリイメージ(pre-image)は、R
X3であろう。すなわち、アンロッキングスクリプト202Cに含まれるリーフのプリイメージは、リーフノードがどのタイプのr部分から導出されるかに依存する。
【0227】
ロッキングスクリプト203Cがアンロッキングスクリプト202Cと一緒に実行されるとき、以下のステップが発生する。
1. 署名からrU1およびrU2が抽出される。
2. ri= xi mod nを使用して、R1からr1およびr2が抽出される。抽出されたriは、それらがrUiと一致するか否かチェックされる(ステップA)。
3. 上述のIECPACアルゴリズムを使用して、R1+R3=RX3であることをチェックする(ステップB)。
4. X3が、hash(xX3)を使用して計算される。ここで、xX3=[RX3]xである。
5. 候補マークルプルーフが、<Merkle Proof>およびX3から計算される(ステップC)。
6. 候補マークルルートは、それが、ロッキングスクリプトにおいて提供されるターゲットマークルルートと等しいか否かチェックされる(ステップD)。
7. 2つの署名が、独立して検証される。
【0228】
XU3を計算するために使用される値xX3は、アンロッキングスクリプトに含まれている、RX3から抽出される。
【0229】
一般的に、M>2である場合、ロッキングスクリプトは、M個のOP_CHECKSIGオペコード、M個のExtract_rオペコードストリング、(M-1)個のIECPACストリング、および、単一のマークルルート導出オペコードストリングを含んでいる。
【0230】
アンロッキングスクリプトは、M個の署名と公開鍵、(M-1)個の勾配値<λ1>…<λM-1>とM個のEC点、(M-2)個の中間EC点と、EC点RXj、すなわちIECPACを実行するための全てのM点の合計、および、単一のマークルプルーフを含んでいる。
【0231】
グループ当たりの単一署名(Single signature per group)
ロッキングスクリプトおよびアンロッキングスクリプトの両方の長さを短縮し、かつ、その後の実行時間を短縮するために、
図9の方法は、ユーザの各グループが単一の署名を共有するように適合され得る。
【0232】
この場合、N-choose-M個のグループそれぞれは、そのグループを表すために単一のRパズルを選択する。IECPACは、提供されたシグネチャが複数のユーザから生成されたことを、外部の観察者に対して証明するために使用される。この実施形態は、各グループのメンバー間の高い信頼レベルを仮定している。任意のグループメンバーが、署名を提供し、そして、トランザクションを修正することができるからである。
【0233】
図10は、IECPACを使用する単一の署名の実施形態に係る一つの例示的な実装を示している。前述のように、2-of-4システムにおいては4人の個々のユーザが存在しており、各ユーザは、それぞれの秘密値k
iを有している。
【0234】
マークルツリーは、
【数32】
リーフ
【数33】
を有しており、そして、以下のように構成されている。
1. 各グループメンバーはR
i=k
iGを計算し、かつ、それをグループの残りと共有する。
2. EC点の加法が計算される。R
Xi=(x
Xi,y
Xi)=R
1+R
2+…+R
M
3. リーフは、X
i=hash(x
Xi)によって与えられる。
【0235】
図10の実施例においては、従って、6つのリーフが存在しており、それぞれが、リーフノードに関連付けられた署名グループ(signatory group)の2人のユーザのR値の合計から導出されている。
【0236】
ロッキングスクリプト203Dは、以下を含んでいる。
1. 単一のOP_CHECKSIGオペコード、
2. 単一のExtract_rオペコードストリング、
3. IECPACを(M-1)回実行するためのストリングオペコード、
4. 単一のマークルルート導出オペコードストリング、および、
5. マークルルート。
【0237】
アンロッキングスクリプト202Dは、グループのユーザのうちの1人、U1またはU3のいずれか、によって提供され、そして、以下を含んでいる。
1. 単一署名(rX3,sX3)および対応する公開鍵、
2. <λX3>勾配値
3. <R1>、<R3>、
4. マークルプルーフ、および、
5. RX3
【0238】
一般的に、任意のM-of-Nのグループについて、アンロッキングスクリプトは、以下のとおりである。
1. 単一署名(rX3,sX3)および対応する公開鍵、
2. <λ1>…<λM-1>勾配値
3. <R1>…<RM>、
4. マークルプルーフ、および、
5. RXi
【0239】
署名(rXi,sXi)を生成できるようにするために、全てのグループメンバーは、それらの秘密kiを共有している。sXiを計算するためには、署名者に値kXiが知られていなければならない。ここで、RXi=kXiG=(k1+…+kM)G
【0240】
ロッキングスクリプト203Dが、アンロッキングスクリプト202Dと一緒に実行されるとき、以下のステップが実行される。
1. rX3が署名から抽出され、そして、[RX3]x mod n= rX3 であることをチェックするために使用される(ステップA)。
2. RU1、RU3、および、勾配λと共に、上記のIECPACを使用して、RU1+RU3=RX3であることをチェックする(ステップB)。
3. X3=hash(xXi3)を使用して、X3が計算される。
4. <Merkle Proof>およびX3から、候補マークルルートが計算される(ステップC)。
5. 候補マークルルートは、ロッキングスクリプトに提供されたターゲットマークルルートと等しいか否かチェックされる(ステップD)。
6. 署名が検証される。
【0241】
より一般的なM-of-Nの実施形態において、上記のステップ1は、アンロッキングスクリプトで提供される(M-1)個の勾配およびM個のR値の全てを使用し、IEPAC方法が(M-1)回実行され、そして、(M-2)個の中間EC点が含まれている。
【0242】
値Xiは、上述のように、グループ署名から抽出されるものとしてrXiを使用して計算され得る。または、値Xiは、グループ(RUi)の各個々のユーザに対応しているアンロッキングスクリプトにおいて提供されるR値を使用して、計算され得る。すなわち、X3=hash([RU1+RU3]x)である。
【0243】
単一のグループシグネチャまたは複数の個別シグネチャの実施形態が使用されるか否かにかかわらず、IECPACの複雑さは、Mと共に線形に増大する。
【0244】
パス選択(PATH CHOICE)
上述の実施例において、マークルルートは、ロッキングスクリプトにおいて提供されており、そして、任意のユーザは、彼らがkおよびマークルプルーフを知っている場合に、アンロッキングスクリプトを提供し得る。ここで、k=k1+k2+…+kMである。
【0245】
アンロッキングスクリプトを提供することができるユーザを制限するために、ロッキングスクリプトの作成者(creator)は、代わりに、ロッキングスクリプト内にマークルツリーのノードを提供し得る。このようにして、マークルツリーにおいて前記ノードの下に位置するリーフノードを生成するために、彼のr値が使用されるユーザのみが、アンロッキングスクリプトの作成者であり得る。
【0246】
図11A-
図11Cは、8個のリーフノードを含んでいるマークルツリーを示し、各Xiは、Hash(r
i)である。すなわち、各ノードは、単一のユーザに対応している。これらの図それぞれは、破線で示されるように、アンロッキングスクリプトから抽出されたr部分から導出されたリーフノードから、ロッキングスクリプトにおいて提供されるマークルツリー部分まで、マークルツリーに沿ってトラバースされるパス(path)経路を示している。
【0247】
各実施例において、X3に対応しているユーザ3は、上述のように、署名内にr3を含む、アンロッキングスクリプトを提供する。
【0248】
図11Aは、8人のユーザのいずれもがロッキングスクリプトをアンロッキングすることができるように、ロッキングスクリプトがマークルルートRootを含む一つの例を示している。ここで、マークルプルーフは、X
4、Y
1、およびZ
2を含んでいる。
【0249】
以下のロッキングスクリプトは、{U
1,…,U
8}のいずれによってもアンロッキングされ得る。
【数34】
【0250】
代わりに、例えば、
図11Bに示されるように、ロッキングスクリプトがZ
1を含む場合には、ユーザ1-4のみが、ロッキングスクリプトをアンロッキングすることができる。アンロッキングスクリプトにおいて提供されるマークルプルーフ部分は、ロッキングスクリプトがルートを含む場合のものよりも、マークルツリーの1レベルだけ短い。すなわち、アンロッキングスクリプトのマークルプルーフ部分は、2項<Z
2><1>だけ短い。
【0251】
この場合に、ロッキングスクリプトは、以下のようになる。
【数35】
【0252】
その結果、ユーザ{U1,…,U4}は、アンロッキングスクリプトを提供することができる。
【0253】
トランザクションの作成者は、さらに、例えば、
図11Cに示されるように、ロッキングスクリプトにY
2を挿入することによって、可能なスクリプトアンロッカー(script unlocker)を2つに制限することができる。ここでは、ユーザ3および4のみがトランザクションをアンロッキングすることができる。
【0254】
この場合に、ロッキングスクリプトは、以下の形式をとることができる。
【数36】
【0255】
第1ロッキングスクリプトにおける[Merkle Root Derivation]は、3点マークルプルーフからルートを導出し、一方で、第2および第3ロッキングスクリプトにおける[Merkle Root Derivation]は、それぞれに2点および1点マークルプルーフを必要とすることに留意すること。点(point)の数は、候補マークルプルーフを計算するために使用される、アンロッキングスクリプトのマークルプルーフ部分において提供されるノード値の数を指す。
【0256】
任意の上記の実施形態に係るロッキングスクリプトは、マークルルートではなく、マークルツリーのノードを提供するように修正されてよく、そして、従って、アンロッキングスクリプトを作成することができる、ユーザのサブセットまたはユーザのグループのサブセットを定義し得る。
【0257】
結論(CONCLUSION)
開示された技法の他の変形またはユースケースは、一旦、本明細書における開示が与えられると、当業者にとって明らかになり得る。本開示の範囲は、説明された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。
【0258】
例えば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、および、ビットコインノード104に関して説明されてきている。しかしながら、ビットコインブロックチェーンは、ブロックチェーン150に係る1つの特定的な実施例であり、そして、上記の説明は、一般的に、任意のブロックチェーンに対して適用され得ることが理解されるだろう。すなわち、本発明は、ビットコインブロックチェーンに限定されるものではない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、および、ビットコインノード104に対する上記の任意の参照は、それぞれブロックチェーンネットワーク106、ブロックチェーン150、および、ブロックチェーンノード104に対する参照と置き換えられ得る。ブロックチェーン、ブロックチェーンネットワーク、及び/又は、ブロックチェーンノードは、上述のように、ビットコインブロックチェーン150、ビットコインネットワーク106、および、ビットコインノード104に係る説明された特性の一部または全てを共有し得る。
【0259】
本発明の好ましい実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークであり、かつ、ビットコインノード104は、ブロックチェーン150のブロック151を作成し、発行し、伝播し、そして、保管する、説明された機能の少なくとも全てを実行する。これらの機能のうちの1つ又はいくつかのみを実行するが、全てを実行するものではない他のネットワークエンティティ(または、ネットワーク要素)が存在し得ることは除外されない。すなわち、ネットワークエンティティは、ブロックを作成および発行することなく、ブロックを伝搬、及び/又は、保管する機能を実行し得る(これらのエンティティは、好ましいビットコインネットワーク106のノードと見なされないことを想起されたい)。
【0260】
本発明の他の実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークでなくてよい。これらの実施形態においては、ノードが、ブロックチェーン150のブロック151を作成、発行、伝播、および、保管する機能のうちの少なくとも1つ又は一部であるが、全てではない機能を実施し得ることは除外されない。例えば、それらの他のブロックチェーンネットワークにおいて、「ノード(“node”)」は、ブロック151を作成し、かつ、発行するが、それらのブロック151を保管しない、かつ/あるいは、他のノードに伝搬しないように構成されている、ネットワークエンティティを指すために使用され得る。
【0261】
さらに、より一般的には、上記の用語「ビットコインノード(“bitcoin node”)」104に対する任意の参照は、用語「ネットワークエンティティ(“network entity”)」または「ネットワーク要素(“network element”)」と置き換えられてよく、ここで、そうしたエンティティ/要素は、ブロックを作成し、発行し、伝搬し、そして、保管する役割の一部または全部を実行するように構成されている。そうしたネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照して上述したのと同じ方法でハードウェアに実装され得る。
【0262】
上記の実施形態は、単なる例示として説明されていることが理解されるだろう。より一般的には、以下のステートメントのうちの任意の1つ以上に従って、方法、装置、または、プログラムが提供され得る。
【0263】
ステートメント1.第1態様に従って、ブロックチェーントランザクションを生成するコンピュータ実装方法が提供される。本方法において、複数の第2当事者の各当事者は、それぞれのr部分を導出可能なそれぞれの秘密番号kを有し、マークルツリーが定義されており、前記マークルツリーの少なくとも1つのリーフノードは、前記それぞれのr部分のうち少なくとも1つに基づいている。
ここで、前記方法は、第1当事者によって実行され、かつ、
第1ブロックチェーントランザクションを生成するステップであり、前記第1ブロックチェーントランザクションは、前記マークルツリーに対応しているターゲットマークルツリー部分を含んでいる、第1ロッキングスクリプトを含み、
前記第1ロッキングスクリプトは、第2ブロックチェーントランザクションの第1アンロッキングスクリプトと共に実行されると、
前記第1アンロッキングスクリプトからr部分を抽出し、
前記抽出されたr部分から導出されるハッシュ値を生成し、
前記生成されたハッシュおよび前記第1アンロッキングスクリプトのマークルプルーフ部分に基づいて、候補マークルツリー部分を計算し、
前記計算された候補マークルツリー部分が、前記ターゲットマークルツリー部分に一致することを検証し、
前記第1アンロッキングスクリプトの公開鍵に基づいて、前記第1アンロッキングスクリプトの署名部分を検証する、ように構成されている、ステップと、
前記第1ブロックチェーントランザクションを、ブロックチェーンネットワークの1つ以上のノードに利用可能にするステップと、を含む。
【0264】
ステートメント2.前記r部分は、前記第1アンロッキングスクリプトの前記署名部分の楕円曲線デジタル署名アルゴリズム(ECDSA)シグネチャから抽出され、前記r部分は、前記ECDSAシグネチャのr部分である、
ステートメント1に記載の方法に係る実施形態。
【0265】
ステートメント3.前記マークルツリーの各リーフノードは、複数のr部分の組み合わせのハッシュである。ここで、前記第1ロッキングスクリプトは、前記第1アンロッキングスクリプトから複数のr部分を抽出し、かつ、前記複数のr部分を組み合わせるように構成されており、前記ハッシュ値は、前記組み合わされた複数のr部分のハッシュである、
ステートメント2に記載の方法に係る実施形態。
【0266】
ステートメント4.前記r部分は、加法および連結のうち1つを使用して、組み合わされている、
ステートメント3に記載の方法に係る実施形態。
【0267】
ステートメント5.前記マークルツリーの前記少なくとも1つのリーフノードは、複数のr部分の和のハッシュであり、ここで、前記第1ロッキングスクリプトは、
前記第1アンロッキングスクリプトから複数のr部分を抽出し、前記複数のr部分それぞれは、複数の当事者のうちの1つに対応しており、
抽出された前記複数のr部分の和を計算し、
前記第1アンロッキングスクリプトからr部分合計を抽出し、前記r部分合計は、前記複数のr部分の和であり、
前記計算された前記抽出された複数のr部分の和、および、前記抽出されたr部分合計に基づいて、前記抽出された複数のr部分を検証する、ように構成されており、
前記複数のr部分および前記r部分合計は、楕円曲線点である、
ステートメント1に記載の方法に係る実施形態。
【0268】
ステートメント6.前記ハッシュ値は、前記計算された前記抽出された複数のr部分の和、および、前記抽出されたr部分合計のうち1つのハッシュである、
ステートメント5に記載の方法に係る実施形態。
【0269】
ステートメント7.前記第1ロッキングスクリプトは、さらに、
前記第1アンロッキングスクリプトから、1つ以上の勾配値を抽出し、
前記抽出された1つ以上の勾配値および前記抽出された複数のr部分に基づいて、前記抽出された1つ以上の勾配値それぞれが、前記抽出された複数のr部分のうちの2つの間の勾配に等しいことを検証する、ように構成されている、
ステートメント5またはステートメント6に記載の方法に係る実施形態。
【0270】
ステートメント8.前記勾配値の数は、前記秘密番号kのうちの1つに対応している抽出された複数のr部分の数よりも少ないものである、
ステートメント7に記載の方法に係る実施形態。
【0271】
ステートメント9.前記第1ロッキングスクリプトは、前記第1アンロッキングスクリプトの複数の署名部分それぞれを検証するように構成されており、前記複数の署名部分それぞれは、対応する公開鍵を用いて提供され、前記複数の署名部分それぞれの前記検証は、前記提供された対応する公開鍵に基づいている、
ステートメント3乃至8のいずれかに記載の方法に係る実施形態。
【0272】
ステートメント10.前記対応する公開鍵は、前記第1アンロッキングスクリプトにおいて提供される、
ステートメント9に記載の方法に係る実施形態。
【0273】
ステートメント11.前記r部分合計は、前記アンロッキングスクリプトの署名部分から抽出される、
ステートメント5乃至8のいずれかに記載の方法に係る実施形態。
【0274】
ステートメント12.前記マークルツリーの前記少なくとも1つのリーフノードは、複数のr部分の組み合わせのハッシュであり、前記抽出されたr部分は、前記第1ロッキングスクリプトのマークルツリー部分に対応している前記リーフノードの前記複数のr部分の組み合わせに等しい、
ステートメント1またはステートメント2に記載の方法に係る実施形態。
【0275】
ステートメント13.マークルツリー部分は、前記マークルツリーのマークルルートである、
ステートメント1に記載の方法に係る実施形態。
【0276】
ステートメント14.マークルツリー部分は、前記マークルルート以外の前記マークルツリーのノードである、
ステートメント1乃至10のいずれかに記載の方法に係る実施形態。
【0277】
ステートメント15.前記r部分は、楕円曲線点である、
ステートメント1、または、ステートメント5乃至14のいずれかに記載の方法に係る実施形態。
【0278】
ステートメント16.第2実施形態に従って、ブロックチェーントランザクションを生成するコンピュータ実装方法が提供される。本方法において、複数の第2当事者の各当事者は、r部分を導出可能な秘密番号kを有し、マークルツリーが定義されており、前記マークルツリーの少なくとも1つのリーフノードは、それぞれの前記r部分のうち少なくとも1つに基づいており、第1ブロックチェーントランザクションは、前記マークルツリーに対応しているターゲットマークルツリー部分を含み、
第1ロッキングスクリプトは、第2ロックトランザクションの第1アンロッキングスクリプトと共に実行されると、前記第1アンロッキングスクリプトからr部分を抽出し、前記抽出されたr部分から導出されるハッシュ値を生成し、前記生成されたハッシュおよび前記第1アンロッキングスクリプトのマークルプルーフ部分に基づいて、候補マークルツリー部分を計算し、前記計算された候補マークルツリー部分が、前記第1ロッキングスクリプトの前記ターゲットマークルツリー部分に一致することを検証し、前記第1アンロッキングスクリプトの公開鍵に基づいて、前記第1アンロッキングスクリプトの署名部分を検証する、ように構成されており、ここで、
前記方法は、前記第2当事者の少なくとも1つによって実行され、かつ、
第2ブロックチェーントランザクションを生成するステップであり、前記第2ブロックチェーントランザクションは、前記第1ブロックチェーントランザクションの前記第1ロッキングスクリプトおよび前記第1アンロッキングスクリプトを参照する入力を含み、前記第1アンロッキングスクリプトは、前記マークルプルーフ部分、前記署名部分、および、前記公開鍵を含む、ステップと、
前記第2ブロックチェーントランザクションを、ブロックチェーンネットワークの1つ以上のノードに対して利用可能にするステップと、を含む。
【0279】
ステートメント17.前記署名部分は、前記第1アンロッキングスクリプトの前記署名部分の楕円曲線デジタル署名アルゴリズム(ECDSA)シグネチャを含み、
前記r部分は、前記ECDSAシグネチャのr部分である、
ステートメント16に記載の方法に係る実施形態。
【0280】
ステートメント18.前記r部分は、前記複数の第2当事者の前記秘密番号kから導出された複数のr部分の組合せである、
ステートメント17に記載の方法に係る実施形態。
【0281】
ステートメント19.前記第1アンロッキングスクリプトは、さらに、前記r部分を含む、
ステートメント16に記載の方法に係る実施形態。
【0282】
ステートメント20.前記第1アンロッキングスクリプトは、さらに、1つ以上の勾配値を含み、前記第1アンロッキングスクリプトは、前記第1アンロッキングスクリプトから前記1つ以上の勾配値を抽出し、かつ、前記抽出された1つ以上の勾配値、および、前記第1アンロッキングスクリプトから抽出された複数のr部分に基づいて、前記抽出された1つ以上の勾配値それぞれが、抽出された前記複数のr部分のうちの2つの間の勾配に等しいことを検証する、ように構成されている、
ステートメント15乃至18のいずれかに記載の方法に係る実施形態。
【0283】
ステートメント21.前記第1アンロッキングスクリプトは、アンロッキングスクリプトから抽出され、かつ、複数の前記秘密番号kのうちの1つに対応するr部分の数より少ない勾配値の数を含む、
ステートメント20に記載の方法に係る実施形態。
【0284】
ステートメント22.前記r部分は、前記秘密番号に対応する公開鍵から導出される、
ステートメント1乃至21のいずれかに記載の方法に係る実施形態。
【0285】
ステートメント23.第3態様に従って、コンピュータ装置が提供される。本装置は、
1つ以上のメモリユニットを備えるメモリと、
1つ以上の処理ユニットを備える処理装置と、を含み、
前記メモリは、前記処理装置上で実行されるように構成されたコードを保管しており、前記コードは、実行されると、ステートメント1乃至22のいずれかに記載の方法を前記処理装置に実施させるように構成されている。
【0286】
ステートメント24.第4態様に従って、コンピュータプログラムが提供される。本コンピュータプログラムは、コンピュータ可読ストレージ装置に保管されており、かつ、1つ以上のプロセッサ上で実行されると、ステートメント1乃至22のいずれかに記載の方法を実施するように構成されている。
【国際調査報告】