【解決手段】販売者の取引装置は、データを秘密コンテンツ鍵で暗号化する暗号化部と、第1取引装置を宛先とする第1取引情報であって、秘密コンテンツ鍵を含む引数情報の公開を条件に暗号資産の受け取りを可能にする第1取引情報が分散型台帳に公開されたとき、暗号資産を受け取るための第2取引情報であって、引数情報を含む第2取引情報を分散型台帳に公開する第1公開部と、を備え、購入者の取引装置は、第1取引情報を分散型台帳に公開する第2公開部と、第2取引情報が分散型台帳に公開されたとき、引数情報を取得する取得部と、引数情報を用いて暗号化されたデータを復号する復号部と、を備える。
【発明を実施するための形態】
【0008】
本実施形態は、分散型台帳を用いることでトラストレスにコンテンツデータの売買取引を行うシステムに係る。コンテンツデータの対価は、コンテンツデータの購入者が分散型台帳を介して販売者に暗号資産を送金することによって支払われる。分散型台帳とは、電子署名とハッシュポインタとを使用して改ざんを検出可能な構造のデータを、ネットワーク上に分散する複数のノードに保持させるというものである。
分散型台帳は、例えば、ブロックチェーンまたはDAG(Directed acyclic graph)などである。以下の説明では、一例として、分散型台帳がブロックチェーンであるものとして説明する。
なお、DAGでは、ユーザがトランザクションを作成したとき、先に公開されている未承認のトランザクションを承認する。ユーザが作成したトランザクションも、後から公開される未承認のトランザクションに承認される。閾値以上の未承認のトランザクションから直接または間接的に承認されたとき、ユーザが作成したトランザクションは、ネットワークで合意されたものとみなされる、というコンセンサスアルゴリズムを採用している。
上記のようにDAGは、以下で説明するブロックチェーンと、コンセンサスアルゴリズムに違いがあるものの、トランザクションの構造はブロックチェーンと同様のものを採用することができる。
したがって、分散型台帳としてブロックチェーンを利用した処理と、分散型台帳としてDAGを利用する処理とは、同様の構成のトランザクションを用いて実行することができる。このため、以下で説明する分散型台帳としてブロックチェーンを利用する処理は、分散型台帳としてDAGを利用して実行することも可能である。
【0009】
[ブロックチェーン]
後に詳述するが、ブロックチェーンと暗号資産の送金について概説する。
ブロックチェーンとは、複数の取引情報を含むブロックを生成し、生成したブロックを連結することにより、分散型ネットワークにデータを記録するデータベースのことである。
ブロックには、複数の取引情報に加えて、1つ前に生成されたブロックの内容を示すハッシュ値を含むので、ブロックチェーンは、生成されたブロックが時系列に沿ってつながっていくデータ構造を有する。ビットコインやモナコイン、イーサリアム等に代表される暗号資産(仮想通貨)の基礎技術である。
【0010】
資産の取引をトランザクションというデータ形式で表現し、それをP2Pネットワークで共有する。トランザクション全体をマークルツリーでまとめあげ、マークルツリーのルートノード(マークルルート)と前ブロックのハッシュ値、Nonceと呼ばれる任意の値などをまとめたハッシュ値が一定値以下になるようなNonceを探し当てる作業を、マイニングと呼ぶ。
マイニングに成功するとマイニング報酬が得られる。そのマイニング報酬を目当てにマイニングに投入される計算資源の多さによって、古いデータほど改ざんが難しくなる仕組みを、PoW(Proof of Work)型のブロックチェーンシステムと呼ぶ。
このように、何らかの報酬を与えることで、データベースへの信頼性を担保するための資源を提供させる仕組みのことをブロックチェーンと呼ぶ。
PoW型ブロックチェーン以外にもPoS型、PoI型のブロックチェーンも適用が可能だが説明は割愛する。
【0011】
[暗号資産の送金の仕組み]
現在主流となっている暗号資産には大きく分けて2種類がある。ビットコインから派生して開発されているビットコインやライトコイン、モナコインなどと、イーサリアムから派生して開発されているルートストックなどである。
前者の場合、暗号資産の実体は未使用のトランザクションの出力(Unspent Transaction Output、UTXO)である。
UTXOは通常、ECDSAという楕円曲線暗号を用いた電子署名によってのみアンロック可能なようにロックされている。また、特定の秘密鍵を持つ「所有者」にのみアンロックが可能とするため、通常UTXOには秘密鍵に対応する公開鍵が記述されている。
【0012】
UTXOに記述されている公開鍵に対応するECDSA電子署名を与えることでアンロックし、新たなトランザクションの入力に接続し、その新たなトランザクションのUTXOに送金先の所有者の公開鍵を記述することで、暗号資産の送金を実現している。
実際には、UTXOにはscriptPubKeyと呼ばれる領域があり、そこにはScriptと呼ばれるプログラミング言語で記述されたプログラムが書いてある。そのUTXOに接続しようとするトランザクションの入力には、scriptSigと呼ばれる領域があり、この2つがちょうど対応づいている場合に、UTXOはアンロックされる。 イーサリアムやそこから派生した暗号資産については、スマートコントラクトを用いることで同様の仕組みを実現することが出来る。
【0013】
図1は、本実施形態に係るネットワーク構造の一例を示す図である。
ネットワークは、取引装置70と、取引装置80と、ネットワーク30と、ネットワーク40と、ネットワーク200、とを含む。そして、取引装置70と、取引装置80と、ネットワーク30と、ネットワーク40とはネットワーク200を介して互いに通信可能に接続されている。
取引装置70及び取引装置80は、例えば、後述するコンピュータ装置である。以下の説明では、一例として、取引装置70をコンテンツデータの販売者が操作する取引装置として説明する。また、取引装置80を、コンテンツデータの購入者が操作する取引装置として説明する。
ネットワークには取引装置10と取引装置20が含まれるが、これらは実施形態が基づいているアトミックスワップを説明するために参照される。
【0014】
ネットワーク30及びネットワーク40は、P2Pネットワークなどの分散型ネットワークであり、ブロックチェーン上に取引情報を記録する。
以下の説明では、一例として、ネットワーク30は、例えば、ビットコインのコンセンサスアルゴリズムであるプルーフオブワーク(PoW)を採用しているものとして説明する。また、ネットワーク40は、例えば、ライトコインのコンセンサスアルゴリズムであるプルーフオブワークを採用しているものとして説明する。
【0015】
また、ネットワーク30内で発生した取引を記録するブロックチェーンのことをビットコインのブロックチェーンともいう。さらに、ネットワーク40内で発生した取引を記録するブロックチェーンのことをライトコインのブロックチェーンともいう。なお、ネットワーク30及びネットワーク40は、それぞれプルーフオブステーク(PoS)、プルーフオブインポータンス(PoI)、及びプルーフオブコンセンサス(PoC)などの他のコンセンサスアルゴリズムを採用してもよい。
【0016】
ネットワーク30は、マイニングを実行する複数のノード装置301から30nが通信可能に接続されている。以下の説明では、ノード装置301から30nを特に区別しないときは、ノード装置300ともいう。また、ネットワーク40は、マイニングを実行する複数のノード装置401から40nが通信可能に接続されている。ノード装置401から40nを特に区別しないときは、ノード装置400ともいう。
【0017】
プルーフオブワークにおいて、マイニングとは、ブロックに含まれるナンスを変化させながら、ブロックのデータにハッシュ関数を適用したとき、決められた数以上の0が並ぶハッシュ値が得られるナンス(以下、正しいナンスともいう)を探す作業のことである。ブロックのデータには、ブロックに連結される前ブロックのデータのハッシュ値と、ナンスと、取引情報とを含む。
【0018】
ノード装置は、ブロックを生成するとき、ブロックに含むトランザクションを検証する。そして、ノード装置は、正しいトランザクションを承認し、承認したトランザクションをブロックに含ませて、ナンスを探す作業を実行する。ノード装置は、正しいナンスを発見すると、正しいナンスを含むブロックを生成し、ノード装置が保持するブロックチェーンに新たに生成したブロックを連結する。また、ノード装置は、ブロックチェーンのネットワーク上に新たに生成したブロックを送信する。そして、新たに生成したブロックは、ネットワークに接続された他のノード装置が保持するブロックチェーンにも連結される。これにより、トランザクションは、ブロックチェーン上に記録される。以下の説明では、トランザクションを含んだブロックがブロックチェーンに連結されることを、トランザクションがブロックチェーンに記録されるともいう。
ネットワーク200は、ネットワーク30及びネットワーク40に限らず、さらに他のネットワークと接続されてもよい。また、ネットワーク200は、取引装置70及び取引装置80に加えて、さらに他の取引装置と接続されてもよい。
【0019】
図2は、暗号資産の取引情報の一例を示す図である。
図2(a)は、取引情報の構成を説明する図である。
図2(b)は、取引情報を接続する処理を説明する図である。取引情報とは、暗号資産の引き渡しと、受け取りとを実行し、暗号資産の所有権を移転する処理に用いられるトランザクションのことである。
以下の説明では、トランザクションスクリプトとして、P2PKH(Pay to Public Key Hash)を用いるものとして説明する。なお、トランザクションスクリプトとして、P2PK(Pay to Public Key)を用いる場合には、UTXOをロックするScriptPubKeyは、UTXOの受領者である送信先の利用者の公開鍵を含む。また、P2PKにおいて、UTXOをアンロックするScriptSigは、UTXOの授与者であるトランザクションを作成する送信元の利用者の秘密鍵を用いて生成した電子署名を含む。
【0020】
UTXOは、トランザクションのインプットとして使われていない、未使用のトランザクションのアウトプットのことである。UTXOは、暗号資産の所有権であり、次のトランザクションのインプットとして使用される。したがって、暗号資産の送金とは、送金者によりUTXOが使用され、着金者によってのみ使用可能なUTXOが作成されることである。トランザクションのインプットとは、暗号資産の使用を処理する情報である。また、トランザクションのアウトプットとは、暗号資産の使途を処理する情報である。UTXOとは、Unspent Transaction Outputの略である。
【0021】
電子署名は、例えば、トランザクションのScriptSigを除くデータと、前トランザクションのScriptPubKeyとを用いて得られる電子署名用の値を、トランザクションを作成する送信元の利用者の秘密鍵で暗号化した値である。前トランザクションとは、送信元の利用者が送金時に作成するトランザクションのインプットと接続される、送信元の利用者への送金情報が記述されたアウトプットを含むトランザクションのことである。電子署名用の値とは、例えば、トランザクションのScriptSigを除くデータと、前トランザクションのScriptPubKeyとを含むデータにハッシュ関数を適用して得られる値である。
【0022】
図2(a)を参照してトランザクションの構成を説明する。
トランザクションは、暗号資産の所有の移転をまとめた取引情報である。トランザクションは、インプット(input)と、アウトプット(output)とを含む。
インプットは、トランザクションを作成する送信元の利用者が所有する前トランザクションのUTXOをアンロックするための情報である。そして、インプットは、ScriptSigを含む。
ScriptSigは、送信元の利用者が所有するUTXOをアンロックするためのスクリプトである。ScriptSigは、送信元の利用者の電子署名と公開鍵とを含む。ScriptSigに含まれる電子署名及び公開鍵は、送信元の利用者の秘密鍵を用いて生成された値である。
【0023】
アウトプットは、暗号資産の所有権の移転を示す情報である。アウトプットは、送金額と、ScirptPubKeyとを含む。
ScriptPubKeyは、トランザクションのアウトプットをアンロックするための条件を定義したスクリプトである。ScriptPubKeyは、送信先の利用者の秘密鍵を用いて生成された公開鍵のハッシュ値(以下、公開鍵ハッシュともいう。)を含む。
【0024】
図2(b)を参照してトランザクションを接続する処理を説明する。以下の説明では、一例として、接続対象の前トランザクションのアウトプット0が、新規トランザクションに接続される処理を説明する。また、各トランザクションは、ネットワーク30内で処理されるものとする。
前トランザクションのアウトプットは、送金額とScirptPubKey0とを含むアウトプット0(output0)と、送金額とScirptPubKey1とを含むアウトプット1(output1)と、を含む。アウトプット0とアウトプット1とは、それぞれIndex0とIndex1と関連付けられている。Index0とIndex1とは、それぞれアウトプット0とアウトプット1とを識別する識別子である。
【0025】
前トランザクションのアウトプット0に、新規トランザクションのインプット0が接続される。前トランザクションのアウトプット1には、新規トランザクション及び他のトランザクションのインプットが接続されていないので、UTXOの状態である。
新規トランザクションのインプット0は、ScriptSig0と、前トランザクションのトランザクションハッシュと、前トランザクションのアウトプット0の識別子であるIndex0とを含む。
【0026】
ScriptSig0は、前トランザクションのアウトプット0をアンロックする処理に用いられる電子署名と公開鍵とを含む。電子署名は、例えば、新規トランザクションのScriptSig0を除くデータと、前トランザクションのアプトプット0に含まれるScriptPubKey0とを用いて得られる電子署名用の値を、秘密鍵を用いて暗号化することにより生成される。このとき、秘密鍵には、新規トランザクションを作成する利用者の秘密鍵が用いられる。
トランザクションハッシュは、前トランザクション全体のハッシュ値である。そして、トランザクションハッシュは、前トランザクションを識別するためのトランザクションIDとして用いられる。Index0は、前トランザクションにおける接続先のアウトプット0を識別する識別子である。
上記の前トランザクションに含まれるアウトプット0と、新規トランザクションに含まれるインプット0とが接続される処理を説明する。以下の説明では、前トランザクションがビットコインのブロックチェーンに記録された状態であるものとする。
【0027】
取引装置は、新規トランザクションを作成し、ネットワーク30に送信することにより、各ノード装置300が備える未検証のトランザクションを格納するトランザクションプールに新規トランザクションを格納する。ノード装置300は、新規トランザクションを検証の対象として選択すると、新規トランザクションのトランザクションIDとIndex0とを参照し、ブロックチェーン上のトランザクションを検索する。ノード装置300は、トランザクションIDに対応する前トランザクションを発見し、さらに、Index0に対応するアウトプット0を発見する。
【0028】
そして、ノード装置300は、インプット0に含まれるScriptSig0と、アウトプット0に含まれるScriptPubKey0とを連結する。これにより、ノード装置300は、ScriptSig0に含まれる公開鍵のハッシュ値と、ScriptPubKey0に含まれる公開鍵ハッシュとの一致を検証する第1検証を実行する。さらに、ノード装置300は、ScriptSig0に含まれる電子署名と公開鍵とを用いて電子署名を検証する第2検証を実行する。ノード装置300は、第1検証と第2検証とが承認されると、前トランザクションのアウトプット0と新規トランザクションのインプット0とを接続する。
そして、ノード装置300は、承認した新規トランザクションをブロックに含ませて、ナンスを探す作業を実行する。ノード装置300は、正しいナンスを発見すると、正しいナンスが含まれるブロックを生成し、ノード装置300が保持するブロックチェーンに新たに生成したブロックを連結する。また、ノード装置300は、ブロックチェーンのネットワーク上に新たに生成したブロックを送信する。これにより、新たに生成したブロックは、ネットワークに接続された他のノード装置が保持するブロックチェーンにも連結され、新規トランザクションがブロックチェーンに記録される。
【0029】
図3は、アトミックスワップの処理の一例を示す図である。
図4以降で説明する本実施形態の取引方法は、このアトミックスワップの仕組みを応用したものである。
従って、本実施形態の取引方法を説明する前に、
図3を用いてアトミックスワップの処理を説明する。
前提として、暗号資産には、異なる特徴を有する複数の種類の暗号資産がある。このため、利用者は、暗号資産を使用するとき、用途に適した暗号資産を選択して利用する。暗号資産の種類には、例えば、ビットコイン(BTC:登録商標)、イーサリアム(ETH:登録商標)、ライトコイン(LTC)、及びモナコイン(MONA:登録商標)などがある。暗号資産の用途には、例えば、価値の保存、商品の購入、及び契約内容の管理の手数料などがある。
上記のように、複数の種類の暗号資産を用途に応じて使い分けるため、異なる暗号資産を交換する取引が行われている。異なる暗号資産を交換する取引には、利用者間の直接の取引である直接取引と、利用者間に取引所などの第三者を介する取引である仲介取引とがある。
【0030】
暗号資産の直接取引について説明する。
例えば、利用者Aは、自身が所有するビットコインと、利用者Bが所有するライトコインとの交換取引を行うとき、ビットコインを利用者Bに送金する。そして、利用者Bは、ビットコインが利用者Aから届いたことを確認すると、利用者Aにライトコインを送金する。
直接取引において、利用者Bは、利用者Aからビットコインが届いたことを確認したあと、利用者Aにライトコインを送金しないでビットコインを持ち逃げすることが可能である。したがって、利用者Aは、取引相手が信用できることを前提として、ビットコインを取引相手に送金しなければならない。
【0031】
暗号資産の仲介取引について説明する。
例えば、利用者Aは、自身が所有するビットコインを取引所に預ける。また、利用者Bは、自身が所有するライトコインを取引所に預ける。そして、取引所は、利用者Aに利用者Bが預けたライトコインを送金し、利用者Bに利用者Aが預けたビットコインを送金する。
仲介取引において、利用者Aと利用者Bとは取引所に暗号資産を預けているので、取引所の不正及び取引所のハッキングなどにより、暗号資産が盗難される恐れがある。また、仲介取引では、取引所を利用するので、手数料が直接取引と比較して割高になることがある。したがって、利用者Aは、取引所が信用できること及び手数料が割高になることを前提として、ビットコインを取引所に預けなければならない。
【0032】
このような問題を解決するために、信用のない個人間での取引においても暗号資産を持ち逃げされることなく直接取引することができる、アトミックスワップが用いられている。
二者間で異なるブロックチェーンを用いた暗号資産同士の交換を行うとき、単純に利用者Aと利用者Bとの間でお互いの暗号資産を送りあうと、利用者Aから利用者Bへの送金及び利用者Bから利用者Aへの送金が同時に行われることは保証できない。これは、ブロックチェーンによって承認までの期間が異なること、及びお互いの暗号資産を送信するタイミングが異なること、などに起因する。
また、承認前の送金トランザクションは取り下げが可能であるため、言い換えれば、先に承認された取引のみを有効とし、残った取引を取り下げることで、片方が暗号資産を持ち逃げすることができてしまう。
ビットコイン及びそこから派生したブロックチェーンシステムにおいて、Atomic Swapは、UTXOのアンロックの条件を記述したScriptと呼ばれるプログラミング言語を用いる。そして、Atomic Swapは、Scriptの命令セットに、一方向ハッシュ関数であるSHA256を求める命令と、値の比較を行う命令があることを利用している。
【0033】
具体的には、利用者Aと利用者Bの間での暗号資産の交換を以下の手順で行う。
以下の説明では、一例として、取引相手が所有するビットコインと、利用者が所有するライトコインとを交換する処理について説明する。取引装置10が秘密値Rを生成する処理を説明するが、利用者Bの取引装置が秘密値Rを生成してもよい。すなわち、以下で説明する利用者Aの取引装置の実行する処理を利用者Bの取引装置が実行し、利用者Bの取引装置が実行する処理を利用者Aの取引装置が実行してもよい。また、説明の簡単化のため、各トランザクションのアウトプットには、1つのアウトプットが含まれるものとし、アウトプットをIndexに応じて参照する処理の説明を省略する。なお、交換する暗号資産の数量(交換数量)は、アトミックスワップの処理の前に利用者と取引相手との間で為替レートなどに基づいて決定してもよい。また、利用者と取引相手とは、アトミックスワップの処理の前にそれぞれお互いのアドレス及び公開鍵を交換してもよい。利用者Aと利用者Bとは、暗号資産の交換数量の決定、並びにアドレス及び公開鍵の交換を、メール及び記録媒体の提供などの任意の通信手段により行ってもよい。
【0034】
ステップ(1)
利用者Aは乱数によって秘密値Rを定め、秘密値Rのハッシュ値Hを計算する。
利用者Aは、「引数の1つが利用者Bの公開鍵に対応する電子署名であること(すなわち受取人が利用者Bであること)及び、もう1つの引数のSHA256ハッシュ値がハッシュ値Hであること」をアンロック条件としたトランザクションTx1を発行し、承認を待つ。
利用者Bは、承認されたトランザクションTx1がブロックチェーンに公開されるため、ハッシュ値Hを知ることができる。
すなわち、利用者Aの取引装置10は、秘密値Rをランダムに生成する。また、利用者Aの取引装置10は、秘密値Rにハッシュ関数を適用し、ハッシュ値Hを生成する。利用者Aの取引装置10が秘密値Rをハッシュ化するときに用いられるハッシュ関数は、例えば、SHA−2、MD5、及びSHA−1などの一方向ハッシュ関数である。
ハッシュ関数にSHA−2を用いる場合、SHA256を2度適用してハッシュ値Hを計算する。ハッシュ値Hの計算に際してSHA256を2度適用するのは、上記Scriptにそのような命令があるためであり、SHA256の適用は1度であってもよい。
【0035】
さらに、利用者Aの取引装置10は、ビットコインを利用者Bに送金するためのトランザクションTx1を作成する。そして、利用者Aの取引装置は、作成したトランザクションTx1をネットワーク30に送信する。これにより、トランザクションTx1は、ネットワーク30に公開される。
トランザクションTx1のインプットは、利用者Aの電子署名及び利用者Aの公開鍵を含むScriptSigと、アンロックするUTXOを含む前トランザクションのトランザクションIDとを含む。トランザクションTx1のScriptSigによってアンロックするUTXOは、利用者Aが所有するUTXOである。利用者Aの電子署名及び利用者Aの公開鍵は、利用者Aが所有する秘密鍵を用いて生成される。
トランザクションTx1のアウトプットは、ハッシュ値H及び利用者Bの公開鍵ハッシュを含むScriptPubKeyを含む。利用者Bの公開鍵ハッシュは、利用者Bの公開鍵を用いて生成される。利用者Bの公開鍵ハッシュとは、利用者Bの公開鍵にハッシュ関数を適用して得られるハッシュ値のことである。
【0036】
ステップ(2)
利用者Bも同様に「引数の1つが利用者Aの公開鍵に対応する電子署名であること(すなわち受取人が利用者Aであること)及び、もう1つの引数のSHA256ハッシュ値がHであること」をアンロック条件としたトランザクションTx2を発行し、承認を待つ。 すなわち、利用者Bの取引装置20は、ライトコインを利用者Aに送金するためのトランザクションTx2を作成する。そして、利用者Bの取引装置20は、作成したトランザクションTx2をネットワーク40に送信する。これにより、トランザクションTx2は、ネットワーク40に公開される。
【0037】
トランザクションTx2のインプットは、利用者Bの電子署名及び利用者Bの公開鍵を含むScriptSigと、アンロックするUTXOを含む前トランザクションのトランザクションIDとを含む。トランザクションTx2のScriptSigによってアンロックするUTXOは、利用者Bが所有するUTXOである。利用者Bの電子署名及び利用者Bの公開鍵は、利用者Bが所有する秘密鍵を用いて生成される。
トランザクションTx2のアウトプットは、ハッシュ値H及び利用者Aの公開鍵ハッシュを含むScriptPubKeyを含む。利用者Aの公開鍵ハッシュは、利用者Aの公開鍵を用いて生成される。利用者Aの公開鍵ハッシュとは、利用者Aの公開鍵にハッシュ関数を適用して得られるハッシュ値のことである。ハッシュ値Hは、トランザクションTx1がネットワーク30に公開されると、利用者Bの取引装置によりトランザクションTx1から取得され、トランザクションTx2のアウトプットに記述される。
【0038】
ステップ(3)
利用者Aは、利用者Bが発行したトランザクションTx2が承認され、取り下げや改ざんができなくなったことを確認する。
利用者A自身の秘密鍵による電子署名を作成し、秘密値Rと共にアンロックのための引数として、利用者Bが発行したトランザクションTx2のUTXOを利用して自分自身に送金を行う。
上記のトランザクションが承認され改ざんができなくなると共に、秘密値Rはトランザクション内のデータとしてブロックチェーンに公開されるため、利用者Bは秘密値Rを知ることができる。
すなわち、利用者Aの取引装置10は、ライトコインを利用者Bの取引装置から受け取るためのトランザクションTx3を作成する。そして、利用者Aの取引装置は、作成したトランザクションTx3をネットワーク40に送信する。これにより、トランザクションTx3は、ネットワーク40に公開される。
トランザクションTx3のインプットは、秘密値R、利用者Aの公開鍵、及び利用者Aの電子署名を含むScriptSigと、アンロックするUTXOを含むトランザクションTx2を識別するトランザクションIDとを含む。
トランザクションTx3のアウトプットは、利用者Aの公開鍵ハッシュを含むScriptPubKeyを含む。
【0039】
利用者Bが送金したライトコインの所有を利用者Aに移転する処理について、一例として、トランザクションTx3を用いてトランザクションTx2のUTXOをアンロックし、アンロックしたUTXOを利用者Aのアドレスにロックする処理を説明する。利用者Aのアドレスとは、例えば、利用者Aの公開鍵ハッシュを変換した値である。
ノード装置400は、トランザクションTx3がネットワーク40に送信されると、トランザクションTx3に含まれるトランザクションIDに対応するトランザクションTx2のUTXO(アウトプット)を参照する。また、ノード装置400は、トランザクションTx3のScriptSigに含まれる秘密鍵Rにハッシュ関数を適用して、ハッシュ値を求める。そして、ノード装置400は、求めたハッシュ値と、トランザクションTx2のScriptPubKeyに含まれるハッシュ値Hとが一致するか否かの第1検証を実行する。ノード装置400が秘密値Rのハッシュ値を求めるときに用いるハッシュ関数は、利用者Aの取引装置が秘密値Rをハッシュ化するときに用いるハッシュ関数と同じハッシュ関数である。
【0040】
また、ノード装置400は、トランザクションTx3のScriptSigに含まれる利用者Aの公開鍵にハッシュ関数を適用して得られるハッシュ値を求める。そして、ノード装置400は、求めたハッシュ値と、トランザクションTx2のScriptPubKeyに含まれる利用者Aの公開鍵ハッシュとが一致するか否かの第2検証を実行する。さらに、ノード装置400は、トランザクションTx3のScriptSigに含まれる利用者Aの電子署名と利用者Aの公開鍵とを用いて電子署名の検証をする第3検証を実行する。
ノード装置400は、上記の第1検証、第2検証及び第3検証が成功すると、トランザクションTx2のUTXOを利用者Aのアドレスにロックする。すなわち、ノード装置400は、利用者Aがライトコインを受け取ったことを示すアウトプットを作成し、作成したアウトプットをトランザクションTx3に含まれる、利用者Aが所有するUTXOとしてロックする。これにより、ライトコインの所有は、利用者Bから利用者Aに移転する。
【0041】
トランザクションTx1のScriptPubKeyには、所定の時間経過後にトランザクションTx1のアウトプットがUTXOのままであった場合、利用者Aの公開鍵を用いて、利用者Aにビットコインを戻す処理を実行するスクリプトを含んでもよい。これにより、利用者Aの取引装置は、取引が成立しないとき、所定の時間経過後に利用者Aのアドレスにビットコインを戻すことができる。以下の説明では、暗号資産が戻される処理を実行するスクリプトをタイムロックともいう。
【0042】
ステップ(4)
利用者B自身の秘密鍵による電子署名と秘密値Rによって、トランザクションTx1のUTXOをアンロックし、利用者B自身に送金する
すなわち、利用者Bの取引装置は、利用者Aによってネットワーク40に公開されたトランザクションTx3に含まれる秘密値Rを取得し、ビットコインを利用者Aの取引装置から受け取るためのトランザクションTx4を作成する。そして、利用者Bの取引装置は、作成したトランザクションTx4をネットワーク30に送信する。これにより、トランザクションTx4は、ネットワーク30に公開される。
トランザクションTx4のインプットは、秘密値R、利用者Bの公開鍵、及び利用者Bの電子署名を含むScriptSigと、アンロックするUTXOを含むトランザクションTx1を識別するトランザクションIDとを含む。
トランザクションTx4のアウトプットは、利用者Bの公開鍵ハッシュを含むScriptPubKeyを含む。
【0043】
利用者Aが送金したビットコインの所有を利用者Bに移転する処理について、一例として、トランザクションTx4を用いてトランザクションTx1のUTXOをアンロックし、アンロックしたUTXOを利用者Bのアドレスにロックする処理を説明する。利用者Bのアドレスとは、例えば、利用者Bの公開鍵ハッシュを変換した値である。
ノード装置300は、トランザクションTx4がネットワーク30に送信されると、トランザクションTx4に含まれるトランザクションIDに対応するトランザクションTx1のUTXO(アウトプット)を参照する。また、ノード装置300は、トランザクションTx4のScriptSigに含まれる秘密鍵Rにハッシュ関数を適用して、ハッシュ値を求める。そして、ノード装置300は、求めたハッシュ値と、トランザクションTx1のScriptPubKeyに含まれるハッシュ値Hとが一致するか否かの第4検証を実行する。ノード装置300が秘密値Rのハッシュ値を求めるときに用いるハッシュ関数は、利用者Aの取引装置が秘密値Rをハッシュ化するときに用いるハッシュ関数と同じハッシュ関数である。
【0044】
また、ノード装置300は、トランザクションTx4のScriptSigに含まれる利用者Bの公開鍵にハッシュ関数を適用して得られるハッシュ値を求める。そして、ノード装置300は、求めたハッシュ値と、トランザクションTx1のScriptPubKeyに含まれる利用者Bの公開鍵ハッシュとが一致するか否かの第5検証を実行する。さらに、ノード装置300は、トランザクションTx4のScriptSigに含まれる利用者Bの電子署名と利用者Bの公開鍵とを用いて電子署名の検証をする第6検証を実行する。
【0045】
ノード装置300は、上記の第4検証、第5検証及び第6検証が成功すると、トランザクションTx1のUTXOを利用者Bのアドレスにロックする。すなわち、ノード装置300は、利用者Bがビットコインを受け取ったことを示すアウトプットを作成し、作成したアウトプットをトランザクションTx4に含まれる、利用者Bが所有するUTXOとしてロックする。これにより、ビットコインの所有は、利用者Aから利用者Bに移転する。
【0046】
トランザクションTx2のScriptPubKeyには、所定の時間経過後にトランザクションTx2のアウトプットがUTXOのままであった場合、利用者Bの公開鍵を用いて、利用者Bにライトコインを戻す処理を実行するスクリプトを含んでもよい。これにより、利用者Bの取引装置は、取引が成立しないとき、所定の時間経過後に利用者Bのアドレスにライトコインを戻すことができる。
【0047】
利用者A、利用者Bの取引装置が夫々作成するトランザクションTx1、Tx2のUTXOのアンロック条件を示すscriptPubKeyは、以下のようなプログラムとなる。
1.OP_HASH256
2.OP_PUSH H
3.OP_EQUALVERIFY
4.OP_PUSH 公開鍵
5.OP_CHECKSIG
1.〜3.の命令群では、引数のハッシュ値を計算してハッシュ値Hと比較している。4.、5.は、最もシンプルな送金手法であるP2PK(pay-to-pubkey)形式であるが、
P2PKH(pay-to-pubkey-hash)形式のものでも良い。
【0048】
このUTXOをアンロックするための対応するscriptSigは以下の通りとなる。
1.OP_PUSH 電子署名
2.OP_PUSH R
このscriptSigがなければトランザクションTx2のUTXOをアンロックできないことからも、利用者Aが受け取った時点で秘密値Rが公開される。
また、何らかの事情で利用者Aが秘密値Rを公開しなかった場合、利用者Aも利用者Bも双方の暗号資産を取り出すことができなくなり、暗号資産の所有権が宙に浮いてしまう。そのため、実用上は「もしくは、一定期間が過ぎた場合、送金主の公開鍵に対応する電子署名によって取り戻すことができる」という条件を追加する。具体的には、scriptPubKeyを以下のようにする。
1.OP_IF
2.OP_HASH256
3.OP_PUSH H
4.OP_EQUALVERIFY
5.OP_PUSH 宛先公開鍵
6.OP_CHECKSIG
7.OP_ELSE
8.OP_CHECKLOCKTIMEVERIFY
9.OP_PUSH 送金主公開鍵
10.OP_CHECKSIG
11.OP_ENDIF
IF命令で分岐して、2種類のscriptSigを受け付けるようにしている。
【0049】
通常通り取引が進んだ場合は、以下のscriptSigでアンロックが可能である。
1.OP_PUSH 宛先秘密鍵の電子署名
2.OP_PUSH R
3.OP_PUSH 1
このスクリプトは、redeem scriptと呼ばれる。
最後の1をOP_IFが読み取り、前半のプログラムが実行される。
何らかの理由で秘密値Rが公開されなかった場合は、以下のscriptSigで暗号資産を取り戻せる
1.OP_PUSH 送信主秘密鍵の電子署名
2.OP_PUSH 0
このスクリプトは、refund scriptと呼ばれる。
最後の0をOP_IFが読み取り、OP_ELSE以降のプログラムが実行され、取り戻しが行われる。ただし、OP_CHECKLOCKTIMEVERIFYが含まれているため、一定期間経過後である必要がある。
【0050】
なお、この例ではOP_HASH256を利用しているためハッシュ値HはSHA256(SHA256(R))とするが、OP_SHA256を利用する場合ハッシュ値HはSHA256(R)とする。
他にもいくつかハッシュ関数を計算する命令が存在するため、ハッシュ値Hの計算方法はそれに合わせたものにする必要がある。
以上の手順に従えば、利用者Aが暗号資産を受け取るためには秘密値Rを公開せざるを得ず、秘密値Rが公開されると同時に利用者Bも暗号資産を受け取ることができることとなる。
利用者Aが秘密値Rを公開しない場合、利用者Aは利用者Bの暗号資産を受け取ることができないので、秘密値Rの公開が強制されている、と見ることもできる。
【0051】
以下に、上記Atomic Swapを応用したコンテンツデータと暗号資産の交換取引について詳細に説明する。
上記に説明した異なる暗号資産同士の交換取引の場合とは異なり、
図1に示したもののうち購入者が対価の支払いに用いる暗号資産のネットワークのみ(ここでは、ネットワーク30)が用いられる。
以下の説明において、取引装置70は販売者の取引装置であり、取引装置80は購入者の取引装置である。
【0052】
図4は、1対1でのコンテンツデータと暗号資産の交換手法の一例を示す図である。
以下で説明する取引装置70が実行する処理を取引装置80が実行し、取引装置80が実行する処理を取引装置70が実行してもよい。また、説明の簡単化のため、ブロックチェーンを介した送金処理における各トランザクションのアウトプットには、1つのアウトプットが含まれるものとし、アウトプットをIndexに応じて参照する処理の説明を省略する。また、販売者と購入者とは、交換取引の処理の前にそれぞれお互いのアドレス及び公開鍵を交換してもよい。
例えばクラウドソーシングの場合のように、コンテンツデータを発注した購入者とコンテンツデータを受注した販売者とが1対1である場合には、以下の手順で持ち逃げを防ぎ、コンテンツデータと暗号資産を安全に交換することができる。
【0053】
ステップ(11)において、コンテンツデータを販売する販売者の取引装置70は暗号的に安全な乱数により、秘密コンテンツ鍵(秘密情報)kを整数で選択する。取引装置70は秘密コンテンツ鍵kをランダムに生成する。
次に取引装置70は、選択した秘密コンテンツ鍵kにハッシュ関数を適用し、公開コンテンツ鍵uを生成する。
秘密コンテンツ鍵kのハッシュ化に用いられるハッシュ関数は、例えば、SHA−2、MD5、及びSHA−1などの一方向ハッシュ関数である。
ハッシュ関数にSHA−2を用いる場合、取引装置70は、公開コンテンツ鍵u=SHA256(SHA256(k))を求める。
SHA256を2度掛けているが、ビットコインで採用されているScriptと呼ばれるプログラムの命令でSHA256を2回計算する命令があるためである。これは下記ステップ(14)で取引装置80が発行する送金トランザクションのアンロック条件次第で変化しうる。SHA256の計算は例えば1回であってもよい。
【0054】
ステップ(12)において、販売者の取引装置70は、販売するコンテンツデータに対して暗号化を行うことにより、暗号化コンテンツデータを生成する。
この際、取引装置70は、コンテンツデータを周波数分離し、低周波成分は平文のままとし、高周波成分を秘密コンテンツ鍵kで暗号化する。
動画像や音声の圧縮の際、周波数変換を用いるものが多い。JPEG、MPEG、MP3などは全て周波数変換を用いて圧縮を行っている。
周波数変換を行った後、低周波成分と高周波成分に分離し、高周波成分のみを圧縮した後に暗号化し、低周波成分は圧縮した後に平文のままとする。
これによれば、復号キーを持たない状態であれば、低周波成分のみ伸張が可能となり、動画像であれば低解像度な映像が、音声であれば低品質な伸張結果を得ることができる。納品されたコンテンツデータが正しく発注したコンテンツデータであることを確認しつつも、実用にはできない伸張データを得ることができる。
【0055】
暗号化の対象とする周波数の境界線、つまり確認用の伸張データの品質は、圧縮・暗号化時に自由に選択することができる。
暗号化後に圧縮を行おうとすると、エントロピーが高い情報となるため圧縮がほとんどできない。
通常、動画像や音声の圧縮に用いられる周波数変換、DCTや重複直交変換などは、三角関数を用いた浮動小数での演算となるため、一般的には非可逆圧縮となるが、例えばアダマール変換を用いれば可逆圧縮でも応用可能である。
周波数変換を行わない圧縮方式、例えばJPEG−LSや、DPCMなどの場合は、ほとんど隣接サンプルとの差分を圧縮する方法がとられている。その場合でも、例えばサンプルが0123456789…と並んでいる場合、123、567、9は高周波成分として直前サンプルとの差分を取り、048は低周波成分として、0と4の差分、4と8の差分を取ることで、同様の効果を得ることができる。
【0056】
取引装置70は、暗号化コンテンツデータを、ステップ(11)で算出した公開コンテンツ鍵uと共に購入者に提供する。
暗号化コンテンツデータと公開コンテンツ鍵uは、任意のクラウドストレージやダウンロードサービスなどにアップロード、登録して購入者にダウンロードさせてもよいし、E−mailに添付して送付されてもよい。
またCD−RやUSBメモリなどの記憶媒体に格納されて手渡しで授受されてもよい。 上記のうち何れかの方法で、暗号化コンテンツデータを取得した取引装置80は、ステップ(13)において、暗号コンテンツデータのうち低周波成分を伸張する。
低周波成分は、暗号化されていないためそのまま伸張することが出来るが、画質や音質が低く再配布には向かないデータである。
この時点で、購入者は低周波成分を参照して成果物の内容を確認することが出来るが、対価の支払い前に高画質、高音質の高周波成分を取得して再配布することは出来ない。
この時点で購入者は、低品質のコンテンツデータしか手に入れておらず、持ち逃げのリスクはないと言える。
なお、下記に説明する理由によって、暗号化コンテンツデータにおいて低周波成分が公開コンテンツ鍵uで暗号化されていてもよい。
【0057】
低周波成分がコンテンツデータの低周波成分と確認されると、ステップ(14)において、購入者の取引装置80は、コンテンツデータの対価となる暗号資産を販売者に送金するためのトランザクションTx11(第2取引情報)を作成する。
取引装置80は、作成したトランザクションTx11をネットワーク30に送信する。これにより、トランザクションTx11は、ネットワーク30に公開される。
トランザクションTx11のインプットは、購入者の電子署名及び購入者のウォレットの公開鍵(購入者のウォレット公開鍵)を含むScriptSigと、アンロックするUTXOを含む前トランザクションのトランザクションIDと、を含む。
ウォレットとは、例えば、仮想通貨を保管するために用いる秘密鍵が格納された暗号資産ウォレットである。そして、購入者のウォレット公開鍵は、購入者のウォレットの公開鍵を用いて生成される。
トランザクションTx11のScriptSigによってアンロックするUTXOは、購入者が所有するUTXOである。購入者の電子署名及び購入者の公開鍵は、購入者が所有する秘密鍵を用いて生成される。
【0058】
トランザクションTx11のアウトプットは、ステップ(12)で取得した公開コンテンツ鍵u及び販売者のウォレットの公開鍵ハッシュを有するScriptPubKeyを含む。
販売者のウォレットの公開鍵ハッシュは、販売者のウォレットの公開鍵(販売者のウォレット公開鍵)を用いて生成される。販売者のウォレットの公開鍵ハッシュとは、販売者のウォレット公開鍵にハッシュ関数を適用して得られるハッシュ値のことである。また、販売者のウォレット公開鍵は、販売者のウォレットの公開鍵を用いて生成される。
トランザクションTx11は、コンテンツデータの対価となる暗号資産の送金先を販売者とし、追加のアンロック条件として公開コンテンツ鍵uを記述し、秘密コンテンツ鍵kの開示を要求する。
【0059】
例えばトランザクションTx11は、秘密コンテンツ鍵kを導出可能な引数情報として秘密コンテンツ鍵kそのものを公開することを条件に暗号資産の受け取りを可能にする。 またトランザクションTx11は、公開された秘密コンテンツ鍵kのハッシュ値が公開コンテンツ鍵uと一致することの認証が行われることを条件に暗号資産の受け取りを可能にする。
UTXOに記載するscriptPubKey(アンロック条件)は、例えば以下のようなプログラムとなる。
1.OP_HASH256
2.OP_PUSH u
3.OP_EQUALVERIFY
4.OP_PUSH 販売者のウォレット公開鍵
5.OP_CHECKSIG
これはもっとも簡単な例であり、秘密コンテンツ鍵kのSHA256を2回(又は1回)計算してuとの一致を確認後、購入者のウォレットの秘密鍵による電子署名を検証する。
上記プログラムは、送付先をウォレット公開鍵とするP2PKと呼ばれる形式に従っているが、一般的に使われている送付先をウォレット公開鍵のハッシュ値とするP2PKHに基づいてもよい。
また、一定期間内に受け取りがなかった場合(秘密コンテンツ鍵kが開示されない場合)に購入者が取り戻すことができるようなプログラムにするとより安全である。
先頭のOP_HASH256の代わりにOP_SHA256を使用する場合、公開コンテンツ鍵u=SHA256(k)で算出すれば同様の動作をする。どちらを使ってもセキュリティ上の差異も実用上の差異もない。
【0060】
ステップ(15)において、販売者の取引装置70は、暗号資産を購入者の取引装置80から受け取るためのトランザクションTx12(第1取引情報)を作成する。そして、取引装置70は、作成したトランザクションTx12をネットワーク30に送信する。これにより、トランザクションTx12は、ネットワーク30に公開される。
トランザクションTx12のインプットは、秘密コンテンツ鍵k、販売者のウォレットの公開鍵、及び販売者の電子署名を含むScriptSigと、アンロックするUTXOを含むトランザクションTx12を識別するトランザクションIDと、を含む。
トランザクションTx12のアウトプットは、販売者のウォレットの公開鍵ハッシュを有するScriptPubKeyを含む。
販売者の取引装置70は、販売者自らのウォレットの秘密鍵による電子署名と秘密コンテンツ鍵kによって、ステップ(14)で発行されたUTXOをアンロックし、暗号資産を受け取る。
ここで購入者が送金した暗号資産の所有を販売者に移転する処理について、一例として、トランザクションTx12を用いてトランザクションTx11のUTXOをアンロックし、アンロックしたUTXOを販売者のアドレスにロックする処理を説明する。販売者のアドレスとは、例えば、販売者のウォレットの公開鍵ハッシュを変換した値である。
【0061】
ノード装置300は、トランザクションTx12がネットワーク30に送信されると、トランザクションTx12に含まれるトランザクションIDに対応するトランザクションTx11のUTXO(アウトプット)を参照する。また、ノード装置300は、トランザクションTx12のScriptSigに含まれる秘密コンテンツ鍵kにハッシュ関数を適用して、公開コンテンツ鍵uを求める。そして、ノード装置300は、求めた公開コンテンツ鍵uと、トランザクションTx11のScriptPubKeyに含まれる公開コンテンツ鍵uとが一致するか否かの第1検証を実行する。ノード装置300が秘密コンテンツ鍵kのハッシュ値を求めるときに用いるハッシュ関数は、取引装置70が秘密コンテンツ鍵kをハッシュ化するときに用いるハッシュ関数と同じハッシュ関数である。
【0062】
また、ノード装置300は、トランザクションTx12のScriptSigに含まれる販売者のウォレット公開鍵にハッシュ関数を適用して得られるハッシュ値を求める。そして、ノード装置300は、求めたハッシュ値と、トランザクションTx11のScriptPubKeyに含まれる販売者のウォレットの公開鍵ハッシュとが一致するか否かの第2検証を実行する。さらに、ノード装置300は、トランザクションTx12のScriptSigに含まれる販売者の電子署名とウォレット公開鍵とを用いて電子署名の検証をする第3検証を実行する。
【0063】
ノード装置300は、上記の第1検証、第2検証及び第3検証が成功すると、トランザクションTx11のUTXOを販売者のアドレスにロックする。すなわち、ノード装置300は、販売者が暗号資産を受け取ったことを示すアウトプットを作成し、作成したアウトプットをトランザクションTx12に含まれる、販売者が所有するUTXOとしてロックする。これにより、暗号資産の所有は、購入者から販売者に移転する。
【0064】
トランザクションTx11のScriptPubKeyには、所定の時間経過後にトランザクションTx11のアウトプットがUTXOのままであった場合、販売者のウォレット公開鍵を用いて、販売者に暗号資産を戻す処理を実行するスクリプトを含む。これにより、取引装置70は、取引が成立しないとき、所定の時間経過後に販売者のアドレスに暗号資産を戻すことができる。
【0065】
図4の説明に戻り、ステップ(16)において、購入者の取引装置80は、販売者の取引装置70によってネットワーク30に公開されてブロックチェーンに記録・公開されたトランザクションTx12に含まれる秘密コンテンツ鍵kを取得する。購入者の取引装置80は、ステップ(12)でクラウドストレージ等にアップロードされた暗号化コンテンツデータの高周波成分を秘密コンテンツ鍵kで復号し、コンテンツデータ全体を伸張する。
コンテンツデータの購入者は、再配布に向かない品質のデータによってコンテンツデータの内容を事前に確認したうえでコンテンツデータに対する対価となる暗号資産の送金を行う。それに対して販売者が秘密コンテンツ鍵kを開示して暗号資産の受け取りを行うことで、購入者は、コンテンツデータの高品質部分を復号出来る。
購入者、販売者の双方が、夫々暗号資産の送金、秘密コンテンツ鍵kの開示を行わない限りは、暗号資産、秘密コンテンツ鍵kの受け取りを何れも行うことが出来ない。
従って、購入者によるコンテンツデータの持ち逃げや、逆に販売者による暗号資産の持ち逃げが不可能である。購入者と販売者との間でコンテンツデータと対価が適切にやりとりされる適正な取引を実現することが出来る。
【0066】
なお上記の手法では、ステップ(12)で、販売者の取引装置70が、秘密コンテンツ鍵k以外の鍵でコンテンツデータの高周波成分を暗号化する、という攻撃が考えうる。
このような問題に対して、独自ファイル形式として、公開コンテンツ鍵uと暗号化コンテンツデータを1つのファイルにパッケージングすれば問題がない。しかしながら暗号的に安全にするためには低周波成分を公開コンテンツ鍵uで暗号化する方法が考えられる。 ステップ(12)で低周波成分を公開コンテンツ鍵u、高周波成分を秘密コンテンツ鍵kで暗号化すれば、ステップ(13)で購入者が納品されたコンテンツデータを確認する際に受け取った公開コンテンツ鍵uと低周波成分の実際の暗号鍵が異なる場合、伸張に失敗する。
この時点で、ステップ(12)で秘密コンテンツ鍵k以外の鍵でコンテンツデータの高周波成分を暗号されたことがわかるため、取引をやり直すことができる。
正しい手順で取引がなされた場合、ステップ(13)において、取引装置80は、公開コンテンツ鍵uを用いて低周波成分を復号・伸張できる。また、正しい手順で取引がなされた場合、ステップ(16)において、公開コンテンツ鍵u及び秘密コンテンツ鍵kの両方が購入者側にあるため、取引装置80は、暗号化コンテンツデータの全体を復号・伸張できる。
【0067】
図5は、
図4で説明した取引方法の流れを説明するフローチャートである。
以下の説明では、トランザクションスクリプトとして、
図4と同様にP2PKHを用いるものとして説明する。
ステップS101において、販売者の取引装置70は、秘密コンテンツ鍵kを用いてコンテンツデータの高周波成分を暗号化する。
ステップS102において、販売者の取引装置70は、秘密コンテンツ鍵kにハッシュ関数を適用して公開コンテンツ鍵uを生成する。
ステップS103において、販売者の取引装置70は、暗号化された高周波成分と平文のままの低周波成分を含む暗号化コンテンツデータと公開コンテンツ鍵uをクラウドストレージなどに送信する。あるいは、購入者宛に、E−mailで送信する。
ステップS111において、購入者の取引装置80は、クラウドストレージなどから暗号化コンテンツデータと公開コンテンツ鍵uを取得する。
ステップS112において、購入者の取引装置80は、低周波成分を伸張し、内容を確認する。
【0068】
ステップS113において、購入者の取引装置80は、公開コンテンツ鍵uと販売者の公開鍵をアウトプットに含み、暗号資産を販売者に送金するトランザクションTx11を作成し、ネットワーク30に公開する。
ステップS104において、販売者の取引装置70は、公開されたトランザクションTx11に対して、秘密コンテンツ鍵kと販売者の公開鍵をインプットに含む、暗号資産を受け取るトランザクションTx12を作成し、ネットワーク30に公開する。
ステップS114において、購入者の取引装置80は、公開されたトランザクションTx12に記載される秘密コンテンツ鍵kを用いて暗号化コンテンツデータの高周波成分を復号する。
【0069】
上記では、コンテンツデータの購入者及び販売者による1対1でのコンテンツデータと暗号資産の交換手法を説明したが、例えばコンテンツデータのダウンロード販売のように、販売者が1人、購入者が複数である場合も想定しうる。
図6は、1対多でのコンテンツデータと暗号資産の交換手法の一例を示す図である。
なお
図6の方法は、一人の販売者と一人の購入者による1対1でのコンテンツデータと暗号資産の交換にも適用出来る。
図4で説明した1対1の取引手法を、一対多の取引に使用しようとすると、購入者1人ずつに個別の秘密コンテンツ鍵kを用意して個別の暗号化コンテンツデータを用意する必要がある。その場合特に動画のようにファイルサイズが大きい場合には管理が大変である。
この問題は、イーサリアムのスマートコントラクトを使用することで解決可能である。 予めイーサリアム上に、以下の機能を有するスマートコントラクト500をデプロイしておく。
スマートコントラクト自体がアカウントであるため、スマートコントラクト自身が暗号資産を所有でき、スマートコントラクトへの送金・操作時にはその引数がブロックチェーン上に記録される。
【0070】
スマートコントラクト500は、任意の名前を与えられたメソッドと呼ばれるプログラムを1以上備えている。
スマートコントラクト500に対して送信するトランザクションには、スマートコントラクト500に対して実行を命令するメソッドと、その引数が記載される。
例えば、トランザクションは「AAという名前のメソッドを、引数BBで実行せよ」という命令を含む。
スマートコントラクト500は、命令されたメソッドを指定された引数とともに実行することによって例えば下記(1)〜(4)の機能を実現することが出来る。
スマートコントラクト500は、
(1)暗号資産を預かる機能
(2)暗号資産を預かる際に受取人アドレスと、後述する楕円曲線上の点Pを記録する機能
(3)暗号資産を取り出す機能
(4)暗号資産の取り出しには、取り出し時と預かり時の受取人アドレスと一致すること、及びP=hGを満たす引数hが指定されていること、を条件とする機能
を有する。
このような機能を有するスマートコントラクト500をデプロイしておくことで、送金側が知りうる公開コンテンツ鍵u=kGに対応する秘密コンテンツ鍵kをブロックチェーンに公開しないと暗号資産が引き出せないことを保証することが出来る。
また、一定時間を経過したら、送金側が取り返すことができる機能をつけてもよい。
以下の説明において、乱数を生成する場合は常に暗号的に安全な乱数を生成するものとする。
【0071】
ステップ(21)において、販売者の取引装置70は乱数により秘密コンテンツ鍵kを決める。
ステップ(22)において、取引装置70は、コンテンツデータの低周波成分は平文のままとし、高周波成分は秘密コンテンツ鍵kにより暗号化した暗号化コンテンツデータを生成する。
取引装置70は、楕円曲線暗号を用いて秘密コンテンツ鍵kを暗号化した公開コンテンツ鍵u=kGと共に、暗号化コンテンツデータをクラウドストレージ等に公開する。
公開コンテンツ鍵u=kGは、離散対数問題が困難な群上の基点Gを秘密コンテンツ鍵kによりスカラー倍した値である。
【0072】
ここで、楕円曲線暗号について概説する。
[楕円曲線暗号]
の形式で表される方程式(厳密にはその解の集合)を楕円曲線と呼ぶ。ここで、x及びyが変数、a及びbは定数(パラメータ)である。
方程式を実数の範囲で解き、x−y平面上にプロットすると曲線を描くが、コンピュータで真の意味での実数を扱うことは不可能である。そのため、素数pを定めて、a、b、x、yのすべてを0以上p未満の整数とした上で、加算を(n+m) mod p、乗算を(n×m) mod pで定義することで、有限体を構成する。
前記の方程式をその有限体上で解いた解は、x−y平面上0以上p未満の整点(x座標及びy座標がともに整数となる点)の集合としてプロットされる。
楕円曲線の方程式の解は、実数上で解く場合も有限体上で解く場合も、xとyで2次元平面上の座標を表す点となるが、この点2つの演算を次のように定義する。
また、
。
ただし、2つの点が同一の点である場合は分母が0となるため、極限を計算し、
また
とする。
【0073】
また、特別な点として、2次元平面上に存在しない点、無限遠点Oも要素に加える。2つの点のx座標が一致しy座標が正負反転の関係にある場合は、その2つの点同士の演算は無限遠点Oになるものとし、楕円曲線上の点PとOの演算はP、O同士の演算はOとなるものとする。
以上のルールの演算は、一般的に楕円曲線上の点同士の加算と定義されている。そう定義することで、楕円曲線上の点は有限巡回群の性質を持つようになる。つまり、楕円曲線上の点Pと点Qは加算ができ、P+Q=Rという演算ができる。そして、点Pを有限回加算し続ける(P+P+P+…)つまり、m×Pを計算することもでき、群の位数nをかける(n個のPを加算し続ける)とnP=Oが成り立つ。
ここで重要なのは、秘密の整数(0以上n未満)kを決めたとき、kPを求めることは簡単である(Pをk回足すとpのビット長Lに対して2Lに比例する計算量が必要だが、バイナリ法などの手法を用いることで、Lに比例する計算量で済む)が、反対にkPを与えられたときにkを求めることは現実的に不可能であるという点である。
現在知られている手法では2Lとまではいかないまでも、それに匹敵する計算量が必要である。
つまり、k→kPの演算は簡単だがkP→kの演算は難しいという非対称性があり、これをECDLP(楕円曲線離散対数問題)と呼ぶ。
これを活用するのが楕円曲線暗号である。暗号資産の送金で使用するECDSAもこの非対称性を用いたものである。
【0074】
楕円曲線暗号に用いる楕円曲線のパラメータ、a、b、pは適切に設定しなければ非対称性が保てない場合がある。そのため、一般的にはSECGというグループが公表しているSEC.2文書や、米国のNISTが公表している米国標準規格であるFIPS−186文書に定義されているパラメータを使用するのが一般的である。
FIPS−186やSEC.2では、a、b、pのパラメータの他、有限巡回群を構成する起点となる点G(ベースポイントと呼ばれる)と、nG=Oとなるnも公開されている。
ビットコインや、そこから派生した暗号資産の場合、SEC.2で定義されているsecp256k1という曲線を使用している。
【0075】
図6の説明に戻り、暗号化コンテンツデータを取得した取引装置80は、暗号コンテンツデータのうち低周波成分を伸張する。
ステップ(23)において、購入者の取引装置80は、乱数により一時鍵tを決め、安全な通信経路で販売者の取引装置70へ送付する。例えば一時鍵tは、暗号化された通信回線を介して取引装置70に送付されてもよい。
また一時鍵tは、記憶媒体に格納された状態で購入者から販売者に直接的に手渡されてもよい。どのような形態をとる場合でも、一時鍵tは他者に秘匿された状態で購入者の取引装置80から販売者の取引装置70に対して送付される。
低周波成分がコンテンツデータの低周波成分と確認されると、ステップ(24)において、購入者の取引装置80は、スマートコントラクト500に対して、販売者のアドレス(販売者のウォレット公開鍵のハッシュ)に送金を行うためにトランザクションTx21(第2取引情報)を送信する。
トランザクションTx21は、暗号資産を送金するメソッドを、公開コンテンツ鍵u、販売者のウォレットの公開鍵ハッシュ、を引数にして実行させる命令を含む。
このトランザクションTx21に対して、スマートコントラクト500は、上記(1)の機能を実行し、公開コンテンツ鍵uを用いて、販売者を受取人とした暗号資産を預かる。より具体的には、スマートコントラクト500は、販売者のアドレスを送金先とした暗号資産を預かる。
販売者のアドレスは、トランザクションTx21で指定されていた販売者のウォレットの公開鍵ハッシュである。
スマートコントラクト500は、暗号資産を預かる際に上記(2)の機能を実行し、公開コンテンツ鍵uを用いて、楕円曲線上の点Pを記録する。
スマートコントラクト500は、P=tG+uを演算し、演算した点Pを記録する。ここで、tG+u=(t+k)Gが成り立つ。Gは、上記のように有限巡回群(離散対数問題が困難な群)の起点である。
【0076】
ステップ(25)において、販売者の取引装置70は、スマートコントラクト500への入金を確認した後、ステップ(23)で送付された一時鍵tと秘密コンテンツ鍵kの和であるh=(t+k) mod nを引数に指定した、暗号資産を引き出すためのトランザクションTx22(第1取引情報)を作成する。トランザクションTx22は、暗号資産引き出しメソッド実行のトランザクションである。
すなわち、トランザクションTx22は、暗号資産を送金するメソッドを、引数h=(t+k) mod n、販売者のウォレットの公開鍵ハッシュを引数にして実行させる命令を含む。
トランザクションTx22に対して、スマートコントラクト500は、上記(3)の機能を実行し、トランザクションTx21に対応して預かっていた暗号資産を引き出す。
すなわちスマートコントラクト500は、販売者を受取人とし、販売者のアドレスに暗号資産を送金するトランザクション(引き出しメソッドによる暗号資産の引き出しトランザクション)を作成する。
【0077】
スマートコントラクト500は、暗号資産を取り出す際に(4)の機能を実行し、取り出し時の受取人アドレスが預かり時の受取人アドレスと一致することと、P=hGを満たす引数hが指定されていることを必要とする。
上記のように、P=tG+u=(t+k)Gが成り立つので、引数h=(t+k) mod nが指定されることで、P=hGが満たされる。
スマートコントラクト500は、トランザクションTx22とトランザクションTx21で指定されていた暗号資産の受取人アドレスの一致していること、及びP=hGを満たす引数hが指定されていることの検証がとれると、預かっていた暗号資産を販売者のアドレスに送金する。
【0078】
ステップ(26)において、購入者の取引装置80は、スマートコントラクト500からの引き出しに使用されたトランザクションTx22に記録されている引数h=(t+k) mod nを読み込み、ステップ(23)で決めた一時鍵tを用いてk=(h+n−t) mod nと計算することで、秘密コンテンツ鍵kが入手できるため、高周波成分を含み全体を復号・伸張する。
以上説明したような仕組みによれば、コンテンツデータの購入者は、再配布に向かない品質のデータによってコンテンツデータの内容を事前に確認したうえで、コンテンツデータに対する対価となる暗号資産の送金を行う。そして、販売者は、秘密コンテンツ鍵kに基づく引数を開示して暗号資産の受け取りを行う。これにより、購入者は、ブロックチェーン上に公開された秘密コンテンツ鍵kを取得し、コンテンツデータの高品質部分を復号することができる。購入者が暗号資産を送金し、販売者が秘密コンテンツ鍵kに基づく引数の開示を行わない限りは、販売者及び購入者は、それぞれ暗号資産及び秘密コンテンツ鍵kの受け取りを行うことができない。
【0079】
従って、購入者によるコンテンツデータの持ち逃げや、逆に販売者による暗号資産の持ち逃げが不可能である。購入者と販売者との間でコンテンツデータと対価が適切にやりとりされる適正な取引を実現することが出来る。
また、販売者側では単一の秘密コンテンツ鍵kを一つだけ用意し、購入者が用意した一時鍵tをもとに秘密コンテンツ鍵kに基づく引数を生成する。従って、購入者毎に秘密コンテンツ鍵kを用意してコンテンツデータを暗号化することに比べて販売者の負担を著しく低減することが出来る。
【0080】
また上記のように、一時鍵tは、他者に秘匿された状態で、購入者の取引装置80から販売者の取引装置70に対して送付されるものである。
しかしながら、一時鍵tが他者に流出した場合には、他者は、ステップ(26)における購入者と同様に、一時鍵tを用いてk=(a+n−t) mod nを計算して秘密コンテンツ鍵kが入手できる。そして、他者は入手したコンテンツ鍵kを用いてコンテンツの高品質部分を復号することが出来てしまう。
しかしながら、正規に入手された秘密コンテンツ鍵kによって復号されたコンテンツデータであっても、第三者が閲覧可能な状態でクラウドストレージ等にアップロードされる可能性がある。このことを考慮すれば、一時鍵tの流出によるコンテンツデータの流出は大きな問題とはならない。
また、
図4で説明した方法と同様に、低周波成分を公開コンテンツ鍵uで暗号化した方がより好ましい。
また、この説明では楕円曲線とその点を用いたが、離散対数問題が困難な有限巡回群であれば、例えば有限体の乗法群であっても適用できる。楕円曲線を用いるメリットは、点を表現するのに必要なビット長が少なく済むため、トランザクション手数料を安く抑えることが出来る点にある。
また、上記では、引数hを一時鍵tと秘密コンテンツ鍵kの和に基づいて求めていたが、一時鍵tと秘密コンテンツ鍵kの差に基づいて求めてもよい。引数hは、(t−k) mod nであってもよい。
【0081】
図7は、
図6で説明した取引方法の流れを説明するフローチャートである。
ステップS201において、販売者の取引装置70は、秘密コンテンツ鍵kを用いてコンテンツデータの高周波成分を暗号化する。
ステップS202において、販売者の取引装置70は、秘密コンテンツ鍵kにハッシュ関数を適用して公開コンテンツ鍵uを生成する。
ステップS203において、販売者の取引装置70は、暗号化された高周波成分と平文のままの低周波成分からなる暗号化コンテンツデータと公開コンテンツ鍵uをクラウドストレージなどに送信する。あるいは、購入者宛に、E−mailで送信する。
ステップS211において、購入者の取引装置80は、クラウドストレージなどから暗号化コンテンツデータと公開コンテンツ鍵uを取得する。
ステップS212において、購入者の取引装置80は、低周波成分を伸張し、内容を確認する。
ステップS213において、購入者の取引装置80は一時鍵tを決定して、販売者の取引装置70に送信する。
ステップS204において、販売者の取引装置70は一時鍵tを受け付ける。
【0082】
ステップS214において、購入者の取引装置80は、公開コンテンツ鍵uと販売者の公開鍵をアウトプットに含み、暗号資産を販売者に送金する上記のトンランザクションTx21を作成し、スマートコントラクトに送信する。
ステップS205において、販売者の取引装置70は、公開されたトランザクションTx21に対して、秘密コンテンツ鍵kと一時鍵tに基づく引数と販売者の公開鍵をインプットに含む、暗号資産を受け取る上記のトランザクションTx22を作成し、スマートコントラクトに送信する。
ステップS215において、購入者の取引装置80は、公開されたトランザクションTx22に記載される引数から秘密コンテンツ鍵kを導出する。
ステップS216において、購入者の取引装置80は、秘密コンテンツ鍵kを用いて暗号化コンテンツデータの高周波成分を復号する。
【0083】
実施形態の取引装置について説明する。
図8は、取引装置の一実施例を示す機能ブロック図である。
図8は取引装置70及び取引装置80が有する機能を示すブロック図である。
図8(a)を参照して、取引装置70の機能を説明する。なお、取引装置80は、取引装置70の機能の少なくとも1つ以上の機能を有してもよい。
取引装置70は、制御部60と、通信部91と、記憶部92とを含む。
制御部60は、分離部61と、暗号化部62と、生成部63と、受渡部64と、作成部65(第1作成部)と、公開部66(第1公開部)と、を含む。通信部91は、取引装置70をネットワークに接続する。記憶部92は、各種情報を記憶する。
分離部61は、周波数変換したコンテンツデータを高周波成分と低周波成分に分離する。
暗号化部62は、記憶部92に記憶される秘密コンテンツ鍵kを用いて、コンテンツデータの高周波成分を暗号化する。また暗号化部62は、公開コンテンツ鍵uを用いて低周波成分を暗号化してもよい。
【0084】
生成部63は、秘密コンテンツ鍵kにハッシュ関数を適用し、公開コンテンツ鍵uを生成する。例えば、生成部63は、公開コンテンツ鍵uをu=SHA256(SHA256(k))として生成する。また生成部63は、離散対数問題が困難な群上の基点を秘密コンテンツ鍵kによりスカラー倍して公開コンテンツ鍵u=kGを生成する。
受渡部64は、暗号化コンテンツデータと公開コンテンツ鍵uを、クラウドストレージなど外部に送信する。あるいは、これらをE−mailで送信する。
作成部65は、暗号資産を送金するトランザクションTx11がネットワーク30に公開されたあと、暗号資産を受け取るためのトランザクションTx12を作成する。
また作成部65は、スマートコントラクト500に対して暗号資産を送金するトランザクションTx21が公開されたあと、暗号資産を受け取るためのトランザクションTx22を作成する。
公開部66は、作成部65が作成したトランザクションTx12をネットワーク30に公開する。また公開部66は、作成部65が作成したトランザクションTx22をネットワーク30に公開する。
【0085】
図8(b)を参照して、取引装置80の機能を説明する。なお、取引装置70は、取引装置80の機能の少なくとも1つ以上の機能を有してもよい。
取引装置80は、制御部100と、通信部111と、記憶部112と、表示部113とを含む。
制御部100は、取得部101と、伸張部102と、作成部103(第2作成部)と、公開部104と、算出部105、復号部106と、送信部107、とを含む。記憶部112は、各種情報を記憶する。
取得部101は、クラウドストレージなどから暗号化コンテンツデータ、公開コンテンツ鍵uを取得する。また、取得部101は、ネットワーク30に公開された秘密コンテンツ鍵k、あるいは秘密コンテンツ鍵kに基づく引数h=(t+k) mod nを取得する。
伸張部102は、復号された、あるいは暗号化されていなかったコンテンツデータを伸張して表示装置に表示する。コンテンツが音声データであれは、取引装置80が備えるスピーカーから出力する。
作成部103は、暗号資産を送金するためのトランザクションTx11、トランザクションTx21を作成する。また、作成部103は、一時鍵tを作成する。
公開部104は、作成部103が作成したトランザクションTx11、トランザクションTx21をネットワーク30に公開する。
算出部105は、取得部101が取得した引数h=(t+k) mod nに基づいて秘密コンテンツ鍵kを算出する。
復号部106は、取得部101が取得し、あるいは算出部105が算出した秘密コンテンツ鍵kを用いて暗号化された高周波成分を復号する。
送信部107は、作成部103が作成した一時鍵tを送信する。
【0086】
図9は、コンピュータ装置の一実施例を示すブロック図である。
図9を参照して、コンピュータ装置50の構成について説明する。
図9において、コンピュータ装置50は、制御回路51と、記憶装置52と、読書装置53と、記録媒体54、通信インターフェイス55と、入出力インターフェイス56と、入力装置57と、表示装置58とを含む。また、通信インターフェイス55は、ネットワーク600と接続される。そして、各構成要素は、バス59により接続される。取引装置10、取引装置20、取引装置70、及び取引装置80は、コンピュータ装置50に記載の構成要素の一部または全てを適宜選択して構成することができる。
【0087】
制御回路51は、コンピュータ装置50全体の制御をする。制御回路51は、例えば、Central Processing Unit(CPU)などのプロセッサである。制御回路51は、例えば、
図8において、制御部60として機能する。
【0088】
記憶装置52は、各種データを記憶する。そして、記憶装置52は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)などである。記憶装置52は、制御回路51を、制御部60として機能させる取引プログラムを記憶してもよい。記憶装置52は、例えば、
図8において、記憶部92、記憶部112として機能する。
【0089】
取引装置70及び取引装置80は、取引処理をするとき、記憶装置52に記憶された取引プログラムをRAMに読み出す。
RAMに読み出された取引プログラムを制御回路51で実行することにより、取引装置70は、分離処理と、暗号化処理と、生成処理と、受渡処理と、作成処理と、公開処理と、のいずれか1以上を含む取引処理を実行する。
また、取引装置80は、RAMに読み出された取引プログラムを制御回路51で実行することにより、取得処理と、伸張処理と、作成処理と、公開処理と、算出処理と、復号処理と、送信処理と、のいずれか1以上を含む取引処理を実行する。なお、取引プログラムは、制御回路51が通信インターフェイス55を介してアクセス可能であれば、ネットワーク600上のサーバが有する記憶装置に記憶されていても良い。
【0090】
読書装置53は、制御回路51に制御され、着脱可能な記録媒体54のデータのリード/ライトを行なう。
記録媒体54は、各種データを保存する。記録媒体54は、例えば、取引処理プログラムを記憶する。記録媒体54は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu−ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0091】
通信インターフェイス55は、ネットワーク600を介してコンピュータ装置50と他の装置とを通信可能に接続する。通信インターフェイス55は、例えば、
図8において、通信部91として機能する。
入出力インターフェイス56は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス56は、接続された各種入力装置とコンピュータ装置50とを通信可能に接続する。そして、入出力インターフェイス56は、接続された各種入力装置から入力された信号を、バス59を介して制御回路51に出力する。また、入出力インターフェイス56は、制御回路51から出力された信号を、バス59を介して入出力装置に出力する。
【0092】
入力装置57は、例えば、タッチパネル、コード読み取り装置、キーボード及びマウスなどである。入出力インターフェイス56に接続された各種入力装置及び入力装置57は、例えば、利用者及び取引相手から秘密鍵、ウォレットの公開鍵、トランザクションID、及び秘密コンテンツ鍵kなどの入力を受け付けてもよい。
【0093】
表示装置58は、各種情報を表示する。表示装置58は、例えば伸張された画像コンテンツを表示可能としてもよい。表示装置58は、例えば、
図8の表示部113として機能する。
ネットワーク600は、例えば、LAN、無線通信、P2Pネットワーク、またはインターネットなどであり、コンピュータ装置50と他の装置を通信接続する。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。