IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社アクセルの特許一覧

<>
  • 特許-仮想通貨システム 図1
  • 特許-仮想通貨システム 図2
  • 特許-仮想通貨システム 図3
  • 特許-仮想通貨システム 図4
  • 特許-仮想通貨システム 図5
  • 特許-仮想通貨システム 図6
  • 特許-仮想通貨システム 図7
  • 特許-仮想通貨システム 図8
  • 特許-仮想通貨システム 図9
  • 特許-仮想通貨システム 図10
  • 特許-仮想通貨システム 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-19
(45)【発行日】2024-03-28
(54)【発明の名称】仮想通貨システム
(51)【国際特許分類】
   G06Q 20/38 20120101AFI20240321BHJP
   G09C 1/00 20060101ALI20240321BHJP
   H04L 9/32 20060101ALI20240321BHJP
【FI】
G06Q20/38 318
G09C1/00 660C
H04L9/32 200B
H04L9/32 200Z
H04L9/32 200E
【請求項の数】 4
(21)【出願番号】P 2022197819
(22)【出願日】2022-12-12
(62)【分割の表示】P 2018153948の分割
【原出願日】2018-08-20
(65)【公開番号】P2023024542
(43)【公開日】2023-02-16
【審査請求日】2022-12-12
(73)【特許権者】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】100085660
【弁理士】
【氏名又は名称】鈴木 均
(74)【代理人】
【識別番号】100149892
【弁理士】
【氏名又は名称】小川 弥生
(74)【代理人】
【識別番号】100185672
【弁理士】
【氏名又は名称】池田 雅人
(72)【発明者】
【氏名】客野 一樹
【審査官】行田 悦資
(56)【参考文献】
【文献】特開2017-027287(JP,A)
【文献】特開2004-140636(JP,A)
【文献】特開2003-143128(JP,A)
【文献】特開2002-258745(JP,A)
【文献】特許第6341491(JP,B1)
【文献】特開2017-156859(JP,A)
【文献】特開平11-232348(JP,A)
【文献】特表2009-505593(JP,A)
【文献】ビットバンク株式会社,できるビットコイン入門 話題の仮想通貨の仕組みから使い方までよく分かる本,第1版,日本,株式会社インプレス,2017年12月21日,pp.164-176
【文献】株式会社ストーンシステム,最新ブロックチェーンがよ~くわかる本,第1版,日本,株式会社秀和システム,2017年08月01日,pp.54-65
【文献】山澤 昌夫 ほか,暗号通貨(ビットコイン)・ブロックチェーンの高信頼化へ向けてのMELT-UP活動,2018年 暗号と情報セキュリティシンポジウム概要集,日本,電子情報通信学会,2010年01月19日,pp.1-8
(58)【調査した分野】(Int.Cl.,DB名)
G06Q 20/38
G09C 1/00
H04L 9/32
(57)【特許請求の範囲】
【請求項1】
送金額を含む取引データと電子署名とを含む仮想通貨の送金情報を作成する送金サーバ装置と、
前記取引データを前記送金サーバ装置から供給されて前記電子署名を前記送金サーバ装置に対して供給する情報処理装置に接続され、前記取引データを用いて前記電子署名を生成する署名装置と、を備える仮想通貨システムであって、
前記署名装置は、
秘密鍵を記憶する記憶部と、
前記署名装置が前記情報処理装置に接続された状態で、前記取引データに基づく署名用の値と、前記秘密鍵と、を用いて前記電子署名を生成する署名生成部と、を備え、
前記送金サーバ装置は、
前記情報処理装置からの要求に基づいて、前記取引データを作成して前記情報処理装置に送信する取引データ送信処理部を備え、
前記取引データ送信処理部は、前記送金額が所定の条件を満たすことを条件に前記取引データを前記情報処理装置に送信することを特徴とする仮想通貨システム。
【請求項2】
請求項1に記載の仮想通貨システムにおいて、
前記取引データは、送金元アドレスをさらに含み
記署名装置の前記署名生成部は、特定の前記送金元アドレスからの送金について、一回の送金における送金額が所定額以上ではなく、所定期間における累計の送金額が所定額以上ではないことを条件に前記電子署名の生成を実行し、前記電子署名を前記情報処理装置に供給することを特徴とする仮想通貨システム。
【請求項3】
請求項1又は2に記載の仮想通貨システムにおいて、
前記署名装置の前記記憶部は、パスワードのハッシュ値をさらに記憶し、
前記署名装置の前記署名生成部は、パスワードが入力されたとき、前記記憶部に記憶される前記パスワードのハッシュ値が入力されたパスワードのハッシュ値と一致することを条件に前記電子署名の生成を実行し、前記電子署名を前記情報処理装置に供給することを特徴とする仮想通貨システム。
【請求項4】
請求項1又は2に記載の仮想通貨システムにおいて、
前記署名装置の前記記憶部は、パスワードに第1ハッシュ関数を適用して得られた第1ハッシュ値と、前記パスワードに第2ハッシュ関数を適用して得られた第2ハッシュ値を用いて暗号化された前記秘密鍵と、を記憶し、
前記署名装置の前記署名生成部は、パスワードが入力されたとき、入力されたパスワードに前記第1ハッシュ関数を適用して第3ハッシュ値を算出し、前記第1ハッシュ値と前記第3ハッシュ値とが一致したとき、入力されたパスワードに前記第2ハッシュ関数を適用して第2ハッシュ値を算出し、前記第2ハッシュ値を用いて暗号化された前記秘密鍵を復号し、前記秘密鍵と前記署名用の値とを用いて前記電子署名の生成を実行し、前記電子署名を前記情報処理装置に供給することを特徴とする仮想通貨システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想通貨に関し、より詳細には仮想通貨の使用に必要な電子署名値を生成する署名装置、及びそれを含む仮想通貨システムに関する。
【背景技術】
【0002】
近年、P2Pネットワーク上で分散型台帳管理を実現するブロックチェーンと呼ばれる技術が知られている。
そして、このブロックチェーンを取引の台帳として活用した仮想通貨(暗号通貨)が知られており、現金に代わる新たな決算手段や送金手段などに用いられてきている。
ブロックチェーンを用いた仮想通貨において、秘密鍵を用いて電子署名を付したトランザクションをユーザがP2Pネットワークに送信すると、そのトランザクションはノードのトランザクションプールに溜め置かれる。
そして、ノードが、トランザクションプール内のトランザクションを検証し、正当なトランザクションをブロックに組み込む処理が行われている(特許文献1、2)。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2016-218633公報
【文献】特開2016-200954公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
秘密鍵は、例えば、ウォレットと呼ばれるソフトウェアによって管理されている。ウォレットは、ブロックチェーンのノードに内包されており、常にネットワークに接続された状態にある。このような状態にあるウォレットをホットウォレットという。
そのため、ウォレットを実行するノードがクラッキングを受けることで秘密鍵が悪意の第三者に流出すると、その第三者は、秘密鍵を用いて電子署名を自由に生成し、自身のアドレスに対して仮想通貨を送金することが可能となる。その結果、仮想通貨が盗まれる恐れがある、という問題があった。
本発明は、上記の問題点を鑑みてなされたものであり、仮想通貨の使用時に必要な電子署名をより安全に生成して仮想通貨の安全性を高め得る署名装置及び仮想通貨システムを提供することを目的とする。
【課題を解決するための手段】
【0005】
本発明は、上述の課題を解決するためになされたものであり、以下の形態により実現することが可能である。
本発明に係る第1の形態は、送金額を含む取引データと電子署名とを含む仮想通貨の送金情報を作成する送金サーバ装置と、前記取引データを前記送金サーバ装置から供給されて前記電子署名を前記送金サーバ装置に対して供給する情報処理装置に接続され、前記取引データを用いて前記電子署名を生成する署名装置と、を備える仮想通貨システムであって、前記署名装置は、秘密鍵を記憶する記憶部と、前記署名装置が前記情報処理装置に接続された状態で、前記取引データに基づく署名用の値と、前記秘密鍵と、を用いて前記電子署名を生成する署名生成部と、を備え、前記送金サーバ装置は、前記情報処理装置からの要求に基づいて、前記取引データを作成して前記情報処理装置に送信する取引データ送信処理部を備え、前記取引データ送信処理部は、前記送金額が所定の条件を満たすことを条件に前記取引データを前記情報処理装置に送信する仮想通貨システムを特徴とする。
【0006】
本発明に係る第2の形態は、第1の形態において、前記取引データは、送金元アドレスをさらに含み、前記署名装置の前記署名生成部は、特定の前記送金元アドレスからの送金について、一回の送金における送金額が所定額以上ではなく、所定期間における累計の送金額が所定額以上ではないことを条件に前記電子署名の生成を実行し、前記電子署名を前記情報処理装置に供給する仮想通貨システムを特徴とする。
本発明に係る第3の形態は、第1又は第2の形態において、前記署名装置の前記記憶部は、パスワードのハッシュ値をさらに記憶し、前記署名装置の前記署名生成部は、パスワードが入力されたとき、前記記憶部に記憶される前記パスワードのハッシュ値が入力されたパスワードのハッシュ値と一致することを条件に前記電子署名の生成を実行し、前記電子署名を前記情報処理装置に供給する仮想通貨システムを特徴とする。
【0007】
本発明に係る第4の形態は、第1又は第2の形態において、請求項1又は2に記載の仮想通貨システムにおいて、前記署名装置の前記記憶部は、パスワードに第1ハッシュ関数を適用して得られた第1ハッシュ値と、前記パスワードに第2ハッシュ関数を適用して得られた第2ハッシュ値を用いて暗号化された前記秘密鍵と、を記憶し、前記署名装置の前記署名生成部は、パスワードが入力されたとき、入力されたパスワードに前記第1ハッシュ関数を適用して第3ハッシュ値を算出し、前記第1ハッシュ値と前記第3ハッシュ値とが一致したとき、入力されたパスワードに前記第2ハッシュ関数を適用して第2ハッシュ値を算出し、前記第2ハッシュ値を用いて暗号化された前記秘密鍵を復号し、前記秘密鍵と前記署名用の値とを用いて前記電子署名の生成を実行し、前記電子署名を前記情報処理装置に供給する仮想通貨システムを特徴とする。

