(58)【調査した分野】(Int.Cl.,DB名)
前記ライセンスは、第1ユーザ又は第2ユーザに関連付けられ、前記第1ユーザに関連付けられた第1ユーザ公開鍵又は前記第2ユーザに関連付けられた第2ユーザ公開鍵を更に含む、請求項4又は5に記載の方法。
前記ライセンスは、前記第1ユーザ又は前記第2ユーザの少なくとも1つの電子装置に関連付けられたハッシュ値を更に含む、請求項4、5、又は6のいずれか一項に記載の方法。
コンピュータソフトウェアプログラムであって、処理装置に請求項1乃至14のいずれか一項に記載の方法を実施させる機械可読命令を含むコンピュータソフトウェアプログラム。
【背景技術】
【0002】
本願明細書で、用語「ブロックチェーン」は、あらゆる形式の電子的な、コンピュータに基づく、分散台帳を含むよう使用される。これらは、限定ではないが、総意に基づくブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳、及びそれらの変形を含む。最も広く知られているブロックチェーン技術の用途はビットコイン台帳であるが、他のブロックチェーンの実装が提案され開発されている。ビットコインは便宜上及び説明を目的として本願明細書において言及されるが、本発明はビットコインのブロックチェーンと共に使用することに限定されず、代替のブロックチェーンの実装及びプロトコルが本発明の範囲に含まれることに留意すべきである。
【0003】
ブロックチェーンは、ブロックにより構成される、コンピュータに基づく非集中型の分散型システムとして実装されるピアツーピア電子台帳である。また、ブロックはトランザクションにより構成される。各トランザクションは、ブロックチェーンシステム内で参加者間のデジタル資産の制御の転送を符号化するデータ構造であり、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各ブロックは前のブロックのハッシュを含み、ブロックは共にチェーンになって、その発端からブロックチェーンに書き込まれている全てのトランザクションの永久的な変更不可能なレコードを生成する。トランザクションは、そのインプット及びアウトプットに埋め込まれたスクリプトとして知られる小さなプログラムを含む。スクリプトは、トランザクションのアウトプットがどのように及び誰によりアクセス可能かを指定する。ビットコインプラットフォーム上で、これらのスクリプトは、スタックに基づくスクリプト言語を用いて記述される。
【0004】
トランザクションがブロックチェーンに書き込まれるために、「検証され」なければならない。ネットワークノード(マイナー)は、各トランザクションが有効であることを保証するために作業を実行し、無効なトランザクションはネットワークから拒否される。ノードにインストールされたソフトウェアクライアントは、自身のロック及びアンロックスクリプトを実行することにより、この検証作業を未使用トランザクション(UTXO)に対して実行する。ロック及びアンロックスクリプトの実行が真と評価した場合、トランザクションは有効であり、トランザクションはブロックチェーンに書き込まれる。したがって、トランザクションがブロックチェーンに書き込まれるためには、トランザクションは、i)トランザクションを受信した第1ノードにより検証され、トランザクションが検証された場合に、ノードは該トランザクションをネットワーク内の他のノードに中継し、ii)マイナーにより構築された新しいブロックに追加し、iii)マインされ、つまり過去のトランザクションの公開台帳に追加されなければならない。
【0005】
ブロックチェーン技術は、暗号通貨実装の使用で最も広く知られているが、デジタル起業家が、新しいシステムを実装するために、ビットコインの基づく暗号通貨セキュリティシステム、及びブロックチェーンに格納可能なデータの両方の使用を探索し始めている。ブロックチェーンが、暗号通貨の領域に限定されない自動タスク及び処理のために使用できれば、非常に有利である。このようなソリューションは、それらの用途において一層多様でありながら、ブロックチェーンの利点(例えば、永久的、イベントの耐タンパレコード、分散処理、等)を利用できる。
【0006】
現在の研究の一分野は、「スマートコントラクト(smart contracts)」の実装のためのブロックチェーンの使用である。これらは、機械可読取引又は合意の条件の実行を自動化するために設計されたコンピュータプログラムである。ブロックチェーンに関連する関心の他の分野は、ブロックチェーンを介する現実世界のエンティティを表し転送するための「トークン」(又は「カラードコイン」)の使用である。潜在的に機密な又は秘密のアイテムは、識別可能な意味又は値を有しないトークンにより表現できる。したがって、トークンは、現実世界のアイテムをブロックチェーンから参照できるようにする識別子として機能し、拡張されたセキュリティを提供する。
【0007】
例えばコンピュータソフトウェアのようなデジタル資産を送信し、共有し、又はそれへのアクセスを制御する目的で、暗号化及びブロックチェーン技術のようなセキュリティ関連機能を使用できることは有利である。コンピュータソフトウェアの完全性保証及び共有のための伝統的アプローチは、コンピュータソフトウェアの実行ファイルのデジタル署名を含む。例えば、実行ファイル又は他の関連コードに、公開鍵及び秘密鍵のような暗号鍵対により署名することである。公開鍵は、認証局のような信頼できる中央当局から得られる場合が多い。
【0008】
コンピュータソフトウェアは、契約上の義務を含むライセンスを伴う場合が多い。ライセンスは、ソフトウェアの使用又は再分配を規定する条項を含むことがある。コンピュータソフトウェア又は関連ライセンスが別のユーザへ違法に転送される場合に、問題が生じ得る。
【0009】
本願明細書に含まれる文書、動作、材料、装置、製品、等の議論は、これらの項目のうちのいずれか又は全部が従来基盤の部分を形成すること、又は本願の各請求項の優先日前に存在していたような本開示の関連分野における共通の一般知識であったとの承認として解釈されるべきではない。
【0010】
本願明細書を通じて、用語「含む、有する(comprise)」又は「comprises」若しくは「comprising」のような変形は、記述される要素、整数若しくはステップ、又は要素、整数若しくはステップのグループ、の包含を意味すると理解されるが、任意の他の要素、整数若しくはステップ、又は要素、整数若しくはステップのグループを除外しない。
【発明を実施するための形態】
【0028】
本開示は、概して、コンピュータソフトウェアを保証するために、分散ハッシュテーブル、及びビットコインブロックチェーンのようなピアツーピア(peer-to-peer:P2P)分散台帳を利用する方法及びシステムに関する。
【0029】
以下に記載する実施形態は、具体的にビットコインブロックチェーン(以後ブロックチェーンとして参照される)上で生じるトランザクションを参照する場合があるが、本発明は他のP2P分散台帳を用いて実施されて良いことが理解される。ブロックチェーンの高度な標準化及び大量の関連する公開された文書のために、単に単純さを目的として、本発明の態様を記載するために以下でブロックチェーンが使用される。
【0030】
<分散ハッシュテーブル>
標準的なクライアント/サーバモデルでは、中央サーバは、大部分のリソースを管理し得る。これは、中央サーバに対する攻撃又はその障害が生じた場合に、中央サーバに格納された大部分のリソースが危険に晒され得ることを意味する。対照的に、分散モデルでは、リソースは参加ノード間で共有される(「分散される」)。この場合、全ての参加ノードの能力は利用されず、1つのサーバの障害が大部分のリソースを危険に晒すことはない。
【0031】
図1は、ハッシュテーブルの一例を示す。ハッシュテーブルは、キー値ペアで構成される。各キー値ペアのキーは、ハッシュ関数によりインデックスにマッピングされる。インデックスは、キー値ペアの格納された値の位置を定める。
【0032】
DHTは、ハッシュテーブルに分散モデルを適用する一例である。ハッシュテーブルと同様に、DHTは、キー値ペアを有し、単にキーが与えられるとキー値ペアの値の場所を特定する(「ルックアップする」)効率的な方法を提供する。しかしながら、ハッシュテーブルと対照的に、キー値ペアは、多数の参加ノードにより分散され及び共有される。このように、キー値ペアを格納し及び維持する責任は、参加ノードにより共有される。
【0033】
ハッシュテーブルと同じ方法で、DHTの中の各キー値ペアは、インデックスにマッピングされる。インデックスは、キーに対してハッシュ関数を実行することにより、各キー値ペアについて決定される。例えば、インデックスを決定するために暗号SHA(Secure Hash Algorithm)−1が使用されて良い。
【0034】
各参加ノードは、鍵空間の区分化により少なくとも1つのインデックスを割り当てられる。参加ノードの割り当てられた各インデックスについて、参加ノードはキー値ペアの値を格納する。
【0035】
キー値ペアの値が効率的に検索できることは有利である。キーに関連付けられた値を検索するために、ノードは「ルックアップ」を実行して(インデックスにより)責任あるノードを決定して良い。責任あるノードは、次に、値を決定するためにアクセスされて良い。
【0036】
<ビットコイン及びブロックチェーン>
従来よく知られているように、ブロックチェーンは、ビットコインプロトコルに基づくシステムに参加するネットワーク接続されたノード間で記憶容量が分散されるトランザクション型台帳である。各ビットコイントランザクションはネットワークにブロードキャストされ、トランザクションが確認され、次にブロックに集約される。ブロックは、次に、ブロックを複数の参加ノードに格納することにより、ブロックチェーンに含まれる。
【0037】
暗号通貨のP2P分散台帳の完全なコピーは、暗号通貨においてこれまでに実行された全てのトランザクションを含む。したがって、トランザクションデータレコードの絶えず増大するリストが提供される。ブロックチェーンに入った各トランザクションは暗号によって実施されるので、ブロックチェーンは、例え参加ノードのオペレータによるものでも、タンパリング及び改訂に対しても強健である。
【0038】
ブロックチェーンの透過性により、各トランザクションについて履歴が公衆に利用可能である。
【0039】
ブロックチェーンの更なる利点は、トランザクションがトランザクションのレコードでもあることである。つまり、トランザクションはブロックチェーンの中に埋め込まれる。
【0040】
このように、トランザクションに関連する情報は実際のトランザクションの中にキャプチャされる。このレコードは、永久的且つ不変であり、したがって、トランザクションレコードを別個のデータベースに保持するための第三者に対する要件を削除する。有利なことに、本発明は、ブロックチェーンを介するソフトウェアのような資産のこの制御又は転送を実現するための技術を用いることができ、転送をセキュアな方法で実行することを可能にし、暗号鍵の使用を組み込み、一方で、基礎となるブロックチェーンプロトコルのいかなる変更も必要としない。
【0041】
<Pay-to-script-hash及びマルチシグネチャ>
以下の実施形態は具体的にビットコインプロトコルのP2SH(pay-to-script-hash)方法を使用するトランザクションを参照する場合があるが、本発明はブロックチェーンビットコインプロトコルと別の機能的に等価な方法を用いて実施されて良いことが理解される。
【0042】
ブロックチェーン上の各トランザクションレコードは、トランザクション及び公開鍵の数を示す情報を含むスクリプトを有する。これらの公開鍵は、暗号通貨の送信側及び受信側に関連付けられて良い。P2PKHインプットは、送信側の公開鍵を含む。P2PKHアウトプットは、受信側の公開鍵のハッシュを含む。P2SH multisigインプットは、送信側の署名を含む。スクリプトは、ユーザがどのようにトランザクションレコード内で指定された暗号通貨へのアクセスを得ることができるかを記述するブロックチェーン上の各トランザクションレコードと共に記録された命令リストとして考えられる。
【0043】
背景として、ビットコインプロトコルの標準的なP2SH方法では、アウトプットスクリプト又はRedeemスクリプトは、以下の形式を取り得る。
【0044】
<NumSigs PubK1 PubK2 … PubK15 NumKeys OP_CHECKMULTISIG>
ここで、NumSigsは、トランザクションを解除するためにRedeemスクリプトを満たすために必要な有効署名の数「m」である。PubK1、PubK2、...、PubK15は、トランザクションを解除する署名に対応する公開鍵である(最大15個の公開鍵まで)。NumKeysは公開鍵の数「n」である。
【0045】
ビットコインプロトコルで、楕円曲線デジタル署名アルゴリズムを用いて、ユーザの秘密鍵に基づく署名が生成されて良い。署名は、次に、アウトプットスクリプト又はRedeemスクリプトに関連付けられた暗号通貨の償還のために使用される。ユーザがアウトプットスクリプト又はRedeemスクリプトを償還する(redeem、引き換える)とき、ユーザは彼らの署名及び公開鍵を提供する。アウトプットスクリプト又はRedeemスクリプトは、次に、公開鍵に対して署名を検証する。
【0046】
上述のRedeemスクリプトを償還するために、少なくとも、公開鍵に対応する「m」個の署名が必要である。幾つかの例では、公開鍵の順序が重要であり、「n」人のうちの「m」人の署名する署名者が順次行われなければならない。例えば、「m」が2であり、「n」が15である場合を考える。使用可能な2つの署名、Sig1(PubK1に対応する)及びSig15(PubK15に対応する)がある場合、Redeemスクリプトは、先ずSig1により署名され、続いてSig15により署名されなければならない。
【0047】
<システム概要>
コンピュータソフトウェアを保証するメタデータ(M)を決定する方法、装置、及びシステムが以下に記載される。
【0048】
図2は、通信ネットワーク5を介して第2ノード7と通信する第1ノード3を含むシステム1を示す。第1ノード3は関連する第1処理装置21を有し、及び第2ノード5は関連する第2処理装置27を有する。第1及び第2ノード3、7の例は、コンピュータ、タブレットコンピュータ、モバイル通信装置、コンピュータサーバ、等のような電子装置を含む。
【0049】
キー値ペアを記録し格納するためのDHT13も、
図2に示される。DHT13は、キー値ペアの値を受信し、記録し、及び格納するために、1又は複数の処理装置19に関連付けられて良い。処理装置19は、DHT13の「参加ノード」により使用されて良い。上述のように、DHT13は、キー値ペアの値の場所を特定する効率的方法を提供する。
【0050】
図2は、トランザクションを記録するためのP2P分散台帳14も示す。P2P分散台帳14は、トランザクションを受信し及び記録するために、1又は複数の処理装置20に関連付けられて良い。上述のように、P2P分散台帳14の一例は、ビットコインブロックチェーンである。したがって、ブロックチェーンの文脈では、P2P分散台帳14に関連付けられた処理装置20は、「マイナー」として参照される処理装置であって良い。
【0051】
第1ノード3は第1ユーザ23に関連付けられ、第2ノード7は第2ユーザ24に関連付けられる。一例では、第1ノード3は、コンピュータソフトウェアのベンダを表して良い。別の例では、第1ノード3は、エージェント又はサービスプロバイダを表して良い。更に別の例では、第1ノード3は、コンピュータソフトウェアのユーザを表して良い。
【0052】
同様に、第2ノード7は、エージェント、サービスプロバイダ、コンピュータソフトウェアのベンダ、又はコンピュータソフトウェアのユーザを表して良い。
【0053】
一例では、第1ノード3は、
図3及び
図6により示されるような方法100、500を実行する。別の例では、第2ノード7が、方法100、500を実行する。以下の例示的な実施形態は、第1ノード3を方法を実行するとして参照することがあるが、本開示は、他のノードにより実行されるよう適応され又は変更されても良いことが理解される。
【0054】
図3に示される方法100は、コンピュータソフトウェアに関連付けられたデータ(D1)を決定するステップ110を含む。データ(D1)は、コンピュータソフトウェアに関連付けられたライセンスを更に有して良い。方法100は、コンピュータソフトウェアに基づき第1ハッシュ値(H1)を決定するステップ120を更に含む。一例では、第1ハッシュ値(H1)は、コンピュータソフトウェアの実行ファイルに関連して良い。
【0055】
方法100は、データ(D1)及びコンピュータソフトウェアに基づき第2ハッシュ値(H2)を決定するステップ130を更に含む。一例では、第2ハッシュ値(H2)は、コンピュータソフトウェア及びコンピュータソフトウェアに関連付けられたライセンスの詳細を表して良い。更なる例では、第2ハッシュ値(H2)は、追加情報を有して良い。
【0056】
方法100は、通信ネットワーク5を介して、データ(D1)、第1ハッシュ値(H1)及び第2ハッシュ値(H2)を、分散ハッシュテーブル13のエントリへ送信するステップ140を更に含む。ここで、第2ハッシュ値(H2)は、キー値ペアのキーに割り当てられ、データ(D1)及び第1ハッシュ値(H1)はキー値ペアの値に割り当てられる。キー値ペアの値は、コンピュータソフトウェア又はライセンスの位置を表す識別子を更に有して良い。
【0057】
方法100は、ピアツーピア分散台帳14に含めるために、第2ハッシュ値(H2)に基づくメタデータ(M)を決定するステップ150を更に含む。一例では、メタデータ(M)は、ピアツーピア分散台帳14に含めるために第1Redeemスクリプトに含まれて良い。
【0059】
<コンピュータソフトウェアに関連付けられたデータを決定する110>
上述のように、方法100は、コンピュータソフトウェアに関連付けられたデータ(D1)を決定するステップ110を含む。データ(D1)を決定するステップ110は、ユーザ、ノード、又はデータストアからデータ(D1)を受信するステップを含んで良い。データ(D1)を決定するステップ110は、第1ノード3においてデータ(D1)を生成するステップを更に含んで良い。
【0060】
一例では、第1ノード3は、ユーザインタフェース15を介して第1ユーザ23からデータ(D1)を受信して良い。別の例では、第1ノード3は、第2ユーザ24からデータ(D1)を受信して良い。更に別の例では、第1ノード3は、データストア17からデータ(D1)を受信して良い。
【0061】
データ(D1)は、コンピュータソフトウェアに関連付けられる。ここで、データ(D1)は、コンピュータソフトウェア、追加情報、コンピュータソフトウェアのライセンスを識別し、又はコンピュータソフトウェアの位置を示して良い。例えば、データ(D1)は、コンピュータソフトウェアを識別する文字列又はデータ構造を有して良い。文字列又はデータ構造は、識別キーワード及び/又はコンピュータソフトウェアに関する追加情報の集合を有して良い。追加情報の一例は、コンピュータソフトウェアのバージョンの識別子、例えば数値であって良い。例えば、コンピュータソフトウェアがBobSoftwareでありバージョンが3.0である場合、文字列又はデータ構造(D1)は「BobSoftware/3.0」を有して良い。
【0062】
更なる例では、データ(D1)は、コンピュータソフトウェアに関連付けられたライセンスの識別子を有して良い。これは、ソフトウェアライセンス識別番号(ID)又はソフトウェアライセンスキーであって良い。別の例では、ライセンスの識別子は、ライセンスのコンテンツの暗号ハッシュを有して良い。
【0063】
データ(D1)は、コンピュータソフトウェアの記憶位置を示す識別子を更に有して良い。一例では、識別子は、インターネット上のオブジェクトのURLを有して良い。更なる例では、ハッシュテーブル又は分散ハッシュテーブルのようなレポジトリ上のコンピュータソフトウェアの記憶位置へのリンクが提供されて良い。
【0064】
更なる例では、データ(D1)は、コンピュータソフトウェアのベンダを識別する情報を有して良い。これは、ベンダに関連付けられた、名称、アドレス、連絡先の詳細事項、又は公開鍵のような個人の詳細事項を含み得る。
【0065】
<コンピュータソフトウェアに基づき第1ハッシュ値(H1)を決定する120>
上述のように、方法100は、コンピュータソフトウェアの第1ハッシュ値(H1)を決定するステップ120を更に含む。第1ハッシュ値(H1)を決定するステップ120は、ユーザから第1ハッシュ値(H1)を受信する、又はデータストアから第1ハッシュ値(H1)にアクセスするステップを含んで良い。第1ハッシュ値(H1)を決定するステップ120は、第1ノード3においてハッシュ値を計算するステップを更に含んで良い。
【0066】
一例では、第1ノード3は、ユーザインタフェース15を介して第1ユーザ23から第1ハッシュ値(H1)を受信して良い。別の例では、第1ノード3は、第2ユーザ24から第1ハッシュ値(H1)を受信して良い。更に別の例では、第1ノード3は、ローカルデータストア17又はリモートデータストアから第1ハッシュ値(H1)にアクセスして良い。
【0067】
一例では、第1ハッシュ値(H1)は、コンピュータソフトウェアの実行ファイルのものであって良い。コンピュータソフトウェアの実行ファイルは、インターネットのような通信ネットワーク5から検索されて良い。別の例では、実行ファイルは、第1ユーザ23又は第2ユーザ24により提供されて良い。更に別の例では、実行ファイルは、データストア17から検索されて良い。更に別の例では、実行ファイルは、ハッシュテーブル又はDHTのようなレポジトリから検索可能であって良い。
【0068】
ソフトウェアの実行ファイルのハッシュは、情報の256ビット表現を生成するために、SHA−256アルゴリズムを用いて決定されて良い。理解されるべきことに、SHA(Secure Hash Algorithm)ファミリの中の他のアルゴリズムを含む他のハッシュアルゴリズムが使用されて良い。幾つかの特定の例は、SHA3−224、SHA3−256、SHA3−384、SHA3−512、SHAKE128、SHAKE256を含むSHA−3サブセットの中のインスタンスを含む。他のハッシュアルゴリズムは、RIPEMD(RACE Integrity Primitives Evaluation Message Digest)ファミリの中のアルゴリズムを含んで良い。特定の例は、RIPEMD−160を含んで良い。他のハッシュ関数は、Zemor−Tillichハッシュ関数及びナップサック・ハッシュ関数に基づくファミリを含んで良い。
【0069】
<データ(D1)及びコンピュータソフトウェアに基づき第2ハッシュ値(H2)を決定する130>
方法100は、データ(D1)及びコンピュータソフトウェアに基づき第2ハッシュ値(H2)を決定するステップ130を更に含む。
【0070】
一例では、第2ハッシュ値(H2)は、データ(D1)とコンピュータソフトウェアの実行ファイル(又は実行ファイルのハッシュ、つまり第1ハッシュ値(H1))との連結のハッシュに基づき決定されて良い。更なる例では、第2ハッシュ値(H2)は、データ(D1)とコンピュータソフトウェアの実行ファイル(又は実行ファイルのハッシュ)と追加情報との連結のハッシュに基づき決定されて良い。
【0071】
追加情報は、第1ユーザ23(PU1)又は第2ユーザ24(PU2)の公開鍵を有して良い。更なる例では、追加情報は、第1ユーザ23又は第2ユーザ24に関連付けられたエンティティの識別子を有して良い。例えば、エンティティは、第1ユーザ23又は第2ユーザ24の従業員であって良い。別の例では、エンティティは、第1ユーザ23又は第2ユーザ24のサービスプロバイダであって良い。
【0072】
追加情報は、第1ノード3、第2ノード7、第1ユーザ23、又は第2ユーザ24に関連付けられた装置の装置識別子を更に有して良い。装置の一例は、
図2に示されるような第1処理装置21である。装置識別子は、MACアドレス、マザーボード製造番号、又は装置識別番号のうちの少なくとも1つを含んで良い。装置識別子は、MACアドレス、マザーボード製造番号、又は装置識別番号のうちの少なくとも2つの連結を更に含んで良い。更なる例では、装置識別子は、MACアドレス、マザーボード製造番号、又は装置識別番号に関連付けられたハッシュ値、又はそれらの連結を有して良い。
【0073】
更なる例では、追加情報は、コンピュータソフトウェアに関連付けられたライセンスの有効期限を有して良い。
【0074】
<コンピュータソフトウェアに関連付けられたライセンス>
更なる例では、第2ハッシュ値(H2)は、データ(D1)とコンピュータソフトウェアの実行ファイル(又は実行ファイルのハッシュ)と追加情報又はコンピュータソフトウェアに関連するライセンスとの連結のハッシュに基づき決定されて良い。
【0075】
ライセンスの表現は、ライセンスの内容を指定するファイル又は文書であって良い。例えば、ASCII平文、PDF文書又はWord文書である。第2ハッシュ値(H2)は、元の形式のライセンスを含んで良く、又は、例えば、インターネットのような公衆にアクセス可能な通信ネットワーク上のライセンスの位置へのリンクを提供して良い。更なる例では、ハッシュテーブル又はDHTのようなレポジトリ上のライセンスの位置へのリンクが提供されて良い。更なる例では、データストア17のようなコンピュータに基づくリソース上のライセンスの位置へのリンクが提供されて良い。
【0076】
一例では、ライセンスは、コンピュータソフトウェアに関連付けられた第1ハッシュ値(H1)を有して良い。
【0077】
コンピュータソフトウェアに関連付けられたライセンスは、上述のような追加情報を更に有して良い。一例では、ライセンスは、第1ユーザ23又は第2ユーザ24に関連付けられて良い。ライセンスは、第1ユーザ23(PU1)又は第2ユーザ24(PU2)の公開鍵を有して良い。更なる例では、ライセンスは、第1ユーザ23又は第2ユーザ24に関連付けられたエンティティの識別子を有して良い。
【0078】
コンピュータソフトウェアに関連付けられたライセンスは、第1ノード3、第2ノード7、第1ユーザ23、又は第2ユーザ24に関連付けられた装置の装置識別子を更に有して良い。装置の一例は、
図2に示されるような第1処理装置21である。装置識別子は、MACアドレス、マザーボード製造番号、又は装置識別番号のうちの少なくとも1つを含んで良い。装置識別子は、MACアドレス、マザーボード製造番号、又は装置識別番号のうちの少なくとも2つの連結を更に含んで良い。更なる例では、装置識別子は、MACアドレス、マザーボード製造番号、又は装置識別番号に関連付けられたハッシュ値、又はそれらの連結を有して良い。
【0079】
第1ユーザ23は、コンピュータソフトウェアのベンダであって良く、第2ユーザ24は、コンピュータソフトウェアの受信者(「エンドユーザ」)であって良い。別の例では、第2ユーザ23は、コンピュータソフトウェアのベンダであって良く、第2ユーザ24は、コンピュータソフトウェアの受信者(「エンドユーザ」)であって良い。
【0080】
一例では、コンピュータソフトウェアに関連付けられたライセンスは、1人のエンドユーザのみを認可して良い(「単一ユーザライセンス」)。更なる例では、コンピュータソフトウェアに関連付けられたライセンスは、1人のエンドユーザの1台の装置を認可して良い(「単一装置ライセンス」)。別の例では、コンピュータソフトウェアに関連付けられたライセンスは、エンドユーザの1台より多数の装置を認可して良い(「複数装置ライセンス」)。
【0081】
別の例では、1人より多くのエンドユーザが存在して良い(「マルチユーザライセンス」)。更なる例では、コンピュータソフトウェアに関連付けられたライセンスは、エンドユーザ当たり1台の装置を認可して良い。別の例では、コンピュータソフトウェアに関連付けられたライセンスは、エンドユーザ当たり1台より多数の装置を認可して良い。
【0082】
ライセンスが第1ユーザ23又は第2ユーザ24に関連付けられる場合には、ライセンスは、第1ユーザ23に関連付けられた第1ユーザ公開鍵(PU1)、及び第2ユーザ24に関連付けられた第2ユーザ公開鍵(PU2)を有して良い。
【0083】
<マークル木>
別の例では、ライセンスはマークル(Merkle)木のトップハッシュ値であって良い。マークル木の一例は
図4に示される。マークル木では、各ノードにおけるハッシュ値は、それら個々の「子」ノードのハッシュである。例えば、ハッシュ値Hash−A305は、2個の「子」ノード309及び311におけるハッシュ値のハッシュである。マークル木のトップハッシュ値、Hash−AB303は、マークル木の中の全部のハッシュ値を含むことが分かる。つまり、これは、木の最下部にある4枚の「葉」のハッシュ値であるA1 317、A2 319、B1 321、及びB2 323をキャプチャする。
【0084】
本開示の一例では、マークル木の各「葉」は、ライセンスの情報の一態様を表す。
図5に、例示的なライセンスを示す。データ(D1)417はハッシュ値Hash−D409の中にキャプチャされ、ソフトウェアの実行ファイル419はハッシュ値Hash−S411(H1)の中にキャプチャされ、ユーザ23及び/又は24の公開鍵421はハッシュ値Hash−P413の中にキャプチャされ、有効期限データ423はハッシュ値Hash−E415の中にキャプチャされる。ノード405及び407が、それぞれ、データ(D1)417及びソフトウェア419の葉、並びに公開鍵421及び有効期限423の葉に関連付けられたハッシュ値をキャプチャすることが分かる。
【0085】
理解されるべきことに、上述されていない他の情報は、ハッシュ値(H2)の基づく追加情報を有して良い。
【0086】
<データ(D1)、第1ハッシュ値(H1)、及び第2ハッシュ値(H2)を分散ハッシュテーブルへ送信する140>
方法100は、通信ネットワーク5を介して、データ(D1)、第1ハッシュ値(H1)、及び第2ハッシュ値(H2)を、分散ハッシュテーブル13のエントリへ送信するステップ140を更に含む。
【0087】
一例では、第2ハッシュ値(H2)はキー値ペアのキーであって良く、データ(D1)及び第1ハッシュ値(H1)はキー値ペアの中の値であって良い。
【0088】
更なる例では、上述のような追加情報は、キー値ペアの中の値の部分であっても良い。これは、限定ではないが、第1ユーザ23若しくは第2ユーザ24の公開鍵、第1ノード3、第2ノード7、第1ユーザ23、若しくは第2ユーザ24に関連付けられた装置の装置識別子、コンピュータソフトウェア若しくはライセンスの位置を示す識別子、又はライセンスに関連付けられた更なる追加情報を含む。
【0089】
上述のように、DHT13は、キー値ペアにより構成され、各キー値ペアはインデックスに割り当てられる。一例では、第2ハッシュ値(H2)はインデックスを生成するために使用されて良い。ハッシュ関数又は暗号ハッシュ関数が、第2ハッシュ値(H2)に対して実行されて良い。例えば、暗号関数SHA−1が使用されて良い。
【0090】
Index=SHA−1(H2)
DHT13の中のキー値ペアのキーであるべき第2ハッシュ値(H2)、及びキー値ペアの値であるべき第1ハッシュ値(H1)について、キー及び値は、DHYT13の任意の参加ノードへ送信される。
【0091】
一例では、put(key,value)のようなメッセージが、DHT13の参加ノードへ送信されて良い。ここで、keyは第2ハッシュ値(H2)であり、valueはデータ(D1)及び第1ハッシュ値(H1)である。メッセージは、鍵空間の区分により示されるインデックスに割り当てられる参加ノードにより受信されるまで、全ての参加ノードのあちこちに送信されて良い。メッセージ内で示されたインデックスに割り当てられた参加ノードは、次に、キー値ペアをDHT13に格納し、キー値ペアに関連付けられたエントリを維持する責任を引き受けて良い。
【0092】
有利なことに、任意の所与の鍵の値は、DHT13から検索できる。一例では、第1ユーザ23又は第2ユーザ24は、値を検索したいと望む。第1ユーザ23又は第2ユーザ24は、第1ノード3、第2ノード7、又は図示されない別のノードを介して、DHT13の任意の参加ノードに、get(key)のような要求メッセージを提供して良い。要求メッセージは、次に、鍵空間の区分により示されるインデックスに割り当てられる参加ノードにより受信されるまで、全ての参加ノードのあちこちに送信されて良い。
【0093】
<メタデータ(M)を決定する150>
方法100は、第2ハッシュ値(H2)を有するメタデータ(M)を決定するステップ150を更に含む。メタデータ(M)を決定するステップ150は、ユーザ、ノード、又はデータストアからメタデータ(M)を受信するステップを含んで良い。メタデータ(M)は、例えば、P2P分散台帳(ブロックチェーン)14上のトランザクションのP2SHマルチシグネチャ第1Redeemスクリプト(RS1)の中の公開鍵のために利用可能な15個の場所のうちの1又は複数の含まれて良い。
【0094】
P2P分散台帳14上のトランザクションの第1Redeemスクリプト(RS1)は、メタデータ(M)に含まれるコンテンツを表すトークン化トランザクション(「発行トークン」)の発行又は生成を表して良い。一例では、トークンは、エージェント(A)により発行されて良い。
【0095】
ビットコインプロトコルのP2SH方法では、メタデータは、以下に記載する方法を用いてRedeemスクリプトに含められて良い。
【0096】
<メタデータ>
メタデータ(M)は、P2SHマルチシグネチャRedeemスクリプト(RS1)の中の公開鍵のために利用可能な15個の場所のうちの1又は複数に埋め込まれて良い。例えば、Redeemスクリプト(RS1)は次の形式を取って良い。
【0097】
<NumSigs Metadata1 Metadata2… PubK1 PubK2… NumKeys OP_CHECKMULTISIG>
ここで、Metadata1及びMetadata2は、それぞれ、Redeemスクリプトの中の公開鍵の場所を取り入れるメタデータを含み、PubK1及びPubK2は公開鍵である。言い換えると、メタデータは、暗号鍵が提供されるべき位置としてブロックチェーンプロトコルにより指定された位置において、Redeemスクリプトの中で提供されて良い。これは、基礎にあるブロックチェーンプロトコルに対するいかなる変更も伴わずに、メタデータがトランザクション(Tx)に組み込まれ得るという利点を提供する。
【0098】
メタデータ(M)は、第2ハッシュ値(H2)を有して良い。メタデータ(M)は、コンピュータソフトウェア又はライセンスに関連付けられた条件を記述する記述又はキーワードを更に有して良い。例えば、ライセンスの日付、名称、誕生日、住所、連絡先の詳細、又はライセンスに関連付けられたユーザの他の詳細事項である。更なる例では、暗号通貨額に関連付けられた情報が含まれて良い。
【0099】
メタデータ(M)は、多くの方法で情報を含むことができる。一例では、情報の内容が含まれて良い。更なる例では、情報の暗号ハッシュが含まれて良い。情報のハッシュは、情報の256ビット表現を生成するために、SHA−256アルゴリズムを用いて決定されて良い。理解されるべきことに、SHA(Secure Hash Algorithm)ファミリの中の他のアルゴリズムを含む他のハッシュアルゴリズムが使用されて良い。幾つかの特定の例は、SHA3−224、SHA3−256、SHA3−384、SHA3−512、SHAKE128、SHAKE256を含むSHA−3サブセットの中のインスタンスを含む。他のハッシュアルゴリズムは、RIPEMD(RACE Integrity Primitives Evaluation Message Digest)ファミリの中のアルゴリズムを含んで良い。特定の例は、RIPEMD−160を含んで良い。他のハッシュ関数は、Zemor−Tillichハッシュ関数及びナップサック・ハッシュ関数に基づくファミリを含んで良い。
【0100】
本開示の更なる実施形態では、上述の1又は複数を含む組み合わせがメタデータ(M)に含まれて良い。メタデータ(M)はブロックチェーンのようなP2P分散台帳14により公開され、又は非セキュアネットワークを介して送信され得るので、メタデータ(M)の特定の詳細事項は、プライバシを理由に秘密にされ又は隠されることが望ましい場合がある。
【0101】
したがって、本開示の実施形態におけるマルチシグネチャP2SHビットコイントランザクションの使用は、コンピュータソフトウェア及びライセンスに関連付けられた情報の転送及び永久記録を可能にするという利点を提供する。この記録は、トランザクションのアウトプットスクリプト、例えばRedeemスクリプトにメタデータを含めることにより達成される。
【0102】
<第1Redeemスクリプト>
上述のように、Redeemスクリプトは、ビットコインプロトコルの標準的なP2SH方法におけるアウトプットスクリプトの一例であり、ユーザがどのようにトランザクションレコード内で指定された暗号通貨へのアクセスを得ることができるかを記述する。
【0103】
本開示では、発行トークンの第1Redeemスクリプト(RS1)はメタデータ(M)に基づいて良い。第1Redeemスクリプト(RS1)は、エージェント秘密鍵(agent private key:VA)との暗号対を形成するエージェント公開鍵(agent public key:PA)を更に有して良い。このように、エージェント秘密鍵(VA)は、トランザクションに関連付けられた暗号通貨を「アンロック(解除)」する又は使用するために必要である。
【0104】
一例では、発行トークンの第1Redeemスクリプト(RS1)はメタデータ(M)を含んで良い。第1Redeemスクリプト(RS1)は、エージェント公開鍵(PA)を更に含んで良い。本例では、第1Redeemスクリプト(RS1)は次の形式を取って良い。
【0105】
<OP_1 PA Metadata1 Metadata2 OP_3 OP_CHECKMULTISIG>
ここで、OP_1はトランザクションを解除するために第1Redeemスクリプト(RS1)を満たすために必要な署名の数(「NumSigs」)を示し、OP_3はRedeemスクリプトの中の公開鍵の数(「NumKeys」)を示す。
【0106】
本例では、第1Redeemスクリプト(RS1)は、メタデータのための2個の指定されたフィールド、Metadata1及びMetadata2を含んで良い。Metadata1及びMetadata2の特定の例は、以下の表1に示される。
【0108】
【表1】
本例は、Metadata1内にライセンスへのポインタを提供することを含む。これは、ライセンスのサイズがこのような詳細事項をメタデータ(M)に含むことを妨げる場合に有用であり得る。さらに、メタデータ(M)は公表され、非セキュアなネットワークを介して送信され得るので、トークンの特定の詳細事項はプライバシを理由に秘密にされ又は隠されることが望ましい場合がある。
【0109】
Metadata1の最初の4バイトは、ライセンス種類を示す。例えば、ライセンス種類は、BobSoftwareのようなコンピュータソフトウェアの名称を示して良い。更なる例では、ライセンス種類は、上述のような「単一ユーザ」又は「複数装置」のようなライセンスの権限付与の種類を示して良い。次の16バイトは、実際の電子ライセンスファイルの位置のIPアドレスを保持し、IPv6アドレスを許容する。幾つかの実施形態では、この値は、ライセンスファイルが集中化されるのではなく、クラウドに渡り分散され得るように、Torrentファイルのシードを指して良い。続く12バイトは、ライセンス種類に固有のデータを含む。
【0110】
Metadata2の最初の20バイトは、ライセンスファイルの実際のコンテンツに適用されるSHA256によるRIPEMD−160を用いる実際のライセンスファイルのハッシュである。実際のライセンスファイルは検索可能であるので、これは、コントラクトに対するトランザクションの検証を可能にする。ライセンスファイル自体は、特定の実施形態の要件に依存して、完全に公表されて良く(暗号化されず、人間により可読である)、又はプライバシを理由に暗号化されて良い。Metadata2の残りの12バイトの内容は、ライセンス種類に依存して使用されて良い。
【0111】
上述の第1Redeemスクリプト(RS1)の例から分かるように、発行トークンは使用されるためにエージェント(A)により署名されなければならない。発行トークンのトランザクションの一例は、表2に提供される。ここで、簡潔さのためにマイナー料金は示されない。
【0113】
【表2】
表2の行4〜8は、発行トークンに含まれるべき(つまり「トークン化される」)第1暗号通貨額(C1)である、トランザクションへのインプットを表す。本例では、第1暗号通貨額(C1)は、第1暗号通貨額をエージェント(A)の利益へと転送した前のトランザクション(ID−110)の結果であった。したがって、前のトランザクション(ID−110)のアウトプットスクリプト(RedeemスクリプトID−110)は、エージェントの公開鍵(PA)を含む。したがって、この前のアウトプットを解除するために、スクリプト(RedeemスクリプトID−110)は、第1ユーザの秘密鍵(VA)で署名されなければならない。
【0114】
表2の行10〜12は、トランザクション(ID−600)の第1アウトプット(のみ)を表す。これは、本例では、生成され、エージェントに転送されて戻される発行トークンを表す。行10は、アウトプット値を示し、第1暗号通貨額(C1)である。行12は、ビットコインプロトコルのP2SH方法で使用されるような「<hash of redeem script>」を含むアウトプットスクリプトを示す。本例では、Redeemスクリプトは、上述のような形式の第1Redeemスクリプト(RS1)である。
【0115】
表2に示されるトランザクション(ID−600)のアウトプットは、次に、第1データアウトプット(O1)と共に、P2P分散台帳14に記録される。特に、第1データアウトプット(O1)は、トランザクションの中で転送された第1暗号通貨額(C1)の指示を有して良い。第1データアウトプット(O1)は、第1Redeemスクリプト(RS1)のハッシュを更に有して良い。
【0116】
第1暗号通貨額(C1)の将来のトランザクション、例えば、第1ユーザ23又は第2ユーザ24へのトークンの転送では、第1暗号通貨額(C1)を解除するためのスクリプト(例えば将来のトランザクションのインプットスクリプト署名(ScriptSig))は、以下の形式であって良い。
【0117】
OP_0 Sig-VA Sig-VU1 <OP_1 PAPU1 Metadata1 Metadata2 OP_4 OP_CHECKMULTISIG>
ここで、Sig−VU1は第1ユーザ23の署名を示す。上述のスクリプトは、第1暗号通貨額(C1)を解除するために、エージェント(A)又は第1ユーザ23からの1つの署名だけが必要であることを想定していることに留意する。
【0118】
発行トークンは、第2Redeemスクリプト(RS2)により、別のユーザへ転送されて良い。
【0119】
<変形>
<第2Redeemスクリプト>
コンピュータソフトウェア及びライセンスに関連付けられたトークンは、エージェント(A)から別のユーザ、例えば第1ユーザ23又は第2ユーザ24へ転送されて良い。一例では、トークンの転送はコンピュータソフトウェア又はライセンスのユーザへのアクセスを許可することと同様であって良い。転送は第2Redeemスクリプト(RS2)により実施されて良い。
【0120】
一例では、エージェント(A)は、第1ユーザ23へ発行トークンを転送したいと望む。第1ユーザ23は、例えばコンピュータソフトウェアのベンダを表して良い。
【0121】
本例では、第2Redeemスクリプト(RS2)は、メタデータ(M)、エージェント(A)に関連付けられたエージェント公開鍵(PA)、及び第1ユーザ23に関連付けられた第1ユーザ公開鍵(PU1)に基づいて良い。
【0122】
第2Redeemスクリプト(RS2)は次の形式であって良い。
【0123】
<OP_1 PA PU1 Metadata1 Metadata2 OP_4 OP_CHECKMULTISIG>
本例では、第2Redeemスクリプト(RS2)は、第1Redeemスクリプト(RS1)と同じ2個のメタデータフィールドを含む。第2Redeemスクリプト(RS2)は、エージェント(A)に関連付けられたエージェント公開鍵(PA)、及び第1ユーザに関連付けられた第1ユーザ公開鍵(PU1)を更に有する。
【0124】
上述の第2Redeemスクリプト(RS2)の例から分かるように、転送されるトークンは使用されるためにエージェント(A)又は第1ユーザ23により署名されなければならない。発行トークンのこの転送のためのトランザクションの一例は、表3に提供される。ここで、再び簡潔さのためにマイナー料金は示されない。
【0126】
【表3】
表2と同様に、表3の行4〜8は、トランザクション(ID−610)へのインプットを表す。本例では、インプットは発行トークンであり、つまり、表2に示されるトランザクション(ID−600)のアウトプットである。行7のRedeemスクリプトは発行トークンのRedeemスクリプト、つまり第1Redeemスクリプト(RS1)に対応することが分かる。したがって、トランザクション(ID−600)のアウトプットを解除するために、第1Redeemスクリプト(RS1)は、エージェントの公開鍵(PA)で署名されなければならない。
【0127】
表3の行10〜12は、トランザクション(ID−610)のアウトプットを表す。これは、本例では、エージェント(A)又は第1ユーザ23(U1)に転送される発行トークンを表す。行10は、アウトプット値を示し、第1暗号通貨額(C1)である。行12は、ビットコインプロトコルのP2SH方法で使用されるような「<hash of redeem script>」を含むアウトプットスクリプトを示す。本例では、Redeemスクリプトは、上述のような形式の第2Redeemスクリプト(RS2)である。
【0128】
トランザクション(ID−610)のアウトプットは、次に、第2データアウトプット(O2)と共に、P2P分散台帳14に記録される。第2データアウトプット(O2)は、トランザクションの中で転送されるべき第1データアウトプット(O1)からの第1暗号通貨額(C1)の指示を有して良い。第2データアウトプット(O2)は、第2Redeemスクリプト(RS2)のハッシュを更に有して良い。
【0129】
<コンピュータソフトウェア又はライセンスの位置を示す識別子>
上述のように、データ(D1)又はライセンスは、それぞれコンピュータソフトウェア又はライセンスの位置を示す識別子を有して良い。
【0130】
一例では、識別子は、データ(D1)又はライセンスに独立に決定され、データ(D1)又はライセンスと別個のままであって良い。識別子は、方法100で上述したように、データ(D1)及び第1ハッシュ値(H1)と一緒にキー値ペアの値に更に割り当てられて良い。このように、識別子は、上述のように、メッセージput(key,value)のvalueフィールドに含まれ、DHT13の参加ノードへ送信されて良い。
【0131】
一例では、識別子は、インターネット上のオブジェクトのURLを有して良い。別の例では、位置を示す識別子は、ハッシュテーブル又はDHT13のようなレポジトリのアドレスを有して良い。更に別の例では、位置を示す識別子は、第1ノード3の第1処理装置21に関連付けられたデータストア17のような、サーバ、データベース、又はコンピュータに基づくリソースに設けられた記憶設備のようなコンピュータに基づくレポジトリのアドレスを有して良い。
【0132】
図6は、コンピュータソフトウェア又はライセンスの位置を決定する方法500を示す。方法500は、第1Redeemスクリプト(RS1)からメタデータ(M)を決定するステップ510を含む。上述のように、メタデータ(M)は、第1Redeemスクリプト(RS1)の中の公開鍵のために利用可能な15個の場所のうちの1又は複数に埋め込まれて良い。
【0133】
ビットコインプロトコルのP2SH方法では、トランザクションのアウトプットが後のトランザクションで使用されるとき、Redeemスクリプトが後のトランザクションの中で見えるようになる。上述のように、表2を参照すると、発行トークンのためのトランザクション(ID−600)は、エージェント(A)に払い戻される。このように、エージェント(A)は、第1Redeemスクリプト(RS1)を公表する(expose)ためにこの発行トークンを使用して良い。第2ハッシュ値(H2)に基づくメタデータ(M)は、したがって、P2P分散台帳14上で可視である。このように、第2ハッシュ値(H2)は、第1Redeemスクリプト(RS1)内のメタデータ(M)から検索できる520。一例では、キー値ペアのキーに関連付けられた値は、要求メッセージget(key)を用いてDHT13から検索できる。
【0134】
方法500は、通信ネットワーク5を介して、DHT13の参加ノードに関連付けられたプロセッサへ、第2ハッシュ値(H2)を送信するステップ530を更に含む。上述のように、第2ハッシュ値(H2)は、キー値ペアのキーであって良い。さらに上述したように、所与のキーに対する値は、キーを含むメッセージをDHT13の任意の参加ノードに提供することにより検索できる。したがって、識別子がキー値ペアの値フィールドに含まれる例では、方法500は、参加ノードのプロセッサから、コンピュータソフトウェア又はライセンスの位置を示す識別子を決定できる540。
【0135】
<処理装置>
上述のように、第1ノード3及び第2ノード7は、コンピュータ、電話機、タブレットコンピュータ、モバイル通信装置、コンピュータサーバ、等のような電子装置であって良い。電子装置は、処理装置21、27、データストア17、及びユーザインタフェース15を含んで良い。
【0136】
図7は、処理装置21、27の一例を示す。処理装置21、27は、第1ノード3、第2ノード7、又は図示しない他のノードにおいて使用されて良い。処理装置21、27は、バス1530を介して互いに通信する、プロセッサ1510、メモリ1520、及びインタフェース装置1540を含む。メモリ1520は、上述の方法100、500を実施するための機械可読命令及びデータを含むコンピュータソフトウェア格納し、プロセッサ1510は、方法100、500を実施するためにメモリ1520からの該命令を実行する。インタフェース装置1540は、通信ネットワーク5、及び幾つかの例ではユーザインタフェース15及びデータストア17のような周辺機器との通信を実現する通信モジュールを含んで良い。留意すべきことに、処理装置1510は独立したネットワーク要素であって良いが、処理装置1510は別のネットワーク要素の部分であっても良い。さらに、処理装置1510により実行される幾つかの機能は、複数のネットワーク要素の間で分散されて良い。例えば、第1ノード3は、第1ノード3に関連付けられたセキュアローカルエリアネットワークにおいて方法100、500を実行するために複数の処理装置21を有して良い。
【0137】
本開示はユーザ、従業員、発行人、商人、プロバイダ、又は他のエンティティが特定の動作(署名、発行、決定、計算、送信、受信、生成、等を含む)を実行することを記載したが、この用語は提示の明確化のために使用される。理解されるべきことに、これらの動作は、これらのエンティティにより操作されるコンピューティング装置により実行される。
【0138】
本開示の広範な一般的範囲から逸脱せずに、多数の変形及び/又は変更が上述の実施形態に対して行われることが、当業者により理解される。本発明の実施形態は、したがって、あらゆる面で、単に説明であり限定的でないと考えられる。