JP2023522258A - ブロックチェーンを使用してデジタルコインシステムを実装するための方法 - Google Patents

ブロックチェーンを使用してデジタルコインシステムを実装するための方法 Download PDF

Info

Publication number
JP2023522258A
JP2023522258A JP2022564037A JP2022564037A JP2023522258A JP 2023522258 A JP2023522258 A JP 2023522258A JP 2022564037 A JP2022564037 A JP 2022564037A JP 2022564037 A JP2022564037 A JP 2022564037A JP 2023522258 A JP2023522258 A JP 2023522258A
Authority
JP
Japan
Prior art keywords
coin
transaction
consumption
double
signature
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022564037A
Other languages
English (en)
Inventor
ミカエラ・ペティット
クレイグ・スティーヴン・ライト
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
nChain Holdings Ltd
Original Assignee
nChain Holdings Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by nChain Holdings Ltd filed Critical nChain Holdings Ltd
Publication of JP2023522258A publication Critical patent/JP2023522258A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/30Payment architectures, schemes or protocols characterised by the use of specific devices or networks
    • G06Q20/36Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes
    • G06Q20/367Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes involving electronic purses or money safes
    • G06Q20/3678Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes involving electronic purses or money safes e-cash details, e.g. blinded, divisible or detecting double spending
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/04Payment circuits
    • G06Q20/06Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
    • G06Q20/065Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash
    • G06Q20/0655Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash e-cash managed centrally
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/08Payment architectures
    • G06Q20/10Payment architectures specially adapted for electronic funds transfer [EFT] systems; specially adapted for home banking systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3825Use of electronic signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3827Use of message hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/382Payment protocols; Details thereof insuring higher security of transaction
    • G06Q20/3829Payment protocols; Details thereof insuring higher security of transaction involving key management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/389Keeping log of transactions for guaranteeing non-repudiation of a transaction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/401Transaction verification
    • G06Q20/4014Identity check for transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/38Payment protocols; Details thereof
    • G06Q20/40Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
    • G06Q20/403Solvency checks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3218Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using proof of knowledge, e.g. Fiat-Shamir, GQ, Schnorr, ornon-interactive zero-knowledge proofs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q2220/00Business processing using cryptography

