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

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

▶ イ・ウンショウの特許一覧

特開2024-129941情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム
<>
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図1
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図2
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図3
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図4
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図5
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図6
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図7
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図8
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図9
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図10
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図11
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図12
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図13
  • 特開-情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024129941
(43)【公開日】2024-09-30
(54)【発明の名称】情報処理方法、ウォレットの生成方法、情報処理装置及びプログラム
(51)【国際特許分類】
   H04L 9/32 20060101AFI20240920BHJP
【FI】
H04L9/32 100A
H04L9/32 200Z
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2023039357
(22)【出願日】2023-03-14
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.PYTHON
(71)【出願人】
【識別番号】523093262
【氏名又は名称】イ・ウンショウ
(74)【代理人】
【識別番号】100218970
【弁理士】
【氏名又は名称】大杉 肇
(72)【発明者】
【氏名】イ・ウンショウ
(57)【要約】      (修正有)
【課題】ブロックチェーンのウォレットにおいて、セキュリティとユーザビリティを両立するBrain Walletを実現する情報処理方法、ウォレットの生成方法、情報処理装置及びプログラムを提供する。
【解決手段】情報処理方法は、ユーザーによって入力された入力データを受け付け、入力データに基づいてハッシュ値を求め、ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求め、ハッシュ値と、ナンス値と、に基づいて、シード値を生成し、シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する。
【選択図】図8
【特許請求の範囲】
【請求項1】
情報処理装置が実行する情報処理方法であって、
ユーザーによって入力された入力データを受け付け、
前記入力データに基づいてハッシュ値を求め、
前記ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求め、
前記ハッシュ値と、前記ナンス値と、に基づいて、シード値を生成し、
前記シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する、
情報処理方法。
【請求項2】
請求項1に記載の情報処理方法において、
前記ナンス値を前記情報処理装置のメモリに保存し、
前記ユーザーの2回目以降のログインの際には、前記メモリの前記ナンス値を利用して前記ウォレットを復元する、
情報処理方法。
【請求項3】
請求項1に記載の情報処理方法において、
ナンスマイニングの難易度を設定し、
前記難易度に応じて前記ナンスマイニングを行う、
情報処理方法。
【請求項4】
請求項3に記載の情報処理方法において、
前記入力データの複雑度に基づいて前記難易度を設定する、
情報処理方法。
【請求項5】
請求項4に記載の情報処理方法において、
前記入力データの複雑度は、前記入力データの文字種類数と文字の長さとから求められる、
情報処理方法。
【請求項6】
請求項1に記載の情報処理方法において、
前記シード値を用いて選択されたブロックチェーンプロトコルにしたがってウォレットを生成する、
情報処理方法。
【請求項7】
情報処理装置が実行するウォレットの生成方法であって、
ユーザーによって入力された入力データを受け付け、
前記入力データに基づいてハッシュ値を求め、
前記ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求め、
前記ハッシュ値と、前記ナンス値と、に基づいて、シード値を生成し、
前記シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する、
ウォレットの生成方法。
【請求項8】
情報処理装置であって、
ユーザーによって入力された入力データを受け付け、
前記入力データに基づいてハッシュ値を求め、
前記ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求め、
前記ハッシュ値と、前記ナンス値と、に基づいて、シード値を生成し、
前記シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する、
情報処理装置。
【請求項9】
プログラムであって、
コンピュータに、請求項1から請求項6までの何れか1項に記載の情報処理方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理方法、ウォレットの生成方法、情報処理装置及びプログラムに関する。
【背景技術】
【0002】
ウォレットの一つにBrain Walletがある(特許文献1)。Brain Wallet方式では、ユーザーが指定したパスフレーズに基づいてウォレットを生成するためシードフレーズの保管が不要となり、簡単で分かり易いユーザーインターフェースを実現することができる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2022-177273号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかし、単純な生成アルゴリズムに基づくBrain Walletは総当たり攻撃に弱いことが知られており、普及していない。
【課題を解決するための手段】
【0005】
本発明の一態様によれば、情報処理装置が実行する情報処理方法が提供される。この情報処理方法は、ユーザーによって入力された入力データを受け付ける。入力データに基づいてハッシュ値を求める。ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求める。ハッシュ値と、ナンス値と、に基づいて、シード値を生成する。シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する。
【図面の簡単な説明】
【0006】
図1図1は、情報処理装置100のハードウェア構成の一例を示す図である。
図2図2は、ブロックチェーンアカウントの構造の一例を示す図である。
図3図3は、一般的なランダムウォレットの生成手法の一例を示す図である。
図4図4は、シート値とシードフレーズの同値変換の一例を示す図である。
図5図5は、単純なBrain Walletの仕組みの一例を示す図である。
図6図6は、提唱するAccount Miningの仕組みの一例を示す図である。
図7図7は、ハッシュ関数の特徴とNonce Miningの一例を示す図である。
図8図8は、情報処理装置100の制御部210が実行する情報処理の一例を示すフローチャートである。
図9図9は、攻撃者と正当ユーザーとの非対称性の一例を示す図である。
図10図10は、秘密鍵の代わりにnonceのみをローカル保存するウォレットアプリの一例を示す図である。
図11図11は、保存してあるnonce値を利用したトランザクションの一例を示す図である。
図12図12は、Nonce Miningの難易度ごとの探索回数と実行時間との関係の一例を示す図である。
図13図13は、パスワードの複雑度及びNonce Mining難易度ごとの総当たり攻撃時間の一例を示す図である。
図14図14は、パスワードの長さを大きく変えた場合のnonce mining実行時間の一例を示す図である。
【発明を実施するための形態】
【0007】
以下、図面を用いて本発明の実施形態について説明する。以下に示す実施形態中で示した各種特徴事項は、互いに組み合わせ可能である。
【0008】
本明細書において「部」とは、例えば、広義の回路によって実施されるハードウェア資源と、これらのハードウェア資源によって具体的に実現されうるソフトウェアの情報処理とを合わせたものも含みうる。また、実施形態1においては様々な情報を取り扱うが、これら情報は、0又は1で構成される2進数のビット集合体として信号値の高低によって表され、広義の回路上で通信・演算が実行されうる。
【0009】
また、広義の回路とは、回路(Circuit)、回路類(Circuitry)、プロセッサ(Processor)、及びメモリ(Memory)等を少なくとも適当に組み合わせることによって実現される回路である。すなわち、特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)、プログラマブル論理デバイス(例えば、単純プログラマブル論理デバイス(Simple Programmable Logic Device:SPLD)、複合プログラマブル論理デバイス(Complex Programmable Logic Device:CPLD)、及びフィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA))等を含むものである。
【0010】
<実施形態1>
1.ハードウェア構成
図1は、情報処理装置100のハードウェア構成の一例を示す図である。情報処理装置100は、ハードウェア構成として、制御部210と、記憶部220と、入出力部230と、通信部240と、を含む。制御部210は、CPU(Central Processing Unit)等であって、情報処理装置100の全体を制御する。記憶部220は、HDD(Hard Disk Drive)、ROM(Read Only Memory)、RAM(Random Access Memory)、SSD(Solid State Drive)等の何れか、又はこれらの任意の組み合わせであって、プログラム、制御部210がプログラムに基づき処理を実行する際に利用するデータ等を記憶させる。制御部210が、記憶部220に記憶されているプログラムに基づき、処理を実行することによって、情報処理装置100の機能及び後述する図8に示されるフローチャートの処理が実現される。入出力部230は、タッチパネルディスプレイ等であって、ユーザー操作に基づいて情報を情報処理装置100に入力したり、制御部210の制御に基づいて、画面等を表示したりする。通信部240は、情報処理装置100をネットワークに接続し、他の装置との通信を司る。
【0011】
なお、図2では情報処理装置100の制御部210を1つとして図示しているが、情報処理装置100は複数の制御部を有してもよい。情報処理装置100が複数の制御部を有している場合、複数の制御部それぞれが記憶部220等に記憶されているプログラムに基づき処理を互いに分散させて実行することによって情報処理装置100の機能等が実現される。情報処理装置100のより具体的な例としては、スマートフォンがある。但し、このことは本実施の形態を制限するものではない。情報処理装置100は、PC(Personal Computer)であってもよい。すなわち、情報処理装置100は、後述する処理を実行可能なものであればどのような装置であってもよい。以下で説明する実施形態1の処理は、情報処理装置100の制御部210が実行する。
【0012】
2.要旨
ブロックチェーン技術と分散型アプリケーションとのエコシステムは、非中央集権で自律的な社会ITインフラの運営を可能にする。しかしながら、このようなエコシステムは、高い学習コスト、ハッキング事件、取引所による顧客資金流用等乗り越えなければいけない多様な課題に直面している。これらの問題は、ウォレットがユーザーに対し複雑な秘密鍵及びシードフレーズの保管を要求すること等、ウォレットの構造的な仕組みに起因すると考えられる。これらの課題を乗り越え、リテラシーが必ずしも十分でない消費者への広範な普及を実現するには、Brain Wallet方式のウォレットが一つの解決策になる。Brain Wallet方式では、ユーザーが指定したパスフレーズに基づいてウォレットを生成するためシードフレーズの保管が不要となり、簡単で分かりやすいUI(ユーザーインターフェース)を実現できる。しかし、単純な生成アルゴリズムに基づくBrain Walletは総当たり攻撃に弱いことが知られており、普及していない。本明細書では、ユーザビリティを保ちながら十分なセキュリティを実現するための、新しいBrain Walletの生成手法である「Account Mining」を提案する。
【0013】
Account Miningでは、Nonce Miningを用いるProof of WorkをBrain Walletの生成過程に導入する。Proof of Workの副生成物であるnonce値を活用することで、秘密鍵を保管せずにnonce値のみを保存するウォレットアプリを実現でき、それは従来手法と比べセキュリティとユーザビリティとを高い水準で両立する。
【0014】
nonce値の活用は、攻撃者と正当ユーザーの間に非対称性を作り出すことができる。nonce値を正当ユーザーの情報処理装置100にのみ保存することで情報処理装置100を物理キー化し、Brain Walletのセキュリティ確保に必須な生成時の遅延時間を、正当ユーザーが2回目以降のログインにおいてスキップできるようにできる。したがって、攻撃者は総当たり攻撃時にすべての試行に対しProof of Workを行わなければいけないのに対し、正当ユーザーは1度のみの実行ですむ。ユーザーは初回のみ待機すればよいので、その待機時間が従来手法と比べて長時間化してもユーザーにとって許容しやすいと考えられ、従来手法と比べて総当たり攻撃耐性を強化しやすい。
【0015】
加えて、秘密鍵を保存しないことで、ホットウォレットでありながらコールドウォレットに近いセキュリティを実現できる。ホットウォレットの情報処理装置100に保存される秘密鍵はハッキングの標的となりやすいが、ユーザーがシードフレーズを何度も入力するコストが高いことから仕方なく保存されている。本手法では、Brain Walletであるためユーザーが自身で指定したパスワード情報は入力しやすく、またnonceの保存により従来手法と比べて遅延の発生回数を抑えられるので、ユーザビリティを確保できる。一方でnonceは単体で流出しても無意味な値であるので、保存しても安全で適している。
【0016】
このようにして、Account Miningではセキュリティとユーザビリティを両立するBrain Walletを実現する。
【0017】
3.背景
3.1 ブロックチェーン及びウォレットについて
Bitcoinによって提唱されたブロックチェーン技術は、暗号学的タイムスタンプ技術の上に、Proof of Workによるコンセンサスアルゴリズムを組み合わせることで、不特定多数が参加する公開ネットワーク上で共有データベースを運営する手法を確立した。Bitcoinでは、ブロックチェーンに対する新たなデータブロックの追加時に、大きな計算量が必要なNonce Miningを行うことをノードに要求する。通常これはコインのマイニングと呼ばれているが、その実態は条件を満たす適当な追加データnonce(ナンス値)を発見するための総当たり試行である。このようなnonce値を見つけるには総当たり(Work)をするしかないが、見つけられたnonceが条件に適合するかはチェック(Proof)が容易なため、この仕組みはProof of Workと呼ばれる。Proof of Workを行ったデータブロックのみチェーンに追加される。チェーン状につながれた各ブロックのNonce Miningの解は過去のブロックの値(Nonce Mining解を含む)にも依存している。したがって、改竄者が検知されることなくデータを改竄するには、改竄箇所以降すべてのブロックのNonce Miningを行いなおさなければいけないが、これはネットワーク全体の計算処理能力の過半数がない限り困難である。このようなことによって、ブロックチェーンでは全ノードの過半数が誠実に動けばデータの改竄を不可能にするようにでき、ビザンチン将軍問題への実用的耐性を備えた実装にもなっている。
【0018】
加えて、EthereumのSmart Contractの仕組みは、ブロックチェーン上で任意のプログラムを実行させることを可能にした。Ethereumは、ブロックチェーンにソースコードのコンパイル結果をデプロイし、そのバイナリーコードをEVM(Ethereum Virtual Machine)と呼ばれるバーチャルマシンによって各ノードが実行することを可能にするプラットフォームとなることを目指して開発されたブロックチェーンである。
【0019】
これによって、分散型アプリケーション(Decentralized Applications(DApps))と呼ばれる種類のサービスの開発が可能になった。分散型アプリケーションは、全ネットワーク参加者に共有されホスト・実行されるため、開発者であっても実行結果の恣意的な改竄が不可能であり、非中央集権的で分散的なサービス運営を可能にするものであった。
【0020】
こうしたDAppsをユーザーが利用するときに必須となるのが、ブロックチェーンアカウント、通称ウォレットである。ブロックチェーンの用途は仮想通貨から始まったため、こうしたブロックチェーンアカウントは歴史的にウォレット(財布)と呼ばれることが多い。
【0021】
従来のWebサービスと異なり、ウォレットは公開鍵・秘密鍵形式で操作される。図2は、ブロックチェーンアカウントの構造の一例を示す図である。ウォレットにおいて、公開鍵はユーザーを識別するアドレスの役割を果たし、Public Addressとも呼ばれる。秘密鍵は公開鍵を生成するためのパスワードであり、ウォレットに紐づけられた資産の移動に必要な署名キーである。秘密鍵は16進数で表記されることが多い。
【0022】
ウォレットの生成は各ブロックチェーンの規格に従う。一般にはランダムに生成されている。実際のアルゴリズムにおいては、256bitの乱数が生成されてシード値として用いられ、ハッシュ関数を一定の手順にしたがって繰り返し適応することで秘密鍵、次いで公開鍵が順次導出される。図3は、一般的なランダムウォレットの生成手法の一例を示す図である。ハッシュ関数は逆演算が困難なため、公開鍵から秘密鍵やシード値を導出することはできない。数学的に存在しうる256bitのすべてのパターンが公開鍵として有効であり、2256=1.1579209×1077と膨大な数の可能性が存在するため、ランダムに生成してもウォレットが被ることはなく、十分な総当たり攻撃耐性を備えているとされている。
【0023】
秘密鍵は16進数のままでは人間にとって読みづらく、ユーザーに不親切である。そこで、秘密鍵をユーザーが保管しやすいように、BIP39プロトコルにしたがって12や24個の英単語列に同値変換したのがシードフレーズである。図4は、シート値とシードフレーズの同値変換の一例を示す図である。
【0024】
ユーザーはシードフレーズを正しく保管することが求められる。シードフレーズが流出するとウォレットがハッキングされるためである。
【0025】
3.2 ブロックチェーンサービスの直面する問題
改竄困難なブロックチェーン技術に基づき自律分散的に稼働する分散型アプリケーションだが、様々な問題がある。
【0026】
第一に、分散型アプリケーションは消費者層への普及に苦戦している。リテラシーが十分とは限らない一般消費者にとって、ブロックチェーンの仕組みを理解してアクセスするのは学習コストが高く困難である。Non Fungible Token(NFT)やXX to Earn(例:Play to Earn, Walk to Earn)、DeFi等、多くのバズワードがあるが、NFTを複製不能なデジタルデータと説明する等、誤解を招く誤った説明が多い。これらブロックチェーンサービスを利用しようとするユーザーが、ウォレットをインストールする最初のステップにハードルを感じ、躓くケースも多い。
【0027】
第二に、セキュリティが高いはずのブロックチェーンアカウント又はウォレットのハッキング事件が多発している。ウォレットは一般に256bitの乱数に基づいて生成される。したがって総当たり攻撃を成功させるには2256通りを演算しなければならず、現実的な時間での攻撃は不可能であるから、強固なセキュリティを誇るはずである。それにもかかわらず、現実にはさまざまなハッキング事件が多発し、個人資産の盗難や、取引所の破綻すらも起きている。加えて、類似する問題として、自身のウォレットのシードフレーズを紛失することによって資産を失うケースや、送金先アドレスの入力ミスによって財産を失うケースも多発している。仮想通貨はブロックチェーンの最も基本的なアプリケーションであるはずなのに、このような問題が多発している。
【0028】
第三に、非中央集権が理念であるはずなのに、取引所等の中央集権プレイヤーが過度に肥大化し、モラルハザードが起きている。ブロックチェーンを利用する分散型アプリケーションは特定の運営者やサーバーに依存しない。したがって、運営者がデータを改竄しないだろうという通常要求される仮定も必要とせず、トラストレスなサービス運営を実現する。これにより非中央集権的な社会インフラを実現しようとするのが理念である。それにもかかわらず、現実には、インフラ業者のポジションにある仮想通貨取引所等の中央集権業者の勢力拡大が目立っている。急成長したこれらの事業者はガバナンス体制が整っていないことが多く、モラルハザードを起こしやすい。
【0029】
3.3 ウォレットの構造的問題
上述したように、分散型アプリケーションのエコシステムは学習コストが高く、ハッキング事件が多発しており、取引所への依存が強く安全性が疑問視されている。これらの問題を引き起こしている背景として、ウォレット及びウォレットアプリの抱える構造的問題が存在する。
【0030】
第一に、ウォレットは学習コストが高い。それにより分散型アプリケーションの普及に障害が生まれている。ウォレットアカウントへのアクセスでは、ユーザーが慣れしたしんでいる{ID, Password}型のログインは行われない。代わりにユーザーは{公開鍵、秘密鍵}をランダム生成し、その管理のためにシードフレーズを提示され保管を求められる。ソフトウェア開発者ならばSSHアクセスでも使うように公開鍵・秘密鍵といった仕組みに慣れているが、一般の消費者にとっては理解が難しい。結果としてウォレットアプリを触ることも、分散型アプリケーションへアクセスすることも敬遠される。
【0031】
第二に、ウォレットはシードフレーズの保管が面倒で、セキュリティの確保が難しい。シードフレーズ自体のセキュリティは256bitであり堅牢だが、それ以外の場所でセキュリティホールができている。そのためハッキング事件が多発している。まず、ユーザーにとってのシードフレーズの保管方法は悩ましい問題になっている。ユーザーが自ら指定したわけではない、ランダム生成の英単語列であるシードフレーズを記憶するのは困難である。そのためどこかへ記録が必要だが、1箇所にしかメモしなければ、それを紛失した時ウォレットへのアクセスは失われる。だからといって様々な場所にシードフレーズを保管していると、保管場所がハッキングされ流出するリスクが高くなる。
【0032】
加えて、ウォレットアプリが情報処理装置100に秘密鍵をローカル保存することもセキュリティホールにつながる。ユーザーにとって長文のシードフレーズを入力することは大きなコストである。そのためユーザー利便性を重視するウォレットアプリはユーザーに入力を何度も求めることを避け、一度入力されたシードフレーズから演算された秘密鍵をローカルに保存してしまう。したがって、情報処理装置100がハッキングされたとき秘密鍵は容易に流出し、資産が失われる。
【0033】
第三に、正当なウォレット(セルフカストディウォレット)は取引所口座(カストディウォレット)に利便性で劣っている。そのため、自身でシードフレーズを保管する必要があるセルフカストディウォレットよりも、取引所が代理でシードフレーズや秘密鍵を保管してくれるカストディウォレットを多用する消費者が多く存在する。
【0034】
取引所口座の強みの一つは、そのログイン形式にある。取引所口座を用いると、ユーザーは従来のWEBサービスと同じように、{ID、パスワード}形式で口座にログインすることができる。慣れ親しんだUI(ユーザーインターフェース)をユーザーに提供しているため、人気を博している。このようなログイン形式は、取引所事業者のプライベートデータベースにユーザー情報を保存する中央集権的手法により実現されている。
【0035】
取引所口座のもう一つの強みは、そのポータビリティにある。通常のインターネットサービス同様、取引所口座はPCやモバイル等様々な情報処理装置100で容易にログイン・ログアウトすることができる。二段階認証によってそのセキュリティを保つのも容易である。それと比較して、セルフカストディウォレットはポータビリティが悪い。秘密鍵やシードフレーズの流出を懸念して、ユーザーは出来るだけ一度保管した秘密鍵を二度と参照したくないという心理が背景にある。一度ログアウトすると、再度ログインするときに再びシードフレーズを入力しなければならないので、一度ログインしたウォレットアプリからログアウトすることが憚られる。自由で随意なログイン・ログアウトが憚られるために、従来型アプリでは当たり前のように実現できている、複数の情報処理装置100での同時ログイン等のハードルが高く、ウォレットのポータビリティが損なわれている。
【0036】
このようにして取引所口座はユーザーに多くの利便性を提供しているが、しかしながら分散型アプリケーションの普及のためには役立たない。取引所口座はユーザーに秘密鍵・シードフレーズを知らせることはなく、取引所の指定する目的でしか使えない。取引所口座を用いて分散型アプリケーションへ自由にアクセスすることはできず、真のウォレットアカウントとは言えない。加えて、リスクも大きい。取引所はあくまで中央集権的事業者なので、取引所の問題により資金がハッキング又は出金停止されるリスクもある。取引所に問題が起きた時のリスクを考慮すると、すぐに取引しない資金は外部のセルフカストディウォレットに移動させた方が安全である。そうであるにもかかわらず、セルフカストディウォレットの利便性が劣るために、ユーザーが資金を取引所口座に長く放置するケースが多い。
【0037】
こうして、ウォレットの本質的な仕組みを起点として、様々な問題が誘発されている。
【0038】
4.ウォレット
4.1 Brain Walletによるユーザビリティの向上
上述したように256bitの秘密鍵又は同様に複雑なシードフレーズの保管をユーザー及びウォレットアプリに要求するウォレットの根本的な仕組みはユーザビリティの低下を招き、分散型アプリケーションの普及を阻害し、ハッキング問題を多発させ、取引所のカストディウォレットを多用させる状況を生む等して問題を起こしている。
【0039】
このような問題を解決するには、根本原因であるウォレットのUIを改善し、非開発者の一般消費者が直感的にウォレット及び分散型アプリケーションにアクセスできるようにユーザビリティを向上させることが肝要である。その際に、目指すべきUIはユーザーがすでに慣れ親しんでいる一般的なWebサービスのUIである。典型的なUIとしてはユーザーID(例えば、電子メールアドレス)とパスワードとを設定するUIである。自宅のPCや職場・学校のPC、スマートフォン等、様々なデバイスでユーザーは自身の電子メールアドレス及びパスワードを入力し容易にシステムにログイン・ログアウトすることができる。電子メールアドレスに他の電子メールアドレスや電話番号を紐づけて、二段階認証を行うことでセキュリティを向上させることもできる。何より、ユーザーは自身でパスワードを設定しているのだから、覚えやすく、保管に困らない。
【0040】
一般的なウォレットのUIはこのようなUIの対極にある。ウォレットを生成するとき、ユーザーが指定する要素は一切ない。ランダム生成されたシードフレーズを提示され、保管を要求され、ちゃんと保管しないと財産が失われると通告されるのみである。開発者にとっては問題がないUIであっても、一般消費者を対象に分散型アプリケーションを広く普及させることを考えるときには、ウォレットのUIを再考しなければならない。
【0041】
問題解決の鍵となるコンセプトの一つに、ユーザー自らが決定する値に基づいて秘密鍵を一意に導出する形式のウォレット、通称Brain Walletがある。単純な生成では、ユーザーの指定したパスワードをハッシュ関数によって256bitのシード値に変換し、このシード値に基づいてウォレットを生成する。図5は、単純なBrain Walletの仕組みの一例を示す図である。ユーザーはパスワードを自ら指定するので、記憶が容易である。ユーザーは、シード値、秘密鍵及びシードフレーズ等を保管する必要はなく、パスワードのみを保管すればいつでもウォレットを復元できる。
【0042】
このようなBrain Walletを用いることのメリットは多々存在する。第一に、一般消費者にとって一般的なWebサービスと分散型アプリケーションのインタフェースの差は小さくなり、仕組みの違いに気づくことも、理解する必要もなくなる。これにより分散型アプリケーションのウォレットに存在していた学習コストが軽減され、普及しやすくなる。第二に、パスフレーズがユーザーの脳内のみにあれば、流出の心配はなく、シードフレーズよりも安全になる。また、ウォレットアプリに秘密鍵を保管せずとも、必要な場面ごとにユーザーにパスフレーズ入力を求め、秘密鍵をそのたびに復元するというUIが実現できる。これによりウォレットアプリへのハッキングによる秘密鍵流出を回避でき、セキュリティがさらに向上する。第三に、パスフレーズを入力することはシードフレーズを入力することよりも容易なので、様々なウォレットアプリにログイン・ログアウトすることはより簡便になり、利便性が高まる。ユーザーにとってセルフカストディウォレットを使うコストはなくなり、取引所ウォレットと同等になるので、取引所に対する依存も軽減される。何より、カジュアルなユーザーもセルフカストディウォレットを容易に所有することができるようになり、分散型アプリケーションへのアクセスが容易になる。
したがって、Brain Walletの活用によって、上述した問題が大きく解決される。
【0043】
4.2 Brain Walletのセキュリティ課題
(1)セキュリティの脆弱性
Brian Walletは分散型アプリケーションの直面する課題を解決する鍵となるコンセプトであり、優れたUXを実現する。しかし、セキュリティ問題がネックとなっており普及していない。Brain Walletのパスフレーズに対する総当たり攻撃が容易なためである。
これは主にウォレットへの攻撃がローカルで実行可能であることに起因する。一般的なWebサービスの場合、ユーザーのパスワードはハッシュ化された状態でデータベースに保管される。データベースが流出していない状況において攻撃者が総当たり攻撃を実行するとき、サービスに対して試行パスワードを用いたログインリクエストを送ることになる。サービス側ではDDos対策等により短時間の大量アクセスを検知可能であるため、こういったサーバーに対する総当たり攻撃は中断されるので失敗する。一方でブロックチェーンにおいてはすべての情報は公開されている。ウォレットのシード値・秘密鍵と公開鍵とは純粋な数学的な関係にあり、ユーザーはローカル環境でシード値・秘密鍵を総当たりして公開鍵を大量に演算することができる。生成された公開鍵に使われた痕跡があるかもブロックチェーンのローカルコピーに問い合わせればよく、確認が容易である。
【0044】
特にユーザーが指定したパスフレーズからシード値及びウォレットを生成するBrain Walletの場合、256bitの可能性があるシード値又は秘密鍵ではなく、ユーザーが指定しそうなパスフレーズを総当たりすればよいため、攻撃はいっそう容易になる。
【0045】
(2)対策
こうしたBrain Walletのセキュリティ問題を克服しようとする試みは過去に存在する。その主な方法として、シード値生成アルゴリズムを低速化させる手法が考えられる。低速化により、総当たり攻撃の一回一回の試行に必要な計算コストを増加させることで総当たり攻撃への耐性をあげることができるからである。
【0046】
(3)課題
シード値生成の遅延の手法は、理論的にはセキュリティを向上することができるが、現実的にはユーザビリティへの配慮から攻撃耐性を最大化することができない。遅延時間は攻撃者にとっての計算量を増大させるが、正当なユーザーにとっても待機時間を増大させてしまうからである。そのため、セキュリティの観点からは1回あたり数十秒以上の遅延時間を要求するのが望ましいが、ユーザビリティの観点からは数秒程度へ抑えざるを得ない。
本明細書では、上記の問題を顧みて、正当ユーザーと攻撃者にとっての負担を分離可能な手法を実現することで、セキュリティとユーザビリティを両立したBrain Walletを実現することを目指す。
【0047】
5.Account Miningの提案
5.1 新しいBrain Walletの生成アルゴリズム
(1)モチベーション
上述したように、Brain Walletはユーザー入力を用いてウォレットを管理できる点においてユーザビリティが高い。ユーザーに慣れ親しんだUXを提供し、学習コストが低く、シードフレーズ保管に起因する問題を解決できる。しかし、ユーザーの入力に完全に依存するBrain Walletはエントロピーが小さく、生成時間を遅延化しないと総当たり攻撃が容易という脆弱性を持つ。
【0048】
したがってBrain Walletにおいては生成時間の遅延化が必須であるが、そこにはユーザビリティの観点から制限がかかる。既存手法における遅延時間では、攻撃者のコストを増大させると同時に、ユーザーにとっての待機時間も増大させるため、ユーザビリティの観点から許容できる時間に制限があった。そこで本論文は、ユーザビリティを大きく損なうことなく、ウォレット生成時の遅延時間を長時間化することを可能にすることを目指す。
【0049】
(2)Account Miningの概要
明細書ではProof of Workを用いる新たなBrain Walletの生成手法、Account Miningを提案する。Account Miningは、ユーザーによるウォレットアカウント生成・復元時に、Proof of WorkとしてNonce MiningによるWalletの発掘を行うことから名づけた。このようなProof of Workを導入することで、Account Miningにおいては攻撃者と正当なユーザーに要求する計算コストを区別することができ、セキュリティとユーザビリティを両立するBrain Wallet型ウォレットを実現することを可能にする。
【0050】
Account Miningでは、ユーザーローカル端末におけるウォレット情報の生成過程において、Proof of Workを行うことで遅延時間を発生させる。これは、攻撃者にとっての計算量を大きく増大させることで総当たり攻撃を困難にし、セキュリティを向上させる。一方で正当なユーザーにとっては、同一端末上で一度だけProof of Workを行えば、過去にProof of Workを行ったという事実を用いて遅延時間をスキップさせることができるため、ユーザビリティが保たれる。
【0051】
(3)提案アルゴリズム
Account Miningのアルゴリズムは図5の通りである。従来手法と同様にユーザーの指定する{passphrase、salt}を入力として、Proof of WorkとしてNonce Miningを行い、解として得られる条件を満たす一意な256bitのnonce値を得る。その後、ユーザー入力だけでなく、nonceにも依存する形で、{passphrase、 salt、nonce}からハッシュ変換によりシード値を生成する。このシード値を用いて、各ブロックチェーンの既存手法に従ってウォレットが作成される。
【0052】
図6は、提唱するAccount Miningの仕組みの一例を示す図である。Nonce Miningとは、BitcoinにおいてもProof of Workとして採用されているアルゴリズムである。Nonce Miningでは、元データに追加することでハッシュ値の最初のいくつかのbitが0となるようにする追加データnonce値を探索する。例えば、sha256("hello world")は乱雑な256bitであるが、追加データを"503555"としたsha256("hello world503555")は16進数表現において先頭の5桁が0となる。図7は、ハッシュ関数の特徴とNonce Miningの一例を示す図である。
【0053】
先頭の何桁を0とすることを目指すかを、Nonce Miningの難易度設定と呼ぶ。難易度の調整によって、nonce値を発見するまでの時間を調整できる。
【0054】
Nonce Miningの計算コストを支払うことなくnonce値を得ることは不可能である。条件を満たすnonce値を求めるには総当たりをするほかなく、また元データが変わるとハッシュ値は全く異なる値に代わるのでnonce値を探索しなおさなければならない。これはハッシュ関数の性質に基づく。ハッシュ関数は入力値が少しでも異なると出力値はまったく予想できない値になる。ハッシュ関数の出力から入力を得ることは困難で、また、同じ出力をもたらす異なる二つの入力を発見することも困難である。したがって攻撃者が総当たり攻撃を行う際には、すべての候補に対しNonce Miningを行うことが要求される。
【0055】
Account Miningで用いるNonce Miningの実装においては、プロトコルを定義することで、Nonce Miningの解となるnonce値を一意に定める。ハッシュ値の先頭数桁を0にするnonceは明らかに複数存在するが、Nonce Miningの過程における探索範囲及び探索順序をプロトコルで指定することで、最初に発見されるnonceは一意に定まる。そのプロトコルに準拠することで、ユーザーはいつでも入力値に基づいて一意のnonce値及びウォレット情報を復元することができる。
【0056】
5.2 フローチャート
図8は、情報処理装置100の制御部210が実行する情報処理の一例を示すフローチャートである。図8に示される情報処理は、アプリケーション等に初めてログインした際に実行される。
ステップS810において、制御部210は、入出力部130等を介してユーザーによって入力された入力データを受け付ける。入力データの例としては、例えば、パスフレーズやソルト等である。
【0057】
ステップS820において、制御部210は、入力データに基づいてハッシュ値を求める。
【0058】
ステップS830において、制御部210は、ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求める。制御部210は、求めたナンス値を記憶部220に保存する。記憶部220は情報処理装置100のメモリの一例である。後述するように、ユーザーの2回目以降のログインの際には、制御部210は、記憶部220に保存したナンス値を利用してウォレットを復元する。より具体的に説明すると、制御部210は、ナンスマイニングの難易度を設定する。制御部210は、入力データの複雑度に基づいて難易度を設定してもよいし、予め設定された難易度を設定してもよい。入力データの複雑度に基づいて難易度を設定する場合、制御部210は、入力データの文字種類数と文字の長さとから入力データの複雑度を求める。制御部210は、文字種類数が多く、文字の長さが長いほど、入力データの複雑度が大きいとし、文字種類数が少なく、文字の長さが短いほど、複雑度が小さいとする。例えば、情報処理装置100は、文字種類数及び文字の長さと入力データの複雑度とを対応付けてテーブル等を記憶部220に保持しておく。そして、制御部210は、このテーブルを用いて、入力データの文字種類数と文字の長さとから入力データの複雑度を求めてもよい。他の例として、制御部210は、入力データの文字種類数と文字の長さとを引数として、入力データの複雑度を返す所定の関数を用いて、入力データの文字種類数と文字の長さとから入力データの複雑度を求めてもよい。更に他の例として、制御部210は、文字種類数と文字の長さとを入力データ、複雑度を出力データとして学習した学習済みモデルを用いて、文字種類数と文字の長さとから複雑度を求めてもよい。
【0059】
制御部210は、複雑度が大きいほど、ナンスマイニングの難易度を低くし、複雑度が小さいほど、ナンスマイニングの難易度を高く設定する。例えば、情報処理装置100は、ナンスマイニングの難易度と複雑度とを対応付けたテーブル等を記憶部220に保持しておく。そして、制御部210は、このテーブルを用いて、入力データの複雑度からナンスマイニングの難易度を設定してもよい。他の例として、制御部210は、入力データの複雑度を引数として、ナンスマイニングの難易度を返す所定の関数を用いて、入力データの複雑度からナンスマイニングの難易度を求めてもよい。更に他の例として、制御部210は、複雑度を入力データ、ナンスマイニングの難易度を出力データとして学習した学習済みモデルを用いて、複雑度からナンスマイニングの難易度を求めてもよい。
【0060】
制御部210は、制御部210は、ナンスマイニングの難易度に応じて、ハッシュ値に基づいてナンスマイニングを行う。
【0061】
ステップS840において、制御部210は、ハッシュ値と、ナンス値と、に基づいて、シード値を生成する。
【0062】
ステップS850において、制御部210は、シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する。より具体的に説明すると、制御部210は、シード値を用いて選択されたブロックチェーンプロトコルにしたがってウォレットを生成する。制御部210は、予め設定されているブロックチェーンプロトコルを選択するようにしてもよいし、画面等を介してユーザーによって指定されたブロックチェーンプロトコルを選択するようにしてもよい。
【0063】
5.3 プロトコルとサンプルコード
Account Miningシステムの具体的なプロトコルは以下のようになる。すなわち、上述したフローチャートの処理のプロトコルは以下に示す通りである。
ユーザーの入力を得る。
userInputs = [passphrase,salt, ...]
userInputsに基づいてinputHash及びdifficultyを設定する。
inputHashは、各userInputsのsha256ハッシュ値を結合したもののsha256ハッシュ値とする。
difficultyは、userInputsに基づいて調整してもよいし、固定値としてもよい。
userInputsとdifficultyに基づいてNonce Miningを行い、一意なnonce値を得る。
nonce = mine(inputHash、 difficulty)
4バイト長の整数 nonceValue : 0、1、2、3...232(0x100000000)を用いて0から探索を行う。
inputHashとnonceValueを用いてcandidateHashを生成し、先頭の指定されたbitが0になっているという条件を満たすかチェックする。
candidateHash= scrypt(inputHash, salt=str(nonceValue).encode("utf-8"), n=1024, r=1, p=1, dklen=32)を生成する。
scryptはGPU耐性の高い一種のハッシュ関数。nは CPU/Memory cost factor、rはブロックサイズ、pは並列化係数、dklenは出力のバイト長である。
条件への適合が初めて発見されたときに使用しているnonceValueに対し、nonceHash = sha256(str(nonceValue).encode("utf-8"))をnonceとする。
[inputHash、nonce]を用いてseed値を生成する
finalHash = sha256(inputHash + nonce)
※ここで+はbytes値の結合を示す。
seed = scrypt(finalHash , salt=finalHash, n=1024, r=1, p=1, dklen=32)
このseed値を用いて各ブロックチェーンプロトコルにしたがってウォレット生成を行う。
【0064】
本プロトコルに従ってNonce Miningを行い、ウォレットを生成するPythonプログラムは以下のようになる。
import hashlib
from pywallet import wallet
from mnemonic import Mnemonic
import time
class AccountMiner:
def __init__(self):
self.default_difficulty = 16
self.scrypt_n = 1024
self.scrypt_r = 1
self.scrypt_p = 1
self.scrypt_dklen = 32
def main(self, userInputsArray, nonce = None, network = "BTC", children = 1):
# get inputHash
inputHash = self.get_inputHash(userInputsArray)
# set up difficulty
difficulty = self.get_difficulty(userInputsArray)
# check nonce existence or mine nonce
if (nonce == None):
nonce = self.mine_nonce(inputHash, difficulty)
# get seed
finalHash = hashlib.sha256(b''.join([inputHash, nonce])).digest()
seed = hashlib.scrypt(finalHash, salt=finalHash, n=self.scrypt_n, r=self.scrypt_r, p=self.scrypt_p, dklen=self.scrypt_dklen)
# create wallet (here, we are using pywallet library)
seed_phrase = Mnemonic(language="english").to_mnemonic(seed)
w = wallet.create_wallet(network=network, seed=seed_phrase, children=children)
return {"nonce": nonce.hex(), "seed_phrase": seed_phrase, "wallet": w}
def mine_nonce(self, inputHash, difficulty):
target = self.get_mining_target(difficulty)
nonceValue = int(0)
while nonceValue < 0x100000000:
candidateHash = hashlib.scrypt(inputHash, salt = str(nonceValue).encode("utf-8"), n=self.scrypt_n, r=self.scrypt_r, p=self.scrypt_p, dklen=self.scrypt_dklen)
if candidateHash <= target:
break
nonceValue += 1

