(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022109670
(43)【公開日】2022-07-28
(54)【発明の名称】決済システム、決済装置、決済方法及び決済プログラム
(51)【国際特許分類】
G06Q 20/06 20120101AFI20220721BHJP
【FI】
G06Q20/06 300
【審査請求】有
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021005100
(22)【出願日】2021-01-15
(11)【特許番号】
(45)【特許公報発行日】2022-04-05
(71)【出願人】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】星月 優佑
【テーマコード(参考)】
5L055
【Fターム(参考)】
5L055AA15
(57)【要約】
【課題】送金履歴の取り消しを防ぐために利用者を待たせることなく、暗号通貨による実用的な決済を可能とする。
【解決手段】購入者装置70と、決済装置80と、を備え、購入者装置70は、秘密情報を決定する決定部と、秘密情報と決済装置80の電子署名を用いてアンロックすることにより取り出し可能な出力情報を含む第1トランザクションを公開する公開部と、を備え、決済装置は、購入者装置から秘密情報を受け取る受取部と、第1トランザクションが分散型台帳に公開されたあとで受取部により秘密情報を受け取ったとき、受け取った秘密情報を用いて第1トランザクションがアンロック可能な場合、第1トランザクションに含まれる識別情報を取得する取得部と、取得部により取得した識別情報が決められた情報であるとき、指定の処理を実行する実行部と、を備える。
【選択図】
図4
【特許請求の範囲】
【請求項1】
第1装置と、第2装置と、を備え、
前記第1装置は、
秘密情報を決定する決定部と、
前記秘密情報を用いることにより暗号資産を取り出し可能とする制約情報を含む第1トランザクションを分散型台帳に公開する第1公開部と、
を備え、
前記第2装置は、
前記秘密情報を受け取る受取部と、
前記第1トランザクションが分散型台帳に公開されたあとで前記受取部により前記秘密情報を受け取ったとき、前記受取部により受け取った前記秘密情報を含む第2トランザクションを分散型台帳に公開することで、暗号資産を受領する第2公開部と、
前記受取部により前記秘密情報を受け取ったことに応じて、所定動作を実行する実行部と、
を備える、
ことを特徴とする決済システム。
【請求項2】
請求項1に記載の決済システムにおいて、
前記第1装置の前記決定部は、複数の秘密情報を決定し、
前記第1装置の前記第1公開部は、前記複数の秘密情報に対応する前記第1トランザクションを公開し、
前記第2装置の前記受取部が前記複数の秘密情報のうち一部又は全部の秘密情報を受け取り、前記第2装置の前記第2公開部が、前記一部の秘密情報を含む前記第2トランザクションを公開することにより、当該一部の秘密情報に係る暗号資産の送金を行う、
ことを特徴とする決済システム。
【請求項3】
請求項2に記載の決済システムにおいて、
前記第1装置の前記決定部は、一の秘密情報に対して一方向性関数を複数回適用することにより、前記複数の秘密情報を決定する、
ことを特徴とする決済システム。
【請求項4】
請求項1乃至3の何れか一項に記載の決済システムにおいて、
前記第2装置は、
利用履歴を記憶する記憶部を備える、
ことを特徴とする決済システム。
【請求項5】
請求項1乃至4の何れか一項に記載の決済システムにおいて、
前記第2装置の前記第2公開部は、
前記第1トランザクションの改ざん成功確率が十分に低くなったとき、前記第2トランザクションを分散型台帳に公開する
ことを特徴とする決済システム。
【請求項6】
秘密情報を用いることにより暗号資産を取り出し可能とする制約情報を含む第1トランザクションを分散型台帳に公開した送金元から前記秘密情報を受け取る受取部と、
前記第1トランザクションが分散型台帳に公開されたあとで前記受取部により前記秘密情報を受け取ったとき、前記受取部により受け取った前記秘密情報を含む第2トランザクションを分散型台帳に公開することで、暗号資産を受領する第2公開部と、
前記受取部により前記秘密情報を受け取ったことに応じて、所定動作を実行する実行部と、を備える、
ことを特徴とする決済装置。
【請求項7】
プロセッサによって実行される決済方法であって、
秘密情報を用いることにより暗号資産を取り出し可能とする制約情報を含む第1トランザクションを分散型台帳に公開した送金元から前記秘密情報を受け取り、
前記第1トランザクションが分散型台帳に公開されたあとで前記受取部により前記秘密情報を受け取ったとき、前記受取部により受け取った前記秘密情報を含む第2トランザクションを分散型台帳に公開することで、暗号資産を受領し、
前記受取部により前記秘密情報を受け取ったことに応じて、所定動作を実行する
ことを特徴とする決済方法。
【請求項8】
プロセッサに実行させる決済プログラムであって、
秘密情報を用いることにより暗号資産を取り出し可能とする制約情報を含む第1トランザクションを分散型台帳に公開した送金元から前記秘密情報を受け取り、
前記第1トランザクションが分散型台帳に公開されたあとで前記受取部により前記秘密情報を受け取ったとき、前記受取部により受け取った前記秘密情報を含む第2トランザクションを分散型台帳に公開することで、暗号資産を受領し、
前記受取部により前記秘密情報を受け取ったことに応じて、所定動作を実行する
ことを特徴とする決済プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、決済システム、決済装置、決済方法及び決済プログラムに関する。
【背景技術】
【0002】
ブロックチェーンなどの分散型台帳を基盤とする暗号資産が、市中の店舗等での決済にも活用され始めている(特許文献1)。
ただし、暗号資産による決済では、店舗に暗号資産を送金するための送金トランザクションが例えばブロックチェーン上で承認されるのを待つ必要があり、これは数分の時間を必要とする。
暗号資産の送金履歴が取り消されることを防ぐために、さらにある程度の数のブロックの承認が進むのを待つ必要がある。送金のトランザクションがなかった歴史を作り、十分なハッシュレートでマイニングを進めることで、一旦承認されてブロックチェーンに取り込まれた送金トランザクションを取り消すことが理論上可能だからである。
送金履歴の取り消しを完全に防ぐことはできないが、ブロックチェーンには、ブロックチェーンに取り込まれた後にマイニングが進んだブロック数(承認数)が増えるほどに、トランザクションの取り消しが成功する確率が急速に低くなる性質がある。そのため、送金履歴の取り消しを完全に防ぐことは難しいものの、十分な承認数を待つことで取り消しが不可能とみなすことが出来る。
しかし、このことにより、店舗で提供される商品やサービスの対価を暗号資産で支払おうとすると、暗号資産を店舗側に確実に送金を行うために十分な数のブロックが承認されるまで購入者は待機していなければならない。
従来の暗号資産による決済は、利用者に主に時間的な不便を強い、必ずしも実用的であるとは言えなかった。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、一側面として、決済完了までに時間を要するという問題を解消し、暗号資産を用いた実用的な決済を実現することを目的とする。
【課題を解決するための手段】
【0005】
本発明は、上記の課題を解決するためになされたものであり、以下の形態により実現することができる。
本明細書で開示する決済システムのひとつに、第1装置と、第2装置とを備える決済システムがある。第1装置は、決定部と、第1公開部とを備える。決定部は、秘密情報を決定する。第1公開部は、秘密情報を用いることにより暗号資産を取り出し可能とする制約情報を含む第1トランザクションを分散型台帳に公開する。第2装置は、受取部と、第2公開部と、実行部とを備える。受取部は、秘密情報を受け取る。第2公開部は、第1トランザクションが分散型台帳に公開されたあとで受取部により秘密情報を受け取ったとき、受取部により受け取った秘密情報を含む第2トランザクションを分散型台帳に公開することで、暗号資産を受領する。実行部は、受取部により秘密情報を受け取ったことに応じて、所定動作を実行する。
【発明の効果】
【0006】
一実施態様によれば、暗号資産を用いた実用的な決済を実現することが出来る。
【図面の簡単な説明】
【0007】
【
図1】本実施形態に係るネットワーク構造の一例を示す図である。
【
図3】アトミックスワップの処理の一例を示す図である。
【
図4】本実施形態の決済処理の流れを説明する図である。
【
図5】
図4で説明した決済処理を説明するフローチャートである。
【
図6】購入者装置が有する機能を示すブロック図である。
【
図7】決済装置が有する機能を示すブロック図である。
【
図8】コンピュータ装置の一実施例を示すブロック図である。
【発明を実施するための形態】
【0008】
以下に、図面を参照して、本発明の実施の形態を詳細に説明する。
本実施形態のシステムは分散型台帳を用いた決済システムである。
分散型台帳とは、電子署名とハッシュポインタとを使用して改ざんを検出可能な構造のデータを、ネットワーク上に分散する複数のノードに保持させるというものである。
分散型台帳は、例えば、ブロックチェーンまたはDAG(Directed acyclic graph)などである。以下の説明では、一例として、分散型台帳がブロックチェーンであるものとして説明する。
なお、DAGでは、ユーザがトランザクションを作成したとき、先に公開されている未承認のトランザクションを承認する。ユーザが作成したトランザクションも、後から公開される未承認のトランザクションに承認される。閾値以上の未承認のトランザクションから直接または間接的に承認されたとき、ユーザが作成したトランザクションは、ネットワークで合意されたものとみなされる、というコンセンサスアルゴリズムを採用している。
【0009】
上記のようにDAGは、以下で説明するブロックチェーンと、コンセンサスアルゴリズムに違いがあるものの、トランザクションの構造はブロックチェーンと同様のものを採用することができる。
したがって、分散型台帳としてブロックチェーンを利用した処理と、分散型台帳としてDAGを利用する処理とは、同様の構成のトランザクションを用いて実行することができる。このため、以下で説明する分散型台帳としてブロックチェーンを利用する処理は、分散型台帳としてDAGを利用して実行することも可能である。
まず、本実施形態の決済システムを実現する要素技術として、ブロックチェーンと暗号資産の送金について概説する。
[ブロックチェーン]
ブロックチェーンとは、複数の取引情報を含むブロックを生成し、生成したブロックを連結することにより、分散型ネットワークにデータを記録するデータベースである。
ブロックには、複数の取引情報に加えて、1つ前に生成されたブロックの内容を示すハッシュ値を含むので、ブロックチェーンは、生成されたブロックが時系列に沿ってつながっていくデータ構造を有する。ビットコインやモナコイン、イーサリアム等に代表される暗号資産(仮想通貨)の基礎技術である。
【0010】
資産の取引をトランザクションというデータ形式で表現し、それをP2Pネットワークで共有する。トランザクション全体をマークルツリーでまとめあげ、マークルツリーのルートノード(マークルルート)と前ブロックのハッシュ値、ナンス(Nonce)と呼ばれる任意の値などをまとめたハッシュ値が一定値以下になるようなナンスを探し当てる作業を、マイニングと呼ぶ。
マイニングに成功するとマイニング報酬が得られる。そのマイニング報酬を目当てにマイニングに投入される計算資源の多さによって、古いデータほど改ざんが難しくなる仕組みを、PoW(Proof of Work)型のブロックチェーンシステムと呼ぶ。
このように、何らかの報酬を与えることで、データベースへの信頼性を担保するための資源を提供させる仕組みのことをブロックチェーンと呼ぶ。
PoW型ブロックチェーン以外にもPoS型、PoI型、PoC型のブロックチェーンも適用が可能だが説明は割愛する。
【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を介して互いに通信可能に接続されている。
図1に示すネットワークには取引装置10と取引装置20が含まれるが、これらは、本実施形態が参考にしているアトミックスワップを説明するために参照される。
取引装置10、取引装置20、購入者装置70及び決済装置80は、例えば、後述するコンピュータ装置である。
【0014】
ネットワーク30及びネットワーク40は、P2Pネットワークなどの分散型ネットワークであり、ブロックチェーン上に取引情報を記録する。
以下の説明では、一例として、ネットワーク30は、例えば、ビットコインのコンセンサスアルゴリズムであるプルーフオブワーク(PoW)を採用しているものとして説明する。また、ネットワーク40は、例えば、ライトコインのコンセンサスアルゴリズムであるプルーフオブワークを採用しているものとして説明する。
【0015】
また、ネットワーク30内で発生した取引を記録するブロックチェーンのことをビットコインのブロックチェーンともいう。さらに、ネットワーク40内で発生した取引を記録するブロックチェーンのことをライトコインのブロックチェーンともいう。なお、ネットワーク30及びネットワーク40は、それぞれプルーフオブステーク(PoS)、プルーフオブインポータンス(PoI)、及びプルーフオブコンセンサス(PoC)などの他のコンセンサスアルゴリズムを採用してもよい。
【0016】
ネットワーク30は、マイニングを実行する複数のノード装置301から30nが通信可能に接続されている。以下の説明では、ノード装置301から30nを特に区別しないときは、ノード装置300ともいう。また、ノード装置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は、ScriptSigと、前トランザクションのトランザクションハッシュと、前トランザクションのアウトプットの識別子であるIndex0とを含む。
【0026】
ScriptSig0は、前トランザクションのアウトプット0をアンロックする処理に用いられる電子署名と公開鍵とを含む。電子署名は、例えば、新規トランザクションのScriptSig0を除くデータと、前トランザクションのアプトプット0に含まれるScriptPubKey0とを用いて得られる電子署名用の値を、秘密鍵を用いて暗号化することにより生成される。このとき、秘密鍵には、新規トランザクションを作成する利用者の秘密鍵が用いられる。
トランザクションハッシュは、前トランザクション全体のハッシュ値である。そして、トランザクションハッシュは、前トランザクションを識別するためのトランザクションIDとして用いられる。Index0は、前トランザクションにおける接続先のアウトプット0を識別する識別子である。
上記の前トランザクションに含まれるアウトプット0と、新規トランザクションに含まれるインプット0とが接続される処理を説明する。以下の説明では、前トランザクションがビットコインのブロックチェーンに記録された状態であるものとする。
【0027】
取引装置は、新規トランザクションを作成し、ネットワーク30に送信することにより、各ノード装置300が備える未検証のトランザクションを格納するメモリプールに新規トランザクションを格納する。特にビットコインとその派生コインでは、ノード装置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は、ブロックチェーンのネットワーク上に新たに生成したブロックを送信する。このブロックを受け取ったネットワーク内の他のノード装置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と呼ばれるプログラミング言語を用いる。そして、アトミックスワップは、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の取引装置は、秘密値Rにハッシュ関数を適用し、ハッシュ値Hを生成する。利用者Aの取引装置が秘密値Rをハッシュ化するときに用いられるハッシュ関数は、例えば、SHA-2、MD5、及びSHA-1などの一方向ハッシュ関数である。特にビットコイン系の暗号資産では、ハッシュ値Hの生成にRIPEMD-160というハッシュ関数を使用することも出来る。
ハッシュ関数に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の取引装置は、作成したトランザクション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を利用して自分自身に送金を行う。すなわち、利用者Aの取引装置10は、ライトコインを利用者Bの取引装置から受け取るためのトランザクションTx3を作成する。そして、利用者Aの取引装置は、作成したトランザクションTx3をネットワーク40に送信する。これにより、トランザクションTx3は、ネットワーク40に公開される。
トランザクションTx3が承認され改ざんができなくなると共に、秘密値RはトランザクションTx3内のデータとしてブロックチェーンに公開されるため、利用者Bは秘密値Rを知ることができる。なお実際には、上記トランザクションTx3がネットワーク40に公開され、各ノード装置400のメモリプールに入った時点で、トランザクションTx3の承認前であっても利用者Bは秘密値Rを知ることができる。
トランザクション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のアドレスにビットコインを戻すことができる。以下の説明では、暗号資産が戻される処理を実行するプログラムをrefund scriptともいう。一方、取引が成立するときに、暗号資産が移転される処理を実行するプログラムをredeem scriptともいう。
【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)形式のものでも良い。なお、HASH256は使用するハッシュ関数によって変化する。ScriptPubKeyには、EQUALとVERIFYの2命令に分かれるパターンもある。
【0048】
このUTXOをアンロックするための、対応するScriptSigは以下の通りとなる。
1.OP_PUSH 電子署名
2.OP_PUSH R
このScriptSigがなければトランザクションTx2のUTXOをアンロックできないことからも、利用者Aが受け取った時点で秘密値Rが公開される。
また、何らかの事情で利用者Aが秘密値Rを公開しなかった場合、利用者Aも利用者Bも双方の暗号資産を取り出すことができなくなり、暗号資産の所有権が宙に浮いてしまう。そのため、実用上は「もしくは、一定期間が過ぎた場合、送金主の公開鍵に対応する電子署名によって取り戻すことができる」という条件を追加する。
すなわち、下記の送金トランザクションのScriptPubKeyは上記と同様にハッシュ値Hを記載している。そして、暗号資産の受領者(宛先)は、下記のようにハッシュ値Hに対応する秘密値Rを一定期間内に公開することで、送金トラザンクションのUTXOをアンロックできるよう。一方、秘密値を一定期間内に公開しない場合には、受領者(宛先)はUTXOをアンロックできず送金主が暗号資産を取り戻すことができる。このような仕組みは、HTLC(Hashed Time-Locked Contracts)と呼ばれている。
具体的には、ScriptPubKeyを例えば以下のようにする。なお下記とは異なるScriptPubKeyの記載がBIP-199で規格化されている。
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】
アトミックスワップは、本来は異なるブロックチェーンの間でトラストレス(信用する第三者を置かない)にて暗号資産を交換する技術であるが、一旦仮の送金を確定してから秘密情報の受け渡しによって送金を確定する点にその本質があると言える。
アトミックスワップの一方向だけを見ると、一旦、受領者の電子署名と、送金者(購入者)から知らされる秘密値Rの2つがアンロックの条件となるトランザクションを作成する。
取引成立時に知らされる秘密値Rによって、受領者は自分の電子署名のみでアンロック可能なトランザクションへ接続することで、アトミックスワップによる送金が完了する。
【0052】
本実施形態では、この仕組みを応用して下記に説明するクレジットカード支払いに類似した決済システムを実現する。そして、暗号資産の送金による決済に関する決済完了までの利用者(購入者)の待ち時間を解消し、暗号資産を用いた決済をより実用的なものとする。
クレジットカードの支払いは、決済処理(以下、単にオーソリと記載する)と売り上げ処理の2段階に分かれている。オーソリ処理では、クレジットカードの与信枠を確保する。売り上げ処理では、確保された与信枠から実際の支払いが行われる。
このようなクレジットカードの支払いのスキームと、アトミックスワップは、本質的に近い機能を持っていると考えることが出来る。
下記に説明するように、本実施形態のシステムでは、購入者による事前支払いと決済装置80による決済の2段階でトランザクションを発行する。
購入者は、商品の提供側(決済側)の電子署名と秘密値をアンロック条件とする事前支払い用の第1トランザクションTxAを公開して事前支払い(送金)を行う。これが暗号資産の仮押さえ、すなわちオーソリに対応する。
それから一定時間が経過後、すなわち第1トランザクションTxAの書き換えが実質的に不可能となったタイミング以降に、購入者は商品の提供側(決済側)に秘密値Rを提示する。決済側は、秘密値Rを公開して第1トランザクションTxAをアンロックする、決済用の第2トランザクションTxBを公開して決済を完了する。
上記のように、購入者が秘密値Rを決済側に提示した時点では第1トランザクションTxAを取り消すことは出来ない。したがって、第2トランザクションTxBに関しては、ブロックチェーンにおいて承認数が増えるのを待つ必要はなく、即時決済を行って商品やサービスを提供することが出来る。仮に第2トランザクションTxBが取り消されたとしても、決済側は再び第2トランザクションTxBを公開して暗号資産を受け取ることができるからである。
【0053】
以上のように本実施形態では、クレジットカードのオーソリに対応する処理をブロックチェーンで行うことにより、暗号資産を仮押さえする。送金の意思をブロックチェーンにより担保することにより、提供側は安心して商品やサービスを提供できる。
その後、秘密情報(秘密値R)を購入者から決済側に受け渡すことによって送金を確定するので、送金の承認にかかる時間の起点は仮押さえの時点までさかのぼる。
よって、例えばサービスの提供と支払いまでの間にタイムラグがある喫茶店等での決済のように、仮押さえからの時間を十分とれる用途であれば、承認待ちの時間を見かけ上ゼロにすることができる。
購入者が商品やサービスの提供を受けている間にオーソリに関する第1トランザクションTxAの承認が終了しており、秘密値Rの提示による決済の開始から完了まで無為に待機する必要がなく、利便性を非常に高めることが出来る。
【0054】
以下に、アトミックスワップを応用した本実施形態の決済システムを説明する。
アトミックスワップにおいて、二重使用をされない限りは秘密値Rを再利用することができない。従って、本実施形態の決済システムは、ブロックチェーン上で異なる暗号資産を交換するアトミックスワップを応用し、あるいはこれらに準拠して、秘密値Rを、事前支払いまたは仮押さえの事実を証明、識別するID情報として用いる。
ブロックチェーンはP2Pシステムで構築されているため、ID情報を管理するための管理用データベースサーバが不要である。本実施形態の決済システムは、ID情報を管理するためのデータベースサーバの立ち上げ、保守運用管理のコストがかからないという利点がある。
なお、暗号資産の交換取引の場合とは異なり、
図1に示すネットワークのうち、決済装置80への送金に用いる暗号資産のネットワークのみ(ここでは、ネットワーク30)が用いられる。
【0055】
図1に示すシステムにおいて、購入者装置70は、商品やサービスを購入する利用者としての購入者が利用する携帯端末等の装置である。
決済装置80は、商品やサービスを購入する店舗等に設置される装置である。決済装置80は、店舗の従業員が操作するレジスターであってもよいし、店舗に設置される自動販売機のようなものであってもよい。
購入者あるいは購入者装置70は秘密値Rを決定し、アンロックにこの秘密値Rと決済装置80の電子署名を必要とする(受領者が決済装置80に限定される)第1トランザクションTxAを公開する。第1トランザクションTxAは、上記したアトミックスワップに準じたトランザクションである。
また、第1トランザクションTxAは、商品やサービスの対価に相当する額の暗号資産を決済装置80に送金するためのトランザクションである。ScriptPubKey(アウトプット)に送金額を記載し、購入者装置70の電子署名を含んでいる。
【0056】
購入者装置70の電子署名は、第1トランザクションTxAのインプット(ScriptSig)に記載してもいいし、OP_RETURNに付加情報として記載してもよい。
決済装置80は、秘密値Rを提示され、第1トランザクションTxAが、購入者装置70の電子署名を含むことを確認すると、商品やサービス等を購入者に提供する。
そして、決済装置80は、秘密値Rを含む第1トランザクションTxAに対応する第2トランザクションTxBを公開する。
【0057】
以下、本実施形態の決済システムを詳細に説明する。
本実施形態では、アトミックスワップの技術を応用してオーソリと決済とを分離する。
説明の簡単化のため、ブロックチェーンを介した送金処理における各トランザクションのアウトプットには、1つのアウトプットが含まれるものとし、アウトプットをIndexに応じて参照する処理の説明を省略する。
図4は、本実施形態の第1実施例の決済処理の流れを説明する図である。
以下の説明では、トランザクションスクリプトとして、P2PKHを用いるものとして説明する。
ステップ(11)において、購入者自らが秘密値Rを作成し、あるいは購入者の端末装置(購入者装置70)を用いて秘密値Rをランダムに決定する。また購入者装置70は、購入者装置70の秘密鍵Prk_Aから電子署名Sig_Aを作成する。また購入者装置70は、決定した秘密値Rにハッシュ関数を適用してハッシュ値Hを生成する。
【0058】
ステップ(12)において購入者装置70は第1トランザクションTxAを作成する。
第1トランザクションTxAは、決済装置80の電子署名Sig_B、秘密値Rを、対応する第2トランザクションTxBのScriptSigに記載することを条件にアンロック可能なトランザクションである。第1トランザクションTxAの受領者は決済装置80に限定される。
第1トランザクションTxAのScriptPubKeyに、決済装置80の公開鍵、ハッシュ値Hを記載し、ScriptSigに電子署名Sig_Aを記載する。
第1トランザクションTxAのScriptSigに電子署名Sig_Aを記載する。
購入者装置70は、作成した第1トランザクションTxAをブロックチェーン(ネットワーク30)に公開する。
【0059】
ステップ(13)において、購入者は、購入者装置70が第1トランザクションTxAを公開したブロックチェーンの改ざん成功確率が十分に低くなるまで待ってから、秘密値Rを決済装置80に対して提示する。購入者が所持する携帯端末(購入者装置70)の画面にQRコード(登録商標)やバーコードとして表示可能としてもよい。
購入者が、第1トランザクションTxAを公開したブロックチェーンの改ざん成功確率が十分に低くなるまで待機する理由は以下の通りである。すなわち、第1トランザクションTxAが公開されなかった新たなブロックチェーンを作り、十分なハッシュレートでマイニングを進めることで、ブロックチェーンに取り込まれた第1トランザクションTxAをなかったことにして暗号資産を再利用することが理論上可能である。送金のトランザクションがブロックチェーンに取り込まれた後に、マイニングが進んだブロック数(承認数)が増えるほどトランザクションの取り消しに成功する確率が急速に低くなる。従って購入者は、トランザクションの取り消しが実質不可能と考えられる十分な承認数だけ待機してから秘密値Rを決済装置80に対して提示する。
【0060】
決済装置80は、例えば、紙に印字されまたは購入者装置70の表示画面に表示されたQRコード(登録商標)やバーコードをスキャンして、秘密値Rを読み取るカメラ等の読み取り装置を備える。例えば購入者がQRコード(登録商標)やバーコードを読み取り装置にかざすと、決済装置80は、QRコード(登録商標)やバーコードから秘密値Rを読みとることが出来る。
決済装置80は、秘密値を格納したUSBメモリ等を差し込む差し込み口(ポート)を備え、差し込み口に差し込まれたUSBメモリ等から秘密値Rを読み込むことが出来てもよい。
【0061】
ステップ(14)において、決済装置80は、公開されている第1トランザクションTxAを検証する。
秘密値Rにハッシュ値を適用して得たハッシュ値が第1トランザクションTxAに含まれるハッシュ値Hと一致する場合には、第1トランザクションTxAが秘密値Rを用いてアンロック可能なので、決済装置80は、第1トランザクションTxAに記載される電子署名を取得する。
決済装置80は、第1トランザクションTxAに記載の電子署名を検証して、第1トランザクションTxAに購入者装置70の電子署名Sig_Aが付与されていることを確認する。第1トランザクションTxAの暗号資産の送金額が指定の条件を満たすか(商品の値段以上であるか、マイニング手数料以上の値段であるか)を確認してもよい。決済装置80は、提示された秘密値Rが下記のデータベースに記憶されていないかも確認する。
第1トランザクションTxAに含まれる秘密値Rのハッシュ値H、第1トランザクションTxAのトランザクションID、電子署名Sig_Aが下記のデータベースに記憶されていないかを確認してもよい。
ステップ(15)において、電子署名Sig_Aが付与され、送金額が上記の条件を満たし、秘密値R等がデータベースに記憶されていない新規なものである場合に、商品やサービスを購入者に提供する。例えば自動販売機である決済装置80は、図示しない払出機構によって購入者が所望する飲料などの商品を購入者に払い出す。
ステップ(16)において、決済装置80は、秘密値R、秘密値Rのハッシュ値H、第1トランザクションTxAのトランザクションID、電子署名Sig_Aのうち、少なくとも一つを、決済装置80が備えるデータベースに記憶する。
【0062】
同じ秘密値Rや第1トランザクションTxAが二重使用され得る問題があるからである。このような二重使用は、後述する決済装置80が公開した決済の第2トランザクションTxBが取り消されることで行われる。二重使用をしようとする者は、第2トランザクションTxBが取り消されたあと同じ秘密値Rを用いて、決済装置80から商品やサービスを重ねて得ようとする。
それに対し決済装置80は、使用済みの秘密値R、使用済みの電子署名、第1トランザクションTxAのトランザクションID、ハッシュ値Hのリスト(履歴情報)を、ローカルなデータベース等に記憶する。そして決済装置80は、データベースに記憶するものと同じ秘密値Rを提示されたときには、第2トランザクションTxBが取り消されたと判断することが出来る。
【0063】
第2トランザクションTxBが取り消されたと判断したとき、ステップ(16)において、店舗側として商品やサービスの提供を行わないようすることが出来る。
あるいは決済装置80は、データベースに記憶する秘密値R、秘密値Rのハッシュ値H、第1トランザクションTxAのトランザクションID、電子署名Sig_Aによって第2トランザクションTxBを公開しなおす。
決済装置80は、グローバルなパブリックチェーンにおいても、ブロックチェーン全体のコピーを保持するのではなく、ローカルなデータベースに保持する秘密値R、電子署名を確認するだけで、第2トランザクションTxBの取り消しによる秘密値R、電子署名の二重使用に対抗することが出来る。
【0064】
また、決済装置80は、ステップ(16)の後で、第1トランザクションTxAをアンロックするための第2トランザクションTxBを公開してもよい。
決済装置80は、ステップ(17)において、決済装置80の秘密鍵Prk_Bで電子署名Sig_Bを作成する。そして決済装置80は、第2トランザクションTxBを作成する。
第2トランザクションTxBのScriptPubKeyに、決済装置80の公開鍵を記載し、第2トランザクションTxBのScriptSigに、電子署名Sig_B、決済装置80の公開鍵、秘密値Rを記載する。
【0065】
そして、決済装置80は、作成した第2トランザクションTxBをブロックチェーン(ネットワーク30)に公開する。
上記では、秘密値Rを決定した購入者は、第1トランザクションTxAを公開したブロックチェーンの改ざん成功確率が十分に低くなるまで待ってから、秘密値Rを決済装置80に対して提示していた。決済装置80は、第1トランザクションTxAの改ざん成功確率が十分に低くなったときに第2トランザクションTxBをブロックチェーンに公開するとも言える。
【0066】
本実施形態の決済システムにおいて、第1トランザクションTxAをアンロックできる秘密値Rを購入者が所持していることが重要である。従って、購入者が決済装置80に秘密値Rを提示したことに応じて、決済装置80は指定の処理(商品の販売)を実行する。
商品の販売あるいはサービスの提供後、第2トランザクションTxBをブロックチェーンに公開すると、決済装置80は、第1トランザクションTxAによる送金を受け取ることが出来る。また履歴情報(秘密値R、ハッシュ値H、秘密鍵、トランザクションID)がブロックチェーンに記録されるため、決済装置80における販売記録を外部から確認することも出来る。
【0067】
第2トランザクションTxBをブロックチェーンに公開したあとで、指定の処理(商品の販売、サービスの提供等)を実行してもよい。すなわち、ステップ(14)とステップ(15)の間に、ステップ(17)を実行してもよい。
上記のように、購入者は、第1トランザクションTxAが承認され、第1トランザクションTxA取り消される確率が十分に低くなった時点以降に秘密値Rを決済装置80に提示するので、決済装置80は、購入者に商品やサービスを提供した後に秘密値R(第2トランザクションTxB)を公開してもよいし、秘密値R(第2トランザクションTxB)を公開してから商品等を提供してもよい。
【0068】
いずれの場合も、本実施形態では、事前支払い(仮押さえ)の第1トランザクションTxAと、決済の第2トランザクションTxBと、の2段階のトランザクションを発行している。
第1トランザクションTxAについては、承認数が十分に増えるまでの時間を待つ必要があるが、第2トランザクションTxBについてはその必要がなく、データベースに記憶した秘密値Rと同じ秘密値Rが提示されていないことを条件に商品やサービスを即時提供することが出来る。
第1トランザクションTxAから数ブロックのマイニングが進んだ時点で、仮押さえを取り消すことはできなくなっているため、販売側は、商品と秘密値Rを安心して交換することが出来る。その後、販売側は、秘密値Rを含む第2トランザクションTxBを公開して自らの所有となるよう送金を実施できる。
【0069】
またアトミックスワップを応用した処理では、秘密値Rに加えて決済装置80の電子署名がないと第1トランザクションTxAを受け取れず二重使用は不可能である、という側面もある。購入者が商品提供前に第2トランザクションTxBの十分な数の承認を待機する必要がなく、利便性を高め得る。
仮に第2トランザクションTxBが取り消されていてデータベースに記憶した秘密値Rと同じ秘密値Rが提示された場合には、決済装置80は、商品やサービスを提供しない。この場合には、決済装置80は、データベースに記憶する秘密値R、秘密値Rのハッシュ値H、第1トランザクションTxAのトランザクションID、電子署名Sig_Aによって第2トランザクションTxBを公開しなおせばよい。
購入者は、商品の提供前に第2トランザクションTxBに対する十分な数の承認を待機する必要がなく、決済の利便性を著しく高めることが出来る。
【0070】
図5は、
図4で説明した決済処理を説明するフローチャートである。
ステップS101において、購入者装置70は、秘密値Rをランダムに決定する。
ステップS102において、購入者装置70は、購入者側の秘密鍵Prk_Aで電子署名Sig_Aを作成する。
ステップS103において、購入者装置70は、電子署名Sig_Aを記載した第1トランザクションTxAを作成し、ステップ104において、購入者装置70は、第1トランザクションTxAをネットワーク30に公開する。
【0071】
ステップS105において、購入者装置70は、決済装置80に秘密値Rを提示する。
ステップS106において、決済装置80は第1トランザクションTxAを検証する。
ステップS107において、決済装置80は、商品又はサービスを購入者に提供する。
ステップS108において、決済装置80は、秘密値R等をデータベースに記憶する。
ステップS109において、決済装置80は、決裁装置80の秘密鍵Prk_Bで電子署名Sig_Bを作成する。
【0072】
ステップS110において、決済装置80は、ステップS109で作成した電子署名Sig_Bと、ステップS105で提示された秘密値Rを用いて第2トランザクションTxBを作成する。
ステップS111において、決済装置80は、第2トランザクションTxBをネットワーク30に公開して第1トランザクションTxAをアンロックし、送金された暗号資産を受け取る。
【0073】
上記の変形例として、事前支払いを複数行っておき、事前支払いの一部を一定時間後に取り戻し、残りの事前支払いを実際の決済に充てる「部分支払い」を行うことが出来る。
上記に説明したように、アトミックスワップでは、一定時間経過後であれば、送信者の電子署名を用いて取り戻すことができるという条件を付加することが一般的である。これを応用し、予め多めに仮押さえ(事前支払い)をしておき、実際の利用額分だけ決済するということができる。
例えば、
図4のステップ(11)において、購入者は、100円分の暗号資産を事前支払いする第1トランザクションTxAを10個作成し、ステップ(12)で全てを公開する。夫々の第1トランザクションTxAに応じて秘密値R、そのハッシュ値Hも同数作成される。
例えば、夫々100円に相当する暗号資産を送金する10個の第1トランザクションTxAに対応して秘密値R1~R10を作成し、夫々のハッシュ値H(R1)~H(R10)を演算する。各第1トランザクションTxAのscriptPubKeyには、ハッシュ値H(R1)~H(R10)を記載する。
実際の支払いでは、ステップ(13)において、例えば10個中8個分の第1トランザクションTxAに対応する秘密値Rだけ(例えば秘密値R3~秘密値R10)を決済側に渡す。
ステップ(17)において、決済装置80が、8個の秘密値Rに対応する8個の第2トランザクションTxBを公開することにより、事前支払い分のうち800円だけが決済される。一方で、残る200円分に相当する第1トランザクションTxAに関しては、一定時間経過後に購入者に戻すことが出来る。
【0074】
上記の「部分支払い」において、複数の秘密値Rを1つのマスターから生成するようにしてもよい。すなわち、マスターとなる秘密値Xを1つ用意し、一方向関数(ハッシュ関数)を何度も掛けた各段階の値を、第1トランザクションTxAの秘密値として使用する。
例えば、所定の秘密値Xに対して10段までハッシュ関数を計算して、R1からR10まで、以下に示す10個の秘密値Rを得る。
R1=X
R2=H’(X)
R3=H’(H’(X))
R4=H’(H’(H’(X)))
R5=H’(H’(H’(X))))
R6=H’(H’(H’(H’(X)))))
R7=H’(H’(H’((H’(H’(X))))))
R8=H’(H’(H’(H’((H’(H’(X)))))))
R9=H’(H’(H’(H’(H’((H’(H’(X))))))))
R10=H’(H’(H’(H’(H’(H’((H’(H’(X)))))))))
上記と同様に、各第1トランザクションTxAのscriptPubKeyには、これらの秘密値R1~R10のハッシュ値H(R1)~H(R10)記載する。
決済の段階で3段目のR3=H’(H(X))を決済装置80に知らせると、決済装置80は、それ以降7つの秘密値R4~R10を計算できる。従って、決済装置80は、秘密値R3からR10を用いて800円に相当する暗号資産を受領する第2トランザクションTxBを作成出来る。
一方ハッシュ関数H’は一方向関数であるので、R3=H’(H’(X))から、R2=H’(X)、R1=Xを計算することは出来ない。決済装置80は、秘密値R1とR2を用いて200円分の暗号資産を受領する第2トランザクションTxBを作成出来ることが出来ない。
購入者は、この分の200円分を所定時間経過後に取り戻すことができる
上記のようにすることにより、「部分支払い」において決済装置80に伝える秘密値を1つで済ませることが出来る。
複数の秘密値を伝える場合に比べて購入者の手間を著しく低減でき、より安全に決済を行うことが出来る。
ただし、マスターの秘密値Xから秘密値R2~R10(H’(X))を生成するときのハッシュ関数と、秘密値R1~R10からScriptPubKeyに記載するハッシュ値Hを生成するためのハッシュ関数と、は異なる関数であってもよい。
【0075】
購入者装置、決済装置について説明する。
図6、
図7は、各装置の一実施例を示す機能ブロック図である。
購入者装置70、決済装置80は夫々、他の装置が有する機能の少なくとも1つ以上の機能を有してもよい。
図6は購入者装置70が有する機能を示すブロック図である。
図6を参照して、購入者装置70の機能を説明する。
購入者装置70は、制御部60と、通信部91と、記憶部92と、表示部93とを含む。
制御部60は、決定部61と、生成部62と、作成部63と、公開部64と、受渡部65とを含む。通信部91は、購入者装置70をネットワークに接続する。記憶部92は、各種情報を記憶する。
【0076】
決定部61は、秘密値をランダムに決定する。
生成部62は、秘密鍵から電子署名を生成し、秘密値Rからハッシュ値Hを生成する。生成部62はまた、秘密値RからQRコード(登録商標)などを生成する。
作成部63は、生成した電子署名、ハッシュ値Hに基づいて第1トランザクションTxAを作成する。
公開部64は、作成部63が作成した第1トランザクションTxAをネットワーク30に公開する。
受渡部65は、生成したQRコード(登録商標)などを表示部93に表示して秘密値Rを決済装置80に受け渡す。
【0077】
図7は、決済装置80が有する機能を示すブロック図である。
図7を参照して、決済装置80の機能を説明する。
決済装置80は、制御部100と、通信部111と、記憶部112とを含む。
制御部100は、受取部101と、取得部102、生成部103と、作成部104と、公開部105と、格納部106と、実行部107とを含む。記憶部112は、各種情報を記憶する。
受取部101は、購入者から提示されたQRコード(登録商標)やバーコード、トークン(USBメモリ)から、秘密値Rを取得する。
取得部102は、受取部101により受け取った秘密値Rを用いて第1トランザクションTxAがアンロック可能な場合、第1トランザクションTxAに含まれる識別情報(電子署名)を取得する。
生成部103は、秘密鍵から電子署名Sig_Bを生成する。
作成部104は、第1トランザクションTxAに対応する第2トランザクションTxBを作成する。
公開部105は、作成部103が作成した第2トランザクションTxBをネットワーク30に公開して第1トランザクションTxAをアンロックし、送金された暗号資産を受け取る。
格納部106は、第1トランザクションTxAに記載されていた管理装置70の電子署名、ハッシュ値H、購入者から提示された秘密値R等を記憶部112に備えられたデータベースに格納する。
実行部107は、秘密値Rの受け取りに応じて、所定の払出機構を制御して商品の払出を行うなどの処理を実行する。
【0078】
図8は、コンピュータ装置の一実施例を示すブロック図である。
図8を参照して、コンピュータ装置50の構成について説明する。
図8において、コンピュータ装置50は、制御回路51と、記憶装置52と、読書装置53と、記録媒体54、通信インターフェイス55と、入出力インターフェイス56と、入力装置57と、表示装置58とを含む。また、通信インターフェイス55は、ネットワーク600と接続される。そして各構成要素は、バス59により接続される。取引装置10、取引装置20、購入者装置70及び決済装置80は、コンピュータ装置50に記載の構成要素の一部または全てを適宜選択して構成することができる。
【0079】
制御回路51は、コンピュータ装置50全体の制御をする。制御回路51は、例えば、Central Processing Unit(CPU)、Field Programmable Gate Array(FPGA)、Application Specific Integrated Circuit(ASIC)及びProgrammable Logic Device(PLD)などのプロセッサである。制御回路51は、例えば、
図6において、制御部60として機能する。また制御回路51は、
図7において、制御部100として機能する。
記憶装置52は、各種データを記憶する。そして、記憶装置52は、例えば、Read Only Memory(ROM)及びRandom Access Memory(RAM)などのメモリや、Hard Disk(HD)などである。記憶装置52は、制御回路51を、制御部60及び制御部100の少なくとも一方として機能させる決済プログラムを記憶してもよい。記憶装置52は、例えば、
図6において、記憶部92として機能する。また、記憶装置52は、
図7において、記憶部112として機能する。
記憶部112は、第1トランザクションTxAに記載されていた管理装置70の電子署名、ハッシュ値H、購入者から提示された秘密値R等を格納するデータベースを有する。
【0080】
購入者装置70及び決済装置80は、決済処理をするとき、記憶装置52に記憶された決済プログラムをRAMに読み出す。
RAMに読み出された決済プログラムを制御回路51で実行することにより、購入者装置70は、決定処理と、生成処理と、作成処理と、公開処理と、受渡処理とのいずれか1以上を含む決済処理を実行する。
また決済装置80は、RAMに読み出された決済プログラムを制御回路51で実行することにより、受取処理と、取得処理と、生成処理と、作成処理と、公開処理と、格納処理と、実行処理とのいずれか1以上を含む決済処理を実行する。
なお決済プログラムは、制御回路51が通信インターフェイス55を介してアクセス可能であれば、ネットワーク600上のサーバが有する記憶装置に記憶されていても良い。
【0081】
読書装置53は、制御回路51に制御され、着脱可能な記録媒体54のデータのリード/ライトを行なう。
記録媒体54は、各種データを保存する。記録媒体54は、例えば、決済プログラムを記憶する。記録媒体54は、例えば、Secure Digital(SD)メモリーカード、Floppy Disk(FD)、Compact Disc(CD)、Digital Versatile Disk(DVD)、Blu-ray(登録商標) Disk(BD)、及びフラッシュメモリなどの不揮発性メモリ(非一時的記録媒体)である。
【0082】
通信インターフェイス55は、ネットワーク600を介してコンピュータ装置50と他の装置とを通信可能に接続する。通信インターフェイス55は、例えば、
図6において、通信部91として機能する。また通信インターフェイス55は、例えば、
図7において、通信部111として機能する。
入出力インターフェイス56は、例えば、各種入力装置と着脱可能に接続するインターフェイスである。入出力インターフェイス56は、接続された各種入力装置とコンピュータ装置50とを通信可能に接続する。そして、入出力インターフェイス56は、接続された各種入力装置から入力された信号を、バス59を介して制御回路51に出力する。また、入出力インターフェイス406は、制御回路51から出力された信号を、バス59を介して入出力装置に出力する。
入力装置57は、例えば、タッチパネル、コード読み取り装置、キーボード及びマウスなどである。特に入出力インターフェイス56に接続された入力装置57としてのコード読み取り装置は、例えば、紙や購入者装置に表示される秘密値RのQRコード(登録商標)やバーコードを介した秘密値Rの入力を受け付けてもよい。
表示装置58は、各種情報を表示する。表示装置58は、例えば、
図6の表示部93として機能し、秘密値RのQRコード(登録商標)やバーコードを表示してもよい。
ネットワーク600は、例えば、LAN、無線通信、P2Pネットワーク、またはインターネットなどであり、コンピュータ装置50と他の装置を通信接続する。
【0083】
上述の実施形態の決済システムは、アトミックスワップの一部を利用しているが、スマートコントラクトを用いて、上述の制御部60と制御部100とで実行される処理を実現してもよい。すなわち、実施形態の決済システムは、スマートコントラクトを用いて、上述の「購入者装置70が秘密情報(秘密値R)の公開により暗号資産を受け取り可能とするトランザクションを用いて暗号資産を送金する。そして、決済装置80は、商品と引き換えに購入者から取得した秘密情報を用いて、暗号資産を受け取る。」という決済処理を実行してもよい。
より具体的には、実施形態の決済システムは、アトミックスワップと同等の機能を持つスマートコントラクトを作成し、その処理の一部を利用して、上記の決済処理を実現してもよい。すなわち、購入者装置70は、秘密情報のハッシュ値Hを含む暗号資産の送金用のトランザクションを、スマートコントラクトのアドレスを指定して分散型台帳に公開する。決済装置80は、秘密情報を含む暗号資産の受取用のトランザクションを、スマートコントラクトのアドレスを指定して分散型台帳に公開する。そして、実施形態の決済システムは、スマートコントラクトによりアトミックスワップに対応するプログラムを実行する。これにより、実施形態の決済システムは、自動的に暗号資産を販売者に送金する処理を実行してもよい。以下の説明では、暗号資産の送金用のトランザクションのことを、単に送金トランザクションともいう。また、暗号資産の受取用のトランザクションのことを、単に受取トランザクションともいう。
【0084】
また、実施形態の決済システムは、HTLC(Hashed Time-Locked Contracts)の処理手順に相当するコードをスマートコントラクトとして実装して分散型台帳に公開してもよい。この場合には、購入者装置70は、送金トランザクションの付属情報として、決済装置80の送金アドレスと、ハッシュ値Hと、取り戻し用の購入者装置70のアドレスとを付与し、スマートコントラクトのアドレスを指定して分散型台帳に公開する。また、決済装置80は、受取トランザクションの付属情報として、決済側の電子署名と、秘密情報とを付与し、スマートコントラクトのアドレスを指定して分散型台帳に公開する。これにより、実施形態の決済システムは、スマートコントラクトを用いて、上述で説明した決済処理に対応する処理を実行してもよい。なお、HTLCの処理手順に相当するコードとは、HTLCの処理において固定のコードである。また、購入者装置70及び決済装置80が付与する付属情報は、HTLCの処理において可変な情報である。
また、実施形態の決済システムは、HTLCの処理手順に相当するコードをスマートコントラクトとして実装するとき、決済装置80の送金アドレス及びハッシュ値Hの少なくとも一方を、コードに含ませて固定してもよい。すなわち、購入者装置70は、スマートコントラクトのアドレスを指定して、送金トランザクションを分散型台帳に公開することにより、スマートコントラクトで指定されている値を用いて送金することが可能になる。
なお、本実施形態は、以上に述べた実施形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【0085】
50 コンピュータ装置
51 制御回路
52 記憶装置
53 読書装置
54 記録媒体
55 通信I/F
56 入出力I/F
57 入力装置
58 表示装置
59 バス
60、100 制御部
70 購入者装置
80 決済装置
91、111 通信部
92、112 記憶部
93 表示部