(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-18
(45)【発行日】2024-11-26
(54)【発明の名称】暗号的にリンクされたアイデンティティ
(51)【国際特許分類】
H04L 9/32 20060101AFI20241119BHJP
H04L 9/08 20060101ALI20241119BHJP
【FI】
H04L9/32 200B
H04L9/08 C
H04L9/32 200Z
(21)【出願番号】P 2022516625
(86)(22)【出願日】2020-08-18
(86)【国際出願番号】 IB2020057766
(87)【国際公開番号】W WO2021053427
(87)【国際公開日】2021-03-25
【審査請求日】2023-07-19
(32)【優先日】2019-09-16
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ドイロン,ブロック
(72)【発明者】
【氏名】ライト,クレイグ スティーヴン
【審査官】行田 悦資
(56)【参考文献】
【文献】特表2019-515534(JP,A)
【文献】米国特許出願公開第2019/0065733(US,A1)
【文献】国際公開第2019/058240(WO,A1)
【文献】米国特許出願公開第2019/0102782(US,A1)
【文献】特表2022-511678(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
H04L 9/08
(57)【特許請求の範囲】
【請求項1】
第1メッセージに署名するために第1当事者によって使用される第1署名を証明するコンピュータ実装方法であって、
ブロックチェーンは、記録されたトランザクションを含み、
前記記録されたトランザクションは、第1値に対して、一方向関数を適用することによって生成された登録値を含み、
前記方法は、前記第1当事者によって実行され、かつ、
少なくとも前記第1値および前記第1メッセージに対して、一方向関数を適用することによって、前記第1署名を生成するステップと、
前記ブロックチェーン内に含めるために、ブロックチェーンネットワークの1つ以上のノードに対して、第1トランザクションを送信するステップであり、前記第1トランザクションは、前記第1署
名を含む、ステップと、
前記ブロックチェーン内に含めるために、前記ブロックチェーンネットワークの1つ以上のノードに対して、第2トランザクションを送信するステップであり、前記第2トランザクションは、前記第1値を含む、ステップと、
を含む、方法。
【請求項2】
前記第1値は、更新された登録値であり、かつ、第2値に対して、一方向関数を適用することによって生成され、
前記方法は、
少なくとも第2値および第2メッセージに対して、一方向関数を適用することによって、第2署名を生成するステップと、
前記ブロックチェーン内に含めるために、ブロックチェーンネットワークの1つ以上のノードに対して、第3トランザクションを送信するステップであり、前記第3トランザクションは、前記第2署
名を含む、ステップと、
前記ブロックチェーン内に含めるために、前記ブロックチェーンネットワークの1つ以上のノードに対して、第4トランザクションを送信するステップであり、前記第4トランザクションは、前記第2値を含む、ステップと、
を含む、請求項1に記載の方法。
【請求項3】
前記第1署名は、少なくともi)前記第1値、および、ii)一方向関数を前記第1メッセージに適用した結果に対して、一方向関数を適用することによって生成される、
請求項1または2に記載の方法。
【請求項4】
前記第1署名は、ハッシュベースのメッセージ認証コードである、
請求項1乃至3いずれか一項に記載の方法。
【請求項5】
前記第2トランザクションを送信するステップは、前記第1トランザクションが前記ブロックチェーンに含まれた後で、前記ブロックチェーンネットワークの1つ以上のノードに対して、前記第2トランザクションを送信することを含む、
請求項1乃至4いずれか一項に記載の方法。
【請求項6】
前記登録値および前記第1値は、値のシーケンスの一部であり、かつ、
前記シーケンスにおける次の値それぞれは、前記シーケンスにおける前の値に対して、一方向関数を適用することによって生成される、
請求項1乃至5いずれか一項に記載の方法。
【請求項7】
前記方法は、
第2当事者に対して、前記値のシーケンスの1つ以上の値を送信するステップ、を含む、
請求項6に記載の方法。
【請求項8】
前記第1トランザクションと前記第3トランザクションは、同一のトランザクションであり、かつ/あるいは、
前記第2トランザクションと前記第4トランザクションは、同一のトランザクションである、
請求項
2に記載の方法。
【請求項9】
前記一方向関数は、暗号ハッシュ関数である、
請求項1乃至8いずれか一項に記載の方法。
【請求項10】
前記第1当事者のコンピュータ機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを備える処理装置と、を含み、
前記メモリは、前記処理装置上で実行するように構成されたコードを保管し、
前記コードは、請求項1乃至9いずれか一項に記載の方法を前記処理装置上で実行するように構成されている、
コンピュータ機器。
【請求項11】
コンピュータ読取り可能なストレージ装置に保管されたコンピュータプログラムであって、
前記第1当事者のコンピュータ機器上で実行される場合に、請求項1乃至9いずれか一項に記載の方法を実行するように構成されている、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、暗号的な公開鍵-秘密鍵ペアを使用して第1当事者と第2当事者をリンクするための方法、および、そのリンクを検証するための方法に関する。特定的に、本方法は、第1者が、それらの公開鍵-秘密鍵ペアが第2者の公開鍵-秘密鍵ペアと暗号的にリンクされていることを証明することを可能にする。
【背景技術】
【0002】
ブロックチェーンは、分散データ構造の形態を指し、そこでは、ピアツーピア(P2P)ネットワーク内の複数のノードそれぞれにおいて、ブロックチェーンの重複コピーが維持される。ブロックチェーンは、データのブロックのチェーンを含み、そこで、各ブロックは、1つ以上のトランザクションを含んでいる。各トランザクションは、1つ以上のブロックに広がり得るシーケンス内の先行トランザクションに戻り指し示す(point back)ことができる。トランザクションは、「マイニング(“mining”)」として知られているプロセスによって、新しいブロックに含まれるようにネットワークに提出され得る。このことは、「プルーフオブワーク(“proof-of-work”)」を実行するために競合している複数のマイニングノードそれぞれを含み、すなわち、ブロックに含まれるのを待つ未解決(pending)のトランザクションのプールに基づいて暗号パズルを解決する。
【0003】
従来、ブロックチェーン内のトランザクションは、デジタル資産、すなわち、価値のストア(store)として機能するデータを運搬(convey)するために使用されている。しかしながら、ブロックチェーンは、また、ブロックチェーンの上に追加の機能性をレイヤ(layer)するためにも利用することができる。例えば、ブロックチェーンプロトコルは、トランザクションの出力に追加のユーザデータを保管することを可能にする。現代のブロックチェーンは、単一トランザクション内に保管できる最大データ容量を増加させ、より複雑なデータが組み込まれるのを可能にしている。例えば、このことは、ブロックチェーン内に電子文書を、もしくは、オーディオまたはビデオデータでさえ、保管するために使用され得る。
【0004】
ネットワーク内の各ノードは、3つの役割のうち任意の1つ、2つ、または全てを有することができる。移転(forwarding)、マイニング(mining)、およびストレージ(storage)である。移転ノードは、ネットワークのノード全体を通じてトランザクションを伝播させる。マイニングノードは、ブロックへのトランザクションのマイニングを実行する。ストレージノードは、ブロックチェーンのマイニングされたブロックに係るそれ自身のコピーを保管する。トランザクションをブロックチェーンに記録させるために、当事者は、伝搬されるべきネットワークのノードの1つにトランザクションを送信する。トランザクションを受信するマイニングノードは、新しいブロックの中へトランザクションをマイニングするために競合し得る。各ノードは、同じノードプロトコルを尊重(respect)するように設定されており、それは、トランザクションが有効である1つ以上の条件を含む。無効なトランザクションは、伝播されず、または、ブロックの中にマイニングもされない。トランザクションが検証されており、かつ、それによって、ブロックチェーンに受け入れられたと仮定すると、追加のユーザデータは、従って、不変の公的レコード(public record)としてP2Pネットワークにおける各ノードに保管されたままである。
【0005】
マネーロンダリング、アイデンティティ窃盗(identity theft)、および汚職(corruption)といった問題を避けるためには、多くの企業間取引(business-to-business)および消費者直接取引(business-to-consumer)のコミュニケーションにおいて、ID管理と検証が重要である。しかしながら、当事者(例えば、個人または事業者)のアイデンティティを直接的に確認することは必ずしも可能ではない。その代わりに、信頼される第三者からの検証された情報および保証(endorsement)を通じて、当事者における信頼を確かめることができる。このように、匿名ピア(anonymous peer)であっても、機密情報を通信するために十分な信頼性を確立することができる。そうした実施例の一つは、インターネット上でセキュリティを提供するトランスポート層セキュリティ(TLS)証明書である。
【発明の概要】
【0006】
ブロックチェーンは、公開鍵およびアドレスを介した識別(identification)の形式を提供する。これらの公開鍵およびアドレスは、ブロックチェーンアドレス空間内で固有(unique)であり、かくして、個々のブロックチェーンユーザに対して固有である。しかしながら、鍵およびアドレスは、そのユーザのアイデンティティに関する情報を明らかにするものではなく、そして、たいてい、規則を遵守するには不十分である、例えば、本人確認(know your customer、KYC)規則。加えて、ブロックチェーンの鍵およびアドレスは、典型的に、非ブロックチェーンシステムとはインターフェイスしない。このことは、ブロックチェーンが広く使用され、かつ、エンタープライズシステム内で統合される場合に必要とされる。
【0007】
ここにおいて開示される一つの態様によれば、第1当事者と第2当事者をリンクするコンピュータ実装方法が提供される。本方法は、前記第1当事者によって実行され、かつ、第1秘密鍵および対応する第1公開鍵からなる第1の暗号的公開鍵-秘密鍵ペアを取得するステップと、前記第1当事者と前記第2当事者に知られている第1共有秘密鍵を生成するステップと、第2秘密鍵および対応する第2公開鍵からなる第2の暗号的公開鍵-秘密鍵ペアを生成するステップであり、前記第2秘密鍵は、前記第1秘密鍵と前記第1共有秘密鍵に基づいて生成されているステップ、を含む。
【0008】
本開示は、公開鍵暗号を使用して、一方の当事者が他方の当事者と暗号的にリンクされ得る方法を認識する。公開鍵および秘密鍵の暗号的性質のため、第1当事者と第2当事者との間のリンクは偽造できず、かつ、さらに、リンクは第三者によって検証することができる。第2秘密鍵は、第1秘密鍵および共有秘密鍵に基づいて生成される。第1当事者のみが第2秘密鍵を知っており、かつ、第1当事者および第2当事者のみが共有秘密鍵を知っている。従って、第1当事者のみが第2秘密鍵を生成することができるが、第1当事者は、必要に応じて、第2当事者が証明できる情報に基づいて、第2公開鍵が生成されたことを証明することができる。第2当事者が信頼される当事者である場合、その信頼は、第1当事者と共に共有秘密鍵を確立したという事実によって、第1当事者と関連付けることができる。このことは、第1当事者のアイデンティティを信頼できるようにする。
【0009】
公開鍵-秘密鍵ペアは、ブロックチェーン鍵ペアであり得る。すなわち、公開鍵は、ブロックチェーンユーザの識別子(すなわち、アドレス)として使用されてよく、または、生成するために使用されてもよい。しかしながら、本開示は、ブロックチェーンシステムに限定されない。すなわち、第1当事者及び/又は第2当事者は、ブロックチェーンユーザである必要はなく、そして、それぞれの公開鍵-秘密鍵ペアは、ブロックチェーンを介するトランザクションについて使用される必要はない。
【0010】
ここにおいて開示される別の態様によれば、第1当事者と第2当事者との間のリンクを検証するためのコンピュータ実装方法が提供される。本方法は、第三者によって実行され、かつ、前記第2当事者から、i)前記第2当事者の第1秘密鍵に基づく第1署名を用いて署名されたメッセージ、および、ii)前記第1秘密鍵に対応する第1公開鍵を取得するステップと、前記第2当事者から、iii)前記第2当事者の第2秘密鍵に基づく第2署名を用いて署名されたメッセージ、および、iv)前記第2秘密鍵に対応する第2公開鍵を取得するステップと、前記第1当事者から、v)前記第1当事者と前記第2当事者のみに知られている共有秘密鍵、および、対応する共有公開鍵に基づく第3署名を用いて署名されたメッセージを取得するステップと、前記第2当事者の前記第2公開鍵が、前記第2当事者の前記第1公開鍵および前記共有公開鍵に基づいて生成されたか否かを決定するステップ、を含む。
【0011】
この態様において、第三者は、第1当事者と第2当事者との間にリンクが存在することを証明するように望んでいる。例えば、第三者が第1当事者を信頼することがある。第1当事者と第2当事者との間のリンクを検証することによって、第三者は、第2当事者のアイデンティティを信用するために、第1当事者のアイデンティティにおける信頼を使用することができる。第三者は、第2当事者から2つのメッセージを取得(例えば、受信)する。1つは、第2当事者にのみ知られている第1秘密鍵に基づく署名を用いて署名されており、そして、もう1つは、第2当事者にのみ知られている第2秘密鍵に基づく署名を用いて署名されている。第三者は、また、第1当事者および第2当事者の両方に知られている秘密鍵に基づく署名を伴うメッセージを取得(例えば、受信)する。第2秘密鍵に対応する公開鍵が、第1秘密鍵に対応する公開鍵および共有秘密鍵に対応する公開鍵に基づいて生成された場合に、第三者は、第1当事者が共有秘密鍵を第2当事者と確立したことを確認することができる。第三者は、次いで、第1当事者における信頼を利用して、第2当事者を信頼することができる。
【0012】
ここにおいて開示される別の態様によれば、第1メッセージに署名するために第1当事者によって使用される第1署名を証明するコンピュータ実装方法が提供される。ここで、ブロックチェーンは、記録されたトランザクションを含み、前記記録されたトランザクションは、第1値に対して、一方向関数を適用することによって生成された登録値を含む。本方法は、前記第1当事者によって実行され、かつ、少なくとも前記第1値および前記第1メッセージに対して、一方向関数を適用することによって、前記第1署名を生成するステップと、前記ブロックチェーン内に含めるために、ブロックチェーンネットワークの1つ以上のノードに対して、第1トランザクションを送信するステップであり、前記第1トランザクションは、前記第1署名を用いて署名されたメッセージを含むステップと、前記ブロックチェーン内に含めるために、前記ブロックチェーンネットワークの1つ以上のノードに対して、第2トランザクションを送信するステップであり、前記第2トランザクションは、前記第1値を含むステップ、を含む。
【0013】
公開鍵暗号において、署名は、たいてい、秘密鍵を使用して生成され、そして、対応する公開鍵を使用してチェックされる。本開示は、当事者の秘密鍵を使用することなく署名を生成することができる方法、および、当事者が、自身だけが署名を提供することができたはずであることを証明するできる方法を提供する。登録値はブロックチェーンに記録(すなわち、マイニング)されたものであり、従って、不変である。この時点で、第1値は、ブロックチェーンに記録されず、第1当事者のみが知っている。第1当事者は、第1値を使用して署名を生成し、その署名を使用してメッセージに署名し、そして、メッセージを含むトランザクションをブロックチェーンに送信することができる。第1当事者は、次いで、第1値を含む第2トランザクションを引き続きフォローすることができ、それによって、署名を証明する。このことは、別の当事者が、第1値に対して一方向関数を適用するのを可能にする。第1値に対して一方向関数を適用した結果が登録値である場合、検証当事者は、第1当事者のみが署名を生成できたことを確保することができる。
【図面の簡単な説明】
【0014】
本開示の実施形態の理解を助け、かつ、そうした実施形態がどのように実施され得るかを示すために、単なる例示として、添付の図面が参照される。
【
図1】
図1は、ブロックチェーンを実装するシステムの模式的なブロック図である。
【
図2】
図2は、ブロックチェーン内に記録され得るトランザクションの例を模式的に示している。
【
図3】
図3は、ブロックチェーンを実装する別のシステムの模式的なブロック図である。
【
図4】
図4は、第1当事者および第2当事者を暗号的にリンクするための方法を概略的に示している。
【
図5】
図5は、第1当事者が第2当事者と暗号的にリンクされているか否かを検証するための方法を概略的に示している。
【発明を実施するための形態】
【0015】
例示的なシステムの概要
図1は、ブロックチェーン150を一般的に実装するための例示的なシステム100を示している。システム100は、パケット交換(packet-switched)ネットワーク101、典型的には、インターネットといった広域インターネットワークを含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバーレイネットワーク106を形成するように配置された複数のノード104を含んでいる。各ノード104は、ピア(peer)のコンピュータ機器を含み、ノード104の異なるノードは異なるピアに属している。各ノード104は、1つ以上のプロセッサを含む。例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又はフィールドプログラマブルゲートアレイ(FPGA)である。各ノードは、また、メモリ、すなわち、非一時的なコンピュータで読取り可能な媒体またはメディアの形態でのコンピュータで読取り可能な記憶装置を備える。メモリは、1つ以上のメモリ媒体を使用する1つ以上のメモリユニットを含み得る。例えば、ハードディスクといった磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、またはEEPROMといった電子媒体、及び/又は、光ディスクドライブといった光媒体である。
【0016】
ブロックチェーン150は、データ151のブロックのチェーンを含み、ブロックチェーン150のそれぞれのコピーは、P2Pネットワーク160内の複数のノードそれぞれで維持されている。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、ここで、このコンテキストにおけるトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、典型的に、全体を通して、1つの特定のトランザクションプロトコルを使用する。トランザクションプロトコルの1つの一般的なタイプにおいて、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、出力が暗号的にロックされているユーザ103に属しているデジタル資産の総計を表す総計(amount)を指定する(ロックを解除し、かつ、それによって償還または消費するために、そのユーザの署名を必要とする)。各入力は、先行トランザクション152の出力に戻って指し示し、それによって、トランザクションをリンクしている。
【0017】
ノード104の少なくとも一部は、移転ノード104Fの役割を担い、トランザクション152を移転し、かつ、それによって伝搬する。ノード104の少なくともいくつかは、ブロック151をマイニングするマイナ(miner)104Mの役割を担う。ノード104の少なくとも一部は、ストレージノード104Sの役割を担い(ときどき、「フルコピー(“full-copy”)」ノードとしても呼ばれる)、各ノードは、それぞれのメモリ内に同じブロックチェーン150のそれぞれのコピーを保管する。各マイナノード104Mは、また、ブロック151へマイニングされるのを待っているトランザクション152のプール154も維持している。所与のノード104は、移転ノード104、マイナ104M、ストレージノード104S、または、これらのうち2つまたは全ての任意の組み合わせであり得る。
【0018】
所与の現在のトランザクション152jにおいて、入力(または、各入力)は、トランザクションのシーケンスにおいて先行トランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還(redeemed)されること、または「支払われる(“spent”)」ことを指定する。一般的に、先行トランザクションは、プール154または任意のブロック151内の任意のトランザクションであり得る。先行トランザクション152iは、必ずしも現在のトランザクション152jが作成される時、またはネットワーク106に送信される時でさえ存在する必要はないが、現在のトランザクションが有効であるために、先行トランザクション152iが、存在し、検証される必要がある。従って、ここにおいては、「先行(“preceding”)」とは、ポインタによってリンクされた論理的な順序での先行を指し、必ずしも時間的な順序で作成または送信する時刻を指すのではない。そして、従って、トランザクション152i、152jがアウトオブオーダー(out-of-order)に作成または送信されることを必ずしも排除しない(孤立(orphan)トランザクションに関する後の説明を参照のこと)。先行トランザクション152iは、同様に、先行トランザクションまたは先行トランザクションと呼ばれ得る。
【0019】
現在のトランザクション152jの入力は、先行トランザクション152iの出力がロックされているユーザ103aの署名も含む。次に、現在のトランザクション152jの出力は、新しいユーザ103bに暗号的(cryptographically)にロックすることができる。従って、現在のトランザクション152jは、先行トランザクション152iの入力に定義された総計を、現在のトランザクション152jの出力に定義された新しいユーザ103bに移転することができる。ある場合に、トランザクション152は、複数のユーザ間で入力総計を分割するために複数の出力を有してもよい(そのうちの一人は、変更を与えるために元のユーザ103aであり得る)。場合によって、トランザクションは、また、複数の入力を有し、1つ以上の先行トランザクションの複数の出力から総計を集め、現在のトランザクションの1つ以上の出力に再配分することもできる。
【0020】
上記は、「出力ベース(“output-based”)」トランザクションプロトコルと呼ばれ、また、ときどき、未使用トランザクション出力(UTXO)タイプのプロトコルとも呼ばれる(ここで、出力はUTXOとして参照される)。ユーザのトータルバランスは、ブロックチェーン151に保管されたどの1つの番号にも定義されておらず、その代わりに、ユーザは、ブロックチェーン151内の多くの異なるトランザクション152に散在している、そのユーザの全てのUTXOの値を照合(collate)するために、特別な「ウォレット“wallet”」アプリケーション105を必要とする。
【0021】
代替的なタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース(“account-based”)」プロトコルと呼ばれ得る。アカウントベースの事例において、各トランザクションは、過去のトランザクションのシーケンスにおいて先行トランザクションのUTXOを戻って参照することによって、移転される総計を定義しない。むしれ、アカウントの絶対的なバランス参照することによる。全てのアカウントの現在の状態は、ブロックチェーンに分離されたマイナによって保管されており、そして、絶えず更新されている。そうしたシステムにおいて、トランザクションは、アカウントの実行中のトランザクション検数(tally)を使用して順序付けされる(「ポジション(“position”)」とも呼ばれる)。この値は、送信者が暗号署名の一部として署名し、そして、トランザクション参照計算の一部としてハッシュ化される。加えて、任意的なデータフィールドも、また、署名されたトランザクションであり得る。このデータフィールドは、例えば、以前のトランザクションIDがデータフィールドに含まれている場合、以前のトランザクションに戻って指し示し得る。
【0022】
いずれのタイプのトランザクションプロトコルでも、ユーザ103が新しいトランザクション152jを制定することを望む場合に、彼/彼女は、自分のコンピュータ端末102からP2Pネットワーク106のノード104の1つに新しいトランザクションを送信する(それは、今日では、典型的にサーバまたはデータセンタであるが、原理的には他のユーザ端末であり得る)。このノード104は、各ノード104で適用されるノードプロトコルに従って、トランザクションが有効であるか否かをチェックする。ノードプロトコルの詳細は、全体的なトランザクションモデルを形成するとともに、問題のブロックチェーン150で使用されているトランザクションプロトコルのタイプに対応する。ノードプロトコルは、典型的には、新規トランザクション152jにおける暗号署名が、トランザクション152の順序付けされたシーケンスにおける以前のトランザクション152iに依存する、期待される署名と一致することをチェックするために、ノード104を必要とする。出力ベースの事例において、このことは、新しいトランザクション152jの入力に含まれるユーザの暗号署名が、新しいトランザクションが支払う先行トランザクション152iの出力に定義された条件と一致することをチェックすることを含み得る。ここで、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名が、新しいトランザクションの入力が指し示す先行トランザクション152iの出力をアンロックすることを、少なくともチェックすることを含む。いくつかのトランザクションプロトコルにおいて、条件は、少なくとも部分的に、入力及び/又は出力に含まれるカスタムスクリプトによって定義され得る。代替的に、単にノードプロトコルだけで固定され得るし、または、これらの組み合わせによるものであり得る。いずれにせよ、新しいトランザクション152jが有効である場合、現在のノードは、P2Pネットワーク106内のノード104の1つ以上の他のノードに対して、それを移転する。これらのノード104の少なくとも一部は、移転ノード104Fとしても機能し、同じノードプロトコルに従って同じテストを適用し、そして、新しいトランザクション152jを1つ以上のさらなるノード104に移転する、など。このようにして、新しいトランザクションは、ノード104のネットワーク全体に伝搬される。
【0023】
出力ベースのモデルにおいて、所与の出力(例えば、UTXO)が支払われるか否かの定義は、別の、ノードプロトコルに従った前向き(onward)トランザクション152jの入力によって、いまだ有効に償還されているか否かである。トランザクションが有効であるための別の条件は、それが支払または償還を試みる先行トランザクション152iの出力が別の有効なトランザクションによって既に支払/償還されていないことである。再度、有効でない場合、トランザクション152jは、伝搬されず、または、ブロックチェーンに記録されない。このことは、同じトランザクションのアウトプットを一度ならず支払おうと試みる二重支払を防ぐ。一方で、アカウントベースのモデルは、アカウントバランスを維持することによって、二重支払を防ぐ。再び、トランザクションの定義された順序が存在するので、アカウントバランスは、いつでも単一の定義された状態を有している。
【0024】
検証に加えて、ノード104Mの少なくとも一部は、また、「プルーフオブワーク」によって支えられている、マイニングとして知られるプロセスにおけるトランザクションのブロックを最初に作成するように競合している。マイニングノード104Mでは、まだブロックに現れていない有効なトランザクションのプールに対して新しいトランザクションが追加される。次いで、マイナは、暗号パズルを解決しようと試みることによって、トランザクションのプール154からトランザクション152の新しい有効なブロック151を組み立てようと競合する。典型的に、このことは、「ナンス(“nonce”)」値を検索することを含み、その結果、ナンスがトランザクションのプール154と連結され、かつ、ハッシュ化されると、ハッシュの出力が規定の条件を満たす。例えば、既定の条件は、ハッシュの出力が、所定の既定数の先頭ゼロ(leading zeros)を有することであり得る。ハッシュ関数の特性は、入力に関して予測不可能な出力を有することである。従って、この探索は、ブルートフォース(brute force)によってのみ実行することができ、従って、パズルを解くように試みている各ノード104Mにおいて、相当量の処理リソースを消費している。
【0025】
パズルを解くための第1マイナノード104Mは、これをネットワーク106に通知し、その解(solution)を証明として提供し、それは、ネットワーク内の他のノード104によって容易にチェックすることができる(一旦ハッシュに対して解が与えられれば、それがハッシュの出力を条件に合致させることをチェックすることは簡単である)。勝者がパズルを解いたトランザクション154のプールは、次に、そうした各ノードにおいて勝者がアナウンスした解をチェックしたことに基づいて、ストレージノード104Sとして動作しているノード104の少なくとも一部によって、ブロックチェーン150内の新しいブロック151として記録される。ブロックポインタ155は、また、チェーン内の先に生成されたブロック151n-1に戻って指し示す新しいブロック151nにも割当てられる。プルーフオブワークは、新しいブロック151を作成するために多大な労力を要するので、二重支払のリスクを低減するのに役立つ。そして、二重支払を含む任意のブロックは他のノード104によって拒否される可能性が高いので、マイニングノード104Mは、二重支払がそれらのブロックに含まれるのを許可しないように動機付けされている。一旦生成されると、ブロック151は、同じプロトコルに従ってP2Pネットワーク106内のストレージノード104Sそれぞれで認識され、そして、維持されるので、修正することができない。ブロックポインタ155は、また、ブロック151に対して逐次的な順序を課す。トランザクション152は、P2Pネットワーク106内の各ストレージノード104Sにおいて順序付けられたブロックに記録されるので、このことは、従って、トランザクションの不変の公開台帳(public ledger)を提供する。
【0026】
異なる104Mのマイナが、任意の所与の時間に競合していることは、彼らがいつ解決策を探し始めたかに応じて、任意の所与の時間に、マイニングされていないトランザクションプール154の異なるスナップショットに基づいて、そうすることができることに留意すること。それぞれのパズルを誰が最初に解くかは、どのトランザクション152が次の新しいブロック151nに含まれるかを定義し、そして、現在のマイニングされていないトランザクションのプール154が更新される。次いで、マイナ104Mは、新たに定義された保留中のプール154からブロックを生成するために競合を継続する、など。生じ得る任意の「フォーク(“fork”)」を解決するためのプロトコルも、また、存在する。それは、二人のマイナ104Mが相互に非常に短い時間内にパズルを解き、その結果、ブロックチェーンの矛盾した見方が伝播されるものである。要するに、フォークのどの突起が伸びても、最も長いものが最終的なブロックチェーン150になる。
【0027】
ほとんどのブロックチェーンでは、勝ったマイナ104Mは、(あるユーザから別のユーザにデジタル資産の総計を移転する通常のトランザクションとは対照的に)どこからともなく新しい量のデジタル資産を創出する特別な種類の新しいトランザクションで自動的に報酬を受け取る(rewarded)。従って、勝ったノードが、デジタル資産の総計を「マイニングした(“mined”)」と言える。この特別なタイプのトランザクションは、ときどき、「ジェネレーション(“generation”)」トランザクションと呼ばれる。それは、自動的に新しいブロック151nの一部を形成する。この報酬は、マイナ104Mがプルーフオブワークの競争に参加するようにインセンティブを与える。通常の(非ジェネレーション)トランザクション152は、また、その出力の1つに追加のトランザクション料(fee)も指定し、そのトランザクションが含まれたブロック151nを生成した勝ったマイナ104Mにさらに報酬を与える。
【0028】
マイニングに関与する計算リソースのため、典型的に、少なくともマイナノード104Mそれぞれは、1つ以上の物理的サーバユニット、または、データセンタ全体を含むサーバの形態をとる。各移転ノード104M及び/又はストレージノード104Sは、また、サーバ又はデータセンタの形態をとることもできる。しかしながら、原則として、任意の所与のノード104は、ユーザ端末、または、一緒にネットワーク接続されたユーザ端末のグループの形態をとることができる。
【0029】
各ノード104のメモリは、それぞれの役割を実行し、かつ、ノードプロトコルに従ってトランザクション152を処理するために、ノード104の処理装置上で実行するように構成されたソフトウェアを保管する。ここにおいてノード104に帰属された任意の動作(action)は、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されるだろう。また、ここにおいて使用される用語「ブロックチェーン(“blockchain”)」は、一般的な技術の種類を指し、そして、あらゆる特定の専有ブロックチェーンプロトコルまたはサービスに限定されない、一般的な用語である。
【0030】
また、ネットワーク101に接続されているのは、ユーザを消費する(consuming)役割の複数の当事者103それぞれのコンピュータ機器102である。これらは、トランザクションにおける支払人(payers)および受領者(payee)の役割を果たすが、他の当事者のためにトランザクションのマイニングまたは伝播に必ずしも参加するものではない。それらは、必ずしもマイニングプロトコルを実行するわけではない。二人の当事者103および彼らそれぞれの機器102が、説明のために示されている。第1当事者103aおよび彼/彼女それぞれのコンピュータ機器102a、並びに、第2当事者103bおよび彼/彼女それぞれのコンピュータ機器102bである。より多くのそうした当事者103および彼らそれぞれのコンピュータ機器102がシステムに存在し、かつ、参加することができるが、便宜上、それらは図示されていないことが理解されるだろう。各当事者103は、個人または組織であってよい。純粋に例示として、第1当事者103aは、ここにおいてはアリスとして参照され、そして、第2当事者103bは、ボブとして参照されるが、このことは限定的なものではなく、そして、ここにおけるアリスまたはボブに対する参照を、「第1当事者」および「第2当事者」とそれぞれに置き換えることができることが理解されるだろう。
【0031】
各当事者103のコンピュータ機器102は、1つ以上のプロセッサを含むそれぞれの処理装置を備えている。例えば、1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、及び/又は、である。各当事者103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的なコンピュータで読取り可能な媒体またはメディアの形態のコンピュータで読取り可能なストレージ装置を備える。このメモリは、1つ以上のメモリ媒体を使用する1つ以上のメモリユニットを含み得る。例えば、ハードディスクといった磁気媒体、SSD、フラッシュメモリ、またはEEPROMといった電子媒体、及び/又は、光ディスクドライブといった光媒体である。各当事者103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105それぞれのインスタンスを含むソフトウェアを保管する。ここにおいて所与の当事者103に帰属された任意の動作は、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されるだろう。各当事者103のコンピュータ機器102は、少なくとも1つのユーザ端末を備えている。例えば、デスクトップまたはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチといったウェアラブルデバイスである。所与の当事者103のコンピュータ機器102は、また、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースといった、1つ以上の他のネットワーク化されたリソースを含んでもよい。
【0032】
クライアントアプリケーションまたはソフトウェア105は、最初に、適切なコンピュータで読取り可能な記憶媒体またはメディアにおいて、任意の所与の当事者103のコンピュータ機器102に提供され得る。例えば、サーバからダウンロードされたもの、または、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピー(登録商標)ディスクまたはテープ、CDまたはDVD ROMといった光ディスク、もしくは、リムーバブル光学ドライブ、等である。
【0033】
クライアントアプリケーション105は、少なくとも「ウォレット(“wallet”)」機能を備える。このことは、2つの主な機能を有している。これらの1つは、それぞれのユーザ当事者103が、ノード104のネットワーク全体にわたり伝搬され、そして、それによってブロックチェーン150に含まれるように、トランザクション152を作成し、署名し、かつ、送信することを可能にすることである。他方は、現在所有しているデジタル資産の総計をそれぞれの当事者に戻って報告することである。出力ベースのシステムにおいて、この第2機能は、問題の当事者に属するブロックチェーン150全体にわたり散在する様々なトランザクション152の出力に定義される総計を照合することを含む。
【0034】
各コンピュータ機器102上のクライアントアプリケーション105のインスタンスは、P2Pネットワーク106の移転ノード104Fの少なくとも1つに動作可能に結合されている。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、ストレージノード104のうちの1つ、一部、または全部にコンタクトして、それぞれの当事者103が受領者である任意のトランザクションについてブロックチェーン150にクエリ(query)することができる(もしくは、実際には、ブロックチェーン150内の他の当事者のトランザクションを検査する。実施形態でブロックチェーン150は、部分的にその公衆の目に触れてトランザクションの信頼を提供する公共施設(public facility)だからである)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従って、トランザクション152を形成し、かつ、送信するように構成されている。各ノード104は、ノードプロトコルに従って、トランザクション152を検証するように構成されたソフトウェアを実行し、移転ノード104Fの場合は、ネットワーク106全体にトランザクション152を伝播させるためにトランザクション152を移転する。トランザクションプロトコルおよびノードプロトコルは、相互に対応しており、そして、所与のトランザクションプロトコルは、所与のノードプロトコルと共に、所与のトランザクションモデルを一緒に実装する。同じトランザクションプロトコルが、ブロックチェーン150内の全てのトランザクション152について使用される(ただし、トランザクションプロトコルは、トランザクションの異なるサブタイプを許可し得る)。同じノードプロトコルは、ネットワーク106内の全てのノード104によって使用される(ただし、多くのノードは、そのサブタイプに対して定義されたルールに従って、異なるトランザクションのサブタイプを異なるように処理し、そして、また、異なるノードは、異なる役割を引き受け、従って、プロトコルの異なる対応する態様を実装することができる)。
【0035】
上述のように、ブロックチェーン150は、ブロック151のチェーンを含み、ここで、各ブロック151は、上述のように、プルーフオブワークプロセスによって作成された1つ以上のトランザクション152のセットを含む。各ブロック151は、また、ブロック151への逐次的な順序を規定するように、チェーン内の先に生成されたブロック151に戻って指し示すブロックポインタ155を含む。ブロックチェーン150は、また、プルーフオブワークプロセスによって新しいブロックに含まれることを待っている有効なトランザクション154のプールも含む。各トランザクション152は(トランザクション生成の他に)、トランザクションの順序を定義するように、以前のトランザクションへ戻るポインタを含む(トランザクション152のシールドは分岐(branch)が許されることに注意する)。ブロック151のチェーンは、チェーン内の第1ブロックであった生成ブロック(genesis block4,Gb)153にはるばる戻る。チェーン150内の初期における1つ以上のオリジナルトランザクション152は、先行トランザクションではなく生成ブロック153を指し示していた。
【0036】
所与の当事者103、例えばアリス、が、ブロックチェーン150に含まれるように新しいトランザクション152jを送信することを望む場合、彼女は、関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105においてウォレット機能を使用して)、新しいトランザクションを策定する。彼女は、次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上の移転ノード104Fの1つに送信する。例えば、このことは、アリスのコンピュータ102に最も近いか、または、最も良好に接続されている移転ノード104Fであってよい。任意の所与のノード104が新しいトランザクション152jを受信すると、それは、ノードプロトコルおよびそれぞれの役割に従って処理する。このことは、新たに受信されたトランザクション152jが「有効(“valid”)」であるための特定の条件を満たすか否かを、最初にチェックすることを含み、その例について、手短に、より詳細が説明される。いくつかのトランザクションプロトコルにおいて、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに設定可能である。代替的に、条件は、単にノードプロトコルの組み込み機能であってよく、または、スクリプトとノードプロトコルの組み合わせによって定義されてもよい。
【0037】
新たに受信されたトランザクション152jが、有効であるとみなされるテストを通過(pass)するという条件(すなわち、「検証済み(validated)」である条件)で、トランザクション152jを受信する任意のストレージノード104Sは、そのノード104Sに維持されているブロックチェーン150のコピー内のプール154に、新たに有効とされたトランザクション152を追加する。さらに、トランザクション152jを受信する任意の移転ノード104Fは、検証済みトランザクション152をP2Pネットワーク106内の1つ以上の他のノード104へ伝搬する。各移転ノード104Fは同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、このことは、P2Pネットワーク106全体に間もなく伝搬されることを意味する。
【0038】
一旦、1つ以上のストレージノード104で維持されるブロックチェーン150のコピー内のプール154に入ると、マイナノード104Mは、新しいトランザクション152を含むプール154の最新バージョンのプルーフオブワークのパズルを解くための競合を開始する(他のマイナ104Mは、依然として、プール154の古い見解に基づいてパズルを解こうとしているが、最初にそこに到達した者は誰でも、次の新しいブロック151が終了し、新しいプール154が開始する場所を定義し、そして、最終的には、誰かが、アリスのトランザクション152jを含むプール154の一部のパズルを解く)。一旦、新しいトランザクション152jを含むプール154についてプルーフオブワークが行われると、それはブロックチェーン150内のブロック151のうち1つの不変の一部となる。各トランザクション152は、以前のトランザクションへ戻るポインタを含むので、トランザクションの順序も、また、不変的に記録される。
【0039】
UTXOベースのモデル
図2は、トランザクションプロトコルの例を示している。このことは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つ以上のトランザクション152を含んでいる)。以下は、出力ベースのプロトコルまたは「UTXO」ベースのプロトコルを参照して説明されている。しかしながら、このことは、全ての可能な実施形態に限定されるものではない。
【0040】
UTXOベースのモデルにおいて、各トランザクション(「Tx」)152は、1つ以上の入力202および1つ以上の出力203を含むデータ構造を備える。各出力203は、未支払(unspent)のトランザクション出力(UTXO)を含んでよく、それは、別の新しいトランザクションの入力202のソースとして使用することができる(UTXOが既に償還されてはいない場合)。UTXOは、デジタル資産の総計(価値のストア)を指定する。また、他の情報の中でも、それが来たトランザクションのトランザクションIDを含んでもよい。トランザクションデータ構造は、また、ヘッダ201を含んでもよく、入力フィールド202および出力フィールド203のサイズの指示(indicator)を含み得る。ヘッダ201は、また、トランザクションのIDを含み得る。実施形態において、トランザクションIDは、トランザクションデータ(トランザクションID自体を除く)のハッシュであり、マイナ104Mに提出された生の(raw)トランザクション152のヘッダ201に保管される。
【0041】
アリス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を依然として有する、任意の先行する(つまり、先立つ(antecedent))トランザクションに戻って指し示すことができる。
【0042】
先行トランザクションTx0は、アリスがその新しいトランザクションTx1を作成する時点、または、少なくとも彼女がそれをネットワーク106に送信する時点で、既に検証され、ブロックチェーン150に含まれていてよい。それは、その時点で既にブロック151のうち1つに含まれていてよい。または、プール154内でまだ待機していてもよく、その場合には、そのうちに含まれることになる。代替的に、Tx0およびTx1が作成されて、一緒にネットワーク102に送信され得るし、または、ノードプロトコルが「孤立(“orphan”)」トランザクションのバッファリングを許可する場合、Tx0はTx1の後でさえ送信され得る。用語「先行(“preceding”)」および「後続(“subsequent”)」は、ここにおいてトランザクションのシーケンスのコンテキストにおいて使用されるように、トランザクションで指定されたトランザクションポインタによって定義されるシーケンスにおけるトランザクションの順序を指す(どのトランザクションポインタが他のトランザクションに戻って指し示すか、など)。それらは、「前任者(“predecessor”)」と「後任者(“successor”)」、「前者(“antecedent”)」「後者(“descent”)」、「親(“parent”)」と「子(“child”)」、等と均等に置き換えることができる。このことは、必ずしもそれらが生成され、ネットワーク106に送信され、または、任意の所与のノード104に到着する順序を意味するものではない。それにもかかわらず、先行トランザクション(前任者トランザクションまたは「親」)を指し示す後続トランザクション(後任者トランザクションまたは「子」)は、親トランザクションが検証されるまで、および、検証されなければ、検証されない。親の前にノード104に到着した子は、孤立(orphan)とみなされる。それは、ノードプロトコル及び/又はマイナの行動に応じて、破棄され、または、親を待つために一定時間、破棄またはバッファリングされ得る。
【0043】
先行トランザクションTx0の1つ以上の出力203のうち1つは、ここにおいてUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の総計を指定する値、および、後続トランザクションが検証されるため、そして、従って、UTXOが成功裡に償還されるために、後続トランザクションの入力202においてアンロッキングスクリプトによって満足されねばならない条件を定義するロッキングスクリプトを含む。典型的に、ロッキングスクリプトは、特定の当事者(それが含まれているトランザクションの受益者(beneficiary))に対して総計をロックする。すなわち、ロッキングスクリプトは、アンロッキング条件を定義し、典型的に、後続トランザクションの入力におけるアンロッキングスクリプトは、先行トランザクションがロックされる当事者の暗号署名を含む、という条件を含む。
【0044】
ロッキングスクリプト(別名、scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そうした言語の特定の例は、「スクリプト(“Script”)」(キャピタルS)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を支払うために必要な情報、例えば、アリスの署名の必要条件、を指定する。アンロッキングスクリプトがトランザクションの出力に現れる。アンロッキングスクリプト(別名、scriptSig)は、ロッキングスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、それは、ボブの署名を含んでよい。アンロッキングスクリプトは、トランザクションの入力202に現れる。
【0045】
図示の例において、Tx0の出力203のUTXO0は、ロッキングスクリプト[Checksig PA]を含み、このことは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続トランザクションが有効であるために)、アリスの署名Sig PAを必要とする。[Checksig PA]は、アリスの公開鍵と秘密鍵のペアからの公開鍵PAを含む。Tx1の入力202は、Tx1に戻って指し示すポインタを含む(例えば、そのトランザクションIDである、TxID0を用い、それは実施形態においてトランザクションTx0全体のハッシュである)。Tx1の入力202は、Tx0の任意の他の可能な出力の中でそれを識別するために、Tx0内のUTXO0を識別するインデックス(index)を含む。Tx1の入力202は、さらに、鍵ペアからのアリスの秘密鍵をデータの既定の部分に適用することによって作成された、アリスの暗号署名を含むアンロッキングスクリプト<Sig PA>を含む(ときどき、暗号では「メッセージ(“message”)」と呼ばれる)。有効な署名を提供するためにアリスが署名する必要があるデータ(または「メッセージ」)は、ロッキングスクリプト、ノードプロトコル、またはこれらの組み合わせによって定義される。
【0046】
新しいトランザクションTx1がノード104に到着すると、ノードは、ノードプロトコルを適用する。このことは、ロッキングスクリプトとアンロッキングスクリプトを一緒に実行して、アンロッキングスクリプトがロッキングスクリプト内で定義されている条件を満たしているか否かをチェックすることを含む(ここで、この条件は1つ以上の基準を含み得る)。実施形態において、このことは、2つのスクリプトを連結することを含む。
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、そして、「<...>」はデータをスタック上に置くことを意味し、そして、「[...]」はアンロッキングスクリプト(この例においてスタックベースの言語)で構成される関数である。同様に、スクリプトは、スクリプトを連結するのではなく、共通のスタックで、次々と実行されてよい。いずれにせよ、一緒に実行する場合、スクリプトは、Tx0の出力のロッキングスクリプトに含まれるように、アリスの公開鍵PAを使用して、Tx1の入力のロッキングスクリプトが、データの期待される部分に署名するアリスの署名を含むことを認証する。この認証を実行するためには、データ自体の期待される部分(「メッセージ(“message”)」)も、また、Tx0順序に含める必要がある。実施形態において、署名されたデータは、Tx0の全体を含む(よって、別個の要素は、クリアであるデータ(data in the clear)の署名された部分を指定することに含める必要がある。それが、既に本質的に存在するからである)。
【0047】
公開-秘密(public-private)暗号による認証の詳細は、当業者にとって周知であろう。基本的に、アリスが秘密鍵を使用して、暗号化することによってメッセージに署名した場合、アリスの公開鍵およびクリアであるメッセージ(暗号化されていないメッセージ)が与えられ、ノード104といった別のエンティティは、そのメッセージの暗号化されたバージョンがアリスによって署名されていなければならないことを認証することができる。署名することは、典型的に、メッセージをハッシュすること、ハッシュに署名すること、および、署名としてメッセージのクリアなバージョンにこれをタグ付けすることを含み、従って、公開鍵の任意の所有者が署名を認証することを可能にしている。
【0048】
Tx1のアンロッキングスクリプトが、Tx0のロッキングスクリプトで指定された1つ以上の条件を満たす場合(例で示されるように、アリスの署名がTx1で提供され、かつ、認証されている場合)、ノード104は、Tx1が有効であるとみなす。マイニングノード104Mである場合、このことは、プルーフオブワークを待っているトランザクションプール154に追加されることを意味する。移転ノード104Fである場合、それは、トランザクションTx1をネットワーク106内の1つ以上の他のノード104に移転し、その結果、ネットワーク全体に伝搬されることになる。一旦、Tx1が検証され、かつ、ブロックチェーン150に含まれると、このことは、支払としてTx0からUTXO0を定義する。Tx1は、未払いのトランザクション出力203を支払う場合にだけ有効であることに留意すること。別のトランザクション152によって既に支払われた出力を支払おうとする場合、Tx1は、たとえ他の全ての条件が満たされていても無効となる。従って、ノード104は、また、先行トランザクションTx0において参照されたUTXOが既に使用されているか否か(既に別の有効なトランザクションへの有効な入力を形成しているか否か)もチェックする必要がある。これが、ブロックチェーン150にとってトランザクション152に定義された順序を課すことが重要である理由の1つである。実際に、所与のノード104は、トランザクション152が支払われたUTXO 203をマーキングしている別個のデータベースを維持することができるが、最終的には、UTXOが支払われたか否かを定義するものは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力が既に形成されているか否かである。
【0049】
UTXOベースのトランザクションモデルでは、所与のUTXOを全体として使用する必要があることに注意すること。UTXOで定義されている総計のうち、別の小部分(fraction)が支払われている一方で、小部分を「残しておく(“leave behind”)」ことはできない。しかしながら、UTXOの総計は、次のトランザクションの複数の出力に分割できる。例えば、Tx0内のUTXO0で定義された総計は、Tx1内の複数のUTXOに分割できる。従って、アリスがボブにUTXO0で定義されている総計の全てを与えることを望まない場合、彼女は、残りの量を使って、Tx1の第2出力で自分自身にお釣り(change)を与え、または、別の当事者に支払うことができる。
【0050】
実際には、アリスは、また、たいてい、勝ったマイナのための報酬(fee)を含める必要がある。なぜなら、今日では、ジェネレーショントランザクションの報酬だけでは、典型的に、マイニングを動機付けるために十分ではないからである。アリスがマイナのための報酬を含めない場合、Tx0は、マイナのノード104Mによって拒否される可能性が高く、従って、技術的には有効であるが、それは、未だに伝播されず、そして、ブロックチェーン150に含まれている(マイナプロトコルは、マイナが望まない場合、トランザクション152を受け入れるよう強制しない)。いくつかのプロトコルにおいて、マイニング報酬は、独自の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、入力202によって示される全ての総計と、所与のトランザクション152の出力203で指定される全ての総計との間の差が、勝ったマイナ104に自動的に与えられる。例えば、UTXO0に対するポインタがTx1への唯一の入力であり、かつ、Tx1は1つの出力UTXO1しか持っていないとする。UTXO0で指定されたデジタル資産の総計がUTXO1で指定された総計より多い場合、その差は、自動的に勝ったマイナ104Mに行く。代替的または追加的に、しかしながら、トランザクション152のUTXO 203のうちの独自のものにおいてマイナ報酬が明示的に指定され得ることは、必ずしも除外されない。
【0051】
また、所与のトランザクション152の全ての出力203で指定された全ての総計が、その全ての入力202で指定された全ての総計よりも大きい場合、このことは、ほとんどのトランザクションモデルにおける無効性の別の根拠であることに留意すること。従って、そうしたトランザクションは、伝搬され、または、ブロック151にマイニングされることはない。
【0052】
アリスとボブのデジタル資産は、ブロックチェーン150内の任意の場所の任意のトランザクション152において、ロックされている未支払のUTXOで構成されている。従って、典型的に、所与の当事者103の資産は、ブロックチェーン150の全体を通して、様々なトランザクション152のUTXO全体に分散されている。ブロックチェーン150内のどこにも、所与の当事者103の全ての残高(balance)を定義する1つの数字は保管されていない。各当事者に対してロックされており、かつ、別の前向き(onward)トランザクションでまだ支払われていない全ての様々なUTXOの値を一緒に照合することは、クライアントアプリケーション105におけるウォレット機能の役割である。このことは、任意のストレージノード104S、例えば、各当事者のコンピュータ機器102に最も近く、または、最も良好に接続されているストレージノード104S、に保管されたブロックチェーン150のコピーをクエリすることによって行うことができる。
【0053】
スクリプトコードは、しばしば、概略的に表現されることに注意すること(すなわち、正確な言語ではない)。例えば、[Checksig PA]を、[Checksig PA]=OP_DUP OP_HASH160<H(Pa)>OP_EQUALVERIFY OP_CHECKSIGを意味するように書き込むことがあり得る。「OP_...」は、スクリプト言語の特定のオペコードを指している。OP_CHECKSIG(「Checksig」とも呼ばれるもの)は、2つの入力(署名と公開鍵)を取り込み、そして、楕円曲線デジタル署名アルゴリズム(ECDSA)を使用して署名の妥当性を検証する、Scriptオペコードである。ランタイムでは、あらゆる署名(「sig」)の発生はスクリプトから削除されるが、ハッシュパズルといった、追加的な要件は、「sig」入力によって検証されるトランザクション内に残る。別の例として、OP_RETURNは、トランザクション内にメタデータを保管することができる、トランザクションの支払不能な出力を生成するためのスクリプト言語のオペコードであり、そして、それによってメタデータをブロックチェーン150に不変に記録することができる。例えば、メタデータは、ブロックチェーンに保管することが望ましい文書を含み得る。
【0054】
署名PAは、デジタル署名である。実施形態において、このことは、楕円曲線secp256K1を使用するECDSAに基づくものである。デジタル署名は、データの特定なピース(piece)に署名する。実施形態において、所与のトランザクションについて、署名は、トランザクション入力の一部、および、トランザクション出力の全部または一部に署名する。署名する出力のうち特定の部分は、SIGHASHフラグに依存している。SIGHASHフラグは、署名の最後に含まれる4バイトのコードであり、どの出力が署名されるか(従って、署名の時点で固定されること)を選択する。
【0055】
ロッキングスクリプトは、それぞれのトランザクションがロックされている当事者の公開鍵を含んでいるという事実を参照して、ときどき、「scriptPubKey」と呼ばれる。アンロッキングスクリプトは、対応する署名を提供するという事実を参照して、ときどき、「scriptSig」と呼ばれる。しかしながら、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的に、スクリプト言語は、任意の1つ以上の条件を定義するために使用され得る。従って、より一般的な用語として「ロッキングスクリプト」および「アンロッキングスクリプト」が望ましい。
【0056】
オプションのサイドチャネル
図3は、ブロックチェーン150を実装するためのさらなるシステム100を示している。システム100は、追加の通信機能が含まれることを除いて、
図1に関して説明したものと実質的に同じである。アリスおよびボブのコンピュータ機器102a、120bそれぞれにおけるクライアントアプリケーションは、追加的な通信機能を備えている。すなわち、アリス103aは、(当事者または第三者いずれかの勧誘で)ボブ103bと別個のサイドチャネル301を確立することを可能にする。サイドチャネル301は、P2Pネットワークとは別にデータの交換を可能にする。そうした伝達は、ときどき、「オフチェーン(“off-chain”)」と呼ばれる。例えば、このことは、当事者の一方がネットワーク106にそれをブロードキャストすることを選択するまで、ネットワークP2P 106上に公表されることなく、または、チェーン150上に進むことなく、アリスとボブとの間でトランザクション152を交換するために使用され得る。代替的または追加的に、サイドチャネル301は、キー、交渉される総計(amount)または条件(terms)、データコンテンツ、等といった、他のトランザクション関連データを交換するために使用することができる。
【0057】
サイドチャネル301は、P2Pオーバーレイネットワーク106と同じパケット交換ネットワーク101を介して確立されて得る。代替的または追加的に、サイドチャネル301は、移動セルラネットワークといった異なるネットワーク、またはローカル無線ネットワークといったローカルエリアネットワーク、またはアリスとボブの機器1021、102bとの間の直接的な有線又は無線リンクを介して確立され得る。一般的に、ここにおけるいずれかの箇所で言及されるサイドチャネル301は、データ「オフチェーン(“off-chain”)」、すなわち、P2Pオーバーレイネットワーク106とは別に交換するための1つ以上のネットワーク技術または通信媒体を介する任意の1つ以上のリンクを含んでもよい。2つ以上のリンクが使用される場合、全体としてのオフチェーンリンクのバンドルまたはコレクションは、サイドチャネル301として参照され得る。従って、アリスとボブがサイドチャネル301を介して特定の情報またはデータなどを交換すると言われる場合に、このことは、これらのデータの全てが必ずしも正確に同じリンクまたは同じタイプのネットワークを介して送信されなければならないことを意味しないことに注意すること。
【0058】
公開鍵暗号
公開鍵暗号それ自体はよく知られており、かくして、ここでは簡単に説明されるだけである。公開鍵暗号は、メッセージ(例えば、多くの異なるブロックチェーンアーキテクチャにおけるトランザクション)を保護するための基礎として使用される。公開鍵暗号の使用は、公開鍵暗号化とデジタル署名スキームを含んでいる。公開鍵暗号は、所定の関数は計算が容易であるが、いくつかの特別な知識なしではリバース(reverse)することが困難であるという原則に基づいている。計算が容易であることは、所与の入力(または、入力のセット)について関数の結果を合理的なタイムフレーム(time frame)で計算することが計算上実行可能であることを意味し、そして、リバースすることが困難であることは、入力の知識なしに、その結果からその入力(または、複数の入力)を推測することが計算上実行不可能であることを意味する。
【0059】
公開鍵暗号のコンテキストにおいて、鍵の公開鍵-秘密鍵のペアは、公開鍵(誰でも自由に利用可能にすることができる)、および、対応する秘密鍵(特定のエンティティまたはグループのみに知られているという意味で秘密であると仮定される)を意味する。
【0060】
公開鍵暗号化コンテキストにおいて、暗号化は、公開鍵を使用して実行され、一方、復号は、対応する秘密鍵を使用して実行される。デジタル署名コンテキストにおいて、署名生成は、秘密鍵を使用して実行され、一方、署名検証は、対応する公開鍵を使用して実行される。
【0061】
ブロックチェーンのコンテキストにおいては、暗号技術的にトランザクションに署名し、かつ、トランザクション署名を検証するための基礎として、公開鍵暗号に基づくデジタル署名が使用される。
【0062】
楕円曲線暗号(ECC)は、楕円曲線の数学的性質を利用する公開鍵暗号の一つの形態である。「楕円曲線デジタル署名アルゴリズム(“Elliptic Curve Digital Signature Algorithm”)」(ECDSA)は、デジタル署名生成および検証のための基礎としてECCを使用するデジタル署名スキームのクラスを指す。
【0063】
ECCのコンテキストにおいて、加算、減算、および乗算の演算は、それぞれに、ここにおいて「+」と示される楕円曲線点加算、ここにおいて「-」と示される楕円曲線点減算、および、ここにおいて「・」と示される楕円曲線スカラ乗算である。加法および減法の演算は、それぞれ楕円曲線上の2つの点に対して適用され、そして、楕円曲線上の第3点を返す。しかしながら、乗法の演算は、楕円曲線上のスカラ及び単一点に対して適用され、楕円曲線上の第2点を返す。楕円曲線の計算(arithmetic)は、秘密の値を不明瞭にするユニークな能力を提供し、そして、多くの現代の暗号システムの基礎を形成している。特に、有限体(finite field)上の楕円曲線点の逆(reversing)スカラ乗算は扱いにくい(intractable)問題である(計算的に実行不可能である)。
【0064】
秘密鍵Vは、整数(integer)の形式をとり、そして、対応する公開鍵Pは「生成点(“generator point”)」Gから導出される楕円曲線上の点である。それは、また、以下のように、楕円曲線上の点である。
P=V・G=G+ ・・・ +G (V回の加算)
ここで、「・」は、楕円曲線パラメータで定義される、楕円曲線における楕円曲線スカラ乗算を示す。十分に大きいVについて、実際にVの楕円曲線加算を行ってPを導出することは困難であり、すなわち、計算的に実行不可能である。しかしながら、Vが既知であれば、楕円曲線演算の代数的性質を利用することによって、より効率的にPを計算することができる。Pの計算に使用できる効率的なアルゴリズムの一つの例は、「二重加算(double and add)」アルゴリズムであり、-これは、Vが既知の場合にのみ実装可能である。
【0065】
逆に、Vが知られていない場合は、たとえGとPの両方が知られていても、計算的に可能な導出方法(すなわち、スカラ乗算をリバースすること)は存在しない(これが、いわゆる「離散対数問題(“discrete-logarithm problem”)」である)。攻撃者(attacker)は、Gから開始して、Pまで楕円曲線点加算を繰り返し実行することによって、「ブルートフォース(“brute force”)」Pを試みることができる。その時点で彼は、Vが、彼が実行しなければならなかった楕円曲線点加算の数であることを知るだろう。しかし、それは計算上不可能であることが分かる。従って、Vは、上記の意味でトラップドアの要件を満たしている。ECCにおいて、公開鍵P、生成鍵G、および楕円曲線は、公開されており、かつ、既知であると仮定されるが、一方で、秘密鍵Vは、秘密である。
【0066】
ブロックチェーンシステムにおいて、ユーザまたは他のエンティティは、典型的には、それらのアイデンティティを証明するために使用される秘密鍵Vを保持しており、対応する公開鍵Pは、次のように計算される。
P=V・G
【0067】
秘密鍵Vは、ECDSAを使用して1つのデータ(a piece of data)m(「メッセージ」)の署名に使用することができる。ECDSAのさらなる詳細は、例えば、以下に記載されており、ここにおいて、その全体が、参照により、組み込まれている。“RFC 6979-Deterministic Usage of the Digital Signature Algorithm(DSA) and Elliptic Curve Digital Signature Algorithm(ECDSA)”Tools.ietf.org、2019である。
【0068】
暗号的にリンクされたアイデンティティ
これから、2人の当事者を暗号的にリンクするための方法を説明している
図4を参照する。以下は、第1当事者(例えば、アリス)103aによって実行される動作(action)に関して説明されるが、第2当事者(例えば、ボブ)103bは、同じ動作の一部または全部を実行すし得ることが理解されるだろう。第1当事者と第2当事者は、
図1から
図3を参照して説明したものと同一の第1当事者と第2当事者であってよい。代替的に、第1当事者及び/又は第2当事者は、非ブロックチェーン・ユーザであってよい。一般的に、各当事者は、各当事者の動作を実行するように構成された各コンピュータ機器を操作する。
【0069】
この2人の当事者は、公開鍵暗号の暗号化特性を利用することによって、リンクされ得る。以下は、楕円曲線暗号に関して説明されるが、この教示は、一般的に、公開鍵暗号の他の形式にも適用されることが理解されるだろう。楕円曲線計算は、2人の当事者のアイデンティティを、彼らの公開鍵、および、共有秘密鍵から生成された公開鍵のみを使用して、確実にリンクするめに使用することができる。
図4に示されるように、アリス103aとボブ103bは、それぞれの公開鍵と秘密鍵のペアを、それぞれに処理する。アリス103aは、第1秘密鍵S
A0、および、対応する第1公開鍵P
A0を有している。同様に、ボブは、第1秘密鍵S
B0、および、対応する第1公開鍵P
B0を有している。アリス103aとボブ103bは、また、共有秘密鍵S
AB0、および、対応する第1公開鍵P
AB0も確立する。共有秘密鍵は、
図3に示されるように、サイドチャネル301を使用して確立され得る。名前によって暗示されるように、公開鍵は、いずれかの当事者及び/又は外部の第三者によってアクセス可能であると仮定されている。対照的に、秘密鍵は、秘密鍵の所有者に秘密に保たれると仮定されている。
【0070】
共有秘密鍵は、ディフィー・ヘルマン鍵交換(Diffie-Helman key-exchange)、または、その拡張を使用して確立することができる。共有秘密鍵を確立するための1つの技法は、各当事者について、自身の秘密鍵(第1秘密鍵であっても、なくてもよい)、および、他の当事者の公開鍵(第1公開鍵であっても、なくてもよい)を使用して、共有秘密鍵を生成することである。例えば、アリス103aは、彼女の秘密鍵SAとボブの公開鍵PBを使用し、そして、同様に、ボブは、彼の秘密鍵SBとアリスの公開鍵PAを、以下のように使用する。
SAB0=[SA SB G]x=[SA PB]x=[SB PA]x
ここで、[]xは、楕円曲線点のx座標を示している。
【0071】
アリス103aだけが彼女の秘密鍵SAを知っており、かつ、ボブ103bだけが彼の秘密鍵SBを知っているとすると、アリス103aとボブ103bだけが、SAB0を計算できる。共有秘密鍵SAB0は、機密情報、すなわち秘密鍵、を漏らすこと(divulging)なく確立され得る。
【0072】
以下の表は、アリス103aとボブ103bが所有する公開鍵と秘密鍵を示している。この例において、公開鍵は、楕円曲線乗算、P=V・G、によって秘密鍵に関連付けられる。ここで、Gは、楕円曲線生成点である。
【表1】
【0073】
アリス103aは、次いで、彼女の第1秘密鍵SA0と共有秘密鍵SAB0の両方を使用して、ここにおいてアイデンティティリンク鍵(identity-linked key)と呼ばれる、第2秘密鍵SA1を生成することができる。例えば、アリスのアイデンティティリンク鍵は、SA1=SA0+SAB0として生成される。アリス103aだけがSA0を知っているので、アリスだけがSA1とPA1を生成することができる。
【0074】
しかしながら、公開鍵PA0とPAB0は公知であるため、公開鍵は、誰でも検証することができる。次の式は、どのようにPA1が、彼女の秘密鍵を使用してアリス103aによって、および、公知の鍵を使用して別の当事者によって導出され得るかについて一つの例を示している。
PA1=SA1・G
PA1=(SA0+SAB0)・G
PA1=(SA0・G)+(SAB0・G)
PA1=PA0+PAB0
【0075】
同様に、ボブ103bは、第1秘密鍵SB0と共有秘密鍵SAB0の両方を使用して、アイデンティティリンク鍵SB1を生成することができる。例えば、ボブのアイデンティティリンク鍵は、SB1=SA0+SB0として生成される。ボブだけがSB0を知っているので、ボブだけがSB1とPB1を生成できる。SA0とSAB0のより複雑な方程式を用いてSA1を生成することができる。同様に、SB0とSAB0のより複雑な方程式を用いて、SB1を生成することができる。
【0076】
各当事者は、共有秘密SAB0を使用して、他方の当事者のアイデンティティを検証することができる。アリス103aとボブ103bだけが共有される秘密SAB0を知っているので、アリスが、PAB0を用いて署名されたメッセージを受信した場合、アリスは、そのメッセージがボブからのものであることを確認できる。同様に、ボブ103bが、PAB0を用いて署名されたメッセージを受信した場合、アリスからのメッセージであることを確認できる。対応する秘密鍵は、公開鍵を用いてメッセージに署名するために必要とされることを思い出す。
【0077】
セキュリティ上の理由から、アイデンティティリンク鍵は1度だけ使用されるべきである。アイデンティティリンク鍵を更新するために、アリス103aとボブ103bは、更新された共有秘密鍵を確立しなければならない。アリス103aとボブ103bは、更新された共有秘密鍵を確立するために、互いに通信することができる。代替的に、アリス103aとボブ103bは、最初の(initial)共有秘密鍵に対して同じ一方向関数(例えば、ハッシュ関数)を、それぞれ適用することができる。一方向関数を事前決定された回数(例えば、1回)だけ適用することは、更新された共有秘密鍵を生成する。一方向関数を、第1に(first)更新された共有秘密鍵に、事前決定された回数(例えば、1回)だけ適用することは、第2に更新された秘密鍵を生成する。この方法により、アリス103aとボブ103bが、計算効率の良い技術を使用して、低電力デバイス上で更新された共有秘密鍵を生成することができる。この方法は、また、共有秘密鍵の階層(hierarchy)を生成する。ここで、各更新された秘密鍵は、最初の共有秘密鍵へ戻ってリンクされ得る。
【0078】
共有される公開鍵-秘密鍵のペアのシーケンスを生成する1つの方法は、最初の共有される秘密を繰り返しハッシュすることによるものである。
PAB0=SAB0・G
PAB1=h(SAB0)・G
PAB2=h2(SAB0)・G
|
PABi=hi(SAB0)・G
【0079】
更新された共有鍵のシーケンスを生成する他の方法は、以下のとおりである。
1. Pi=[hi(S0)+hi(PA-1-PB-1)]・G
2. Pi=h(Si-1|Si-2)・G
【0080】
各更新された共有秘密鍵は、それぞれ更新されたアイデンティティリンク鍵を生成するために使用することができる。例えば、アリス103aとボブ103bのアイデンティティリンク鍵は、以下のように更新することができる。
PA(i+1)=PABi+PA0
PB(i+1)=PABi+PB0
【0081】
これらのキーは更新されるので、各当事者は、PA(i+1)またはPB(i+1)のみを知っており、他の当事者のアイデンティティを認識していない。しかしながら、一方の当事者(例えば、アリス103a)のアイデンティティは、必要に応じて、署名チャレンジ(signature challenge)を介して、任意の段階でリンクすることができる。
【0082】
アリス103aは、メッセージに署名するために彼女のアイデンティティリンク鍵PAiのいずれかを使用し、そして、そのメッセージをボブ103bまたは第三者に送信することができる。ブロックチェーンのコンテキストにおいて、アリス103aは、ブロックチェーントランザクションの一部または全部に署名するために、彼女のアイデンティティリンク鍵の1つを使用することができる。例えば、アリス103aは、トランザクションの入力に署名することができる。アリス103aは、次いで、そのトランザクションを、ボブ、第三者、またはブロックチェーンネットワークの1つ以上のノードに送信することができ、そうして、トランザクションはブロックチェーン150にマイニングされ得る。アイデンティティリンク鍵によって、アリス103aは、ブロックチェーントランザクションの任意の部分に署名することができる。さらに、アイデンティティリンク鍵によって、1人以上の当事者は、トランザクションの一部に署名することができる。例えば、アリス103aは、トランザクション(の一部)に署名し、次いで、そのトランザクションをボブ103bに送信することができ、ボブは、また、同じトランザクション(の一部)に署名し、そして、次いで、アリス103aまたはボブは、トランザクションをブロックチェーンネットワークに送信することができる。
【0083】
暗号技術的にリンクされた当事者の検証
図5は、第三者(チャーリー)103cが、第1当事者と第2当事者が暗号的にリンクされているかどうかを検証するために使用できる方法を示している。
図5には示されていないが、チャーリーは、1つ以上のプロセッサ、例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、及び/又は、フィールドプログラマブルゲートアレイ(FPGA)を含む、処理装置を備えるコンピュータ機器を含んでいる。コンピュータ機器は、また、メモリ、すなわち、非一時的コンピュータ読取り可能な媒体またはメディアの形態のコンピュータ読取り可能なストレージ装置を備える。メモリは、1つ以上のメモリ媒体、例えば、ハードディスクといった磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、またはEEPROMといった電子媒体、及び/又は、光ディスクドライブといった光媒体、を使用する1つ以上のメモリユニットを含み得る。
【0084】
図5に示されるように、アリス103aは、第1秘密鍵S
A0、共有秘密鍵S
AB0、および第2秘密鍵(すなわち、彼女のアイデンティティリンク鍵)S
A1を所有している。同様に、ボブ103bは、第1秘密鍵S
B0、共有秘密鍵S
AB0、および第2秘密鍵(すなわち、彼女のアイデンティティリンク鍵)S
B1を所有している。この例では、アリス103aまたはボブ103bの1人は、信頼される当事者であり得る。アリス103aが信頼される当事者である場合、チャーリー103cは、ボブのアイデンティティを信頼するために、アリスのアイデンティティにおける彼の信頼(trust)を使用することができる。これを行うために、チャーリー103cは、ボブがアリスとリンクされたアイデンティティリンク鍵を持っていることを検証することができる。チャーリー103cは、共有秘密鍵におけるアイデンティティリンク鍵の依存性を使用して、ボブ103bに、アリス103aとの彼の関係を証明させることができる。チャーリー103cは、ボブの第1公開鍵-秘密鍵のペアを使用して署名されたボブ103bからのメッセージを取得する。チャーリー103cは、また、ボブ103bから、彼のアイデンティティリンク公開鍵-秘密鍵のペアを用いて署名されたメッセージを取得する。ボブ103bは、チャーリー103cに送信するメッセージを選択し得る。代替的に、チャーリー103cは、ボブ103bに、署名するように、メッセージ(例えば、チャレンジ)を送信し得る。チャーリー103cは、また、共有公開鍵-秘密鍵のペアを用いて署名されたアリス103aからのメッセージも取得する。再び、アリス103aは、ボブ103bとメッセージにおいて決定することによって、メッセージを送信することができ、または、チャーリー103cは、アリス103aにメッセージを送信することができる。チャーリー103cは、最初に、ボブ103bまたはアリス103aからメッセージを取得することができる。一旦チャーリー103cが署名されたメッセージを持つと、チャーリー103cは、ボブのアイデンティティリンク鍵が共有秘密鍵に基づいて生成されたことを検証する。チャーリー103cは、ボブの第1公開鍵と共有公開鍵に基づいて、アイデンティティリンク公開鍵が生成されたか否かをチェックして決定することによって、これを検証する、例えば、P
B1=P
AB0+P
B0。
【0085】
チャーリーは、例えば、
図3に示されるようなサイドチャネル301を使用して、インターネットを介してアリス及び/又はボブから署名されたメッセージを取得することができる。
【0086】
一旦検証されると、このことは、アリス103aとボブ103bとの間の忘れられない(unforgettable)接続を証明する。チャーリー103cは、また、アリスとボブによって生成された署名が有効な署名であることを検証するために、チェックを実行してもよい。さらに、チャーリー103cは、1つ以上のブロックチェーントランザクションを使用して、アリス103aとボブ103bに、メッセージを送信させることができる。例えば、署名されたメッセージは、ブロックチェーントランザクションの出力に含まれ得る。チャーリー103cは、次いで、彼のトランザクションへの入力として、その出力を有するトランザクションを作成することができる。入力は、アリス103aの公開鍵とボブの公開鍵との関係を検証するためのスクリプトを含み得る。一旦検証されると、その関係は、ブロックチェーン150上に不変に保管される。
【0087】
上記の技法は、アリス103aとボブ103bを参照して説明されてきたが、一般的に、第1当事者および第2当事者は、同一のエンティティ(例えば、同一の個人、会社、組織、等)であり得る。例えば、第1当事者は、自分の(信頼される)アイデンティティを他のアイデンティティと、例えば、自分の公開鍵の1つを自分だけが知っている秘密とリンクすることによって、暗号的に結びつけることを望み得る。同様に、各当事者の第1秘密鍵は、同じ公開鍵暗号システムを利用する必要はない。例えば、アリス103aは楕円曲線暗号を利用し、一方で、ボブはRSA暗号化またはDSA暗号化を利用することができる。同様に、アリス及び/又はボブの第1秘密鍵と共有秘密鍵は、異なる暗号システムを利用することができる。いくつかの例において、異なる暗号システムが使用される場合に、秘密鍵の少なくとも1つは、他のプライベートスキーム(private scheme)を反映するために、パディングまたは切り捨てを必要とすることがある。
【0088】
例えば、本人確認(KYC)システムを十分に厳密に知っている政府または銀行といった非ブロックチェーンシステムを考えてみる。既知のユーザ、例えば、アリス103aは、公開鍵PA0を介して彼女のアイデンティティに接続された秘密鍵(SA0)を有している。このことは、銀行または政府によって検証され、そして、公的に証明され得る。アリス103aは、上述の方法を使用して、彼女のブロックチェーンアイデンティティ(SB0,PB0)をこのオフチェーンシステムに確かにリンクすることができ、そして、彼女のアイデンティティリンク鍵を、上記のようにPB1=(SB0+SAB0)・Gとして計算することによって、全てが自身のオフチェーンアイデンティティにリンクすることができる後続の鍵または鍵の階層を導出する。これは、次いで、彼女のブロックチェーンアイデンティティとして使用することができ、そして、PAB0を使用してPA0に確実にリンクすることができる。このことは、KYC機能(features)を彼女のブロックチェーンアイデンティティに与えるだけでなく、政府および銀行との彼女のオフチェーンアカウントにブロックチェーンの機能(capabilities)を与えることにもなる。すなわち、彼女は、ブロックチェーンシステムに参加するためにアイデンティティリンク鍵を使用することができ、そして、このことは、銀行または政府がブロックチェーン150に公開することなく、彼女のオフチェーンアカウントを更新する(例えば、クレジットまたはデビット)ために使用することができる。
【0089】
アクセスチェーン
ブロックチェーンのデータストレージ機能を使用することにより、当事者は、カプセル化データ(encapsulating data)の署名として機能するように、本質的な暗号署名スキームを利用することができる。しかしながら、たいてい、ブロックチェーン150の根底にあるプロトコルは固定されており、従って、特定のアプリケーションに合わせることはできない。このことは、有効な秘密鍵を持つことを当事者に要求し、既にシステムの一部であるものに使用を制限している。同様に、当事者の秘密鍵を暴露(exposing)することなく、署名する能力を委任する方法は存在しない。本開示は、ブロックチェーントランザクション内に含めることができる第2層の署名プロトコルを提供し、複数の当事者を単一のトランザクションに含めることができる。
【0090】
一方向関数(例えば、暗号ハッシュ関数)は、入力を不明瞭にする効率的で、決定論的な方法を提供し、その結果、出力が与えられると、入力を見つけることが不可能である。ハッシュ関数(または、一般的な一方向関数)は、当事者に供給され、当該当事者によって償還され、そして、異なる当事者間で移転され得る、「トークン(“token”)」を生成するために使用することができる。トークンは、アクセスチェーン(access chain)と呼ばれるものを形成するように、シード値の繰り返しハッシュを通じて生成することができる。
【0091】
事前に合意された数(n)の、ユーザにアクセスするためにトークンを必要とするイベントを使用することは、ハッシュ関数(h)を秘密鍵(K)に対してn回適用する(hn(K))。この値は、次いで、ブロックチェーン150において公開することによって、例えばサービスプロバイダに、登録される。当事者は、次に、ブロックチェーン150上に登録された値のプレイメージセンサ(pre-image)を提供することによって、トークンを償還することができ、それは、新たな登録された値になる。例えば、トークンtn=hn(K)がブロックチェーン150上に現在公開されている場合、tn-1=hn-1(K)を供給することによってトークンは償還され得る。
【0092】
任意の時点で、トークン所有者は、例えば、意志のある買い手(willing buyer)を見つけ、かつ、トークンの価格について合意することによって、残りのトークンを別の当事者に移転することができる。アリス103aが現在登録されているトークンの所有者である場合、アリス103aは、彼女のアイデンティティを証明するために、新しい当事者の新たに生成され、登録されたアクセスチェーンの値と共に、サービスプロバイダに対して彼女の最新のプレイメージを提供する。
【0093】
これらのトークンは、ルート秘密鍵S0とチェーンti内の次のプレイメージの合計としての各償還を伴う新しい秘密鍵Siを生成することによって(Si=S0+ti)、証明可能に公開鍵にリンクすることもできる。
【0094】
トークンを提供することに加えて、アクセスチェーンは、事前決定された数のメッセージについて署名をリンクする方法を提供する。これらの署名は、トランザクション全体ではなく、データの塊り(chunk)に対して直接的に適用できる。例えば、長さnのハッシュチェーンを考える。つまり、以下のようである。
tn=hn(K)
tn-1=hn-1(K)
|
ti=hi(K)
|
t1=h(K)
t0=h(K)
【0095】
そうしたチェーンにおいて、tn=h(tn-1)は、ハッシュのチェーンを形成する。最終値tnは、ブロックチェーン150に対して公開することによって、所与の公開鍵(または、アドレス)に登録される。最新の登録された値を解決するプレイメージを提供することは、トランザクション内に含まれる得るメッセージまたは他のデータに対する署名として動作することができる。この署名は公的に検証可能であり、そして、トークン所有者によってのみ提供され得る。しかしながら、この方法は、リプレイ攻撃の影響を受けやすく、ここで、攻撃者は、一旦署名値を見れば、悪意のあるトランザクションを生成することができる。
【0096】
ここにおいて説明される技法は、1つのトランザクションが署名を提供するために使用され、かつ、別のトランザクションが署名を証明するために使用される、セキュアな、2段階(two-stage)の署名プロセスを提供する。
【0097】
第1当事者、例えば、アリス103aは、ブロックチェーン150に記録されているトークン(登録値)に対するプレイメージ(第1値)を有する。登録値は、第1値に対して一方向関数(ハッシュ関数、等)を適用することによって生成される。アリス103aは、メッセージに署名したいときに、少なくとも第1値およびメッセージに対して一方向関数を適用することによって、メッセージについて署名を生成することができる。アリス103aは、次いで、署名されたメッセージを含むトランザクションを構築し、そして、ブロックチェーンネットワーク106にそのトランザクションを送信することができる。アリス103aは、次いで、第1値(すなわち、登録値に対するプレイメージ)を含む第2トランザクションを構築し、そして、ブロックチェーンネットワークにトランザクションを送信することができる。第1トランザクションと第2トランザクションは、同じトランザクションであるか、または、異なるトランザクションでもよい。
【0098】
これから、第1値は、または、ブロックチェーン150にも記録され、そして、従って、新たに登録された値(または、更新された登録値)である。アリス103aは、第2メッセージに署名するために、上記のプロセスを繰り返すことができる。すなわち、アリス103aは、新しく登録された値とメッセージのプレイメージをハッシュすることによって署名を生成する。アリス103aは、ブロックチェーンネットワーク106に対して、署名されたメッセージを含むトランザクション(このトランザクションは、第2トランザクションと同じであるか、または、異なるトランザクションでもよい)を送信する。アリス103aは、次いで、ブロックチェーンネットワークに、更新された登録値に対するプレイメージを含むトランザクションを送信する。このプロセスは、シード値が明らかになるまで繰り返すことができる。
【0099】
いくつかの例において、プレイメージとメッセージをハッシュする代わりに、アリス103aは、プレイメージとメッセージのハッシュをハッシュする。例えば、アリス103aは、上記に定義されるようにt0,・・・,t1を用いて生成されたアクセスチェーン、および、署名されるn番目(nth)のメッセージmnを生成し得る。値tn+1=h(tn)は、ブロックチェーン150に現在登録されており、そして、かくして、アリスは、メッセージのハッシュと最新の登録値のプレイメージの両方を使用して、以下のように、メッセージmnの署名を構築することができる。
h(tn+h(mn))
【0100】
ここで、再び、tn+1=h(tn)である。この時点で、署名を含むトランザクションがブロックに含まれる場合に、署名は検証できない。これを行うために、アリス103aは、照明トランザクション(attestation transaction)を構築する。ここでは、ブロックチェーン150に登録されたアクセスチェーンにおける最新値として、tnが提供され、そして、登録される。
【0101】
この値を提供することによって、両方のアクセスチェーンは、h(tn)=tn+1であること、並びに、h(ti+h(mi))が署名(第1)トランザクションで提供されるデータと一致することをチェックすることによって、検証され得る。この2段階の署名プロセスは、ユーザが名目上(nominally)で証明するものであり、そして、それが完了すると、検証と証明を送信する。
【0102】
アリス103aによって使用される一方向関数は、ハッシュベースメッセージ認証コード(hash-based message authentication code、HMAC)であり得る。HMACは、メッセージの検証を提供するために、メッセージmと鍵Kを利用するタブ化(tabulated)された値である。HMACは、HMACを計算するために使用されるキーの露出を防止するために、プレイメージと暗号ハッシュ関数の衝突抵抗(collision resistance)を利用するメッセージ認証コード(MAC)のカテゴリである。これは、入力における小さな変化が、典型的には、ハッシュ関数の出力において著しい変化を結果として生じるので、セキュアなメッセージ送信および送信エラー検出において広く適用されている。
【0103】
h(x)を値xで評価したハッシュ関数とする。HMACは、以下のように定義される。
【数1】
【0104】
これは、1つのデータ(この場合はメッセージm)に対して直接的に適用され得るセキュアな署名スキームとして機能することができる。このことは、ブロックチェーン150に対して公開され、その後に、署名を検証することができる鍵Kを提供することによる認証が続く。
【0105】
秘密鍵、K、を使用して、nレベル深さ(n levels deep)のアクセスチェーンレベルが形成され得る。つまり、以下のようである。
t1=h(K)
t2=h2(K)
|
tn=hn(K)
ここで、Kは究極の秘密であり、そして、tnはブロックチェーン150における初期登録値である。アリス103aは、次いで、mの署名としてHMAC(tn-1,m)を使用することができる。検証当事者(例えば、ボブ)は、次いで、新たに露出された値を使用して、実際にH(tn-1)=tnであることをチェックし、そして、HMAC'(tn-1,m)が登録値と一致することを計算することができる。プレイメージの露出は、署名に対する証明として作用する。再び、このプロセスは、署名されるべき各メッセージの新しい署名について生成し、かつ、証明するために繰り返され得る。
【0106】
この関係は、アクセスチェーンにおける次の値が露出されるまで、署名に有限の寿命を与える。これは、また、署名者(アリス103a)が、彼女のために署名を提出することができる第2当事者(例えば、ボブ103b)に、(アクセスチェーンのルートを明らかにすることなく)アクセスチェーン内の次の1つ以上の値を提供することができるので、署名の委任(delegation)も可能にする。このプロセスは、生の(raw)鍵が代理人によって所有されるので、アクセスチェーン保持者と代理人との間の信頼度(degree of trust)を必要とする。代理人は、接続され得る公開鍵を使用して、少なくとも1つの署名されたトランザクションを提出するよう要求されることがある。従って、代理人が鍵を濫用する場合には、トランザクション署名を使用してそれらを識別することができる。
【0107】
一つの使用事例として、多くの法的シナリオにおいて、契約条件は、様々な管轄区域で導入された新たな法律に適合するために、定期的に変更され得る。このことは、しばしば、多くの契約を、同様に、または、ほとんど同じ方法で、変更することを要する。上述のスキームは、アクセスチェーンを使用して、有限の、かつ、事前決定された数の文書に署名を適用する方法を提供する。例えば、法的拘束力のある契約書m0と秘密Kを有する署名者を考える。署名者は、ブロックチェーン150にtn=hn(K)を公表(publish)することができる。公表されたhn(K)のプレイメージを使用することで、署名を生成することができる。tn-1を提供することによる証明が後に続く、メッセージ(h(tn-1+h(m0))のプレイメージのハッシュを使用するか、または、追加のセキュリティのためにHMACスキームHMAC(tn-1,m)を使用することによるか、いずれかである。契約を修正する必要がある場合に、修正(m1)は、チェーンにおける次の値を使用して署名者によって署名され得る。従って、全ての契約状態の完全な記録が固定的に記録され、そして、ブロックチェーン150においてタイムスタンプされる。それらは、直接的にデータ(この場合は契約修正)に適用され、そして、その後に証明されるので、多数の契約を効率的に管理するために、複数の署名は、また、単一のトランザクションにまとめることもできる。
【0108】
アイデンティティリンク・アクセスチェーン
上述のように、アリス103aとボブ103bは、それぞれ、他方の当事者に確かに関連するアイデンティティリンク鍵を導出することができる。アイデンティティリンク鍵を直接的に使用する代わりに、アリスとボブは、新しい共有秘密鍵を導出するために、それぞれのアイデンティティリンク鍵をそれぞれ使用することができる。上記のように、アリスとボブのそれぞれのアイデンティティリンク鍵は、以下のように生成される。
PA1=(SA0+SAB0)・G
PB1=(SB0+SAB0)・G
【0109】
これから、アリス103aとボブ103bはそれぞれ、導出された共有秘密鍵(「第1導出共有秘密鍵」(“a first derived shared private key”))を以下のように、それぞれ計算することができる。
SAB1=[SA1 SB1 G]x=[SA1 PB1]x=[SA1 PA1]x'
ここで、[ ]xは、楕円曲線点のx座標を示している。この新たに導出された共有秘密鍵、または、そこから導出された鍵は、次いで、アクセスチェーンにおけるシード(seed)として機能することができる。最終的に、アクセスチェーンのルートが露出されるので、導出された鍵を使用することは、最初の共有秘密SAB0を危殆化(compromise)しないので、新しいチェーンを再び作成することができる。例えば、新しいチェーンは、SAB1を使用して計算することができる。
【0110】
例えば、tn=hn(SAB1)である、100レベルディープ(deep)・アクセスチェーンを考えるち、アリス103aは、以下を生成することができる。
t100=h100(SAB1)
t99=h99(SAB1)
|
t1=h1(SAB1)
t0=SAB1
【0111】
アリスは、トランザクション内に含むこと、および、ブロックチェーン150に保管されるようにブロックチェーンネットワークに対してトランザクションを送信することによって、t100を公に登録することができる。ボブ103bは、次いで、自分自身の値を計算することによって(彼も、また、SAB1を同様に知っているので)、アリスのアイデンティティを検証することができる。
【0112】
一方の当事者は、S
AB1の露出によって他方の当事者が危険にさらされたと疑う場合に、彼らは、2人の元の(original)当事者のみが実行できることが要求される次の値(next value)を要求するチャレンジ・ソリューション(challenge solution)を要求することができる。ボブ103bは、アリス103aに対して、チャレンジメッセージ(m
c)および期待される形式を送信することができ、どちらも、S
AB0を使用して暗号化されたか、または、そこから導出された鍵である。S
AB0は、危殆化されたアクセスチェーンにおいて使用されていないので、それが危険にさらされることも同様に存在せず、かくして、アリス103a以外の誰もが、チャレンジメッセージおよび応答の要求される形式を知ることができない。t
n+1がブロックチェーン150に記録された最新の値である場合に、要求される応答は、以下のいずれかの形式をとることができる。
【数2】
ここで、||は連結を示し、そして、
【数3】
は、XOR演算を参照する。ここで、h
n(S
AB1)は、ブロックチェーンに記録された最新の値の直前のシーケンスにおける値である。例えば、t
100がブロックチェーンに記録されている場合、h
n(S
AB1)=t
99、この鍵を用いてアリス103aが報告すれば、ボブ103bは彼女のアイデンティティを確認することができる。しかしながら、ボブ103bは、また、アリス103aがチェーンの残りの部分(remainder)についてもこの形式で答えることを要求し得る。このチェーンは、潜在的なセキュリティ侵害(security breach)にもかかわらず、継続して使用され得る。しかしながら、新しいアクセスチェーンも、また、いずれかの当事者が望む場合に、新しく導出された鍵を使用して作成され得る。
【0113】
これから、例示的な使用例について説明する。監査(audit)は、財務報告、法令遵守、および製品品質を含む、幅広いビジネスプロセスの独立した評価を提供する。第三者の監査人は、特に、ビジネスが最終的に消費者の手に渡る製品を生産するものである場合に、サプライチェーンの重要な部分を形成し得る。現在、これらの監査人の多くは、ブロックチェーンシステムと統合するオプションを持っていない。アイデンティティリンク・アクセスチェーンを使用することで、証明の信頼性が、リンクされたアイデンティティを使用して検証することができ、そして、審査機関により要求されるどの頻度でも更新することができる。
【0114】
審査機関は、公開鍵PA1を宣言する必要があり、公開鍵は、十分に厳格なKYCプロシージャを有していなければならない。監査人は、計算された共有鍵ペア(SAB1,PAB1)、例えば、ディフィー・ヘルマン交換により計算されたもの、を介して、彼または彼女のアイデンティティを審査機関にリンクすることができる。このことは、初期値tnが審査機関によって登録されている、アクセスチェーンtn=hn(SAB1)のルートとして機能することができる。個々の監査人は、次いで、要求されるコンプライアンス調査を実行し、そして、上述の署名方法を使用してコンプライアンスの証明m0を提供し、ブロックチェーン150上に最新の登録値のプレイメージを記録することができる。この証明書には、別のコンプライアンス監査が行われなければならない有効期限を与えることができる。更新のたびに、要求された報告条件を検証することができ、そして、条件が満たされない場合には、署名が保留される。このことは、個々の監査人に遡って追跡可能であり、かつ、審査機関との検証可能な関係を伴う、コンプライアンスの不変の記録を提供する。
【0115】
結論
上記の実施形態は、単なる例示として説明したものであることが理解されるだろう。
【0116】
より一般的には、ここにおいて開示される教示の第1のインスタンス化によれば、第1当事者と第2当事者をリンクするコンピュータ実装方法が提供され得る。本方法は、前記第1当事者によって実行され、かつ、第1秘密鍵および対応する第1公開鍵からなる第1の暗号的公開鍵-秘密鍵ペアを取得するステップと、前記第1当事者と前記第2当事者に知られている第1共有秘密鍵を生成するステップと、第2秘密鍵および対応する第2公開鍵からなる第2の暗号的公開鍵-秘密鍵ペアを生成するステップであり、前記第2秘密鍵は、前記第1秘密鍵と前記第1共有秘密鍵に基づいて生成されているステップ、を含む。
【0117】
ここにおいて開示される教示の任意的な、第2のインスタンス化によれば、第1のインスタンス化に従った方法が提供され得る。本方法は、1つ以上の更新された共有秘密鍵を生成するステップであり、更新された共有秘密鍵それぞれは、前記第1当事者と前記第2当事者に知られているステップと、1つ以上の更新された第2の暗号的公開鍵-秘密鍵ペアを生成するステップであり、それぞれの更新された第2秘密鍵および対応する更新された第2公開鍵を含み、それぞれの更新された第2秘密鍵は、前記第1秘密鍵、および、前記1つ以上の更新された共有秘密鍵のうち異なる1つに基づいて生成されるステップ、を含む。
【0118】
いくつかの実施形態では、複数の更新された共有秘密鍵ペアが生成され、かつ複数の更新された第2暗号公開鍵ペアが生成される。ここで、それぞれ更新された第2秘密鍵は、第1秘密鍵、および、複数の更新された共有秘密鍵のうちの異なるものと基づいて生成される。
【0119】
ここにおいて開示される教示の任意的な、第3のインスタンス化によれば、第2のインスタンス化に従った方法が提供され得る。ここで、前記1つ以上の更新された共有秘密鍵は、前記第1共有秘密鍵で始まる鍵のシーケンスを形成し、かつ、前記シーケンス内の次の秘密鍵それぞれは、少なくとも前記シーケンス内の前の共有秘密鍵に対して、一方向関数を適用することによって生成される。
【0120】
ここにおいて開示される教示の任意的な、第4のインスタンス化によれば、第1乃至第3いずれか一つのインスタンス化に従った方法が提供され得る。本方法は、前記第2当事者の第2公開鍵を取得するステップであり、前記第2当事者の前記第2公開鍵は、前記第2当事者の第1秘密鍵および前記第1共有秘密鍵に基づいて生成されるステップと、前記第1当事者の前記第2秘密鍵および前記第2当事者の前記第2公開鍵に基づいて、導出される共有秘密鍵を生成するステップ、を含む。
【0121】
ここにおいて開示される教示の任意的な、第5のインスタンス化によれば、本方法は、値のシーケンスを生成するステップであり、前記シーケンス内の初期値は、導出される共有秘密鍵であるか、または、前記導出される共有秘密鍵に対して、一方向関数を適用することによって生成されるものであり、かつ、前記シーケンス内の次の値それぞれは、少なくとも前記シーケンス内の前の値に対して、一方向関数を適用することによって生成されるステップ、を含む。
【0122】
ここにおいて開示される教示の任意的な、第6のインスタンス化によれば、第5のインスタンス化に従った方法が提供され得る。本方法は、ブロックチェーンに含めるために、ブロックチェーンネットワークの1つ以上のノードに対して、ブロックチェーントランザクションを送信するステップであり、前記ブロックチェーントランザクションは、前記値のシーケンスにおける最新の値を含むステップ、を含む。
【0123】
例えば、シーケンス内の最新の値は、最終的な(すなわち、最後の)値であり得る。代替的に、シーケンス内の最新の値は、シーケンス内の前の値であり得る。例えば、最終的なn番目の値がブロックチェーンに対して提出され、次いでn-1番目の値、次いでn-2番目の値、等である。
【0124】
ここにおいて開示される教示の任意的な、第7のインスタンス化によれば、第6のインスタンス化に従った方法が提供され得る。本方法は、前記第2当事者から、チャレンジメッセージを受信するステップであり、前記チャレンジメッセージは、前記第1共有秘密鍵に基づいて暗号化されているステップと、前記チャレンジメッセージに対する応答を生成するステップであり、前記応答は、前記チャレンジメッセージ、および、前記値のシーケンスにおける最新の値の直前の値に基づいているステップと、前記第2当事者に対して、前記応答を送信するステップ、を含む。
【0125】
ここにおいて開示される教示の任意的な、第8のインスタンス化によれば、第7のインスタンス化に従った方法が提供され得る。本方法は、前記第2当事者から、期待される形式の前記応答を受信するステップであり、前記期待される形式は、前記第1共有秘密鍵に基づいて暗号化されており、かつ、前記生成される応答は、さらに、前記期待される形式に基づいているステップ、を含む。
【0126】
ここにおいて開示される教示の任意的な、第9のインスタンス化によれば、第1共有秘密鍵は、第1当事者の第3暗号公開鍵-秘密鍵ペアの秘密鍵、および、第2当事者の暗号公開鍵-秘密鍵ペアの公開鍵に基づいて生成される。
【0127】
第1共有秘密鍵は、また、第1当事者の第3暗号公開鍵-秘密鍵ペアの第3公開鍵、および、第2当事者の暗号公開鍵-秘密鍵ペアの秘密鍵から生成することもできる。
【0128】
ここにおいて開示される教示の任意的な、第10のインスタンス化によれば、第1乃至第9いずれか一つのインスタンス化に従った方法が提供され得る。ここで、前記第1当事者と前記第2当事者は、同一の当事者である。
【0129】
ここにおいて開示される教示の任意的な、第11のインスタンス化によれば、第1乃至第9いずれか一つのインスタンス化に従った方法が提供され得る。ここで、前記第1当事者と前記第2当事者は、異なる当事者である。
【0130】
ここにおいて開示される教示の任意的な、第12のインスタンス化によれば、第1乃至第11いずれか一つのインスタンス化に従った方法が提供され得る。本方法は、前記第1当事者の前記第2秘密鍵に基づいて、署名を用いてメッセージに署名するステップと、前記第2当事者、及び/又は、異なる第三者に対して、前記署名されたメッセージを送信するステップ、を含む。
【0131】
ここにおいて開示される教示の任意的な、第13のインスタンス化によれば、第1乃至第12いずれか一つのインスタンス化に従った方法が提供され得る。本方法は、前記第1当事者の前記第2秘密鍵に基づいて、署名を用いてブロックチェーントランザクションの少なくとも一部に署名するステップと、ブロックチェーンに含めるために、ブロックチェーンネットワークの1つ以上のノードに対して、前記ブロックチェーントランザクションを送信するステップ、を含む。
【0132】
ここにおいて開示される教示の第14のインスタンス化によれば、第1当事者と第2当事者との間のリンクを検証するためのコンピュータ実装方法が提供され得る。本方法は、第三者によって実行され、かつ、前記第2当事者から、i)前記第2当事者の第1秘密鍵に基づく第1署名を用いて署名されたメッセージ、および、ii)前記第1秘密鍵に対応する第1公開鍵を取得するステップと、前記第2当事者から、iii)前記第2当事者の第2秘密鍵に基づく第2署名を用いて署名されたメッセージ、および、iv)前記第2秘密鍵に対応する第2公開鍵を取得するステップと、前記第1当事者から、v)前記第1当事者と前記第2当事者のみに知られている共有秘密鍵、および、対応する共有公開鍵に基づく第3署名を用いて署名されたメッセージを取得するステップと、前記第2当事者の前記第2公開鍵が、前記第2当事者の前記第1公開鍵および前記共有公開鍵に基づいて生成されたか否かを決定するステップ、を含む。
【0133】
ここにおいて開示される教示の任意的な、第15のインスタンス化によれば、第14のインスタンス化に従った方法が提供され得る。ここで、前記決定するステップは、前記第1署名、前記第2署名、前記第3署名が有効な署名であるか否か決定すること、を含む。
【0134】
ここにおいて開示される教示の任意的な、第16のインスタンス化によれば、第14または第15のインスタンス化に従った方法が提供され得る。本方法は、前記第1当事者および前記第2当事者に対して、前記メッセージを送信するステップ、を含む。
【0135】
ここにおいて開示される教示の任意的な、第17のインスタンス化によれば、第14または第16のインスタンス化に従った方法が提供され得る。ここで、前記第1当事者と前記第2当事者は、同一の当事者である。
【0136】
ここにおいて開示される教示の任意的な、第18のインスタンス化によれば、第14または第16のインスタンス化に従った方法が提供され得る。ここで、前記第1当事者と前記第2当事者は、異なる当事者である。
【0137】
ここにおいて開示される教示の第19のインスタンス化によれば、第1メッセージに署名するために第1当事者によって使用される第1署名を証明するコンピュータ実装方法が提供され得る。ここで、ブロックチェーンは、記録されたトランザクションを含み、前記記録されたトランザクションは、第1値に対して、一方向関数を適用することによって生成された登録値を含む。本方法は、前記第1当事者によって実行され、かつ、少なくとも前記第1値および前記第1メッセージに対して、一方向関数を適用することによって、前記第1署名を生成するステップと、前記ブロックチェーン内に含めるために、ブロックチェーンネットワークの1つ以上のノードに対して、第1トランザクションを送信するステップであり、前記第1トランザクションは、前記第1署名を用いて署名されたメッセージを含むステップと、前記ブロックチェーン内に含めるために、前記ブロックチェーンネットワークの1つ以上のノードに対して、第2トランザクションを送信するステップであり、前記第2トランザクションは、前記第1値を含むステップ、を含む。
【0138】
ここにおいて開示される教示の任意的な、第20のインスタンス化によれば、第19のインスタンス化に従った方法が提供され得る。ここで、前記第1値は、更新された登録値であり、かつ、第2値に対して、一方向関数を適用することによって生成される。本方法は、少なくとも第2値および第2メッセージに対して、一方向関数を適用することによって、第2署名を生成するステップと、前記ブロックチェーン内に含めるために、ブロックチェーンネットワークの1つ以上のノードに対して、第3トランザクションを送信するステップであり、前記第3トランザクションは、前記第2署名を用いて署名された前記第2メッセージを含むステップと、前記ブロックチェーン内に含めるために、前記ブロックチェーンネットワークの1つ以上のノードに対して、第4トランザクションを送信するステップであり、前記第4トランザクションは、前記第2値を含むステップ、を含む。
【0139】
ここにおいて開示される教示の任意的な、第21のインスタンス化によれば、第19または第20のインスタンス化に従った方法が提供され得る。ここで、前記第1署名は、少なくともi)前記第1値、および、ii)一方向関数を前記第1メッセージに適用した結果に対して、一方向関数を適用することによって生成される。
【0140】
例えば、第1署名は、第1メッセージをハッシュし、次いで第1値と第1メッセージのハッシュの組み合わせをハッシュすることによって生成され得る。
【0141】
ここにおいて開示される教示の任意的な、第22のインスタンス化によれば、第19乃至第21いずれか一つのインスタンス化に従った方法が提供され得る。ここで、前記第1署名は、ハッシュベースのメッセージ認証コードである。
【0142】
ここにおいて開示される教示の任意的な、第23のインスタンス化によれば、第19乃至第22いずれか一つのインスタンス化に従った方法が提供され得る。ここで、前記第2トランザクションを送信するステップは、前記第1トランザクションが前記ブロックチェーンに含まれた後で、前記ブロックチェーンネットワークの1つ以上のノードに対して、前記第2トランザクションを送信することを含む。
【0143】
ここにおいて開示される教示の任意的な、第24のインスタンス化によれば、第19乃至第23いずれか一つのインスタンス化に従った方法が提供され得る。ここで、前記登録値および前記第1値は、値のシーケンスの一部であり、かつ、前記シーケンスにおける次の値それぞれは、前記シーケンスにおける前の値に対して、一方向関数を適用することによって生成される。
【0144】
ここにおいて開示される教示の任意的な、第25のインスタンス化によれば、第24のインスタンス化に従った方法が提供され得る。本方法は、第2当事者に対して、前記値のシーケンスの1つ以上の値を送信するステップ、を含む。
【0145】
ここにおいて開示される教示の任意的な、第26のインスタンス化によれば、第19乃至第25いずれか一つのインスタンス化に従った方法が提供され得る。ここで、前記第1トランザクションと前記第3トランザクションは、同一のトランザクションであり、かつ/あるいは、前記第2トランザクションと前記第4トランザクションは、同一のトランザクションである。
【0146】
ここにおいて開示される教示の任意的な、第27のインスタンス化によれば、第1乃至第26いずれか一つのインスタンス化に従った方法が提供され得る。ここで、前記一方向関数は、暗号ハッシュ関数である。
【0147】
ここにおいて開示される教示の第28のインスタンス化によれば、前記第1当事者のコンピュータ機器が提供される。本コンピュータ機器は、1つ以上のメモリユニットを含むメモリと、1つ以上の処理ユニットを備える処理装置と、を含む。ここで、前記メモリは、前記処理装置上で実行するように構成されたコードを保管し、前記コードは、第1乃至第13いずれか一つのインスタンス化を前記処理装置上で実行するように構成されている。
【0148】
ここにおいて開示される教示の第29のインスタンス化によれば、コンピュータ読取り可能なストレージ装置に保管されたコンピュータプログラムが提供される。本コンピュータプログラムは、前記第1当事者のコンピュータ機器上で実行される場合に、第1乃至第13いずれか一つのインスタンス化を実行するように構成されている。
【0149】
ここにおいて開示される教示の第30のインスタンス化によれば、前記第三者のコンピュータ機器が提供される。本コンピュータ機器は、1つ以上のメモリユニットを含むメモリと、1つ以上の処理ユニットを備える処理装置と、を含む。ここで、前記メモリは、前記処理装置上で実行するように構成されたコードを保管し、前記コードは、第14乃至第18いずれか一つのインスタンス化を前記処理装置上で実行するように構成されている。
【0150】
ここにおいて開示される教示の第31のインスタンス化によれば、コンピュータ読取り可能なストレージ装置に保管されたコンピュータプログラムが提供される。本コンピュータプログラムは、前記第三者のコンピュータ機器上で実行される場合に、第14乃至第18いずれか一つのインスタンス化を実行するように構成されている。
【0151】
ここにおいて開示される教示の第32のインスタンス化によれば、前記第1当事者のコンピュータ機器が提供される。本コンピュータ機器は、1つ以上のメモリユニットを含むメモリと、1つ以上の処理ユニットを備える処理装置と、を含む。ここで、前記メモリは、前記処理装置上で実行するように構成されたコードを保管し、前記コードは、第19乃至第27いずれか一つのインスタンス化を前記処理装置上で実行するように構成されている。
【0152】
ここにおいて開示される教示の第33のインスタンス化によれば、コンピュータ読取り可能なストレージ装置に保管されたコンピュータプログラムが提供される。本コンピュータプログラムは、前記第1当事者のコンピュータ機器上で実行される場合に、第19乃至第27いずれか一つのインスタンス化を前記処理装置上で実行するように構成されている、
【0153】
ここにおいて開示される教示の別のインスタンス化によれば、第1当事者、第2当事者、及び/又は、第三者の動作を含む方法が提供され得る。
【0154】
ここにおいて開示される教示の別のインスタンス化によれば、第1当事者、第2当事者、及び/又は、第三者のコンピュータ機器を含むが提供され得る。
【0155】
開示された技術の他の変形または使用事例は、一旦ここにおいて開示されると、当業者に明らかになり得る。本開示の範囲は、説明された実施形態によって限定されるものではなく、添付の請求項によってのみ限定される。