Landscapes

  • Business, Economics & Management (AREA)
  • Engineering & Computer Science (AREA)
  • Accounting & Taxation (AREA)
  • Computer Security & Cryptography (AREA)
  • Finance (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • Physics & Mathematics (AREA)
  • Strategic Management (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法であって、各デジタルコインは、発行者によって発行され、デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、発行者はコインシリアル番号の記録を維持し、各コインシリアル番号はそれぞれのデジタルコインを表し、方法は、発行者によって実行され、コインシリアル番号の集合のうちの第1のコインシリアル番号を備える消費トランザクションを取得するステップと、第1のコインシリアル番号がデータベースに存在するかどうかを決定するステップと、1つまたは複数の条件が満たされたことに応答して、第1のコインシリアル番号によって表される額の資産を引換者に移転するステップとを備え、条件のうちの第1の条件は、第1のコインシリアル番号がデータベースに存在しないということである。

Description

本開示は、ブロックチェーンを使用してデジタルコインを発行するためのデジタルコインシステムを実装するための方法に関する。
ブロックチェーンはある形式の分散型データ構造を指し、ブロックチェーンの重複コピーがピアツーピア(P2P)ネットワーク中の複数のノードの各々に維持される。ブロックチェーンはデータのブロックのチェーンを備え、各ブロックは1つまたは複数のトランザクションを備える。各トランザクションは、1つまたは複数のブロックにまたがり得るシーケンス中の先行するトランザクションを指し示し得る。トランザクションは、新しいブロックに含まれるべきネットワークに出され得る。新しいブロックは「マイニング」として知られるプロセスによって作成され、これは、複数のマイニングノードの各々が「プルーフオブワーク」を競って実行すること、すなわち、ブロックに含められるのを待機している未処理のトランザクションのプールに基づいて暗号学的なパズルを解くことを伴う。
ブロックチェーンにおけるトランザクションは、デジタル資産、すなわちある数のデジタルトークンを運ぶために使用される。しかしながら、ブロックチェーンは、ブロックチェーン上に追加の機能を重ねるためにも活用され得る。たとえば、ブロックチェーンプロトコルは、トランザクションの出力に追加のユーザデータを記憶することを可能にし得る。最近のブロックチェーンは、単一のトランザクションに記憶できる最大データ容量を増やしており、より複雑なデータの組み込みを可能にしている。たとえば、これを使用して、ブロックチェーンに電子文書を、またはオーディオデータもしくはビデオデータすらも記憶することができる。
ネットワーク中の各ノードには、転送、マイニング、および記憶という3つの役割のうちの任意の1つ、2つ、またはすべてを有し得る。転送ノードは、ネットワークのノード全体にトランザクションを広める。マイニングノードは、ブロックへのトランザクションのマイニングを実行する。記憶ノードは各々、ブロックチェーンのマイニングされたブロックの固有のコピーを記憶する。トランザクションをブロックチェーンに記録させるために、当事者は、トランザクションを、広められるようにネットワークのノードの1つに送信する。トランザクションを受信するマイニングノードは、競ってトランザクションを新しいブロックへとマイニングし得る。各ノードは同じノードプロトコルを尊重するように構成され、これはトランザクションが正当であるための1つまたは複数の条件を含む。正当ではないトランザクションは、広められず、ブロックへとマイニングもされない。トランザクションの正当性が確認されて、それによりブロックチェーンへと受け入れられると仮定すると、したがって、トランザクション(どのようなユーザデータも含む)は、P2Pネットワーク中のノードの各々に、イミュータブルな公開記録として記憶されたままになる。
プルーフオブワークパズルを解くことに成功して最新のブロックを作成したマイナーは通常、新しい額のデジタル資産を生成する「生成トランザクション」と呼ばれる新しいトランザクションにより報酬を受ける。プルーフオブワークは、マイナーが二重消費トランザクションを自分のブロックに含めることによってシステムを騙さないようにする動機を与え、それは、ブロックをマイニングするには大量の計算リソースを必要とし、二重消費の試みを含むブロックは他のノードにより受け入れられない可能性が高いからである。
「出力ベース」モデル(UTXOベースモデルと呼ばれることがある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力および1つまたは複数の出力を備える。任意の消費可能な出力は、UTXO(「未消費トランザクション出力」)と呼ばれることがある、デジタル資産の額を指定する要素を備える。出力はさらに、出力を引き換えるための条件を指定するロッキングスクリプトを備え得る。各入力は、先行するトランザクションにおいてそのような出力へのポインタを備え、指し示される出力のロッキングスクリプトをアンロックするためのアンロッキングスクリプトをさらに備え得る。よって、トランザクションのペアを考え、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定する少なくとも1つの出力を備え、それは、その出力をアンロックする1つまたは複数の条件を定義するロッキングスクリプトを備える。第2のターゲットトランザクションは、第1のトランザクションの出力へのポインタを備え、第1のトランザクションの出力をアンロックするためのアンロッキングスクリプトを備える、少なくとも1つの入力を備える。
そのようなモデルでは、第2のターゲットトランザクションが、ブロックチェーンにおいて広められ記録されるようにP2Pネットワークに送信されるとき、各ノードにおいて適用される正当性のための基準の1つは、第1のトランザクションのロッキングスクリプトにおいて定義される1つまたは複数の条件のすべてをアンロッキングスクリプトが満たすということである。別の基準は、第1のトランザクションの出力が別のより前の正当なトランザクションによってまだ引き換えられていないということである。これらの条件のいずれかに従ってターゲットトランザクションを正当ではないと見なすノードはいずれも、トランザクションを広めることも、ブロックチェーンに記録されるようにブロックへとマイニングするためにトランザクションを含めることもしない。
「Blind signatures for untraceable payments」、Advances in cryptology、pp.199-203、1983年 Y.DodisおよびA.Yampolskiy、「A verifiable random function with short proofs and keys」、International Workshop on Public Key Cryptography、2005年 J.Camenisch、S.Hohenberger、およびA.Lysyanskaya、「Compact e-cash」、Annual International Conference on the Theory and Applications of Cryptographic Techniques、2005年
電子キャッシュ(ecash)は1983年に初めて発明され(D.Chaum、「Blind signatures for untraceable payments」、Advances in cryptology、pp.199-203、1983年)、それ以来さらなる多くの実装があったが、それらのいずれもが法定通貨システムを再現することができていない。ecashは、その従来の形式において、ブロックチェーンを利用しないことに留意されたい。
ecashシステム(およびデジタルコインシステム全般)の最大の問題の1つは、「二重消費」に対して脆弱であることであり、これは、同じecash(またはデジタルコイン)を複製して再び消費するのが非常に簡単であることを意味する。これにより、これまでのシステムはいずれも、広く採用されることが妨げられてきた。
本明細書において開示される一態様によれば、ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法が提供され、各デジタルコインは、発行者によって消費者に発行され、各デジタルコインは、デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、発行者はコインシリアル番号の記録を維持し、各コインシリアル番号はそれぞれのデジタルコインを表し、方法は、発行者によって実行され、消費トランザクションを取得するステップであって、消費トランザクションがブロックチェーントランザクションであり、コインシリアル番号の集合のうちの第1のコインシリアル番号を備える、ステップと、第1のコインシリアル番号が消費されたコインシリアル番号のデータベースに存在するかどうかを決定するステップと、1つまたは複数の条件が満たされたことに応答して、第1のコインシリアル番号によって表される資産の額を引換者に移転するステップとを備え、1つまたは複数の条件のうちの第1の条件は、第1のコインシリアル番号がデータベースに存在しないことである。
発行者は、消費されたデジタルコインに関連するコインシリアル番号のリストを維持する。発行者は、ブロックチェーンから、または別のソースから、引換者から直接消費トランザクションを受け取り得る。第1のコインシリアル番号がデータベースに存在する場合、対応するデジタルコインは以前に消費されており、消費者または引換者はコインを二重消費しようとしている。発行者はデジタルコインを拒絶する。一方、第1のコインシリアル番号がデータベースに存在しない場合、関連するデジタルコインは以前に消費されておらず、発行者はコインを受け入れてもよく、これは何らかの他の基準が満たされることも条件としてもよい。
本明細書において開示される別の態様によれば、ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法が提供され、各デジタルコインは、発行者によって消費者に発行され、各デジタルコインは、デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、方法は、消費者によって実行され、引出トランザクションを取得するステップであって、引出トランザクションが1つまたは複数の出力を備え、各出力がコインシリアル番号の集合のそれぞれ1つのハッシュを備え、各コインシリアル番号がそれぞれのデジタルコインを表す、ステップと、ブロックチェーンに記録されるように、引出トランザクションを、引換者、第三者、および/またはブロックチェーンネットワークに送信するステップとを備える。
引出トランザクションの出力にコインシリアル番号のハッシュを含めることは、シリアルコイン番号自体が、その出力をアンロックすることを試みるトランザクションにおいて明らかにされなければならないことを意味するので、コインシリアル番号は消費者により明らかにされることが余儀なくされる。明らかにされたコインシリアル番号は、以前に消費されたデジタルコインを特定して、したがって、デジタルコインの二重消費を防ぐために使用され得る。
引出トランザクションは、デジタルコインの集合を消費者が発行されたことの記録としても機能し、各コインは固有のシリアル番号を有する。引出トランザクションは、発行者によって消費者に発行され得るので、発行者が消費されたコインの起源を消費者までたどることを可能にし得る。代替として、消費者は引出トランザクションを生成し得る。
本明細書において開示される別の態様によれば、ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法が提供され、各デジタルコインは発行者によって消費者に発行され、各デジタルコインは、デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、方法は、引換者によって実行され、消費者から、第1のコインシリアル番号を取得するステップと、第1のコインシリアル番号がブロックチェーンに存在するかどうかを決定するステップと、1つまたは複数の条件が満たされることに応答して、消費トランザクションを取得するステップであって、消費トランザクションが、ブロックチェーントランザクションであり、第1のコインシリアル番号を備える、ステップと、ブロックチェーンに記録されように、消費トランザクションを、消費者、発行者、第三者、および/またはブロックチェーンネットワークのうちの1つまたは複数に送信するステップとを備え、1つまたは複数の条件のうちの第1の条件は、第1のコインシリアル番号がブロックチェーンに存在しないことである。
引換者は、第1のコインシリアル番号がブロックチェーンに存在するかどうかを確認する。上で述べられたように、第1のコインシリアル番号がブロックチェーンに存在する場合、それは、消費者が関連するデジタルコインを以前に消費したことを意味する。第1のコインシリアル番号がブロックチェーンに存在しない場合、引換者は、関連するデジタルコインが消費されていないことについて確信することができる。
本発明は、ブロックチェーン上でデジタルコインシステム(たとえば、ecashシステム)を実装するためのシステムを提供する。有利なことに、ブロックチェーンの特性を利用することで、デジタルコインシステムのセキュリティが強化される。具体的には、ブロックチェーンの2つの基本的な特性により、提案されるシステムの二重消費セキュリティが以前のシステムと比較して向上する。利用される第1の性質は、消費されている、または消費されていないというバイナリ状態をトランザクション出力が有するということである。出力がコインを表す場合、対応する出力が消費されていなければ、コインはシステムの消費および預入プロトコルにおいてのみ受け入れられる(以下で説明される)。この性質は二重消費を防ぐために使用される。使用される第2の性質は、ブロックチェーンが分散されたイミュータブルなデータベースであるという事実である。ブロックチェーンを使用して、消費されておりブラックリストに載っているコインシリアル番号を記憶することができ、必要であれば誰でもこれにアクセスすることができる。
本開示の実施形態の理解を助け、そのような実施形態がどのように具体化され得るかを示すために、単なる例として添付の図面に対する参照が行われる。
ブロックチェーンを実装するためのシステムの概略ブロック図である。 ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す図である。 ブロックチェーンを実装するための別のシステムの概略ブロック図である。 クライアントアプリケーションの概略ブロック図である。 トランザクションを処理するためのいくつかのノードソフトウェアの概略ブロック図である。 電子キャッシュプロトコルを実装するための例示的なシステムの概略ブロック図である。 本発明の実施形態による、デジタルコインシステムを実装するための例示的なシステムの概略ブロック図である。 例示的な引出トランザクションおよび対応するデータを概略的に示す図である。 例示的な引出トランザクションおよび対応するデータを概略的に示す図である。 例示的な消費トランザクションおよび対応するデータを概略的に示す図である。 例示的な消費トランザクションおよび対応するデータを概略的に示す図である。 例示的な預入トランザクションおよび対応するデータを概略的に示す図である。 例示的な預入トランザクションおよび対応するデータを概略的に示す図である。 別の例示的な引出トランザクションおよび対応するデータを概略的に示す図である。 別の例示的な引出トランザクションおよび対応するデータを概略的に示す図である。 別の例示的な消費トランザクションおよび対応するデータを概略的に示す図である。 別の例示的な消費トランザクションおよび対応するデータを概略的に示す図である。 別の例示的な預入トランザクションおよび対応するデータを概略的に示す図である。 別の例示的な預入トランザクションおよび対応するデータを概略的に示す図である。 例示的な引出トランザクションを概略的に示す図である。 例示的な消費トランザクションを概略的に示す図である。 例示的な預入トランザクションを概略的に示す図である。 引出トランザクションへと挿入するためのデータの第1の例を概略的に示す図である。 消費トランザクションへと挿入するためのデータの第1の例を概略的に示す図である。 預入トランザクションへと挿入するためのデータの第1の例を概略的に示す図である。 引出トランザクションへと挿入するためのデータの第2の例を概略的に示す図である。 消費トランザクションへと挿入するためのデータの第2の例を概略的に示す図である。 預入トランザクションへと挿入するためのデータの第2の例を概略的に示す図である。 引出トランザクションへと挿入するためのデータの第3の例を概略的に示す図である。 消費トランザクションへと挿入するためのデータの第3の例を概略的に示す図である。 預入トランザクションへと挿入するためのデータの第3の例を概略的に示す図である。 引出トランザクションへと挿入するためのデータの第4の例を概略的に示す図である。 消費トランザクションへと挿入するためのデータの第4の例を概略的に示す図である。 預入トランザクションへと挿入するためのデータの第4の例を概略的に示す図である。 引出トランザクションへと挿入するためのデータの第5の例を概略的に示す図である。 消費トランザクションへと挿入するためのデータの第5の例を概略的に示す図である。 預入トランザクションへと挿入するためのデータの第5の例を概略的に示す図である。 引出トランザクションへと挿入するためのデータの第6の例を概略的に示す図である。 消費トランザクションへと挿入するためのデータの第6の例を概略的に示す図である。 預入トランザクションへと挿入するためのデータの第6の例を概略的に示す図である。 引出トランザクションへと挿入するためのデータの第7の例を概略的に示す図である。 消費トランザクションへと挿入するためのデータの第7の例を概略的に示す図である。 預入トランザクションへと挿入するためのデータの第7の例を概略的に示す図である。
例示的なシステム概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、パケット交換ネットワーク101、通常はインターネットなどのワイドエリアネットワークを備える。パケット交換ネットワーク101は、パケット交換ネットワーク101内のピアツーピア(P2P)オーバーレイネットワーク106を形成するように並べられた複数のノード104を備える。各ノード104はピアのコンピュータ機器を備え、ノード104の異なるノードは異なるピアに属する。各ノード104は、1つまたは複数のプロセッサ、たとえば、1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)を備える、処理装置を備える。各ノードはまた、非一時的コンピュータ可読媒体の形式のメモリ、すなわちコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光学ディスクドライブなどの光学媒体を利用する、1つまたは複数のメモリユニットを備え得る。
ブロックチェーン150はデータのブロック151のチェーンを備え、ブロックチェーン150のそれぞれのコピーが、P2Pネットワーク160中の複数のノードの各々において維持される。チェーン中の各ブロック151は1つまたは複数のトランザクション152を備え、この文脈におけるトランザクションは、ある種のデータ構造を指す。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは通常、1つの特定のトランザクションプロトコルを全体で使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を備える。各出力は、出力が暗号学的にロックされる先のユーザ103に属するデジタル資産の量を表す額を指定する(アンロックされ、それにより引き換えられまたは消費されるのに、そのユーザの署名を必要とする)。各入力は先行するトランザクション152の出力を指し示し、それにより複数のトランザクションを結びつける。
ノード104の少なくとも一部は、トランザクション152を転送してそれにより広める、転送ノード104Fの役割を引き受ける。ノード104の少なくとも一部は、ブロック151をマイニングするマイナー104Mの役割を引き受ける。ノード104の少なくとも一部は記憶ノード104S(「フルコピー」ノードとも呼ばれることがある)の役割を引き受け、その各々がそれぞれのメモリに同じブロックチェーン150のそれぞれのコピーを記憶する。各マイナーノード104Mはまた、ブロック151へとマイニングされるのを待機しているトランザクション152のプール154を維持する。所与のノード104は、転送ノード104、マイナー104M、記憶ノード104S、またはこれらの2つもしくはすべての任意の組合せであり得る。
所与の現在のトランザクション152jにおいて、その(または各)入力は、トランザクションのシーケンスにおいて先行するトランザクション152iの出力を参照するポインタを備え、これは、この出力が現在のトランザクション152jにおいて引き換えられるまたは「消費される」べきであることを指定する。一般に、先行するトランザクションは、プール154または任意のブロック151における任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクション152jが作成されるとき、またはネットワーク106に送信されるときですら、必ずしも存在しなくてよいが、先行するトランザクション152iは、現在のトランザクションが正当であるためには存在して正当性が確認される必要がある。したがって、本明細書における「先行する」は、ポインタによって結びつけられる論理的な順序における先行者を指し、時間的な順序における作成または送信の時間を必ずしも指さないので、トランザクション152i、152jが違う順序で作成または送信されることを必ずしも排除しない(オーファントランザクションについての以下の議論を参照されたい)。先行するトランザクション152iは、先祖トランザクションまたは先行トランザクションとも等しく呼ばれ得る。
現在のトランザクション152jの入力はまた、先行するトランザクション152iの出力がロックされる先のユーザ103aの署名を備える。そして、現在のトランザクション152jの出力は、暗号学的に新しいユーザ103bにロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義される額を、現在のトランザクション152jの出力において定義される新しいユーザ103bに移転することができる。いくつかの場合、トランザクション152は、複数のユーザ間で入力された額を分けるために、複数の出力を有し得る(釣銭を渡すために複数のユーザのうちの1人が元のユーザ103aであり得る)。いくつかの場合、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額を一緒に集めて、現在のトランザクションの1つまたは複数の出力に再分配するために、複数の入力を有し得る。
上記は「出力ベース」トランザクションプロトコルと呼ばれることがあり、未消費トランザクションプロトコル(UTXO)タイププロトコルと呼ばれることもある(この場合出力はUTXOと呼ばれる)。ユーザの総残高は、ブロックチェーンに記憶されているいずれの1つの数字によっても定義されず、代わりに、ユーザは、ブロックチェーン151における多くの異なるトランザクション152全体に散らばったユーザのすべてのUTXOの価値を照合するために、特別な「ウォレット」アプリケーション105を必要とする。
代替的なタイプのトランザクションプロトコルは、アカウントベーストランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれることがある。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOを参照することによってではなく、絶対的なアカウント残高を参照することによって、移転されるべき額を定義する。すべてのアカウントの現在の状態が、ブロックチェーンとは別にマイナーによって記憶され、定期的に更新される。そのようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して注文される。この値は、送信者によって暗号学的署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドも署名され得るトランザクション。このデータフィールドは、たとえば以前のトランザクションIDがデータフィールドに含まれる場合、以前のトランザクションを指し示し得る。
いずれのタイプのトランザクションプロトコルでも、ユーザ103が新しいトランザクション152jを規定することを望むとき、ユーザは自分のコンピュータ端末102からP2Pネットワーク106のノード104の1つ(これは今日では通常はサーバまたはデータセンターであるが、原理的には他のユーザ端末であり得る)に新しいトランザクションを送信する。このノード104は、ノード104の各々において適用されるノードプロトコルに従って、トランザクションが正当であるかどうかを確認する。ノードプロトコルの詳細は、一緒に全体のトランザクションモデルを形成する、対象のブロックチェーン150において使用されているトランザクションプロトコルのタイプに対応する。ノードプロトコルは通常、新しいトランザクション152jにおける暗号署名が予想される署名と一致することをノード104が確認することを必要とし、予想される署名は、トランザクション152の順序付けられたシーケンスにおける前のトランザクション152iに依存する。出力ベースの場合、これは、新しいトランザクション152jの入力に含まれるユーザの暗号学的署名が、新しいトランザクションが消費する先行するトランザクション152iの出力において定義される条件と一致するのを確認することを備えてもよく、この条件は通常、新しいトランザクション152jの入力における暗号学的署名が、新しいトランザクションの入力が指し示す以前のトランザクション152iの出力をアンロックすることを、少なくとも確認することを備える。いくつかのトランザクションプロトコルでは、この条件は、入力および/または出力に含まれるカスタムスクリプトによって少なくとも部分的に定義され得る。代替として、それは、単にノードプロトコルだけによって決められてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが正当である場合、現在のノードはそれをP2Pネットワーク106中のノード104の1つまたは複数の他のノードに転送する。これらのノード104の少なくともいくつかは、同じノードプロトコルに従って同じ試験を適用して転送ノード104Fとしても機能するので、新しいトランザクション152jを1つまたは複数のさらなるノード104に転送し、以下同様である。このようにして、新しいトランザクションは、ノード104のネットワーク全体に広められる。
出力ベースモデルでは、所与の出力(たとえば、UTXO)が消費されるかどうかの定義は、ノードプロトコルに従って、別の前方のトランザクション152jの入力によってまだ正当に引き換えられていないかどうかである。トランザクションが正当であるための別の条件は、そのトランザクションが消費することまたは引き換えることを試みる先行するトランザクション152iの出力が別の正当なトランザクションによってまだ消費されていない/引き換えられていないことである。やはり、正当ではない場合、トランザクション152jは、ブロックチェーンにおいて広められず、または記録されない。これは、消費者が一度よりも多く同じトランザクションの出力を消費しようとするような、二重消費を防ぐ。一方、アカウントベースモデルは、アカウント残高を維持することによって二重消費を防ぐ。やはり、トランザクションには定められた順序があるので、アカウント残高はいずれの1つの時間においても単一の定められた状態を有する。
正当性確認に加えて、ノード104Mの少なくとも一部はまた、マイニングとして知られているプロセスにおいてトランザクションのブロックを最初に作成するのを競い、これは「プルーフオブワーク」により支持される。マイニングノード104Mにおいて、新しいトランザクションが、ブロックにまだ現れていない正当なトランザクションのプールに追加される。マイナーは次いで、暗号学的パズルを解こうとすることによって、トランザクション154のプールからトランザクション152の新しい正当なブロック151を競って組み立てる。通常、これは、ノンスがトランザクション154のプールと連結されてハッシュされると、ハッシュの出力が所定の条件を満たすような、「ノンス」値を探すことを備える。たとえば、所定の条件は、ハッシュの出力がある事前に定められた数の先頭の0を有するということであり得る。ハッシュ関数の性質は、その入力に関して予測不可能な出力を有するというものである。したがって、この探索は、ブルートフォースによってのみ実行することができるので、パズルを解こうとしている各ノード104Mにおいてかなりの量の処理リソースを消費する。
パズルを解こうとする第1のマイナーノード104Mは、これをネットワーク106に告知して、ネットワーク中の他のノード104により後で容易に確認され得る証明として解を提供する(ハッシュに対する解が与えられると、その解によりハッシュの出力が条件を満たすようになることを確認するのは簡単である)。そして、勝者がパズルを解いたトランザクション154のプールは、ノード104の少なくとも一部が記憶ノード104Sとして機能することによって、各々のそのようなノードにおいて勝者の告知された解を確認したことに基づいて、ブロックチェーン150における新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーン中の以前に作成されたブロック151n-1を指し示す新しいブロック151nにも割り当てられる。プルーフオブワークは二重消費のリスクを減らすのを助け、それは、新しいブロック151を作成するために大量の労力を要するからであり、二重消費を含むあらゆるブロックが他のノード104によって拒絶される可能性があるので、マイニングノード104Mは、二重消費がそれらのブロックに含まれることを許容しないようにする動機を与えられる。ブロック151は、作成されると改変することができず、それは、同じプロトコルに従ってP2Pネットワーク106中の記憶ノード104Sの各々において認識され維持されるからである。ブロックポインタ155はまた、ブロック151に逐次的な順序を課す。トランザクション152は、P2Pネットワーク106中の各記憶ノード104Sにおける順序付けられたブロックに記録されるので、これはしたがって、トランザクションのイミュータブルな公開台帳を提供する。
任意の所与の時間においてパズルを競って解く異なるマイナー104Mは、それらがマイナーが解をいつ探し始めたかに応じて、任意の所与の時間においてマイニングされていないトランザクションプール154の異なるスナップショットに基づいて、それを行っていることがあることに留意されたい。それぞれのパズルを最初に解いた者が、どのトランザクション152が次の新しいブロック151nに含まれるかを定義し、マイニングされていないトランザクションの現在のプール154が更新される。マイナー104Mは次いで、新しく定義された顕著なプール154から競ってブロックを作成し続け、以下同様である。生じ得るあらゆる「フォーク」を解決するためのプロトコルも存在し、フォークとは、互いに非常に短い時間内に2名のマイナー104Mがパズルを解き、それにより、ブロックチェーンの矛盾した見方が広められるようになる状況である。つまり、フォークの歯のうちで最も長く伸びたものが、最終的なブロックチェーン150になる。
大半のブロックチェーンでは、勝利したマイナー104Mは、何もないところから新しい量のデジタル資産を作成する特別な種類の新しいトランザクションにより自動的に報酬を受ける(あるユーザから別のユーザにある額のデジタル資産を移転する普通のトランザクションとは対照的に)。したがって、勝利したノードは、ある量のデジタル資産を「マイニングした」と言われる。この特別なタイプのトランザクションは、「生成」トランザクションと呼ばれることがある。それは、新しいブロック151nの一部を自動的に形成する。この報酬は、プルーフオブワークの競争にマイナー104Mが参加する動機を与える。トランザクションが含まれていたブロック151nを作成した勝利したマイナー104Mにさらに報酬を与えるために、普通の(非生成)トランザクション152はしばしば、出力のうちの1つにおいて追加のトランザクションフィーも指定する。
マイニングに関与する計算リソースにより、通常、マイナーノード104Mの少なくとも各々が、1つまたは複数の物理サーバユニット、またはデータセンター全体すらも備えるサーバの形態をとる。各転送ノード104Mおよび/または記憶ノード104Sはまた、サーバまたはデータセンターの形態もとり得る。しかしながら、原理的には、任意の所与のノード104が、ユーザ端末または一緒にネットワーク接続されたユーザ端末のグループの形態をとり得る。
各ノード104のメモリは、それぞれの役割を実行してノードプロトコルに従ってトランザクション152を扱うために、ノード104の処理装置上で実行するように構成されるソフトウェアを記憶する。ここでノード104に帰すあらゆる行動は、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが、理解されるだろう。ノードソフトウェアは、アプリケーション層の1つもしくは複数のアプリケーション、またはオペレーティングシステム層もしくはプロトコル層などのより低次の層、またはこれらの任意の組合せにおいて、実装され得る。また、本明細書において使用されるような「ブロックチェーン」という用語は、この種の技術を全般に指す汎用的な用語であり、どのような特定のプロプライエタリブロックチェーン、プロトコル、またはサービスにも限定されない。
消費するユーザの役割を果たす複数の当事者103の各々のコンピュータ機器102も、ネットワーク101に接続される。これらは、トランザクションにおける支払者および被支払者として機能するが、他の当事者の代わりにトランザクションをマイニングすることまたは広めることに必ずしも参加しない。それらは必ずしもマイニングプロトコルを実行しない。第1の当事者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ機器102bという、2名の当事者103およびそれらのそれぞれの機器102が、例示を目的に示されている。さらにより多くのそのような当事者103およびそれらのそれぞれのコンピュータ機器102が、システムに存在して参加していてもよいが、便宜的にそれらは示されていないことが理解されるであろう。各当事者103は、個人または組織であり得る。純粋に例示として、第1の当事者103aは本明細書ではAliceと呼ばれ、第2の当事者103bはBobと呼ばれるが、これは限定的ではなく、AliceおよびBobへの本明細書でのあらゆる言及は、それぞれ「第1の当事者」および「第2の当事者」で置き換えられ得ることが理解されるだろう。
各当事者103のコンピュータ機器102は、1つまたは複数のプロセッサ、たとえば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを備える、それぞれの処理装置を備える。各当事者103のコンピュータ機器102はさらに、メモリ、すなわち非一時的コンピュータ可読媒体の形式のコンピュータ可読ストレージを備える。このメモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光学ディスクドライブなどの光学媒体を利用する、1つまたは複数のメモリユニットを備え得る。各当事者103のコンピュータ機器102上のメモリは、処理装置上で実行するようになされる少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを備えるソフトウェアを記憶する。本明細書において所与の当事者103に帰するあらゆる行動が、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されるだろう。各当事者103のコンピュータ機器102は、少なくとも1つのユーザ端末、たとえば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを備える。所与の当事者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの、1つまたは複数の他のネットワーク接続されたリソースを備え得る。
クライアントアプリケーション105は最初に、適切なコンピュータ可読記憶媒体上の任意の所与の当事者103のコンピュータ機器102に提供され、たとえば、サーバからダウンロードされ、または、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープなどのリムーバブル記憶デバイス、CDもしくはDVD ROMなどの光学ディスク、またはリムーバブル光学ドライブなどで提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには2つの主要な機能がある。これらのうちの1つは、ノード104のネットワーク全体に広められてそれによりブロックチェーン150に含められるように、トランザクション152をそれぞれのユーザ当事者103が作成し、署名し、送信するのを可能にすることである。もう1つは、それぞれの当事者に、当事者が現在所有するデジタル資産の額を報告することである。出力ベースシステムでは、この第2の機能は、対象の当事者に属するブロックチェーン150全体に散らばった様々なトランザクション152に出力において定義される額を照合することを備える。
注意:様々なクライアント機能は、所与のクライアントアプリケーション105へと統合されるものとして説明されることがあるが、これは、必ずしも限定するものではなく、代わりに、本明細書において説明される任意のクライアント機能は、2つ以上の別々のアプリケーションのスイートにおいて実装されてもよく、たとえば、それらのアプリケーションは、APIを介してインターフェースし、または一方が他方へのプラグインである。より一般的には、クライアントの機能は、アプリケーション層において、もしくはオペレーティングシステムなどのより低次の層において、またはこれらの任意の組合せで実装され得る。以下は、クライアントアプリケーション105に関して説明されるが、これは限定するものではないことが理解されるだろう。
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、P2Pネットワーク106の転送ノード104Fのうちの少なくとも1つに動作可能に結合される。これは、クライアント105のウォレット機能がトランザクション152をネットワーク106に送信することを可能にする。クライアント105はまた、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150にクエリするために(またはブロックチェーン150における他の当事者のトランザクションを実際に調査するために、なぜなら実施形態では、ブロックチェーン150は、トランザクションが公に目に見えるものであることにより一部トランザクションに信用を与える公的機関であるからである)、記憶ノード104のうちの1つ、一部、またはすべてに接触することが可能である。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従って、トランザクション152を編成して送信するように構成される。各ノード104は、ノードプロトコルに従ってトランザクション152の正当性を確認して、転送ノード104Fの場合、ネットワーク106全体にトランザクションを広めるためにトランザクション152を転送するように構成される、ソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは、所与のノードプロトコルに付随し、一緒に所与のトランザクションモデルを実装する。同じトランザクションプロトコルが、ブロックチェーン150におけるすべてのトランザクション152のために使用される(しかし、トランザクションプロトコルは、その中で異なるサブタイプのトランザクションを許容し得る)。同じノードプロトコルが、ネットワーク106中のすべてのノード104によって使用される(しかし、同じノードプロトコルが、そのサブタイプのために定義される規則に従って異なるようにトランザクションの異なるサブタイプを扱ってもよく、また、異なるノードが異なる役割を引き受け、したがってプロトコルの異なる対応する態様を実装してもよい)。
言及されたように、ブロックチェーン150はブロック151のチェーンを備え、各ブロック151は、前に論じられたようにプルーフオブワークプロセスによって作成された1つまたは複数のトランザクション152のセットを備える。各ブロック151はまた、ブロック151に対する逐次的な順序を定義するために、チェーン中の以前に作成されたブロック151を指し示すブロックポインタ155を備える。ブロックチェーン150はまた、プルーフオブワークプロセスによって新しいブロックに含められるのを待機している正当なトランザクション154のプールを備える。各トランザクション152(生成トランザクション以外)は、トランザクションのシーケンスに対する順序を定義するために、以前のトランザクションへのポインタを備える(トランザクション152のシーケンスは分岐することが許容されることに留意されたい)。ブロック151のチェーンは、チェーンにおける最初のブロックであったジェネシスブロック(Gb)153まで戻る。チェーン150において初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示していた。
所与の当事者103、たとえばAliceが、ブロックチェーン150に含められるように新しいトランザクション152jを送信することを望むとき、彼女は(自分のクライアントアプリケーション105のウォレット機能を使用して)関連するトランザクションプロトコルに従って新しいトランザクションを編成する。彼女は次いで、自分が接続される1つまたは複数の転送ノード104Fのうちの1つにクライアントアプリケーション105からトランザクション152を送信する。たとえば、これは、Aliceのコンピュータ102に最も近い、または最良に接続される転送ノード104Fであり得る。任意の所与のノード104が新しいトランザクション152jを受信すると、そのノードは、ノードプロトコルにおよびそのそれぞれの役割に従ってそのトランザクションを扱う。これは、新しく受信されたトランザクション152jが「正当」であるためのいくつかの条件を満たすかどうかをまず確認することを備え、その例はまもなくより詳しく論じられる。いくつかのトランザクションプロトコルにおいて、正当であるための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替として、条件は単に、ノードプロトコルに備わった特徴であってもよく、またはスクリプトおよびノードプロトコルの組合せによって定義されてもよい。
新しく受信されたトランザクション152jが正当であると見なされるための試験に合格するという条件(すなわち、それが「正当性が確認される」という条件)では、トランザクション152jを受信するあらゆる記憶ノード104Sが、そのノード104Sにおいて維持されるブロックチェーン150のコピーにおいて、正当性が確認された新しいトランザクション152をプール154に追加する。さらに、トランザクション152jを受信するあらゆる転送ノード104Fが、P2Pネットワーク106において1つまたは複数の他のノード104に正当性が確認されたトランザクション152を前方に広める。各転送ノード104Fは同じプロトコルを適用するので、トランザクション152jが正当であると仮定すると、これは、P2Pネットワーク106全体にわたってそのトランザクションがまもなく広められることを意味する。
マイナーノード104Mは、1つまたは複数の記憶ノード104において維持されるブロックチェーン150のコピーにおいてプール154に入れられると、新しいトランザクション152を含むプール154の最新バージョンについてプルーフオブワークパズルを競って解き始める(他のマイナー104Mがまだプール154の古い見方に基づいてパズルを解こうとしていることがあるが、そこに最初に到達した者が、次の新しいブロック151がどこで終了して新しいプール154がどこで開始するかを定義し、最終的に、Aliceのトランザクション152jを含むプール154の一部のためのパズルを誰かが解く)。プルーフオブワークが新しいトランザクション152jを含むプール154のために行われると、そのトランザクションはイミュータブルに、ブロックチェーン150の中のブロック151のうちの1つの一部になる。各トランザクション152は、より早いトランザクションへのポインタを備えるので、トランザクションの順序もイミュータブルに記録される。
異なるノード104は、所与のトランザクションの異なるインスタンスを最初に受信することがあるので、あるインスタンスがブロック150へとマイニングされる前には、どのインスタンスが「正当」であるかについて矛盾した見方を有することがあり、マイニングされた時点で、マイニングされたインスタンスが唯一の正当なインスタンスであるとすべてのノード104が合意する。ノード104が、正当であるものとして1つのインスタンスを受け入れ、第2のインスタンスがブロックチェーン150に記憶されていることを発見する場合、そのノード104はこれを受け入れなければならず、それが最初に受け入れたマイニングされていないインスタンスを廃棄する(すなわち、正当ではないものとして扱う)。
UTXOベースモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースプロトコルの例である。トランザクション152(「Tx」と省略される)は、ブロックチェーン150の基本データ構造である(各ブロック151は1つまたは複数のトランザクション152を備える)。以下は、出力ベースまたは「UTXO」ベースプロトコルに言及して説明される。しかしながら、これはすべての、可能性のある実施形態を限定するものではない。
UTXOベースモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202、および1つまたは複数の出力203を備えるデータ構造を備える。各出力203は、未消費トランザクション出力(UTXO)を備え得るが、これは、別の新しいトランザクションの入力202のソースとして使用され得る(UTXOがまだ引き換えられていない場合)。UTXOは、デジタル資産の額を指定する値を含む。これは、(分散型)台帳上の設定された数のトークンを表す。UTXOはまた、情報の中でもとりわけ、UTXOの由来であるトランザクションのトランザクションIDも含み得る。トランザクションデータ構造はまた、ヘッダ201を備えてもよく、これは、入力フィールド202および出力フィールド203のサイズを示すものを備えてもよい。ヘッダ201はまた、トランザクションのIDを含み得る。実施形態では、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、マイナー104Mに出される生のトランザクション152のヘッダ201に記憶される。
たとえば、Alice103aが、対象の額のデジタル資産をBob103bに移転するトランザクション152jを作成することを望むとする。図2において、Aliceの新しいトランザクション152jは「Tx1」とラベリングされる。それは、シーケンスにおいて先行するトランザクション152iの出力203においてAliceにロックされるデジタル資産の額をとり、その少なくとも一部をBobに移転する。図2では、先行するトランザクション152iは「Tx0」とラベリングされる。Tx0およびTx1は恣意的なラベルにすぎない。それらは、Tx0がブロックチェーン151の最初のトランザクションであることも、Tx1がプール154においてすぐ次のトランザクションであることも必ずしも意味しない。Tx1は、Aliceにロックされている未消費の出力203をまだ有する任意の先行する(すなわち、先祖)トランザクションを指し示し得る。
先行するトランザクションTx0は、Aliceが自分の新しいトランザクションTx1を作成する時点で、または少なくとも彼女がそれをネットワーク106に送信するときまでには、すでに正当性が確認されておりブロックチェーン150に含まれていることがある。それは、その時点でブロック151のうちの1つにすでに含まれていることがあり、またはプール154においてまだ待機していることがあり、その場合、それはまもなく新しいブロック151に含まれる。代替として、Tx0およびTx1は、作成されてネットワーク102に一緒に送信されてもよく、または、ノードプロトコルが「オーファン」トランザクションのバッファリングを許容する場合、Tx0はTx1の後に送信されることすらあってもよい。トランザクションのシーケンスの文脈で本明細書において使用される「先行する」および「後続の」という用語は、トランザクションにおいて指定されるトランザクションポインタによって定義されるような、シーケンスにおけるトランザクションの順序を指す(どのトランザクションがどの他のトランザクションを指し示すか、など)。それらは、「先行者」および「後継者」、または「先祖」および「子孫」、「親」および「子」などで等しく置き換えられ得る。それは、それらが作成される順序、ネットワーク106に送信される順序、または任意の所与のノード104に到達する順序を必ずしも示唆しない。それでも、先行するトランザクション(先祖トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションの正当性が確認されるまで、かつそうされない限り、正当性が確認されない。親より前にノード104に到達する子は、オーファンであると見なされる。オーファンノードは、ノードプロトコルおよび/またはマイナー挙動に応じて、廃棄されてもよく、または親を待機するためにある時間の間バッファリングされてもよい。
先行するトランザクションTx0の1つまたは複数の出力203のうちの1つが、ここではUTXO0とラベリングされる、特定のUTXOを備える。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、後続のトランザクションの正当性が確認されるために、したがってUTXOの引き換えが成功するために、後続のトランザクションの入力202においてアンロッキングスクリプトによって満たされなければならない条件を定義するロッキングスクリプトとを備える。通常、ロッキングスクリプトは、その額を特定の当事者(ロッキングスクリプトが含まれるトランザクションの受益者)にロックする。すなわち、ロッキングスクリプトは、後続のトランザクションの入力におけるアンロッキングスクリプトが、先行するトランザクションがロックされる先の当事者の暗号学的署名を備えるという条件を通常は備える、アンロッキング条件を定義する。
ロッキングスクリプト(scriptPubKeyとしても知られている)は、ノードプロトコルによって認識されるドメイン固有言語で書かれたコードの断片である。そのような言語の特定の例は「Script」(大文字S)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を消費するために何の情報が必要とされるか、たとえばAliceの署名の要件を指定する。アンロッキングスクリプトは、トランザクションの出力に現れる。アンロッキングスクリプト(scriptSigとしても知られている)は、ロッキングスクリプト基準を満たすために必要とされる情報を提供するドメイン固有言語で書かれたコードの断片である。たとえば、それはBobの署名を含み得る。アンロッキングスクリプトは、トランザクションの入力202に現れる。
よって、示される例では、Tx0の出力203の中のUTXO0は、UTXO0が引き換えられるようにするために(厳密には、UTXO0を引き換えようとする後続のトランザクションが正当であるために)Aliceの署名Sig PAを必要とする、ロッキングスクリプト[Checksig PA]を備える。[Checksig PA]は、Aliceの公開鍵-秘密鍵のペアからの公開鍵PAを含む。Tx1の入力202は、(たとえば、実施形態においては全体のトランザクションTx0のハッシュである、Tx1のトランザクションID、TxID0によって)Tx1を指し示すポインタを備える。Tx1の入力202は、Tx0のあらゆる他のあり得る出力の中からUTXO0を特定するために、Tx0内のUTXO0を特定するインデックスを備える。Tx1の入力202はさらに、Aliceが鍵のペアからの自分の秘密鍵をデータのあらかじめ定められた部分(暗号学では「メッセージ」と呼ばれることがある)に適用することによって作成される、Aliceの暗号学的署名を備えるアンロッキングスクリプト<Sig PA>を備える。正当な署名を提供するためにどのデータ(または「メッセージ」)がAliceによって署名される必要があるかは、ロッキングスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
新しいトランザクションTx1がノード104に到達すると、ノードはノードプロトコルを適用する。これは、ロッキングスクリプトおよびアンロッキングスクリプトを一緒に実行して、アンロッキングスクリプトがロッキングスクリプトにおいて定義された条件を満たすかどうかを確認することを備える(この場合、この条件は1つまたは複数の基準を備え得る)。実施形態において、これは、2つのスクリプトを連結することを伴い、
<Sig PA><PA>||[Checksig PA]
ここで「||」は連結を表し、「<...>」はスタックにデータを置くことを意味し、「[...]」はアンロッキングスクリプトに含まれる関数である(この例ではスタックベース言語)。等価的に、スクリプトを連結するのではなく、スクリプトは、一般的なスタックを用いて、交互に実行されてもよい。いずれの方法でも、一緒に実行されると、スクリプトは、Tx1の入力の中のロッキングスクリプトがデータの予想される部分に署名するAliceの署名を含むことを認証するために、Tx0の出力の中のロッキングスクリプトに含まれるような、Aliceの公開鍵PAを使用する。この認証を実行するために、データの予想される部分自体(「メッセージ」)もTx0に含まれる必要がある。実施形態では、署名されたデータはTx0の全体を備える(よって、データの署名された部分を平文で指定する別個の要素は含まれる必要がなく、それは、その署名された部分はもともと存在しているからである)。
公開-秘密鍵暗号による認証の詳細は、当業者には馴染深いものである。基本的に、Aliceが自分の秘密鍵でメッセージを暗号化することによってメッセージに署名した場合、Aliceの公開鍵および平文のメッセージ(暗号化されていないメッセージ)が与えられれば、ノード104などの別のエンティティは、メッセージの暗号化されたバージョンがAliceによって署名されたに違いないことを認証することが可能である。署名することは通常、メッセージをハッシュすること、ハッシュに署名すること、およびこれを署名としてメッセージの平文バージョンへとタグ付けすることを備えるので、公開鍵のあらゆる保有者が署名を認証することを可能にする。したがって、特定のデータまたはトランザクションの部分などに署名することへの本明細書でのあらゆる言及は、実施形態では、そのデータまたはトランザクションの一部のハッシュに署名することを意味し得ることに留意されたい。
Tx1におけるアンロッキングスクリプトがTx0のロッキングスクリプトにおいて指定される1つまたは複数の条件を満たす場合(よって示される例では、Aliceの署名がTx1において提供され認証される場合)、ノード104はTx1を正当であると見なす。ノード104がマイニングノード104Mである場合、これは、ノード104がそれを、プルーフオブワークを待機しているトランザクション154のプールに追加することを意味する。ノード104が転送ノード104Fである場合、ノード104がトランザクションTx1をネットワーク106中の1つまたは複数の他のノード104に転送するので、トランザクションTx1はネットワーク全体に広められる。Tx1の正当性が確認されてブロックチェーン150に含められると、これは、消費されるものとしてTx0からのUTXO0を定義する。Tx1は、それが未消費のトランザクション出力203を消費する場合にのみ正当であり得ることに留意されたい。別のトランザクション152によってすでに消費されている出力をそれが消費することを試みる場合、すべての他の条件が満たされている場合であっても、Tx1は正当ではない。したがって、ノード104はまた、先行するトランザクションTx0における参照されたUTXOがすでに消費されている(正当な入力を別の正当なトランザクションへとすでに形成した)かどうかを確認する必要もある。これは、トランザクション152に対して定められた順序をブロックチェーン150が課すことが重要である1つの理由である。実際には、所与のノード104は、トランザクション152が消費されたUTXO203をマークする別個のデータベースを維持してもよいが、究極的には、UTXOが消費されたかどうかを定めるものは、ノード104がブロックチェーン150において正当な入力を別の正当なトランザクションへとすでに形成したかどうかである。
所与のトランザクション152のすべての出力203において指定される総額が、そのすべての入力202により指し示される総額より大きい場合、これは、大半のトランザクションモデルにおいて、正当ではないことの別の根拠である。したがって、そのようなトランザクションは、広められず、ブロック151へとマイニングもされない。
UTXOベーストランザクションモデルでは、所与のUTXOが全体として消費される必要があることに留意されたい。UTXOは、UTXOにおいて定義される額の一部を、別の一部が消費された状態で「置き去りにする」ことができない。しかしながら、UTXOからの額は、次のトランザクションの複数の出力の間で分割され得る。たとえば、Tx0の中のUTXO0において定義される額は、Tx1の中の複数のUTXOの間で分割され得る。したがって、AliceがUXTO0において定義された額のすべてをBobに与えることを望まない場合、彼女は、その残りを使用して、Tx1の第2の出力において釣銭を自分自身に与え、または別の当事者に支払うことができる。
実際には、Aliceは普通は、勝利したマイナーのためのフィーを含める必要もあり、それは、今日では、生成トランザクションの報酬だけでは、マイニングを動機付けるのに通常は不十分であるからである。Aliceがマイナーのためのフィーを含めない場合、Tx0は、マイナーノード104Mによって拒絶される可能性が高いので、技術的に正当であっても、それはブロックチェーン150において広められず含められない(マイナープロトコルは、マイナー104Mが望まない場合、トランザクション152を受け入れるようにマイナー104Mに強いることはない)。いくつかのプロトコルでは、マイニングフィーは、その固有の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、入力202によって指し示される総額と、所与のトランザクション152の出力203において指定される総額とのあらゆる差が、勝利したマイナー104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1が唯一の出力UTXO1を有するとする。UTXO0において指定されるデジタル資産の額がUTXO1において指定される額より大きい場合、差は自動的に勝利したマイナー104Mに行く。しかしながら、代替または追加として、マイナーフィーがトランザクション152のUTXO203のうちの固有の1つにおいて明確に指定され得ることは、必ずしも排除されない。
AliceおよびBobのデジタル資産は、ブロックチェーン150のどこかの任意のトランザクション152において彼らにロックされた未消費のUTXOからなる。したがって、通常、所与の当事者103の資産は、ブロックチェーン150全体の様々なトランザクション152のUTXO全体に散らばっている。所与の当事者103の総残高を定義する1つの数字は、ブロックチェーン150のどこにも記憶されていない。それぞれの当事者にロックされ、別の前方のトランザクションにおいてまだ消費されていないすべての様々なUTXOの値を一緒に照合することが、クライアントアプリケーション105のウォレット機能の役割である。それは、このことを、記憶ノード104S、たとえばそれぞれの当事者のコンピュータ機器102に最も近い、または最良に接続される記憶ノード104Sのいずれかに記憶されているようなブロックチェーン150のコピーをクエリすることによって、行うことができる。
スクリプトコードはしばしば、概略的に表される(すなわち、実際の言語ではない)ことに留意されたい。たとえば、[Checking PA]=OP_DUP OP_HASH160<H(PA)>OP_EQUALVERIFY OP_CHECKSIGを意味するために、[Checksig PA]と書くことがある。「OP_...」は、Script言語の特定のオペコードを指す。OP_CHECKSIG(「Checking」とも呼ばれる)は、2つの入力(署名および公開鍵)を受け入れて楕円曲線デジタル署名アルゴリズム(ECDSA)を使用して署名の正当性を検証するScriptオペコードである。実行時に、署名のあらゆる発生(「sig」)がスクリプトから除去されるが、ハッシュパズルなどの追加の要件が、「sig」入力において検証されるトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを記憶し、それによりメタデータをイミュータブルにブロックチェーン150に記録することができる、トランザクションの消費不可能な出力を作成するためのScript言語のオペコードである。たとえば、メタデータは、ブロックチェーンに記憶することが望まれる文書を備え得る。
署名PAはデジタル署名である。実施形態において、これは、楕円曲線secp256k1を使用したECDSAに基づく。デジタル署名は特定のデータに署名する。実施形態において、所与のトランザクションに対して、署名は、トランザクション入力の一部、およびトランザクション出力のすべてまたは一部に署名する。それが署名する出力の具体的な部分は、SIGHASHフラグに依存する。SIGHASHフラグは、どの出力が署名される(およびしたがって署名の時に固定される)かを選択するために、署名の最後に含まれる4バイトコードである。
ロッキングスクリプトは「scriptPubKey」と呼ばれることがあり、これは、それぞれのトランザクションがロックされる先の当事者の公開鍵を備えるという事実を指している。アンロッキングスクリプトは「scriptSig」と呼ばれることがあり、これは、それが対応する署名を供給するという事実を指している。しかしながら、より一般的には、ブロックチェーン150のすべてのアプリケーションにおいて、UTXOが引き換えられるための条件が署名を認証することを備えることは、必須ではない。より一般的には、スクリプト言語は、任意の1つまたは複数の条件を定義するために使用され得る。したがって、より一般的な用語「ロッキングスクリプト」および「アンロッキングスクリプト」が好まれることがある。
任意選択のサイドチャネル
図3は、ブロックチェーン150を実装するためのさらなるシステム100を示す。追加の通信機能が伴うことを除き、システム100は実質的に、図1に関連して説明されたものと同じである。AliceおよびBobのコンピュータ機器102a、102bの各々のクライアントアプリケーションは、それぞれ、追加の通信機能を備える。すなわち、それは、Alice103aが(いずれかの当事者または第三者の勧めにより)Bob103bとの別個のサイドチャネル301を確立するのを可能にする。サイドチャネル301は、P2Pネットワークから切り離したデータの交換を可能にする。そのような通信は、「オフチェーン」と呼ばれることがある。たとえば、これは、AliceおよびBobのうちの一方がトランザクション152をネットワーク106にブロードキャストすることを選ぶまで、トランザクションがP2Pネットワーク106上で(まだ)公表されることなく、またはチェーン150に入ることなく、トランザクション152をAliceとBobの間で交換するために使用され得る。追加または代替として、サイドチャネル301は、鍵、交渉された額または条件、データコンテンツなどの、任意の他のトランザクション関連データを交換するために使用され得る。
サイドチャネル301は、P2Pオーバーレイネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替または追加として、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはAliceのデバイス102aとBobのデバイス102bとの間の直接の有線リンクもしくはワイヤレスリンクすらも介して確立され得る。一般に、本明細書の他の箇所で言及されるようなサイドチャネル301は、「オフチェーン」で、すなわちP2Pオーバーレイネットワーク106から切り離してデータを交換するための、1つまたは複数のネットワーキング技術または通信媒体を介した任意の1つまたは複数のリンクを備え得る。1つより多くのリンクが使用される場合、オフチェーンリンクの束または集合体が全体として、サイドチャネル301と呼ばれ得る。したがって、AliceおよびBobがサイドチャネル301を介してある情報またはデータなどを交換すると言われる場合、これは、すべてのこれらのデータが、厳密に同じリンクを介して送信されなければならないこと、または同じタイプのネットワークを介して送信されなければならないことすらも、必ずしも示唆しないことに留意されたい。
クライアントソフトウェア
図4Aは、ここで開示されるスキームの実施形態を実装するためのクライアントアプリケーション105の例示的な実装形態を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)層402を備える。トランザクションエンジン401は、クライアント105の背後にあるトランザクション関連機能を実装するように、たとえば、上で論じられたスキームに従ってまもなくさらに詳しく論じられるように、トランザクション152を編成し、サイドチャネル301を介してトランザクションおよび/もしくは他のデータを受信および/もしくは送信し、かつ/またはP2Pネットワーク106を通じて広められるようにトランザクションを送信するように構成される。
UI層402は、機器102のユーザ出力手段を介してそれぞれのユーザ103に情報を出力すること、および機器102のユーザ入力手段を介してそれぞれのユーザ103から入力を受け取ることを含む、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成される。たとえば、ユーザ出力手段は、視覚出力を提供するための1つまたは複数のディスプレイ画面(タッチスクリーンまたは非タッチスクリーン)、オーディオ出力を提供するための1つまたは複数のスピーカー、および/または接触出力を提供するための1つまたは複数のハプティック出力デバイスなどを備え得る。ユーザ入力手段は、たとえば、1つもしくは複数のタッチスクリーンの入力アレイ(出力手段のために使用されるものと同じまたは異なる)、マウス、トラックパッド、もしくはトラックボールなどの1つもしくは複数のカーソルベースのデバイス、発話もしくは音声入力を受け取るための1つもしくは複数のマイクロフォンおよび発話もしくは音声認識アルゴリズム、手もしくは体のジェスチャの形式で入力を受け取るための1つもしくは複数のジェスチャベースの入力デバイス、または1つもしくは複数の機械的なボタン、スイッチ、もしくはジョイスティックなどを備え得る。
注意:本明細書における様々な機能は、同じクライアントアプリケーション105へと統合されるものとして説明されることがあるが、これは必ずしも限定するものではなく、代わりに、それらは2つ以上の別個のアプリケーションのスイートで実装されてもよく、たとえば、一方が他方へのプラグインであり、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースしている。たとえば、トランザクションエンジン401の機能は、UI層402とは別個のアプリケーションにおいて実装されてもよく、または、トランザクションエンジン401などの所与のモジュールの機能は、1つより多くのアプリケーション間で分割され得る。説明された機能の一部またはすべてが、たとえば、オペレーティングシステム層において実装され得ることも排除されない。単一または所与のアプリケーション105などへの言及が本明細書のどこかで行われる場合、これは例にすぎず、より一般的には、説明された機能は任意の形式のソフトウェアで実装され得ることが理解されるだろう。
図4Bは、Aliceの機器102aのクライアントアプリケーション105aのUI層402によってレンダリングされ得るユーザインターフェース(UI)400の例のモックアップを与える。同様のUIが、Bobの機器102bまたは任意の他の当事者の機器のクライアント105bによってレンダリングされてもよいことが、理解されるだろう。
例示として、図4BはAliceの視点からUI400を示す。UI400は、ユーザ出力手段を介して別個のUI要素としてレンダリングされる1つまたは複数のUI要素411、412、413を備え得る。
たとえば、UI要素は、1つまたは複数のユーザ選択可能要素411を備えてもよく、これらは、様々な画面上ボタン、またはメニュー中の様々なオプションなどであってもよい。ユーザ入力手段は、画面上のUI要素をクリックもしくはタッチすること、または所望のオプションの名前を話すことなどによって、ユーザ103(この場合はAlice103a)がオプションのうちの1つを選択し、または別様に操作することを可能にするようになされる(本明細書において使用される「手動」という用語は、自動と対比することのみが意図されており、手を使用することに必ずしも限定されないことに留意されたい)。オプションは、ユーザ(Alice)がトランザクションを生成してそれらを別のユーザ(Bob)に送信することと、説明された実施形態に従ってトランザクションの署名を生成することとを可能にする。
代替または追加として、UI要素は1つまたは複数のデータエントリフィールド412を備えてもよく、それらを通じて、生成されたトランザクションに含まれるべきデータおよび/または署名されるべきメッセージをユーザが入力できる。これらのデータエントリフィールドは、ユーザ出力手段を介して、たとえば画面上にレンダリングされ、データは、ユーザ入力手段、たとえばキーボードまたはタッチスクリーンを通じて、フィールドへと入力され得る。代替として、データは、たとえば発話認識に基づいて、口頭で受け取られ得る。
代替または追加として、UI要素は、ユーザに情報を出力するための1つまたは複数の情報要素413を備え得る。たとえば、これ/これらは画面にまたは可聴にレンダリングされ得る。
様々なUI要素をレンダリングし、オプションを選択し、データを入力する具体的な手段は、必須ではないことが理解されるだろう。これらのUI要素の機能は、まもなくより詳しく論じられる。図4Bに示されるUI400は、概略的なモックアップにすぎず、実際には、簡潔にするために示されていない1つまたは複数のさらなるUI要素を備えてもよいことも理解されるだろう。
準備/用語
コインシリアル番号
コインシリアル番号は、発行されたデジタルコインの一意な識別子(たとえば、紙幣の通し番号に類似した)として定義される。コインシリアル番号は、2つの等価なシリアル番号が生成される確率が最小限となるように、疑似ランダム関数を使用してユーザによって計算される整数によって表される。
ブラインディングされたコイン
コインのシリアル番号が、コインをブラインディングする計算への入力を知らない何者かにより計算することが現実的ではない場合、コインはブラインディングされている。
コインのアンブラインディング
ブラインディングされたコインは、コインのブラインディングされたシリアル番号にブラインディング関数の逆関数を適用することによってアンブラインディングされ得る。
ブラインド署名
ブラインド署名は、署名者が、自分が署名しているメッセージを知らないような署名であり、すなわち、署名者は「ブラインディングされたメッセージ」に署名する。その結果、ブラインド署名が、対応するアンブラインディングされたメッセージに対して依然として正当である。
二重消費値
この値は、ユーザAliceがコインを二重消費する場合にのみ、彼女を特定することができる。すなわち、Aliceが正当に行動している場合、彼女を特定するための計算的に実現可能な方法はない。一方、彼女が単一のコインを二重消費する場合、彼女を特定するために二重消費式が使用され得る。事実上、これは、彼女が二重消費する場合、コインの各消費において明らかにされる情報から彼女の識別情報を計算することが可能であることを意味する。明らかにされる情報は、彼女の銀行口座番号、公開鍵、または彼女の識別情報に対応する他の値であり得る。文脈のために以下の例が与えられる。ある例示的なシステムにおいて、二重消費の場合に、二重消費者の銀行口座番号uが明らかにされる。コインを受け取る者(たとえば、業者)は、ハッシュ関数のいくつかの原像を取得し、これは、コインのシリアル番号を計算するために使用される。銀行に与えられる原像は、
Figure 2023522258000002
のいずれかであり、aは引き出しの時点でAliceによって選ばれる何らかの定数であり、uはビット長luのAliceの口座番号であり、Jは彼女の口座の初期残高であり、iは彼女が消費したコインの数のカウンタである。
Figure 2023522258000003
はXOR演算であり、||は連結であることに留意されたい。Aliceが二重消費する場合、銀行は、「二重消費式」または「二重消費値」と呼ばれるこれらの両方の値の知識を有し、これらの2つの用語は交換可能に使用される。よって、銀行がこれらの値を有すると、銀行は第2の式においてaを取り除いてAliceの口座番号を見つけ出すことができる。これは、やはり単純なXORであるXORの逆演算を使用して第1の値を第2の値に適用することによって行われ、
Figure 2023522258000004
これから、銀行は、結果の最初のluビットを読み取ることによってAliceの口座番号を得るので、銀行は彼女の身元を知る。彼女が二重消費しない場合、銀行は、上の値のうちの1つしか知らないので、彼女の識別情報を導くことができないことに留意されたい。
安全素数
安全素数は、p'も素数としてp=2p'+1と書くことができる素数pである。
RSAモジュラス
RSAモジュラスは、p1およびp2が素数であるようなn=p1・p2として定義される。
特別RSAモジュラス
RSAモジュラスn=p1・p2は、p1=2p'1+1およびp2=2p'2+1が安全素数である場合「特別」と呼ばれる。
平方剰余
Figure 2023522258000005
を仮定して、b2≡a mod nであるような要素
Figure 2023522258000006
が存在する場合、aはnを法とする平方剰余と呼ばれる。これらの平方剰余の集合を
Figure 2023522258000007
と呼ぶ。nがRSAモジュラスである場合、nの因数分解を知ることなく、b2≡a mod nが与えられたときにbを計算するのは計算的に難しい。nがRSAモジュラスである場合、ランダムに選ばれた要素が平方剰余である確率は厳密に1/4であることに留意されたい。
生成元
次数nの群Gを仮定すると、群の要素g∈Gは、群演算を使用したそれ自体の反復的な適用が群G自体をもたらす場合、生成元である。これはG=<g>によって表記され、gは生成元である。このように生成され得る群は、「巡回」と呼ばれる。
以下では、巡回群であり以下のセクション全体で関連がある、2つの群を導入する。
第1の群がGにより表記され、素数位数qを有する要素gによって生成される。Decisional Diffie-Hellman問題は難しいと考えられ、これは、guが与えられたときにuを計算するのが難しいことを意味する。この群は、例示的なスキームのいくつかで公開鍵と秘密鍵のペアを導出する際に使用され、以下で説明されるDodis-Yampolskiy(DY)疑似ランダム関数においても使用される。DY関数は、コインシリアル番号および二重消費式を計算するために使用され得る。
第2の群は、要素
Figure 2023522258000008
によって生成され素数位数q'を有する、
Figure 2023522258000009
により表記される。この要素は、nを法とする平方剰余であり、n=p1p2は特別RSAモジュラスである。群
Figure 2023522258000010
の一般的な要素は、
Figure 2023522258000011
より表記される。この群は、Pedersen Commitmentを使用して、秘密をコミットするために使用されることが可能であり、銀行により使用される署名スキームにおいて使用されることがある。
Pedersen commitment
Figure 2023522258000012
Figure 2023522258000013
であり、
Figure 2023522258000014
がnを法とする平方剰余であり、次数q'の
Figure 2023522258000015
生成元であると仮定すると、正の整数x1,...,xm∈[0,n)のPedersen commitmentは、
Figure 2023522258000016
と定義され、rはランダムに生成される整数である。rおよびxiは、群の次数より小さくなるように制限されることに留意されたい。
Camenisch-Lysyanskaya(CL)署名
ユーザが、メッセージの明確な値を共有することなく、l個のメッセージに対する第三者による署名を望むと想定することができる。メッセージのリストは、(x1,...,xl)∈(0,min(n,n'))によりラベリングすることができ、min(n,n')はnおよびn'の小さい方の値であり、nおよびn'はそれぞれ、群
Figure 2023522258000017
および
Figure 2023522258000018
の次数である。メッセージの署名者は公開鍵(n,a1,...,al,b,c)を有し、
Figure 2023522258000019
は署名されるべきメッセージのブロックの長さであり、
Figure 2023522258000020
Figure 2023522258000021
の生成元であり、nは特別RSAモジュラスであり、署名者の秘密鍵はp1であり、これは署名者だけがn=p1・p2の因数分解を知っていることを示唆する。加えて、
Figure 2023522258000022
Figure 2023522258000023
であり、
Figure 2023522258000024
であり、n'は何らかの整数であると想定することができる。
Pedersen commitmentでコミットされた値(x1,...,xl)に対するCL署名を得るために、以下のステップが行われる。
1. ユーザが、Pedersen commitments
Figure 2023522258000025
および
Figure 2023522258000026
を計算し、
Figure 2023522258000027
およびr'はランダムに生成された整数である。
2. ユーザが、値(x1,...,xl)を知っていること、
Figure 2023522258000028
とAの両方が同じ値x1,...,xlへのコミットメントであること、最後にそれらが正しい範囲にあることを、署名者に対して証明する。
3. 署名者が、ランダムな整数
Figure 2023522258000029
および素数qを選び、
Figure 2023522258000030
を計算する。
4. 署名者が次いで、(V,
Figure 2023522258000031
,q)をユーザに送信する。
5.
Figure 2023522258000032
とすると、メッセージ(x1,...,xl)に対する署名は(V,r,q)である。
この署名の重要な特徴は、署名者だけがその因数分解を知っているので、n=p1p2を法とする要素のq乗根を署名者だけが効率的に計算できるということである。
DY疑似ランダム関数
疑似ランダム関数は、出力が決定論的であるがランダムであるように見える関数である。Y.DodisおよびA.Yampolskiy、「A verifiable random function with short proofs and keys」、International Workshop on Public Key Cryptography、2005年において、DodisおよびYampolskiyは、以下で説明される様々な例示的なシステムにおいて利用され得る疑似ランダム関数を定義した。素数位数がpでありシードがsである生成元g∈Gを仮定して、DodisおよびYampolskiyは、疑似ランダム関数を
Figure 2023522258000033
と定義した。この関数は、DY疑似ランダム関数と呼ばれるものとする。
知識のゼロ知識証明
その全般的な考え方は、証明者がある値を知っていることを証明するのに十分な情報を、その値を明示的に明らかにすることなく、証明者が検証者に提供するということである。何を証明したいかに応じて、これを行うために様々な事前に定められている方法がある。大抵、検証者は、課題の形式で入力を提供することが必要であり、そうでなければ、検証者は、隠された値を知っているかのように装って、別の当事者に同じ証明を単に渡し得ることに留意されたい。知識の非双方向性の証明の事例があり、この場合、課題は、単に事前に合意されており、または標準的なフォーマット、たとえば、検証者の識別情報のハッシュ、および時間と日付のスタンプを有する。
以下の例は、ある整数がある範囲にあることの証明を提供する。これは、ウォレットのカウンタがまだ、引き出された額の値以内であることを証明するために使用され得る。この証明の目的は、0または1のいずれかとして各ビット値を有するカウンタ値JをAliceが知っていること、およびカウンタ値が何の値であるかをAliceが証明できることを、その値を共有することなく、証明することである。
1-of-2秘密の知識の証明
Aliceが、1-of-2値を知っていることを証明したいと仮定する。A∈Γが、Aliceが値xiに対する証拠(witness)を知っているインデックスiの集合を表記するものとし、Γは秘密を再構築するために使用され得る、あり得る集合のうちの集合である。以下の例では、i=1,2である。
Figure 2023522258000034
がAの補集合であるような、各
Figure 2023522258000035
に対して、Aliceは入力xiとともにシミュレータSを実行して、会話(
Figure 2023522258000036
,ci,
Figure 2023522258000037
)を生成する。これらの会話は、知識のゼロ知識証明プロトコルでは3ラウンドであり、ciはBobによって送信される課題であり、
Figure 2023522258000038
はAliceの応答である。次いで、各i∈Aに対して、Aliceは、入力xiに対する証拠を仮定して、知識を証明するためにBobに送信したいものとして
Figure 2023522258000039
を決定する。Aliceは、i=1,2に対する値
Figure 2023522258000040
をBobに送信する。
1. Bobが、ランダムにlビットの文字列strを選び、それをAliceに送信する。
2. ステップ1からの課題ciに対応するシェアの集合
Figure 2023522258000041
を考える。
Figure 2023522258000042
はΓ*において非適格であり、これは、
Figure 2023522258000043
に対応するciの値が与えられても、BobがAliceの秘密を再構築できないことを意味する。したがって、Aliceは、Bobが秘密を計算することが可能になるリスクなしで、これらのシェアを文字列strと矛盾しないシェアの全体集合に仕上げることができる。Aliceは、share(ci)が仕上げプロセスにおいて生成されるシェアに等しくなるように、インデックスi∈Aに対して課題ciを形成する。これは、シェアのビットをコピーして、必要であればランダムビットでパディングすることによって行われる。ステップ1において、Sは、証明者のアルゴリズムを実行することによって、
Figure 2023522258000044
およびciに対する最終的なメッセージ
Figure 2023522258000045
を生成している。最後に、Aliceは、i=1,2に対するメッセージci
Figure 2023522258000046
の集合をBobに送信する。
3. Bobが、すべての会話(
Figure 2023522258000047
,ci,
Figure 2023522258000048
)がステップ1において説明されるような対応するゼロ知識証明プロトコルにおいて検証者による受け入れにつながること、また、シェアshare(ci)が文字列sと矛盾しないことも確認する。これらの確認が満たされる場合にのみ、彼は受け入れる。
この知識の証明は、以下の証明において使用される。
コミットされた整数Jが範囲[0,2l-1]にあることを証明する
pを大きな素数として、q|p-1。そして、g,h∈Z* pは、gを底とするhの離散対数が未知であるような次数qの要素である。
1. Aliceが、Pedersen CommitmentスキームedCom(J;r)=hrgJを使用して整数Jをコミットする。
2. 彼女が、J=J020+J121+…+Jl-12l-1となるような二進表現としてJを書き直す。そして、Aliceは、Pedcom(Ji;ri)を用いてこれらのJi,i=0,...,l-1に対するPedersen Commitmentを計算し、
Figure 2023522258000049
である。
3. 彼女が、PedCom(xi;ri)により隠される数が0または1のいずれかであることを、hを底とするPedCom(Ji;ri)の離散対数またはhを底とするPedCom(Ji;ri)/gの離散対数のいずれかを彼女が知っていると証明することによって、証明する。これは、以下で説明されるような離散対数の知識の証明、および上で説明されたような2つの秘密のうちの1つの知識の証明によって行われる。
4. Bobが最後に、ΠiPedCom(Ji;ri)=PedCom(J;r)であることを確認する。
これらの確認が検証される場合、証明は成立する。
秘密の知識の証明をメッセージm上の知識の1つの署名に変える
Bobが検証できるように、Aliceが秘密の知識の証明を知識の署名に変えたいと仮定することによって開始する。以下では、fは、任意の長さの文字列を範囲[0,n)に変える疑似ランダム関数であり、nはRSAモジュラスである。メッセージmに署名するために、Aliceは以下のステップを行う。
1. Aliceがランダムな数r1,...rτ∈[0,n)を選び、
Figure 2023522258000050
を計算する。
2. Aliceがf(m,x1,...,xτ)を計算し、最初のkτビットをとり、それらをeijと名付け、ここで1≦i≦τ、1≦j≦kである。これは値eijの行列を作る。
3. Aliceが、j=1,...,kに対してvj=f(IDA,j)を計算し、IDAはAliceの識別情報である。
4. 彼女が次いで
Figure 2023522258000051
を計算する。
5. 次に、彼女が、i=1,...,τに対して
Figure 2023522258000052
を計算する。
6. 最後に、彼女がIDA、m、eijおよびyiをBobに送信する。
Bobは、以下の方法で署名を検証する。
1. Bobが、j=1,...,kに対してvj=f(IDA,j)を計算する。
2. Bobが、i=1,...,τに対して
Figure 2023522258000053
を計算する。
3. Bobが、f(m,z1,...zτ)の最初のkτビットがeijであることを検証する。
これが成立する場合、署名は正しい。
離散対数の知識のゼロ知識証明
guにおけるuの知識を、uを秘密に保ちながら証明するために、以下のプロトコルに従うことができる。g,h∈Gが、Gの公に知られている要素であるとする。Aliceが、guを計算するために正しいuを知っていることをBobに対して証明したい場合、彼女は以下のことを行う。
1. Aliceが
Figure 2023522258000054
を計算し、ここでr1、r2、およびr3はランダムに生成された秘密の整数であり、VおよびUをBobに送信する。
2. Bobが、課題e、たとえばe=hash(x)を選び、ここでxは何らかのランダムに選ばれたメッセージであり、この課題eをAliceに送信する。
3. Aliceが次いで、
l=r2+eu、
m=r3+er1
を計算し、これらをBobに返すことを要求される。
4. Bobが次いで、
glhm=UVe
であることを検証する。
この式が成立することをBobが見出すと、彼は、Aliceがuの値を知っていることを知る。
電子キャッシュシステム
電子キャッシュ(ecash)は、1983年にChaumによって初めて導入された。これは、ユーザが発行者からブラインディングされたコインを引き出し、アンブラインディングされたコインを業者で消費することができ、その引き出しとの関わりなく業者がコインを発行者に預け入れることができるような、非常に簡単なシステムであった。それ以来、それがオフラインecashにつながる二重消費の防止であるか、コインの分割可能性であるか、コインをバッチ消費すること(batch spending)であるか、コイン記憶の効率性であるか、紛失されたコインの回復であるか、または他の改善であるかにかかわらず、このシステムのいくつかの態様を改善する多くのecashシステムが提案されている。すべてのecashシステムにおいて、発行者は、二重消費を監視するために以前に消費されたコインを記憶する、データベースサービスを提供する。Chaumのecashはオンラインキャッシュであり、これは、コインの発行者がコインを消費する時点でオンラインである必要があることを意味する。これは、コインを受け入れるためには、コインの受取者が、コインがまだ消費されていないかどうかについて発行者のデータベースに確認するために発行者に連絡しなければならないからである。オフラインecashシステムは、後で二重消費者の識別情報を導き出すための何らかの方法を有するので、コインの預入を、便利なときに行うことができる。以下では、コインの発行者は銀行と呼ばれるが、一般に、これはあらゆる信用される第三者であり得ることに留意されたい。
すべてのecashシステムは、セットアップ、引き出し、消費、および預け入れという同じ基本プロトコルを含む。以下の例では、Aliceが銀行からいくらかのecash(デジタルコイン)を引き出し、それを業者で消費することを望み、業者はそれらを銀行に預け入れる。これは図5に示されている。
セットアップ
すべてのecashシステムにおいて、初期セットアップがあり、そこで、Aliceおよびこのスキームにおける業者は自分の識別情報を登録する。これは、銀行に口座を開くこと、または公開鍵-秘密鍵のペアをセットアップして公開鍵を共有することのいずれかを伴い得る。同様に、すべてのecashシステムにおいて、銀行は、固有の公開鍵-秘密鍵のペアを作成して、公開鍵を公表しなければならない。
引き出し
このステップにおいて、Aliceが、ある値のコインを含む銀行からのウォレットを要求する。Aliceは、ブラインディングされたコインシリアル番号、または彼女がそれからシリアル番号を導き出すウォレットシードを銀行に提供することによって、ウォレット発行を開始する。銀行は次いで、これらのブラインディングされた値に署名するので、Aliceは、ウォレットを正しく取得したことを業者に証明することができる。ウォレットへの署名を取得するためのプロトコルは、Aliceがブラインディングされたコインシリアル番号を銀行に送信することを伴ってもよく、銀行は次いで、それらに署名し、署名をAliceに返す。各ecashは、どの署名スキームを使用するかを指定する。Aliceは次いで、この署名をウォレットの一部として記憶する。ウォレットのフォーマットは、具体的なecashシステムに依存するが、一般に、これは、コインのシリアル番号、銀行によるコインへの署名、およびオフラインキャッシュの場合、二重消費者の追跡を可能にする何らかの追加の情報に対応する値の集合である。この時点で、Aliceのみがコインシリアル番号の知識を持っているので、彼女だけがそれらを消費することができる。
消費
コインを消費するために、Aliceは、コインのシリアル番号、銀行による署名、およびプロトコルがそれを含む場合、二重消費式を業者に提供する。Aliceは、シリアル番号、署名、および二重消費式(存在する場合)がすべて正しいフォーマットを有することを、業者に証明しなければならない。より簡単なプロトコルでは、これは、銀行の署名が正しいことを直接確認することによって行われ得るが、より複雑な場合には、これは、何らかの隠された値に銀行が署名したという知識のゼロ知識証明を伴う。検証プロセスは、各プロトコルについて以下でより詳しく説明される。コインが検証される場合、業者はコインを受け入れる。
預け入れ
オンラインecashの場合、業者は直ちに、コインを預け入れるために銀行に連絡する。そして、銀行は、それがすでに消費されているかどうかを見るために、消費されたコインのデータベースを確認する。消費されていない場合、銀行はコインを受け入れ、業者はコインの値を受け取る。すでに消費されている場合、業者は支払いを拒否する。オフラインecashでは、業者は、営業日の終わりなどの、必要なときにいつでも銀行にコインを預け入れることができる。銀行は次いで、シリアル番号、および何らかの二重消費情報を記憶する。コインが二重消費である場合、この追加の二重消費情報を使用して犯人を特定することができる。いくつかのプロトコルでは、二重消費の後で残りの未消費のコインを計算することも可能であるので、これらをブラックリストに入れることができる。
デジタルコインシステム
図6は、デジタルコインを発行するためのデジタルキャッシュシステムを実装するための、例示的なシステム600を示す。システム600は、デジタルコインを消費者602(たとえば、エンドユーザAlice103a、または企業、サービス、大学、慈善団体など)に発行するのを担う、発行者601(たとえば、銀行または他の信用される第三者)を備える。システムはまた、消費者602からデジタルコインを受け取るとデジタルコインを発行者601に預け入れ、見返りにデジタルコインにより表されるデジタル資産を受け取ることができる、引換者603(たとえば、業者)を備える。たとえば、消費者602は、引換者により提供されたサービスの見返りにデジタルコインを引換者603に提供してもよく、そして、引換者は、デジタルコインを発行者において、デジタルコインにより表される額の従来の金銭(すなわち、法定通貨)と引き換えることができる。システム600はさらに、ブロックチェーンネットワーク106を備える。発行者601、消費者602、および引換者603の各々は、ブロックチェーン150と直接または間接的に対話すること、たとえば、トランザクションをブロックチェーン150に送信すること、ブロックチェーン150からトランザクションを取得することなどのために構成される。
発行者601、消費者602、および引換者603の各々が、図1から図4に関連してAlice103aおよびBob103bに帰す機能の一部またはすべてを実行してもよいことに留意されたい。
図6に示されるように、発行者601は、たとえばサイドチャネル301を介して、引出トランザクションTxwithdrawを消費者602に送信するように構成され得る。引出トランザクションTxwithdrawは、ブロックチェーンネットワーク106にも送信され得る。消費者602は、たとえばサイドチャネル301を介して、消費トランザクションTxspendを引換者603に送信するように構成され得る。消費トランザクションTxspendは、ブロックチェーンネットワーク106にも送信され得る。引換者603は、たとえばサイドチャネル301を介して、預入トランザクションTxdepositを発行者601に送信するように構成され得る。預入トランザクションTxdepositは、ブロックチェーンネットワーク106にも送信され得る。これは、当事者間のトランザクションの流れの1つの説明のための例にすぎないことに留意されたい。他の流れが可能であり、以下で論じられる。
簡潔にするために、本発明の実施形態は、銀行(発行者601)、Aliceと呼ばれる顧客(消費者602)、および業者(引換者603)に関連して説明される。しかしながら、これらは関係する当事者に対する便宜的な呼称にすぎず、限定することは意図されないことが理解されるだろう。
セットアップ
銀行601およびAlice602は、セットアッププロトコルの一部として対話するように構成される。Alice602は、識別子を銀行601に登録する。識別子は、銀行口座番号、パスポート番号、運転免許証、名前および住所などであり得る。いくつかの例では、識別子は、たとえば公開鍵-秘密鍵のペアの、公開鍵であり得る。Alice602は、know-your-customer(KYC)プロセスの一部として自分の識別子を登録し得る。Alice602、銀行601、および業者603は各々、ブロックチェーンプロトコルの一部として使用するのに適した公開鍵、たとえば楕円曲線公開鍵を有する。すなわち、公開鍵は、ブロックチェーントランザクションに署名する際に使用するための署名と結びつけられ得る。各公開鍵はまた、ブロックチェーン150上で使用するためのそれぞれのアドレスの基礎を形成し得る。以下の例では、Alice602は公開鍵PAおよび対応する秘密鍵skAを有し、銀行602は公開鍵PBおよび対応する秘密鍵skBを有し、業者603は公開鍵PMおよび対応する秘密鍵skMを有する。各当事者の公開鍵は各々に知られていてもよい。代替として、いくつかの例では、Aliceの公開鍵PAは、少なくとも最初は、他の当事者に知られていなくてもよい。さらに、文脈が要求しない限り、当事者の公開鍵への言及は、その当事者が秘密鍵を所有するあらゆる公開鍵として解釈されてもよい。言い換えると、Alice602は、トランザクションに署名するために1つの公開鍵を使用し、ブロックチェーンアドレスの基礎として別の公開鍵を使用してもよい。たとえば、Alice602は、プロトコルの一部として2つの異なる公開鍵を使用してもよく、それらのうちの1つは既知の公開鍵PAであり、それらのうちの1つはその既知の公開鍵、たとえばPA'から導かれる。
業者603は、業者603の識別子を登録するために、Alice602に対する同様のプロセスを経てもよい。
引き出し
銀行から1つまたは複数のデジタルコインを引き出すために(すなわち、銀行601がデジタルコインをAlice602に発行するために)、Alice602および銀行601は、コインシード署名プロトコルを始めなければならない。コインシードsは、Alice602だけに知られている値(すなわち、数)である。すなわち、Alice602は、コインシードsを生成し、それを銀行601または業者603と共有しない。コインシードsは、疑似乱数生成器によって生成され得る。Alice602は、ブラインディングされたメッセージの形式でコインシードsを銀行601に送信するので、銀行601はコインシードを識別することができない。銀行601は、ブラインディングされたコインシードに署名して、ブラインド署名σB(すなわち、ブラインディングされたコインシードに対する署名)をAlice602に返す。銀行601は、秘密鍵skBを使用して、または代替として異なる署名鍵を用いて、ブラインディングされたコインシードに署名し得る。
いくつかの例では、コインシードsは、銀行601からの入力に基づき得る。すなわち、銀行601は入力r'をAlice602に提供する。次いで、コインシードが、Aliceからの入力s'および銀行からの入力r'に基づいて生成され、たとえばs=s'+r'である。
Alice602は、コインシードを使用して1つまたは複数のコインシリアル番号を生成する。各コインシリアル番号は、単一のデジタルコインを表す。各デジタルコインは、あらかじめ定められた額のデジタル資産を表し、これは銀行601によって設定され得る。たとえば、各デジタルコインは、£100を表し得る(これは、OP_RETURN出力において指定されてもよく、または代替として、それはすべてのコインが常に£100を表すという所定の取り決めまたはプロトコルであってもよい)。Alice602および銀行601は、Aliceがある設定された数のコインシリアル番号を生成できることに合意し得る。銀行601は次いで、設定された数のコインシリアル番号に等しい額に基づいて、Aliceの銀行口座から引き落とすことができる。
Alice602は、コインシードに基づいて、複数のコインシリアル番号のうちの第1のもの(およびいくつかの例では、唯一のコインシリアル番号)を生成する。第1のコインシリアル番号は、疑似ランダム関数、たとえばDY疑似ランダム関数をコインシードに適用することによって生成され得る。したがって、第1のコインシリアル番号は、コインシードに結びついているが、ランダムな値であるように見える。
ここで、デジタルコイン、すなわち第1のシリアル番号に対応するデジタルコインの引き出しの証拠として機能する、ブロックチェーントランザクションである引出トランザクションが生成される。引出トランザクションを生成する当事者は、デジタルコインシステムが追跡可能なコインシステムであるか、または追跡不可能なコインシステムであるかに依存する。
追跡可能なコインシステムに対して、引出トランザクションは、銀行の署名SigBを備える。すなわち、引出トランザクションは銀行601によって署名される。例示的な追跡可能な引出トランザクションが、図7aに示されている。銀行の署名SigBは、引出トランザクションの入力に(この例では、銀行の対応する公開鍵PBとともに)含まれる。
引出トランザクションはまた、第1のコインシリアル番号のハッシュを含む第1の出力を備える。他の代替の一方向性関数がハッシュ関数の代わりに使用されてもよいことに留意されたい。第1の出力は、消費トランザクションの入力とともに実行されると、第1の出力をアンロックするためにより後のトランザクションの入力がハッシュ関数の原像(すなわち、第1のコインシリアル番号自体)を含むことを必要とするように構成される、出力スクリプトを備える。任意選択で、図7aの例に示されるように、出力スクリプトは、Aliceの公開鍵PAおよび/または銀行601の公開鍵PBにもロックされ得る。たとえば、第1の出力はマルチ署名出力であり得る。すなわち、第1の出力をアンロックするために、消費入力は、Aliceの公開鍵PAに対応する署名SigAおよび/または銀行の公開鍵PBに対応する署名SigBを備えなければならない。変化を銀行601に返す第2の出力が含まれ得る。
図7aの例では、引出トランザクションは、第1のデジタルコインを表す第1のデータを備える。第1のデータは、消費可能な出力に、または消費不可能な出力(たとえば、OP_RETURN出力)に含まれ得る。第1のデータの例は図7bに示される。第1のデータは、デジタルコイン(たとえば、通貨)によって表されるデジタル資産を表記するプレフィックス、コインプロトコルフラグ、コインアクションフラグ(たとえば、引き出し)、およびデジタルコインの残高のうちの1つ、いくつか、またはすべてを備え得る。
追跡不可能なコインシステムでは、引出トランザクションはAliceの署名SigAを備える。すなわち、引出トランザクションはAlice602によって署名される。例示的な追跡不可能な引出トランザクションが、図10aに示されている。Aliceの署名SigAは、引出トランザクションの入力に(この例ではAliceの対応する公開鍵PAとともに)含まれる。追跡不可能な引出トランザクションは、追跡可能な引出トランザクションに関して上で説明された同じ第1の出力を備える。上で説明されたように、追跡不可能な引出トランザクションはまた、第1のデジタルコインを表す第1のデータも備え得る。第1のデータの例が図10bに示されている。
銀行が引出トランザクションに署名する場合、Alice602は、第1のコインシリアル番号のハッシュを、第1の出力に含められるように銀行601に送信する。代替として、Alice602は、第1の出力を少なくとも備えるトランザクションテンプレートを生成してもよく、次いで、銀行601は、必要であれば、入力と出力の1つまたは複数とを追加してもよい。銀行601は次いで、引出トランザクションをブロックチェーンネットワークに出し得る。銀行601はまた、引出トランザクションのコピーをAlice602に送信し得る。
Alice602が引出トランザクションに署名する場合、Alice602は引出トランザクションを銀行601に送信する必要はない。Alice602は、引出トランザクションをブロックチェーンネットワークに出すだけでよい。
任意選択で、引出トランザクションは、コインシリアル番号のハッシュを備える1つより多くの出力を備え得る。たとえば、Alice602は、第2のデジタルコインを表すために第2のコインシリアル番号を生成し得る。第1のコインシリアル番号は第2のシリアル番号のシードであってもよく(すなわち、第2のコインシリアル番号は、疑似乱数関数を第1のコインシリアル番号に適用することによって生成されてもよい)、または第2のコインシリアル番号は疑似乱数関数をコインシードに直接適用することによって生成されてもよい。これらの例では、引出トランザクションは、ハッシュ値が異なることを除き、第1の出力に類似した一連の出力を備える。各出力は、それぞれのデータ出力、すなわち第1のデータに類似したデータを有する出力と関連付けられ得る。
消費
業者603とのトランザクション(たとえば、取引)において第1のデジタルコインを消費するために、Alice602は、第1のコインシリアル番号を業者603に提供する。業者603は、第1のコインシリアル番号がブロックチェーンのトランザクションに含まれるかどうかを確認する。第1のコインシリアル番号のハッシュのみが引出トランザクションに含まれ、第1のコインシリアル番号自体は含まれないことに留意されたい。第1のコインシリアル番号がブロックチェーンに含まれる場合、業者603は、第1のデジタルコインを拒絶し、トランザクションを終了する。以下で論じられるように、第1のコインシリアル番号は、Alice602による第1のデジタルコインの消費の一部として、または銀行601により第1のデジタルコインをブラックリストに入れることの一部として、ブロックチェーンに含まれ得る。第1のコインシリアル番号がブロックチェーンに含まれない場合、業者603はデジタルコインを受け入れてトランザクションに進むと決定し得る。
業者603は、1つまたは複数の条件が満たされることに応答して消費トランザクションを取得する。1つまたは複数の条件は、第1のコインシリアル番号がブロックチェーンに存在しないという条件を含む。消費トランザクションは、第1のコインシリアル番号を備え、業者603が第1のコインシリアル番号によって表されるデジタルコインを受け入れたことの証拠として機能する。業者603は、たとえばAlice602と組み合わせて、消費トランザクションを完全にまたは一部生成し得る。すなわち、消費トランザクションの入力および/または出力のうちの1つ、いくつか、またはすべてが、業者603によって生成され得る。同様に、消費トランザクション入力および/または出力のうちの1つ、いくつか、またはすべてが、Alice602によって生成され得る。
図8aは、追跡可能な消費トランザクションの例を示す。追跡可能な消費トランザクションは、第1のコインシリアル番号を備えるので、消費トランザクションがブロックチェーンネットワークに出されると第1のコインシリアル番号を明らかにする。この例では、第1のコインシリアル番号は、消費トランザクションの第1の入力に含まれる。消費トランザクションの第1の入力は、引出トランザクションの第1の出力を参照し得るので、トランザクションのチェーンを作成する。引出トランザクションの第1の出力によって要求される場合、第1の入力はAliceの署名SigAおよび/または公開鍵PAを備え得る。消費トランザクションは、業者の署名SigMおよび/または公開鍵PMを備える第2の出力を備え得る。第2の出力は、業者の公開鍵PMにロックされるトランザクション出力を参照し得る。
Alice602が自分のデジタルコインのうちの別のものを後で消費することを望む場合、消費トランザクションは、ハッシュ値が彼女のコインシリアル番号のうちの異なる1つのハッシュ値であることを除き、引出トランザクションの第1の出力と同様の第1の出力を備え得る。消費トランザクションの第1の出力は、Aliceおよび/または銀行のそれぞれの公開鍵にロックされ得る。
消費トランザクションは、Alice602、銀行601、および/または業者603のそれぞれの公開鍵にロックされる第2の出力を備え得る。公開鍵の全集合のうちの最低でn個の公開鍵へと出力をロックするために、マルチ署名出力が使用され得る。
消費トランザクションは、たとえば消費可能または消費不可能な出力に、第2のデータを備える第3の出力を備え得る。図8bは第2のデータの例を示す。この例では、第2のデータは、上で論じられた引出トランザクションの第1のデータに含まれる項目の一部またはすべてを含み得る。第2のデータは、消費されたコインシリアル番号(すなわち、第1のコインシリアル番号)およびAliceのデジタルコインの残りの残高を含み得る。第2のデータは、以下で論じられる追加の項目を含み得る。
図11aは、追跡不可能な消費トランザクションの例を示す。追跡可能な消費トランザクションのように、追跡不可能な消費トランザクションは、第1のコインシリアル番号を備える。この例では、第1のコインシリアル番号は、消費トランザクションの第1の入力に含まれる。消費トランザクションの第1の入力は、引出トランザクションの第1の出力を参照し得るので、トランザクションのチェーンを作成する。引出トランザクションの第1の出力によって要求される場合、第1の入力はAliceの署名SigAおよび/または公開鍵PAを備え得る。消費トランザクションは、業者の署名SigMおよび/または公開鍵PMを備える第2の出力を備え得る。第2の出力は、業者の公開鍵PMにロックされるトランザクション出力を参照し得る。
追跡不可能な消費トランザクションは、消費されたデジタルコインを表す第2のデータのハッシュを備える第1の出力を備え得る。この出力はAliceによって署名されてもよく、これは、Alice602がデジタルコインの消費を証明したことの証拠として機能する。第2のデータ自体が、トランザクションの異なる出力(図11aの第3の出力)に含まれ得る。第1の出力は、より後のトランザクションの入力が第2のデータ自体を含むことを必要とするように構成され得る。消費トランザクションの第2の出力は、Alice602、銀行601、および/または業者603のそれぞれの公開鍵にロックされ得る。
第2のデータは、消費可能なまたは消費不可能な出力に含まれ得る。図11bは、第2のデータの例を示す。図8bの例のように、第2のデータは、上で論じ要られた引出トランザクションの第1のデータに含まれる項目の一部またはすべてを含み得る。第2のデータは、消費されたコインシリアル番号(すなわち、第1のコインシリアル番号)を含み得る。
業者603は、Alice602が自分の入力(すなわち、自分の署名SigAを備える入力)およびトランザクションの出力を追加すると、(追跡可能なまたは追跡不可能な)消費トランザクションに署名し得る。業者603は次いで、消費トランザクションをブロックチェーンネットワークに出し、またはAlice602が消費トランザクションをブロックチェーンネットワークに出すために消費トランザクションをAlice602に送信し得る。別の例として、業者603は、消費トランザクションを、ウォレット提供者などのサービス提供者であり得る第三者に出してもよい。
任意選択で、Alice602は引出トランザクションを業者603に提供してもよく、または、業者は、たとえばAlice602によって提供されるトランザクション識別子TxIDを使用して、ブロックチェーンから引出トランザクションを取得してもよい。業者603は、消費トランザクションの第1の入力が引出トランザクションの第1の出力をアンロックすること、または少なくとも引出トランザクションの第1の出力を参照することを確認し得る。
預け入れ
業者603によって課される1つまたは複数の条件が満たされ、業者がデジタルコイン、たとえば商品またはサービスに対する支払いを受け入れると決定すると、業者は、銀行601に連絡して、デジタルコインを預け入れて、デジタルコインによって表される額の資産を引き換える。
業者603は、第1のコインシリアル番号を銀行601に送信する。業者603は、第1のコインシリアル番号を直接銀行601に送信し得る。追加または代替として、業者603は、第1のコインシリアル番号を含む消費トランザクション、または少なくとも消費トランザクションのトランザクション識別子TxIDを銀行601に提供し得る。別の選択肢として、銀行601は、公開鍵PBにロックされるトランザクションについて警告されると、ブロックチェーンから直接消費トランザクションを取得し得る。
銀行601は、銀行601によって維持される消費されたコインシリアル番号の記録に第1のコインシリアル番号が存在するかどうかを確認する。コインシリアル番号は、ブロックチェーン150に維持されてもよく、すなわち、オンチェーンでトランザクションに、または別個のデータベースに、シリアル番号を記録する。データベースに記憶される場合、ブロックチェーン150は、たとえばコインフラグがオンチェーンで現れるとき、シリアル番号についてスキャンされ得る。データベースは、ブロックチェーン150にも記憶され得る。第1のコインシリアル番号がデータベースに存在する場合、第1のコインシリアル番号によって表されるデジタルコインはすでに消費されているので、業者603によるデジタルコインの預け入れは拒絶される。第1のコインシリアル番号がデータベースに存在しない場合、銀行601は、デジタルコインを受け入れて、デジタルコインによって表される額の資産を業者603に移転し得る。銀行601がその額の資産を業者603に移転するには、1つまたは複数のさらなる条件が満たされなければならないことがある。
業者603は預入トランザクションを取得する。業者603は、完全に、または銀行601と協調して、預入トランザクションを生成し得る。預入トランザクションは、消費トランザクションの出力、たとえば第2の出力を参照する入力を備える。預入トランザクションは、業者の署名SigMおよび/または銀行の署名SigBを備え得る。業者603は、預入トランザクションを生成し、それをブロックチェーンネットワークに出してもよく、または、業者603は、預入トランザクションを生成し、銀行がそれをブロックチェーンネットワークに、またはウォレット提供者などの第三者にすら出せるように、それを銀行601に送信し得る。代替として、銀行601は、預入トランザクションを生成し、次いで、それをブロックチェーンまたは業者603に出し得る。
図9aは、追跡可能な預入トランザクションの例を示す。この例では、預入トランザクションの第1の入力は、銀行601と業者603の両方によって署名される。すなわち、第1の入力は銀行の署名SigBおよび業者の署名SigMを含む。第1の入力は消費トランザクションの出力を参照する。この例では、第1の入力は、消費トランザクションの第2の出力、すなわちマルチ署名出力を参照する。
預入トランザクションは第3のデータを備え得る。第3のデータの例が図9bに示されている。第3のデータは、第1および/または第2のデータと共通の1つまたは複数のデータフィールドを備え得る。第3のデータは、預け入れられたコインの値を示すものを備え得る。Alice602がデジタルコインを二重消費しようとしたことがわかり、銀行601によって預入トランザクションが生成される場合、第3のデータは、Alice602に発行されたあらゆる残りの未消費のデジタルコインのシリアル番号を備え得る。
図12aは、追跡不可能な預入トランザクションの例を示す。図9aに示される例示的な預入トランザクションと同様に、預入トランザクションの第1の入力は、銀行601と業者603の両方によって署名される。第1の入力は、消費トランザクションの出力、たとえば追跡不可能な消費トランザクションの第1の出力を参照する。この例では、追跡不可能な消費トランザクションの第1の出力は、第2のデータのハッシュパズルを含んでいた。言い換えると、追跡不可能な消費トランザクションの第1の出力は、第1の出力をアンロックすることを試みるその後のトランザクションの入力が第2のデータの形式の原像を備えることを必要とするように構成される、スクリプトを備えていた。したがって、この例における預入トランザクションの第1の出力は、生の形式の第2のデータを備える。
預入トランザクションは、1つまたは複数の出力を備え得る。図12aに示されるように、預入トランザクションは、銀行601の公開鍵PMにロックされた第1の出力を備え得る。預入トランザクションは、第3のデータを備える第2の出力を備え得る。図12bは第3のデータの例を示す。
他の任意選択の条件
いくつかの実施形態では、銀行601がデジタルコインを受け入れるために満たされなければならない条件の1つは、消費トランザクションが、引出トランザクション、たとえば銀行601によって署名された引出トランザクションの出力を参照してアンロックする入力を備えるということである。同様に、業者603がデジタルコインを受け入れるために満たされなければならない条件の1つは、Alice602が、銀行601によって署名される、引出トランザクション、または引出トランザクションへの参照を提供するということである。
追加または代替の実施形態では、銀行601がデジタルコインを受け入れるために満たされなければならない条件の1つは、Alice602および/または銀行601によって署名される入力を消費トランザクションが備えるということである。いくつかの例では、両方の署名が存在しなければならない。
いくつかの実施形態では、Alice602は、コインシード証明を業者603に送信し得る。コインシード証明は、コインシードの銀行によるブラインド署名σBの知識をAlice602が有することの証明である。いくつかの例では、コインシード証明は単に、ブラインド署名自体であり得る。他の例では、コインシード証明はゼロ知識証明であり得る。ゼロ知識証明は上で論じられている。業者603は、コインシード証明に基づいて、Alice602がコインシードに対する銀行の署名σBの知識を実際に有しているかどうかを決定し得る。業者603がデジタルコインを受け入れるための条件の1つは、Alice602が署名σBの知識を有することをコインシード証明が証明するということであり得る。
いくつかの実施形態では、業者603は、デジタルコインを預け入れようとするとき、コインシード証明を銀行601に送信し得る。業者603のように、銀行601は、コインシード証明に基づいて、Alice602が、したがって業者603が、コインシードに対する銀行の署名σBの知識を実際に有しているかどうかを決定し得る。銀行601がデジタルコインを受け入れるための条件の1つは、Alice602が署名σBの知識を有していることをコインシード証明が証明するということであり得る。
いくつかの実施形態では、Alice602は1つまたは複数の二重消費シードを生成し得る。各二重消費シードは、二重消費値を生成するために使用され得る。二重消費値は上で説明されている。Alice602は、1つまたは複数の二重消費シードのブラインディングされたバージョンを銀行601に送信してもよく、銀行601は1つまたは複数の二重消費シードのブラインド署名σBを返す。1つまたは複数の二重消費シードの署名σBは、コインシードの同じ署名σBであり得る。すなわち、銀行601は、コインシードおよび二重消費シードに全体として署名し得る。
業者603においてデジタルコインを消費するとき、Alice602は、それぞれの二重消費シードを使用して、1つまたは複数のそれぞれの二重消費値を生成し得る。Alice602は、たとえば消費トランザクションの一部として、二重消費値を業者603に送信する。各二重消費値は、二重消費シード、Alice602の識別子(たとえば、彼女の銀行口座番号、公開鍵、パスポート番号など)、および、業者603によって選ばれAlice602に送信されるデータ項目のうちの1つに基づく。データ項目は、Alice602と業者603との間の対話ごとに変化する。たとえば、データ項目は、対話の時間および/もしくは日付、Alice602により購入された商品もしくはサービスの請求書、または任意の他の変数に基づき得る。Alice602によって生成される各二重消費値は、異なるデータ項目により、Aliceの識別子の異なる構成要素を明らかにする。Alice602が同じコインを二重消費しようとする場合、彼女が銀行601により特定されるのに十分な、彼女の識別情報についての情報が明らかにされる。
業者603がデジタルコインを預け入れるとき、業者603は二重消費値を銀行601に送信する。第1のコインシリアル番号が消費されたコインシリアル番号の記録に(すなわち、ブロックチェーン150に)存在することを銀行601が発見する場合、銀行601は、二重消費値を、以前に受信された二重消費値、すなわち、第1のデジタルコインが最初に預け入れられたときに受信された二重消費値と一緒に使用して、Aliceの識別情報を明らかにし得る。Alice602があらゆる残りの未消費のデジタルコインを有する場合、銀行601はそれらのコインをブラックリストに入れてもよい。コインをブラックリストに入れる例は以下で論じられる。
Alice602は、二重消費シード証明を業者603に送信し得る。二重消費シード証明は、Alice602が二重消費シードの銀行によるブラインド署名σBの知識を有することの証明である。いくつかの例では、二重消費シード証明は単に、ブラインド署名σB自体であり得る。他の例では、二重消費シード証明はゼロ知識証明であり得る。ゼロ知識証明は上で論じられている。業者603は、二重消費シード証明に基づいて、Alice602が二重消費シードに対する銀行の署名σBの知識を実際に有しているかどうかを決定し得る。業者603がデジタルコインを受け入れるための条件の1つは、Alice602が署名σBの知識を有することを二重消費シード証明が証明するということであり得る。いくつかの実施形態では、業者603は、デジタルコインを預け入れようとするとき、二重消費シード証明を銀行601に送信し得る。業者603のように、銀行601は、二重消費シード証明に基づいて、Alice602が、したがって業者603が、二重消費シードに対する銀行の署名σBの知識を実際に有しているかどうかを決定し得る。銀行601がデジタルコインを受け入れるための条件の1つは、Alice602が署名σBの知識を有していることを二重消費シード証明が証明するということであり得る。
いくつかの実施形態では、Alice602は、業者の識別子のハッシュR(たとえば、公開鍵PMを備える)および業者603によって選ばれるデータ項目を生成し得る。上で論じられたように、データ項目は、Alice602と業者603との間の対話、たとえば対話の日付および/または時間に基づき得る。Alice602は、業者の識別子のハッシュRを、たとえば消費トランザクションの一部として業者603に送信し得る。業者603がデジタルコインを受け入れるための条件の1つは、業者603が業者の識別子のハッシュRについて合意するということであり得る。デジタルコインを銀行601に預け入れるとき、業者603は、業者の識別子のハッシュRを銀行601に送信し得る。銀行601は、受信された業者識別子ハッシュ(すなわち、業者の識別子のそれぞれのハッシュ)の記録を(オンチェーンまたはオフチェーンのいずれかで)維持し得る。銀行601がデジタルコインを受け入れるための条件の1つは、最も新しく受信された業者識別子ハッシュが(たとえば、ブロックチェーン150上の)記録に現れないということであり得る。業者識別子ハッシュがデータベースに現れる場合、それは、業者がデジタルコインを二重消費しようとしていることを意味する。
例示的なトランザクション
図13aから図13cはそれぞれ、任意のデジタルキャッシュプロトコルにおいて使用され得る、例示的で包括的な引出、消費、および預入トランザクションを示す。これらの例示的なトランザクションは任意のプロトコルのために使用されてもよく、変化するトランザクションの唯一の部分はOP_RETURNデータである。
図13aは、包括的な引出トランザクションを示す。Alice602は、コインのシリアル番号に対する署名σBを銀行601から取得する。引出トランザクションは、このトランザクションが行われたことを知らせるために作成される。このトランザクションの入力は、追跡可能なプロトコルでは銀行601からであり、または追跡不可能なプロトコルではAlice602からである。データは各デジタルコインシステムのために指定される。
図13bは、包括的な消費トランザクションを示す。Alice602は、正しいフォーマットを有するコインとコインに対する銀行601からの署名σBとを自分が有することを、業者603に証明する。彼女の消費が業者603によって受け入れられたことを知らせるために、消費トランザクションが作成され、ここで、入力は引出トランザクションに由来する。このトランザクションは、コインのシリアル番号と、彼女が二重消費する場合に彼女を特定できる追加の情報とを含む。追跡可能な場合に消費されることになる別のコインがある場合、Alice602が次のコインを消費できるように、引出トランザクションの出力と同じフォーマットを有する追加の出力がある。OP_RETURNにおけるデータは、各デジタルコインシステムに対して指定されるものとする。
図13cは、包括的な預入トランザクションを示す。業者603は、業者がコインを正当に受け入れたことの証明を銀行601に提供する。消費トランザクションの出力を消費し、預入が受け入れられたことを知らせる、預入トランザクションが作成される。このトランザクションは、追跡可能なプロトコルと追跡不可能なプロトコルの両方で同じである。OP_RETURNの中のデータは、各デジタルコインシステムに対して指定されるものとする。
例示的なプロトコル
追跡可能なデジタルコイン
以下は、二重消費を防ぐためにブロックチェーンを利用する、例示的な追跡可能なプロトコルを説明する。追跡可能なプロトコルでは、デジタルコインは、各消費トランザクションが、銀行601によって署名される引出トランザクションに結びつけられるという事実により追跡可能である。この結びつきは、コインが銀行601によって実際に発行されたことを証明するのがより簡単であるという結果をもたらす。
Alice602は、銀行601からウォレットを引き出し、デジタルコインの一部を業者603で消費することを望み、業者603は次いで、コインを銀行601に預け入れる。銀行601は、公開/秘密鍵のペア(pkB,skB)を有する。このプロトコルでは、銀行601は同時に(i+3)個のメッセージに署名することができる。そうすると、銀行の公開鍵は(n,a1,...,ai+3,b,c)であり、秘密鍵は、n=p1p2が特別RSAモジュラスとなるようなp1である。以下の例示的なプロトコルはi=1を使用するが、より大きいiに対してプロトコルを修正するのは簡単である。この拡張性は、追加の秘密がコミットされ、次いで二重消費の場合に明らかにされるのを可能にする。加えて、Alice602および業者603は各々、一部の
Figure 2023522258000055
に対して(pku,sku)=(gu,u)となるような固有の一意な鍵のペアを有し、前のようにqは素数であり、g∈Gである。最終的には、すべてのユーザも、(pk=sk・G,sk)という形式の固有の楕円曲線(EC)公開/秘密鍵のペアを有するので、彼らはビットコインを受け取って消費することができる。Aliceの鍵のペアは(PA,skA)と表記され、銀行の鍵のペアは(PB,skB)により与えられ、最後に、業者の鍵のペアは(PM,skM)である。
Aliceは、銀行601に連絡して、値
Figure 2023522258000056
のウォレットWを引き出すように銀行に頼み、このウォレットは、コインシリアル番号に対するシードおよび二重消費式を含む。彼女はコミットされたシード(u,s,t)を銀行601に送信し、銀行601は次いでこのコミットメントに署名し、この署名σBを返す。コインの全体の値
Figure 2023522258000057
が彼女の口座から引き落とされる。
Figure 2023522258000058
個のコインを引き出すために、以下のステップがとられる。このプロトコルでは、Alice602は、コインの内部カウンタJの値の知識のゼロ知識証明の性質により、
Figure 2023522258000059
個のコインを含むウォレットだけを引き出すことができ、ljはカウンタのビット単位の長さであることに留意されたい。
Alice602は、冒頭で説明されたゼロ知識証明を使用してskuの知識を提供することによって、自分自身を銀行601に対して識別する。Alice602および銀行601はここで、以下の方法でウォレットの秘密を生成する。Alice602は、ランダムな値s'、t、
Figure 2023522258000060
を選択し、Pedersen Commitment
Figure 2023522258000061
を銀行601に送信する。銀行601は、ウォレットに寄与すべきランダムな整数r'を選択し、これをAlice602に送信する。銀行とAliceの両方が個別に、
Figure 2023522258000062
を計算する。
このステップは基本的に、ウォレットの秘密を作成し、銀行601にランダム性をこのステップへ与えさせることである。Alice602および銀行601は、Pedersen Commitment Aにおいて値に対する銀行の署名を取得するためのCL署名プロトコルを実行し、署名σB(u,s,t)=(V,r,e)をもたらし、ここで
Figure 2023522258000063
である。この署名を計算するための方法は、準備セクションにおいて上で与えられ、ここで(x1,x2,x3)は(u,s,t)である。
Alice602はウォレットW=(u,s,t,σB(u,s,t),J)を保存し、Jは0に初期化されるljビットカウンタである。銀行601による署名は、ウォレットシードs、tだけに対するものであるので、シリアル番号および二重消費式は、ウォレットに必ずしも記憶される必要はなく、代わりに、必要なときにウォレットシードおよびウォレットカウンタを使用して導出され得ることに留意されたい。銀行601は、Alice602に対応する口座から、
Figure 2023522258000064
個のコインを引き落とす。
ウォレットは、
W=(u,s,t,σB(u,s,t),J)
という形式を有し、ここで
・uはAliceの秘密鍵であり、
・sはコインシリアル番号のシードであり、
・tは二重消費式のシードであり、
・σB(u,s,t)はこれらの値に対する銀行による署名であり、
・Jはウォレットのカウンタである。
さらに、ウォレットは、Alice602が二重消費する場合、さらなる秘密を明らかにするために使用される追加の変数を含み得る。追加の変数は(z1,...,zl)と表記され、ここでlは、明らかにすることを望む追加の秘密の数である。l∈[0,n-3)であり、CL署名スキームの群はnを法とし、範囲はn-3までであり、それは、J.Camenisch、S.Hohenberger、およびA.Lysyanskaya、「Compact e-cash」、Annual International Conference on the Theory and Applications of Cryptographic Techniques、2005年において説明されている、Camenish、Hohenberger、およびLysyanskaya(CHL)プロトコルにおいて、署名すべき3つの値がすでにあるからであることに留意されたい(さらなる詳細については以下を参照されたい)。銀行601は、他のウォレットの秘密でこれらの新しい変数に署名するので、ウォレットは
W=(u,s,t,(z1,...,zl),σB(u,s,t,(z1,...,zl)),J)
になる。
これらの追加のウォレットの秘密は、CHLにおいてTを計算するためにtが使用されるのと完全に同じ方法で、l個の二重消費式Z1、...、Zlを計算するために使用され得る。
CHLにおけるウォレットシードsは、
s=s'+r'
により与えられ、Alice602はs'をランダムに選び、銀行はr'を与える。s'は、以下の方法で別のランダムな変数から導かれ、
s':=hash(gs'')
ここでs''は、この新しいランダムな変数であり、ウォレットシードへのAliceの寄与として解釈される。したがって、ウォレットシードsはここで、
s=hash(gs'')+r'
と定義され、Aliceはランダムにs''を選び、銀行601はr'をランダムに選ぶ。このようにしてシードsを再定義する目的は、新しい二重消費式
Figure 2023522258000065
から直ちに導出可能であり、これは、元の実装形態におけるTと同じ特徴を提供し(CHLプロトコルの説明については以下を参照されたい)、その結果、Alice602が二重消費する場合、彼女のシードが銀行601により導出可能になる。これは以下の方法で行われる。Alice602が二重消費する場合、銀行601は、Z1、R1、Z2、R2で標識されるZとRの2つの異なる値を知る。そして、銀行は
Figure 2023522258000066
を計算し、完全なシード
s=hash(gs'')+r'
を計算することができ、r'は銀行の固有の寄与であり、これは、銀行が引き出しの際にAliceの情報とともに記憶したものである。次いで、コインシリアル番号に対する式
Figure 2023522258000067
を使用して、すべての残りの
Figure 2023522258000068
に対して、残りのシリアル番号が計算され得る。銀行601は次いで、未消費のシリアル番号を公表することによって、彼女のウォレットの中のすべてのこれらの未消費のコインをブラックリストに入れることができる。このプロセスは、秘密がgの形式である限り、任意の数の追加の秘密に対して繰り返され得る。ここで、この二重消費値Zはコインの交換に含まれる。この時点で、銀行601は、
W=(u,s,t,z1B(u,s,t,z1),J)
という形式でウォレットをAlice602に出しているので、銀行601は図7aにおいて与えられるようにトランザクションをブロードキャストする。
第1の出力は、Alice PAまたは銀行PBによってアンロックされ得る1-of-2マルチシグと、第1のコインのシリアル番号のハッシュとを含む。すべてのより後のコイン出力もこのフォーマットを有する。これは、これらの出力のいずれかをアンロックするには、コインのシリアル番号を知る必要があることを意味し、この時点ではAlice602のみがシリアル番号を知っている。Alice602が二重消費する場合、銀行601だけが、コインのシリアル番号がチェーン上に現れる前にそれらを計算することができる。そして、銀行は、この形式のあらゆるコイン出力を消費することができ、これによりコインがブラックリストに入る。ロッキングスクリプトにおけるこの追加の要件は、銀行601が悪意を持ってコインをブラックリストに入れることができないことを意味する。シリアル番号はチェーン上にあるので、ランダムな順序でシリアル番号を消費するのがAlice602にとってよりセキュアであることに留意されたい。すべての消費されたシリアル番号を記憶する必要なく、これを行うための1つの方法は、ランダムにa∈Jを選び、
Figure 2023522258000069
を最大公約数
Figure 2023522258000070
となるように選ぶことである。そして、第iのコインを消費するために、
Figure 2023522258000071
を選ぶ。このプロセスでは、すべてのコインが消費されるまでカウンタが繰り返されないので、彼女は、すでに消費したコインのシリアル番号の記録をとる必要がなく、消費された総数ならびに初期値aおよびbのみを記録するだけでよい。トランザクションにおける第2の出力は単に、銀行601への釣銭である。
最後に、OP_RETURN出力において与えられるデータが図7bにおいて与えられ、第1のフィールドは、どの法定通貨をコインが表すかを指定し、コインプロトコルフラグは、コインがどのデジタルキャッシュプロトコルを使用して発行されるかを指定し、コインアクションフラグは、このトランザクションがどの行動に対応するかを指定し、これはこの例では引き出しであり、コインの値は、引き出されたコインの数である。この例では、64個のコインが発行される。この後、必要であれば任意の追加の情報を追加するためのオプションがある。
複数のコインが一度に発行され得る。1つの選択肢として、ウォレットの残高がOP_RETURNデータにおいて与えられ得る。次いで、Alice602からコインを受け入れる者は誰でも、残高および以前の消費の値が一致することを確認することができる。これは、カウンタが正しい範囲にあることの保証ともなる。この場合、複数のコインを一度に消費するのは簡単であり、それは、それらがOP_RETURNにおいて容易に記載され得るからである。別の選択肢として、引出トランザクションに複数のP2PKH出力があり得る。次いで、1つ1つの出力が単一のコインを表し、1つの出力が、1つのコインが消費されるたびに消費される。ウォレットの残高は、トランザクションの未消費の出力の数によって容易に計算可能であり、コインをブラックリストに入れることはこのプロトコルでは簡単であり、それは、対応する未消費のトランザクション出力(UTXO)を消費することにより、ブラックリストに入れられるからである。この事例の欠点は、発行されたコインの数が大きい場合、UTXOの数が大きいことであり、これは、このデータを記憶されたままにするためにマイナーに負担を課す。各々の事例に利点および欠点がある。好ましい事例は状況に依存する。第1の選択肢が、この例示的な追跡可能なプロトコルにおいて使用される。
この例示的なプロトコルでは、コインを消費するために、Alice602が業者603に
・コインのシリアル番号、
・Rを使用して計算され、Aliceが業者から取得する、二重消費式、
・すべてのこれらの式が正しく形成されるというゼロ知識証明、
・署名σBの知識のゼロ知識証明が値(u,s,t,z1)に対する銀行の署名であること、
・カウンタJが正しい範囲にあるという証明、ならびに
・引出トランザクション、および任意のさらなる消費トランザクション
を業者603に与える。
Alice602がX個のコインを引き出すと仮定する。これらのコインのシリアル番号はすべて、同じシード「s」を有するので、異なるシリアル番号を作成するために、1からXに向かうカウンタもコインの中にあってもよく、このカウンタをシリアル番号に含めることは、基本的に、各コインが異なるシリアル番号を有することを意味する。Alice602は、所与のシリアル番号がシードおよびカウンタから導出されたことを証明することを要求され得る。範囲は任意であってもよく、たとえば、1,...,Xからであり得る。しかしながら、彼女がX+1,X+2,...から導出されたコインシリアル番号を作成して、これが銀行602から引き出されたコインであって、シードが署名されたことの証明がここにあると言うのを止めるものは何もない。よって、これを防ぐために、Aliceは、カウンタ値が1,...,Xの間にあることの証明を含む。
より詳細には、コインを消費するために、Alice602および業者603は以下のステップを実行する。Alice602はR=H(pkM||info)を計算し、ここで、infoは業者603によって選ばれる何らかの変数であり、Hは何らかの衝突耐性のあるハッシュ関数である。infoは、対応する二重消費式が異なることを確実にするために各トランザクションとともに変化する何か、たとえば、消費の時間および日付、消費の請求書、またはトランザクションカウンタである必要がある。Alice602は、コインシリアル番号および二重消費式を計算し、
Figure 2023522258000072
ここで
Figure 2023522258000073
は準備セクションにおいて与えられるDY疑似ランダム関数である。二重消費値は業者IDおよびその入力infoに依存するので、これらはこの前に計算することができない。
Alice602は(u,s,t,z1B,J)の知識のゼロ知識証明を送信し、これは、以下のようにして、メッセージ上で単一の署名Φへと変えられる。この署名は、Jが正しい範囲にあることと、S、T、およびZが正しく形成されることと、署名σBが正しく形成されることとを証明する。これは以下の方法で行われる。A=PedCom(J)とする。Aが範囲
Figure 2023522258000074
にある整数へのコミットメントであることを証明する。B=PedCom(u)、C=PedCom(s)、D=PedCom(t)、E=PedCom(z1)に、u、s、t、およびz1に対するCL署名の知識を、それらを明らかにすることなく証明させる。シリアル番号Sおよび二重消費式Tが正しく形成されることを証明する。そうすると、署名はメッセージ
Figure 2023522258000075
に対するものでなる。
最終的に、Alice602が消費しているコインは、
(S,R,T,Z,Φ)
という形式を有する。
署名Φが検証される場合、業者は(S,R,T,Z,Φ)を受け入れる。Φは、業者603が正しく行動したことの、銀行に対する証明として機能することに留意されたい。最後に、Alice602は、自分のカウンタを更新してJ=J+1にする。
Figure 2023522258000076
であるとき、ウォレットは空である。
引出トランザクションおよびこのトランザクションからつながるすべてのコイン消費のチェーンを業者603が与えられる場合、これは、コインが銀行601によって発行されたことを業者603に証明する。そして、Alice602は、シリアル番号および二重消費式が、シードs、t、z1、およびカウンタJから正しく計算されること、銀行601が値(u,s,t,z1)に署名したこと、ならびにカウンタが正しい範囲にあることを証明する必要がある。これは、メッセージ
Figure 2023522258000077
上の署名Φの知識のゼロ知識証明を用いて要約される。
この情報を用いて、業者603は、コインがまだ消費されていないこと、またはブラックリストに入れられていないことをまず確認しなければならない。業者603は、コインがトランザクションにおいてOP_RETURNデータフィールドにまだ現れていないことを確認することによって、これを行う。それがすでに現れていることを業者が発見する場合、業者はコインを拒絶する。そうではない場合、業者は、シリアル番号および二重消費式のゼロ知識証明が正しく形成されていること、およびJが正しい範囲にあることを確認する。加えて、業者603は、消費されたコインの数とウォレットの残高が一致することを確認することができる。コインがこれらのチェックをパスする場合、業者603はコインを受け入れる。業者603がコインを受け入れると、Alice602および業者603は、図8aで与えられる消費トランザクションを作成する。
Alice602は、引出トランザクションの出力を自分の入力として署名することによって、トランザクションを作成する。彼女は次いで3つの出力を作成する。第1の出力は、Alice602が消費することを望む次のコインに対応するので、この消費プロトコルは繰り返され得る。第2の出力は、銀行601へのコインの預け入れのために使用される。第3の出力は、消費されているコインのデータを含む。彼女は3つの出力に署名する必要があるので、フラグSIGHASH_ALL|SIGHASH_ANYONECANPAYを使用する。Alice602がこの特定のフラグを使用するので、Alice602がそれに署名した後、業者603は自分の入力を追加することしかできず、出力を追加することかできない。業者がAlice602からの支払いとしてコインを受け入れたことの記録があるように、業者603からの入力が必要とされる。代替として、最初にトランザクションに署名するように業者603に頼むことは、何らかのトランザクションデータの交換も必要とするので、Alice602に最初にトランザクションへ署名させて、それを知識のゼロ知識証明とともに送信させるのがより有益である。業者603は次いで、自分の入力でトランザクションに署名し、それをブロックチェーンネットワークにブロードキャストする。
第2の出力をアンロックするには、3つの署名のうちの2つがなければならないことに留意されたい。預け入れが受け入れられる場合、これは業者603および銀行601である。署名者の他の組合せは単に、当事者のうちの一名が悪意を持って行動する場合のセキュリティのためである。このプロトコルでは、銀行601は、以下の預入トランザクションが、自身の公開鍵PBおよび業者の公開鍵PMで署名されたこの出力を含む場合にのみ、デジタルコインを受け入れることに留意されたい。最終的な出力は、図8bの形式のデータを含む。このトランザクションは、業者603がコインを受け取ったことの確認である。Rは業者IDに依存するので、業者603以外の誰もコインを預け入れることができない。コインシリアル番号は今やチェーン上にあるので、他の業者が同じシリアル番号のコインを受け入れることはないはずである。Alice602が、すでにチェーン上にあるシリアル番号を業者603に提示する場合、この業者は、それを受け入れない場合であっても、コイン情報S、R、T、Zを公表することができる。これは、銀行601が彼女のウォレットの中のあらゆる残りの未消費のコインを計算し、それらをブラックリストに入れることが可能であることを意味する。二重消費者を引き渡す業者に報酬を与える選択肢がある。
このプロトコルでは、シリアル番号がチェーン上にあるので、業者603は、銀行601に連絡してコインを預け入れるのを待つことができ、二重消費が起こると、それはこの時点ですでに特定され得る。預け入れの間、銀行601は、業者603と同じ確認を行い、追加で、Rの原像が実際に業者のID(および何らかの他の情報info)であることを確認しなければならない。銀行601はまた、すべての以前のトランザクションが正しい形式を有することを確認し、そうではない預け入れを拒絶する。これは、すべてのユーザがプロトコルに従うことを確実にする。シリアル番号が提示され、二重消費ではないことがわかると、業者603および銀行601は、図9aに示されるように預入トランザクションに署名し、これは、コインが預け入れられたことの確認として機能する。業者603は、トランザクションテンプレートを作成し、入力に署名し、そしてこれをコインについての他の情報と同時に送信することができる。銀行601は次いで、署名を入力に追加し、トランザクションをブロックチェーンにブロードキャストする。このトランザクションは、銀行601が業者603から預け入れられたコインを受け入れたことを知らせる。データは図9bの形式を有する。
コインを預け入れるために、業者603はコイン(S,R,T,Z,Φ)を銀行601に与える。Φが検証され、Rが以前に預けられていない(すなわち、(S,R)が消費されたコインのリストの中にまだない)場合、銀行は、(S,R,T,Z,Φ)をリストに追加し、業者の口座に入金する。コインシリアル番号Sがすでにデータベースの中にあることを銀行601が発見する場合、銀行はRも同じであるかどうかを確認する。そうすると、あり得る状況が2つある。
Rが同じである場合、業者603がすでにコインを預け入れており責めを負うと銀行601は見なす。この場合、責めを負うのは業者603だけであるか、またはAlice602と業者603の双方であるかのいずれかであり得る。業者603がAlice602と共謀する理由はないので、銀行601がそのように見なすのは安全である。この状況において、Alice602は特定されて罰を受けるべきではないので、損をするのは業者603だけである。この事例は、ブロックチェーンを使用して、トランザクション出力が消費されていないか消費されたかだけであるというバイナリの性質を利用することによって、解決される。したがって、単純に、ブロックチェーンを使用すると、二重消費のいずれの事例も可能ではない。
Rが異なる場合、不正に行動したのは少なくともAlice602(および場合によっては業者603も)であるはずであり、銀行601は双方の識別情報を計算することができる。Aliceの識別情報を計算するために、以下の計算が行われる。以前のデータベースエントリをR1、T1と表記し、現在の値をR2、T2と表記する。そして、銀行601は、
Figure 2023522258000078
を使用してAliceの公開鍵を計算することができる。
すべてのコインシリアル番号を導出するために、したがって未消費のコインをブラックリストに入れるために使用できるgs''をもたらす、Z1およびZ2に対応する等価な計算がある。
最後に、業者603も責めを負うべきである場合、二重消費されたコインの両方のバージョンにおいて、infoは異なり、pkMは等価である。infoとpkMの両方が各預け入れとともに記憶されるので、銀行601は直ちにこれを検出することができ、銀行はAlice602と業者603の双方を罰することができる。したがって、いずれの当事者にも共謀する動機がない。
コインの二重消費が事実である場合、コインシリアル番号がブロックチェーン上で二度現れ、銀行601は、最初に現れたコインだけを受け入れる。次いで、銀行601は、両方の出現からの式を使用して、二重消費値T1、T2および業者ID R1、R2を使用して二重消費者の識別情報を計算する。加えて、シードは、類似の方法でZ1、Z2およびR1、R2から計算され得る。これらの計算が上に示されている。銀行601は次いで、Aliceの識別情報guおよびコインシードsを計算することができる。次いで、銀行601は、Alice602に対応するシリアル番号を導出し、これらをチェーン上で公表し、コインをブラックリストに入れることができる。当然、このプロトコルは、銀行が上記のトランザクションに業者603への支払いを含めることによって、Alice602を銀行601に引き渡すことについて業者603に報酬を与える選択肢を可能にする。
二重消費コインが同じシリアル番号および業者IDを有している場合、業者603が責めを負わなければならないことを銀行601が知っていることを思い出されたい。上で説明されたすべてのトランザクションのすぐ後に預け入れがある場合、業者603がこのプロトコルでコインを二回預け入れることは決して可能ではなく、それは、一回目の預け入れが二回目の預け入れに必要なUTXOを消費するからである。
追跡不可能なデジタルコイン(CHL)
この例示的なプロトコルはコインの追跡可能性をなくし、コインが正当に発行されたことを検証するための業者603および銀行601の負担を増やす。この負担は、上で説明された追跡可能なプロトコルにおいて実行されるのと同じ確認を含むが、二重消費が不可能であるという追加の特徴を伴い、二重消費のあらゆる試みを直ちに検出することができる。
追跡可能なプロトコルと同様に、Alice602は、銀行601からいくらかのデジタルコインを引き出し、それらを業者603で消費することを望み、そして、業者603はそれらを銀行601に預け入れる。セットアップは以前のセットアップと同じである。銀行601は公開/秘密鍵のペア(pkB,skB)を有する。そうすると、銀行の公開鍵は(n,a1,...,a4,b,c)であり、秘密鍵は、n=p1p2が特別RSAモジュラスであるようなp1である。加えて、Alice602および業者603は各々、前のように、mが素数であり、g∈Gとして、いくつかの
Figure 2023522258000079
に対して(pku,sku)=(gu,u)であるような、固有の一意な鍵のペアを有する。すべてのユーザも、(pk=sk・G,sk)という形式の固有のEC公開/秘密鍵のペアを有するので、ビットコインを受け取って消費することができる。Aliceの鍵のペアは(PA,skA)と表記され、銀行の鍵のペアは(PB,skB)により与えられ、最後に、業者の鍵のペアは(PM,skM)である。
このプロトコルでは、Alice602は、
W=(u,s,t,z1B(u,s,t,z1),J)
という形式でウォレットを引き出し、uはAliceの秘密鍵であり、sはコインシリアル番号のシードであり、t、z1は二重消費式のシードであり、σBは秘密に対する銀行601による署名であり、Jはウォレットのカウンタである。Alice602は、引き出しを確認するためにトランザクションをブロードキャストする。追跡不可能なプロトコルでは、彼女のウォレットの中の各コインに対応する引出トランザクションがなければならず、そしてこれらは結びつけられない。Alice602は、銀行601からのウォレットの引き出しに対する引出トランザクションを後で作成する。彼女がそれを同時に行う場合、銀行601は、トランザクションがどの引き出しに対応するかを知ることが可能になる可能性が高い。実際には、Alice602を特定することの容易さは、ecashシステムのユーザの数に依存する。1人(または数人)のユーザしかいない場合、ユーザは、チェーン上で引出トランザクションを行うといつでも、銀行601により容易に特定可能である。
Alice602は、各コインを表す自分の引出トランザクションを作成する。銀行601ではなくAlice602が引出トランザクションを作成するということが、追跡可能なプロトコルと追跡不可能なプロトコルとの重要な差であることに留意されたい。このトランザクションは、図10aにおいて与えられる形式を有する。このトランザクションは単一のコインを表す。前のように、ロッキングスクリプトはコインのハッシュを含むので、銀行601は、コインのシリアル番号を知っている場合にのみ出力を消費することができ、これはAlice602が二重消費するときにだけ発生する。
OP_RETURNデータが図10bに示されている。このプロトコルでは、コインはある設定された値を有するので、残高は必要とされず、それは各UTXOが値の1単位を表すからである。Alice602は、消費プロトコルが開始される前であれば、望むときにいつでもこのトランザクションを作成することができる。言及されたように、引き出しの後のランダムな時間に、およびウォレットの中の他のコインに対応するトランザクションとは異なる時間に、このトランザクションを作成するのがAlice602にとってよりセキュアであり、それは、これがプライバシーを損なうからである。銀行601は、対応する引出トランザクションがこのフォーマットを有しない限り、預け入れられたコインを受け入れない。これは、銀行601が消費できない出力を作成することなどの、悪意を持ってAlice602が行動するのを防ぐ。
コインを消費するために、Alice602は、コインのシリアル番号、二重消費式、ウォレットの秘密とともにこれらが正しく形成されることのゼロ知識証明、ウォレットの秘密に対する銀行601による署名の知識のゼロ知識証明、カウンタが正しい範囲にあることのゼロ知識証明、および引出トランザクションを、業者に提供する。
証明はすべて、メッセージ
Figure 2023522258000080
上で知識Φの署名として送信され、追加の秘密z1に対応する追加のコミットメントEがあり、これは
E=PedCom(z1)
と定義される。
まず、業者603は、シリアル番号がブロックチェーンにまだ現れていないことを確認しなければならない。この確認は、ブロックチェーンのイミュータブルな履歴を利用している。コインシリアル番号がこの検索において見つからない場合、それがブロックチェーン上に出現したことがあるということはあり得ず、したがってそれは決して消費されたことがないと業者603は確信することができる。ブロックチェーン検索に不審な点がないことが判明する場合、Alice602は次に、シリアル番号および二重消費式がすべて正しく形成されることを業者603に証明しなければならない。最後に、Alice602は、カウンタが正しい範囲にあることを証明しなければならない。
業者603は、コインを受け入れると、図11aに示されるように消費トランザクションを作成する。このトランザクションにおいて、Alice602は、自分の入力を追加し、SIGHASH_SINGLE|SIGHASH_ANYONECANPAYを使用して第1の出力だけに署名する。OP_RETURNデータのハッシュ<h2=SHA-256(data2)>が出力に含まれるので、Alice602は間接的にそれに署名し、それは変更できない。そして彼女はこれを業者603に送信し、業者603は自分の入力および釣銭を自分自身に追加し、トランザクション全体に署名する。この入力は、コインを受け入れたことについての業者からの署名を表すために含まれる。
第1の出力は、業者603および銀行601によって署名される、預入トランザクションにおいて使用される出力である。ある当事者が悪意を持って行動する場合に備えて、署名の他の組合せが含まれる。この第1の出力は、追跡可能な消費トランザクションにおける第2の出力と等価である。この場合の第2の出力は単に業者603への釣銭であり、最終的な出力は図11bに示されるデータである。
このトランザクションは、コインを預け入れるために必要なすべての情報を共有することなく、業者603がコインを受け取ったという業者603による記録であり、それは、前のように、業者以外の誰もがRの原像を知らないからである。加えて、知識の証明に対する署名は秘密に保たれる。ここで共有される唯一の情報は、二重消費者を特定するために必要とされるものであり、残りの知識はコインが預け入れられるまで隠される。Alice602が二重消費を試みていることを業者603が発見する場合、銀行601は、Alice602を特定できるようにコインの詳細を渡すように業者603を動機付けることができることに留意されたい。
ここで、業者603は、銀行601に連絡して、業者にとって都合の良いときにいつでもコインを預け入れる。銀行601は、すべての以前のトランザクションが正しいフォーマットを有する場合、第2のトランザクションにおいて最初に現れたコインのみを受け入れる。業者603は、トランザクション、Rの原像、および署名Φを銀行601に与える。銀行601は次いで、シリアル番号SおよびRが銀行に初めて提示されたこと、およびシリアル番号がブラックリストに入れられていないことを、データについてブロックチェーンを検索することによって確認する。それらは、銀行が提示されたトランザクション内で一度しか現れないはずである。これが成立する場合、銀行601は業者603と同じ証明を検証し、加えて、引出トランザクションおよび消費トランザクションは正しく形成される。すべてのこれらの確認が済むと、図12aの預入トランザクションはブロックチェーンに公表される。
このトランザクションは、業者603がコインを預け入れたことと、銀行601がそれを受け入れたこととを知らせる。入力は、消費トランザクションからのものであり、業者603と銀行601の両方によって署名され、それらが両方ともこの対話に関与したことを知らせる。第1の出力は単に銀行への釣銭であり(もしそれがある場合)、第2の出力は図12bに示されるデータを含む。二重消費されたシリアル番号を公表するための空間がある。預け入れが二重消費されたコインの預け入れであると判明する場合、銀行601は、Alice602または業者603が責めを負うべきかどうかを確認することができる。それが同じシリアル番号および業者ID Rを持つコインである場合、業者603が責めを負うべきであると考えられ、銀行601はコインを拒絶する。業者IDが異なる場合、責めを負うのはAlice602である。そして、銀行601は、二重消費式を使用してAliceの鍵guおよび彼女のシードs'を計算し、このことからすべてのシリアル番号を計算し、Alice602が作成したすべてのUTXOを消費し、追加でシリアル番号をチェーン上で公表することができる。
第1のシステムに対するこのシステムの最大の利点は、コインが完全に追跡不可能であるということである。銀行601は、Alice602にコインを発行したことを知ることができ、業者603がコインを預け入れたことを知ることができるが、引き出しから消費までにコインがどの経路をたどったかを、それが二重消費の結果ではない限り知らない。
追跡可能なプロトコルと追跡不可能なプロトコルの両方が、販売時点で誰かが二重消費するのを防ぎ、それは、業者が、以前に消費されたコインについて預け入れの時点ではなくこの時点で確認するからである。これは、この方法で実装されるあらゆるデジタルコインシステムに対して当てはまる。加えて、すべてのトランザクションデータがブロックチェーン上で公表されるので、デジタルコインは今や容易に監査可能である。プロトコルに関与する者は誰でも、自身の関与を監査者に証明することができる。
これらのプロトコルは、ブロックチェーンの2つの性質を使用して以前のecashシステムを改善する。使用される第1の性質は、ブロックチェーンが分散されたイミュータブルなデータベースであるので、消費されるコインのリストが誰でも公に入手可能であるという事実である。これは、コインを受け入れる者が、コインがすでに消費されているかどうかを確認するのをより簡単にする。加えて、これらのプロトコルは、出力のトランザクションが消費されているかまたは消費されていないかのいずれかであるというバイナリの状態を利用する。出力の状態が消費されていない状態から消費された状態に変化すると、それを再び消費することはできないので、二重消費は単純に不可能である。
コインの引き出し、消費、および預け入れの各段階は接続され得るので、ある意味では「追跡可能」である。デジタルコインが引き出され、消費され、預け入れられたのを誰でも見ることはできるが、ユーザの識別情報は、各トランザクションにおいて使用される公開鍵に対応する識別情報の知識を持つ者を除き、全員に隠される(これはブロックチェーン全般の特徴である)。重要な違いは、追跡可能なプロトコルでは、銀行601がコインを誰が引き出したかを厳密に知るが、追跡不可能なプロトコルでは、銀行601は預け入れの時点で引出者の識別情報を知らないということである。
以下は、OP_RETURNデータのコンテンツを指定することによって、図13aから図13cの一般的なトランザクションを使用して実装され得るいくつかの例示的なecashプロトコルを説明する。
Chaum ecashプロトコル
図14aから図14cはそれぞれ、このプロトコルに従った、引出トランザクション、消費トランザクション、および預入トランザクションのための例示的なOP_RETURNデータを示す。Chaum'sはオンラインecashシステムであり、これは、銀行が、あらゆるコインをそれらが消費される時点で受け入れるためにオンラインでなければならないことを意味する。チェーン上でこのプロトコルを移動させると、ecashプロトコルはオフラインになる。
Aliceは銀行からコインを得ることを望み、彼女はそれを業者で消費する。銀行は、2つのRSA素数p、qを選び、n=p・qを計算し、その因数分解を秘密に保つ。そうすると、整数mod nのm乗根は、素数の因数分解の知識なしで計算するのは計算上現実的ではない。この概念は、コインに対する銀行署名の役割を果たす。コインは
(s,f(s)1/3 mod n)
という形式を有し、fはハッシュ関数などの何らかの一方向性関数であり、公に知られており、sはコインのランダムシードである。そうすると、f(s)1/3 mod nはコインシリアル番号である。銀行による3乗根の計算は、コインに対する銀行による署名である。3乗根は恣意的な選択であり、それは、mの選択がすべての引き出されるecashに対して一定である限り、任意のm≧2に対するf(s) mod nのm乗根の計算であり得る。コインを発行するために、以下のステップがとられる。
Aliceは、ランダムコインシードsおよびブラインディング値rを選び、「ブラインディングされた」コインシリアル番号B=r3・f(s) mod nを銀行に送信する。銀行は、銀行だけが計算できるBの立方根、B1/3=r・f(s)1/3 mod nを返し、Aliceの口座から£1を控除する。立方根のこの計算は、銀行に対する署名を表す。これは、銀行だけがnの因数分解を知っているので、銀行だけがnを法とする立方根を計算できるからである。n=pqを法とする常にちょうど1つの立方根があることに留意されたい。一方、銀行はrの値を知らないので、コインシリアル番号f(s)1/3 mod nを決定することができない。しかしながら、銀行は自身がこの値を計算したことを知っており、それは他の誰も計算できないからである。Aliceは、
C=r-1・B1/3=f(s)1/3 mod n
のように、この結果を自分のブラインディング値の逆数r-1と乗じることによって、コインシリアル番号をアンブラインディングするので、これで彼女はシードおよびコインシリアル番号からなるコインを有する(s,f(s)1/3 mod n)。Aliceは次いで、これを記憶し、必要とするときに消費する準備ができている。
銀行はこの時点でf(s)1/3 mod nの明確な値を知らないので、今後それが預け入れられるとき、銀行はそれをこの対話と結びつけることができないことに留意するのは重要である。しかしながら、銀行はそれがnを法とする立方根であることを確認でき、銀行だけがこれを計算する能力を持っているので、銀行は自分がそれに「署名した」ことを知る。この例では、単一のコインを引き出すことだけが可能である。1つより多くのコインを引き出すために、異なるsおよびrに対してこのプロトコルが繰り返されることになる。
業者に£1を支払うために、Aliceは厳密にこのコインを業者に与える。業者は、コインシリアル番号の3乗を計算し、追加で所与のs値から公開関数fの値を計算することによって、コインが正しい形式であることを確認し、
Figure 2023522258000081
C'=f(s) mod n
これらの2つの値を比較する。それらが同じである場合、コインは正しく形成される。
ブロックチェーンを利用する前に、業者は、銀行に連絡して、コインを受け入れる前にコインがまだ消費されていないことを検証する。銀行は次いで、業者と同じ結果を計算することによって、このコインが正しい形式を有することを追加で確認し得る。コインが検証されると、銀行は、このコインシリアル番号を自身のデータベースに追加する。
Chaumian ecashを記録するためにブロックチェーンを使用することの大きな利点は、それがプロトコルをオフラインにするということである。業者は、銀行に連絡してデータベースを直ちに確認するのではなく、この分散型データベースを自分で確認し、すでに消費されているコインを拒絶することができる。これは、いずれのオンラインプロトコルにも当てはまる。コインはブロックチェーンからオフラインで移動され得る。
加えて、UTXOのバイナリの性質は、コインを二回預け入れるための二重消費または試みが、追跡可能なプロトコルでは単純に起こり得ないことを意味する。これは、銀行は一度より多く同じコインに署名しないので、コインを表す引出トランザクションの消費可能なUTXOは1つであるからである。そして、同様に、対応する引出トランザクションのUTXOは一度しか消費できないので、預け入れは一度しか起こり得ない。追跡不可能なプロトコルでは、これは、このUTXOの性質と分散型データベースの性質の両方に依存する。業者および銀行はここで、同じコインに対応する他の引出トランザクションが作成されていないことを確実にしなければならない。これは、Chaumian ecashを改善するのに十分である。
追跡不可能なecash
図15aから図15cはそれぞれ、このプロトコルに従った、引出トランザクション、消費トランザクション、および預入トランザクションのための例示的なOP_RETURNデータを示す。
上記のChaum ecashシステムは、ブロックチェーンを使用せずにキャッシュをオフラインで消費できるように拡張され得る。これは、引出者の識別情報をコインに組み込むことによって行われ、そして、引出者が自分の識別情報を二重消費するかどうかが計算され得る。一度により多くの値を(および異なる時間に別の値を)引き出すことも可能である。これは、業者がコインを預け入れるのを待つことができ、それが二重消費である場合、二重消費者の識別情報を計算できることを意味する。加えて、このプロトコルでは、Aliceは、2j-1という引き出される値までコインを消費し、そして、あらゆる消費されていない値から釣銭を得ることができる。しかしながら、彼女は別の業者において釣銭を消費することはできない。
このシステムでは、銀行は、n=p・qおよびn'=p'・q'であるような2つのRSA整数n、n'を公表し、p、q、p'、q'は素数であり、因数分解は秘密のままである。この実装形態では、Aliceの銀行口座番号はuと表記され、彼女のコインカウンタはjと表記される。いずれわかるように、彼女が二重消費する場合、彼女の銀行口座番号は導出可能になる。引数2の衝突困難な関数f、gが公に知られている。すなわち、2つの引数を有する2つの関数がある。
Aliceが値2j-1のコインを引き出すことを望む場合、彼女は銀行に式のt個のペアを送信し、これらを「メジャー」候補および「マイナー」候補と呼ぶ。メジャー候補は、コインのシリアル番号および二重消費防止に寄与する。そして、マイナー候補は、トランザクションから釣銭を得るために使用される。加えて、ペアの数tと、どれだけのコインをAliceが引き出すことを望むかということとの間の関係がいずれわかる。各メジャー候補に対して、Aliceは、i=1,...,tに対してlというビット長を有するai、bi、ci、di、ei、riをランダムに選ぶ。メジャー候補Miは、
Mi=f(xi,yi)
という形式であり、ここで
xi=g(ai||bi,ci)
かつ
Figure 2023522258000082
であり、
Figure 2023522258000083
はxor記号であり、||は連結を意味する。各マイナー候補miは、mi=g(bi,ei)により与えられる。
Aliceは、ランダム値riを用いて候補をブラインディングし、
Figure 2023522258000084
ここでkはコインの中のメジャー候補の数である。最初のj個の候補は2j-1までの二進の桁を表し、コインの中の残りのk-j個のメジャー候補は二重消費を防ぐことに留意されたい。これは、k-jが大きいほど、二重消費者を捕まえる可能性が高くなることを意味する。ブラインディングされたマイナー候補は
Figure 2023522258000085
である。
Aliceは、ブラインディングされた候補を銀行に送信する。銀行は、ペアの半分をランダムに選択し、それらが適切な形式を有することを明確に検証する。そうすると、銀行がその値を知らないt/2個のペアが残る。それらは正しいと見なすことができ、それは、銀行が提示されたt個のペアの半分をランダムに検証するからである。この例では、Aliceは、値2j-1の1つのコインを引き出しているが、彼女は、この時点で複数のコインに分割され得るより多くの候補を送信していたということがあり得る。これは、残りのメジャー候補をサイズkの集合へと単純に分割する銀行により行われる。このようにして、tのサイズは、Aliceが引き出すことを望むコインの数に依存する。銀行は、残りの候補の次数を選び、そして以下の根を抽出する。
Figure 2023522258000086
ただし1≦i≦k
Figure 2023522258000087
ただし1≦i≦j
銀行は、ブラインディングされたメジャー候補の積
Figure 2023522258000088
を返し、マイナー候補を個別に返す。銀行は次いで、合計の値が2j-1であるコインが発行されたことを記録する。Aliceは次いで、メジャー候補
Figure 2023522258000089
およびマイナー候補に対する
Figure 2023522258000090
を抽出する。Aliceはこれで、2j-1の値まで消費できるコインを有し、未消費の値に対するあらゆる釣銭を得る。
購入を行うために、Aliceはまず、Miの最初のj個を貨種(denomination)1、2、...、2j-1としてラベリングする。そして、Aliceは、各0<i≦jに対して、2つのもののうちの1つを業者に明らかにする。i番目の貨種が合計購入額における項である場合、Aliceはyiとxiの原像とを業者に明らかにする。i番目の貨種が合計購入額の中にない場合、Aliceはxiおよびyiを明らかにするだけである。以下の方法で二重消費を防ぐために、最後のk-j個の項が使用される。業者は、ランダムなバイナリ文字列zj+1,...,zkを選ぶ。j<l≦kとして、zl=1である場合、Aliceはyiとxiの原像とを業者に明らかにする。j<l≦kとして、zl=0である場合、Aliceはxiとyiの原像とを業者に明らかにする。そして、Aliceが二重消費する場合、業者が異なる文字列を選ぶ確率は高く、衝突するビットzlのいずれかからAliceの口座番号を計算することが可能であり、k-jが大きいほど二重消費の防止がよりセキュアになるのは、これが理由である。Aliceは、コインのすべての関連する原像を業者に与える。
銀行は、ブロックチェーンおよび/または消費されたコインの銀行のオフチェーンデータベース(データベースはチェーン上に記憶され得る)を確認することによって、コインが以前に消費されていないことを検証する。消費されていない場合、銀行は次いで、Sおよび業者に与えられる原像をデータベースに追加する。Aliceが釣銭を得るには、彼女は払い戻しのためにEiならびに原像biおよびeiを銀行に持ち込む。銀行は、iおよびbiを以前に消費されたコインと比較して、それらが以前に提示されていれば二重消費者としてAliceを特定する。
Aliceが業者でコインを消費して、業者が銀行に連絡する前に払い戻しを得る可能性がある。銀行が彼女の識別情報を釣銭トランザクションとともに記憶する場合、銀行は彼女を特定して銀行口座に課金することができる。しかしながら、彼女が値をキャッシュとして再び取り出す場合、彼女が正当に行動する限りこれが消費されるのを防ぐ方法はない。この攻撃は、以下で説明するように、ブロックチェーンを使用することによって防がれ得る。
二重消費が検出されるとAliceによって引き出されるすべてのコインが無効にされるように、このスキームを修正することが可能である。これは、行列内の初期候補を結びつけることによって行われ、ここで、初期候補は各々、行列におけるそれらの位置に対応するインデックスを有する。そして、銀行は、チェーン上でブラックリストを公表することによってコインをブラックリストに入れることができ、業者は、あらゆる提示されたコインをこのブラックリストに対して確認することができる。
このecashシステムをチェーン上で移動させることは、預け入れの時点ではなく消費の時点で二重消費を防ぐ。二重消費のこの試みを銀行に報告することもでき、銀行は追跡可能なプロトコルの場合には釣銭トランザクションに対する署名によってAliceを突き止めることが可能である。最終的に、いずれの二重消費者も、チェーン上に提示される情報から導出可能な識別情報を有する。これは、二重消費を試みるユーザに対する別の抑止力を与える。
裏書されたecash
図16aから図16cはそれぞれ、このプロトコルに従った、引出トランザクション、消費トランザクション、および預入トランザクションのための例示的なOP_RETURNデータを示す。
このecashは裏書されていないecashとして交換され得るので、Aliceは、自分がコインを所有することを、コイン全体を明らかにすることなく証明することができる。
このプロトコルは、CHLプロトコルと同じセットアップおよび引き出しを有する。Aliceがecashを業者で消費するには、彼らは次のステップを実行する。コインシリアル番号Sおよび二重消費式Tを業者に与える前に、Aliceはまず、ランダムな裏書(x1,x2,x3)を選ぶ。彼女は裏書されていないコイン(S',T',Φ',R,y)を計算し、ここで
Figure 2023522258000091
Figure 2023522258000092
、およびy=PedCom(x1,x2,x3)である。Φ'は、裏書されてないコイン(J,u,s,t,σB,x1,x2,x3)が正当であることのゼロ知識証明である。S'、T'は単に、彼女が裏書する中間の値であるので、S、Tによって表される実際のコインが、銀行に最終的に与えられる値になる。これらの値S、Tは上で説明された。裏書されていないコインは、後で業者に与えられ得るブラインディングされたコインである。CHLと同様に、業者は、Φ'を検証し、裏書されていないコインが正当であることを確認することができる。Aliceおよび業者が交換を続ける意向であるとき、業者は裏書(x1,x2,x3)を与えられる。これを使用して、業者は簡単に、裏書されたコイン
(S,T,Φ',R,(x1,x2,x3),y)を、以下の式
Figure 2023522258000093
を使用して計算することができ、これは次いで、前に説明されたのと同じ式をもたらす。この裏書されたecashとCHLプロトコルとの違いは、署名Φ≠Φ'であるということのみであるが、Φ'はそれでも、コインが銀行によって正しく発行されたことの十分な証明である。
Aliceは、彼女が望むだけ多くの裏書されていないコインを作成することができるが、それでも、彼女が二重消費した場合にのみ特定され得る。このプロセスは、Aliceがコインを持っていることを、コインを共有することなくAliceが示すことを可能にし、これは、彼女が実際にコインを所有していることを彼女が業者に証明できることを意味する。
加えて、販売が完了しない場合であっても、Aliceは、特定されることなく自分の裏書されていないコインを別の場所で使用することができる。CHLでは、Aliceがコインを業者に与え、何らかの理由で交換が完了しない場合、彼女は、特定される可能性を伴わずに自分のコインを他の場所で使用することができない。2名の異なる業者が、二重消費式が異なる同じシリアル番号を持っている場合、それらの二重消費式を使用して彼女の識別情報を計算することができる。
このプロトコルでは、業者はコイン(S,T,Φ',R,(x1,x2,x3),y)を預け入れ、銀行は、CHLコインと同じ条件、さらに(u,s,t,σB,J,x1,x2,x3)に対する新しい署名Φ'を検証することができる。銀行は、ブロックチェーン上のあらゆる提示されたコインに対して(S,T,R)を記憶することによって、前と同じ方法で二重消費者を特定することができる。
他のecashプロトコルのように、これで、預け入れの時点ではなく消費の時点で二重消費が防がれる。これは、業者が、以前に消費されたコインについてこの分散型データベースを確認できるからである。加えて、追跡可能なecashは、UTXOを二重消費することが不可能であることにより、二重消費を防ぐ。追跡不可能なecashは、このことと、以前に消費されたコインについて誰でも確認できるという事実とに依拠する。このプロトコルでは、他のプロトコルのように、誰でも二重消費者の識別情報を計算することも可能なので、これは二重消費の試みに対する別の抑止力となる。
実用的なコンパクトecash
図17aから図17cはそれぞれ、このプロトコルによる、引出トランザクション、消費トランザクション、および預入トランザクションのための例示的なOP_RETURNデータを示す。
このプロトコルは、一度に複数のコインを消費することを可能にする。すなわち、「コンパクト」消費と呼ばれる、一度にウォレット全体を消費すること、または「バッチ」消費と呼ばれる、一度に複数のコインを消費することのいずれかである。
これは、元のCHLプロトコルと類似しているが、銀行は、署名により4つのメッセージ(3つではなく)に署名する必要があり、銀行は追加で、カウンタに対する署名を表す整数に署名する。銀行が、CL署名スキームを使用して、1つの署名を用いて4つのメッセージに署名できるような、公開鍵/秘密鍵のペア(pkB,skB)を有すると仮定する。それは、公開鍵が(n,a1,...,a4,b,c)という形式を有し、秘密鍵が、n=p1p2が特別RSAモジュラスであるようなp1であることを意味する。加えて、Aliceおよび業者は各々、いくつかの
Figure 2023522258000094
に対して(pku,sku)=(gu,u)であるような一意な鍵のペアを生成し、mは素数であり、g∈Gである。最後に、銀行が署名する整数σB(1), σB(2),..., σB(k)が公表され、ここでk=2lであり、これは引き出されるコインの数である。これらを、σ1:=σB(1)、σ2:=σB(2)、...、σk:=σB(k=21)と呼ぶ。
引き出しは、CHLの引き出しと非常に似ている。唯一の違いは、銀行がyと呼ばれる追加の変数に、他のシードとともに署名するということである。2l個のコインを引き出すために、以下のステップをとらなければならない。このプロトコルでは、Aliceは、コインの内部カウンタJの値の知識のゼロ知識証明の性質により、2l個のコインを含むウォレットを引き出すことしかできない。
Aliceは、準備セクションにおける定義で説明されたゼロ知識証明を使用してskuの知識を証明することによって、自分自身を銀行に対して識別する。そして、Aliceおよび銀行は、以下の方法でウォレットの秘密を生成する。Aliceは、ランダム値s、t、
Figure 2023522258000095
を選択し、Pedersen Commitment
Figure 2023522258000096
を銀行に送信する。銀行は、ウォレットに寄与すべきランダムな整数r'を選択し、これをAliceに送信する。銀行とAliceの双方が個別に
Figure 2023522258000097
を計算する。
このステップは基本的に、ウォレットの秘密を作成し、銀行にランダム性をこのステップへ与えさせることである。Aliceおよび銀行は、Pedersen Commitment Aにおいて値に対する銀行の署名を取得するためのCL署名プロトコルを実行し、署名
σB(u,s,t,y)=(V,r,e)
をもたらし、ここで
Figure 2023522258000098
である。この署名を計算するための方法は、準備セクションにおいて与えられ、ここで(x1,x2,x3,x4)は(u,s,t,y)である。AliceはウォレットW=(u,s,t,y,σB(u,s,t,y),J)を保存し、Jは0に初期化されるlビットカウンタである。銀行による署名は、ウォレットシードs、t、yだけに対するものであるので、シリアル番号および二重消費式は、ウォレットに必ずしも記憶される必要はなく、代わりに、必要なときにウォレットシードおよびウォレットカウンタを使用して導出され得ることに留意されたい。銀行は、Aliceに対応する口座から、2l個のコインを引き落とす。
この時点で、ウォレット全体を一度に消費することを望むか、またはウォレットの中のコインのうちのn個を消費することを望むかに応じて、プロトコルは2つに分けられる。Aliceがn個のコインを消費する場合、彼女はそれでも、単一のCHLコインとして、またはサイズn'の別のバッチとして、残りのコインを消費することができる。
コンパクト消費では、ウォレット全体を消費するために、Aliceおよび業者は以下のステップを実行する。Aliceは=PedCom(s,t,u,y)を送信し、s、t、uはCHLにおけるものと同じであり、yは二重コンパクト消費を防ぐために使用される別のランダムな数である。Aliceは次いで、Tc=gugR/(y+1)、および(s,t,u,y)に対する銀行からの署名σBを彼女が有することの証明も送信する。最後に、Aliceは、s、tを業者に開示する。署名の証明が正当であり、s、tが正しい場合、業者はコインを受け入れる。
バッチ消費では、n個のコインを消費するために、以下のステップをとる。Aliceは、i=0,...,n-1に対して、コミットメントC=PedCom(s,t,u,y,J)およびSi=g1/(s+J+i+1)、Ti=gugR/(t+J+i+1)を送信する。
彼女はまた、(σB,s,t,u,y,σJ,j,σJ+n-1)に対する署名の知識のゼロ知識証明を送信し、σJおよびσJ+n-1はコインのカウンタの最初と最後の値に対する署名である。署名Φの知識のゼロ知識証明Φは、(s,t,u,y)に対する署名σB、Jに対する署名σJ、J+n-1に対する署名σJ+n-1、i=0,...,n-1に対するすべてのSiおよびTi、ならびにCが値(s,t,u,y,J)に対するコミットメントであることの知識を提供する署名である。知識Φのゼロ知識証明が成立する場合、業者はコインを受け入れる。
このプロトコルでは、業者は、コインについてのすべての情報、および知識のゼロ知識証明に対する署名を銀行に与える。業者がバッチ消費を預け入れている場合、銀行は、すべてのシリアル番号および二重消費式を計算して、それらが個別に消費されたかのようにそれらを記憶しなければならない。銀行は次いで、(Si,Ti,R)を記憶し、SiおよびTiは預け入れられたすべての個別のコインに対するものであり、また、コンパクト消費の場合はTcを記憶する。そうすると、二重消費者の識別情報を計算するための式は以下の通りである。Aliceが2つのコンパクト消費を実行する場合、
Figure 2023522258000099
である。Aliceが二重バッチ消費を有する場合、gu=(TR'/T'R)1/(R'-R)である。Aliceがコンパクト消費において単一のコインを二重消費した場合、銀行はCHLと同じ方法でAliceの識別情報を計算することができる。
予想されるように、OP_RETURNデータはCHL ecashとほぼ同一である。コンパクト消費の場合、プロトコルにわずかな改変があり、銀行ではなく業者がすべてのシリアル番号を計算しなければならないことに留意されたい。これは次いで、消費トランザクションにおいてチェーン上で公表される。銀行がすべてのシリアル番号を計算するのを業者が待つ場合、Aliceは、コンパクト消費として消費された単一のコインを二重消費し得る。
他のプロトコルのように、このプロトコルは、預け入れではなく消費の時点で二重消費を防ぐ。以前のプロトコルと同様に、これは、消費されたコインのデータベース(ブロックチェーン)へのアクセスを業者が今や有するからである。業者は、このデータベースを確認して、すでに消費されているコインを拒絶することができる。加えて、これで、二重消費する者の識別情報は、チェーン上の情報にアクセスできる者により誰でも計算可能になる。これは誰に対する抑止力にもなり、それは自身の評判を台無しにする危険性があるからである。
Brands ecash(BRA)
図18aから図18cはそれぞれ、このプロトコルに従った、引出トランザクション、消費トランザクション、および預入トランザクションのための例示的なOP_RETURNデータを示す。
このオフラインecashは、知識のゼロ知識証明に関して、CHL ecashと比較してより計算的に簡単であるが、一度に1つのコインしか引き出すことができないという結果を伴う。
p、qが対応するバイナリ長lp、lqを伴う大きな素数であり、g、g1
Figure 2023522258000100
が次数qを有するように、p、q、g、g1、g2を、公に知られているシステムパラメータとする。そして、
Figure 2023522258000101
は銀行の秘密鍵であり、公開鍵はh=gx mod pである。
Figure 2023522258000102
をAliceの秘密鍵とし、彼女の公開鍵は
Figure 2023522258000103
である。銀行は、z=(Ig2)x mod pを計算し、それをAliceに送信する。代替として、銀行は
Figure 2023522258000104
および
Figure 2023522258000105
を公開鍵の一部として公表できるので、ユーザは自分でそれを計算することができる。
Aliceは、銀行からコインを引き出すことを望む。銀行は、銀行が秘密に保つ乱数
Figure 2023522258000106
を生成し、a=gwおよびb=(Ig2)wをAliceに送信する。Aliceは、ブラインドコインを銀行に送信して、以下の方法で銀行によるSchnorr署名を得る。Aliceは、
Figure 2023522258000107
、およびx1
Figure 2023522258000108
という3つの数字をランダムに生成する。Aliceは、S=(Ig2)s
Figure 2023522258000109
、およびz'=zSを計算する。Sはコインのシリアル番号であり、Bはコインのシードのゼロ知識証明において使用され、z'はSchnorr署名の一部を形成する。Aliceは、もう2つの乱数μ,v∈Zqを生成し、a'=aμgvおよびb'=bSvを計算する。これらの2つの値も、Schnorr署名の一部を形成する。Aliceは最後に、課題c'=H(S,B,z',a',b')を計算し、ここでHはlHビットの出力をもたらす何らかの衝突困難ハッシュ関数である。Aliceは次いで、ブラインディングされた課題c=c'μ-1 mod qを銀行に送信する。Aliceは、c'を銀行に返す業者にc'を与えるが、重要な点は、銀行はどのcとc'が関係するかを特定できないので、預け入れをAliceの引き出しと結びつけられないということであることに留意されたい。銀行は、r=cx+w mod qで応答し、Aliceの口座から引き落とす。Aliceは、gr=hcaかつ(Ig2)r=zcbである限り受け入れる。Aliceは次いで、r'=rμ+v mod qを計算する。これが署名の最後の部分である。最終的に、署名されたコインは(S,B,σ(S,B)=(z',a',b',r'))である。
Aliceがコインを業者で消費することを望む場合、彼らは以下のステップを実行する。コイン(S,B,σ(S,B))を消費するために、Aliceはまずそれを業者に送信する。業者は、S≠1であるかどうかを確認し、そして、課題R=H0(S,B,IDM,date/time)を計算してAliceに送信し、H0は別の衝突困難ハッシュ関数であり、IDMは業者の識別情報であり、date/timeはいつトランザクションが行われるかを表す。Aliceは、r1=R(us)+x1 mod qおよびr2=Rs+x2 mod qを計算し、応答を業者に送信する。業者は最後に、
Figure 2023522258000110
であり、署名sig(S,B)が正当であることを確認し、すなわち、
gr'=hc'a' mod p
Ar'=(z')c'b' mod p
c'=H(S,B,z',a',b')
が成立する場合、業者はコインを受け入れる。
業者は、S、B、σ(S,B)、(r1,r2)、ならびにトランザクションの日付および時間からなる支払トランスクリプトを銀行に送信する。S=1である場合、銀行は預け入れを拒絶する。そうではない場合、銀行は、トランスクリプトを送信した業者の識別情報を使用して、トランスクリプトに従い、同じ情報を検証する。これが検証される場合、銀行は、Sがまだ記憶されていないかどうかを確認する。記憶されていない場合、銀行は、(S,date/time,r1,r2,R)を記憶し、業者アカウントに入金する。Sが以前に現れている場合、銀行は以下の方法で二重消費者の識別情報を決定する。date/timeデータが同じである場合、銀行は、業者が二重消費者であることを知り、直ちにコインを拒絶する。時間が異なる場合、銀行は、ユーザが二重消費者であることを知る。銀行は、(r1,r2,R)および(r1',r2',R')を使用して、(r1-r1')/(r2-r2')を使用して秘密鍵uを計算することができる。銀行は次いで、
Figure 2023522258000111
を計算することによって、二重消費者の識別情報を発見することができる。
やはり、このプロトコルをチェーン上で移動させることは、二重消費の検出を消費の時点に移す。これは、二重消費が直ちに検出されるので二重消費が決して起こらないことを意味する。これとともに、二重消費しようとする者の識別情報は、ブロックチェーンにアクセスできる者により誰でも導出可能になる。他のプロトコルのように、これは、ユーザの評判を守るために二重消費をユーザに思いとどまらせる。
復元可能なecash(LTW)
図19aから図19cはそれぞれ、このプロトコルに従った、引出トランザクション、消費トランザクション、および預入トランザクションのための例示的なOP_RETURNデータを示す。
このプロトコルはBrandsプロトコルへの拡張であり、Aliceが紛失したコインを復元できるように復元センターをプロトコルに追加する。この拡張は実際に、ここで説明されるすべてのプロトコルがそうであるように、コインが分割可能または移転可能ではないあらゆるプロトコルに適用され得る。
このプロトコルはBrandsと同じパラメータを有する。すなわち、p、qが対応するバイナリ長lp、lqを伴う大きな素数であり、g、g1
Figure 2023522258000112
が次数qを有するように、p、q、g、g1、g2を公に知られているシステムパラメータとする。そして、
Figure 2023522258000113
は銀行の秘密鍵であり、公開鍵はh=gx mod pである。
Figure 2023522258000114
をAliceの秘密鍵とし、彼女の公開鍵は
Figure 2023522258000115
である。銀行は、z=(Ig2)x mod pを計算し、それをAliceに送信する。代替として、銀行は、
Figure 2023522258000116
および
Figure 2023522258000117
を公開鍵の一部として公表することができるので、ユーザは自分でそれを計算することができる。このプロトコルでは、復元センター(RC)と呼ばれる別のエンティティがある。Aliceが匿名チャネルを通じてRCと通信すると仮定する。
n個のコインを引き出すために、Aliceは以下のステップを実行する。まず、Brandsのecashにおけるようなプロトコルを実行して、i=1,...,nに対する(Si,Bi,σ(Si,Bi))を取得し、nはコインの数である。RCは、Hn(x1)=Hn(x2)=…=Hn(xn)=yとなるようにn個の数x1,...xnを準備し、Hnはn衝突暗号学的ハッシュ関数として定義され、これはlH'ビットの出力をもたらす。これは、RCが、このハッシュ関数の同じ出力をもたらすn個の入力を見つけ出すことが可能であることを意味する。一方、相手がyしか知らない場合、相手が原像を見つけ出すのは難しい。Aliceは、コイン(Si,Bi,σ(Si,Bi))をRCに送信し、シリアル番号Siを記録する。RCは各iに対する署名を確認する。それが正当である場合、RCは
Figure 2023522258000118
を計算する。RCは、xi
Figure 2023522258000119
を返信する。Aliceは、xi
Figure 2023522258000120
をコインに添付する。RCは、別の署名SbRC(y,n)を計算し、Sb、yをAliceに送信する。Aliceは、復元の目的でこれをセキュアに保存する。
コインを業者で消費するために、Aliceは以下のことを行う。Aliceおよび業者は、Brandsと同じ方法で支払プロトコルを実行する。業者は次いで、
Figure 2023522258000121
が(Si,Bi,σ(Si,Bi),xi)に対する正当な署名であるかどうかを確認する。業者は、y=H'(xi)を計算し、yがブラックリストに載っているかどうかを確認し、ブラックリストは、紛失されたものとして銀行に報告されたすべてのコインのリストである。これらの確認がすべて済む場合、業者はコインを受け入れる。
コインを銀行に預け入れるために、以下のステップが完了される。業者および銀行は、Brandsにおけるように預け入れを実行する。加えて、銀行は、各コインのxiのハッシュ値がブラックリストの中にあるかどうかを確認する。ない場合、コインは受け入れられる。
紛失されたコインを復元するために、Aliceは以下のステップを行わなければならない。Aliceは、自分の識別情報を銀行に明らかにして、(Sb,y)を銀行に送信する。銀行は、Sbが(y,n)に対する正当な署名であるかどうかを確認する。銀行は、データベースを確認して、H'の値がyに等しいすべてのコインを見つけ出す。コインの最大の数はnであるはずである。すでに消費されたコインがある。銀行は、コインの総額と消費された額との差を計算して、その差を値として返す。二重消費を防ぐために、このyが次いで、公に利用可能なブラックリストに追加される。いずれかの顧客が払い戻されたコインを消費しようとする場合、業者はトランザクションを受け入れない。これはBrandsと非常に似ている。違いは、復元されたコインをブロードキャストするための追加の空間があるということである。
このプロトコルにはすでに、ブラックリストに載っているコインについて業者が確認できるデータベースという概念がある。よって、他のecashと同様の方法でチェーン上でより前に二重消費を検出することが可能になることに加えて、チェーン上でこのプロトコルを移動させることは、これらの消費されたコインを、他のブラックリストに載っているコインと同じリストへと自然に組み込む。
有界アキュミュレータecash(ACC)
図20aから図20cはそれぞれ、このプロトコルに従った、引出トランザクション、消費トランザクション、および預入トランザクションのための例示的なOP_RETURNデータを示す。
このプロトコルは、コインの記憶をより効率的にし、有界アキュミュレータを伴う。アキュミュレータは、同じサイズのストレージに任意の数の値を記憶するという概念であり、値がアキュミュレータに追加される場合には証拠があり、値がアキュミュレータに追加されない場合には証拠がない。有界アキュミュレータという概念は単に、アキュミュレータの概念に、アキュミュレータに追加され得る値の数kに対する上限を追加したものである。
g,h∈Gは、次数pであるGの生成元であると仮定する。Gのすべての要素が、長さlGの固有のバイナリ表現を有すると仮定する。まず、銀行は、公開/秘密鍵のペア(x,gx)、および上限kの有界アキュミュレータをセットアップする。各ユーザは、(u,gu)という形式の公開/秘密鍵のペアを有する。
k個のコインを引き出すために、Aliceは以下のステップを実行する。引き出すために、Aliceはk個の乱数siを生成する。これらの乱数は、コインのシリアル番号を生成するために使用される。彼女は、siを蓄積して蓄積された値vを形成し、k個の証拠wiを得る。そして、銀行はσB=sig(v,commit(u))に署名する。そうすると、ウォレットは、i=1,...,kに対する形式(σB,si,wi,u)である。
コインを消費するために、Aliceは以下のステップを実行する。業者の識別情報はIDMにより表記される。Aliceは、自分のウォレットの中の使用されていない乱数を選び、
Figure 2023522258000122
を計算する。
Aliceは、以下の知識π1の非対話式のゼロ知識証明を生成する。
・verify(σB,v,commit(u))=1
・siが証拠としてwiを使用するvの中にある
・S、T、Yが正しく形成される
Aliceは、コミットメントとしてTを使用するYの表現についての知識π2の署名を計算する。これは、
Figure 2023522258000123
となるようにzr=r1-cr2、zu=si-cuを計算することであり、cは知識の署名において使用される課題である。両方の署名π1、π2において、署名されるべきメッセージは(IDM||info)であり、infoは、トランザクション番号、時間、および日付などの、各トランザクションとともに変化する何らかの情報である。
コインを預け入れるために、業者は、消費プロトコルの通信トランスクリプトを銀行に与える。銀行は、業者とまったく同じようにトランスクリプトを検証する。加えて、銀行は、二重消費を防ぐために、IDMが業者の識別情報であることと、(IDM||info)が前に使用されていないこととを検証することができ、悪意のある業者が正当なトランザクションを傍受してコインを消費するのを防ぐ。これらが検証される場合、銀行は(S,c,zu)を記憶する。二重消費の場合、Sはデータベースに存在する。銀行は次いで、u=(zu-z u')/(c'-c)を使用してuを計算することができる。出力は、形式guの二重消費者の識別情報である。zuが同じである場合、銀行は、二重預け入れを試みることによって業者が悪意を持って行動していると見なすことができ、銀行は預け入れを拒絶する。
このプロトコルは、以下の方法で二重消費者のすべてのコインを追跡することを含むように拡張され得る。引き出しの間、Aliceは(v,commit(u,tr))に対する署名を取得し、trは乱数である。Aliceは、自分の秘密鍵uのもとでtrを検証可能に暗号化し、銀行はこの暗号化された値を記憶する。消費プロトコルの間、Aliceは追加で、追跡R=H(IDM||info)trを計算し、HはlHビットの整数をもたらすハッシュ関数である。次いで、署名π1は、
・verify(σB,v,commit(u,tr))=1
・siが証拠としてwiを使用するvの中にある
・S、T、Y、Rが正しく形成される
を含むように修正される。
Aliceが二重消費する場合、銀行は、uを計算し、次いでtrを復号することができる。銀行は次いで、trをブラックリストに入れることができ、ユーザがそれらを消費しているかどうかを誰でも確認でき、あらゆるさらなる消費を拒絶することができる。販売時点では、業者は単に、tag=H(IDM||info)trが、各々のブラックリストに載っているtrに対して、業者に提示されたものと同じであるかどうかを確認するだけでよい。
他のプロトコルのように、二重消費の検出は消費の時点で行われるので、それは二重消費を完全に防ぐ。これとは別に、このプロトコルをチェーン上で移動させることは、誰でも二重消費者を特定することを可能にし、これはユーザが二重消費することに対する抑止力になる。
結論
上記の実施形態は、単に例として説明されたことが理解されるだろう。より全般に、以下の陳述の任意の1つまたは複数に従った方法、装置、またはプログラムが提供され得る。
陳述1. ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法であって、各デジタルコインが、発行者によって消費者に発行され、各デジタルコインが、デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、発行者がコインシリアル番号の記録を維持し、各コインシリアル番号がそれぞれのデジタルコインを表し、方法が、発行者によって実行され、消費トランザクションを取得するステップであって、消費トランザクションがブロックチェーントランザクションであり、コインシリアル番号の集合のうちの第1のコインシリアル番号を備える、ステップと、第1のコインシリアル番号が消費されたコインシリアル番号のデータベースに存在するかどうかを決定するステップと、1つまたは複数の条件が満たされたことに応答して、第1のコインシリアル番号によって表される資産の額を引換者に移転するステップとを備え、1つまたは複数の条件のうちの第1の条件が、第1のコインシリアル番号がデータベースに存在しないことである、方法。
消費トランザクションは、背後のブロックチェーン(「第1のシステム」)のトークン(コイン、たとえばビットコインと呼ばれることがある)を運ぶために使用されるが、デジタルコインは異なるシステム(「電子キャッシュシステム」)の一部である。すなわち、消費トランザクション、引出トランザクション、および預入トランザクションは、必然的に、背後のブロックチェーンのある額のトークン(たとえば、ビットコイン)の所有権を移転し、電子キャッシュシステムのデジタルコインの所有権を移転するためにも使用される。言い換えると、コインシリアル番号は、電子キャッシュシステムのデジタルコインを特定し、背後のブロックチェーンシステムのデジタルコイン(たとえば、ビットコイン)を特定しない。従来は、ブロックチェーントークン(たとえば、ビットコイン)の額は個々の識別子と対応付けられず、本発明の各デジタルコインは、それぞれのコインシリアル番号によって個別に特定されない。具体的には、コインシリアル番号は、背後のブロックチェーントークン(たとえば、ビットコイン)の額を特定しない。
陳述2. コインシリアル番号の記録がブロックチェーン上で維持される、陳述1の方法。
陳述3. 消費トランザクションが、発行者の発行公開鍵にロックされる出力を備え、送信トランザクションの前記取得が、消費者からおよび/またはブロックチェーンから消費トランザクションを取得することを備える、陳述1または陳述2の方法。
陳述4. ブロックチェーンが引出トランザクションを備え、引出トランザクションが1つまたは複数の出力を備え、各出力がコインシリアル番号の集合のそれぞれのコインシリアル番号の標示を備える、陳述1または陳述2の方法。
陳述5. 標示がコインシリアル番号の集合のそれぞれのコインシリアル番号のハッシュである、陳述4の方法。
陳述6. 発行者が発行秘密鍵-公開鍵のペアと関連付けられ、方法が、引出トランザクションを生成するステップであって、引出トランザクションが発行秘密鍵に基づいて生成される署名を備える入力を備える、ステップと、ブロックチェーンに記録されるように、引出トランザクションを、消費者、第三者、および/またはブロックチェーンネットワークに送信するステップとを備える、陳述4または陳述5の方法。
たとえば、第三者は、ウォレット提供者などのサービス提供者であり得る。
陳述7. 1つまたは複数の条件のうちの第2の条件が、消費トランザクションが引出トランザクションの出力をアンロックするための入力を備えるということである、陳述4から6のいずれかの方法。
陳述8. 引出トランザクションの出力が、より後のトランザクションの入力とともに実行されると、より後のトランザクションの入力が第1のコインシリアル番号を必要とすることを、要求するように構成される、陳述7の方法。
陳述9. 消費者が、消費秘密鍵-公開鍵のペアと関連付けられ、引出トランザクションの出力が、より後のトランザクションの入力とともに実行されると、より後のトランザクションの入力が消費秘密鍵に基づいて生成される署名を必要とすることを、要求するように構成される、陳述6から8のいずれかの方法。
陳述10. 1つまたは複数の条件のうちの第3の条件が、引出トランザクションが、発行秘密鍵に基づいて生成される署名を備える入力を備えるということである、陳述3またはそれに従属する陳述の方法。
陳述11. 引換者が引換秘密鍵-公開鍵のペアと関連付けられ、1つまたは複数の条件のうちの第4の条件が、消費トランザクションがさらなる入力を備えるということであり、さらなる入力が引換秘密鍵に基づいて生成される署名を備える、任意の先行する陳述の方法。
陳述12. 預入トランザクションを取得するステップであって、預入トランザクションが、消費トランザクションの出力を参照し、発行秘密鍵に基づいて生成される署名、消費秘密鍵に基づいて生成される署名、および/または引換秘密鍵に基づく署名のうちの1つまたは複数を備える、入力を備える、ステップと、1つまたは複数の条件が満たされたことに応答して、ブロックチェーンに記録されるように、預入トランザクションを、引換者、第三者、および/またはブロックチェーンネットワークに送信するステップとを備える、任意の先行する陳述の方法。
陳述13. 消費者によって少なくとも一部生成されるコインシードのブラインディングされたバージョンを取得するステップであって、コインシードがコインシリアル番号の集合を生成するためのものであり、各コインシリアル番号がそれぞれのデジタルコインを表す、ステップと、コインシードのブラインド署名を生成するステップと、コインシードのブラインド署名を消費者に送信するステップとを備える、任意の先行する陳述の方法。
いくつかの例では、ブラインド署名はコインシリアル番号のブラインド署名であってもよく、これは拡張により依然としてシード上にある。
陳述14. コインシードが発行者によって少なくとも一部生成される、陳述13の方法。
陳述15. コインシード証明候補および/またはコインシード署名証明候補を取得するステップであって、コインシード証明候補がコインシード候補の知識を表し、コインシード署名証明候補がコインシードの署名候補の知識を表す、ステップ、シード証明候補によって表される署名候補がコインシードのブラインディングされた署名であるかどうかを決定するステップであって、1つまたは複数の条件のうちの第5の条件が、シード証明候補によって表される署名候補がコインシードのブラインディングされた署名である、ステップ、および/または、コインシード証明候補によって表されるコインシード候補がコインシードであるかどうかを決定するステップであって、1つまたは複数の条件のうちの第6の条件が、コインシード候補がコインシードであるということである、ステップを備える、陳述12から14のいずれかの方法。
コインシード証明候補およびコインシード署名証明は、ゼロ知識証明であり得る。いくつかの例では、シード証明候補は、コインシードの生成された署名を備える。
陳述16. 引換者が既知の識別子と関連付けられ、方法が、識別子証明候補を取得するステップであって、識別子証明候補が引換者の識別子候補の知識を表す、ステップと、識別子証明候補によって表される識別子候補が引換者の既知の識別子であるかどうかを決定するステップであって、1つまたは複数の条件のうちの第7の条件が、識別子証明候補によって表される識別子候補が引換者の既知の識別子であるということである、ステップとを備える、任意の先行する陳述の方法。
陳述17. 第1のコインシリアル番号がそれぞれのカウンタ値と関連付けられ、方法が、カウンタ証明候補を取得するステップであって、カウンタ証明候補が第1のコインシリアル番号のカウンタ候補の知識を表す、ステップと、カウンタ証明候補によって表されるカウンタ値候補が所定の範囲内にあるかどうかを決定するステップであって、1つまたは複数の条件のうちの第8の条件が、カウンタ証明候補によって表されるカウンタ値候補が所定の範囲内にあるということである、ステップとを備える、任意の先行する陳述の方法。
陳述18. 消費者によって生成される少なくとも1つの二重消費シードのブラインディングされたバージョンを取得するステップであって、少なくとも1つの二重消費シードが少なくとも1つの二重消費値を生成するためのものであり、各二重消費値が、二重消費シード、消費者の識別子、および引換者によって選ばれるそれぞれのデータ項目に基づき、各二重消費値が、異なるそれぞれのデータ項目に対して、消費者の識別子の異なる構成要素を明らかにする、ステップと、少なくとも1つの二重消費シードのブラインド署名を生成するステップと、少なくとも1つの二重消費シードのブラインド署名を消費者に送信するステップとを備える、任意の先行する陳述の方法。
いくつかの例では、同じ署名が、コインシードおよび少なくとも1つの二重消費シードに署名する。
陳述19. 二重消費値を取得するステップと、第1のコインシリアル番号が消費されたコインシリアル番号のデータベースに存在すると決定したことに応答して、取得された二重消費値および以前に取得された二重消費値を使用して消費者の識別子を明らかにするステップとを備える、陳述18の方法。
陳述20. 引出トランザクションが複数の出力を備え、各出力がコインシリアル番号の集合のそれぞれ1つのハッシュを備え、各出力が発行公開鍵にロックされ、方法が、第1のコインシリアル番号が消費されたコインシリアル番号のデータベースに存在すると決定したことに応答して、発行公開鍵にロックされた各出力を消費するステップを備える、陳述4および陳述19の方法。
陳述21. 消費トランザクションが、コインシリアル番号の集合のそれぞれのコインシリアル番号のハッシュを備える出力を備え、方法が、第1のコインシリアル番号が消費されたコインシリアル番号のデータベースに存在すると決定したことに応答して、コインシリアル番号の集合のそれぞれのコインシリアル番号のそれぞれのハッシュを備える出力を消費するステップ、および/またはコインシリアル番号の集合のそれぞれのコインシリアル番号を公表するステップを備える、陳述6および陳述19の方法。
たとえば、二重消費されたコインは、まだチェーン上にないことがあり、すなわち、何らかのハッシュの中にあることがある。これは、消費トランザクションが次のコインのハッシュを含むので、すべてのコインシリアル番号のハッシュがまだチェーン上にはない場合に起こる。したがって、銀行は、次のコインが消費されるのを防ぐために、シリアル番号をブロードキャストし得る。
陳述22. 発行者が識別子ハッシュの記録を維持し、方法が、識別子ハッシュを取得するステップを備え、識別子ハッシュが、少なくとも引換者の識別子および引換者によって選ばれたデータ項目のハッシュであり、1つまたは複数の条件のうちの第9の条件が、取得されたハッシュが識別子ハッシュのデータベースに存在しないということである、任意の先行する陳述の方法。
陳述23. 識別子ハッシュの記録がブロックチェーン上で維持される、陳述22の方法。
陳述24. ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法であって、各デジタルコインが、発行者によって消費者に発行され、各デジタルコインが、デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、方法が、消費者によって実行され、引出トランザクションを取得するステップであって、引出トランザクションが1つまたは複数の出力を備え、各出力がコインシリアル番号の集合のそれぞれのコインシリアル番号のハッシュを備え、各コインシリアル番号がそれぞれのデジタルコインを表す、ステップと、ブロックチェーンに記録されるように、引出トランザクションを、引換者、第三者、および/またはブロックチェーンネットワークに送信するステップとを備える、方法。
陳述25. 消費者が消費秘密鍵-公開鍵のペアと関連付けられ、引出トランザクションの前記取得が引出トランザクションを生成することを備え、引出トランザクションが、消費秘密鍵に基づいて生成される署名を備える入力を備える、陳述24の方法。
陳述26. 発行者が発行秘密鍵-公開鍵のペアと関連付けられ、引出トランザクションが発行者によって生成され、引出トランザクションが発行秘密鍵に基づいて生成される署名を備える入力を備え、引出トランザクションの前記取得が、発行者からまたはブロックチェーンから引出トランザクションを取得することを備える、陳述24の方法。
陳述27. 引出トランザクションの1つまたは複数の出力のうちの第1の出力が、コインシリアル番号の集合のうちの第1のコインシリアル番号のハッシュを備え、方法がコインシードに基づいて第1のコインシリアル番号を生成するステップを備える、陳述24から26のいずれかの方法。
陳述28. コインシードが発行者によって少なくとも一部生成される、陳述27の方法。
陳述29. コインシードのブラインディングされたバージョンを発行者に送信するステップと、コインシードのブラインド署名を発行者から受信するステップとを備える、陳述24または陳述28の方法。
陳述30. コインシード証明を引換者に送信するステップを備え、コインシード証明がコインシードに対するブラインド署名の知識を表す、陳述29の方法。
陳述31. 第1のコインシリアル番号がそれぞれのカウンタ値と関連付けられ、方法が、カウンタ証明を引換者に送信するステップを備え、カウンタ証明が、第1のコインシリアル番号のカウンタ値の知識を表す、陳述24から30のいずれかの方法。
陳述32. 第1のコインシリアル番号を引換者に送信するステップを備える、陳述27またはそれに従属する任意の陳述の方法。
陳述33. 1つまたは複数の二重消費値を引換者に送信するステップを備え、1つまたは複数の二重消費値が、1つまたは複数のそれぞれの二重消費シード、消費者の識別子、および引換者によって選ばれるそれぞれのデータ項目に基づき、各二重消費値が、異なるそれぞれのデータ項目に対して、消費者の識別子の異なる構成要素を明らかにする、陳述24から32のいずれかの方法。
陳述34. それぞれのデータ項目を引換者から取得するステップを備える、陳述33の方法。
陳述35. 1つまたは複数の二重消費値証明を引換者に送信するステップを備え、1つまたは複数の二重消費値証明が、それぞれ、二重消費値に対する署名の知識、および/または、1つまたは複数の二重消費値の知識を表す、陳述33または陳述34の方法。
陳述36. 二重消費値が二重消費カウンタ値と関連付けられ、方法が、二重消費カウンタ証明を引換者に送信するステップを備え、二重消費カウンタ証明が、二重消費値の二重消費カウンタ値の知識を表す、陳述35の方法。
陳述37. 消費トランザクションを取得するステップであって、消費トランザクションが引出トランザクションの第1の出力をアンロックするための第1の入力を備え、第1の入力が消費秘密鍵に基づいて生成される署名を備える、ステップと、ブロックチェーンに記録されるように、消費トランザクションを、引換者、第三者、および/またはブロックチェーンネットワークに送信するステップとを備える、陳述24から36のいずれかの方法。
陳述38. 消費トランザクションの第1の入力が第1のコインシリアル番号を備える、陳述37の方法。
引き出し出力を銀行が消費するのを防ぐために、引出トランザクションの出力をロックするシリアル番号が使用され得る(これは二重消費の場合に望ましい)。出力をロックするシリアル番号がないと、銀行は、二重消費の場合だけではなく、いつでも出力を消費することができる。これはよりセキュアではないが、銀行が信用できる場合には問題ではない。コインシリアル番号は、消費トランザクションのOP_RETURN出力にも存在するので、それが引出トランザクションロッキングスクリプトの中にない場合でも、それはOP_RETURN出力において消費されるものとして見つけ出される。
陳述39. 消費トランザクションが、引換秘密鍵に基づいて生成される署名を備える第1の出力を備える、陳述37または陳述38の方法。
陳述40. 消費トランザクションが、コインシリアル番号の集合のうちの第2のコインシリアル番号のハッシュを備える第2の出力を備える、陳述37から39のいずれかの方法。
陳述41. ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法であって、各デジタルコインが発行者によって消費者に発行され、各デジタルコインが、デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、方法が、引換者によって実行され、消費者から、第1のコインシリアル番号を取得するステップと、第1のコインシリアル番号がブロックチェーンに存在するかどうかを決定するステップと、1つまたは複数の条件が満たされることに応答して、消費トランザクションを取得するステップであって、消費トランザクションが、ブロックチェーントランザクションであり、第1のコインシリアル番号を備える、ステップと、ブロックチェーンに記録されように、消費トランザクションを、消費者、発行者、第三者、および/またはブロックチェーンネットワークのうちの1つまたは複数に送信するステップとを備え、1つまたは複数の条件のうちの第1の条件が、第1のコインシリアル番号がブロックチェーンに存在しないことである、方法。
陳述42. 引換者が、引換秘密鍵-公開鍵のペアと関連付けられ、消費トランザクションが、引換秘密鍵に基づいて生成される署名を備える第1の入力を備える、陳述41の方法。
陳述43. 消費者が、消費秘密鍵-公開鍵のペアと関連付けられ、消費トランザクションが、消費秘密鍵に基づいて生成される署名を備える第2の入力を備える、陳述41または陳述42の方法。
陳述44. 消費トランザクションの第2の入力が、引出トランザクションの出力をアンロックするように構成される、陳述43の方法。
陳述45. 第2の入力が第1のコインシリアル番号を備える、陳述44の方法。
陳述46. 発行者が秘密鍵-公開鍵のペアと関連付けられ、1つまたは複数の条件のうちの第2の条件が、引出トランザクションが発行秘密鍵に基づいて生成される署名を備える入力を備えるということである、陳述44または陳述45の方法。
陳述47. コインシード署名証明および/またはコインシード証明候補を消費者から取得するステップを備え、コインシード署名証明が、第1のコインシリアル番号を生成するために使用されるコインシードのブラインディングされた署名の知識を表し、コインシード署名証明候補が、コインシード候補の知識を表し、1つまたは複数の条件のうちの第2の条件が、ブラインディングされた署名が発行者によって生成されるということであり、および/または、1つまたは複数の条件のうちの第3の条件が、コインシード候補がコインシードであるということである、陳述41から46のいずれかの方法。
陳述48. 第1のコインシリアル番号がそれぞれのカウンタ値と関連付けられ、方法が、カウンタ証明候補を取得するステップであって、カウンタ証明候補が、第1のコインシリアル番号のカウンタ候補の知識を表す、ステップと、カウンタ証明候補によって表されるカウンタ値候補が所定の範囲内にあるかどうかを決定するステップであって、1つまたは複数の条件のうちの第3の条件が、カウンタ証明候補によって表されるカウンタ値候補が所定の範囲内にあるということである、ステップとを備える、陳述41から47のいずれかの方法。
陳述49. 消費者から1つまたは複数の二重消費値を取得するステップを備え、1つまたは複数の二重消費値が、それぞれの二重消費シード、消費者の識別子、および引換者によって選ばれるそれぞれのデータ項目に基づき、各二重消費値が、異なるそれぞれのデータ項目に対して、消費者の識別子の異なる構成要素を明らかにする、陳述41から48のいずれかの方法。
陳述50. 1つまたは複数の二重消費シード証明を消費者から取得するステップを備え、1つまたは複数の二重消費シード証明が、1つまたは複数の二重消費値を生成するために使用される1つまたは複数の二重消費シードのそれぞれのブラインディングされた署名の知識を表し、1つまたは複数の条件のうちの第4の条件が、それぞれのブラインディングされた署名が発行者によって生成されるということである、陳述49の方法。
陳述51. 各二重消費値がそれぞれの二重消費カウンタ値と関連付けられ、方法が、各二重消費値に対して、二重消費カウンタ証明候補を取得するステップであって、二重消費カウンタ証明候補が、その二重消費値の二重消費カウンタ候補の知識を表す、ステップと、二重消費カウンタ証明候補によって表される二重消費カウンタ値候補が所定の範囲内にあるかどうかを決定するステップとを備え、1つまたは複数の条件のうちの第5の条件が、二重消費カウンタ証明候補によって表される二重消費カウンタ値候補が所定の範囲内にあるということである、陳述49または陳述50の方法。
陳述52. 消費トランザクションが、取得された1つまたは複数の二重消費値を備える、陳述49から51のいずれかの方法。
陳述53. それぞれのデータ項目を生成するステップを備える、陳述49から52のいずれかの方法。
陳述54. それぞれのデータ項目を消費者に送信するステップを備える、陳述49から53のいずれかの方法。
陳述55. 消費者から識別子ハッシュを取得するステップであって、識別子ハッシュが、少なくとも引換者の識別子および引換者によって選ばれるデータ項目のハッシュである、ステップと、取得された識別子ハッシュを発行者に送信するステップとを備える、陳述41から54のいずれかの方法。
陳述56. 預入トランザクションを取得するステップであって、預入トランザクションが、消費トランザクションの出力を参照し、引換秘密鍵に基づいて生成される署名、消費秘密鍵に基づいて生成される署名、および/または発行秘密鍵に基づいて生成される署名のうちの1つまたは複数を備える、入力を備える、ステップと、1つまたは複数の条件が満たされたことに応答して、ブロックチェーンに記録されるように、預入トランザクションを、発行者、第三者、および/またはブロックチェーンネットワークに送信するステップとを備える、陳述41から55のいずれかの方法。
陳述57. 預入トランザクションが発行公開鍵にロックされた出力を備える、陳述56の方法。
陳述58. 1つまたは複数の条件のうちの少なくとも1つが満たされないと決定したことに応答して、第1のコインシリアル番号、消費公開鍵、1つまたは複数の二重消費値、および/または消費者の識別子のうちの1つまたは複数を発行者に送信するステップを備える、陳述41から57のいずれかの方法。
陳述59. 1つまたは複数のメモリユニットを備えるメモリと、1つまたは複数の処理ユニットを備える処理装置とを備え、メモリが処理装置上で実行するようになされるコードを記憶し、コードが、処理装置上で実行されるとき、陳述1から58のいずれかの方法を実行するように構成される、コンピュータ機器。
陳述60. コンピュータ可読ストレージ上で具現化され、陳述46のコンピュータ機器上で実行されると、陳述1から58のいずれかの方法を実行するように構成される、コンピュータプログラム。
本明細書において開示される別の態様によれば、発行者、消費者、および引換者の行動を備える方法が提供され得る。
本明細書において開示される別の態様によれば、発行者、消費者、および引換者のコンピュータ機器を備えるシステムが提供され得る。
開示される技法の他の変形または使用事例は、本明細書の開示が与えられると当業者に明らかになり得る。本開示の範囲は、説明された実施形態によって限定されず、添付の特許請求の範囲だけによって限定される。
101 ネットワーク
102 コンピュータ機器
103 ユーザ
104 ノード
105 クライアントアプリケーション
106 P2Pネットワーク
150 ブロックチェーン
151 ブロック
152 トランザクション
153 ジェネシスブロック
154 プール
201 ヘッダ
202 入力
203 出力
301 サイドチャネル
401 トランザクションエンジン
402 UI層
411 UI要素、ユーザ選択可能要素
412 UI要素
413 UI要素
601 発行者
602 消費者
603 引換者

Claims (60)

  1. ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法であって、各デジタルコインが、発行者によって消費者に発行され、各デジタルコインが、前記デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、前記発行者がコインシリアル番号の記録を維持し、各コインシリアル番号がそれぞれのデジタルコインを表し、前記方法が、前記発行者によって実行され、
    消費トランザクションを取得するステップであって、前記消費トランザクションがブロックチェーントランザクションであり、コインシリアル番号の集合のうちの第1のコインシリアル番号を備える、ステップと、
    前記第1のコインシリアル番号が消費されたコインシリアル番号のデータベースに存在するかどうかを決定するステップと、
    1つまたは複数の条件が満たされたことに応答して、前記第1のコインシリアル番号によって表される前記資産の前記額を前記引換者に移転するステップとを備え、前記1つまたは複数の条件のうちの第1の条件が、前記第1のコインシリアル番号が前記データベースに存在しないことである、方法。
  2. コインシリアル番号の前記記録が前記ブロックチェーン上で維持される、請求項1に記載の方法。
  3. 前記消費トランザクションが、前記発行者の発行公開鍵にロックされる出力を備え、前記送信トランザクションの前記取得が、前記消費者からおよび/または前記ブロックチェーンから前記消費トランザクションを取得することを備える、請求項1または2に記載の方法。
  4. 前記ブロックチェーンが引出トランザクションを備え、前記引出トランザクションが1つまたは複数の出力を備え、各出力がコインシリアル番号の前記集合のそれぞれのコインシリアル番号の標示を備える、請求項1または2に記載の方法。
  5. 前記標示がコインシリアル番号の前記集合のそれぞれのコインシリアル番号のハッシュである、請求項4に記載の方法。
  6. 前記発行者が発行秘密鍵-公開鍵のペアと関連付けられ、前記方法が、
    前記引出トランザクションを生成するステップであって、前記引出トランザクションが前記発行秘密鍵に基づいて生成される署名を備える入力を備える、ステップと、
    前記ブロックチェーンに記録されるように、前記引出トランザクションを、前記消費者、第三者、および/または前記ブロックチェーンネットワークに送信するステップとを備える、請求項4または5に記載の方法。
  7. 前記1つまたは複数の条件のうちの第2の条件が、前記消費トランザクションが引出トランザクションの出力をアンロックするための入力を備えるということである、請求項4から6のいずれかに記載の方法。
  8. 前記引出トランザクションの前記出力が、より後のトランザクションの入力とともに実行されると、前記より後のトランザクションの前記入力が前記第1のコインシリアル番号を必要とすることを、要求するように構成される、請求項7に記載の方法。
  9. 前記消費者が、消費秘密鍵-公開鍵のペアと関連付けられ、前記引出トランザクションの前記出力が、より後のトランザクションの入力とともに実行されると、前記より後のトランザクションの前記入力が前記消費秘密鍵に基づいて生成される署名を必要とすることを、要求するように構成される、請求項6から8のいずれかに記載の方法。
  10. 前記1つまたは複数の条件のうちの第3の条件が、前記引出トランザクションが、前記発行秘密鍵に基づいて生成される前記署名を備える入力を備えるということである、請求項3または請求項3に従属する請求項に記載の方法。
  11. 前記引換者が引換秘密鍵-公開鍵のペアと関連付けられ、前記1つまたは複数の条件のうちの第4の条件が、前記消費トランザクションがさらなる入力を備えるということであり、前記さらなる入力が前記引換秘密鍵に基づいて生成される署名を備える、請求項1から10のいずれかに記載の方法。
  12. 預入トランザクションを取得するステップであって、前記預入トランザクションが、前記消費トランザクションの出力を参照し、前記発行秘密鍵に基づいて生成される署名、前記消費秘密鍵に基づいて生成される署名、および/または前記引換秘密鍵に基づく署名のうちの1つまたは複数を備える、入力を備える、ステップと、
    1つまたは複数の条件が満たされたことに応答して、前記ブロックチェーンに記録されるように、前記預入トランザクションを、前記引換者、第三者、および/または前記ブロックチェーンネットワークに送信するステップとを備える、請求項1から11のいずれかに記載の方法。
  13. 前記消費者によって少なくとも一部生成されるコインシードのブラインディングされたバージョンを取得するステップであって、前記コインシードがコインシリアル番号の集合を生成するためのものであり、各コインシリアル番号がそれぞれのデジタルコインを表す、ステップと、
    前記コインシードのブラインド署名を生成するステップと、
    前記コインシードの前記ブラインド署名を前記消費者に送信するステップとを備える、請求項1から12のいずれかに記載の方法。
  14. 前記コインシードが前記発行者によって少なくとも一部生成される、請求項13に記載の方法。
  15. コインシード証明候補および/またはコインシード署名証明候補を取得するステップであって、前記コインシード証明候補がコインシード候補の知識を表し、前記コインシード署名証明候補が前記コインシードの署名候補の知識を表す、ステップ、
    前記シード証明候補によって表される前記署名候補が前記コインシードの前記ブラインディングされた署名であるかどうかを決定するステップであって、前記1つまたは複数の条件のうちの第5の条件が、前記シード証明候補によって表される前記署名候補が前記コインシードの前記ブラインディングされた署名である、ステップ、および/または、
    前記コインシード証明候補によって表される前記コインシード候補が前記コインシードであるかどうかを決定するステップであって、前記1つまたは複数の条件のうちの第6の条件が、前記コインシード候補が前記コインシードであるということである、ステップを備える、請求項12から14のいずれかに記載の方法。
  16. 前記引換者が既知の識別子と関連付けられ、前記方法が、
    識別子証明候補を取得するステップであって、前記識別子証明候補が前記引換者の識別子候補の知識を表す、ステップと、
    前記識別子証明候補によって表される前記識別子候補が前記引換者の前記既知の識別子であるかどうかを決定するステップであって、前記1つまたは複数の条件のうちの第7の条件が、前記識別子証明候補によって表される前記識別子候補が前記引換者の前記既知の識別子であるということである、ステップとを備える、請求項1から15のいずれかに記載の方法。
  17. 前記第1のコインシリアル番号がそれぞれのカウンタ値と関連付けられ、前記方法が、
    カウンタ証明候補を取得するステップであって、前記カウンタ証明候補が前記第1のコインシリアル番号のカウンタ候補の知識を表す、ステップと、
    前記カウンタ証明候補によって表される前記カウンタ値候補が所定の範囲内にあるかどうかを決定するステップであって、前記1つまたは複数の条件のうちの第8の条件が、前記カウンタ証明候補によって表される前記カウンタ値候補が所定の範囲内にあるということである、ステップとを備える、請求項1から16のいずれかに記載の方法。
  18. 前記消費者によって生成される少なくとも1つの二重消費シードのブラインディングされたバージョンを取得するステップであって、前記少なくとも1つの二重消費シードが少なくとも1つの二重消費値を生成するためのものであり、各二重消費値が、二重消費シード、前記消費者の識別子、および前記引換者によって選ばれるそれぞれのデータ項目に基づき、各二重消費値が、異なるそれぞれのデータ項目に対して、前記消費者の前記識別子の異なる構成要素を明らかにする、ステップと、
    前記少なくとも1つの二重消費シードのブラインド署名を生成するステップと、
    前記少なくとも1つの二重消費シードの前記ブラインド署名を前記消費者に送信するステップとを備える、請求項1から17のいずれかに記載の方法。
  19. 二重消費値を取得するステップと、
    前記第1のコインシリアル番号が消費されたコインシリアル番号の前記データベースに存在すると決定したことに応答して、前記取得された二重消費値および以前に取得された二重消費値を使用して前記消費者の前記識別子を明らかにするステップとを備える、請求項18に記載の方法。
  20. 前記引出トランザクションが複数の出力を備え、各出力がコインシリアル番号の前記集合のそれぞれ1つのハッシュを備え、各出力が前記発行公開鍵にロックされ、前記方法が、前記第1のコインシリアル番号が消費されたコインシリアル番号の前記データベースに存在すると決定したことに応答して、前記発行公開鍵にロックされた各出力を消費するステップを備える、請求項4および19に記載の方法。
  21. 前記消費トランザクションが、コインシリアル番号の前記集合のそれぞれのコインシリアル番号のハッシュを備える出力を備え、前記方法が、前記第1のコインシリアル番号が消費されたコインシリアル番号の前記データベースに存在すると決定したことに応答して、コインシリアル番号の前記集合の前記それぞれのコインシリアル番号の前記それぞれのハッシュを備える前記出力を消費するステップ、および/またはコインシリアル番号の前記集合のそれぞれのコインシリアル番号を公表するステップを備える、請求項6および19に記載の方法。
  22. 前記発行者が識別子ハッシュの記録を維持し、前記方法が、
    識別子ハッシュを取得するステップを備え、前記識別子ハッシュが、少なくとも前記引換者の識別子および前記引換者によって選ばれたデータ項目のハッシュであり、前記1つまたは複数の条件のうちの第9の条件が、前記取得されたハッシュが識別子ハッシュの前記データベースに存在しないということである、請求項1から21のいずれかに記載の方法。
  23. 識別子ハッシュの前記記録が前記ブロックチェーン上で維持される、請求項22に記載の方法。
  24. ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法であって、各デジタルコインが、発行者によって消費者に発行され、各デジタルコインが、前記デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、前記方法が、前記消費者によって実行され、
    引出トランザクションを取得するステップであって、前記引出トランザクションが1つまたは複数の出力を備え、各出力がコインシリアル番号の集合のそれぞれのコインシリアル番号のハッシュを備え、各コインシリアル番号がそれぞれのデジタルコインを表す、ステップと、
    前記ブロックチェーンに記録されるように、前記引出トランザクションを、前記引換者、第三者、および/または前記ブロックチェーンネットワークに送信するステップとを備える、方法。
  25. 前記消費者が消費秘密鍵-公開鍵のペアと関連付けられ、前記引出トランザクションの前記取得が前記引出トランザクションを生成することを備え、前記引出トランザクションが、前記消費秘密鍵に基づいて生成される署名を備える入力を備える、請求項24に記載の方法。
  26. 前記発行者が発行秘密鍵-公開鍵のペアと関連付けられ、前記引出トランザクションが前記発行者によって生成され、前記引出トランザクションが前記発行秘密鍵に基づいて生成される署名を備える入力を備え、前記引出トランザクションの前記取得が、前記発行者からまたは前記ブロックチェーンから前記引出トランザクションを取得することを備える、請求項24に記載の方法。
  27. 前記引出トランザクションの前記1つまたは複数の出力のうちの第1の出力が、コインシリアル番号の前記集合のうちの第1のコインシリアル番号のハッシュを備え、前記方法がコインシードに基づいて前記第1のコインシリアル番号を生成するステップを備える、請求項24から26のいずれかに記載の方法。
  28. 前記コインシードが前記発行者によって少なくとも一部生成される、請求項27に記載の方法。
  29. 前記コインシードのブラインディングされたバージョンを前記発行者に送信するステップと、
    前記コインシードのブラインド署名を前記発行者から受信するステップとを備える、請求項24または28に記載の方法。
  30. コインシード証明を前記引換者に送信するステップを備え、前記コインシード証明が前記コインシードに対する前記ブラインド署名の知識を表す、請求項29に記載の方法。
  31. 前記第1のコインシリアル番号がそれぞれのカウンタ値と関連付けられ、前記方法が、カウンタ証明を前記引換者に送信するステップを備え、前記カウンタ証明が、前記第1のコインシリアル番号のカウンタ値の知識を表す、請求項24から30のいずれかに記載の方法。
  32. 前記第1のコインシリアル番号を前記引換者に送信するステップを備える、請求項27または請求項27に従属する請求項に記載の方法。
  33. 1つまたは複数の二重消費値を前記引換者に送信するステップを備え、前記1つまたは複数の二重消費値が、1つまたは複数のそれぞれの二重消費シード、前記消費者の識別子、および前記引換者によって選ばれるそれぞれのデータ項目に基づき、各二重消費値が、異なるそれぞれのデータ項目に対して、前記消費者の前記識別子の異なる構成要素を明らかにする、請求項24から32のいずれかに記載の方法。
  34. 前記それぞれのデータ項目を前記引換者から取得するステップを備える、請求項33に記載の方法。
  35. 1つまたは複数の二重消費値証明を前記引換者に送信するステップを備え、前記1つまたは複数の二重消費値証明が、それぞれ、前記二重消費値に対する署名の知識、および/または、前記1つまたは複数の二重消費値の知識を表す、請求項33または34に記載の方法。
  36. 前記二重消費値が二重消費カウンタ値と関連付けられ、前記方法が、二重消費カウンタ証明を前記引換者に送信するステップを備え、前記二重消費カウンタ証明が、前記二重消費値の前記二重消費カウンタ値の知識を表す、請求項35に記載の方法。
  37. 消費トランザクションを取得するステップであって、前記消費トランザクションが前記引出トランザクションの前記第1の出力をアンロックするための第1の入力を備え、前記第1の入力が前記消費秘密鍵に基づいて生成される署名を備える、ステップと、
    前記ブロックチェーンに記録されるように、前記消費トランザクションを、前記引換者、第三者、および/または前記ブロックチェーンネットワークに送信するステップとを備える、請求項24から36のいずれかに記載の方法。
  38. 前記消費トランザクションの前記第1の入力が前記第1のコインシリアル番号を備える、請求項37に記載の方法。
  39. 前記消費トランザクションが、前記引換秘密鍵に基づいて生成される署名を備える第1の出力を備える、請求項37または38に記載の方法。
  40. 前記消費トランザクションが、コインシリアル番号の前記集合のうちの第2のコインシリアル番号のハッシュを備える第2の出力を備える、請求項37から39のいずれかに記載の方法。
  41. ブロックチェーンを使用してデジタルコインを発行するためのシステムを実装するためのコンピュータで実施される方法であって、各デジタルコインが発行者によって消費者に発行され、各デジタルコインが、前記デジタルコインと引き換えに引換者によって引き換え可能な資産の額を表し、前記方法が、前記引換者によって実行され、
    前記消費者から、第1のコインシリアル番号を取得するステップと、
    前記第1のコインシリアル番号が前記ブロックチェーンに存在するかどうかを決定するステップと、
    1つまたは複数の条件が満たされることに応答して、消費トランザクションを取得するステップであって、前記消費トランザクションが、ブロックチェーントランザクションであり、第1のコインシリアル番号を備える、ステップと、前記ブロックチェーンに記録されように、前記消費トランザクションを、前記消費者、前記発行者、第三者、および/または前記ブロックチェーンネットワークのうちの1つまたは複数に送信するステップとを備え、前記1つまたは複数の条件のうちの第1の条件が、前記第1のコインシリアル番号が前記ブロックチェーンに存在しないことである、方法。
  42. 前記引換者が、引換秘密鍵-公開鍵のペアと関連付けられ、前記消費トランザクションが、前記引換秘密鍵に基づいて生成される署名を備える第1の入力を備える、請求項41に記載の方法。
  43. 前記消費者が、消費秘密鍵-公開鍵のペアと関連付けられ、前記消費トランザクションが、前記消費秘密鍵に基づいて生成される署名を備える第2の入力を備える、請求項41または42に記載の方法。
  44. 前記消費トランザクションの前記第2の入力が、引出トランザクションの出力をアンロックするように構成される、請求項43に記載の方法。
  45. 前記第2の入力が前記第1のコインシリアル番号を備える、請求項44に記載の方法。
  46. 前記発行者が秘密鍵-公開鍵のペアと関連付けられ、前記1つまたは複数の条件のうちの第2の条件が、前記引出トランザクションが前記発行秘密鍵に基づいて生成される署名を備える入力を備えるということである、請求項44または45に記載の方法。
  47. コインシード署名証明および/またはコインシード証明候補を前記消費者から取得するステップを備え、前記コインシード署名証明が、前記第1のコインシリアル番号を生成するために使用されるコインシードのブラインディングされた署名の知識を表し、前記コインシード署名証明候補が、コインシード候補の知識を表し、前記1つまたは複数の条件のうちの第2の条件が、前記ブラインディングされた署名が前記発行者によって生成されるということであり、および/または、前記1つまたは複数の条件のうちの第3の条件が、前記コインシード候補が前記コインシードであるということである、請求項41から46のいずれかに記載の方法。
  48. 前記第1のコインシリアル番号がそれぞれのカウンタ値と関連付けられ、前記方法が、
    カウンタ証明候補を取得するステップであって、前記カウンタ証明候補が、前記第1のコインシリアル番号のカウンタ候補の知識を表す、ステップと、
    前記カウンタ証明候補によって表される前記カウンタ値候補が所定の範囲内にあるかどうかを決定するステップであって、前記1つまたは複数の条件のうちの第3の条件が、前記カウンタ証明候補によって表される前記カウンタ値候補が所定の範囲内にあるということである、ステップとを備える、請求項41から47のいずれかに記載の方法。
  49. 前記消費者から1つまたは複数の二重消費値を取得するステップを備え、前記1つまたは複数の二重消費値が、それぞれの二重消費シード、前記消費者の識別子、および前記引換者によって選ばれるそれぞれのデータ項目に基づき、各二重消費値が、異なるそれぞれのデータ項目に対して、前記消費者の前記識別子の異なる構成要素を明らかにする、請求項41から48のいずれかに記載の方法。
  50. 1つまたは複数の二重消費シード証明を前記消費者から取得するステップを備え、前記1つまたは複数の二重消費シード証明が、前記1つまたは複数の二重消費値を生成するために使用される前記1つまたは複数の二重消費シードのそれぞれのブラインディングされた署名の知識を表し、前記1つまたは複数の条件のうちの第4の条件が、前記それぞれのブラインディングされた署名が前記発行者によって生成されるということである、請求項49に記載の方法。
  51. 各二重消費値がそれぞれの二重消費カウンタ値と関連付けられ、前記方法が、各二重消費値に対して、
    二重消費カウンタ証明候補を取得するステップであって、前記二重消費カウンタ証明候補が、その二重消費値の二重消費カウンタ候補の知識を表す、ステップと、
    前記二重消費カウンタ証明候補によって表される前記二重消費カウンタ値候補が所定の範囲内にあるかどうかを決定するステップとを備え、前記1つまたは複数の条件のうちの第5の条件が、前記二重消費カウンタ証明候補によって表される前記二重消費カウンタ値候補が前記所定の範囲内にあるということである、請求項49または50に記載の方法。
  52. 前記消費トランザクションが、前記取得された1つまたは複数の二重消費値を備える、請求項49から51のいずれかに記載の方法。
  53. 前記それぞれのデータ項目を生成するステップを備える、請求項49から52のいずれかに記載の方法。
  54. 前記それぞれのデータ項目を前記消費者に送信するステップを備える、請求項49から53のいずれかに記載の方法。
  55. 前記消費者から識別子ハッシュを取得するステップであって、前記識別子ハッシュが、少なくとも前記引換者の識別子および前記引換者によって選ばれるデータ項目のハッシュである、ステップと、
    取得された識別子ハッシュを前記発行者に送信するステップとを備える、請求項41から54のいずれかに記載の方法。
  56. 預入トランザクションを取得するステップであって、前記預入トランザクションが、前記消費トランザクションの出力を参照し、前記引換秘密鍵に基づいて生成される署名、前記消費秘密鍵に基づいて生成される署名、および/または前記発行秘密鍵に基づいて生成される署名のうちの1つまたは複数を備える、入力を備える、ステップと、
    前記1つまたは複数の条件が満たされたことに応答して、前記ブロックチェーンに記録されるように、前記預入トランザクションを、前記発行者、第三者、および/または前記ブロックチェーンネットワークに送信するステップとを備える、請求項41から55のいずれかに記載の方法。
  57. 前記預入トランザクションが前記発行公開鍵にロックされた出力を備える、請求項56に記載の方法。
  58. 前記1つまたは複数の条件のうちの少なくとも1つが満たされないと決定したことに応答して、前記第1のコインシリアル番号、前記消費公開鍵、前記1つまたは複数の二重消費値、および/または前記消費者の前記識別子のうちの1つまたは複数を前記発行者に送信するステップを備える、請求項41から57のいずれかに記載の方法。
  59. 1つまたは複数のメモリユニットを備えるメモリと、
    1つまたは複数の処理ユニットを備える処理装置とを備え、前記メモリが処理装置上で実行するようになされるコードを記憶し、前記コードが、前記処理装置上で実行されるとき、請求項1から58のいずれかに記載の方法を実行するように構成される、コンピュータ機器。
  60. コンピュータ可読ストレージ上で具現化され、請求項46に記載のコンピュータ機器上で実行されると、請求項1から58のいずれかに記載の方法を実行するように構成される、コンピュータプログラム。
JP2022564037A 2020-04-21 2021-04-16 ブロックチェーンを使用してデジタルコインシステムを実装するための方法 Pending JP2023522258A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2005791.5 2020-04-21
GB2005791.5A GB2594272A (en) 2020-04-21 2020-04-21 Method for implementing a digital coin system using a blockchain
PCT/EP2021/059929 WO2021213920A1 (en) 2020-04-21 2021-04-16 Method for implementing a digital coin system using a blockchain

Publications (1)

Publication Number Publication Date
JP2023522258A true JP2023522258A (ja) 2023-05-29

Family

ID=70860189

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022564037A Pending JP2023522258A (ja) 2020-04-21 2021-04-16 ブロックチェーンを使用してデジタルコインシステムを実装するための方法

Country Status (6)

Country Link
US (1) US20230162176A1 (ja)
EP (1) EP4111643A1 (ja)
JP (1) JP2023522258A (ja)
CN (1) CN115516819A (ja)
GB (1) GB2594272A (ja)
WO (1) WO2021213920A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230055584A1 (en) * 2021-08-17 2023-02-23 Darrion Vinh Nguyen Cryptocurrency using digitally locked coins

Also Published As

Publication number Publication date
EP4111643A1 (en) 2023-01-04
WO2021213920A1 (en) 2021-10-28
US20230162176A1 (en) 2023-05-25
CN115516819A (zh) 2022-12-23
GB2594272A (en) 2021-10-27
GB202005791D0 (en) 2020-06-03

Similar Documents

Publication Publication Date Title
KR102077397B1 (ko) PoP 기반 블록체인에서의 동적 시간 지연 기반의 체인 연결 방법 및 시스템
KR20220024125A (ko) 해시 함수 공격
JP2022533753A (ja) 知識証明
EP3977673B1 (en) Blockchain transaction comprising runnable code for hash-based verification
US20230316272A1 (en) Divisible tokens
US20220253821A1 (en) Streaming portions of data over a side channel
JP2022532886A (ja) ブロックチェーンへの包含のためのトランザクションの適応性
KR20220012347A (ko) 지식 증명
KR20220012344A (ko) 해시 기반 검증을 위한 실행 가능한 코드를 포함하는 블록체인 트랜잭션
EP4022839A1 (en) Cryptographically linked identities
JP2023554148A (ja) 機密データのブロック
EP3973661B1 (en) Knowledge proof
JP2023502057A (ja) ブロックチェーントランザクションを使用したアイデンティティ検証プロトコル
US20230162176A1 (en) Method for implementing a digital coin system using a blockchain
KR20220059547A (ko) 다중-기준 블록체인 프로토콜
KR20240024113A (ko) 다중-레벨 블록체인
JP2024518079A (ja) マルチパーティブロックチェーンアドレス方式
CN115836314A (zh) 区块链事务输出的概率成员资格测试
TW202329668A (zh) 證明及驗證有序事件序列之技術
WO2024068187A1 (en) Blockchain based read receipt
WO2024041866A1 (en) Blockchain transaction
CN117337436A (zh) 多方区块链地址方案
CN117941317A (zh) 生成区块链事务
CN117280349A (zh) 多方区块链地址方案

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240318