nonceHash = hashlib.sha256(str(nonceValue).encode("utf-8")).digest()
return nonceHash
def get_mining_target(self, difficulty):
# difficulty = how many digits to set to 0 in 256-bit binary notation
target = int('0'*difficulty + '1' * (256-difficulty), 2).to_bytes(32, 'big')
return target

def get_inputHash(self, userInputsArray):
hashedInputsArray = [hashlib.sha256(str(e).encode("utf-8")).digest() for e in userInputsArray]
sumOfHashedUserInputs = b''.join(hashedInputsArray)
inputHash = hashlib.sha256(sumOfHashedUserInputs).digest()
return inputHash
def get_difficulty(self, userInputsArray):
# we can also change difficulty based on user input
return self.default_difficulty
【0065】
上記アルゴリズムを実行すると、以下の結果が得られる。
# 入力
userInputs = ["firstPassword", "secondPassword"]
# 出力
nonce = 0x86965d80a12a14a5ca16734cb2bc12204045f0a3182ab0ee6d6866cded837ac6
seed= 0xbf8169a6a22131f87155eb0e9e6ea8934b29e7be3a005e40096eb8de9144a123
seed_phrase = 'sauce area have dust basic wire shed runway attend vibrant pretty charge raw video wedding divorce furnace able forum immune trouble pelican loyal lady'
# 参考情報
nonceValue = 65181
candidateHash = 0x00006b4502a990984fdfa7a2ed963828c4e8d5376b6802461865439faaf0a4af
time = 19.870543718338013 #sec
【0066】
6.効果と評価
6.1 攻撃者と正当ユーザーに要求する計算コストの区別
Account Miningは、Nonce Miningの結果得られるnonce値の活用により、攻撃者と正当なユーザーに要求する計算コストを分離することができる。これは、正当ユーザーがウォレットアプリにログインしている情報処理装置100にのみnonce値を保存することで実現される。図9は、攻撃者と正当ユーザーとの非対称性の一例を示す図である。
【0067】
図9の仕組みのセキュリティは、正当ユーザーの情報処理装置100内にのみnonceが保存されており、攻撃者がそれを簡単には入手できないことに依存している。これは、正当ユーザーの情報処理装置100をnonce値の存在により一種の物理キーとしているのに等しい。クレジットカードの安全性が、4桁の暗証番号だけではなく、物理キーとしてのカードとの組み合わせで実現されているように、ウォレットにおいてもnonce値を保持する情報処理装置100が物理キーとなる。
【0068】
6.2 ホットウォレットのコールドウォレット化
上記のような仕組みを実装したウォレットアプリは、アプリ型のホットウォレットでありながらも、よりコールドウォレットに近づいた存在になる。
【0069】
ホットウォレットとは、スマートフォン等、インターネットに接続された情報処理装置100に秘密鍵が保管されているウォレットアプリのことである。それに対して、コールドウォレットとは、ネットワークに接続しない、USB等の形をした小型ハードウェアデバイスの形で実装されたウォレットのことである。デバイス型コールドウォレットは内部に秘密鍵を保持し、その値はユーザーであっても読み取れないようになっている。ホットウォレットはインターネットに接続されているため、情報処理装置100がハッキングされたときに秘密鍵が流出するリスクが認識されている。それに対しコールドウォレットは、物理的な盗難・紛失リスクの上昇を犠牲に、ハッキングリスクを抑えたウォレットとなっている。
【0070】
Account Miningにおいては、情報処理装置100に秘密鍵を保存せずに必要なたびにユーザーにパスフレーズの入力を求める一方で、nonceのみを情報処理装置100に保存することでユーザビリティを維持する。したがって、ホットウォレットとコールドウォレットの中間のウォレットアプリを実現できる。図10は、秘密鍵の代わりにnonceのみをローカル保存するウォレットアプリの一例を示す図である。図11は、保存してあるnonce値を利用したトランザクションの一例を示す図である。
【0071】
Account Miningの特徴は、ただ単に秘密鍵を保存しないことではなく、nonceは保存することにある。
【0072】
秘密鍵を保存しないだけであれば、Brain Wallet形式のウォレットアプリはすべて実現可能である。しかし、そのような方法においては、ユーザーのパスワード入力時すべてに遅延時間が発生するため、ユーザビリティが犠牲になる。
【0073】
Account Miningにおいてはnonceが保存してあることで、6.1で述べたような仕組みによって、ユーザーの待機時間を発生させないことが可能で、ユーザビリティが向上する。
【0074】
加えて、nonceの保存は安全である。nonce値は、正当なユーザーにとっては計算コストを省略するのに有用なカギである一方、流出しても単体では意味をなさないデータである。万が一、情報処理装置100がハッキングされnonce値が流出した場合においても、攻撃者は秘密鍵を得ることはできず、総当たり攻撃を実行しなければいけない。これは、情報処理装置100がハッキングされたときに秘密鍵が流出していたホットウォレットより優れている。
【0075】
6.3 総当たり攻撃耐性
ランダム生成のウォレットと比べ、Brain Walletはユーザー入力に依存する以上エントロピーが小さくなり、可能性空間のサイズも小さくなるのは避けられない。そのため、総当たり攻撃の対象パターン数も少なくなり、攻撃耐性が下がる。
【0076】
こうしたBrain Walletにおいては攻撃者に要求する計算コストを増大させるのが対策となる。総当たり攻撃に対し、十分な遅延時間をユーザーが許容可能な形で実装できれば、攻撃を現実的な時間で実行不可能にすることができると考えられる。英語大文字小文字数字の62文字で構成される12文字のパスワードは6212通りであるので、一回の計算に30秒かかる場合、全パターンの計算には約3×1015(年)かかる。したがって、十分な遅延時間を確保すれば、Brain Walletにおいても十分な総当たり攻撃耐性を実現できる。
Account Miningでは、攻撃者と正当ユーザーとに要求する計算コストを区別することができるという特徴を活かし、従来のBrain Wallet生成手法よりも大きな計算コストを攻撃者にのみ要求することが可能となる。ウォレット秘密鍵を必要とする場合ごとにウォレットを復元する仕様において、ユーザーが待機できる時間は数秒を超えない。そのため、brainwallet.io等においても、その遅延時間は数秒にとどまる。しかし、Account Miningの手法においては、正当なユーザーはnonce値を情報処理装置100に保存しているので、待機時間をスキップできる。この性質によって、30秒以上の待機時間も現実的に実装可能であり、高い攻撃耐性を実現することができる。
【0077】
(1)実験1
上述したサンプルコードを用いて、nonce miningの難易度ごとの実行時間を計測した結果は図12のようになる。図12は、Nonce Miningの難易度ごとの探索回数と実行時間との関係の一例を示す図である。nonce miningにおいて計算された256bitのハッシュ値の先頭x桁が0となるとき、難易度xの条件を満たすと呼ぶ。average nonce value1210はnonce mining結果を得るまでの平均試行回数を示す。average time1220は、発明者の手元端末においてnonce miningに要した平均時間である。
【0078】
実測値によると、average time1220がはじめて30秒を超えるのは難易度17、はじめて60秒を超えるのは難易度18である。難易度を上昇させることで指数関数的に遅延時間を増加させることができることが分かる。
【0079】
(2)実験2
ユーザーに求めるパスワードの複雑さは総当たり攻撃耐性における重要なファクターの一つである。様々なパスワードパターン及びnonce mining 難易度において、入力に対するnonce値を得る総当たり攻撃の攻撃時間をシミュレーションすると、図13のようになる。図13は、パスワードの複雑度及びNonce Mining難易度ごとの総当たり攻撃時間の一例を示す図である。このシミュレーションは、各難易度のnonce miningにかかった時間の計測値、及びパスワードパターン数の理論値に基づいている。password complexity(複雑度)は文字種類数(character patterns)とその長さとに基づく。アルファベットの大文字小文字区別無しは26文字、区別したうえで数字も加えると62文字、30種類の特殊記号を加えると92文字になる。図13において、線1310は、difficulty:0を示す。線1320は、difficulty:4を示す。線1330は、difficulty:8を示す。線1340は、difficulty:12を示す。線1350は、difficulty:16を示す。線1360は、difficulty:20を示す。difficultyの並びは2610、2612、62、6210、6212、92、9210、9212も26と同様である。
【0080】
図13において線1390は100年のラインである。難易度17(遅延時間30秒程度)であれば、複雑性の低いパスワード(26通り)であっても10万年以上の計算時間が必要で、総当たり攻撃に対する脆弱性を克服できることがわかる。
【0081】
(3)実験3
更なる攻撃耐性を実現するには、パスワードの長さ、転じてパスワードの数を増やすのが有効であると考えられる。文字数が増えることは指数関数的にパスワードパターンを増加させるためである。実際に確かめると、図14のようになる。図14は、パスワードの長さを大きく変えた場合のnonce mining実行時間の一例を示す図である。図14において、線1410は、difficulty:0を示す。線1420は、difficulty:4を示す。線1430は、difficulty:8を示す。線1440は、difficulty:12を示す。線1450は、difficulty:16を示す。線1460は、difficulty:20を示す。difficultyの並びは2612、2624、62、2636、6212、6224、6236、9212、9224、9236も2612と同様である。
【0082】
Account Miningにおいては、適切な難易度(∝遅延時間)の設定を行ったうえで、更なる攻撃耐性の追求はユーザーに求めるBrain Wallet入力値の工夫に求める方が、ユーザビリティとセキュリティを両立できることがわかる。入力値の複雑さが不十分なまま、難易度のみ上昇させても、初回ログイン時の待機時間をやみくもに長時間化させるばかりであるからである。
【0083】
7.結論
本明細書では、ブロックチェーンサービスの抱えている問題に着目し、その根本原因が一般的なウォレットアプリのユーザビリティの悪さにあるという仮説に基づいて、ユーザビリティに優れたBrain Wallet形式をさらに普及させるためのセキュリティ改善手法としてAccount Miningアルゴリズムを提案した。
【0084】
Nonce Miningを用いたProof of Workシステムを組み込んだ本アルゴリズムは、従来のBrain Wallet生成手法では実現できなかったセキュリティとユーザビリティとの両立を可能にする。副生産物であるnonce値を活用することで、攻撃者と正当ユーザーに非対称性を生み出すことができ、正当ユーザーの計算コストを削減することができる。このことにより、(1)正当ユーザーは一度のみ待機すればよいので、許容度が増加すると予想され、Brain Walletの総当たり攻撃耐性を向上することができる。加えて、(2)秘密鍵を保存しないウォレットアプリにおいて、代わりにnonce値を保存することで実用に耐えるユーザビリティになり、よりコールドウォレットに近いウォレットアプリを実現できる。
【0085】
Account Miningの攻撃耐性に対する実験では、10桁以上のパスワードと難易度16以上のNonce Miningを行うことで、10年(1000万年)以上の総当たり攻撃時間が必要になることが確かめられた。実際の応用では、アルファベット大文字小文字+数字+記号で構成されるパスワードを、一つではなく複数、計24文字以上求めることで1030年以上の計算コストを要求するようにできる。
【0086】
将来においては、まず、実際のユーザーの待機時間許容度に対する実験を行い、適切な待機時間を見定めることが必要である。その際、ユーザーの複数入力を単に結合するだけでなく、その入力値を一定のプロトコルにしたがってスワップすることで、攻撃をさらに困難にできる可能性がある。
【0087】
<付記>
発明は、次に記載の各態様で提供されてもよい。
【0088】
(1)情報処理装置が実行する情報処理方法であって、ユーザーによって入力された入力データを受け付け、前記入力データに基づいてハッシュ値を求め、前記ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求め、前記ハッシュ値と、前記ナンス値と、に基づいて、シード値を生成し、前記シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する、情報処理方法。
【0089】
(2)上記(1)に記載の情報処理方法において、前記ナンス値を前記情報処理装置のメモリに保存し、前記ユーザーの2回目以降のログインの際には、前記メモリの前記ナンス値を利用して前記ウォレットを復元する、情報処理方法。
【0090】
(3)上記(1)又は(2)に記載の情報処理方法において、ナンスマイニングの難易度を設定し、前記難易度に応じて前記ナンスマイニングを行う、情報処理方法。
【0091】
(4)上記(3)に記載の情報処理方法において、前記入力データの複雑度に基づいて前記難易度を設定する、情報処理方法。
【0092】
(5)上記(4)に記載の情報処理方法において、前記入力データの複雑度は、前記入力データの文字種類数と文字の長さとから求められる、情報処理方法。
【0093】
(6)上記(1)から(5)までの何れか1つに記載の情報処理方法において、前記シード値を用いて選択されたブロックチェーンプロトコルにしたがってウォレットを生成する、情報処理方法。
【0094】
(7)情報処理装置が実行するウォレットの生成方法であって、ユーザーによって入力された入力データを受け付け、前記入力データに基づいてハッシュ値を求め、前記ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求め、前記ハッシュ値と、前記ナンス値と、に基づいて、シード値を生成し、前記シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する、ウォレットの生成方法。
【0095】
(8)情報処理装置であって、ユーザーによって入力された入力データを受け付け、前記入力データに基づいてハッシュ値を求め、前記ハッシュ値に基づいてナンスマイニングを行い、一意なナンス値を求め、前記ハッシュ値と、前記ナンス値と、に基づいて、シード値を生成し、前記シード値を用いてブロックチェーンプロトコルにしたがってウォレットを生成する、情報処理装置。
【0096】
(9)プログラムであって、コンピュータに、上記(1)から(6)までの何れか1つに記載の情報処理方法を実行させるためのプログラム。
もちろん、この限りではない。
【0097】
例えば、上述のプログラムを記憶させる、コンピュータ読み取り可能な非一時的な記憶媒体として提供してもよい。
【0098】
最後に、本発明に係る種々の実施形態を説明したが、これらは、例として提示したものであり、発明の範囲を限定することは意図していない。新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0099】
100 :情報処理装置
130 :入出力部
210 :制御部
220 :記憶部
230 :入出力部
240 :通信部
1210 :average nonce value
1220 :average time
1390 :線
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14