(57)【要約】      （修正有）【課題】仮想通貨の使用時に必要な電子署名をより安全に生成して仮想通貨の安全性を高め得るハードウェアウォレット及び仮想通貨システムを提供する。【解決手段】ハードウェアウォレットは、送金額を含む取引データと電子署名とを含む仮想通貨の送金情報を用いた暗号通貨の送金に係る処理を行う情報処理装置に着脱可能に接続される。ハードウェアウォレットは、秘密鍵を記憶する秘密鍵格納部７２ａと、情報処理装置に接続される入出力部７０と、ハードウェアウォレットが情報処理装置に接続され状態で情報処理装置から取引データが入力されたとき、取引データに基づく署名用の値と、秘密鍵と、を用いて電子署名を生成する署名処理部７５と、を備える。署名処理部７５は、取引データに含まれる送金額が所定の条件を満たす場合に、電子署名の生成を実行する。【選択図】図５
2020031268.tif 000002
【特許請求の範囲】
【請求項１】
送金額を含む取引データと電子署名とを含む仮想通貨の送金情報を作成する送金サーバ装置と、
前記取引データを前記送金サーバ装置から供給されて前記電子署名を前記送金サーバ装置に対して供給する情報処理装置に接続され、前記取引データを用いて前記電子署名を生成する署名装置と、を備える仮想通貨システムであって、
前記署名装置は、
秘密鍵を記憶する記憶部と、
前記署名装置が前記情報処理装置に接続された状態で、前記取引データに基づく署名用の値と、前記秘密鍵と、を用いて前記電子署名を生成する署名生成部と、を備え、
前記送金サーバは、
前記情報処理装置からの要求に基づいて、前記取引データを作成して前記情報処理装置に送信する取引データ送信処理部を備え、
前記取引データ送信処理部は、前記送金額が所定の条件を満たすことを条件に前記取引データを前記情報処理装置に送信することを特徴とする仮想通貨システム。
【請求項２】
送金額を含む取引データと電子署名とを含む送金情報を用いた仮想通貨の送金に係る処理を行う情報処理装置に接続され、前記取引データを用いて前記電子署名を生成する署名装置であって、
秘密鍵を記憶する記憶部と、
前記署名装置が前記情報処理装置に接続された状態で、前記取引データに基づく署名用の値と、前記秘密鍵と、を用いて前記電子署名を生成する署名生成部と、を備え、
前記署名生成部は、前記送金額が所定の条件を満たすことを条件に前記電子署名の生成を実行することを特徴とする署名装置。
【請求項３】
仮想通貨の送金に係る処理を行う情報処理装置に接続され、電子署名を生成する署名装置であって、
秘密鍵およびパスワードのハッシュ値を記憶する記憶部と、
前記情報処理装置から取引データに基づく署名用の値が入力されたとき、前記署名用の値と前記秘密鍵とを用いて前記電子署名を生成する署名生成部と、を備え、
前記署名生成部は、パスワードが入力されたとき、前記記憶部に記憶される前記パスワードのハッシュ値が前記入力されたパスワードのハッシュ値と一致することを条件に前記電子署名の生成を実行することを特徴とする署名装置。
【請求項４】
仮想通貨の送金に係る処理を行う情報処理装置に接続され、電子署名を生成する署名装置であって、
パスワードに第１ハッシュ関数を適用して得られた第１ハッシュ値と、前記パスワードに第２ハッシュ関数を適用して得られた第２ハッシュ値を用いて暗号化された秘密鍵と、を記憶する記憶部と、
前記情報処理装置から取引データに基づく署名用の値が入力されたとき、前記署名用の値と前記秘密鍵とを用いて前記電子署名を生成する署名生成部と、を備え、
前記署名生成部は、パスワードが入力されたとき、前記入力されたパスワードに第１ハッシュ関数を適用して第３ハッシュ値を算出し、前記第１ハッシュ値と前記第３ハッシュ値とが一致したとき、前記入力されたパスワードに前記第２ハッシュ関数を適用して第２ハッシュ値を算出し、前記第２ハッシュ値を用いて前記暗号化された秘密鍵を復号し、前記秘密鍵と前記署名用の値とを用いて前記電子署名の生成を実行することを特徴とする署名装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想通貨に関し、より詳細には仮想通貨の使用に必要な電子署名値を生成する署名装置、及びそれを含む仮想通貨システムに関する。
【背景技術】
【０００２】
近年、Ｐ２Ｐネットワーク上で分散型台帳管理を実現するブロックチェーンと呼ばれる技術が知られている。
そして、このブロックチェーンを取引の台帳として活用した仮想通貨（暗号通貨）が知られており、現金に代わる新たな決算手段や送金手段などに用いられてきている。
ブロックチェーンを用いた仮想通貨において、秘密鍵を用いて電子署名を付したトランザクションをユーザがＰ２Ｐネットワークに送信すると、そのトランザクションはノードのトランザクションプールに溜め置かれる。
そして、ノードが、トランザクションプール内のトランザクションを検証し、正当なトランザクションをブロックに組み込む処理が行われている（特許文献１、２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−２１８６３３公報
【特許文献２】特開２０１６−２００９５４公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
秘密鍵は、例えば、ウォレットと呼ばれるソフトウェアによって管理されている。ウォレットは、ブロックチェーンのノードに内包されており、常にネットワークに接続された状態にある。このような状態にあるウォレットをホットウォレットという。
そのため、ウォレットを実行するノードがクラッキングを受けることで秘密鍵が悪意の第三者に流出すると、その第三者は、秘密鍵を用いて電子署名を自由に生成し、自身のアドレスに対して仮想通貨を送金することが可能となる。その結果、仮想通貨が盗まれる恐れがある、という問題があった。
本発明は、上記の問題点を鑑みてなされたものであり、仮想通貨の使用時に必要な電子署名をより安全に生成して仮想通貨の安全性を高め得る署名装置及び仮想通貨システムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、上述の課題を解決するためになされたものであり、以下の形態により実現することが可能である。
本発明に係る第１の形態は、送金額を含む取引データと電子署名とを含む仮想通貨の送金情報を作成する送金サーバ装置と、前記取引データを前記送金サーバ装置から供給されて前記電子署名を前記送金サーバ装置に対して供給する情報処理装置に接続され、前記取引データを用いて前記電子署名を生成する署名装置と、を備える仮想通貨システムであって、前記署名装置は、秘密鍵を記憶する記憶部と、前記署名装置が前記情報処理装置に接続された状態で、前記取引データに基づく署名用の値と、前記秘密鍵と、を用いて前記電子署名を生成する署名生成部と、を備え、前記送金サーバは、前記情報処理装置からの要求に基づいて、前記取引データを作成して前記情報処理装置に送信する取引データ送信処理部を備え、前記取引データ送信処理部は、前記送金額が所定の条件を満たすことを条件に前記取引データを前記情報処理装置に送信する仮想通貨システムを特徴とする。
【０００６】
本発明に係る第２の形態は、送金額を含む取引データと電子署名とを含む送金情報を用いた仮想通貨の送金に係る処理を行う情報処理装置に接続され、前記取引データを用いて前記電子署名を生成する署名装置であって、秘密鍵を記憶する記憶部と、前記署名装置が前記情報処理装置に接続された状態で、前記取引データに基づく署名用の値と、前記秘密鍵と、を用いて前記電子署名を生成する署名生成部と、を備え、前記署名生成部は、前記送金額が所定の条件を満たすことを条件に前記電子署名の生成を実行する署名装置を特徴とする。
本発明に係る第３の形態は、仮想通貨の送金に係る処理を行う情報処理装置に接続され、電子署名を生成する署名装置であって、秘密鍵およびパスワードのハッシュ値を記憶する記憶部と、前記情報処理装置から取引データに基づく署名用の値が入力されたとき、前記署名用の値と前記秘密鍵とを用いて前記電子署名を生成する署名生成部と、を備え、前記署名生成部は、パスワードが入力されたとき、前記記憶部に記憶される前記パスワードのハッシュ値が前記入力されたパスワードのハッシュ値と一致することを条件に前記電子署名の生成を実行する署名装置を特徴とする。
【０００７】
本発明に係る第４の形態は、仮想通貨の送金に係る処理を行う情報処理装置に接続され、電子署名を生成する署名装置であって、パスワードに第１ハッシュ関数を適用して得られた第１ハッシュ値と、前記パスワードに第２ハッシュ関数を適用して得られた第２ハッシュ値を用いて暗号化された秘密鍵と、を記憶する記憶部と、前記情報処理装置から取引データに基づく署名用の値が入力されたとき、前記署名用の値と前記秘密鍵とを用いて前記電子署名を生成する署名生成部と、を備え、前記署名生成部は、パスワードが入力されたとき、前記入力されたパスワードに第１ハッシュ関数を適用して第３ハッシュ値を算出し、前記第１ハッシュ値と前記第３ハッシュ値とが一致したとき、前記入力されたパスワードに前記第２ハッシュ関数を適用して第２ハッシュ値を算出し、前記第２ハッシュ値を用いて前記暗号化された秘密鍵を復号し、前記秘密鍵と前記署名用の値とを用いて前記電子署名の生成を実行する署名装置を特徴とする。
【０００８】
以上のように構成したので、本発明によれば、仮想通貨の使用（送金）時に必要な電子署名をより安全に生成するとともに、仮想通貨の安全性を高め得る署名装置及び仮想通貨システムを実現することが出来る。
【図面の簡単な説明】
【０００９】
【図１】本実施形態にかかるシステムの構成を示す概略図である。
【図２】仮想通貨のトランザクションを概説するための図である。
【図３】本実施形態のシステムにおける処理の流れを説明する図である。
【図４】本実施形態に係る情報処理装置の機能構成を示す図である。
【図５】本実施形態に係るハードウェアウォレットの構成を説明する図である。
【図６】本実施形態に係るウォレットサーバ装置の機能構成を示す図である。
【図７】本実施形態の情報処理装置が実行する仮想通貨送金依頼処理を説明するフローチャートである。
【図８】本実施形態のハードウェアウォレットが実行する電子署名値生成処理を説明するフローチャートである。
【図９】本実施形態のウォレットサーバ装置が実行する仮想通貨送金処理を説明するフローチャートである。
【図１０】本実施形態のハードウェアウォレットが実行する電子署名値生成処理の他の例を説明するフローチャートである。
【図１１】ハードウェアウォレット又はウォレットサーバ装置で実行される送金上限確認処理（送金制限処理）を説明するフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
本実施の形態では、一例として、ソーシャルゲームなどのインターネット上のサービスに対して、利用者がその利用の対価を仮想通貨で支払う状況を説明する。
利用者は、サービスの利用に当たって、運営会社が所持するウォレットのアドレスに対して仮想通貨の送金を行う。
送金された仮想通貨は未使用のＵＴＸＯ（Ｕｎｓｐｅｎｔ  Ｔｒａｎｓａｃｔｉｏｎ  Ｏｕｔｐｕｔ）としてネットワーク上に存在しており、送金を受けた運営会社は送金された仮想通貨を利用するために、自らの電子署名によってこれをアンロックする必要がある。仮想通貨の利用とは、例えば、仮想通貨の送金のことである。
【００１１】
本実施形態の発明は、この電子署名を安全に生成することが出来る署名装置、及びそれを含む仮想通貨システムに係るものである。
なお、本実施形態で説明するサービスを提供する運営会社の説明は、あくまで一例であり、仮想通貨を送金された仮想通貨を、一個人や企業がアンロックして利用するために必要な電子署名を生成する場合にも適用可能である。
【００１２】
図１は、本実施形態にかかるシステムの構成を示す概略図である。
図１（ａ）は、本実施形態のシステムを構成する装置を含むネットワークの構成を示す概略図である。
本実施形態に係るシステム１において、複数の利用者の利用に係る端末装置１０と、ソーシャルゲーム等のサービスを提供する運営会社が利用する情報処理装置２０と、情報処理装置２０からの送金依頼に基づいて送金トランザクションを作成、公開するウォレットサーバ装置４０と、ブロックチェーンネットワークに参加してマイニング作業を行うマイナーが用いる多数のマイナー装置３０、とがインターネットに接続されている。マイニングのコンセンサスアルゴリズムには、例えば、Ｐｒｏｏｆ  ｏｆ  Ｗｏｒｋ（ＰｏＷ）、Ｐｒｏｏｆ  ｏｆ  Ｓｔａｋｅ（ＰｏＳ）、及びＰｒｏｏｆ  ｏｆ  Ｉｍｐｏｒｔａｎｃｅ（ＰｏＩ）などがある。以下の説明では、Ｐｒｏｏｆ  ｏｆ  Ｗｏｒｋのことを、プルーフオブワークともいう。
ウォレットサーバ装置４０は、仮想通貨の送金に必要な機能をＡｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ（ＡＰＩ）として外部の情報処理装置２０に提供する。情報処理装置２０の利用者は、ブロックチェーンや仮想通貨についての知識を有さずとも、ウォレットサーバ装置４０を介することで容易に仮想通貨を用いたサービス課金や、送金された仮想通貨の利用を行うことが出来る。
【００１３】
また、多数のマイナー装置３０ｘ（３０ｘ−１、３０ｘ−２・・・）やクライアント装置によってブロックチェーンネットワークｘが構成され、多数のマイナー装置３０ｙ（３０ｙ−１、３０ｙ−２・・・）やクライアント装置によってブロックチェーンネットワークｙが構成されている。
これらのブロックチェーンネットワークは、Ｐ２Ｐ（Ｐｅｅｒ  ｔｏ  Ｐｅｅｒ）ネットワークであり、ブロックチェーンネットワークｘは仮想通貨Ｘのネットワーク、ブロックチェーンネットワークｙは仮想通貨Ｙのネットワークである。
【００１４】
ブロックチェーンには、仮想通貨に用いられるものを含め、多くのものが存在している。仮想通貨にも、代表的なビットコインの他に、アルトコインと呼ばれるものが知られている。アルトコインの代表的なものとして、Ｅｔｈｅｒｅｕｍ（イーサリアム）やＭｏｎａｃｏｉｎ（モナコイン：登録商標）などが知られている。
【００１５】
インターネット上においてはビットコインを運営、機能させるためのブロックチェーンネットワークや、各種アルトコインの運営、機能させるためのブロックチェーンネットワークが存在する。
各ブロックチェーンネットワークには、それぞれマイナー装置３０が多く接続されて、プルーフオブワーク作業を行っている。また、ブロックチェーンネットワーク（仮想通貨）によっては、マイニングとしてプルーフオブワーク作業を行わないものもある。
【００１６】
いずれの場合においても、ブロックチェーンネットワークは、中央集権的なサーバを持たないＰ２Ｐネットワークである。ブロックチェーンでは、ブロックチェーンネットワークに属するそれぞれのマイナー装置が有するストレージやサーバ装置、プールサーバに備えるストレージに、同じものが格納されている。ブロックチェーンが、分散型取引台帳と呼ばれる所以である。
【００１７】
図１（ｂ）は、ブロックチェーンネットワークに属する装置が有するブロックチェーンを示す図である。
図１（ｂ）を用いて、ブロックチェーンの概略を説明する。
ブロックチェーンは、逐次発生する取引情報などをブロック単位で接続することにより成立する。
すなわち、ブロックチェーン技術では、取引記録や契約など、内容を保証したいデータ（の集合）をブロックという単位で扱う。このブロックを所定の方法で一繋ぎすなわちチェーン状に接続したものがブロックチェーンである。ブロックチェーンの生成にあたってはハッシュ関数が用いられており、ハッシュ関数は任意長の任意データに対して固定長のハッシュ値を求めるための関数である。
ハッシュ関数には一方向性という特徴があり、任意データからハッシュ値を求めることは容易であるが、逆に、ハッシュ値から元のデータを復元することは現実的には不可能であるとされる。
【００１８】
ブロックチェーンに対して新たなブロックを接続するためには、チェーンにおける直前のブロックのハッシュ値と、接続すべき新たなブロックのトランザクションデータを１まとめにしたマークルルートと呼ばれるデータ、Ｎｏｎｃｅ値と呼ばれる数値（例えば３２ｂｉｔ固定長数値）を接続したデータに対してハッシュ値（例えば、ＳＨＡ−２５６ハッシュ）を計算した時にその上位数ビット（例えば１０Ｂｉｔ）が０となるような、Ｎｏｎｃｅ値を求める。
【００１９】
ＳＨＡ−２５６ハッシュ値は、ほぼランダムな２５６ｂｉｔの値となるため、あるＮｏｎｃｅ値を選んだ時に上位１０ｂｉｔが０となる確率は１０２４分の１となるが、上記したハッシュ関数の一方向性によって、基本的に、全てのＮｏｎｃｅ値に対して総当たりで、上記のハッシュ値の上位ビットが０となるか否かを検証するより他に方法がない。この総当たりでの検証を行って、ハッシュ値の上位ビットが０となるＮｏｎｃｅ値を見つけ、報告してブロックを承認する作業は、コンセンサスアルゴリズムにプルーフオブワークを用いたマイニング作業である。
その結果、図１（ｂ）に示すように、ブロックチェーンの各ブロックは、そのブロックのデータと、直前のブロックのハッシュ値と、Ｎｏｎｃｅ値と、を含んでいる。
【００２０】
このようなブロックチェーンは、各ブロックが直前のブロックのハッシュ値を持っているため、先端の（起点となる最古の）ブロックから順に辿ることで、全てのブロックの正当性を確認することが出来る。
なお途中のブロックを改ざんしようとすると、そのブロック以降全てのブロックのＮｏｎｃｅ値を再計算する必要があるが、上記した総当たりを全てのブロックについて行うしかないため、計算量的に不可能である。
このような特徴を有することで、ブロックチェーンの信頼性は担保されている。
【００２１】
なお、本明細書において、仮想通貨を送金するとは、あくまで便宜的な表現である。
ビットコインをはじめとした仮想通貨においては、仮想通貨の送金は、ネットワーク上に分散して記録される所定単位の仮想通貨（通貨価値）を、利用者の公開鍵あるいは公開鍵ハッシュとしてのアドレスによってロックする処理である。
ＵＴＸＯは、未使用のトランザクションアウトプットであり、仮想通貨の取引を記述したトランザクションにおいて、他のトランザクションと未だ接続されていないアウトプットである。そして、ＵＴＸＯは、所有者の公開鍵を記載したＳｃｒｉｐｔＰｕｂＫｅｙを含んでいる。
ＵＴＸＯをロックしている公開鍵の所有者がＵＴＸＯの所有者であり、当該ＵＴＸＯが、その所有者が所有する仮想通貨の残高である。
【００２２】
仮想通貨の送金とは、直前の所有者の公開鍵、あるいは公開鍵ハッシュによってロックされているＵＴＸＯを、上記直前の所有者が生成した電子署名によってアンロックすることで、新たに作成したトランザクションと接続し、その新たに作成したトランザクションのＵＴＸＯを、次の所有者の公開鍵、あるいは公開鍵ハッシュによって再度ロックする処理である。
そして、このトランザクションをブロックチェーンネットワークに対してブロードキャストし、トランザクションが承認されてブロックチェーンに組み込まれることで送金（ＵＴＸＯの所有権の移転）が行われる。
【００２３】
仮想通貨の送金は、ＵＴＸＯをアンロックして新たなトランザクションと接続し、その新たなトランザクションを新たなブロックの一部として承認する処理である。従って、仮想通貨の送金において、何らかの価値情報がデータとして利用者の端末装置間でやりとりされることはない。また、端末装置内に、仮想通貨の残高を示す情報が格納されることはない。
端末装置にインストールされたウォレットは、利用者の公開鍵あるいは公開鍵ハッシュに紐付けられたＵＴＸＯをブロックチェーンネットワークから検索することによって、利用者が有する仮想通貨の残高を利用者に提示することが出来る。
【００２４】
図２は、仮想通貨のトランザクションを概説するための図であり、（ａ）はトランザクションの基本的な構成を概念で示す図、（ｂ）は、前トランザクションに対して、新規トランザクションを接続したときの状態を示す図である。
トランザクションは、送金元から送金先への通貨価値の移転を記述したものであり、図２（ａ）に示すように、送金元を示すフィールドであるインプットと、送金先を示すフィールドであるアウトプットと、を有する。
また、アウトプットは、送金額と、ＳｃｉｒｐｔＰｕｂＫｅｙとを含む。
ＳｃｒｉｐｔＰｕｂＫｅｙは、このトランザクションに含まれるＵＴＸＯをアンロックするための条件を定義したスクリプトである。
ＳｃｒｉｐｔＰｕｂＫｅｙには、特定の秘密鍵による電子署名によってアンロックが可能となるようなスクリプトが記述されている。従って、仮想通貨の所有権が、該当する秘密鍵を所有する利用者のものとなる。
インプットは、ＵＴＸＯを使うために、ＳｃｒｉｐｔＳｉｇと呼ばれるＵＴＸＯのロックを解除するためのスクリプトを含む。ＳｃｒｉｐｔＳｉｇは主に、ＳｃｒｉｐｔＰｕｂＫｅｙで要求されるＵＴＸＯのアンロックのための電子署名である。
【００２５】
図２（ｂ）に示すように、前トランザクションにおいてＩｎｄｅｘ０で特定されるＳｃｉｒｐｔＰｕｂＫｅｙに対応するアウトプットに、新規トランザクションが接続されている。
Ｉｎｄｅｘ１で特定されるＳｃｉｒｐｔＰｕｂＫｅｙに対応するアウトプットには、新規トランザクションが接続されていないため、当該アウトプットは、ＵＴＸＯのままである。
【００２６】
新規トランザクションのインプットは、ＳｃｒｉｔＳｉｇと、トランザクションハッシュと、Ｉｎｄｅｘとを含む。ＳｃｒｉｔＳｉｇは、前トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙで求められる新規トランザクションを接続する利用者の電子署名を含む。トランザクションハッシュは、前トランザクション全体のハッシュ値であり、接続先の前トランザクションを識別するためのトランザクションＩＤとして用いられる。
Ｉｎｄｅｘは、前トランザクションにおける接続先のＳｃｒｉｐｔＰｕｂＫｅｙを特定するための識別子である。
新規トランザクションのアウトプットは、新規トランザクションのＵＴＸＯを、送金先の利用者のアドレスにロックするためのＳｃｒｉｐｔＰｕｂＫｅｙが含まれる。ＳｃｒｉｐｔＰｕｂＫｅｙは、送金先の利用者の公開鍵にハッシュ関数を適用した公開鍵ハッシュを含む。
新規トランザクションのインプットに付される電子署名は、新規トランザクションのＳｃｒｉｐｔＳｉｇを除くデータと、前トランザクションにおける接続されたＳｃｒｉｐｔＰｕｂＫｅｙと、のハッシュ値を、秘密鍵を用いて暗号化することで生成される。
【００２７】
図３は、本実施形態のシステムにおける処理の流れを説明する図である。
なお、以下の説明において、アドレスとは、ハッシュ関数を用いて公開鍵を変換した公開鍵ハッシュである。
Ｐａｙ−ｔｏ−Ｐｕｂｌｉｃ−Ｋｅｙ−Ｈａｓｈ（Ｐ２ＰＫＨ）と呼ばれる仮想通貨の送金方式では、公開鍵ハッシュとしてのアドレスに対してＵＴＸＯをロックし、公開鍵と、それに対応する電子署名を用いてＵＴＸＯをアンロックする。本実施形態では、このＰ２ＰＫＨ方式に基づいて説明を行う。
一方で、Ｐａｙ−ｔｏ−Ｐｕｂｌｉｃ−Ｋｅｙ（Ｐ２ＰＫ）と呼ばれる送金方式も存在する。このＰ２ＰＫ方式では、ＵＴＸＯを公開鍵そのものでロックしている。そして、ＵＴＸＯは、公開鍵に対応する電子署名でアンロックすることが出来る。従って、Ｐ２ＰＫ方式が採用される場合には、公開鍵自体がアドレスであると見なすことも出来る。
【００２８】
運営会社は、サービスの提供開始前に新たにウォレットに対応するアドレスと秘密鍵を作成する。
アドレスを作成するにあたり、まず、ハードウェアウォレットＨＷに格納されている秘密鍵を用いて公開鍵が生成される。そして、生成された公開鍵に対してハッシュ関数が適用されることにより、公開鍵ハッシュが生成される。アドレスは、この公開鍵ハッシュを用いて生成される。
そして、公開鍵をサービス利用者に公開し、秘密鍵をハードウェアウォレットＨＷなど、情報処理装置２０から物理的に隔離された場所に格納する。このようなウォレットの形態をコールドウォレットと呼ぶ。逆に、常にオンラインに接続されるＰＣ等に秘密鍵を格納する形態をホットウォレットと呼ぶ。
ハードウェアウォレットＨＷは、運営会社のＰＣに備わるＵＳＢ  Ｉ／Ｆに接続されるＵＳＢドングルとして提供されうる。
【００２９】
サービスの運営開始後、端末装置１０を利用するサービス利用者は、運営会社のアドレスに対して、アイテム使用料等として仮想通貨の送金を行うためのトランザクションを作成、公開し、そのトランザクションのトランザクションＩＤを、例えばサービスが提供されているサービス提供サーバ装置に送付する。トランザクションＩＤは、運営会社の情報処理装置に送付されてもよい。
運営会社では、送付されたトランザクションＩＤの正当性を確認し、正当であればユーザアカウントにアイテムを付与する。このようにして、仮想通貨を用いたアイテム課金及びアイテム付与が実現される。
【００３０】
サービス利用者によって運営会社のアドレスあてに仮想通貨が送金されたあと、運営会社が受け取った仮想通貨を利用する場合、本実施形態では、以下のような作業が行われる。
運営会社は、仮想通貨の送金を行わないときには、秘密鍵を格納したハードウェアウォレットＨＷを金庫などの物理的に安全が確保される場所に保管する。
後述するが、本実施形態のハードウェアウォレットＨＷは、暗号鍵を保持するのみならず、外部から入力されるトランザクションデータのハッシュ値と、暗号鍵を用いて電子署名値を生成することが出来る。
金庫で保管されるハードウェアウォレットＨＷは、当然、運営会社の情報処理装置２０に接続されておらず、ネットワークからのクラッキングのリスクからは遮断されている。
【００３１】
そして、運営会社は、出金等の作業を行うタイミングでハードウェアウォレットＨＷを金庫などから取り出して情報処理装置２０に接続する。情報処理装置２０は、ハードウェアウォレットが接続されると、ハードウェアウォレットＨＷを用いて電子署名を生成する。そして、情報処理装置２０は、送金プログラムを用いて送金処理を実行する。
送金プログラムはＷｉｎｄｏｗｓ（登録商標）あるいはｍａｃＯＳ（登録商標）が動作する通常の構成のＰＣで動作する。すなわち、情報処理装置２０は汎用のコンピュータである。
【００３２】
本実施形態において仮想通貨の送金を行う場合、ネットワーク上に点在する送金者のアドレスにロックされているＵＴＸＯを収集し、送金トランザクションのインプットに接続することで、未使用の仮想通貨の残高を送金する。
送金額と送金金額の余剰、送金先は、送金トランザクションのアウトプットに記載される。
送金トランザクションのインプットには、入力トランザクションの出力スクリプトと送金トランザクションの入力スクリプトから計算するトランザクションのハッシュ値に対する電子署名が含まれる。
ウォレットサーバ４０は、例えば、トランザクションのＳｃｒｉｐｔＳｉｇを除くデータと、前トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙとを用いて得られる値のハッシュ値（以下、電子署名用の値ともいう。）を生成する。そして、ウォレットサーバ４０は、生成した電子署名用の値を情報処理装置２０に送信する。情報処理装置２０は、電子署名用の値を受信し、ハードウェアウォレットＨＷが接続されると、受信した電子署名用の値をハードウェアウォレットＨＷに入力する。そして、ハードウェアウォレットＨＷは、入力された電子署名用の値を用いて電子署名を生成する。
【００３３】
本実施形態における仮想通貨の送金処理の流れを説明する。
本実施形態では、運営会社が仮想通貨の送金（サービス利用者の送金に係るＵＴＸＯの利用）を行う場合、（１）において、運営会社の情報処理装置２０がウォレットサーバ装置４０に対して、送金トランザクションの作成を依頼する。すなわち、情報処理装置２０がウォレットサーバ装置４０に対して送金依頼を行う。
運営会社の情報処理装置２０は、送金依頼として、ウォレットサーバ装置４０に対して送金元アドレスと、送金先アドレスと、送金額とを送信する。換言すると、情報処理装置２０は、送金元アドレスと送金先アドレスと送金額とを含む送金依頼をウォレットサーバに送信する。送金元アドレスは、運営会社のアドレスである。
この送金依頼は、利用可能なＵＴＸＯの一覧を取得して送金元アドレスからいくら送金出来るかを問い合わせることでもある。
ここで、送金元アドレスは、運営会社が、サービス利用者の課金のために用意した公開鍵に基づくアドレスである。従って、運営会社宛に行われた送金に係るＵＴＸＯの送金先アドレスは、この送金元アドレスと一致する。
【００３４】
ウォレットサーバ装置４０は、受け取った送金元アドレスをキーにブロックチェーンを探索することにより、運営会社に宛てられたＵＴＸＯを見つけ出すことが出来る。
すなわち、送金依頼を受信したウォレットサーバ装置４０は、（２）において、ブロックチェーンネットワークを構成するノードサーバＮＤに問い合わせ、送金元アドレスに係るＵＴＸＯを収集する。
そして、ウォレットサーバ装置４０は、ノードサーバＮＤからの情報に基づいて、送金額に対応するインプットを接続し（ＵＴＸＯを有する１以上のトランザクションを入力とし）、（おつりを含む）送金額と手数料とを出力とした新規のトランザクションデータ（１つ以上の入力元トランザクションのトランザクションＩＤ、送金額を含む送金トランザクションのアウトプット）を作成する。このトランザクションデータは、すなわち、ハードウェアウォレットＨＷにおける電子署名値の生成に用いられる署名用トランザクションデータであり、送金トランザクションからＳｃｒｉｐｔＳｉｇを除いたデータである。ウォレットサーバ装置４０は、署名用トランザクションデータと、元トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙのハッシュ値を演算して電子署名用の値を生成する。
より詳しくは、ウォレットサーバ装置４０は、送金元アドレスと送金額とを情報処理装置２０から受信すると、受信した送金元アドレスを用いて、ブロックチェーンに記録されているトランザクションを検索し、送金元アドレスに紐付く取引履歴であるトランザクションを検索する。
【００３５】
さらに、ウォレットサーバ装置４０は、検索された各トランザクションのアウトプットに含まれるＵＴＸＯを検索する。そして、ウォレットサーバ装置４０は、送金額と、検索した各ＵＴＸＯとを比較し、送金額を送金可能であり、且つデータ量がより小さくなる組合せのＵＴＸＯを選択する。
ウォレットサーバ装置４０は、選択したＵＴＸＯを含むトランザクションのトランザクションＩＤと、ＵＴＸＯのＩｎｄｅｘとを取得する。また、ウォレットサーバ装置４０は、選択したＵＴＸＯをアンロックするための条件が記述されているＳｃｒｉｐｔＰｕｂＫｅｙを取得する。
そして、ウォレットサーバ装置４０は、取得したトランザクションＩＤと、Ｉｎｄｅｘと、送金額と、送金先アドレスから求められる送金先の公開鍵ハッシュを含むＳｃｒｉｐｔＰｕｂＫｅｙとを含むアウトプットと、取得したＳｃｒｉｐｔＰｕｂＫｅｙと、を用いて署名用のハッシュ値を算出する。
ここで、トランザクションＩＤと、Ｉｎｄｅｘと、送金額と、送金先アドレスから求められる送金先の公開鍵ハッシュを含むＳｃｒｉｐｔＰｕｂＫｅｙとを含むアウトプットは、すなわち、送金トランザクションからＳｃｒｉｐｔＳｉｇを除いたデータと同等である。
【００３６】
（３）において、ウォレットサーバ装置４０は、作成した署名用トランザクションデータに含まれる内容と、電子署名用の値とを、情報処理装置２０に送信する。
本実施形態の主な実施例においては、情報処理装置２０、ハードウェアウォレットＨＷにおいて、電子署名用の値を生成せず、ハードウェアウォレットＨＷは、電子署名用の値を用いて電子署名値を生成する。従って、厳密には、ウォレットサーバ装置４０から送信されるトランザクションデータは、情報処理装置２０及びハードウェアウォレットＨＷにおいては署名用のトランザクションデータではない。
しかしながら、ウォレットサーバ装置４０で電子署名用の値を生成するために用いられたトランザクションデータと同じ内容のトランザクションデータは、便宜上署名用トランザクションデータとして説明する。
（４）において、署名用トランザクションデータ、電子署名用の値を受信した情報処理装置２０は、電子署名用の値をハードウェアウォレットＨＷに入力する。
ハードウェアウォレットＨＷに入力される情報は、電子署名用の値であるトランザクションデータのハッシュ値である。
ハードウェアウォレットＨＷは、電子署名用の値を、秘密鍵を用いて暗号化することにより電子署名値を生成する。
【００３７】
（５）において、ハードウェアウォレットＨＷは、生成した電子署名値を情報処理装置２０に返す。あるいは、情報処理装置２０は、ハードウェアウォレットＨＷから電子署名値を取得する。
（６）において、情報処理装置２０は、署名用トランザクションデータに含まれていた入力元トランザクションごとのトランザクションＩＤ及びＩｎｄｅｘ、アウトプット（送金額、ＳｃｉｒｐｔＰｕｂＫｅｙ）のデータと、ハードウェアウォレットＨＷで生成された電子署名値及び公開鍵から送金用トランザクションデータを組み立て、ウォレットサーバ装置４０に送信する。
なお、情報処理装置２０は、ハードウェアウォレットＨＷに格納されている秘密鍵を用いて予め公開鍵を生成する。
（７）において、ウォレットサーバ装置４０は、情報処理装置２０から送信された送金用トランザクションデータ、電子署名値、及び公開鍵に基づいて、送金トランザクションを組立てる。
すなわち、ウォレットサーバ装置４０は、情報処理装置２０から送金用トランザクションデータ、電子署名値及び公開鍵を受信すると、受信した電子署名値及び公開鍵を含むＳｃｒｉｐｔＳｉｇを含むインプットを生成し、生成したインプットと、送金用トランザクションデータに含まれるアウトプットを記述した送金トランザクションを作成する。
ウォレットサーバ装置４０は、作成した送金トランザクションをネットワークに送信する。これによって、送金が行われる。
【００３８】
運営会社の情報処理装置２０は、送金プログラムを実行することにより、上記したウォレットサーバ装置４０に対する送金依頼の送信処理と、ハードウェアウォレットＨＷに対する電子署名用の値の入力処理と、ウォレットサーバに対するトランザクションの生成に用いる元データの送信処理などを実行する。
【００３９】
図４は、本実施形態に係る情報処理装置の機能構成を示す図であり、（ａ）はハードウェアによる機能構成を示す図、（ｂ）はソフトウェアによる機能構成を示すブロック図である。
【００４０】
図４（ａ）に示すように、情報処理装置２０は、ＣＰＵ２１と、ＲＡＭ２２と、ドライブ装置２３と、記録媒体２４及び不図示のＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、を備える。さらに、情報処理装置２０は、ネットワークＩ／Ｆ２５と、ＩＯ  Ｉ／Ｆ（ＵＳＢ  Ｉ／Ｆ等）２６と、入力装置２７と、表示装置２８とを備える。なお、ＣＰＵは、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略である。ＲＡＭは、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略である。
ＣＰＵ２１は、装置全体の制御を行う汎用のオペレーティングシステムを実行するとともに、情報処理装置２０の機能を実現するプログラムを実行する。ＲＡＭ２２は、ＣＰＵ２１による処理のために各種のプログラムや一時データ、変数が展開される。
【００４１】
ドライブ装置２３は、記録媒体２４に記憶された情報の読み出しか書き込みかの少なくとも一方を行なう装置である。記録媒体２４は、ドライブ装置２３によって書き込まれた情報を記憶する。記録媒体２４は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、またはブルーレイディスクなどの非一時的記録媒体である。また、例えば、情報処理装置２０は、情報処理装置２０内の記録媒体２４の種類に対応したドライブ装置２３を含む。
記録媒体２４及びＲＯＭのすくなくとも一方は、プログラムやデータが格納される。ネットワークＩ／Ｆ２５は、端末装置１０をネットワークに接続する。ＩＯ  Ｉ／Ｆ２６は、端末装置１０に対して周辺機器を接続する。入力装置２７は、例えば、キーボード、マウス、及びタッチパネルなどである。表示装置２８は、液晶モニタ、または有機ＥＬなどである。
また、ＩＯ  Ｉ／Ｆ２６には、秘密鍵を格納して電子署名の作成に利用するハードウェアウォレットＨＷを接続することが出来る。
【００４２】
また、図４（ｂ）に示すように、ＣＰＵ２１は、処理部として、送金依頼処理部６１と、データ送受信部６２と、ウォレット制御処理部６３と、を実行する。
図４（ｂ）の処理部は、情報処理装置２０における送金プログラムとして機能する。
送金依頼処理部６１は、仮想通貨の送金依頼を行う処理部であり、送金依頼として、送金元となる運営会社のアドレス（送金元アドレス、送金先アドレス）及び送金額をウォレットサーバ装置４０に送信する。
【００４３】
上記に詳説したが、送金依頼は、運営会社が利用可能なＵＴＸＯの一覧をブロックチェーンネットワークから取得し、その中から送金額に見合うＵＴＸＯを接続したトランザクションを作成することをウォレットサーバ装置４０に依頼する処理である。
ここで作成されるトランザクションデータは電子署名生成用のデータとなる。
ウォレットサーバ装置４０は、ブロックチェーンから取得された１以上のＵＴＸＯに接続した署名用トランザクションデータを作成し、情報処理装置２０に送信する。
作成された署名用トランザクションデータは、上記のように入力元のＵＴＸＯ毎のトランザクションＩＤ及びＩｎｄｅｘと、送金額、送金先アドレスから求められる送金先の公開鍵ハッシュを含むＳｃｒｉｐｔＰｕｂＫｅｙを含むアウトプットと、を含む。
これは送金トランザクションからＳｃｒｉｐｔＳｉｇを除いた内容と同等のデータである。
【００４４】
データ送受信処理部６２は、ウォレットサーバ装置４０との間で署名用トランザクションデータ、送金用トランザクションデータの送受信処理を行う処理部である。
ウォレット制御処理部６３は、ハードウェアウォレットＨＷがＵＳＢ  Ｉ／Ｆ２５に接続されているとき、データ送受信部６２が受信した電子署名用の値をハードウェアウォレットＨＷに入力し、ハードウェアウォレットＨＷに電子署名値を生成させ、生成された電子署名値をハードウェアウォレットＨＷから取得する処理を行う処理部である。
【００４５】
図５は、本実施形態に係るハードウェアウォレットの構成を説明する図である。
本実施形態に係るハードウェアウォレットＨＷは、図４に示したように、ＵＳＢ  Ｉ／Ｆ２５を介して情報処理装置２０に対して着脱可能に接続される構成となっている。
ハードウェアウォレットＨＷは、秘密鍵を記憶する。そして、ハードウェアウォレットＨＷは、情報処理装置２０から、電子署名用の値が入力されたとき、秘密鍵を用いて、電子署名用の値を暗号化する。これにより、ハードウェアウォレットＨＷは、電子署名値を生成する。そして、ハードウェアウォレットＨＷは、生成した電子署名値を情報処理装置２０に出力する。
【００４６】
図５（ａ）に示すように、ハードウェアウォレットＨＷは、入出力部（接続部）７０と、秘密鍵格納部７２ａと、バッファメモリ７２ｂと、ＲＴＣ（リアルタイムクロック）７３と、を備える。
入出力部（接続部）７０は、情報処理装置のＵＳＢ  Ｉ／Ｆ２５に接続され、データや信号の入出力をする。
制御部（回路）７１は、電子署名値の生成に係る処理を行う。秘密鍵格納部７２ａは、秘密鍵を格納する記憶領域である。バッファメモリ７２ｂは、情報処理装置２０とのデータのやりとりに用いられる。パスワード格納部７２は、電子署名値の生成にあたって行われる認証に用いるパスワード情報が格納される。ＲＴＣ７３は、実時間を計時可能な時計である。
【００４７】
図５（ｂ）に示すように、制御部７１は、ハッシュ値演算処理部７４と、電子署名生成処理部７５と、認証部７６と、コード出力部７７と、送金上限確認部７８と、を含む。
ハッシュ値演算処理部７４は、入力された送金トランザクションデータから署名用のハッシュ値を演算する。
後述するが、本実施形態は、ハードウェアウォレットＨＷが情報処理装置２０から入力された電子署名用の値から電子署名値を生成する場合に限定されることはない。
ハードウェアウォレットＨＷが、情報処理装置２０から署名用トランザクションデータを入力され、署名用トランザクションデータに基づいて演算した署名用のハッシュ値を暗号化することによって電子署名値を生成する場合がある。
従って、ハードウェアウォレットＨＷは、ハッシュ値演算処理部７４を備える。
また、その場合、ウォレットサーバ装置４０は、署名用トランザクションデータに基づく電子署名用の値を生成せず、署名用トランザクションデータと、署名に必要な前トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙをそのまま情報処理装置２０に送信する。
【００４８】
電子署名生成処理部７５は、秘密鍵格納部７２ａに格納される秘密鍵を用い、情報処理装置２０から入力された電子署名用の値、またはハッシュ値演算処理部７４が演算した電子署名用の値としてのハッシュ値に基づいて、電子署名値を生成する処理を行う。認証部７６は、ユーザ認証を行う。コード出力部７７は、情報処理装置２０からの要求に応じて秘密鍵格納部７２に格納される秘密鍵をＱＲコード（登録商標）として出力する。
送金上限確認部７８は、送金額が所定の限度額を超えているか否かを判定する。
なお、ハードウェアウォレットＨＷが備える送金上限確認部７８は、情報処理装置２０から署名用トランザクションデータを入力され、その送金トランザクションデータに基づいてハッシュ値演算処理部７４が演算した署名用のハッシュ値を、電子署名処理部７６が暗号化することによって電子署名値を生成する場合に実行される。
図５に示す構成において、制御部７１に含まれる各処理部（ハッシュ値演算処理部７４、電子署名生成処理部７５、認証部７６、コード出力部７７、送金上限確認部７８）は、ハードウェア回路によって実現可能である。また、制御部７１に含まれる各処理部は、ハードウェアウォレットＨＷにＣＰＵを備え、各処理部がソフトウェアによって実現されてもよい。
【００４９】
本実施形態では、情報処理装置２０がハードウェアウォレットＨＷから秘密鍵を読み出して電子署名値を生成するのではなく、ハードウェアウォレットＨＷ内の記憶領域（秘密鍵格納部７２ａ）に記憶している秘密鍵を外部に出力することなく、ウォレット内部で完結して電子署名値の生成を行う。
情報処理装置２０内に秘密鍵が存在することはなく、ハードウェアウォレットＨＷを情報処理装置２０から取り外してしまえば、外部から秘密鍵にアクセスする手段はない。
普段はハードウェアウォレットＨＷを情報処理装置２０に接続せずに管理することで、セキュリティリスクを抑えることが出来る。
【００５０】
ハードウェアウォレットＨＷから秘密鍵を取り出すことはできない。従って、情報処理装置２０が万が一クラッキングされたとしても、秘密鍵が流出するリスクを最小限に留めることが出来る。本実施形態のハードウェアウォレットＨＷによれば、秘密鍵の流出等のリスクを回避しつつ、トランザクションに電子署名を付与することが可能となる。
【００５１】
さらに、本実施形態に係るハードウェアウォレットＨＷは、複数の秘密鍵を記憶することが出来る。すなわち、秘密鍵格納部７２ａに複数の秘密鍵を格納することが出来る。あるいは、ハードウェアウォレットＨＷも秘密鍵格納部を複数備えてもよい。
仮想通貨を利用する一主体が一つのウォレットを使用することが多く、サービスを運営する運営会社のウォレットが特定された場合に残高がすべて分かってしまうという問題があった。ブロックチェーンにおいてはすべてのトランザクションが公開されるため、アドレスから、運営会社所有の仮想通貨の残高がすべてわかってしまう。
複数の秘密鍵を用意し、対応する夫々の公開鍵（ウォレット）に分散して送金させることで、一部のウォレットが特定されたとしても、すべての残高が特定されることはなく、仮想通貨の所有残高という業務上の秘密といってよい情報を守ることが出来る。
【００５２】
本実施形態のハードウェアウォレットＨＷでは、単一のハードウェアウォレットで複数の秘密鍵に対応し、複数のウォレットに対して夫々送金された仮想通貨を利用するための電子署名を生成することが出来る。
複数の秘密鍵に対応する複数のウォレットに送金を行わせることで、万が一、一つの秘密鍵が漏洩した場合でも、悪意の第三者によって電子署名を生成されて仮想通貨を不正に送金されるリスクを、その秘密鍵に関する範囲内に限定することが出来る。
また、情報処理装置２０の送金プログラム（送金依頼処理部６１）は、１つの送金依頼において、複数の秘密鍵に対応する複数のウォレット（アドレス）に対する送金依頼を行うことで仮想的に１つのウォレットのように送金することが出来る。
すなわち、複数の秘密鍵のそれぞれに対応する複数の送金元アドレスと、送金額を含む送金依頼をウォレットサーバ装置４０に送信し、それぞれのアドレスについ送金を行うことが出来る。
【００５３】
情報処理装置２０では、複数の秘密鍵に対応する複数のウォレット（アドレス）に係る仮想通貨の残高をまとめて（合算して）表示することで、複数のウォレットを仮想的に１つのウォレットのように表示することが出来る。
１つのハードウェアウォレットＨＷに秘密鍵を複数保持して、対応するウォレットを分散的に運用しつつ、仮想的に１つのウォレットのように管理することで利便性を大いに高めることが出来る。
ウォレットの残高は、情報処理装置２０が、ブロックチェーンをスキャンすることで行うことが出来る。その場合、情報処理装置２０に処理部として残高照会処理部を持たせる。
また、ウォレットサーバ装置４０が提供する機能として残高照会を行い、照会結果を情報処理装置２０の表示装置に表示させるようにしてもよい。
【００５４】
なお、複数の秘密鍵に対応するアドレスがある場合でも、代表ウォレット（アドレス）に振り込み（送金）が行われウォレット間で残高の偏りが起こりがちである。
そこで、サービス利用者に公開鍵を公開する際、複数の公開鍵からランダムに利用者に提示することで、ウォレット間の残高を平均化することが出来る。
アドレスの公開は、情報処理装置２０が備える処理部としての公開処理部によって行うことが出来る。
公開処理部は、例えばＷｅｂサーバなどの情報公開手段として機能する。公開処理部は、サービス利用料の入金先としてのアドレスの情報を、Ｗｅｂページなどに記載して外部に公開する。そして、サービス利用者は、公開されたアドレスに対して送金を行う。従って、公開処理部が公開するアドレスをランダムに変更することでウォレット間の残高の偏りを防ぐことが出来る。
【００５５】
また、送金プログラムの機能として、自動的に残高が平均化されるように送金を行うことが出来るようにしてもよい。例えば、送金依頼処理部６１は、残高が多いウォレットから優先的に出金を行う様な送金依頼を作成してウォレットサーバ装置４０に送信する。また、情報処理装置２０は、送金プログラムの機能として複数のウォレットの残高が平準化されるように、ウォレット間で送金を行うトランザクションを発行する残高平準化部を備えてもよい。
【００５６】
また、上記したように、本実施形態のハードウェアウォレットＨＷは、コード出力部７７によって、秘密鍵をＱＲコード（登録商標）として出力することが出来る。
情報処理装置２０の使用者は、ハードウェアウォレットＨＷが故障した時のために、例えば、表示装置２８に表示される送金プログラムのインターフェイス画面からハードウェアウォレットＨＷに対するコード出力操作を行い、出力されたコードを、情報処理装置２０を用いて印刷することが出来る。
印刷したＱＲコード（登録商標）は、例えば金庫等に保管することで、故障時には新たに用意したハードウェアウォレットＨＷに秘密鍵を復旧出来るようにする。
【００５７】
さらに、ハードウェアウォレットＨＷには、パスワードを設定することも出来る。
上記の認証部７６は、情報処理装置２０（ウォレット制御処理部６３）から、電子署名生成の要求がなされたとき、パスワードの入力を要求する。
情報処理装置２０（例えば、ウォレット制御処理部６３）は、パスワードの入力画面を表示装置２８に表示し、入力装置２７を用いたパスワードの入力を受け付ける。
入力されたパスワードは、ハードウェアウォレットＨＷに入力される。
【００５８】
認証部７６は、情報処理装置２０から入力されたパスワードが、ハードウェアウォレットＨＷのパスワード格納部７２ｃに予め登録されたパスワードと一致した場合には、電子署名値の生成処理を行う。
一方で、入力されたパスワードと予め登録されたパスワードが一致しない場合には、電子署名値の生成処理を行わない。
従って、仮想通貨の送信トランザクションも、ウォレットサーバ装置４０に送信されず、送金は行われない。パスワードを知らない第三者によるハードウェアウォレットＨＷの利用を制限し、仮に、ハードウェアウォレットＨＷが盗難にあった場合や、紛失した場合でも、安全性を確保することが出来る。
また、同じ組織内でも一部の者のみがハードウェアウォレットＨＷを使った送金を行えるようにしたい場合も、パスワードによるセキュリティは有用である。
【００５９】
パスワードは、記憶領域に平文で格納されていてもよいが、ハッシュ値としてパスワード格納部７２ｃに格納されてもよい。ハッシュ値としてパスワードをパスワード格納部７２ｃに格納する場合、認証部７６は、情報処理装置２０から入力されたパスワードのハッシュ値を算出し、そのハッシュ値と、パスワード格納部７２ｃに格納されているハッシュ値とを比較することで認証を行う。
認証の結果、パスワード格納部７２ｃに格納されているハッシュ値と算出されたハッシュ値とが一致した場合に、電子署名生成部７５は、電子署名値の生成処理を行う。
すなわち、電子署名生成部７５は、情報処理装置２０からパスワードが入力されたとき、パスワード格納部７２ｃに格納されるパスワードのハッシュ値が、入力されたパスワードのハッシュ値と一致することを条件に電子署名の生成を実行する。
【００６０】
また、秘密鍵を秘密鍵格納部７２ａに格納する際、上記パスワードのハッシュ値と秘密鍵をＥＸＯＲして格納しておくことで、すなわちパスワードのハッシュ値と秘密鍵の排他的論理和をとった値を格納しておくことで、ハードウェアウォレットＨＷを物理的に解析した場合の秘密鍵の漏洩を防ぐこともできる。
なお、その際、安全性を高めるために、認証部７６による認証に用いるハッシュ値とは異なるハッシュ関数を使用する必要がある。
秘密鍵を、上記認証用のパスワードのハッシュ値で暗号化した場合、秘密鍵の復号用にパスワードのハッシュ値をそのまま記憶すると、パスワードを入力せずとも秘密鍵の暗号化を解除できるからである。
その一方で、パスワードのハッシュ値を記憶しない場合には、認証部７６による認証用に入力されたパスワードが正しいか否かを検証することが出来ない。
【００６１】
そこで、本実施形態では、ハッシュ値を算出するためのハッシュ関数として、第１ハッシュ関数、及び第１ハッシュ関数とは異なる第２ハッシュ関数を用意する。
そして、パスワード格納部７２ｃには、認証部７６による認証に用いるパスワードに第１ハッシュ関数を適用して得られた第１ハッシュ値を格納する。
そして、パスワード格納部７２ａには、上記パスワードに第２ハッシュ関数を適用して得られた第２ハッシュ値を用いて暗号化された秘密鍵を格納する。
【００６２】
認証部７６は、情報処理装置２０からパスワードが入力されると、その入力されたパスワードに第１ハッシュ関数を適用して第３ハッシュ値を算出する。そして、パスワード格納部７２ｃに格納された第１ハッシュ値と、算出した第３ハッシュ値とが一致するか否かを判定する。
第１ハッシュ値と第３ハッシュ値とが一致した場合、認証部７６は、入力されたパスワードに第２ハッシュ関数を適用して第２ハッシュ値を算出し、第２ハッシュ値を用いて、暗号化された秘密鍵を復号する。
電子署名処理部７５は、復号された秘密鍵と電子署名用の値とを用いて電子署名の生成を実行する。
【００６３】
このようにすることで、秘密鍵の暗号化により秘密鍵の漏洩を防ぐとともに、電子署名時のパスワード認証も安全且つ適切に行うことが出来る。
なお、上記の説明では、秘密鍵又はそのハッシュ値を格納する秘密鍵格納部７２ａとパスワード又はそのハッシュ値を格納するパスワード格納部７２ｃを区別して説明しているが、単一の記憶領域、あるいは格納部として構成されていてもよい。その場合も、上記と同様の処理が実行可能である。
【００６４】
図６は、本実施形態に係るウォレットサーバ装置の機能構成を示す図であり、（ａ）はハードウェアによる機能構成を示す図、（ｂ）はソフトウェアによる機能構成を示すブロック図である。
図６（ａ）に示すように、ウォレットサーバ装置４０は、ＣＰＵ４１と、ＲＡＭ４２と、ＨＤＤ４３と、不図示のＲＯＭと、ネットワークＩ／Ｆ４４と、を備えている。
ＣＰＵ４１は、装置全体の制御を行う汎用のオペレーティングシステムを実行するとともに、ウォレットサーバ装置の機能を実現するプログラムを実行する。
ＲＡＭ４２は、ＣＰＵ４１による処理のために各種のプログラムや一時データ、変数が展開される。
ＨＤＤ４３又はＲＯＭの少なくとも一方には、プログラムやデータが格納される。
ネットワークＩ／Ｆ４４は、ウォレットサーバ装置４０をネットワークに接続する。
【００６５】
また、図６（ｂ）に示すように、ＣＰＵ４１は、処理部として、送金依頼受信処理部８１と、送金上限確認部８２と、ＵＴＸＯ探索処理部８３と、署名用トランザクションデータ作成処理部８４と、ハッシュ処理部８５、送金トランザクション作成処理部８６と、データ送受信部８７と、を実行する。
送金依頼受信処理部８１は、情報処理装置２０からの送金依頼を受信する処理を行う処理部である。
【００６６】
上記のように、送金上限確認部８２は、送金依頼において送金元に設定されているアドレスからの送金額が、所定の限度額を超えているか否かを判定する処理を行う処理部である。
送金限度額は、一例には、一つの送金元アドレスからの１回の送金において、送金が可能な最大の仮想通貨の数量（金額）である。
送金上限確認部８２は、一つの送金元アドレスからの１回の送金において、送金額が所定の額に至った場合は、限度額に達したと判定する。
また、送金上限確認部８２は、１回の送金額が限度額に至らなかった場合でも、１日や数時間など、所定の基準時間内の合計（積算）送金額が所定の額に至った場合は、限度額に達したと判定する。
【００６７】
送金上限確認部８２によって、１回または累計の送金額が限度額に至ったと判定された場合、上記の時間が経過して制限が解除されるまで、各処理部は署名用トランザクションデータを作成、送信するための処理を行わない。
ＵＴＸＯ探索処理部８３は、ブロックチェーンの探索を行わず、署名用トランザクションデータ作成処理部８４、署名用トランザクションデータを作成しない。または、データ送受信部８７は、署名用トランザクションデータを情報処理装置２０に送信しない。
その結果、その送金元アドレスに係る情報処理装置２０において電子署名を付与することができず、そのアドレスからの送金は不可能である。
【００６８】
一度の送金額、積算の送金額に係わらず、送金限度額（上限値）は、送金元アドレスごとに設定することが出来る。
基準時間や制限時間の計時は、ウォレットサーバ装置４０が備えるＲＴＣ７３を用いて行うことが出来る。
このように、公開鍵ごとに送金限度額を設定することで、それを超えた金額の送金を不可能とし、セキュリティを高めることが出来る。
万が一、秘密鍵が盗まれたとしても、限度額以上の送金を行うことはできず、被害を最小限に抑えることが出来る。
【００６９】
ＵＴＸＯ探索処理部８３は、ブロックチェーンネットワークを構成するノードから、送金元のアドレスに係る未使用のトランザクションアウトプットの一覧を取得する処理部である。
署名用トランザクションデータ作成処理部８４は、署名用トランザクションデータを作成する処理を行う。
上記したように、署名用トランザクションデータは、入力元トランザクションごとのトランザクションＩＤ及びＩｎｄｅｘと、アウトプット（送金額、ＳｃｉｒｐｔＰｕｂＫｅｙ）とを含むデータであり、送金トランザクションデータからＳｃｒｉｐｔＳｉｇを除いた内容と同等のデータである。
ハッシュ処理部８５は、署名用トランザクションデータと前トランザクションのＳｃｉｒｐｔＰｕｂＫｅｙとにハッシュ処理を行い、電子署名用の値を生成する処理を行う。
送金トランザクション作成処理部８６は、情報処理装置２０から送信された、署名用トランザクションデータ、電子署名値、公開鍵を含む情報から送金トランザクションを作成する処理を行う処理部である。
特に、送金トランザクション作成処理部８６は、受信した電子署名値、公開鍵からＳｃｒｉｐｔＳｉｇを生成する。
【００７０】
データ送受信部８７は、情報処理装置２０との間で、署名用トランザクションデータ、送金用トランザクションデータの送受信を行い、作成した送金トランザクションをネットワークに送信（公開）する処理部である。
端末装置１０を利用する利用者が、送金後に、送金トランザクションＩＤをサーバ装置に入力し、そこで、送金額を確認することで、サービスへの課金が成立する。
【００７１】
図７は、本実施形態の情報処理装置が実行する仮想通貨送金依頼処理を説明するフローチャートである。
ステップＳ１０１において、情報処理装置２０のＣＰＵ２１（送金依頼処理部６１）は、送金プログラムにおいて送金依頼操作がされたか否かを判定する。
送金依頼操作が行われたと判定した場合（ステップＳ１０１でＹｅｓ）、ＣＰＵ２１（送金依頼処理部６１）は、ステップＳ１０２において送金依頼をウォレットサーバ装置４０に送信する。
送金依頼操作が行われたと判定しなかった場合（ステップＳ１０１でＮｏ）、ＣＰＵ２１（ウォレット制御処理部６３）は、ステップＳ１０３において、電子署名用の値を、ウォレットサーバ装置４０から受信したか否かを判定する。
【００７２】
電子署名用の値を受信したと判定した場合（ステップＳ１０３でＹｅｓ）、ＣＰＵ２１（ウォレット制御処理部６３）は、ステップＳ１０４において、受信した電子署名用の値を、ハードウェアウォレットＨＷに供給する。
ＣＰＵ２１（ウォレット制御処理部６３）は、ステップＳ１０５において、ハードウェアウォレットＨＷで電子署名値の生成が完了したか否かを判定する。
この判定は、ハードウェアウォレットＨＷのバッファメモリに電子署名値が格納されたか否かを確認することで実行出来る。
【００７３】
電子署名値の生成が完了したと判定した場合（ステップＳ１０５でＹｅｓ）、ＣＰＵ２１（ウォレット制御処理部６３）は、ステップＳ１０６において、ハードウェアウォレットＨＷのバッファメモリから電子署名値を取得する。
未だ電子署名値の生成が完了していないと判定した場合（ステップＳ１０５でＮｏ）、ＣＰＵ２１（ウォレット制御処理部６３）は、ステップＳ１０５に処理を戻し、電子署名値の生成の完了を待機する。
そして、ＣＰＵ２１（データ送受信処理部６２）は、ステップＳ１０７において、署名用トランザクションデータと、取得した電子証明書と、公開鍵と、を含む送金用トランザクションデータを、ウォレットサーバ装置４０に送信する。
【００７４】
図８は、本実施形態のハードウェアウォレットが実行する電子署名値生成処理を説明するフローチャートである。
ハードウェアウォレットＨＷの処理は、基本的にハードウェア回路によって行われるものであるが、ソフトウェア処理に準じてフローチャートとして説明する。
ハードウェアウォレットＨＷの制御部７１は、ステップＳ２０１において、情報処理装置２０から、電子署名用の値の入力があったか否かを判定する。
【００７５】
電子署名用の値の入力がないと判定した場合（ステップＳ２０１でＮｏ）、そのまま処理を終了する。
電子署名用の値の入力があったと判定した場合（ステップＳ２０１でＹｅｓ）制御部７１は、ステップＳ２０２において、電子署名用の値に基づく電子署名値を生成する。
そして、制御部７１は、ステップＳ２０３において、生成した電子署名値をバッファメモリに格納し、処理を終了する。
【００７６】
図９は、本実施形態のウォレットサーバ装置が実行する仮想通貨送金処理を説明するフローチャートである。
ステップＳ３０１において、ウォレットサーバ装置のＣＰＵ４１（送金依頼受信処理部８１）は、情報処理装置２０からの送金依頼があったか（送信元アドレス、送金先アドレス、送金額の送信）否かを判定する。
送金依頼があったと判定した場合（ステップＳ３０１でＹｅｓ）、ＣＰＵ４１（送金上限確認処理部８２）は、ステップＳ３０２において、送金上限確認処理（図１１で詳述する）を行う。
そして、ＣＰＵ４１は、ステップＳ３０３において、ステップＳ３０２の送金上限確認処理で送金元の送金額が、所定の上限値を超えたか（送金制限がかかったか）否かを判定する。これは、ステップＳ３０２に対応する図１１の処理で立てられるフラグから判断出来る。
【００７７】
そして、ＣＰＵ４１は、ステップＳ３０３において、送金依頼に含まれる送金額が所定の上限値を超えたか否かを判定する。
上限値を超えた（送金制限がかかった）と判定した場合（ステップＳ３０３でＹｅｓ）、ＣＰＵ４１は、そのまま処理を終了する。署名用トランザクションデータの送信は行われない。
上限値を超えていない（送金制限がかかっていない）と判定した場合（ステップＳ３０３でＮｏ）、ＣＰＵ４１（ＵＴＸＯ探索処理部８３）は、ステップＳ３０４においてブロックチェーンネットワークの探索を開始する。
具体的には、ＵＴＸＯ探索処理部８３は受信した送金元アドレスを用いて、ブロックチェーンに記録されているトランザクションを検索し、送金元アドレスに紐付く取引履歴であるトランザクションを検索する。
【００７８】
ＣＰＵ４１（ＵＴＸＯ探索処理部８３）は、ステップＳ３０５において、依頼元（送金元アドレス）に対応するＵＴＸＯがあるか否かを判定する。
そのようなＵＴＸＯがあると判定した場合（ステップＳ３０５でＹｅｓ）、ＣＰＵ４１（ＵＴＸＯ探索処理部８３）は、ステップＳ３０６においてＵＴＸＯのリストを取得する。
具体的には、ＵＴＸＯ探索処理部８３は、検索された送金元アドレスに対応するトランザクションのアウトプットに含まれるＵＴＸＯを検索する。そして、ＵＴＸＯ探索処理部８３は、送金額と、検索した各ＵＴＸＯとを比較し、送金額を送金可能であり、且つデータ量がより小さくなる組合せのＵＴＸＯを選択する。
ＵＴＸＯ探索処理部８３は、選択したＵＴＸＯを含むトランザクションのトランザクションＩＤと、ＵＴＸＯのＩｎｄｅｘとを取得する。また、ＵＴＸＯ探索処理部８３は、選択したＵＴＸＯをアンロックするための条件が記述されているＳｃｒｉｐｔＰｕｂＫｅｙを取得する。
【００７９】
ＣＰＵ４１（署名用トランザクションデータ作成処理部８４）は、ステップＳ３０７において、抽出したＵＴＸＯを入力にした署名用トランザクションデータを作成する。
すなわち、署名用トランザクションデータ作成処理部８４は、取得したトランザクションＩＤ及びＩｎｄｅｘと、送金額、送金先アドレスから求められる送金先の公開鍵ハッシュを含むＳｃｒｉｐｔＰｕｂＫｅｙを含むアウトプットと、を含む署名用トランザクションデータを作成する。
そして、ＣＰＵ４１（ハッシュ処理部８５）は、ステップＳ３０８において、署名用トランザクションデータと抽出したＳｃｒｉｐｔＰｕｂＫｅｙにハッシュ処理を行い、電子署名用の値を生成する。
【００８０】
そして、ステップＳ３０９において、ＣＰＵ４１（データ送受信部８７）は、署名用トランザクションデータと、電子署名用の値を、依頼元の情報処理装置２０に送信する。
ステップＳ３０１において、送金依頼がないと判定した場合（ステップＳ３０１でＮｏ）、ＣＰＵ４１（データ送受信部８７）は、ステップＳ３１０において、送金用トランザクションデータを情報処理装置２０から受信したか否かを判定する。
送金用トランザクションデータを受信したと判定した場合（ステップＳ３１０でＹｅｓ）、ＣＰＵ４１（送金トランザクション作成処理部８６）は、ステップＳ３１１において、送金用トランザクションデータに基づいて送金トランザクションの作成を行い、ステップＳ３１２において、作成したトランザクションをネットワークに送信する。
【００８１】
上記の説明において、一つの送金元アドレスからの送金額が所定の額に至った場合に送金を制限する処理は、ウォレットサーバ装置４０において行っている。
ただしそれに限らず、本実施形態において、そのような制限処理は、ハードゥエアウォレットＨＷで行うようにすることが出来る。
この他の例において、ハードウェアウォレットＨＷは、情報処理装置２０から入力された電子署名用の値から電子署名値を生成するのではなく、情報処理装置２０から署名用トランザクションデータそのもの、さらには、前トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙのデータを入力される。
【００８２】
ウォレットサーバ装置４０は、図９のステップＳ３０８における署名用トランザクションデータ等に基づく電子署名用の値の生成を行わずともよい。
署名用トランザクションデータと、署名に必要な前トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙを情報処理装置２０に送信すればよい。
そして、上記したハードウェアウォレットＨＷのハッシュ値演算処理部７４は、署名用トランザクションデータ、ＳｃｒｉｐｔＰｕｂＫｅｙに基づいて演算した署名用のハッシュ値を暗号化する。
電子署名処理部７５は、この署名用のハッシュ値を用いて電子署名値を生成する。
ハードウェアウォレットＨＷで送金額の上限確認及び送金制限を行う場合でも、ウォレットサーバ装置４０を同様の処理を行うことは制限されない。
【００８３】
ハードウェアウォレットＨＷが備える送金上限確認部７８（図５（ｂ））は、署名用トランザクションデータに含まれる、送金元アドレスからの送金額が所定の限度額を超えているか否かを判定する処理を行う。
送金限度額は、一例には、一つの送金元アドレスからの１回の送金において、送金が可能な最大の仮想通貨の数量（金額）である。
送金上限確認部７８は、一つの送金元アドレスからの１回の送金において、送金額が所定の額に至った場合は、限度額に達したと判定する。
また、送金上限確認部７８は、１回の送金額が限度額に至らなかった場合でも、１日や数時間など、所定の基準時間内の合計（積算）送金額が所定の額に至った場合は、限度額に達したと判定する。
【００８４】
送金上限確認部７８によって、１回または累計の送金額が限度額に至ったと判定された場合、ハッシュ値演算処理部７４は、上記の時間が経過して制限が解除されるまで、入力されたトランザクションデータのハッシュ値を算出する処理を行わない。当然、電子署名生成処理部７５も、ハッシュ値を用いた電子署名値の生成処理を行わない。
その結果、そのアドレスに係る情報処理装置２０（ハードウェアウォレットＨＷ）において電子署名を付与することができず、そのアドレスからの送金は不可能である。
一度の送金の場合も、複数の送金の累計額の場合も、送金限度額（上限値）は、アドレス毎に設定することが出来る。基準時間や制限時間の計時は、ＲＴＣ７３を用いて行うことが出来る。
【００８５】
このように、ハードウェアウォレットＨＷでは、公開鍵ごとに送金限度額を設定することで、それを超えた金額の送金を不可能とし、セキュリティを高めることが出来る。
万が一、秘密鍵が盗まれたとしても、限度額以上の送金を行うことはできず、被害を最小限に抑えることが出来る。
【００８６】
図１０は、本実施形態のハードウェアウォレットが実行する電子署名値生成処理の他の例を説明するフローチャートである。
ハードウェアウォレットＨＷの処理は、基本的にハードウェア回路によって行われるものであるが、ソフトウェア処理に準じてフローチャートとして説明する。
ハードウェアウォレットＨＷの制御部７１は、ステップＳ３５１において、情報処理装置２０から署名用トランザクションデータ及び前トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙの入力があったか否かを判定する。
【００８７】
署名用トランザクションデータ等の入力がないと判定した場合（ステップＳ３５１でＮｏ）、そのまま処理を終了する。
署名用トランザクションデータ等の入力があったと判定した場合（ステップＳ３５１でＹｅｓ）、制御部７１は、ステップＳ３５２において、送金上限確認処理（図１１で詳述する）を行う。
【００８８】
そして、制御部７１は、ステップＳ３５３において、ステップＳ３５２の送金上限確認処理で送金元の送金額が所定の上限値を超えたか（送金制限がかかったか）否かを判定する。これは、ステップＳ３５２に対応する図１１の処理で立てられるフラグから判断出来る。
上限値を超えた（送金制限がかかった）と判定した場合（ステップＳ３５３でＹｅｓ）、制御部７１は、そのまま処理を終了する。
上限値を超えていない（送金制限がかかっていない）とした場合（ステップＳ３５３でＮｏ）、制御部７１は、ステップＳ３５４において署名用トランザクションデータと前トランザクションのＳｃｒｉｐｔＰｕｂＫｅｙとのハッシュ値を算出する。
【００８９】
次に、制御部７１は、ステップＳ３５５において、ハッシュ値に基づく電子署名値を生成する。
そして、制御部７１は、ステップＳ３５６において、生成した電子署名値をバッファメモリに格納し、処理を終了する。
【００９０】
図１１は、ハードウェアウォレット又はウォレットサーバ装置で実行される送金上限確認処理（送金制限処理）を説明するフローチャートである。
図１０において、ウォレットサーバ装置のＣＰＵ４１による処理として説明するが、ハードウェアウォレットの制御部によっても同様に実行出来る。
ＣＰＵ４１（送金上限確認処理部）は、ステップＳ４０１において、現在送金制限中であるか否かを判定する。
制限中ではないと判定した場合（ステップＳ４０１でＮｏ）、ＣＰＵ４１は、ステップＳ４０２において、今回の送金額が所定額以上であるか否かを判定する。
特定の送金元アドレスからの送金額は、ウォレットサーバ装置での送金確認処理では、送金依頼から知りうる。
また、ウォレットサーバ装置の送金確認処理では、特定の送金元アドレスからの送金額は署名用トランザクションデータから知りうる。
【００９１】
送金額が所定額以上であると判定した場合（ステップＳ４０１でＹｅｓ）、ＣＰＵ４１は、ステップＳ４０３において、制限開始を示すフラグ１を記憶領域にセットし、ステップＳ４０４において、制限時間の計時を開始する。
送金額が所定額以上ではないと判定した場合、（ステップＳ４０２でＮｏ）、ＣＰＵ４１は、ステップＳ４０５において、前回までの積算値があるか否かを判定する。
積算値がないと判定した場合（ステップＳ４０５でＮｏ）、ＣＰＵ４１は、ステップＳ４１０において、送金額の積算を開始し、ステップＳ４１１において、基準時間の計時を開始する。
【００９２】
ステップＳ４０５において積算値があると判定した場合（ステップＳ４０５でＹｅｓ）、ＣＰＵ４１は、ステップＳ４０６において基準時間が経過したか否かを判定する。
基準時間が経過していないと判定した場合（ステップＳ４０６でＮｏ）、ＣＰＵ４１は、ステップＳ４０７において、今回の額の積算を行って、累計額が所定額以上になったか否かを判定する。
所定額以上となったと判定した場合（ステップＳ４０７でＹｅｓ）、ＣＰＵ４１は、ステップＳ４０３に処理を移し、制限開始を示すフラグ１を記憶領域にセットし、ステップＳ４０４において、制限時間の計時を開始する。
ステップＳ４０６において、基準時間が経過したと判定した場合（ステップＳ４０６でＹｅｓ）、ＣＰＵ４１は、ステップＳ４０８において累計額をリセットし、ステップＳ４０９において、基準時間もリセットする。
ステップＳ４０７において、累計額が所定額以上ではないと判定した場合、ＣＰＵ４１は何もせずに処理を終了する。
【００９３】
ステップＳ４０１において、制限中であると判定した場合（ステップＳ４０１でＹｅｓ）、ＣＰＵ４１は、ステップＳ４１２において、制限時間が終了したか否かを判定する。制限時間が終了したと判定した場合（ステップＳ４１２でＹｅｓ）、ＣＰＵ４１は、ステップＳ４１３において、送金制限を終了し、ステップＳ４１４において、制限時間の計時をリセットする。
このような処理を行うことにより、万が一、暗号鍵が流出することとなっても、悪意ある第三者に大量の暗号通貨を盗まれるという危険性がなくなる。
また、図１１のように、複数回に亘る送金の合計額に基づいて送金を規制するのではなく、単純に、１回の送金における送金額に規制を設けるようにしてもよい。
すなわち、ステップＳ４０１〜ステップＳ４０４、ステップＳ４１２、ステップＳ４１３の処理のみを行い、ステップＳ４１２でＮｏと判定した場合には、そのまま処理を終了する。このようにすることで、よりシンプル且つ的確に、真正の所有者自身の使い勝手を損なうことなく大量の暗号通貨が盗まれることを防ぐことが出来る。
【符号の説明】
【００９４】
１  仮想通貨システム、１０  端末装置、２０  情報処理装置、２１  ＣＰＵ、２２  ＲＡＭ、２３  ドライブ装置、２４  記録媒体、２５  ネットワークＩ／Ｆ、２６  ＩＯ  Ｉ／Ｆ、２７  入力装置、２８  表示装置、３０  マイナー装置、４０  ウォレットサーバ装置、４１  ＣＰＵ、４２  ＲＡＭ、４３  ＨＤＤ、４４  ネットワークＩ／Ｆ、５０  マイナー装置、７０  入出力部、７１  制御部、７２ａ  秘密鍵格納部、７２ｂ  バッファ、７２ｃ  パスワード格納部
【図１】
2020031268.tif 000003
【図２】
2020031268.tif 000004
【図３】
2020031268.tif 000005
【図４】
2020031268.tif 000006
【図５】
2020031268.tif 000007
【図６】
2020031268.tif 000008
【図７】
2020031268.tif 000009
【図８】
2020031268.tif 000010
【図９】
2020031268.tif 000011
【図１０】
2020031268.tif 000012
【図１１】
2020031268.tif 000013