(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-21
(45)【発行日】2024-07-01
(54)【発明の名称】ブロックチェーンの使用方法
(51)【国際特許分類】
H04L 9/32 20060101AFI20240624BHJP
【FI】
H04L9/32 200Z
(21)【出願番号】P 2021552608
(86)(22)【出願日】2020-03-04
(86)【国際出願番号】 IB2020051825
(87)【国際公開番号】W WO2020178752
(87)【国際公開日】2020-09-10
【審査請求日】2023-01-04
(32)【優先日】2019-03-04
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2019-05-28
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ライト,クレイグ,スティーヴン
(72)【発明者】
【氏名】ヴォーン,オーウェン
(72)【発明者】
【氏名】ドイロン,ブロック
【審査官】行田 悦資
(56)【参考文献】
【文献】国際公開第2019/034984(WO,A1)
【文献】国際公開第2017/010455(WO,A1)
【文献】米国特許出願公開第2018/0205555(US,A1)
【文献】特開2009-027543(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
(57)【特許請求の範囲】
【請求項1】
第1パーティがステートメントに合意することをブロックチェーンを使用して証明する、コンピュータにより実装される方法であって、前記方法は、第2パーティのコンピュータ機器において、
前記第2パーティが、前記第1パーティが前記ステートメントに合意することの確認を受信するステップと、
前記第2パーティが、前記確認の後であって、前記第1パーティが前記確認に加えて前記合意を示すために前記第1パーティの暗号署名を生成する後まで、前記第2パーティに利用可能ではない前記第1パーティの情報ピースを受信するステップと、
前記第2パーティが前記第1パーティによる前記合意の受信を証明することを示すために、前記第2パーティが、前記情報ピース又はその変換を含むデータの部分に署名することにより、前記第2パーティの暗号署名を生成するステップと、
1つ以上のトランザクションのうちの少なくとも1つに含まれる前記第1パーティの前記署名と、前記1つ以上のトランザクションのうちの少なくとも1つに含まれる前記第2パーティの前記署名とを含む形式で、前記1つ以上のトランザクションを、ノードのネットワークへ送信する又は前記ネットワークへ送信させるステップであって、前記ネットワークは、検証条件を満たすことを条件として前記ノードの少なくとも幾つかのうちの各々において維持される前記ブロックチェーンのコピーに記録されるよう、前記ネットワークに渡り各トランザクションを伝搬するよう構成される、ステップと、
を含み、
前記検証条件は、前記第1パーティの前記署名が前記1つ以上のトランザクションのうちの1つに含まれること、前記第2パーティの前記署名が前記1つ以上のトランザクションのうちの1つに含まれること、及び前記第2パーティの前記署名が前記データの部分に署名することにより生成されたこと、を条件として、前記1つ以上のトランザクションのうちの1つを検証するよう構成される、方法。
【請求項2】
前記ステートメントは、ドキュメントの中のステートメントであり、前記ドキュメントのレコードは、前記1つ以上のトランザクションのうちの1つに含まれ、それにより前記ブロックチェーンに格納される、請求項1に記載の方法。
【請求項3】
前記ドキュメントの前記レコードは、前記第1パーティ及び前記第2パーティの一方又は両方により暗号署名される、請求項2に記載の方法。
【請求項4】
前記第2パーティの前記署名を生成するために前記第2パーティにより署名された前記データの部分は、前記ドキュメントの前記レコードを含み、及び/又は前記第1パーティの前記署名を生成するために前記第1パーティにより署名されたデータは、前記ドキュメントの前記レコードを含む、請求項3に記載の方法。
【請求項5】
前記第1パーティと前記第2パーティとの間にビデオ呼を確立するステップ、を更に
含み、
前記確認の受信は、前記第2パーティが前記第1パーティからの前記確認を、前記ビデオ呼を介して視覚的又は聴覚的に受信することを含む、請求項1~4のいずれか一項に記載の方法。
【請求項6】
前記視覚的又は聴覚的な確認を含む前記ビデオ呼の少なくとも期間を含むビデオのレコードは、将来の参照のために格納され、前記ビデオの前記レコードは、前記1つ以上のトランザクションのうちの1つに含まれ、それにより前記ブロックチェーンに格納される、請求項5に記載の方法。
【請求項7】
前記ビデオの前記レコードは、前記第1パーティ及び前記第2パーティの一方又は両方により暗号署名される、請求項6に記載の方法。
【請求項8】
前記検証条件は、各トランザクションについて、少なくとも部分的に、前記トランザクション及び/又は前記ブロックチェーンの先行するトランザクションに含まれるそれぞれのコードにより、構成される、請求項1~7のいずれか一項に記載の方法。
【請求項9】
前記1つ以上のトランザクションは、前記第1パーティ及び前記第2パーティの両方の署名を含む1つのトランザクションを構成し、
前記検証条件は、前記第1パーティ及び前記第2パーティの両方の署名が前記トランザクションに含まれること、及び前記第2パーティの前記署名が前記データの部分に署名することにより生成されたことを条件に、前記1つのトランザクションを検証するよう構成される、請求項1~8のいずれか一項に記載の方法。
【請求項10】
前記1つのトランザクションのインプットは、前記ブロックチェーンの中の又は前記ブロックチェーンに含まれるべき先行するトランザクションの
ポイント先アウトプットへのポインタを含み、前記
ポイント先アウトプットは、前記
ポイント先アウトプットをアンロックするために前記第1パーティの前記署名及び前記第2パーティの前記署名を要求するロックスクリプトを含み、
前記1つのトランザクションは、前記1つのトランザクションの前記インプットの中にアンロックスクリプトを含み、前記アンロックスクリプトは、前記第1パーティ及び前記第2パーティの署名を含み、前記
ポイント先アウトプットをアンロックするために、前記第1及び第2パーティの署名を用いて前記検証を実施するよう構成される、請求項9に記載の方法。
【請求項11】
前記情報ピースは、前記第1パーティの前記署名に加えて、前記第1パーティのシークレット情報ピースを含む、請求項9又は10に記載の方法。
【請求項12】
前記第2パーティが、前記ネットワークを通じて伝搬されるよう送信される前に、前記1つのトランザクションに前記シークレット情報ピースを含み転送する又は含まれるように転送するステップであって、前記検証条件は、前記シークレット情報ピースが前記1つのトランザクションに含まれることを更に条件として、前記1つのトランザクションを検証するよう構成される、ステップ、含む請求項11に記載の方法。
【請求項13】
前記1つのトランザクションは、前記シークレット情報ピースのハッシュを含み、前記シークレット情報ピースが前記1つのトランザクションに含まれるという前記条件は、前記第2パーティにより転送されるときの前記シークレット情報ピースが、前記コードに含まれるときの前記シークレット情報ピースの前記ハッシュに対する解であるという条件である、請求項8に従属する請求項12に記載の方法。
【請求項14】
前記ロックスクリプトは、前記ロックスクリプトを第1部分と第2部分とに分けるコードセパレータを含み、前記第
2部分は前記情報ピースを含み、前記ロックスクリプトは、前記1つのトランザクションの前記検証を可能にするために、前記第2部分ではなく少なくとも前記第1部分に署名するために前記第1パーティの前記署名を、及び少なくとも前記第2部分に署名するために、前記第2パーティの前記署名を必要とするよう構成され、
前記情報ピースの前記受信は、前記ロックスクリプトの少なくとも前記第2部分を受信することを含み、
前記第2パーティの前記署名の前記生成は、少なくとも前記第2部分に署名することを含む、請求項10に従属する請求項11に記載の方法。
【請求項15】
前記第2パーティが前記情報ピースを受信する前に、前記第2パーティが、前記ロックスクリプトの前記第1部分を受信するステップであって、前記第1パーティの前記署名は少なくとも前記第1部分に署名する、ステップと、
前記受信した第1部分に基づき、前記第1パーティの前記署名を検証するステップと、
を含む請求項14に記載の方法。
【請求項16】
前記ロックスクリプトは、前記
ポイント先アウトプットをアンロックするために前記シークレット情報ピースを更に必要とし、
前記1つのトランザクションの前記インプットの中の前記アンロックスクリプトは、前記アンロックスクリプトの中の前記シークレット情報ピースを使用するよう構成される前記シークレット情報ピースを含む、請求項10に従属する請求項11~15のいずれか一項に記載の方法。
【請求項17】
前記ドキュメントの前記レコードは、前記1つのトランザクションの前記アウトプットに含まれる、請求項2に従属する請求項10~16のいずれか一項に記載の方法。
【請求項18】
前記ビデオの前記レコードは、前記1つのトランザクションの前記アウトプットに含まれる、請求項
6及び10に従属する請求項11~17のいずれか一項に記載の方法。
【請求項19】
前記1つ以上のトランザクションは、第1トランザクション及び第2トランザクションを含み、
前記検証条件は、前記第1パーティの前記署名が前記第1トランザクションに含まれることを条件として前記第1トランザクションを検証し、前記第2パーティの前記署名が前記第2トランザクションに含まれること、及び前記第2
パーティの前記署名が前記データの部分に署名することにより生成されたことを条件として前記第2トランザクションを検証するよう構成される、請求項1~8のいずれか一項に記載の方法。
【請求項20】
前記第1トランザクションのインプットは、前記ブロックチェーンの中の又は前記ブロックチェーンに含まれるべき先行するトランザクションの
ポイント先アウトプットへのポインタを含み、前記
ポイント先アウトプットは、前記
ポイント先アウトプットをアンロックするために前記第1パーティの前記署名を必要とするロックスクリプトを含み、
前記第2トランザクションのインプットは、前記第1トランザクションのアウトプットへのポインタを含み、前記第1トランザクションの前記アウトプットは、前記第1トランザクションの前記アウトプットをアンロックするために前記第2パーティの前記署名を必要とし、
前記第1トランザクションは、前記第1トランザクションの前記インプットの中に第1アンロックスクリプトを含み、前記第2トランザクションは、前記第2トランザクションの前記インプットの中に第2アンロックスクリプトを含み、前記第1アンロックスクリプトは前記第1パーティの前記署名を含み、前記第2アンロックスクリプトは前記第2パーティの前記署名を含み、前記
ポイント先アウトプットをアンロックするために前記第1パーティの前記署名を、及び前記第1トランザクションの前記アウトプットをアンロックするために前記第2パーティの前記署名を使用することにより、前記検証を実施するよう構成され、
前記第1パーティにより保持される前記情報ピースは、前記第1パーティの前記署名を含む、請求項19に記載の方法。
【請求項21】
前記ドキュメントの前記レコードは、前記第2トランザクションのアウトプットに含まれる、請求項3に従属する請求項19又は20に記載の方法。
【請求項22】
前記ビデオの前記レコードは、前記第2トランザクションのアウトプットに含まれる、請求項
6に従属する請求項19、20、又は21に記載の方法。
【請求項23】
第2パーティのコンピュータ機器上で実行されると、該コンピュータ機器に請求項1~22のいずれか一項に記載の方法を実行させるコンピュータプログラム。
【請求項24】
前記第2パーティのコンピュータ機器であって、1つ以上のプロセッサを含む処理機器と、1つ以上のメモリ装置を含むメモリと、を含み、前記メモリは
、前記プロセッサ上で実行するよう構成されるソフトウェアを格納し、前記ソフトウェアは、実行されると、請求項1~22のいずれか一項に記載の方法を実行するよう構成される、コンピュータ機器。
【請求項25】
第1パーティのコンピュータ機器において実行されるコンピュータにより実装される方法であって、前記方法は、
前記第1パーティが、前記第1パーティがステートメントに合意することを示すために前記第1パーティの暗号署名を生成するステップと、
前記第1パーティの前記署名とは別に、前記第1パーティが前記ステートメントに合意することを第2パーティに確認するステップと、
前記第1パーティが前記第1パーティの暗号署名を生成し及び前記第2パーティへ前記確認を与える後まで、前記第2パーティに利用可能ではない前記第1パーティの情報ピースを生成し、次に前記情報ピースを前記第2パーティへ送信し、従って前記第2パーティが、前記情報ピース又はその変換を含むデータの部分に署名することにより、前記第2パーティの暗号署名を生成できるようにするステップと、
前記情報ピースを送信することにより、1つ以上のトランザクションのうちの少なくとも1つに含まれる前記第1パーティの前記署名と、前記1つ以上のトランザクションのうちの少なくとも1つに含まれる前記第2パーティの前記署名とを含む形式で、前記1つ以上のトランザクションをノードのネットワークへ送信させるステップであって、前記ネットワークは、検証条件を満たすことを条件として、前記ネットワークに渡り各トランザクションを伝搬し、前記ノードの少なくとも幾つかのうちの各々において維持されるブロックチェーンのコピーに各トランザクションを記録するよう構成される、ステップと、
を含み、
前記検証条件は、前記第1パーティの前記署名が前記1つ以上のトランザクションのうちの1つに含まれること、前記第2パーティの前記署名が前記1つ以上のトランザクションのうちの1つに含まれること、及び前記第2パーティの前記署名が前記データの部分に署名することにより生成されたこと、を条件として、前記1つ以上のトランザクションのうちの1つを検証するよう構成される、方法。
【請求項26】
ノードのネットワークの中の第1ノードにより実行される方法であって、
1つ以上のトランザクションのうちの1つに含まれる第1パーティの暗号署名と、前記1つ以上のトランザクションのうちの少なくとも1つに含まれる第2パーティの暗号署名と、を含む前記1つ以上のトランザクションを受信するステップと、
前記第1パーティの前記署名及び前記第2パーティの前記署名がそれぞれ前記1つ以上のトランザクションに含まれること、及び前記第1パーティの前記署名が、前記第1パーティが前記署名を生成する後まで、前記第2パーティに利用可能ではない前記第1パーティの情報ピースを含む又はそれから導出されるデータの部分に署名することを検証するステップと、
前記第1ノードにおいて維持されるブロックチェーンのコピーに前記1つ以上のトランザクションを記録するステップと、
1つ以上の他のノードの各々において記録された前記ブロックチェーンのコピーに記録されるように、前記1つ以上のトランザクションを前記1つ以上の他のノードへ向けて伝搬するステップと、
を含み、
前記第1ノードは、前記記録を実行するよう構成され、前記第1ノードによる前記1つ以上のトランザクションのうちの少なくとも1つの伝搬は、前記検証を条件として実行される、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーンの特定の新しい第2段階の適用、すなわち、ブロックチェーンの上に付加される二次機能を開示する。
【背景技術】
【0002】
ブロックチェーンとは、データのブロックのチェーンを指し、ブロックチェーンのそれぞれのコピーは、ピアツーピア(peer-to-peer (P2P))ネットワーク内の複数のノードのそれぞれにおいて維持される。少なくともいくつかのノードは、簡単に説明すると、マイナーとしての役割を果たすこともある。チェーン内の各ブロックは、1つ以上のトランザクションを含み、この文脈ではトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデル又はスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、典型的には、全体を通して、1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクションのデータ構造は、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各アウトプットは、そのアウトプットが暗号的にロックされている(アンロックされ、それによって償還又は使用されるために、そのユーザの署名を必要とする)ユーザに属するデジタルアセットの数量を表す量(amount)を指定する。各インプットは、先行するトランザクションのアウトプットを逆にポイントし、それによってトランザクションをリンクする。
【0003】
所与の現在のトランザクションにおいて、インプット(又はそのそれぞれ)は、トランザクションのシーケンスの中の先行トランザクションのアウトプットを参照するポインタを含み、このアウトプットが現在のトランザクションにおいて償還されるか又は「消費される(spent)」ことを指定する。現在のトランザクションのインプットは、先行するトランザクションのアウトプットがロックされているユーザの署名も含む。また、現在のトランザクションのアウトプットは、新しいユーザに暗号的にロックできる。従って、現在のトランザクションは、先行するトランザクションのインプットで定義された量を、現在のトランザクションのアウトプットで定義された新しいユーザに移転することができる。場合によっては、トランザクションが複数のアウトプットを有し、複数のユーザ間でインプット量を分割してよい(変更を行うために、そのうちの1人がオリジナルユーザとなる)。場合によっては、トランザクションが複数のインプットを有し、1つ以上の先行するトランザクションの複数のアウトプットから量をまとめ、現在のトランザクションの1つ以上のアウトプットに再分配することもできる。
【0004】
上記は「アウトプットベースの」トランザクションプロトコルと呼ばれることがあり、時には「未使用のトランザクションアウトプット(unspent transaction output (UTXO))タイプのプロトコル」(アウトプットはUTXOと呼ばれる)とも呼ばれる。ユーザの合計残高は、ブロックチェーンに格納されている1つの数値で定義されるのではなく、代わりに、ユーザは、ブロックチェーン内の多くの異なるトランザクションに分散されている該ユーザのすべてのUTXOの値を照合するために、特別な「ウォレット」アプリケーションを必要とする。
【0005】
アカウントベースのトランザクションモデルの一部として、別のタイプのトランザクションプロトコルを「アカウントベース」のプロトコルと呼ぶことがある。アカウントベースの場合、各トランザクションは、過去の一連のトランザクションにおいて、先行するトランザクションのUTXOに戻って参照することによって移転される量を定義するのではなく、絶対的な口座(アカウント)残高を参照することによって移転される。すべてのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって格納され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの連続したトランザクション記録(いわゆる「ポジション」)を用いて発注される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。さらに、任意的なデータフィールドもトランザクションに署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを遡ってポイントしてよい。
【0006】
どちらのタイプのトランザクションプロトコルでも、ユーザが新しいトランザクションを実行したい場合、ユーザは、自分のコンピュータ端末からP2Pネットワークのノードの1つ(現在は、通常、サーバ又はデータセンタであるが、原則として、他のユーザ端末でもよい)に新しいトランザクションを送信する。このノードは、各ノードに適用されるノードプロトコルに従って、トランザクションが有効であるかどうかをチェックする。ノードプロトコルの詳細は、問題のブロックチェーンで使用されているトランザクションプロトコルのタイプに対応し、全体のトランザクションモデルを形成する。ノードプロトコルは、典型的には、ノードに、新しいトランザクション内の暗号署名が、トランザクションの順序付けされたシーケンスの中の前のトランザクションに依存する、期待される署名と一致することをチェックすることを要求する。アウトプットベースの場合、これは、新しいトランザクションのインプットに含まれるユーザの暗号署名が、新しいトランザクションが消費する先行するトランザクションのアウトプットに定義された条件と一致することをチェックすることを含んでよく、この条件は、典型的には、新しいトランザクションのインプット内の暗号署名が、新しいトランザクションのインプットがポイントする前のトランザクションのアウトプットをアンロックすることを少なくともチェックすることを含む。いくつかのトランザクションプロトコルでは、条件は、少なくとも部分的に、インプット及び/又はアウトプットに含まれるカスタムスクリプトによって定義されてもよい。あるいは、単にノードプロトコルだけで固定することもできるし、あるいは、これらの組み合わせによることもある。いずれにせよ、トランザクションが有効であれば、現在のノードは新しいトランザクションをP2Pネットワーク内のノードの1つ以上の他のノードに転送する。これらのノードの少なくともいくつかは、同じノードプロトコルに従って同じテストを適用し、新しいトランザクションを1つ以上のさらなるノードに転送するなど、転送ノードとしても機能する。このようにして、新しいトランザクションは、ノードのネットワーク全体に伝搬される。
【0007】
アウトプットベースのモデルでは、与えられたアウトプット(例えば、UTXO)が消費されるかどうかの定義は、ノードプロトコルに従って別の今後の(onward)トランザクションのインプットによって既に有効に償還されているかどうかである。トランザクションが有効であるための別の条件は、それが消費又は償還を試みる先行するトランザクションのアウトプットが、別の有効なトランザクションによって未だ消費/償還されていないことである。ここでも、有効でない場合、トランザクションは、ブロックチェーンに伝搬又は記録されない。これは、支払者が同じトランザクションのアウトプットを複数回消費しようとする二重支出を防ぐ。一方、アカウントベースのモデルは、口座残高を維持することによって、二重支出を防ぐ。この場合も、トランザクションの順序が定義されているため、口座残高は、一度に単一の定義された状態を有する。
【0008】
検証に加えて、少なくともいくつかのノードは、「proof of work」に支えられているマイニングと呼ばれるプロセスで、トランザクションのブロックを最初に作成するために競合する。マイニングノードでは、まだブロックに現れていない有効なトランザクションのプールに新しいトランザクションが追加される。そして、マイナーは、暗号パズルを解決しようと試みることにより、トランザクションのプールからトランザクションの新しい有効なブロックを組み立てるために競争する。これは、典型的には、ナンスがトランザクションのプールと連結され、ハッシュされるときに、ハッシュのアウトプットが所定の条件を満たすような「ナンス」値を探すことを含む。例えば、所定の条件は、ハッシュのアウトプットが、所定の数の先行ゼロを有することであってもよい。ハッシュ関数の特性は、インプットに関して予測不可能なアウトプットを持つことである。従って、この探索は、ブルートフォースによってのみ実行することができ、従って、パズルを解決しようとしている各ノードにおいて、相当量の処理リソースを消費する。
【0009】
パズルを解く最初のマイナーノードは、これをネットワークに通知し、その解を証明として提供する。この解は、ネットワーク内の他のノードによって簡単にチェックすることができる(ハッシュが対する解が与えられれば、ハッシュのアウトプットが条件を満たすことを確認することは簡単である)。勝者がパズルを解いたトランザクションのプールは、各ノードで勝者が発表した解をチェックしたことに基づいて、記憶ノードとして機能する少なくともいくつかのノードによってブロックチェーンの新しいブロックとして記録される。また、新しいブロックにはブロックポインタが割り当てられ、チェーン内で前に作成されたブロックを指すようになっている。proof-of-workは、新しいブロックを作成するのに多大な労力を要し、二重の支出を含むブロックは他のノードによって拒否される可能性が高く、従ってマイニングノードが二重支払いを彼らのブロックに含まないようにするインセンティブが働くので、二重の支出のリスクを減じるのを助ける。一旦生成されたブロックは、同じプロトコルに従ってP2Pネットワーク内の各格納ノードで認識され、維持されるため、変更することはできない。また、ブロックポインタは、ブロックに順序を課す。トランザクションは、P2Pネットワーク内の各記憶ノードで順序付けられたブロックに記録されるので、これはトランザクションの不変の公開台帳を提供する。
【0010】
パズルを解決するために常に競争している異なるマイナーは、いつ解を探し始めたかによって、いつでもマイニングされていないトランザクションプールの異なるスナップショットに基づいてパズルを解いているかもしれないことに留意する。パズルを解く者は誰でも、最初に新しいブロックに含まれるトランザクションを定義し、現在のマイニングされていないトランザクションのプールが更新される。そして、マイナーは、新たに定義された未決のプールからブロックを作り出すために、競争を続ける。また、生じ得る「分岐(フォーク、fork)」を解決するためのプロトコルも存在する。これは、2人のマイナーが互いに非常に短い時間内にパズルを解決し、ブロックチェーンの矛盾したビューが伝搬する場合である(つまり、分岐の突起が長い方が決定的なチェーンとなる)。
【0011】
ほとんどのブロックチェーンでは、勝ったマイナーは、何も無いものから新しい量のデジタルアセットを生み出す特別な種類の新しいトランザクションによって自動的に報酬を受けている(通常のトランザクションでは、あるユーザから別のユーザにデジタルアセットの量を移転する)。したがって、勝ったノードは、ある量のデジタルアセットを「マイニング」したと言われる。この特殊なタイプのトランザクションは「コインベース」トランザクションと呼ばれることもある。それは自動的に新しいブロックの一部を形成する。この報酬は、マイナーがproof-of-work競争に参加するインセンティブを与える。多くの場合、トランザクションは、そのトランザクションが含まれたブロックを生成した勝ったマイナーにさらに報酬を与えるために、追加のトランザクション手数料をそのアウトプットの1つにおいて指定する。
【0012】
従来、ブロックチェーン内のトランザクションは、デジタルアセット、すなわち、価値のストアとして機能するデータを伝達するために使用される。しかし、ブロックチェーンの上に追加の機能を積み重ねるために、ブロックチェーンを利用することもできる。例えば、ブロックチェーンプロトコルは、トランザクションのアウトプットに追加のユーザデータを格納することを可能にしてよい。現代のブロックチェーンは、単一トランザクション内に格納できる最大データ容量を増加させ、より複雑なデータを組み込むことを可能にしている。トランザクションが検証され、それによってブロックチェーンに受け入れられたと仮定すると、追加のユーザデータは、従って、不変の公開レコードとしてP2Pネットワークの各ノードに格納されたままである。例えば、これは、ブロックチェーン内に電子ドキュメント(electronic document)を格納するために使用され得る。トランザクションが暗号的に署名されるという事実は、ドキュメントにある程度の信頼性を加える。従って、ある程度のセキュリティが、特にブロックチェーンが不変の公開レコードを提供するという事実と関連して、ドキュメントを格納する手段としてブロックチェーンを使用することによって提供される。
【発明の概要】
【0013】
しかし、これはある程度のセキュリティを提供するにすぎない。さらなるセキュリティを追加するために、第1パーティがドキュメント等に合意した(例えば、ドキュメントの内容においてなされた1つ以上のステートメントに合意した)事実を、第2パーティが電子的に証明することを可能にするメカニズムを提供することが望ましいことが、本明細書において認識される。これにおける技術的な課題は、証明に信頼を与えるメカニズムを提供することである。特に、第2パーティが、第1パーティによって何らかのステートメント又は提案が合意された事実を証明する場合、第2パーティが第1パーティの後に自身の暗号署名を生成したことを計算的又は暗号的に実証することが望ましいことが、本明細書において認められる。これを達成するために、ノード検証の役割を利用することができることが、本明細書においてさらに認識されている。
【0014】
本明細書に開示される一態様によれば、第1パーティがステートメントに合意することを証明するためにブロックチェーンを使用する、コンピュータにより実施される方法が提供される。本方法は、第2パーティのコンピュータ機器において実行される以下のステップを含む。第2パーティは、第1パーティが当該ステートメントに合意する旨の確認を受信し、第2パーティは、該確認の後であって、第1パーティが該確認に加えて当該合意を表示するための第1パーティの暗号署名を生成する後まで、第2パーティが利用できない第1パーティの情報ピースを受信する。第2パーティが第1パーティによる当該確認の受信を証明することを示すために、第2パーティは、当該情報ピースを構成するデータの一部又はその変換に署名することにより、第2パーティの暗号署名を生成する。次に、1つ又は複数のトランザクションが、他の機器を使用して、第2のパーティ又は他のパーティによって、ノードのネットワークに送信される。1つ以上のトランザクションは、1つ以上のトランザクションのうちの少なくとも1つに含まれる第1のパーティの署名と、1つ以上のトランザクションのうちの少なくとも1つに含まれる第2のパーティの署名とを含む。ネットワークは、検証条件を満たすことを条件に、少なくともいくつかのノードの各々で維持されているブロックチェーンのコピーに記録されるよう、各トランザクションをネットワークに渡り伝搬するように構成される。検証条件は、第1のパーティの署名が1つ以上のトランザクションの1つに含まれること、第2のパーティの署名が1つ以上のトランザクションの1つに含まれること、データの上記部分に署名することによって第2のパーティの署名が生成されたことを条件として、1つ以上のトランザクションの1つを検証するように構成される。
【0015】
第2パーティは、第1パーティが署名し、その合意を確認した後に第1パーティの情報ピースを受信するのみであり、第2パーティの署名は、この情報ピースに署名することによって作成される必要があるため、このことは、第1パーティの後に第2パーティが署名したことを暗号的に証明する。一旦、トランザクションがネットワーク全体に伝搬されると、それらはこの証拠の不変の記録としてブロックチェーンに(各ストレージノードで維持されるコピーに)残る。しかし、条件が満たされない場合、転送ノードはトランザクションを検証せず、したがって、トランザクションを伝搬しない。このようにして、署名の正しい順序を示すトランザクションのみがブロックチェーンに伝搬され記録されるので、これは署名の順序を証明するための検証プロセスを利用する。
【図面の簡単な説明】
【0016】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、例としてのみ、以下の添付の図面を参照する。
【
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
【
図2】ブロックチェーンに記録されるトランザクションのいくつかの例を概略的に示している。
【
図3】ブロックチェーンを実装するための別のシステムの概略ブロック図である。
【
図4】
図3のシステムで使用するための端末のペアを概略的に示す。
【
図5】第1の方法によるブロックチェーン内のドキュメントへの合意を証明するためのトランザクションの例示的なセットを概略的に示す。
【
図6】第1の方法におけるいくつかのステップの例示的な詳細を概略的に示す。
【
図7】
図5及び
図6に示されたトランザクションのセットを使用する第1の方法のステップを示す概略フローチャートである。
【
図8】第2の方法によるブロックチェーン内のドキュメントへの合意を証明するための例示的なトランザクションの別のセットを概略的に示す。
【
図9】第2の方法におけるいくつかのステップの例示的な詳細を概略的に示す。
【
図10】
図8及び
図9に示されたトランザクションのセットを使用する第2の方法のステップを示概略フローチャートである。
【
図11】第1の方法の変形によるブロックチェーン内のドキュメントへの合意を証明するためのトランザクションの例示的なセットを概略的に示す。
【
図12】
図11に示されたトランザクションのセットを使用する第1の方法の上記変形のステップを示す概略フローチャートである。
【発明を実施するための形態】
【0017】
図1は、ブロックチェーン150を一般的に実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバレイネットワーク106を形成するように配置された複数のノード104を含む。各ノード104は、異なるピアに属する異なるノード104を有するピアのコンピュータ装置を含む。各ノード104は、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)を含む処理装置を含む。各ノードはまた、メモリ、すなわち、1つ以上の非一時的コンピュータ読取可能媒体の形態のコンピュータ読取可能記憶装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクなどの磁気媒体、固体ドライブ(solid-state drive (SSD))、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。
【0018】
ノード104の少なくとも幾つかは、トランザクション152を転送し、それによって伝搬する転送ノード104Fの役割を引き受ける。ノード104の少なくともいくつかは、ブロック151をマイニングするマイナー104Mの役割を担う。ノード104の少なくとも幾つかは、記憶ノード104S(「フル(full-copy)」ノードとも呼ばれる)の役割を引き受け、各ノードは、それぞれのメモリに同じブロックチェーン150のそれぞれのコピーを格納する。所与のノード104は、転送ノード104、マイナー104M、記憶ノード104S、又はこれらの2つ若しくは全部の任意の組み合わせであり得る。
【0019】
マイニングに含まれる計算リソースのために、典型的には、少なくともマイナーノード104Mの各々は、1つ以上の物理的サーバユニットを含むサーバ、又はデータセンタ全体の形態をとる。各転送ノード104M及び/又は記憶ノード104Sは、サーバ又はデータセンタの形態をとることもできる。しかしながら、原則として、任意の所与のノード104は、ユーザ端末又は互いにネットワーク接続されたユーザ端末のグループを含むことができる。
【0020】
各ノード104のメモリは、それぞれの1つ以上の役割を実行し、ノードプロトコルに従ってトランザクション152を処理するために、ノード104の処理装置上で動作するように構成されたソフトウェアを記憶する。ノード104に属するいずれの動作も、それぞれのコンピュータ装置の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。また、本明細書で使用される「ブロックチェーン」という用語は、一般的な技術の種類を指す一般的な用語であり、任意の1つの特定のエンティティの任意の特定の専有のブロックチェーン、プロトコル又はサービスに限定されない。
【0021】
また、ネットワーク101には、消費者ユーザの役割を果たす複数のパーティ103の各々のコンピュータ装置102も接続されている。これらは、トランザクションにおける支払人及び被支払人の役割を果たすが、他のパーティの代わりにトランザクションをマイニングし又は伝搬することに必ずしも参加しない。それらは必ずしもマイニングプロトコルを実行するわけではない。2つのパーティ103及びそれぞれの機器102は、説明のために示されており、第1パーティ103a及びそのそれぞれのコンピュータ機器102a、ならびに第2パーティ103b及びそのそれぞれのコンピュータ機器102bである。より多くのこのようなパーティ103及びそれらのそれぞれのコンピュータ機器102がシステムに存在し、参加することができるが、便宜上、それらは図示されていないことが理解されよう。各パーティ103は、個人又は組織であってもよい。純粋に例示として、第1パーティ103aは、本明細書においてアリスと称され、第2パーティ103bは、ボブと称されるが、これは限定的なものではなく、本明細書においてアリス又はボブという言及は、それぞれ「第1パーティ」及び「第2パーティ」と置き換えることができることは理解されるであろう。
【0022】
各パーティ103のコンピュータ機器102は、1つ以上のプロセッサ、例えば1つ以上のCPU、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はFPGAを備えるそれぞれの処理装置を備える。各パーティ103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的コンピュータ読取可能媒体又は媒体の形態のコンピュータ読取可能記憶装置を備える。このメモリは、例えば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ又はEEPROMなどの電子媒体、及び/又は光ディスクドライブなどの光学的媒体を使用する1つ以上のメモリユニットを含んでもよい。各パーティ103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。所与のノード104に属するいずれの動作も、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用することにより実行され得ることが理解されよう。各パーティ103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えばデスクトップ又はラップトップコンピュータ、タブレット、スマートフォン、又はスマートウォッチのようなウェアラブルデバイスを備えている。所与のパーティ103のコンピュータ装置102は、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースのような、1つ以上の他のネットワーク接続されたリソースを含んでもよい。
【0023】
クライアントアプリケーション又はソフトウェア105は、最初に、1つ以上の適切なコンピュータ読取可能な記憶媒体、例えばサーバからダウンロードされたもの、又はリムーバブルSSD、フラッシュ・メモリ・キー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピー・ディスク又はテープ、光ディスク、例えばCD又はDVD ROM、又はリムーバブル光学ドライブなどのリムーバブル記憶装置上で、任意の所与のパーティ103のコンピュータ機器102に提供され得る。
【0024】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには主に2つの機能を有する。これらのうちの1つは、それぞれのユーザパーティ103が、ノード104のネットワーク全体にわたって伝搬され、それによってブロックチェーン150に含まれるトランザクション152を作成し、署名し、送信することを可能にすることである。もう1つは、現在所有しているデジタルアセットの量をそれぞれのパーティに報告することである。アウトプットベースのシステムでは、この第2の機能は、当該パーティに属するブロックチェーン150全体に散在する様々なトランザクション152のアウトプットの中で定義される量を照合することを含む。
【0025】
各コンピュータ機器102上のクライアントアプリケーション105のインスタンスは、P2Pネットワーク106の転送ノード104Fの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、記憶ノード104のうちの1つ、一部、又は全部にコンタクトして、それぞれのパーティ103が受領者である任意のトランザクションについてブロックチェーン150に問い合わせることができる(又は、実施形態では、ブロックチェーン150は、部分的にその公開視認性を通じてトランザクションの信頼を提供する公開的設備であるため、実際には、ブロックチェーン150内の他のパーティのトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を形成し、送信するように構成される。各ノード104は、ノードプロトコルに従ってトランザクション152を検証するように構成されたソフトウェアを実行し、転送ノード104Fの場合は、ネットワーク106全体にトランザクション152を伝搬させるためにトランザクション152を転送する。トランザクションプロトコルとノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に所与のトランザクションモデルを実装する。同じトランザクションプロトコルが、ブロックチェーン150内のすべてのトランザクション152に使用される(ただし、トランザクションプロトコルは、トランザクションの異なるサブタイプを許可することができる)。同じノードプロトコルは、ネットワーク106内のすべてのノード104によって使用される(ただし、多くのノードは、そのサブタイプに対して定義されたルールに従って異なるトランザクションのサブタイプを異なるように処理し、また、異なるノードは異なる役割を引き受け、従って、プロトコルの異なる対応する側面を実装することができる)。
【0026】
ブロックチェーン150は、ブロック151のチェーンを含む。各ブロック151は、前述のように、proof-of-workプロセスによって作成された1つ以上のトランザクション152のセットを含む。各ブロック151は、また、ブロック151への逐次的順序を定義するように、チェーン内の先に生成されたブロック151を遡ってポイントするブロックポインタ155を含む。ブロックチェーン150はまた、proof-of-workプロセスによって新しいブロックに含まれることを待つ有効なトランザクション154のプールを含む。各トランザクション152は、トランザクションのシーケンスに順序を定義するために、前のトランザクションへのポインタを含む(注:トランザクション152のシーケンスは、分岐することが許される)。ブロック151のチェーンは、チェーンの最初のブロックであったジェネシスブロック(genesis block (Gb))153にまで戻る。チェーン150の初期に1つ以上のオリジナルトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示した。
【0027】
所与のパーティ103、例えばAliceがブロックチェーン150に含まれる新たなトランザクション152mを送信したいと望む場合、彼女は関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105のウォレット機能を使用して)新たなトランザクションを定式化する(formulate)。次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上の転送ノード104Fの1つに送信する。例えば、これは、Aliceのコンピュータ102に最も近いか又は最も良好に接続されている転送ノード104Fであってもよい。任意の所与のノード104が新しいトランザクション152mを受信すると、ノードプロトコル及びそのそれぞれの役割に従って、それを処理する。これは、最初に、新たに受信されたトランザクション152mが「有効」であるための特定の条件を満たしているかどうかをチェックすることを含み、その例については、簡単に詳述する。いくつかのトランザクションプロトコルでは、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であってよい。あるいは、条件は単にノードプロトコルの組み込み機能であってもよく、あるいはスクリプトとノードプロトコルの組み合わせによって定義されてもよい。
【0028】
新たに受信されたトランザクション152mが、有効であると見なされるテストに合格したという条件で(すなわち、「有効である」という条件で)、トランザクション152mを受信した任意の記憶ノード104Sは、そのノード104Sに維持されているブロックチェーン150のコピー内のプール154に、新たに有効とされたトランザクション152を追加する。さらに、トランザクション152mを受信する任意の転送ノード104Fは、検証済みトランザクション152をP2Pネットワーク106内の1つ以上の他のノード104に伝搬する。各転送ノード104Fは同じプロトコルを適用するので、トランザクション152mが有効であると仮定すると、これは、P2Pネットワーク106全体に間もなく伝搬されることを意味する。
【0029】
ひとたび1つ以上の記憶ノード104で維持されるブロックチェーン150のコピー内のプール154に入ると、マイナーノード104Mは、新しいトランザクション152を含むプール154の最新バージョンのproof-of-workパズルを解決するために競争を開始する(他のマイナー104Mは、依然として、プール154の古いビューに基づいてパズルを解決しようとしているが、そこに到達した者は誰でも、最初に、次の新しいブロック151が終了し、新しいプール154が開始する場所を定義し、最終的には、誰かが、Aliceのトランザクション152mを含むプール154の一部のパズルを解決する)。一旦、新しいトランザクション152mを含むプール154についてproof-of-workが行われると、ブロックチェーン150内のブロック151の1つの一部となる。各トランザクション152は、以前のトランザクションへのポインタを含むので、トランザクションの順序もまた、不変的に記録される。
【0030】
図2は、トランザクションプロトコルの例を示している。これは、UTXOベースのプロトコルの例である。トランザクション(「Tx」と略す)は、ブロックチェーン150(各ブロック151は1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下は、アウトプットベース又は「UTXO」ベースのプロトコルを参照して説明される。しかし、これは、全ての可能な実施形態に限定されるものではない。
【0031】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202及び1つ以上のアウトプット203を含むデータ構造を含む。各アウトプット203は、未使用トランザクションアウトプット(UTXO)を含んでもよく、これは、別の新しいトランザクションのインプット202のソースとして使用することができる(UTXOがまだ償還されていない場合)。UTXOは、特にその元となったトランザクションのトランザクションIDを含む。トランザクションデータ構造はまた、ヘッダ201も含んでよく、ヘッダ201は、インプットフィールド202及びアウトプットフィールド203のサイズの指示子を含んでもよいヘッダ201を含んでよい。ヘッダ201はまた、トランザクションのIDを含んでもよい。実施形態において、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、マイナー104Mに提出された未処理トランザクション152のヘッダ201に格納される。
【0032】
Alice103aは、問題のデジタルアセットをBob103bに移転するトランザクションを作成したいと考えているとする。
図2において、Aliceの新しいトランザクション152mは「Tx
1」とラベル付けされている。これは、Aliceにロックされているデジタルアセットの量を、シーケンス内の先行するトランザクションのアウトプット203に取り入れ、その少なくとも一部をBobに移転する。先行するトランザクションは、
図2において「Tx
0」とラベル付けされている。Tx
0とTx
1は、単なる任意のラベルである。これらは、必ずしも、Tx
0がブロックチェーン151の最初のトランザクションであること、又は、Tx
1がプール154の直ぐ次のトランザクションであることを意味しない。Tx
1は、まだAliceにロックされた未使用アウトプット203を有する任意の先行するトランザクションのいずれかを指し示すことができる。
【0033】
先行するトランザクションTx0は、Aliceがその新しいトランザクションTx1を作成するとき、又は少なくとも彼女がそれをネットワーク106に送信するときまでに、既に検証され、ブロックチェーン150に含まれていてもよい。それは、その時点で既にブロック151のうちの1つに含まれていてもよく、あるいは、プール154内でまだ待機していてもよく、その場合、新しいブロック151にすぐに含まれることになる。あるいは、Tx0及びTx1が生成されネットワーク102に送信されることができ、あるいは、ノードプロトコルが「孤児(orphan)」トランザクションのバッファリングを許容する場合にはTx1の後にTx0が送信されることもできる。ここでトランザクションのシーケンスの文脈で使用される「先行する」及び「後の」という用語は、トランザクション内で指定されたトランザクションポインタ(どのトランザクションがどの他のトランザクションを指すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。これは、必ずしも、それらが作成され、ネットワーク106に送られ、又は任意の所与のノード104に到達する順序を意味しない。それにもかかわらず、先行するトランザクション(「親」)を指す後続のトランザクション(「子」)は、親トランザクションが検証されない限り、検証されない。親の前にノード104に到着した子は孤児とみなされる。それは、ノードプロトコル及び/又はマイナーの行動に応じて、親を待つために特定の時間、破棄又はバッファリングされることがある。
【0034】
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、本明細書でUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタルアセットの量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202の中のアンロックスクリプトによって満たされなければならない条件を定義するロックスクリプトとを含む。典型的には、ロックスクリプトは、特定のパーティ(それが含まれているトランザクションの受益者)に量をロックする。すなわち、ロックスクリプトは、以下のようなアンロック条件を定義する。後続のトランザクションのインプット内のアンロックスクリプトは、先行するトランザクションがロックされたパーティの暗号署名を含む。
【0035】
ロックスクリプト(別名scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、「スクリプト」(Script,capital S)と呼ばれる。ロックスクリプトは、トランザクションアウトプット203を消費するために必要な情報、例えば、Aliceの署名の必要条件を指定する。トランザクションのアウトプットには、アンロックスクリプトが現れる。アンロックスクリプト(別名:scriptSig)は、ロックスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、Bobの署名を含んでもよい。アンロックスクリプトは、トランザクションのインプット202に現れる。
【0036】
図示の例では、Tx0のアウトプット203のUTXO0は、ロックスクリプト[Checksig PA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効であるために)、Aliceの署名Sig PAを必要とする。[Checksig PA]は、Aliceの公開鍵と秘密鍵のペアからの公開鍵PAを含む。Tx1のインプット202は、Tx0を指すポインタ(例えば、そのトランザクションID、実施形態ではトランザクションTx0全体のハッシュであるTxID0、による)を含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、さらに、Aliceが鍵ペアからのAliceの秘密鍵をデータの所定の部分(暗号において「メッセージ」と呼ばれることもある)に適用することによって作成された、Aliceの暗号署名を含むアンロックスクリプト<Sig PA>を含む。有効な署名を提供するためにAliceが署名する必要があるデータ(又は「メッセージ」)は、ロックスクリプトにより、又はノードプロトコルにより、又はこれらの組み合わせによって定義され得る。
【0037】
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトとアンロックスクリプトを一緒に実行して、アンロックスクリプトがロックスクリプトで定義されている条件(この条件は1つ以上の基準を含むことができる)を満たしているかどうかをチェックすることを含む。実施形態では、これは、2つのスクリプトの連結を含む。
【0038】
<Sig PA> || [Checksig PA]
ここで、「||」は連結を表し、「<...>」はスタックにデータを配置することを意味し、「[...]」はアンロックスクリプトに含まれる機能である(本例では、スタックベースの言語)。一緒に実行する場合、スクリプトは、Tx0のアウトプット内のロックスクリプトに含まれるAliceの公開鍵PAを使用して、Tx1のインプット内のロックスクリプトが、データの期待部分に署名するAliceの署名を含むことを認証する。また、データの期待部分(「メッセージ」)も、この認証を実行するためにTx0に含まれる必要がある。実施形態において、署名されたデータは、Tx0の全体を含む(従って、別個の要素は、データの署名された部分がすでに本質的に存在するので、データの署名された部分の指定にクリアに含まれる必要がある)。
【0039】
公開-秘密暗号法による認証の詳細は、当業者には周知であろう。基本的に、Aliceが彼女の秘密鍵によりメッセージを暗号化することによってメッセージに署名した場合、Aliceの公開鍵とそのメッセージが明らか(暗号化されていないメッセージ)ならば、ノード104のような別のエンティティは、そのメッセージの暗号化されたバージョンがAliceによって署名されていなければならないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、署名としてメッセージのクリアなバージョンにこれをタグ付けすることによって、公開鍵の所有者が署名を認証することを可能にする。
【0040】
Tx1内のアンロックスクリプトが、Tx0のロックスクリプトで指定された1つ以上の条件を満たす場合(示される例では、Aliceの署名がTx1内で提供され、認証されている場合)、ノード104は、Tx1が有効であるとみなす。それが記憶ノード104Sである場合、これは、proof-of-workを待つトランザクションのプール154にそれを追加することを意味する。それが転送ノード104Fである場合、それはトランザクションTx1をネットワーク106内の1つ以上の他のノード104に転送し、それによって、それがネットワーク全体に伝搬されることになる。一旦、Tx1が検証され、ブロックチェーン150に含まれると、これは、Tx0からのUTXO0を消費したものとして定義する。Tx1は、未使用トランザクションアウトプット203を使用する場合にのみ有効であることに留意されたい。別のトランザクション152によってすでに消費されたアウトプットを消費しようとする場合、Tx1は、たとえ他のすべての条件が満たされていても無効となる。従って、ノード104は、先行するトランザクションTx0において参照されたUTXOが既に使用されているかどうか(既に別の有効なトランザクションへの有効なインプットを形成しているかどうか)もチェックする必要がある。これが、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である理由の1つである。実際には、所与のノード104は、トランザクション152が消費されたUTXO203をマークする別個のデータベースを維持することができるが、最終的には、UTXOが消費されたかどうかを定義するのは、ブロックチェーン150内の別の有効なトランザクションへの有効なインプットを既に形成しているかどうかである。
【0041】
UTXOベースのトランザクションモデルでは、所定のUTXOを全体として使用する必要があることに注意する。UTXOで定義されている量のうち、別の分量が消費されている一方で、分量を「残しておく」ことはできない。ただし、UTXOからの量は、次のトランザクションの複数のアウトプットに分割できる。例えば、Tx0のUTXO0で定義された量は、Tx1の複数のUTXOに分割できる。したがって、AliceがBobにUTXO0で定義された量のすべてを与えることを望まない場合、彼女は残りの量を使って、Tx1の第2のアウトプットの中で自分自身にお釣りを与えるか、又は別のパーティに支払うことができる。
【0042】
実際には、Aliceは勝ったマイナーへの報酬も含める必要がある。なぜなら、今日ではコインベースの報酬だけでは、マイニングを動機づけるには通常十分ではないからである。Aliceがマイナーのための手数料を含まない場合、Tx0はマイナーのノード104Mによって拒否される可能性が高く、したがって、技術的には有効であるが、それは依然として伝搬されず、ブロックチェーン150に含まれない(マイナーのプロトコルは、マイナーが望まない場合には、マイナー104Mにトランザクション152を受け入れるよう強制しない)。一部のプロトコルでは、マイニング料金は、独自の別個のアウトプット203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、インプット202によって示される総量と、所与のトランザクション152のアウトプット203で指定される総量との間の差は、勝ったマイナー104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一のインプットであり、Tx1は1つのアウトプットUTXO1しか持っていないとする。UTXO0で指定されたデジタルアセットの量がUTXO1で指定された量より多い場合、その差は自動的に勝ったマイナー104Mへ行く。しかし、代替的又は追加的に、必ずしも、トランザクション152のUTXO203のうちの独自のものにおいて、マイナー手数料を明示的に指定できることは除外されない。
【0043】
AliceとBobのデジタルアセットは、ブロックチェーン150内の任意のトランザクションの中でロックされた未使用UTXOで構成されている。従って、典型的には、所与のパーティ103のアセットは、ブロックチェーン150を通して、様々なトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこにも、所与のパーティ103の総残高を定義する1つの数値は記憶されていない。各パーティにロックされ、別の将来の(onward)トランザクションにまだ消費されていないすべての様々なUTXOの値をまとめることは、クライアントアプリケーション105におけるウォレット機能の役割である。これは、記憶ノード104Sのいずれかに記憶されたブロックチェーン150のコピーを、例えば、各パーティのコンピュータ機器02に最も近いか、又は最も良好に接続されている記憶ノード104Sに問い合わせることによって行うことができる。
【0044】
スクリプトコードは、概略的に表現されることが多い(すなわち、正確な言語ではない)ことに注意する。例えば、[Checksig PA]を、[Checksig PA]= OP_DUP OP_HASH160 <H(Pa)> OP_EQUALVERIFY OP_CHECKSIGを意味するように記述し得る。「OP_....」は、スクリプト言語の特定のオペコードを表す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つのインプット(署名と公開鍵)を取り込み、楕円曲線デジタル署名アルゴリズム(Elliptic Curve Digital Signature Algorithm (ECDSA))を使用して署名の妥当性を検証するスクリプトオペコードである。ランタイムでは、署名(「sig」')の発生はすべてスクリプトから削除されるが、ハッシュパズルなどの追加要件は、「sig」インプットによって検証されるトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを格納することができ、それによってメタデータをブロックチェーン150に不変に記録することができるトランザクションの使用不可能アウトプットを生成するためのスクリプト言語のオペコードである。例えば、メタデータは、ブロックチェーンに格納することが望ましいドキュメントを含むことができる。
【0045】
署名PAは、デジタル署名である。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータに署名する。実施形態では、所与のトランザクションについて、署名はトランザクションインプットの一部、及びトランザクションアウトプットの全部又は一部に署名する。署名するアウトプットの特定の部分はSIGHASHフラグに依存する。SIGHASHフラグは、署名の最後に含まれる4バイトのコードであり、どのアウトプットが署名されるかを選択する(従って、署名の時点で固定される)。
【0046】
注:ロックスクリプトは、それぞれのトランザクションがロックされているパーティの公開鍵を含んでいることを表す「scriptPubKey」と呼ばれることがある。アンロックスクリプトは、対応する署名を提供することを表す「scriptSig」と呼ばれることがある。しかし、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語は、1つ以上の条件を定義するために使用され得る。したがって、より一般的な用語「ロックスクリプト」及び「アンロックスクリプト」が好ましい。
【0047】
本開示によれば、ノード検証のプロセスは、第2パーティ103a(「Bob」)が、第1パーティ103a(「Alice」)がドキュメントに合意するという事実を証明することができるセキュアなメカニズムを提供するために利用される。このシナリオでは、Aliceは合意しており、Bobは他者の利益を証明している。ドキュメントに合意することは、ドキュメントの内容において行われた1つ以上のステートメントのうちの1つ、一部又はすべてに合意することを意味することがある。ドキュメントは、例えば、証書、宣誓供述書又は遺言書を含むことができる。それは、紙、電子形式又は任意の他の形式で存在することができる。Aliceは、ドキュメントに関連する暗号署名を提供し、その後、Bobは、ドキュメントに対するAliceの合意を証明するために、ドキュメントに関連する自身の暗号署名を提供する。署名は、合意及び証明の証拠として、ブロックチェーン150内の1つ以上のトランザクション152に含まれる。これを記録するために使用されるトランザクション152は、Bobのサービスに対して支払ってもよく又は支払わなくてもよい。
【0048】
さらに、開示されたプロセスは、BobがAliceの前に彼の署名を適用することを防止するメカニズムを提供する。このことは、BobがAliceの合意を証明している場合、Bobは、Aliceが合意に署名し、Bobにその合意を表明するまでは署名すべきではない(Bobは、まだ発生していない、まだ観察されていない何かを証明したと主張すべきではない)という点で重要である。開示されたメカニズムに基づいて形成され記録されたトランザクション152は、署名が適用された順序を証明する不変記録としてブロックチェーン150内に残る。
【0049】
前述のように、ドキュメントのようなユーザコンテンツを格納するために、メタデータをトランザクション152の使用不可能アウトプットに含めることができる。本明細書に開示される実施形態では、そのようなメカニズムは、証明されたドキュメントの電子コピーをブロックチェーン150にも格納するために使用される。
【0050】
さらに、本明細書に開示された実施形態によれば、ブロックチェーン機能は、Aliceがドキュメントに合意する事実をBobが証明できるチャネルを提供するビデオ通話機能などの追加的なパーティ間通信機能と組み合わされる。
【0051】
この一例を
図3及び4に示す。
図3は、ブロックチェーン150を実装するためのシステム100’を示す。システム100’は、追加の通信機能が含まれることを除いて、
図1に関連して説明したものと実質的に同じである。Alice及びBobのコンピュータ機器102a、120bの各々にあるクライアントアプリケーションは、
図1に示されているものと比較して追加機能性を有し、従って、105’(Aliceのインスタンスでは105a’、Bobのインスタンスでは105b’)とラベル付けされている。特に、
図4に示すように、クライアントアプリケーション105’は、Alice及びBobのコンピュータ機器102a、102bの各々で動作し、ウォレット機能401及びパーティ間通信機能402、例えばVoIP機能、好ましくはビデオ通話機能の両方を備える。これらの機能401、402の各々は、ソフトウェアのモジュールの形態で実装することができ、そのインスタンスは、Alice及びBobのコンピュータ機器102a、102bの各々のメモリに格納され、それぞれの処理装置上で動作するように配置される。
【0052】
ウォレット機能401は、
図1及び背景技術に関して前述したように、トランザクション152の定式化及び送信及びUTXO値の照合の機能を実行するために、P2Pネットワーク106とインターフェースするように構成される。他方、パーティ間通信機能402は、Alice103aが、Bob103bと(いずれかのパーティ又は第3者の勧誘で)別個のパーティ間通信チャネル301を確立することを可能にする。例えば、このパーティ間通信チャネル301は、Alice103aとBob103bとの間で音声及び/又はビデオ通話を行うためのVoIPチャネル及び/又はビデオリンクを含んでもよい。パーティ間通信チャネル301は、P2Pオーバレイネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代替的又は追加的に、パーティ間通信チャネル301は、移動体セルラネットワークのような異なるネットワークを介して確立されてもよい。
【0053】
また、パーティ間通信機能402は、メインパーティ間通信チャネル301とは別に、データを送信するためのサイドチャネル302を提供することもできる。実施形態では、これは、Aliceの機器102a上のクライアント105a’がBobの機器102b上のクライアント105b’に「シーンの裏側(behind the scenes)」でデータを送信することができる非ユーザ対向データチャネルを含むことができる。あるいは、例えば、インスタントメッセージング(IM)チャネル、電子メールサービス、又はテキスト及び/又は数字を送信するのに適した他のチャネルを含むことができる。実施形態では、このサイドチャネル302を使用して、Aliceの署名をBobに送信することができ、及び/又は、シークレット情報「X」(より詳細には後述)のピースを送信することができる。サイドチャネル302は、P2Pオーバレイネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代替的又は追加的に、サイドチャネル302は、移動体セルラネットワークのような異なるネットワークを介して確立されてもよい。また、サイドチャネル302は、パーティ間通信チャネル301と同じネットワークを介して確立されてよく又はそうでなくてもよい。
【0054】
ウォレット機能401及び通信機能402は、同じクライアントアプリケーション105’に統合されているものとして
図3及び
図4に示されている。しかし、これは、限定的なものではなく、別々のアプリケーションで実施することができ、あるいは、ウォレット機能401は、通信アプリケーション402へのプラグインであってもよく、あるいは、その逆であってもよい。さらに、サイドチャネル302が使用される場合、これは、パーティ間通信チャネル301と同じアプリケーション、又は実際には、ウォレット機能401を提供するのと同じアプリケーションによって確立されてもよく、又はそうでなくてもよい。これは、パーティ間通信機能401、又はウォレット機能401、これらのいずれかへのプラグイン、又は別個の第3のアプリケーションと同じアプリケーション内に統合され得る。
【0055】
どのような意味であれ、さまざまな機能が実装されており、以下のシナリオを検討する。
【0056】
Alice103aは、パーティ間通信チャネル301を介してBob103bを証人として、証書等に署名したいと望む。彼らは、デジタル署名で署名し、ブロックチェーン150上にこの情報を保存する。Aliceは署名者である。彼女は公開鍵PAを持っている。Bobは証人である。彼は公開鍵PBを持っている。Aliceは、署名したい証書に関連する電子ドキュメントを有することができる。
【0057】
実施形態において、通信チャネル301は、ビデオリンクを含む。実施形態において、Alice及びBobは、ビデオリンク301を使用して署名手順を記録する。オプションとして、彼らはまた、この記録されたビデオ情報をブロックチェーン150上に記憶することもできる。
【0058】
以下に、M1とM2の2つの方法を示す。第1の方法M1では、AliceとBobの両方が単一のトランザクションに署名する。第2の方法M2では、2つのトランザクションがある。すなわち、Bobが2番目のトランザクションに署名する前に、Aliceが1番目のトランザクションに署名する。
【0059】
図5は、方法M1で使用できる例示的なトランザクションのペアを示している。直ぐに詳しく説明するように、Aliceは、必要なロックスクリプトを有するUTXO
1を生成する最初のトランザクションTx
0を構築する。これは、Aliceの署名、H(X)のプリイメージ、及びBobの署名をその順序で提供することによって、トランザクションTx
1の中で消費される。
【0060】
図7は、方法M1のステップを示すフローチャートである。
図6は、方法M1の間の特定のステップにおけるトランザクションの状態を示している。
【0061】
ステップS1において、Alice103a及びBob103bは、それらの間にビデオチャネル301を開く。これは、BobがAliceの合意を証明するチャネルである。より一般的には、彼らは、パーティ間通信チャネル301の任意の形態を使用して、彼らの間で通信することができる。あるいは、例えば、パーティ間通信チャネル301は、AliceとBobの声を認識することができる音声チャネルであってもよい。しかしながら、AliceとBobの画像がビデオで認識されるように、より高いセキュリティのためにビデオが好まれることがある。好ましくは、ビデオはまた、音声を交換するためのオーディオも含む。これはまた、署名のときの両パーティの能力及び精神状態の証拠を提供する。任意に、このチャネル301を介して交換されるビデオ又は他のそのような媒体は、データストアに記録される(ノード104におけるブロックチェーン150にはまだない)。例えば、Alice及び/又はBobのコンピュータ機器102a、102b、又は第3者の機器のメモリ、又はサーバ(例えば、クラウド)に格納することができる。
【0062】
ステップS2で、Aliceは自分だけが知っているシークレットXを生成し、そのシークレットをハッシュする、すなわちH(X)。ここでのハッシュは、暗号ハッシュ関数、例えば、SHA256、BLAKE2などを指す。H(X)は、Xで評価されるハッシュ関数を意味する。シークレットXは、Aliceのみが知っているか、少なくともBobに知られていない任意のデータであってよく、Bobが推測することは不可能である。例えば、実施形態において、Xは、数値又はテキスト文字列であり得る。例えば、乱数、あるいは、Bobが知らない何らかの決定論的プロセスによって生成された数値、あるいは、他の値である。一例として、Xは、2^512個の可能な値を有し、従って、Bobがそれを推測する希望がない、512ビット長の数であってもよい。
【0063】
ステップS3で、Aliceは、彼女の署名、H(X)のプリイメージ、及びBobの署名を提供することによって償還できるUTXO1を作成する。H(X)のプリイメージは、H(X)の所与の値に対してH(X)となるH(X)の値、すなわちH(X)に対する解を意味する。実施形態において、ロックスクリプトは、以下のように概略的に書くことができる形態をとることができる:
Locking UTXO1= [Checksig PA] [Solve H(X)] [Checksig PB]
【0064】
これを償還するには、後続のトランザクションTx1のインプットにおいて、AliceとBobによって署名され、次のように概略的に書かれる形式をとるアンロックスクリプトが必要となる:
Unlocking = <Sig PB> <X> <Sig PA>
【0065】
ノード104がTx1を受信すると、ノードはそれが有効かどうかをテストする。これを行うために、スクリプト言語の解釈ルールに従って、ノード104はロックスクリプトとアンロックスクリプトを次のように連結する::
<Sig PB> <X> <Sig PA> || [ChecksigPA] [Solve H(X)] [Checksig PB]
【0066】
次いで、ノード104のインタプリタは、ロックスクリプト及びアンロックスクリプトを一緒に処理して、Tx1が有効かどうかを判定する。スクリプト言語を解釈するノードプロトコルによって適用される規則に従い、これは、まずアンロックスクリプト(この場合はSig PA)からの右端のインプットを、ロックスクリプトからの左端のインプット(この場合はChecksig PA)に対してチェックし、次にアンロックスクリプトからの次の右端のインプット(この場合はX)を、ロックスクリプトからの次の左端のインプット(この場合はSolve H(X))に対してチェックし、以下同様にすることにより動作する。Checksigは、Tx1のインプット署名が、Tx0のロックスクリプト内のそれぞれの公開鍵Pによって認証されているかどうかをチェックする関数である。Solve H(X)は、Tx1のインプットで与えられるXの値がH(X)の解であることをチェックする関数である。関数Checksig(opcodeOP_CHECKSIGを含む)は、チェックを行った後に自身のチェック済み署名を削除することも思い出す。一方、Solve H(X)はXを削除しないので、解釈者がアンロックスクリプトからの左端のインプット(Sig PB)をロックスクリプトからの右端のインプット(Checksig PB)に対してチェックするまでに、Aliceの署名(Sig PA)はすでに削除されているが、Xは削除されていない。従って、ノードプロトコルがスクリプト言語の規則に従ってロック及びアンロックスクリプトを解釈する方法の結果として、BobはAliceの署名を構成するものに署名することを要求されることはない。しかしながら、本明細書に開示された実施形態によれば、彼は、Xを含む何かに署名することが要求される。
【0067】
実施形態において、Aliceは、少なくともUTXO1のロックスクリプト、すなわち[Checksig PA] [Solve H(X)] [Checksig PB]に署名することが要求されてもよい。任意的に、Aliceが署名することを要求されるデータに署名するは、UTXO1のアンロックスクリプトから彼女及びBobの署名を差し引いたもの、すなわち<X>をさらに含んでよい。Bobは、UTXO1のロックスクリプトにUTXO1のアンロックスクリプトを加えたものから、Aliceの署名を差し引いたものを含むデータの一部に署名する必要がある場合がある。つまり、Bobは以下に署名する:
<X> || [Checksig PA] [Solve H(X)] [Checksig PB]
【0068】
AliceとBobの両方は、インプットとしてTx1に署名するとき、TxID0に署名する。[Checksig PA][Solve H(X)][Checksig PB]は、トランザクションの一部としてTxID0の計算に含まれる。したがって、AliceとBobは間接的に条件に署名する。
【0069】
署名が必要なものは、SIGHASHフラグを使用して正確に設定可能である。また、あるパーティがデータ(又は「メッセージ」)の所与の部分に署名すると言われる場合、実施例では、これは、そのパーティが実際には、データ又はメッセージのハッシュ(このハッシュは、署名を参照するときに読まれるとみなされることが多い)のような、そのデータ又はメッセージの変換に署名することを意味してもよいことに注意する。つまり、まずデータをハッシュ又は変換し、次に、ハッシュ又は変換されたバージョンに彼らの秘密鍵で署名する。これは、ハッシュが、典型的に、秘密鍵で署名される前に署名されるデータのサイズを減らすという利点を持っている。例えば、Aliceは、Tx0全体のハッシュであるトランザクションTxID0に署名してよい。Bobは、以下のハッシュに署名してよい。
<x> || [Checksig PA] [Solve H(X)] [Checksig PB]
【0070】
Alice及びBobがトランザクションTx0の必要な部分に署名する有効な署名を提供していない場合、Tx1は検証されず、従って、ネットワーク106全体に伝搬されず、各記憶ノード104Sにおいてブロックチェーン150のコピーに記録される。
【0071】
上記は、スクリプト言語及び対応するノードプロトコルの一例に過ぎないことが理解される。より一般的には、Tx0のアウトプットに検証のための同様の条件を含めるために、他の言語を使用することができる。より広い意味で方法M1を実装するためには、Bobが少なくともXを含むデータの何からの定義された部分に署名しなければならず、Aliceが任意のものを含む可能性のあるデータの何からの定義された部分に署名しなければならないような条件を作ることが必要である(使用されるプロトコルに依存する)。BobとAliceが署名することを要求されるデータの正確な部分は、スクリプト言語とノードプロトコルの一部として設定可能であるか、又は所与のトランザクション構造に対してノードプロトコルによって固定可能である。
【0072】
ステップS4において、Aliceは、UTXO1を消費するトランザクションTx1の部分的なバージョンを作成する。実施形態においては、電子ドキュメント(又はそのハッシュ)を、例えば、利用不可能アウトプット(OP_RETURN)としてトランザクションに含めることができる。これは、Tx1が検証された場合、ドキュメントが、ブロックチェーン150内のトランザクションTx1に不変に格納されることを意味する。ただし、これは任意である。
【0073】
Aliceはまだ、彼女の署名又はH(X)のプリイメージをTx1に追加していない。
【0074】
Tx0のロックスクリプトにXではなくH(X)を含める理由は、そうでなければXの生の値が明らかになるからである(ブロックチェーン150がBobによって検査できることを思い出してほしい)。
【0075】
ステップS5で、Aliceは部分トランザクションTx1をサイドチャネル302を介してBobに送信する。あるいは、それは、例えば、AliceがQRコード(登録商標)のような視覚的コードをビデオ内で表示することによって、又は、不可視又は不可聴の信号をそれぞれビデオ又はオーディオに埋め込むことによって、メインチャネル301を介して通信することもできる。
【0076】
注:この時点では、BobはH(X)のプリイメージを知らないので、Tx1に対して有効な署名を提供することができない。これは、Bobが彼の署名を構成するとき(前述の説明を参照)、Aliceの署名は無視されるが、ハッシュパズルのプリイメージは無視できないからである。すなわち、BobがTx1が有効であるために署名する必要があるデータの部分は、Xを含む。
【0077】
ステップS6において、Bobは、Aliceに、彼女が証書の条件(又はより一般的にはドキュメント)に合意するかどうかを尋ね、Aliceは確認する。これは、パーティ間通信チャネル301を介して、好ましくは音声付きビデオを介して行われる。ただし、音声しか含まないチャネルを代わりに使用することもできる。特に、音声がオーディオ内で認識可能な場合にはなおさらである。Bobは、口頭でAliceにそのドキュメントに合意するかどうか尋ねることができ、Aliceは口頭で返事をすることができる。代替的又は追加的に、一方又は両方のパーティは、手話のような視覚的な形式のコミュニケーションを使用することができる。通信は、例えば、各パーティの端末102a、102bのタブレット及び電子スタイラスを介して、パーティが共有されたワークスペース上に自身の認識可能な手書きで書くことを可能にする共有仮想ホワイトボードのような、別の形態の媒体チャネル301を介しても行うことができる。どのような手段が用いられようと、少なくともAliceの合意の宣言は、少なくとも妥当な確実性の範囲内で、Aliceからのものであると認められるべきである。好ましくは、Bobの質問も、Bobに由来するものとして認識される。しかし、他のシナリオでは、Bobの質問は、Aliceの合意がチャネル301を介してBobによって立証されている限り、任意であってもよい(すなわち、Aliceは、促されることなく宣言を行うことができる)。
【0078】
どのような形態の媒体が使用されようと、このようにして、この合意は媒体リンク301を介してキャプチャされる。任意で、この媒体は、少なくとも一時的に、Alice、Bob又は第3者のデータストア(例えば、Alice又はBobのローカルストレージドライブ又は従来のクラウドストレージアカウント)に記録される。Aliceの合意を含む媒体の少なくとも一部が記録されており、望ましくはBobの質問も記録される。記録がブロックチェーン150にも保存されるか否かにかかわらず、この記録は、合意を証明する記録を提供する。
【0079】
ステップS7において、Aliceは、Tx1のための署名と、ハッシュパズルH(X)の解を提供する。彼女はこれらをサイドチャネル302を介してBobに送る。あるいは、それは、例えば、AliceがQRコード(登録商標)のような視覚的コードをビデオ内で表示することによって、又は、不可視又は不可聴の信号をそれぞれビデオ又はオーディオに埋め込むことによって、メインチャネル301を介して通信することもできる。もしXが人間にとって意味のある形式をとれば、Aliceはそれを口頭又は手動でビデオやオーディオチャネルを介して伝えることさえできる。例えば、Xはパスワードであったり、Aliceが読んだり、Bobに検索するように指示したりする本の一節であったりする。
【0080】
実施形態において、Aliceのクライアントアプリケーション105a’(又は、より一般的には、1つ以上のアプリケーションを含むソフトウェア)は、自動的に解Xを保留し、その後、Bobに解放し、自動的に解Xを送信するか、又は、Aliceが自身の署名を提供したこと、及び/又はAliceがチャネル301を介して合意に署名したことを自動的に検出することを条件として解Xを送信することを可能にするように構成されてもよい(例えば、後者は、機械インテリジェンス技術を使用して検出され得る)。代わりに、Aliceは手動でXを送信又はトリガすることができる。一般に、Xを一時的にBobが利用できないようにする任意の手段を使用することができる。
【0081】
ステップS8で、BobはXを知っており、Tx1に対して有効な署名を提供することができる。BobはTx1に署名し、Tx1を完了する。
【0082】
オプションのステップS9において、ビデオデータ、又はビデオデータのハッシュは、トランザクションTx1、例えばOP_RETURNに格納されてもよい。これは、妥当性が確認された場合、合意を証明するビデオ又は他のそのような媒体が、ブロックチェーン150内のトランザクションTx1に不変に格納されることを意味する。ただし、これは任意である。注:アウトプットのこの部分は、SIGHASH_ALL以外のSIGHASHフラグを使用して達成できる、AliceとBobによって事前に署名されていてはならない。この理由は、署名がトランザクションデータであるメッセージに署名するためである。Aliceは、ドキュメントに署名し、そうすることを記録する。ビデオが追加されると、録画が追加され、これがメッセージを変更する。したがって、Aliceはドキュメントに単独で署名し、BobはSIGHASHフラグを使用してビデオ及びドキュメントに署名することができる。
【0083】
このビデオデータは、ステップS7及びS8におけるものとは別個の署名を使用して、Alice、Bob、又は両方によって署名されてもよい。
【0084】
ステップS10で、トランザクションTx1は完了し、Alice又はBobのいずれかによってネットワーク106に送ることができ、そこでブロックチェーン150上に不変に記録される。
【0085】
AliceがBobとの合意を示し、Sig PAという署名を提供する後まで、XがBobから差し控えられたという事実は、Bobの署名が少なくともその時点まで有効に提供されないことを意味する。BobによるXの署名(及び実施形態では、X自体もTx1に別々に含まれる)は、ロックスクリプトに従ってTx1が有効である条件であるため、これは、BobがXを提供されるまで、Bob又は他の誰が、ネットワーク106を介してTx1を伝搬させること又はブロックチェーン150に受け入れることが不可能であることを意味する。それまで、Bobが有効な署名を提供することは暗号的に不可能である。Tx1は、署名の順序の暗号学的証明としてブロックチェーン150に不変的に記録されたままである。追加のセキュリティのために、ドキュメント及び/又はビデオ又は他のそのような媒体(又はハッシュ又は他のそのような変換)のコピーをTx1に任意的に添付することができる。
【0086】
方法M1は、証拠を記録するために単一のトランザクションTx1のみを使用する方法を提供する。これは、証拠が全てブロックチェーン150のある時点で記録され、従って、Alice、Bob又は一般大衆の他の構成員のような任意のパーティが後日それをクエリすることを望むならば、より効率的に探索し、見つけることができるという利点を有する。ブロックチェーン150は、トランザクションのインデックスを含んでいないことに留意されたい。従って、別個のインデックスを別々に維持するという負担を伴わずに、ブロックチェーンを検索するには、所望のトランザクションを検索するためにブロックチェーンのトランザクションをトラバースする必要がある。ブロックチェーン150内のある時点での1つのトランザクションは、チェーン内の任意の各ポイントで散在する2つのトランザクションよりも、計算リソースに関して見つけるのがより効率的である。より少ないトランザクションはまた、必要な伝搬がより少なく、従って、ネットワーク101、106に対する必要な負担がより少ない。
【0087】
方法M2は、2つのトランザクションを使用して、方法M1と同様の結果を達成する方法を提供する。これは、スクリプト言語に関して以下の例として説明されているが、方法2は、アカウントベースのトランザクションモデルや、スクリプトが有効性のカスタム条件を定義することを許さない他のプロトコルを使用して実装することもできるという利点がある。
【0088】
図8は、方法M2で使用できる例示的なトランザクションのセットを示している。直ぐに詳しく説明するように、Aliceは、Aliceが彼女の署名を提供することによりトランザクションTx
1の中で消費される初期トランザクションTx
0を構築する。トランザクションTx
2は、Bobが彼の署名を提供することによってTx
1のアウトプットを消費する。
【0089】
図10は、方法M2のステップを示すフローチャートである。
図9は、方法M2の間の特定のステップにおけるトランザクションの状態を示している。
【0090】
ステップT1で、AliceとBobは、それらの間にビデオチャネル又は他のメディアチャネル301を開く。この動画やその他の媒体が録画されることがありる。
【0091】
ステップT2で、AliceはUTXO1を作成し、彼女の署名を提供することによって償還することができる。
【0092】
ステップT3で、Aliceは、UTXO1を消費する部分トランザクションTx1を作成する。このトランザクションは、Bobの署名を提供することによって償還できる1つの使用可能なアウトプットUTXO2が含まれている。任意的に、電子ドキュメント(又はそのハッシュ)を、トランザクションに、例えばOP_RETURNに含めることもできる。
【0093】
方法M2のシナリオでは、AliceはTx0(TxID0)のトランザクションIDに署名し、Tx1が有効であるためにこの署名(Sig PA)をTx1のインプットに含める必要がある。TxID0はTx0全体のハッシュである。Bobは、Tx1のトランザクションID(TxID1)に署名し、この署名(Sig PB)を、Tx1のアウトプットUTXO2を有効に償還するために、さらなるトランザクションTx2のインプットに含める必要がある。TxID1は、Aliceの署名Sig PAを含むTx1全体のハッシュである。従って、Tx2において有効な署名を提供するBobは、Tx1におけるAliceの署名に依存する。Bobが誤ったものに署名を提供するか又は署名しない場合、Tx2はノード104によって有効であるとはみなされず、したがってブロックチェーン150内で伝搬及び記録されない。
【0094】
AliceはまだTx1に彼女の署名を加えていない。
【0095】
ステップT4で、Aliceは部分トランザクションTx1をBobに送信、する。注:この時点では、Bobは、トランザクションTx1のトランザクションID TxID1を知らないため、UTXO2を償還する有効な署名を提供することができない。(トランザクションIDはトランザクションデータのハッシュであることを思い出してほしい。)これは、AliceがまだTx1に署名を提供していないためである。
【0096】
ステップT5で、BobはAliceに対し、証書(又はより一般的にはドキュメント)の条項に合意することを口頭で尋ねる。Aliceは口頭で確認する。これは、ビデオリンク301でキャプチャされる。代替的に又は追加的に、他の形態の通信及び/又は媒体が、リンク301を介して、例えば手話などで使用され得る(方法M1に関する前述の説明を参照のこと)。
【0097】
ステップT6で、Aliceは、Tx1のための署名を提供し、これは、ここで完全なトランザクションである。彼女はこれをサイドチャネル302を介してBobに送る。あるいは、メイン媒体チャネル301を介して通信することもできる(再び、方法M1に関する対応する説明を参照されたい)。
【0098】
ステップT7で、BobはUTXO2を消費するトランザクションTx2を作成する。BobはTx2に署名する。
【0099】
任意的なステップT8において、記録されたビデオ又は他の媒体データは、方法M1のステップS9と同様の方法で、トランザクションTx2に記憶されてもよい。この場合も、このデータは、Alice、Bob、又はその両方によって署名されてよい。
【0100】
ステップT9で、トランザクションTx1及びTx2は、ここで完了し、Alice又はBobのいずれかによってネットワーク106に送ることができる。それらはブロックチェーン150上に不変に記録される。方法M2ではXは必要ないが、TxID1がTx2が有効に生成される前に存在しなければならないため、署名の順序は依然として強制されている。
【0101】
方法M2は、スクリプトが検証のためのカスタマイズ可能な条件を定義できない、アカウントベースのモデルやトランザクションプロトコルでも動作できる。方法M2に含まれるすべてのトランザクションは、多くの非スクリプトベース及びアカウントベースのトランザクションプロトコルの共通又は標準検証基準に対応する標準スクリプトのみを使用することに注意する。
【0102】
方法M1及びM2は多くの統一された特徴を共有する。第1に、署名の順序は固定されている。Bobが彼の署名を提供する前に、Aliceが彼女の署名を提供しなければならない。さらに、両方の方法の実施形態において、トランザクションの署名のビデオは、署名者Alice及び証人Bobのための容量の証拠を提供する。ビデオデータ、又はビデオデータのハッシュをトランザクションに含めることはオプションである。また、証書に係るドキュメントの電子コピー又は当該ドキュメントのハッシュを含めることも任意である。
【0103】
どちらの方法でも、署名の記録と任意の補足データ(ドキュメント及び/又はビデオデータ)はブロックチェーンに保存され、不変である。トランザクションがブロックチェーンにサブミットされると、デジタル署名がノード104によってチェックされる。有効な署名を持つトランザクションのみがブロックチェーン150に格納される。従って、第3者は、署名自体をチェックする能力を持たずに、署名の正当性を信頼することができる。レコードは、分散ネットワーク上のフルコピーノード104Sによって複製され、従って、第3者によって容易に得ることができる。
【0104】
実施形態では、ハッシュベースのメッセージ認証コード(hash-based message authentication code (HMAC))の使用を通して、2つのパーティは部分的に満たされたトランザクションを送信し、トランザクション又は送信エラーに予期せぬ変更がなかったことを検証することができる。
【0105】
注:トランザクションの使用可能UTXOアウトプットに移転されたデジタルアセットの量は、本発明の目的には関係ない。したがって、方法1では、それは、Tx0のアウトプット0(UTXO1)、及びTx1のアウトプット0である。方法M2では、Tx0のアウトプット0(UTXO1)、Tx1のアウトプット0(UTXO2)、及びTx2のアウトプット0を参照する。インプット値、実際には示されない他のインプットを分割するため、トランザクションのうちの任意の所与の1つの中に、より多くの使用可能なアウトプットが存在できる。Aliceは、UTXOの中で定義されたデジタルアセットの一部又は全部を彼女自身に、BobのレンダリングされたサービスのためにBobに、又は別のパーティに、移転できる。実際には、Aliceは、おそらく、トランザクションがマイナーによって成功裏に受け入れられることを確実にするために十分なマイナー手数料を残す必要があり、また、実施形態においては、ドキュメント及び/又はビデオの記録を格納するための費用を支払う必要がある(これは、各ノード104においてブロックチェーン150のコピー内のすべての記憶ノード104Sに格納されるが、これは、勝ったマイナー104M(記憶ノード104Sでもあり得る)のみが、マイナー手数料を得る)。しかし、プライベート又はコンソーシアムのブロックチェーンのような他の使用事例では、マイナー104Mは必ずしも報酬によって動機付けされる必要はない。
【0106】
図11及び
図12は、Xのハッシュの代わりに、コードセパレータを有する単一のトランザクションを使用する、方法M1の代替的な実装を示す。
【0107】
図11は、この方法の変形例で使用されたトランザクションの概略図である。Aliceは、必要なロックスクリプト有するUTXO
1を生成する最初のトランザクションTx
0を構成する。これは、Aliceの署名とBobの署名をその順で提供することによってトランザクションTx
1の中で消費される。この例では、シークレットXは、実際にはトランザクションTx
1の一部ではない。しかし、BobがTx
1内の有効な署名を作成するためには、彼は依然としてXを知る必要がありる。
【0108】
【0109】
この実施形態は、ロックスクリプトのどの部分にBobが署名する必要があるかを制御するために、Tx0のロックスクリプトのコードセパレータを使用する。次に、Aliceは、前述の実施形態においてBobがXを留保する方法と類似の方法で、Bobが署名することを要求されるロックスクリプトの一部を留保する。
【0110】
署名はTx1のアウトプットに署名する。実施形態において、アンロックスクリプト内のsighashフラグは、Tx1のどの部分が署名されるかを設定する。しかし、署名はロックスクリプトの一部にも署名し、ロックスクリプトはTx0に含まれる。コードセパレータがない場合、少なくとも1つのプロトコルでは、デフォルトで署名されるのは常にロックスクリプト全体である。一方、コードセパレータがある場合、Tx0を作成するパーティは、どの部分が署名されるかを制御できる。
【0111】
ステップU1において、Alice及びBobは、彼らの間にビデオチャネルを開く。このビデオは記録されてよい。
【0112】
ステップU2で、Aliceは自分だけが知っているシークレットXを生成する。
【0113】
ステップU3において、Aliceは、コードセパレータから先のロックスクリプトの一部に対する彼女の署名を提供することによって、及びシークレットXを含むロックスクリプト全体に対するBobの署名を提供することによって、償還可能なUTXO1を生成する。
【0114】
ロックスクリプトは概略的に以下のように記述できる:
Loking UTXO1= [Checksig PB] <X> OP_DROP OP_CODESEPARATOR [Checksig PA]
【0115】
有効な署名を作成するには、[Checksig PB]<X>OP_DROPを除き、Aliceはロックスクリプト内のすべてに署名しなければなりない。Bobは、[ChecksigPB]<X>OP_DROPを含む、ロックスクリプト内のすべてに署名しなければならない。
【0116】
Aliceは、まだUTXO1の全体をBobに開示していない(まだネットワーク106に送信されておらず、ブロック151でマイニングされていない可能性がある)。
【0117】
ステップU4で、AliceはUTXO1を使用する部分トランザクションTx1を作成する。電子ドキュメントを、トランザクションに、例えば利用不可能アウトプット(OP_RETURN)に含めることができる。
【0118】
Aliceはまだ彼女の署名を加えていない。
【0119】
ステップU5で、Aliceは、コードセパレータから先のロックスクリプトを含む、UTXO1の部分的なバージョンをBobに送る。彼女はまた、トランザクションIDを含めて、UTXO1が属するトランザクションTx0の残りをBobに開示する。
【0120】
Aliceは部分トランザクションTx1をBobに送信する。
【0121】
注:この時点では、BobはUTXO1(Tx0のUTXO)のロックスクリプト全体を知らないため、Tx1のために有効な署名を提供することができない。特に、コードセパレータの前に現れるシークレットXを知らない。
【0122】
Aliceは、事前にBobに部分的なバージョンを送る必要は全くない(すなわち、ステップU5は任意である)。しかし、これを行うことの利点の1つは、彼女が彼女の署名を提供したときに、BobがAliceが署名したトランザクションのすべての部分を知っているので、それが有効であることを確認できることである。
【0123】
ステップU6で、BobはAliceに対し証書の条項に合意することを口頭で尋ねる。Aliceは口頭で確認する。これはビデオリンク上で記録されてよい。
【0124】
ステップU7で、AliceはTx1のための署名、及び彼女のシークレットXを提供する。彼女はこれをBobへ送信する。
【0125】
ステップU8において、Bobは、Xを知り、したがってロックスクリプトUTXO1の全体を構成でき、それが属するトランザクションIDが正しいことを検証することができる。彼は、ここで、有効な署名を提供することができる。BobはTx1に署名する。
【0126】
ステップU9において、任意で、ビデオデータ又はビデオデータのハッシュは、トランザクションTx1、例えばOP_RETURNに格納されてもよい。アウトプットのこの部分は、SIGHASH_ALL以外のSIGHASHフラグを使用して達成できる、AliceとBobによって事前に署名されていてはならない。
【0127】
このビデオデータは、ステップU7及びU8におけるものとは別個の署名を使用して、Alice、Bob、又は両方によって署名されてもよい。
【0128】
ステップU10で、トランザクションTx1は完了し、Alice又はBobのいずれかによってネットワークに送ることができ、そこでブロックチェーン150上に不変に記録される。Tx0は、Tx1と同時に又は前に又は後に送信されてよい。
【0129】
上記の実施形態は、単なる例示として説明したものであることが理解されるであろう。
【0130】
例えば、前述のように、所与のトランザクションに署名するパーティ103a、103bが、最初にトランザクションを生成するパーティである必要はなく、トランザクション全体を組み立てるパーティである必要もなく、ネットワーク106にトランザクション全体を送信するパーティである必要もない。同様に、第3者はAliceとBobに代わって紙の証書を起草することができるが、AliceとBobにより署名されることのみが残されている。同様のことは、電子トランザクション152についても言える。同様に、署名された証書を他人がその保管場所に送ることも可能である。
【0131】
第1パーティが提供する必要のある最小限のことは、第2パーティの署名であり、第2パーティが提供する必要のある最小限のことは、第2パーティの署名である。トランザクションの他の要素は、第1パーティ、第2パーティ、あるいは第3者によって、あるいはこれらのパーティの組み合わせによって生成される。シークレットXを使用する実施形態では、Xもまた、望ましくは、第1パーティによって第2パーティに提供されるが、代替的に、Xは、第1パーティと信頼される第3者との間で共有される共有シークレットであってもよく、シークレットXは、信頼される第3者によって第2パーティに提供されてもよい。
【0132】
トランザクションの要素は、第1パーティ、第2パーティ、あるいは第3者によって、あるいはこれらのパーティの組み合わせによって組み立てられ得る。完全なトランザクションは、第1パーティ又は第2パーティによって直接ネットワークに送信され得るか、又は第3のパーティを介してネットワーク106に転送され得る。
【0133】
さらに、本開示の範囲は、上述の特定のトランザクションプロトコル又はノードプロトコルに限定されない。例えば、方法M1及びM2に関連して記載されるような類似の機能は、問題となっている特定のシステムのノード104によって適用されるノードプロトコルによって認識される1つ以上の言語に依存して、他のスクリプト言語を用いて実現することができる。
【0134】
いくつかのブロックチェーンでは、トランザクションは、シーケンスの中の別のトランザクションのアウトプットの「使用」又は償還において、シーケンスの中のトランザクションの概念を使用しないアカウントベースのプロトコルを使用する。アカウントベースのブロックチェーンでは、アカウントは一般にアカウントアドレスで識別される。すべてのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって格納され、絶えず更新される。トランザクションは、送信側と受信側のフィールドを持ち、送信側フィールドでアドレスされたアカウントから受信側フィールドでアドレスされたアカウントに送信されると言われる(物理的には、トランザクションは検証及び他のブロックチェーンノードへの伝搬のために、実際には端末からブロックチェーンノードへ送信されるが、アカウント自体は、ブロックチェーンの状態によって定義される論理的な構成概念であり、次に、それが含むトランザクションのシーケンスによって定義される)。トランザクションは、例えば、送信者と受信者のアカウントの間である量のデジタルアセットを移転し、その量を送信者のアカウントの残高から控除し、受信者のアカウントの残高に加えさせる。アカウントは、以前に存在しなかったアカウントアドレス(すなわち、ブロックチェーン上の以前のトランザクションに含まれていないアカウントアドレス)にトランザクションを送信することによって作成され、そのアカウントを含むその後のトランザクションは、それらの送信者又は受信者フィールドにそのアドレスを指定する。したがって、与えられたアカウントに関連するブロックチェーン上のすべてのトランザクション(それを生成するトランザクションを含む)は、共通のアカウントアドレスによってリンクされる。
【0135】
このように、アカウントベースのモデルでは、トランザクションはUTXOなどのシステムに基づいては機能せず、各トランザクションが先行するトランザクションのアウトプットを消費又は償還する。その代わりに、トランザクションは、アカウントのトランザクション記録(「ポジション」又は「ナンス」とも呼ばれ、proof-of-workのナンスと混同しない)を使って注文される。この値は、送信者により彼らの暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。したがって、方法M2は、カスタムスクリプトを許可しない場合でも、依然としてアカウントベースのプロトコルで実装され得る。
【0136】
アカウントベースの場合、トランザクション1からのトランザクションIDは、任意でトランザクション2のデータフィールドに含めることができる。次に、方法M2と同じケースに還元する。いくつかのアカウントベースのプロトコルでは、ロックスクリプトの役割を果たすために、スマートコントラクトが使用されることがある。スマートコントラクトでは、データの特定のビットに署名する署名を要求することができる。従って、Aliceからの署名を、次にAliceの署名に特に署名するBobからの署名を必要とするスマートコントラクトを記述することができる。この場合、上述のUTXOベースのM2方法のバージョンのように、Bobが知らない情報はAliceの署名である。
【0137】
さらなる変形において、トランザクションプロトコル及びノードプロトコルがより柔軟なスクリプト言語を可能にする場合、条件検証のあらゆる種類の変形が、1つ以上のトランザクションにプログラムされ得る。例えば、Bobが同じトランザクションにおいてAliceの署名(又はその変換)を含むデータの一部に署名することを要求するカスタムスクリプトを記述することが可能である。これは、方法M1のように単一のトランザクションテストを提供するが、方法M2のようにXを必要としない。Aliceは、通信チャネル301を介して彼女の合意に署名し、宣言する後まで、彼女の署名をBobから単に保留する。
【0138】
さらに、上記は、公開ブロックチェーンに関して説明されているが、これは、限定的なものではなく、ブロックチェーン150は、例えば、組織の選択されたグループの間で使用されるコンソーシアムブロックチェーン、又は所与の組織内のプライベートブロックチェーンであってもよい。
【0139】
また、上記の順序は、方法M1及びM2のすべての段階に必須ではないことにも注意されたい。例えば、方法M1のステップS5を参照すると、Aliceは、必ずしもこの時点で部分トランザクションをBobに送信する必要はない。彼女はステップS7まで、部分トランザクションTx1においてXと彼女の署名を一緒に送るのを待つことができる。同様に、別の例として、方法M2では、Aliceは、ステップT4で部分的なTx1をBobに送る必要はないが、ステップT6で彼女の署名と共に送るのを待つことができる。また、前述のように、別のパーティが部分的なトランザクションを提供することも可能であり、Aliceから信頼されている別のパーティが、BobにXを送信する責任を負うことも可能である。より一般的には、ノード104によって検証される有効な署名を提供するためにBobが署名することを要求される情報がBobから差し控えられることが重要である。また、情報ピース(例えばシークレット情報ピース、例えばX)がBobに提供されない、又はBobに利用可能できないようにする場合、これは必ずしもそれが事前に存在したことを意味する必要はない。いくつかの実施形態において、これは、Aliceが彼女の署名を提供した後及び/又は彼女がBobに合意を示した後に生成することができる。
【0140】
方法M1の別の変形例は、以下の通りである。上述のように、Tx0のロックスクリプトにXではなくH(X)を含める理由は、そうでなければXの生の値がブロックチェーン150の中で明らかになるからである。しかし、原則として、Aliceは、Tx0とTx1の両方がネットワーク106に送信する準備が整うまで、Tx0を保留することもできる(いくつかのシステムには孤児トランザクション用の規定があることを思い出してほしい)。この場合、次にTx0のロックスクリプトの中の[Solve H(X)]は、単にXとの等価性をチェックする関数に置き換えることができる(例えば、オペコードOP_EQUALVERIFYを使用する)。
【0141】
方法M1及び/又はM2の他の変形例は、本明細書に説明されているように、根底にある原理を与えられると、当業者に明らかになり得る。
【0142】
さらに、上記は、Aliceがドキュメントの内容に合意するという観点から記述されているが、これは必須ではない。例えば、Aliceの合意は、単に、話し言葉による証書又は1つ以上の条件の他の集合の合意であるかもしれない。より一般的には、本方法は、記述された又は任意の媒体上に指定された、電子的な又はその他の任意の形式で定義された任意のステートメントに関連して使用することができる。また、本書で使用される「ステートメント」という用語は、合意されている内容の性質を制限するものではない。例えば、Alice、Bob、又は他のパーティが行った事実又は意見のステートメント、又はBob又は他のパーティがAliceに提出した提案である可能性がある。
【0143】
更により一般的には、本明細書に開示された一態様によると、第1パーティがステートメントに合意することをブロックチェーンを使用して証明する、コンピュータにより実装される方法であって、前記方法は、第2パーティのコンピュータ機器において、前記第2パーティが、前記第1パーティが前記ステートメントに合意することの確認を受信するステップと、前記第2パーティが、前記確認の後であって、前記第1パーティが前記確認に加えて前記合意を示すために前記第1パーティの暗号署名を生成する後まで、前記第2パーティに利用可能ではない前記第1パーティの情報ピースを受信するステップと、前記第2パーティが前記第1パーティによる前記合意の受信を証明することを示すために、前記第2パーティが、前記情報ピース又はその変換を含むデータの部分に署名することにより、前記第2パーティの暗号署名を生成するステップと、1つ以上のトランザクションのうちの少なくとも1つに含まれる前記第1パーティの前記署名と、前記1つ以上のトランザクションのうちの少なくとも1つに含まれる前記第2パーティの前記署名とを含む形式で、前記1つ以上のトランザクションを、ノードのネットワークへ送信する又は前記ネットワークへ送信させるステップであって、前記ネットワークは、検証条件を満たすことを条件として前記ノードの少なくとも幾つかのうちの各々において維持される前記ブロックチェーンのコピーに記録されるよう、前記ネットワークに渡り各トランザクションを伝搬するよう構成される、ステップと、を含み、前記検証条件は、前記第1パーティの前記署名が前記1つ以上のトランザクションのうちの1つに含まれること、前記第2パーティの前記署名が前記1つ以上のトランザクションのうちの1つに含まれること、及び前記第2パーティの前記署名が前記データの部分に署名することにより生成されたこと、を条件として、前記1つ以上のトランザクションのうちの1つを検証するよう構成される、方法が提供される。
【0144】
方法M2では、第2のトランザクションが検証されるためには、第1のトランザクションも有効である必要があることに注意する。トランザクションがノードによって検証されるとき、ノードは、未使用のアウトプットを有する以前に検証されたトランザクションを消費していることをチェックする。したがって、方法M2では、第1パーティの署名がトランザクションのうちの1つ(第1のトランザクション)に含まれることを条件として、また、第2パーティの署名が第2のトランザクションに含まれること、及び、第2パーティの署名が、データの前記部分に署名することによって生成されたことを条件として、第2のトランザクションが検証されることが真実である。M1方法では、2つの署名が同じトランザクションに含まれることを条件に、個々のトランザクションが検証される。
【0145】
保留される情報ピースは、第1パーティの署名、又は第1パーティの署名と共に又は第1パーティの署名とは別に受け取った、例えば乱数のような、別個の情報ピースを含むことができる。独立した情報ピースの場合、これはまた、ブロックチェーンに記録されるために送信される1つ以上のトランザクションの1つに含まれてよい。
【0146】
実施形態において、この方法は、第2パーティが、1つ以上のトランザクションのうちの少なくとも1つを部分的な形式で受け取ることを含んでもよい。部分的な形式は、第1パーティ又は記録を容易にする第3者から受領することができる。実施形態において、この方法は、第2パーティが、第1パーティから署名を受け取ることを含んでもよい。第1パーティの署名は、1又は複数のトランザクションの部分的な形式の部分として、又は別個に受領することができる。実施形態において、第2パーティは、第2パーティの署名を部分的な形式に含めることによって、1つ以上のトランザクションを完了する。別途受領された場合、第2パーティは、トランザクションを完了するために、第1パーティの署名を加えることもできる。ネットワークへ送信することは、次に、完了したトランザクションをノードのネットワークを通じて伝搬され、それによってブロックチェーンに記録されるように転送することを含むことができる。転送は、ノードのうちの1つに直接的に送信すること、又はノードのうちの1つに直接的又は間接的に転送される第3者のコンピュータ機器に送信することを含むことができる。
【0147】
別の実施形態では、第2パーティは、第1パーティの署名及び(別個の場合)第1パーティの情報ピースを受領した後に、第2パーティのコンピュータ機器において、コードを含む1つ以上のトランザクションを作成することができる。次いで、第2パーティは、ノードのネットワークを介して伝搬され、それによってブロックチェーンに記録される1つ以上のトランザクションの完成した形式を転送することができる(ここでも、転送は、ノードの1つに直接的に送信すること、又はノードの1つに直接的又は間接的に転送される第3者のコンピュータ装置に送信することを含むことができる)。
【0148】
さらに別の選択肢において、第1パーティは、1又は複数のトランザクションの部分的な形式、第1パーティの署名、及びシークレット情報ピース(署名とは別個の場合)を第3者に送ることができ、第2パーティは、第3者が、第1及び第2パーティから受け取ったこれらの要素に基づいて1又は複数のトランザクションの完全な形式を組み立てるために、第2パーティの署名を第3者に送ることができる。次いで、第3者は、1つ以上のトランザクションを、直接的又は間接的に、ネットワーク全体に伝搬され、それによってブロックチェーンに記録されるよう、ノードの1つに転送することができる。あるいは、第1パーティは、第1パーティの署名及び(別個の場合は)シークレット情報ピースを第3者に転送することができ、第2パーティは、第3者が1つ以上のトランザクションを組み立てるために、第2パーティの署名を第3者に転送することができる。ここでも、次いで、第3者は、1つ以上のトランザクションを、直接的又は間接的に、ネットワーク全体に伝搬され、それによってブロックチェーンに記録されるよう、ノードの1つに転送することができる。
【0149】
第1パーティの署名は、第1パーティが、1つ以上のトランザクションの少なくとも1つの少なくとも一部又はその変換、例えば、1つ又は両方のトランザクションの一部又はすべてのハッシュに署名することによって生成することができる。また、第2パーティによって署名されたデータの部分は、トランザクションのうちの少なくとも1つの部分又は全部又はその変換(例えば、ハッシュ)を含み得る。実施形態において、第2パーティによって署名されるべきデータの部分は、各ノードに適用されるプロトコル、又は1つ以上のトランザクションに含まれるコード、又はこれらの組み合わせによって指定されてもよい。
【0150】
実施形態において、ステートメントは、ドキュメント内のステートメントであってもよい。
【0151】
実施形態では、ドキュメントのレコードは、1つ以上のトランザクションのうちの1つに含まれてよく、それによりブロックチェーンに格納される。
【0152】
ドキュメントのレコードは、明確な形式のドキュメント自体、ドキュメントのハッシュのようなドキュメントの変換、又は暗号化した形式のドキュメントを有してもよい。
【0153】
ドキュメントのレコードは、第1パーティ及び第2パーティの一方又は両方により暗号署名されてよい。
【0154】
これを実装するために、実施形態において、第1及び/又は第2の署名を生成するために署名されたデータは、ドキュメントのレコードを含んでもよい。代替として又は追加的に、第1及び/又は第2パーティは、別個の暗号署名をドキュメントのレコードに適用してもよい。
【0155】
実施形態では、第2パーティの署名を生成するために第2パーティにより署名されたデータの部分は、ドキュメントのレコードを含み、及び/又は第1パーティの署名を生成するために第1パーティにより署名されたデータは、ドキュメントのレコードを含んでよい。
【0156】
実施形態では、第1パーティと第2パーティとの間にビデオ呼を確立するステップ、を更に含み、確認の受信は、第2パーティが第1パーティからの確認を、ビデオ呼を介して視覚的又は聴覚的に受信することを含んでよい。
【0157】
実施形態では、視覚的又は聴覚的な確認を含むビデオの少なくとも期間を含むビデオのレコードは、将来の参照のために格納されてよい。
【0158】
実施形態では、ドキュメントのレコードは、1つ以上のトランザクションのうちの1つに含まれてよく、それによりブロックチェーンに格納される。
【0159】
ビデオのレコードは、明確な形式のビデオ自体、ビデオのハッシュのようなビデオの変換、又は暗号化した形式のビデオを有してもよい。
【0160】
実施形態では、ドキュメントのレコードは、第1パーティ及び第2パーティの一方又は両方により暗号署名されてよい
これを実装するために、実施形態において、第1及び/又は第2の署名を生成するために署名されたデータは、ビデオのレコードを含んでもよい。代替として、第1及び/又は第2パーティは、別個の暗号署名をビデオのレコードに適用してもよい。
【0161】
実施形態では、検証条件は、各トランザクションについて、少なくとも部分的に、トランザクション及び/又はブロックチェーンの先行するトランザクションに含まれるそれぞれのコードにより、構成されてよい。例えば、先行するトランザクションは、問題のトランザクションにより指されるトランザクションであってよい。
【0162】
代替的又は追加的に、検証条件は、少なくとも部分的には、各ノードに実装された共通ノードプロトコルによって定義されてもよい。
【0163】
先行するトランザクションは、1つ以上のトランザクションが作成及び/又は送信される時点で既にブロックチェーンに含まれていてもよく、又は先行するトランザクションがその時点でブロックチェーンに含まれる準備ができていてもよい。
【0164】
実施形態の第1のクラスでは、1つ以上のトランザクションは、第1パーティ及び第2パーティの両方の署名を含む1つのトランザクションを構成し、検証条件は、第1パーティ及び第2パーティの両方の署名がトランザクションに含まれること、及び第2パーティの署名がデータの部分に署名することにより生成されたことを条件に、1つのトランザクションを検証するよう構成されてよい。
【0165】
たった1つのトランザクションを使用することは、証拠が同じトランザクション内で一緒に保持されるという利点があり、より少ないルックアップ操作で後日再度クエリすることが可能になる。
【0166】
実施形態において、1つのトランザクションのインプットは、ブロックチェーン内の先行するトランザクションのアウトプットへのポインタを含んでもよく、又は、ブロックチェーンに含まれるべきであってもよく、先行するトランザクションのアウトプットは、先行するトランザクションのアウトプットをアンロックするために、第1パーティの署名及び第2パーティの署名を必要とするロックスクリプトを含む。1つのトランザクションは、1つのトランザクションのインプットにおけるアンロックスクリプトを含んでよく、アンロックスクリプトは、第1及び第2パーティの署名を含み、第1及び第2の署名を使用して先行するトランザクションをアンロックすることによって検証を行うように構成される。
【0167】
実施形態では、情報ピースは、第1パーティの署名に加えて、第1パーティのシークレット情報ピースを含んでよい。
【0168】
実施形態では、この方法は、第2パーティが、シークレット情報ピースを上記の1つのトランザクションに含め転送するか、又は、ネットワーク全体に伝搬される前に含まれるよう転送することを含み得る。検証条件は、シークレット情報ピースが上記の1つのトランザクションに含まれることを更に条件として、上記の1つのトランザクションを検証するように構成されてよい。
【0169】
実施形態では、上記の1つのトランザクションは、シークレット情報ピースのハッシュを含み、シークレット情報ピースが上記の1つのトランザクションに含まれるという条件は、第2パーティにより転送されるときのシークレット情報ピースが、コードに含まれるときのシークレット情報ピースのハッシュに対する解であるという条件を含んでよい。
【0170】
これは、第1パーティが、上記の1つのトランザクションの中でシークレット情報の生の値を開示する必要がないという利点を有する。
【0171】
実施形態では、ロックスクリプトは、先行するトランザクションの前記アウトプットをアンロックするためにシークレット情報ピースを更に必要としてよく、1つのトランザクションのインプットの中のアンロックスクリプトは、アンロックスクリプトの中のシークレット情報を使用するよう構成されるシークレット情報ピースを含んでよい。
【0172】
代替の実施形態では、ロックスクリプトは、ロックスクリプトを第1部分と第2部分とに分けるコードセパレータを含み、第1部分は情報ピースを含み、ロックスクリプトは、上記の1つのトランザクションの検証を可能にするために、第2部分ではなく少なくとも第1部分に署名するために第1パーティの署名を、及び少なくとも第2部分に署名するために、第2パーティの署名を必要とするよう構成されてよい。この場合、情報ピースの受信は、ロックスクリプトの第2の部分を受信することを含み、第2の部分の署名を生成することは、少なくとも第2の部分に署名することを含む。
【0173】
幾つかのこのような実施形態では、第2パーティが情報ピースを受信する前に、第2パーティが、ロックスクリプトの第1部分を受信するステップであって、第1パーティの前記署名は少なくとも第1部分に署名する、ステップと、第2パーティが、受信した第1部分に基づき、第1パーティの署名を検証するステップと、を含んでよい。
【0174】
実施形態において、先行するトランザクションは、第1パーティにより生成されてよい。実施形態において、先行するトランザクションは、直接的又は間接的に、ネットワーク全体に伝搬され、それにより、各ノードにおけるブロックチェーンのインスタンスに記録されるように、第1パーティによって送信されてもよい。あるいは、先行するトランザクションは、第3者又は第2パーティによって部分的に作成され、署名及び送信のために第1パーティに送付されるか、又は第1パーティは、その署名を第3者又は第2パーティに送付し、先行するトランザクションを組み立てて送信することができる。
【0175】
実施形態において、上記の1つのトランザクションは、少なくともアンロックスクリプトを含む部分的な形式で、第1パーティから第2パーティによって受信され、第2パーティが上記の1つのトランザクションに、第2パーティの署名及び(使用される場合には)シークレット情報ピースを含めることにより完成されてよい。第1パーティの署名は、上記の1つのトランザクションにおいて受領されてよく、又は別途受領されてよく、第2パーティにより上記の1つのトランザクションに含められてよい。上記の1つのトランザクションは、ひとたび完了すると、第2パーティによって直接ネットワークに送信されるか、又は上記の1つのトランザクションは、第2パーティによってネットワークに転送されるよう第3者に送信される。あるいは、第1パーティは、第1パーティの署名及びシークレット情報ピースを第3者に転送することができ、第2パーティは、第2パーティの署名を第3者に送信することができる。この場合、アンロックスクリプトは、第3者によって生成されるか、又は第3者によって第1パーティから受信される。これらの要素は、第3者によって上記の1つのトランザクションに組み立てられ、次いで、第3者は、上記の1つのトランザクションを直接的又は間接的に送信して、ネットワークを介して伝搬させることができる。
【0176】
実施形態において、ドキュメントのレコードは、上記の1つのトランザクションのアウトプットに含まれてもよい。
【0177】
実施形態において、ビデオのレコードは、上記の1つのトランザクションのアウトプットに含まれてもよい。
【0178】
第2パーティの署名は、シークレット情報ピースを含む上記の1つのトランザクションの一部に明確に署名することによって、又はシークレット情報のハッシュを含むデータの一部に署名することによって形成することができる。実施形態において、第2パーティによって署名されたデータの部分は、ロック及び/又はアンロックスクリプト又はその部分のような、上記の1つのトランザクションの1つ以上の他の要素、及び/又はそのハッシュ又はその技術のような変換を含んでもよい。1つの特定の実施形態では、第2パーティは、少なくともシークレット情報ピース及びロックスクリプトに署名するか、又はシークレット情報ピース及びロックスクリプトのみに署名する。実施形態において、第2パーティによって署名されたデータの部分は、第1パーティの署名を含まない。
【0179】
第1パーティの署名は、上記の1つのトランザクションの少なくとも一部からのデータ、又はその変換(例えば、ハッシュ)に署名することによって生成することができる。実施形態において、第1パーティによって署名されたデータは、ロックスクリプト、及び/又は先行するトランザクションの1つ以上の他のアウトプット、及び/又はアンロックスクリプトを含むインプット以外の上記の1つのトランザクションの1つ以上の他のインプット、又はこれらのいずれかもしくはすべてのハッシュなどの変換を含んでもよい。実施形態において、第1パーティによって署名されたデータの部分は、シークレット情報ピースを含まない。
【0180】
実施形態の第2のクラスでは、1つ以上のトランザクションは、第1トランザクション及び第2トランザクションを含んでよく、検証条件は、第1パーティの署名が第1トランザクションに含まれることを条件として第1トランザクションを検証し、第2パーティの署名が第2トランザクションに含まれること、及び第2署名がデータの部分に署名することにより生成されたことを条件として第2トランザクションを検証するよう構成されてよい。
【0181】
実施形態において、第1トランザクションのインプットは、ブロックチェーン内の先行するトランザクションのアウトプットへのポインタを含んでもよく、又は、ブロックチェーンに含まれるべきであってもよく、先行するトランザクションのアウトプットは、先行するトランザクションのアウトプットをアンロックするために、第1パーティの署名を必要とするロックスクリプトを含む。第2トランザクションのインプットは、第1トランザクションのアウトプットへのポインタを含んでもよく、第1トランザクションのアウトプットは、第1トランザクションのアウトプットをアンロックするために、第2パーティの署名を必要とするロックスクリプトを含む。第1のトランザクションは、第1のトランザクションのインプットの中に第1アンロックスクリプトを含んでもよく、第2トランザクションは、第2トランザクションのインプットの中に第2アンロックスクリプトを含み、第1アンロックスクリプトは第1パーティの署名を含み、第2パーティの署名を含む第2アンロックスクリプトは、第1パーティの署名を使用して、先行するトランザクションのアウトプットをアンロックし、第2パーティの署名を使用して、第1トランザクションのアウトプットをアンロックすることによって、検証を行うように構成される。第1パーティによって保留される情報ピースは、第1パーティの署名を含む。
【0182】
実施形態において、ドキュメントのレコードは、第2トランザクションのアウトプットに含まれてもよい。
【0183】
実施形態において、ビデオのレコードは、第2トランザクションのアウトプットに含まれてもよい。
【0184】
最初のパーティの署名は、第1トランザクション及び/又は先行するトランザクションからのデータに署名することによって生成することができる。第1パーティの署名は、第2トランザクション及び/又は先行するトランザクションからのデータに署名することによって生成することができる。実施形態において、第2パーティによって署名されたデータの部分は、第1トランザクションのトランザクションIDを含んでもよく、これは、第1トランザクションの署名を含む第1トランザクション全体のハッシュであってもよい。第1パーティによって署名されたデータは、先行するトランザクションのトランザクションIDを含んでもよく、これは、先行するトランザクション全体のハッシュであってもよい。
【0185】
本明細書に開示される別の態様によると、コンピュータ可読記憶装置に具現化されたコンピュータプログラムプロダクトであって、第2パーティのコンピュータ機器上で実行されると、第2パーティのいずれかの方法に従い動作を実行するコンピュータプログラムプロダクトが提供される。
【0186】
本明細書に開示される別の態様によると、第2パーティのコンピュータ機器であって、1つ以上のプロセッサを含む処理機器と、1つ以上のメモリ装置を含むメモリと、を含み、前記メモリは、前記プロセッサ上で実行するよう構成されるソフトウェアを格納し、前記ソフトウェアは、実行されると、第2パーティのいずれかの方法に従い動作を実行するよう構成される、コンピュータ機器が提供される。
【0187】
本明細書に開示される別の態様によると、第1パーティのコンピュータ機器において実行されるコンピュータにより実装される方法であって、当該方法は、第1パーティが、第1パーティがステートメントに合意することを示すために第1パーティの暗号署名を生成するステップと、第1パーティの前記署名とは別に、第1パーティがステートメントに合意することを第2パーティに確認するステップと、第1パーティが第1パーティの暗号署名を生成し及び第2パーティへ確認を与える後まで、第2パーティに利用可能ではない第1パーティの情報ピースを生成し、次に情報ピースを第2パーティへ送信し、従って第2パーティが、情報ピース又はその変換を含むデータの部分に署名することにより、第2パーティの暗号署名を生成できるようにするステップと、情報ピースを送信することにより、1つ以上のトランザクションのうちの少なくとも1つに含まれる第1パーティの署名と、1つ以上のトランザクションのうちの少なくとも1つに含まれる第2パーティの署名とを含む形式で、1つ以上のトランザクションをノードのネットワークへ送信させるステップであって、ネットワークは、検証条件を満たすことを条件として、ネットワークに渡り各トランザクションを伝搬し、ノードの少なくとも幾つかのうちの各々において維持されるブロックチェーンのコピーに各トランザクションを記録するよう構成される、ステップと、を含み、検証条件は、第1パーティの署名が1つ以上のトランザクションのうちの1つに含まれること、第2パーティの署名が1つ以上のトランザクションのうちの1つに含まれること、及び第2パーティの署名がデータの部分に署名することにより生成されたこと、を条件として、1つ以上のトランザクションのうちの1つを検証するよう構成される、方法が提供される。
【0188】
実施形態において、本方法は、第2パーティ及び/又は任意の第3者若しくはノードによって実行される本方法の任意の実施形態に対応する相補的なステップを含んでもよい。
【0189】
別の態様によると、コンピュータ可読記憶装置に具現化されたコンピュータプログラムプロダクトであって、第1パーティのコンピュータ機器上で実行されると、第1パーティのいずれかの方法に従い動作を実行するコンピュータプログラムプロダクトが提供される。
【0190】
別の態様によると、第1パーティのコンピュータ機器であって、1つ以上のプロセッサを含む処理機器と、1つ以上のメモリ装置を含むメモリと、を含み、メモリはプロセッサ上で実行するよう構成されるソフトウェアを格納し、ソフトウェアは、実行されると、第1パーティの方法に従い動作を実行するよう構成される、コンピュータ機器が提供される。
【0191】
別の態様によると、コンピュータ読み取り可能記憶装置上に具現化されたコンピュータプログラムであって、第1パーティのコンピュータ機器上で実行されると、第1パーティの方法に従い動作を実行するよう構成されるコンピュータプログラムが提供される。
【0192】
本明細書に開示される別の態様によると、ノードのネットワークの中の第1ノードにより実行される方法であって、1つ以上のトランザクションのうちの1つに含まれる第1パーティの暗号署名と、1つ以上のトランザクションのうちの少なくとも1つに含まれる第2パーティの暗号署名と、を含む1つ以上のトランザクションを受信するステップと、第1パーティの署名及び第2パーティの署名がそれぞれ1つ以上のトランザクションに含まれること、及び第1パーティの署名が、第1パーティが第1署名を生成する後まで、第2パーティに利用可能ではない第1パーティの情報ピースを含む又はそれから導出されるデータの部分に署名することを検証するステップと、第1ノードにおいて維持されるブロックチェーンのコピーに1つ以上のトランザクションを記録するステップと、1つ以上の他のノードの各々において記録されたブロックチェーンのコピーに記録されるように、1つ以上のトランザクションを1つ以上の他のノードへ向けて伝搬するステップと、を含み、第1ノードは、記録を実行するよう構成され、第1ノードによる1つ以上のトランザクションのうちの少なくとも1つの伝搬は、検証を条件として実行される、方法が提供される。
【0193】
実施形態において、第1ノードにより実行される本方法は、第1パーティ、第2パーティ及び/又は任意の第3者によって実行される本方法の任意の実施形態に対応する相補的な動作を含んでもよい。
【0194】
別の態様によると、上記のノードの方法を実行するよう構成される、ネットワークのノードが提供される。
【0195】
別の態様によると、コンピュータ読み取り可能記憶装置上に具現化されたコンピュータプログラムであって、ノード上で実行されると、該ノードの方法を実行するよう構成されるコンピュータプログラムが提供される。
【0196】
別の態様によれば、第1ノードに関連して記載された方法に従って各々が動作するように構成されたノードのネットワークが提供され、それにより、1つ以上のトランザクションをネットワーク全体に伝搬させ、上記の検証の条件で各ノードにおいてブロックチェーンのコピーに記録するように構成される。
【0197】
本明細書に開示される別の態様によれば、第1パーティ、第2パーティ、関連し得る任意の第3者、及びノードのネットワークを備える方法を提供することができる。
【0198】
本明細書に開示される別の態様によれば、第1パーティのコンピュータ機器、第2パーティのコンピュータ機器、任意の第3者のコンピュータ機器、及びノードのネットワークを備えるシステムを提供することができる。
【0199】
開示された技術の他の変形例又は使用事例は、本明細書で開示されると、当業者に明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定される。