【0008】
以上のように構成したので、本発明によれば、仮想通貨の使用(送金)時に必要な電子署名をより安全に生成するとともに、仮想通貨の安全性を高め得る署名装置及び仮想通貨システムを実現することが出来る。
【図面の簡単な説明】
【0009】
図1】本実施形態にかかるシステムの構成を示す概略図である。
図2】仮想通貨のトランザクションを概説するための図である。
図3】本実施形態のシステムにおける処理の流れを説明する図である。
図4】本実施形態に係る情報処理装置の機能構成を示す図である。
図5】本実施形態に係るハードウェアウォレットの構成を説明する図である。
図6】本実施形態に係るウォレットサーバ装置の機能構成を示す図である。
図7】本実施形態の情報処理装置が実行する仮想通貨送金依頼処理を説明するフローチャートである。
図8】本実施形態のハードウェアウォレットが実行する電子署名値生成処理を説明するフローチャートである。
図9】本実施形態のウォレットサーバ装置が実行する仮想通貨送金処理を説明するフローチャートである。
図10】本実施形態のハードウェアウォレットが実行する電子署名値生成処理の他の例を説明するフローチャートである。
図11】ハードウェアウォレット又はウォレットサーバ装置で実行される送金上限確認処理(送金制限処理)を説明するフローチャートである。
【発明を実施するための形態】
【0010】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
本実施の形態では、一例として、ソーシャルゲームなどのインターネット上のサービスに対して、利用者がその利用の対価を仮想通貨で支払う状況を説明する。
利用者は、サービスの利用に当たって、運営会社が所持するウォレットのアドレスに対して仮想通貨の送金を行う。
送金された仮想通貨は未使用のUTXO(Unspent Transaction Output)としてネットワーク上に存在しており、送金を受けた運営会社は送金された仮想通貨を利用するために、自らの電子署名によってこれをアンロックする必要がある。仮想通貨の利用とは、例えば、仮想通貨の送金のことである。
【0011】
本実施形態の発明は、この電子署名を安全に生成することが出来る署名装置、及びそれを含む仮想通貨システムに係るものである。
なお、本実施形態で説明するサービスを提供する運営会社の説明は、あくまで一例であり、仮想通貨を送金された仮想通貨を、一個人や企業がアンロックして利用するために必要な電子署名を生成する場合にも適用可能である。
【0012】
図1は、本実施形態にかかるシステムの構成を示す概略図である。
図1(a)は、本実施形態のシステムを構成する装置を含むネットワークの構成を示す概略図である。
本実施形態に係るシステム1において、複数の利用者の利用に係る端末装置10と、ソーシャルゲーム等のサービスを提供する運営会社が利用する情報処理装置20と、情報処理装置20からの送金依頼に基づいて送金トランザクションを作成、公開するウォレットサーバ装置40と、ブロックチェーンネットワークに参加してマイニング作業を行うマイナーが用いる多数のマイナー装置30、とがインターネットに接続されている。マイニングのコンセンサスアルゴリズムには、例えば、Proof of Work(PoW)、Proof of Stake(PoS)、及びProof of Importance(PoI)などがある。以下の説明では、Proof of Workのことを、プルーフオブワークともいう。
ウォレットサーバ装置40は、仮想通貨の送金に必要な機能をApplication Programming Interface(API)として外部の情報処理装置20に提供する。情報処理装置20の利用者は、ブロックチェーンや仮想通貨についての知識を有さずとも、ウォレットサーバ装置40を介することで容易に仮想通貨を用いたサービス課金や、送金された仮想通貨の利用を行うことが出来る。
【0013】
また、多数のマイナー装置30x(30x-1、30x-2・・・)やクライアント装置によってブロックチェーンネットワークxが構成され、多数のマイナー装置30y(30y-1、30y-2・・・)やクライアント装置によってブロックチェーンネットワークyが構成されている。
これらのブロックチェーンネットワークは、P2P(Peer to Peer)ネットワークであり、ブロックチェーンネットワークxは仮想通貨Xのネットワーク、ブロックチェーンネットワークyは仮想通貨Yのネットワークである。
【0014】
ブロックチェーンには、仮想通貨に用いられるものを含め、多くのものが存在している。仮想通貨にも、代表的なビットコインの他に、アルトコインと呼ばれるものが知られている。アルトコインの代表的なものとして、Ethereum(イーサリアム)やMonacoin(モナコイン:登録商標)などが知られている。
【0015】
インターネット上においてはビットコインを運営、機能させるためのブロックチェーンネットワークや、各種アルトコインの運営、機能させるためのブロックチェーンネットワークが存在する。
各ブロックチェーンネットワークには、それぞれマイナー装置30が多く接続されて、プルーフオブワーク作業を行っている。また、ブロックチェーンネットワーク(仮想通貨)によっては、マイニングとしてプルーフオブワーク作業を行わないものもある。
【0016】
いずれの場合においても、ブロックチェーンネットワークは、中央集権的なサーバを持たないP2Pネットワークである。ブロックチェーンでは、ブロックチェーンネットワークに属するそれぞれのマイナー装置が有するストレージやサーバ装置、プールサーバに備えるストレージに、同じものが格納されている。ブロックチェーンが、分散型取引台帳と呼ばれる所以である。
【0017】
図1(b)は、ブロックチェーンネットワークに属する装置が有するブロックチェーンを示す図である。
図1(b)を用いて、ブロックチェーンの概略を説明する。
ブロックチェーンは、逐次発生する取引情報などをブロック単位で接続することにより成立する。
すなわち、ブロックチェーン技術では、取引記録や契約など、内容を保証したいデータ(の集合)をブロックという単位で扱う。このブロックを所定の方法で一繋ぎすなわちチェーン状に接続したものがブロックチェーンである。ブロックチェーンの生成にあたってはハッシュ関数が用いられており、ハッシュ関数は任意長の任意データに対して固定長のハッシュ値を求めるための関数である。
ハッシュ関数には一方向性という特徴があり、任意データからハッシュ値を求めることは容易であるが、逆に、ハッシュ値から元のデータを復元することは現実的には不可能であるとされる。
【0018】
ブロックチェーンに対して新たなブロックを接続するためには、チェーンにおける直前のブロックのハッシュ値と、接続すべき新たなブロックのトランザクションデータを1まとめにしたマークルルートと呼ばれるデータ、Nonce値と呼ばれる数値(例えば32bit固定長数値)を接続したデータに対してハッシュ値(例えば、SHA-256ハッシュ)を計算した時にその上位数ビット(例えば10Bit)が0となるような、Nonce値を求める。
【0019】
SHA-256ハッシュ値は、ほぼランダムな256bitの値となるため、あるNonce値を選んだ時に上位10bitが0となる確率は1024分の1となるが、上記したハッシュ関数の一方向性によって、基本的に、全てのNonce値に対して総当たりで、上記のハッシュ値の上位ビットが0となるか否かを検証するより他に方法がない。この総当たりでの検証を行って、ハッシュ値の上位ビットが0となるNonce値を見つけ、報告してブロックを承認する作業は、コンセンサスアルゴリズムにプルーフオブワークを用いたマイニング作業である。
その結果、図1(b)に示すように、ブロックチェーンの各ブロックは、そのブロックのデータと、直前のブロックのハッシュ値と、Nonce値と、を含んでいる。
【0020】
このようなブロックチェーンは、各ブロックが直前のブロックのハッシュ値を持っているため、先端の(起点となる最古の)ブロックから順に辿ることで、全てのブロックの正当性を確認することが出来る。
なお途中のブロックを改ざんしようとすると、そのブロック以降全てのブロックのNonce値を再計算する必要があるが、上記した総当たりを全てのブロックについて行うしかないため、計算量的に不可能である。
このような特徴を有することで、ブロックチェーンの信頼性は担保されている。
【0021】
なお、本明細書において、仮想通貨を送金するとは、あくまで便宜的な表現である。
ビットコインをはじめとした仮想通貨においては、仮想通貨の送金は、ネットワーク上に分散して記録される所定単位の仮想通貨(通貨価値)を、利用者の公開鍵あるいは公開鍵ハッシュとしてのアドレスによってロックする処理である。
UTXOは、未使用のトランザクションアウトプットであり、仮想通貨の取引を記述したトランザクションにおいて、他のトランザクションと未だ接続されていないアウトプットである。そして、UTXOは、所有者の公開鍵を記載したScriptPubKeyを含んでいる。
UTXOをロックしている公開鍵の所有者がUTXOの所有者であり、当該UTXOが、その所有者が所有する仮想通貨の残高である。
【0022】
仮想通貨の送金とは、直前の所有者の公開鍵、あるいは公開鍵ハッシュによってロックされているUTXOを、上記直前の所有者が生成した電子署名によってアンロックすることで、新たに作成したトランザクションと接続し、その新たに作成したトランザクションのUTXOを、次の所有者の公開鍵、あるいは公開鍵ハッシュによって再度ロックする処理である。
そして、このトランザクションをブロックチェーンネットワークに対してブロードキャストし、トランザクションが承認されてブロックチェーンに組み込まれることで送金(UTXOの所有権の移転)が行われる。
【0023】
仮想通貨の送金は、UTXOをアンロックして新たなトランザクションと接続し、その新たなトランザクションを新たなブロックの一部として承認する処理である。従って、仮想通貨の送金において、何らかの価値情報がデータとして利用者の端末装置間でやりとりされることはない。また、端末装置内に、仮想通貨の残高を示す情報が格納されることはない。
端末装置にインストールされたウォレットは、利用者の公開鍵あるいは公開鍵ハッシュに紐付けられたUTXOをブロックチェーンネットワークから検索することによって、利用者が有する仮想通貨の残高を利用者に提示することが出来る。
【0024】
図2は、仮想通貨のトランザクションを概説するための図であり、(a)はトランザクションの基本的な構成を概念で示す図、(b)は、前トランザクションに対して、新規トランザクションを接続したときの状態を示す図である。
トランザクションは、送金元から送金先への通貨価値の移転を記述したものであり、図2(a)に示すように、送金元を示すフィールドであるインプットと、送金先を示すフィールドであるアウトプットと、を有する。
また、アウトプットは、送金額と、ScirptPubKeyとを含む。
ScriptPubKeyは、このトランザクションに含まれるUTXOをアンロックするための条件を定義したスクリプトである。
ScriptPubKeyには、特定の秘密鍵による電子署名によってアンロックが可能となるようなスクリプトが記述されている。従って、仮想通貨の所有権が、該当する秘密鍵を所有する利用者のものとなる。
インプットは、UTXOを使うために、ScriptSigと呼ばれるUTXOのロックを解除するためのスクリプトを含む。ScriptSigは主に、ScriptPubKeyで要求されるUTXOのアンロックのための電子署名である。
【0025】
図2(b)に示すように、前トランザクションにおいてIndex0で特定されるScirptPubKeyに対応するアウトプットに、新規トランザクションが接続されている。
Index1で特定されるScirptPubKeyに対応するアウトプットには、新規トランザクションが接続されていないため、当該アウトプットは、UTXOのままである。
【0026】
新規トランザクションのインプットは、ScritSigと、トランザクションハッシュと、Indexとを含む。ScritSigは、前トランザクションのScriptPubKeyで求められる新規トランザクションを接続する利用者の電子署名を含む。トランザクションハッシュは、前トランザクション全体のハッシュ値であり、接続先の前トランザクションを識別するためのトランザクションIDとして用いられる。
Indexは、前トランザクションにおける接続先のScriptPubKeyを特定するための識別子である。
新規トランザクションのアウトプットは、新規トランザクションのUTXOを、送金先の利用者のアドレスにロックするためのScriptPubKeyが含まれる。ScriptPubKeyは、送金先の利用者の公開鍵にハッシュ関数を適用した公開鍵ハッシュを含む。
新規トランザクションのインプットに付される電子署名は、新規トランザクションのScriptSigを除くデータと、前トランザクションにおける接続されたScriptPubKeyと、のハッシュ値を、秘密鍵を用いて暗号化することで生成される。
【0027】
図3は、本実施形態のシステムにおける処理の流れを説明する図である。
なお、以下の説明において、アドレスとは、ハッシュ関数を用いて公開鍵を変換した公開鍵ハッシュである。
Pay-to-Public-Key-Hash(P2PKH)と呼ばれる仮想通貨の送金方式では、公開鍵ハッシュとしてのアドレスに対してUTXOをロックし、公開鍵と、それに対応する電子署名を用いてUTXOをアンロックする。本実施形態では、このP2PKH方式に基づいて説明を行う。
一方で、Pay-to-Public-Key(P2PK)と呼ばれる送金方式も存在する。このP2PK方式では、UTXOを公開鍵そのものでロックしている。そして、UTXOは、公開鍵に対応する電子署名でアンロックすることが出来る。従って、P2PK方式が採用される場合には、公開鍵自体がアドレスであると見なすことも出来る。
【0028】
運営会社は、サービスの提供開始前に新たにウォレットに対応するアドレスと秘密鍵を作成する。
アドレスを作成するにあたり、まず、ハードウェアウォレットHWに格納されている秘密鍵を用いて公開鍵が生成される。そして、生成された公開鍵に対してハッシュ関数が適用されることにより、公開鍵ハッシュが生成される。アドレスは、この公開鍵ハッシュを用いて生成される。
そして、公開鍵をサービス利用者に公開し、秘密鍵をハードウェアウォレットHWなど、情報処理装置20から物理的に隔離された場所に格納する。このようなウォレットの形態をコールドウォレットと呼ぶ。逆に、常にオンラインに接続されるPC等に秘密鍵を格納する形態をホットウォレットと呼ぶ。
ハードウェアウォレットHWは、運営会社のPCに備わるUSB I/Fに接続されるUSBドングルとして提供されうる。
【0029】
サービスの運営開始後、端末装置10を利用するサービス利用者は、運営会社のアドレスに対して、アイテム使用料等として仮想通貨の送金を行うためのトランザクションを作成、公開し、そのトランザクションのトランザクションIDを、例えばサービスが提供されているサービス提供サーバ装置に送付する。トランザクションIDは、運営会社の情報処理装置に送付されてもよい。
運営会社では、送付されたトランザクションIDの正当性を確認し、正当であればユーザアカウントにアイテムを付与する。このようにして、仮想通貨を用いたアイテム課金及びアイテム付与が実現される。
【0030】
サービス利用者によって運営会社のアドレスあてに仮想通貨が送金されたあと、運営会社が受け取った仮想通貨を利用する場合、本実施形態では、以下のような作業が行われる。
運営会社は、仮想通貨の送金を行わないときには、秘密鍵を格納したハードウェアウォレットHWを金庫などの物理的に安全が確保される場所に保管する。
後述するが、本実施形態のハードウェアウォレットHWは、暗号鍵を保持するのみならず、外部から入力されるトランザクションデータのハッシュ値と、暗号鍵を用いて電子署名値を生成することが出来る。
金庫で保管されるハードウェアウォレットHWは、当然、運営会社の情報処理装置20に接続されておらず、ネットワークからのクラッキングのリスクからは遮断されている。
【0031】
そして、運営会社は、出金等の作業を行うタイミングでハードウェアウォレットHWを金庫などから取り出して情報処理装置20に接続する。情報処理装置20は、ハードウェアウォレットが接続されると、ハードウェアウォレットHWを用いて電子署名を生成する。そして、情報処理装置20は、送金プログラムを用いて送金処理を実行する。
送金プログラムはWindows(登録商標)あるいはmacOS(登録商標)が動作する通常の構成のPCで動作する。すなわち、情報処理装置20は汎用のコンピュータである。
【0032】
本実施形態において仮想通貨の送金を行う場合、ネットワーク上に点在する送金者のアドレスにロックされているUTXOを収集し、送金トランザクションのインプットに接続することで、未使用の仮想通貨の残高を送金する。
送金額と送金金額の余剰、送金先は、送金トランザクションのアウトプットに記載される。
送金トランザクションのインプットには、入力トランザクションの出力スクリプトと送金トランザクションの入力スクリプトから計算するトランザクションのハッシュ値に対する電子署名が含まれる。
ウォレットサーバ40は、例えば、トランザクションのScriptSigを除くデータと、前トランザクションのScriptPubKeyとを用いて得られる値のハッシュ値(以下、電子署名用の値ともいう。)を生成する。そして、ウォレットサーバ40は、生成した電子署名用の値を情報処理装置20に送信する。情報処理装置20は、電子署名用の値を受信し、ハードウェアウォレットHWが接続されると、受信した電子署名用の値をハードウェアウォレットHWに入力する。そして、ハードウェアウォレットHWは、入力された電子署名用の値を用いて電子署名を生成する。
【0033】
本実施形態における仮想通貨の送金処理の流れを説明する。
本実施形態では、運営会社が仮想通貨の送金(サービス利用者の送金に係るUTXOの利用)を行う場合、(1)において、運営会社の情報処理装置20がウォレットサーバ装置40に対して、送金トランザクションの作成を依頼する。すなわち、情報処理装置20がウォレットサーバ装置40に対して送金依頼を行う。
運営会社の情報処理装置20は、送金依頼として、ウォレットサーバ装置40に対して送金元アドレスと、送金先アドレスと、送金額とを送信する。換言すると、情報処理装置20は、送金元アドレスと送金先アドレスと送金額とを含む送金依頼をウォレットサーバに送信する。送金元アドレスは、運営会社のアドレスである。
この送金依頼は、利用可能なUTXOの一覧を取得して送金元アドレスからいくら送金出来るかを問い合わせることでもある。
ここで、送金元アドレスは、運営会社が、サービス利用者の課金のために用意した公開鍵に基づくアドレスである。従って、運営会社宛に行われた送金に係るUTXOの送金先アドレスは、この送金元アドレスと一致する。
【0034】
ウォレットサーバ装置40は、受け取った送金元アドレスをキーにブロックチェーンを探索することにより、運営会社に宛てられたUTXOを見つけ出すことが出来る。
すなわち、送金依頼を受信したウォレットサーバ装置40は、(2)において、ブロックチェーンネットワークを構成するノードサーバNDに問い合わせ、送金元アドレスに係るUTXOを収集する。
そして、ウォレットサーバ装置40は、ノードサーバNDからの情報に基づいて、送金額に対応するインプットを接続し(UTXOを有する1以上のトランザクションを入力とし)、(おつりを含む)送金額と手数料とを出力とした新規のトランザクションデータ(1つ以上の入力元トランザクションのトランザクションID、送金額を含む送金トランザクションのアウトプット)を作成する。このトランザクションデータは、すなわち、ハードウェアウォレットHWにおける電子署名値の生成に用いられる署名用トランザクションデータであり、送金トランザクションからScriptSigを除いたデータである。ウォレットサーバ装置40は、署名用トランザクションデータと、元トランザクションのScriptPubKeyのハッシュ値を演算して電子署名用の値を生成する。
より詳しくは、ウォレットサーバ装置40は、送金元アドレスと送金額とを情報処理装置20から受信すると、受信した送金元アドレスを用いて、ブロックチェーンに記録されているトランザクションを検索し、送金元アドレスに紐付く取引履歴であるトランザクションを検索する。
【0035】
さらに、ウォレットサーバ装置40は、検索された各トランザクションのアウトプットに含まれるUTXOを検索する。そして、ウォレットサーバ装置40は、送金額と、検索した各UTXOとを比較し、送金額を送金可能であり、且つデータ量がより小さくなる組合せのUTXOを選択する。
ウォレットサーバ装置40は、選択したUTXOを含むトランザクションのトランザクションIDと、UTXOのIndexとを取得する。また、ウォレットサーバ装置40は、選択したUTXOをアンロックするための条件が記述されているScriptPubKeyを取得する。
そして、ウォレットサーバ装置40は、取得したトランザクションIDと、Indexと、送金額と、送金先アドレスから求められる送金先の公開鍵ハッシュを含むScriptPubKeyとを含むアウトプットと、取得したScriptPubKeyと、を用いて署名用のハッシュ値を算出する。
ここで、トランザクションIDと、Indexと、送金額と、送金先アドレスから求められる送金先の公開鍵ハッシュを含むScriptPubKeyとを含むアウトプットは、すなわち、送金トランザクションからScriptSigを除いたデータと同等である。
【0036】
(3)において、ウォレットサーバ装置40は、作成した署名用トランザクションデータに含まれる内容と、電子署名用の値とを、情報処理装置20に送信する。
本実施形態の主な実施例においては、情報処理装置20、ハードウェアウォレットHWにおいて、電子署名用の値を生成せず、ハードウェアウォレットHWは、電子署名用の値を用いて電子署名値を生成する。従って、厳密には、ウォレットサーバ装置40から送信されるトランザクションデータは、情報処理装置20及びハードウェアウォレットHWにおいては署名用のトランザクションデータではない。
しかしながら、ウォレットサーバ装置40で電子署名用の値を生成するために用いられたトランザクションデータと同じ内容のトランザクションデータは、便宜上署名用トランザクションデータとして説明する。
(4)において、署名用トランザクションデータ、電子署名用の値を受信した情報処理装置20は、電子署名用の値をハードウェアウォレットHWに入力する。
ハードウェアウォレットHWに入力される情報は、電子署名用の値であるトランザクションデータのハッシュ値である。
ハードウェアウォレットHWは、電子署名用の値を、秘密鍵を用いて暗号化することにより電子署名値を生成する。
【0037】
(5)において、ハードウェアウォレットHWは、生成した電子署名値を情報処理装置20に返す。あるいは、情報処理装置20は、ハードウェアウォレットHWから電子署名値を取得する。
(6)において、情報処理装置20は、署名用トランザクションデータに含まれていた入力元トランザクションごとのトランザクションID及びIndex、アウトプット(送金額、ScirptPubKey)のデータと、ハードウェアウォレットHWで生成された電子署名値及び公開鍵から送金用トランザクションデータを組み立て、ウォレットサーバ装置40に送信する。
なお、情報処理装置20は、ハードウェアウォレットHWに格納されている秘密鍵を用いて予め公開鍵を生成する。
(7)において、ウォレットサーバ装置40は、情報処理装置20から送信された送金用トランザクションデータ、電子署名値、及び公開鍵に基づいて、送金トランザクションを組立てる。
すなわち、ウォレットサーバ装置40は、情報処理装置20から送金用トランザクションデータ、電子署名値及び公開鍵を受信すると、受信した電子署名値及び公開鍵を含むScriptSigを含むインプットを生成し、生成したインプットと、送金用トランザクションデータに含まれるアウトプットを記述した送金トランザクションを作成する。
ウォレットサーバ装置40は、作成した送金トランザクションをネットワークに送信する。これによって、送金が行われる。
【0038】
運営会社の情報処理装置20は、送金プログラムを実行することにより、上記したウォレットサーバ装置40に対する送金依頼の送信処理と、ハードウェアウォレットHWに対する電子署名用の値の入力処理と、ウォレットサーバに対するトランザクションの生成に用いる元データの送信処理などを実行する。
【0039】
図4は、本実施形態に係る情報処理装置の機能構成を示す図であり、(a)はハードウェアによる機能構成を示す図、(b)はソフトウェアによる機能構成を示すブロック図である。
【0040】
図4(a)に示すように、情報処理装置20は、CPU21と、RAM22と、ドライブ装置23と、記録媒体24及び不図示のROM(Read Only Memory)と、を備える。さらに、情報処理装置20は、ネットワークI/F25と、IO I/F(USB I/F等)26と、入力装置27と、表示装置28とを備える。なお、CPUは、Central Processing Unitの略である。RAMは、Random Access Memoryの略である。
CPU21は、装置全体の制御を行う汎用のオペレーティングシステムを実行するとともに、情報処理装置20の機能を実現するプログラムを実行する。RAM22は、CPU21による処理のために各種のプログラムや一時データ、変数が展開される。
【0041】
ドライブ装置23は、記録媒体24に記憶された情報の読み出しか書き込みかの少なくとも一方を行なう装置である。記録媒体24は、ドライブ装置23によって書き込まれた情報を記憶する。記録媒体24は、例えば、ハードディスク、SSD(Solid State Drive)、CD(Compact Disc)、DVD(Digital Versatile Disc)、またはブルーレイディスクなどの非一時的記録媒体である。また、例えば、情報処理装置20は、情報処理装置20内の記録媒体24の種類に対応したドライブ装置23を含む。
記録媒体24及びROMのすくなくとも一方は、プログラムやデータが格納される。ネットワークI/F25は、端末装置10をネットワークに接続する。IO I/F26は、端末装置10に対して周辺機器を接続する。入力装置27は、例えば、キーボード、マウス、及びタッチパネルなどである。表示装置28は、液晶モニタ、または有機ELなどである。
また、IO I/F26には、秘密鍵を格納して電子署名の作成に利用するハードウェアウォレットHWを接続することが出来る。
【0042】
また、図4(b)に示すように、CPU21は、処理部として、送金依頼処理部61と、データ送受信部62と、ウォレット制御処理部63と、を実行する。
図4(b)の処理部は、情報処理装置20における送金プログラムとして機能する。
送金依頼処理部61は、仮想通貨の送金依頼を行う処理部であり、送金依頼として、送金元となる運営会社のアドレス(送金元アドレス、送金先アドレス)及び送金額をウォレットサーバ装置40に送信する。
【0043】
上記に詳説したが、送金依頼は、運営会社が利用可能なUTXOの一覧をブロックチェーンネットワークから取得し、その中から送金額に見合うUTXOを接続したトランザクションを作成することをウォレットサーバ装置40に依頼する処理である。
ここで作成されるトランザクションデータは電子署名生成用のデータとなる。
ウォレットサーバ装置40は、ブロックチェーンから取得された1以上のUTXOに接続した署名用トランザクションデータを作成し、情報処理装置20に送信する。
作成された署名用トランザクションデータは、上記のように入力元のUTXO毎のトランザクションID及びIndexと、送金額、送金先アドレスから求められる送金先の公開鍵ハッシュを含むScriptPubKeyを含むアウトプットと、を含む。
これは送金トランザクションからScriptSigを除いた内容と同等のデータである。
【0044】
データ送受信処理部62は、ウォレットサーバ装置40との間で署名用トランザクションデータ、送金用トランザクションデータの送受信処理を行う処理部である。
ウォレット制御処理部63は、ハードウェアウォレットHWがUSB I/F25に接続されているとき、データ送受信部62が受信した電子署名用の値をハードウェアウォレットHWに入力し、ハードウェアウォレットHWに電子署名値を生成させ、生成された電子署名値をハードウェアウォレットHWから取得する処理を行う処理部である。
【0045】
図5は、本実施形態に係るハードウェアウォレットの構成を説明する図である。
本実施形態に係るハードウェアウォレットHWは、図4に示したように、USB I/F25を介して情報処理装置20に対して着脱可能に接続される構成となっている。
ハードウェアウォレットHWは、秘密鍵を記憶する。そして、ハードウェアウォレットHWは、情報処理装置20から、電子署名用の値が入力されたとき、秘密鍵を用いて、電子署名用の値を暗号化する。これにより、ハードウェアウォレットHWは、電子署名値を生成する。そして、ハードウェアウォレットHWは、生成した電子署名値を情報処理装置20に出力する。
【0046】
図5(a)に示すように、ハードウェアウォレットHWは、入出力部(接続部)70と、秘密鍵格納部72aと、バッファメモリ72bと、RTC(リアルタイムクロック)73と、を備える。
入出力部(接続部)70は、情報処理装置のUSB I/F25に接続され、データや信号の入出力をする。
制御部(回路)71は、電子署名値の生成に係る処理を行う。秘密鍵格納部72aは、秘密鍵を格納する記憶領域である。バッファメモリ72bは、情報処理装置20とのデータのやりとりに用いられる。パスワード格納部72は、電子署名値の生成にあたって行われる認証に用いるパスワード情報が格納される。RTC73は、実時間を計時可能な時計である。
【0047】
図5(b)に示すように、制御部71は、ハッシュ値演算処理部74と、電子署名生成処理部75と、認証部76と、コード出力部77と、送金上限確認部78と、を含む。
ハッシュ値演算処理部74は、入力された送金トランザクションデータから署名用のハッシュ値を演算する。
後述するが、本実施形態は、ハードウェアウォレットHWが情報処理装置20から入力された電子署名用の値から電子署名値を生成する場合に限定されることはない。
ハードウェアウォレットHWが、情報処理装置20から署名用トランザクションデータを入力され、署名用トランザクションデータに基づいて演算した署名用のハッシュ値を暗号化することによって電子署名値を生成する場合がある。
従って、ハードウェアウォレットHWは、ハッシュ値演算処理部74を備える。
また、その場合、ウォレットサーバ装置40は、署名用トランザクションデータに基づく電子署名用の値を生成せず、署名用トランザクションデータと、署名に必要な前トランザクションのScriptPubKeyをそのまま情報処理装置20に送信する。
【0048】
電子署名生成処理部75は、秘密鍵格納部72aに格納される秘密鍵を用い、情報処理装置20から入力された電子署名用の値、またはハッシュ値演算処理部74が演算した電子署名用の値としてのハッシュ値に基づいて、電子署名値を生成する処理を行う。認証部76は、ユーザ認証を行う。コード出力部77は、情報処理装置20からの要求に応じて秘密鍵格納部72に格納される秘密鍵をQRコード(登録商標)として出力する。
送金上限確認部78は、送金額が所定の限度額を超えているか否かを判定する。
なお、ハードウェアウォレットHWが備える送金上限確認部78は、情報処理装置20から署名用トランザクションデータを入力され、その送金トランザクションデータに基づいてハッシュ値演算処理部74が演算した署名用のハッシュ値を、電子署名処理部76が暗号化することによって電子署名値を生成する場合に実行される。
図5に示す構成において、制御部71に含まれる各処理部(ハッシュ値演算処理部74、電子署名生成処理部75、認証部76、コード出力部77、送金上限確認部78)は、ハードウェア回路によって実現可能である。また、制御部71に含まれる各処理部は、ハードウェアウォレットHWにCPUを備え、各処理部がソフトウェアによって実現されてもよい。
【0049】
本実施形態では、情報処理装置20がハードウェアウォレットHWから秘密鍵を読み出して電子署名値を生成するのではなく、ハードウェアウォレットHW内の記憶領域(秘密鍵格納部72a)に記憶している秘密鍵を外部に出力することなく、ウォレット内部で完結して電子署名値の生成を行う。
情報処理装置20内に秘密鍵が存在することはなく、ハードウェアウォレットHWを情報処理装置20から取り外してしまえば、外部から秘密鍵にアクセスする手段はない。
普段はハードウェアウォレットHWを情報処理装置20に接続せずに管理することで、セキュリティリスクを抑えることが出来る。
【0050】
ハードウェアウォレットHWから秘密鍵を取り出すことはできない。従って、情報処理装置20が万が一クラッキングされたとしても、秘密鍵が流出するリスクを最小限に留めることが出来る。本実施形態のハードウェアウォレットHWによれば、秘密鍵の流出等のリスクを回避しつつ、トランザクションに電子署名を付与することが可能となる。
【0051】
さらに、本実施形態に係るハードウェアウォレットHWは、複数の秘密鍵を記憶することが出来る。すなわち、秘密鍵格納部72aに複数の秘密鍵を格納することが出来る。あるいは、ハードウェアウォレットHWも秘密鍵格納部を複数備えてもよい。
仮想通貨を利用する一主体が一つのウォレットを使用することが多く、サービスを運営する運営会社のウォレットが特定された場合に残高がすべて分かってしまうという問題があった。ブロックチェーンにおいてはすべてのトランザクションが公開されるため、アドレスから、運営会社所有の仮想通貨の残高がすべてわかってしまう。
複数の秘密鍵を用意し、対応する夫々の公開鍵(ウォレット)に分散して送金させることで、一部のウォレットが特定されたとしても、すべての残高が特定されることはなく、仮想通貨の所有残高という業務上の秘密といってよい情報を守ることが出来る。
【0052】
本実施形態のハードウェアウォレットHWでは、単一のハードウェアウォレットで複数の秘密鍵に対応し、複数のウォレットに対して夫々送金された仮想通貨を利用するための電子署名を生成することが出来る。
複数の秘密鍵に対応する複数のウォレットに送金を行わせることで、万が一、一つの秘密鍵が漏洩した場合でも、悪意の第三者によって電子署名を生成されて仮想通貨を不正に送金されるリスクを、その秘密鍵に関する範囲内に限定することが出来る。
また、情報処理装置20の送金プログラム(送金依頼処理部61)は、1つの送金依頼において、複数の秘密鍵に対応する複数のウォレット(アドレス)に対する送金依頼を行うことで仮想的に1つのウォレットのように送金することが出来る。
すなわち、複数の秘密鍵のそれぞれに対応する複数の送金元アドレスと、送金額を含む送金依頼をウォレットサーバ装置40に送信し、それぞれのアドレスについ送金を行うことが出来る。
【0053】
情報処理装置20では、複数の秘密鍵に対応する複数のウォレット(アドレス)に係る仮想通貨の残高をまとめて(合算して)表示することで、複数のウォレットを仮想的に1つのウォレットのように表示することが出来る。
1つのハードウェアウォレットHWに秘密鍵を複数保持して、対応するウォレットを分散的に運用しつつ、仮想的に1つのウォレットのように管理することで利便性を大いに高めることが出来る。
ウォレットの残高は、情報処理装置20が、ブロックチェーンをスキャンすることで行うことが出来る。その場合、情報処理装置20に処理部として残高照会処理部を持たせる。
また、ウォレットサーバ装置40が提供する機能として残高照会を行い、照会結果を情報処理装置20の表示装置に表示させるようにしてもよい。
【0054】
なお、複数の秘密鍵に対応するアドレスがある場合でも、代表ウォレット(アドレス)に振り込み(送金)が行われウォレット間で残高の偏りが起こりがちである。
そこで、サービス利用者に公開鍵を公開する際、複数の公開鍵からランダムに利用者に提示することで、ウォレット間の残高を平均化することが出来る。
アドレスの公開は、情報処理装置20が備える処理部としての公開処理部によって行うことが出来る。
公開処理部は、例えばWebサーバなどの情報公開手段として機能する。公開処理部は、サービス利用料の入金先としてのアドレスの情報を、Webページなどに記載して外部に公開する。そして、サービス利用者は、公開されたアドレスに対して送金を行う。従って、公開処理部が公開するアドレスをランダムに変更することでウォレット間の残高の偏りを防ぐことが出来る。
【0055】
また、送金プログラムの機能として、自動的に残高が平均化されるように送金を行うことが出来るようにしてもよい。例えば、送金依頼処理部61は、残高が多いウォレットから優先的に出金を行う様な送金依頼を作成してウォレットサーバ装置40に送信する。また、情報処理装置20は、送金プログラムの機能として複数のウォレットの残高が平準化されるように、ウォレット間で送金を行うトランザクションを発行する残高平準化部を備えてもよい。
【0056】
また、上記したように、本実施形態のハードウェアウォレットHWは、コード出力部77によって、秘密鍵をQRコード(登録商標)として出力することが出来る。
情報処理装置20の使用者は、ハードウェアウォレットHWが故障した時のために、例えば、表示装置28に表示される送金プログラムのインターフェイス画面からハードウェアウォレットHWに対するコード出力操作を行い、出力されたコードを、情報処理装置20を用いて印刷することが出来る。
印刷したQRコード(登録商標)は、例えば金庫等に保管することで、故障時には新たに用意したハードウェアウォレットHWに秘密鍵を復旧出来るようにする。
【0057】
さらに、ハードウェアウォレットHWには、パスワードを設定することも出来る。
上記の認証部76は、情報処理装置20(ウォレット制御処理部63)から、電子署名生成の要求がなされたとき、パスワードの入力を要求する。
情報処理装置20(例えば、ウォレット制御処理部63)は、パスワードの入力画面を表示装置28に表示し、入力装置27を用いたパスワードの入力を受け付ける。
入力されたパスワードは、ハードウェアウォレットHWに入力される。
【0058】
認証部76は、情報処理装置20から入力されたパスワードが、ハードウェアウォレットHWのパスワード格納部72cに予め登録されたパスワードと一致した場合には、電子署名値の生成処理を行う。
一方で、入力されたパスワードと予め登録されたパスワードが一致しない場合には、電子署名値の生成処理を行わない。
従って、仮想通貨の送信トランザクションも、ウォレットサーバ装置40に送信されず、送金は行われない。パスワードを知らない第三者によるハードウェアウォレットHWの利用を制限し、仮に、ハードウェアウォレットHWが盗難にあった場合や、紛失した場合でも、安全性を確保することが出来る。
また、同じ組織内でも一部の者のみがハードウェアウォレットHWを使った送金を行えるようにしたい場合も、パスワードによるセキュリティは有用である。
【0059】
パスワードは、記憶領域に平文で格納されていてもよいが、ハッシュ値としてパスワード格納部72cに格納されてもよい。ハッシュ値としてパスワードをパスワード格納部72cに格納する場合、認証部76は、情報処理装置20から入力されたパスワードのハッシュ値を算出し、そのハッシュ値と、パスワード格納部72cに格納されているハッシュ値とを比較することで認証を行う。
認証の結果、パスワード格納部72cに格納されているハッシュ値と算出されたハッシュ値とが一致した場合に、電子署名生成部75は、電子署名値の生成処理を行う。
すなわち、電子署名生成部75は、情報処理装置20からパスワードが入力されたとき、パスワード格納部72cに格納されるパスワードのハッシュ値が、入力されたパスワードのハッシュ値と一致することを条件に電子署名の生成を実行する。
【0060】
また、秘密鍵を秘密鍵格納部72aに格納する際、上記パスワードのハッシュ値と秘密鍵をEXORして格納しておくことで、すなわちパスワードのハッシュ値と秘密鍵の排他的論理和をとった値を格納しておくことで、ハードウェアウォレットHWを物理的に解析した場合の秘密鍵の漏洩を防ぐこともできる。
なお、その際、安全性を高めるために、認証部76による認証に用いるハッシュ値とは異なるハッシュ関数を使用する必要がある。
秘密鍵を、上記認証用のパスワードのハッシュ値で暗号化した場合、秘密鍵の復号用にパスワードのハッシュ値をそのまま記憶すると、パスワードを入力せずとも秘密鍵の暗号化を解除できるからである。
その一方で、パスワードのハッシュ値を記憶しない場合には、認証部76による認証用に入力されたパスワードが正しいか否かを検証することが出来ない。
【0061】
そこで、本実施形態では、ハッシュ値を算出するためのハッシュ関数として、第1ハッシュ関数、及び第1ハッシュ関数とは異なる第2ハッシュ関数を用意する。
そして、パスワード格納部72cには、認証部76による認証に用いるパスワードに第1ハッシュ関数を適用して得られた第1ハッシュ値を格納する。
そして、パスワード格納部72aには、上記パスワードに第2ハッシュ関数を適用して得られた第2ハッシュ値を用いて暗号化された秘密鍵を格納する。
【0062】
認証部76は、情報処理装置20からパスワードが入力されると、その入力されたパスワードに第1ハッシュ関数を適用して第3ハッシュ値を算出する。そして、パスワード格納部72cに格納された第1ハッシュ値と、算出した第3ハッシュ値とが一致するか否かを判定する。
第1ハッシュ値と第3ハッシュ値とが一致した場合、認証部76は、入力されたパスワードに第2ハッシュ関数を適用して第2ハッシュ値を算出し、第2ハッシュ値を用いて、暗号化された秘密鍵を復号する。
電子署名処理部75は、復号された秘密鍵と電子署名用の値とを用いて電子署名の生成を実行する。
【0063】
このようにすることで、秘密鍵の暗号化により秘密鍵の漏洩を防ぐとともに、電子署名時のパスワード認証も安全且つ適切に行うことが出来る。
なお、上記の説明では、秘密鍵又はそのハッシュ値を格納する秘密鍵格納部72aとパスワード又はそのハッシュ値を格納するパスワード格納部72cを区別して説明しているが、単一の記憶領域、あるいは格納部として構成されていてもよい。その場合も、上記と同様の処理が実行可能である。
【0064】
図6は、本実施形態に係るウォレットサーバ装置の機能構成を示す図であり、(a)はハードウェアによる機能構成を示す図、(b)はソフトウェアによる機能構成を示すブロック図である。
図6(a)に示すように、ウォレットサーバ装置40は、CPU41と、RAM42と、HDD43と、不図示のROMと、ネットワークI/F44と、を備えている。
CPU41は、装置全体の制御を行う汎用のオペレーティングシステムを実行するとともに、ウォレットサーバ装置の機能を実現するプログラムを実行する。
RAM42は、CPU41による処理のために各種のプログラムや一時データ、変数が展開される。
HDD43又はROMの少なくとも一方には、プログラムやデータが格納される。
ネットワークI/F44は、ウォレットサーバ装置40をネットワークに接続する。
【0065】
また、図6(b)に示すように、CPU41は、処理部として、送金依頼受信処理部81と、送金上限確認部82と、UTXO探索処理部83と、署名用トランザクションデータ作成処理部84と、ハッシュ処理部85、送金トランザクション作成処理部86と、データ送受信部87と、を実行する。
送金依頼受信処理部81は、情報処理装置20からの送金依頼を受信する処理を行う処理部である。
【0066】
上記のように、送金上限確認部82は、送金依頼において送金元に設定されているアドレスからの送金額が、所定の限度額を超えているか否かを判定する処理を行う処理部である。
送金限度額は、一例には、一つの送金元アドレスからの1回の送金において、送金が可能な最大の仮想通貨の数量(金額)である。
送金上限確認部82は、一つの送金元アドレスからの1回の送金において、送金額が所定の額に至った場合は、限度額に達したと判定する。
また、送金上限確認部82は、1回の送金額が限度額に至らなかった場合でも、1日や数時間など、所定の基準時間内の合計(積算)送金額が所定の額に至った場合は、限度額に達したと判定する。
【0067】
送金上限確認部82によって、1回または累計の送金額が限度額に至ったと判定された場合、上記の時間が経過して制限が解除されるまで、各処理部は署名用トランザクションデータを作成、送信するための処理を行わない。
UTXO探索処理部83は、ブロックチェーンの探索を行わず、署名用トランザクションデータ作成処理部84、署名用トランザクションデータを作成しない。または、データ送受信部87は、署名用トランザクションデータを情報処理装置20に送信しない。
その結果、その送金元アドレスに係る情報処理装置20において電子署名を付与することができず、そのアドレスからの送金は不可能である。
【0068】
一度の送金額、積算の送金額に係わらず、送金限度額(上限値)は、送金元アドレスごとに設定することが出来る。
基準時間や制限時間の計時は、ウォレットサーバ装置40が備えるRTC73を用いて行うことが出来る。
このように、公開鍵ごとに送金限度額を設定することで、それを超えた金額の送金を不可能とし、セキュリティを高めることが出来る。
万が一、秘密鍵が盗まれたとしても、限度額以上の送金を行うことはできず、被害を最小限に抑えることが出来る。
【0069】
UTXO探索処理部83は、ブロックチェーンネットワークを構成するノードから、送金元のアドレスに係る未使用のトランザクションアウトプットの一覧を取得する処理部である。
署名用トランザクションデータ作成処理部84は、署名用トランザクションデータを作成する処理を行う。
上記したように、署名用トランザクションデータは、入力元トランザクションごとのトランザクションID及びIndexと、アウトプット(送金額、ScirptPubKey)とを含むデータであり、送金トランザクションデータからScriptSigを除いた内容と同等のデータである。
ハッシュ処理部85は、署名用トランザクションデータと前トランザクションのScirptPubKeyとにハッシュ処理を行い、電子署名用の値を生成する処理を行う。
送金トランザクション作成処理部86は、情報処理装置20から送信された、署名用トランザクションデータ、電子署名値、公開鍵を含む情報から送金トランザクションを作成する処理を行う処理部である。
特に、送金トランザクション作成処理部86は、受信した電子署名値、公開鍵からScriptSigを生成する。
【0070】
データ送受信部87は、情報処理装置20との間で、署名用トランザクションデータ、送金用トランザクションデータの送受信を行い、作成した送金トランザクションをネットワークに送信(公開)する処理部である。
端末装置10を利用する利用者が、送金後に、送金トランザクションIDをサーバ装置に入力し、そこで、送金額を確認することで、サービスへの課金が成立する。
【0071】
図7は、本実施形態の情報処理装置が実行する仮想通貨送金依頼処理を説明するフローチャートである。
ステップS101において、情報処理装置20のCPU21(送金依頼処理部61)は、送金プログラムにおいて送金依頼操作がされたか否かを判定する。
送金依頼操作が行われたと判定した場合(ステップS101でYes)、CPU21(送金依頼処理部61)は、ステップS102において送金依頼をウォレットサーバ装置40に送信する。
送金依頼操作が行われたと判定しなかった場合(ステップS101でNo)、CPU21(ウォレット制御処理部63)は、ステップS103において、電子署名用の値を、ウォレットサーバ装置40から受信したか否かを判定する。
【0072】
電子署名用の値を受信したと判定した場合(ステップS103でYes)、CPU21(ウォレット制御処理部63)は、ステップS104において、受信した電子署名用の値を、ハードウェアウォレットHWに供給する。
CPU21(ウォレット制御処理部63)は、ステップS105において、ハードウェアウォレットHWで電子署名値の生成が完了したか否かを判定する。
この判定は、ハードウェアウォレットHWのバッファメモリに電子署名値が格納されたか否かを確認することで実行出来る。
【0073】
電子署名値の生成が完了したと判定した場合(ステップS105でYes)、CPU21(ウォレット制御処理部63)は、ステップS106において、ハードウェアウォレットHWのバッファメモリから電子署名値を取得する。
未だ電子署名値の生成が完了していないと判定した場合(ステップS105でNo)、CPU21(ウォレット制御処理部63)は、ステップS105に処理を戻し、電子署名値の生成の完了を待機する。
そして、CPU21(データ送受信処理部62)は、ステップS107において、署名用トランザクションデータと、取得した電子証明書と、公開鍵と、を含む送金用トランザクションデータを、ウォレットサーバ装置40に送信する。
【0074】
図8は、本実施形態のハードウェアウォレットが実行する電子署名値生成処理を説明するフローチャートである。
ハードウェアウォレットHWの処理は、基本的にハードウェア回路によって行われるものであるが、ソフトウェア処理に準じてフローチャートとして説明する。
ハードウェアウォレットHWの制御部71は、ステップS201において、情報処理装置20から、電子署名用の値の入力があったか否かを判定する。
【0075】
電子署名用の値の入力がないと判定した場合(ステップS201でNo)、そのまま処理を終了する。
電子署名用の値の入力があったと判定した場合(ステップS201でYes)制御部71は、ステップS202において、電子署名用の値に基づく電子署名値を生成する。
そして、制御部71は、ステップS203において、生成した電子署名値をバッファメモリに格納し、処理を終了する。
【0076】
図9は、本実施形態のウォレットサーバ装置が実行する仮想通貨送金処理を説明するフローチャートである。
ステップS301において、ウォレットサーバ装置のCPU41(送金依頼受信処理部81)は、情報処理装置20からの送金依頼があったか(送信元アドレス、送金先アドレス、送金額の送信)否かを判定する。
送金依頼があったと判定した場合(ステップS301でYes)、CPU41(送金上限確認処理部82)は、ステップS302において、送金上限確認処理(図11で詳述する)を行う。
そして、CPU41は、ステップS303において、ステップS302の送金上限確認処理で送金元の送金額が、所定の上限値を超えたか(送金制限がかかったか)否かを判定する。これは、ステップS302に対応する図11の処理で立てられるフラグから判断出来る。
【0077】
そして、CPU41は、ステップS303において、送金依頼に含まれる送金額が所定の上限値を超えたか否かを判定する。
上限値を超えた(送金制限がかかった)と判定した場合(ステップS303でYes)、CPU41は、そのまま処理を終了する。署名用トランザクションデータの送信は行われない。
上限値を超えていない(送金制限がかかっていない)と判定した場合(ステップS303でNo)、CPU41(UTXO探索処理部83)は、ステップS304においてブロックチェーンネットワークの探索を開始する。
具体的には、UTXO探索処理部83は受信した送金元アドレスを用いて、ブロックチェーンに記録されているトランザクションを検索し、送金元アドレスに紐付く取引履歴であるトランザクションを検索する。
【0078】
CPU41(UTXO探索処理部83)は、ステップS305において、依頼元(送金元アドレス)に対応するUTXOがあるか否かを判定する。
そのようなUTXOがあると判定した場合(ステップS305でYes)、CPU41(UTXO探索処理部83)は、ステップS306においてUTXOのリストを取得する。
具体的には、UTXO探索処理部83は、検索された送金元アドレスに対応するトランザクションのアウトプットに含まれるUTXOを検索する。そして、UTXO探索処理部83は、送金額と、検索した各UTXOとを比較し、送金額を送金可能であり、且つデータ量がより小さくなる組合せのUTXOを選択する。
UTXO探索処理部83は、選択したUTXOを含むトランザクションのトランザクションIDと、UTXOのIndexとを取得する。また、UTXO探索処理部83は、選択したUTXOをアンロックするための条件が記述されているScriptPubKeyを取得する。
【0079】
CPU41(署名用トランザクションデータ作成処理部84)は、ステップS307において、抽出したUTXOを入力にした署名用トランザクションデータを作成する。
すなわち、署名用トランザクションデータ作成処理部84は、取得したトランザクションID及びIndexと、送金額、送金先アドレスから求められる送金先の公開鍵ハッシュを含むScriptPubKeyを含むアウトプットと、を含む署名用トランザクションデータを作成する。
そして、CPU41(ハッシュ処理部85)は、ステップS308において、署名用トランザクションデータと抽出したScriptPubKeyにハッシュ処理を行い、電子署名用の値を生成する。
【0080】
そして、ステップS309において、CPU41(データ送受信部87)は、署名用トランザクションデータと、電子署名用の値を、依頼元の情報処理装置20に送信する。
ステップS301において、送金依頼がないと判定した場合(ステップS301でNo)、CPU41(データ送受信部87)は、ステップS310において、送金用トランザクションデータを情報処理装置20から受信したか否かを判定する。
送金用トランザクションデータを受信したと判定した場合(ステップS310でYes)、CPU41(送金トランザクション作成処理部86)は、ステップS311において、送金用トランザクションデータに基づいて送金トランザクションの作成を行い、ステップS312において、作成したトランザクションをネットワークに送信する。
【0081】
上記の説明において、一つの送金元アドレスからの送金額が所定の額に至った場合に送金を制限する処理は、ウォレットサーバ装置40において行っている。
ただしそれに限らず、本実施形態において、そのような制限処理は、ハードゥエアウォレットHWで行うようにすることが出来る。
この他の例において、ハードウェアウォレットHWは、情報処理装置20から入力された電子署名用の値から電子署名値を生成するのではなく、情報処理装置20から署名用トランザクションデータそのもの、さらには、前トランザクションのScriptPubKeyのデータを入力される。
【0082】
ウォレットサーバ装置40は、図9のステップS308における署名用トランザクションデータ等に基づく電子署名用の値の生成を行わずともよい。
署名用トランザクションデータと、署名に必要な前トランザクションのScriptPubKeyを情報処理装置20に送信すればよい。
そして、上記したハードウェアウォレットHWのハッシュ値演算処理部74は、署名用トランザクションデータ、ScriptPubKeyに基づいて演算した署名用のハッシュ値を暗号化する。
電子署名処理部75は、この署名用のハッシュ値を用いて電子署名値を生成する。
ハードウェアウォレットHWで送金額の上限確認及び送金制限を行う場合でも、ウォレットサーバ装置40を同様の処理を行うことは制限されない。
【0083】
ハードウェアウォレットHWが備える送金上限確認部78(図5(b))は、署名用トランザクションデータに含まれる、送金元アドレスからの送金額が所定の限度額を超えているか否かを判定する処理を行う。
送金限度額は、一例には、一つの送金元アドレスからの1回の送金において、送金が可能な最大の仮想通貨の数量(金額)である。
送金上限確認部78は、一つの送金元アドレスからの1回の送金において、送金額が所定の額に至った場合は、限度額に達したと判定する。
また、送金上限確認部78は、1回の送金額が限度額に至らなかった場合でも、1日や数時間など、所定の基準時間内の合計(積算)送金額が所定の額に至った場合は、限度額に達したと判定する。
【0084】
送金上限確認部78によって、1回または累計の送金額が限度額に至ったと判定された場合、ハッシュ値演算処理部74は、上記の時間が経過して制限が解除されるまで、入力されたトランザクションデータのハッシュ値を算出する処理を行わない。当然、電子署名生成処理部75も、ハッシュ値を用いた電子署名値の生成処理を行わない。
その結果、そのアドレスに係る情報処理装置20(ハードウェアウォレットHW)において電子署名を付与することができず、そのアドレスからの送金は不可能である。
一度の送金の場合も、複数の送金の累計額の場合も、送金限度額(上限値)は、アドレス毎に設定することが出来る。基準時間や制限時間の計時は、RTC73を用いて行うことが出来る。
【0085】
このように、ハードウェアウォレットHWでは、公開鍵ごとに送金限度額を設定することで、それを超えた金額の送金を不可能とし、セキュリティを高めることが出来る。
万が一、秘密鍵が盗まれたとしても、限度額以上の送金を行うことはできず、被害を最小限に抑えることが出来る。
【0086】
図10は、本実施形態のハードウェアウォレットが実行する電子署名値生成処理の他の例を説明するフローチャートである。
ハードウェアウォレットHWの処理は、基本的にハードウェア回路によって行われるものであるが、ソフトウェア処理に準じてフローチャートとして説明する。
ハードウェアウォレットHWの制御部71は、ステップS351において、情報処理装置20から署名用トランザクションデータ及び前トランザクションのScriptPubKeyの入力があったか否かを判定する。
【0087】
署名用トランザクションデータ等の入力がないと判定した場合(ステップS351でNo)、そのまま処理を終了する。
署名用トランザクションデータ等の入力があったと判定した場合(ステップS351でYes)、制御部71は、ステップS352において、送金上限確認処理(図11で詳述する)を行う。
【0088】
そして、制御部71は、ステップS353において、ステップS352の送金上限確認処理で送金元の送金額が所定の上限値を超えたか(送金制限がかかったか)否かを判定する。これは、ステップS352に対応する図11の処理で立てられるフラグから判断出来る。
上限値を超えた(送金制限がかかった)と判定した場合(ステップS353でYes)、制御部71は、そのまま処理を終了する。
上限値を超えていない(送金制限がかかっていない)とした場合(ステップS353でNo)、制御部71は、ステップS354において署名用トランザクションデータと前トランザクションのScriptPubKeyとのハッシュ値を算出する。
【0089】
次に、制御部71は、ステップS355において、ハッシュ値に基づく電子署名値を生成する。
そして、制御部71は、ステップS356において、生成した電子署名値をバッファメモリに格納し、処理を終了する。
【0090】
図11は、ハードウェアウォレット又はウォレットサーバ装置で実行される送金上限確認処理(送金制限処理)を説明するフローチャートである。
図10において、ウォレットサーバ装置のCPU41による処理として説明するが、ハードウェアウォレットの制御部によっても同様に実行出来る。
CPU41(送金上限確認処理部)は、ステップS401において、現在送金制限中であるか否かを判定する。
制限中ではないと判定した場合(ステップS401でNo)、CPU41は、ステップS402において、今回の送金額が所定額以上であるか否かを判定する。
特定の送金元アドレスからの送金額は、ウォレットサーバ装置での送金確認処理では、送金依頼から知りうる。
また、ウォレットサーバ装置の送金確認処理では、特定の送金元アドレスからの送金額は署名用トランザクションデータから知りうる。
【0091】
送金額が所定額以上であると判定した場合(ステップS401でYes)、CPU41は、ステップS403において、制限開始を示すフラグ1を記憶領域にセットし、ステップS404において、制限時間の計時を開始する。
送金額が所定額以上ではないと判定した場合、(ステップS402でNo)、CPU41は、ステップS405において、前回までの積算値があるか否かを判定する。
積算値がないと判定した場合(ステップS405でNo)、CPU41は、ステップS410において、送金額の積算を開始し、ステップS411において、基準時間の計時を開始する。
【0092】
ステップS405において積算値があると判定した場合(ステップS405でYes)、CPU41は、ステップS406において基準時間が経過したか否かを判定する。
基準時間が経過していないと判定した場合(ステップS406でNo)、CPU41は、ステップS407において、今回の額の積算を行って、累計額が所定額以上になったか否かを判定する。
所定額以上となったと判定した場合(ステップS407でYes)、CPU41は、ステップS403に処理を移し、制限開始を示すフラグ1を記憶領域にセットし、ステップS404において、制限時間の計時を開始する。
ステップS406において、基準時間が経過したと判定した場合(ステップS406でYes)、CPU41は、ステップS408において累計額をリセットし、ステップS409において、基準時間もリセットする。
ステップS407において、累計額が所定額以上ではないと判定した場合、CPU41は何もせずに処理を終了する。
【0093】
ステップS401において、制限中であると判定した場合(ステップS401でYes)、CPU41は、ステップS412において、制限時間が終了したか否かを判定する。制限時間が終了したと判定した場合(ステップS412でYes)、CPU41は、ステップS413において、送金制限を終了し、ステップS414において、制限時間の計時をリセットする。
このような処理を行うことにより、万が一、暗号鍵が流出することとなっても、悪意ある第三者に大量の暗号通貨を盗まれるという危険性がなくなる。
また、図11のように、複数回に亘る送金の合計額に基づいて送金を規制するのではなく、単純に、1回の送金における送金額に規制を設けるようにしてもよい。
すなわち、ステップS401~ステップS404、ステップS412、ステップS413の処理のみを行い、ステップS412でNoと判定した場合には、そのまま処理を終了する。このようにすることで、よりシンプル且つ的確に、真正の所有者自身の使い勝手を損なうことなく大量の暗号通貨が盗まれることを防ぐことが出来る。
【符号の説明】
【0094】
1 仮想通貨システム、10 端末装置、20 情報処理装置、21 CPU、22 RAM、23 ドライブ装置、24 記録媒体、25 ネットワークI/F、26 IO I/F、27 入力装置、28 表示装置、30 マイナー装置、40 ウォレットサーバ装置、41 CPU、42 RAM、43 HDD、44 ネットワークI/F、50 マイナー装置、70 入出力部、71 制御部、72a 秘密鍵格納部、72b バッファ、72c パスワード格納部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11