フューチャー技術ブログ

仮想通貨の個人ウォレットの守り方

テクノロジーイノベーショングループの前川です。
秋のブログ週間連載の9日目として、今回は仮想通貨の個人ウォレットのセキュリティの考え方についてお届けします。

仮想通貨の存在は、2017年から2018年にかけてのビットコインの暴騰と暴落のニュースを経てもまだまだ「そういう金融商品がある」「取引所を介して売買ができる為替みたいな物」程度の認識でしか一般には浸透していませんでした。

ここ1,2年でDeFi(分散型金融)、NFT、GameFiなどの関連市場やエルサルバドルの法定通貨にビットコイン採用といったホットな話題が多数立ち上がり、いよいよ腰を上げて探りを入れ始めたという方も多いのではないでしょうか。(初めてこれらの単語に触れる方々の参考になるよう文末にリンクを挙げています)

様々なニュースを足掛かりに分散型金融の世界に足を踏み入れたものの、従来の金融商品の延長のように捉えて何となく運用してしまっている人が今直ぐにでも押さえておくべきポイントとして、本稿では個人でウォレットを持つ場合のセキュリティについて考え方と運用について掘り下げます。

上に挙げたような関連市場へのアクセス手段は既に導入記事が多数あるのでそちらに譲ります。本稿では技術面では深堀りせずに利用者目線で把握しておくべき表層上の特徴に注目していきます。

「シードフレーズ」「秘密鍵」「アドレス」の関係

image.png

仮想通貨のウォレットを個人で持つ場合に意識して守らなければいけない物には、資産の在り処となるアドレス、取引に最終的なGoサインを出す秘密鍵、それらを生み出す全ての根源であるシードフレーズ、が有ります。まずこの3つについて特徴とその漏洩の影響についてご紹介します。

(用法により「ウォレットをロックするためのパスワード」や「シードフレーズに更に味付けするパスフレーズ」等も出て来ますが本稿では割愛します。)

アドレス

我々が仮想通貨を扱う取引全てに現れる、「資産の在り処」です。

このアドレスと、そこに纏わる取引内容は全てインターネット上に公開されています。各ブロックチェーンネットワークのエクスプローラを使って「どのアドレスでどんな取引がされたか」を「誰が、誰のアドレスに対しても」照会が可能です。

アドレスはシードフレーズを使って、(実質的に)無尽蔵に生成できます。

アドレス漏洩の影響

仮に現実世界であなたを知る人があなたのアドレスも知ったとすると、「あなたが仮想通貨ウォレットを通して行った全ての取引と残高が相手に丸見えになる」と考えてください。過去も未来も隠すすべは有りません。何処か専門の機関に依頼すれば消してくれる、などという仕組みは有りません。

アドレスを使って他者と仮想通貨を取引する時には、(何か取引アドレスを匿名化するサービスでも使用しない限り)相手に全ての取引と残高を覗く権利を与える行為である旨、覚悟してください。

アドレスが知られていたとしても、それだけではそのアドレスに保有されている資産を動かす事はできません。あくまで見えるだけです。

秘密鍵

秘密鍵は各アドレスで行われる取引を承認するための鍵です。アドレスとは1対1で紐付いており、変更する事はできません。秘密鍵が違えばその鍵が指すアドレスも違うという事になります。

秘密鍵漏洩の影響

image.png

秘密鍵が盗まれると、そのアドレスを使った取引がやりたい放題になります。盗まれた後で防ぐ事は一切できません。秘密鍵が盗まれた後にできる事は、そのアドレスに紐付く全資産を一刻も早く別のアドレスに移す事だけです。

資産を別アドレスに避難させるには送金を実行するための手数料が必要になりますが、それを妨害するために攻撃者は真っ先に手数料に使える通貨を奪います。そのため、資金を対象アドレスの外、かつ対象アドレスにいつでも送金できる場所に用意しておく必要が有ります。現実にはCEX(仮想通貨の販売所/取引所事業を展開する企業のサービス)に資金を置いておく形が多いと思います。

通常は秘密鍵だけが盗まれるという事態は考え難いです。秘密鍵はシードフレーズよりも露出する機会が少なく、秘密鍵が漏れた時点でシードフレーズの方も同時に漏れている可能性の方が高いからです。

退避用のアドレスを作る際は、シードフレーズを新しく用意するところから開始してください。予め用意しておいたシードフレーズは、今回漏洩したのと同じ経路で同じように漏洩している可能性が有ります。

避難経路と手順は定期的に確認しましょう。(DEXのステーキング解除、Vaultのロック期間確認、報酬確保、NFTの所有権移動、 etc…)

シードフレーズ

ウォレットアプリをセットアップする際「これは厳重に管理しとけ」と釘を刺されたあれです。シードフレーズは複数のアドレスと秘密鍵を生み出す根源です。シードフレーズを変更する事はできません。シードフレーズが違えばそこから生まれるアドレスも鍵も違います。

ウォレットアプリを使ってアドレスを次々と生成する事ができますが、シードフレーズが決まった時点で、そこから1番目に生成されるアドレス、2番目に生成されるアドレス…ひいては”N番目に生成されるアドレス”が全て決定しています。

シードフレーズ漏洩の影響

image.png

シードフレーズが盗まれるという事はそこから生まれる全アドレスの全権利を余すこと無く盗まれるという事です。盗まれた後にできる事は、そのシードフレーズから生成した全てのアドレスから全資産を一刻も早く別のシードフレーズから生成したアドレスに移す事だけです。

シードフレーズと秘密鍵を死守せよ

さて、ここまで散々脅しましたのでシードフレーズと秘密鍵が漏れる危険性についてはご理解頂けたかと思います。

何より恐るべき事は、鍵の役割を持つこれらを後から変更するすべが一切無い点です。漏れたらもう急いで資産を逃がすしかない。では、どのようにして漏れるのか?どう防ぐのか?といった辺りに触れていきます。

漏洩経路:フィッシング(SNSでの報告例:超多数!)

本当に被害報告が多いです。フィッシングの誘導の手口は様々です。

対策としてはまず大原則も大原則、絶対の決め事として シードフレーズを何処にも入力するな!!!

シードフレーズの露出が必要になる場面は通常ただ1つ、「現在使用しているシードフレーズを流用して新しいウォレットアプリ/新しい端末に乗り換えたい時」だけです。それ以外の場面では絶対にシードフレーズを入力しない、そもそも画面に表示させない、外気に触れさせない、存在を意識しない事を徹底しましょう。

ごく簡単な事の筈ですが、不思議とこれができない人が後を絶ちません。

偽ウォレットアプリ対策には、そのアプリの公開者のWebサイトにアクセスして、ブラウザのアドレスバーでドメイン名が間違っていない事を一文字ずつ確認して、そのサイトからのリンク経由でダウンロードするようにしましょう。公式サイトで見つからないからと言って検索サイトやアプリストアで検索してインストールするなどしてはいけません。公式サイトがリンクしてないならそんなアプリは存在しないのです。

フィッシング対策はブラウザが幾らかはアシストしてくれはするものの、大部分はユーザのセキュリティ意識にのみ依拠します。逆に言えば意識次第で防御できるのですから、しっかりやりましょう。

漏洩経路:シードフレーズをメモした紙が紛失・盗難(SNSでの報告例:なくはない)

言うに及ばず。実印や登記識別情報通知書などと一緒に厳重に管理しましょう。

漏洩経路:端末のハッキング(SNSでの報告例:無し?)

報告例を見た事は有りませんがそれもその筈、まずこの手口に遭ったと気付く事ができないので。ただ「ウォレット乗っ取られたけどシードフレーズが漏れた経路に全く心当たりが無い」というケースで一定の可能性があるのはこれだと思います。

ハッキングの手口は大きく分けて2通り。

  • データをPCのストレージから直接盗み出す
  • PCの表示画面を遠隔で盗み見て、たまたまその時に画面に映っていたシードフレーズをメモしておく
    • 画面ではなくキー入力ログを採取されている場合も

いずれも対策としては、アンチウイルスソフトを入れておく、怪しいサイトにアクセスしない、等々。当たり前の事ですね。
ただ後者の手口に関しては先ほどフィッシングの項で挙げた対策も有効で、とにかくシードフレーズを露出/入力さえしなければこの手口で盗み出す事ができなくなります。

前者のこれはPCにシードフレーズを保存さえしなければ避けられるわけですが……これを実現するのが、ハードウェアウォレットと呼ばれる物です。

ハードウェアウォレット

ハードウェアウォレット(以下HW)は、シードフレーズとそこから生成される秘密鍵等の情報を内部に保持し、それらを容易には出力しないように制御されている装置です。具体的には下記の機能を備えています。

  • シードフレーズを新規に生成する
  • 既知のシードフレーズをインポートする
  • HWを扱う全ての操作に対しパスワードやPINコード等による認証を要求する
  • PC等、HWを接続した機器からのリクエストに応じて取引を承認する
    • 具体的に言うと「PCは実行したいトランザクションデータをHWに渡し、HWは秘密鍵で署名したトランザクションデータを返す」
image.png

重要なのは「シードフレーズと秘密鍵がHWから出てこない」という点です。

認証機能がHW本体に付いていれば、仮にPCがハッキングされていようと、できる事はせいぜいHWにリクエストを送る事だけ。HWをPCに接続してPINを入力するといった物理的な操作をクリアしない限り攻撃者は何も得られません。(「認証機能がHW本体に付いていれば」という前提は結構大事で、これがPC上のキーボードやマウス等で入力できるタイプのHWだと結局PCに接続されてさえいれば攻撃可能になってしまいます。)

ハードウェアウォレット、鉄壁なのでは…

はい、守りは非常に硬いです。「ハッキング対策として言えば」。

実態として、防水・耐火・耐熱・耐衝撃といった耐久性、生体認証や接続可能機器登録といった認証の多要素性、リモートロックなど事件発生後の補償回路に関する機能がついている商品がほぼ見掛けられない上に、購入してから届くまでに4~7日かかるといった商品が多数あります。となると、どうなるか?

以下、何も考えず「HW買った!もうこれで万全だ!」と安心しきってしまった最悪のケースの想定です。

  • 手を滑らせてHWを落として/コーヒーを零して故障してしまい、シードフレーズも分からず復旧不可、資産全て失う
  • 同上、ただしシードフレーズはメモしてあった…が、新しいHWを注文して届くまでに数日待ち
  • 紛失/盗難被害に遭った。PINに自信が持てず一刻も早く資産を移したい。がそれが可能になるのが数日後

といったリスクに晒されます。実際のところ頑丈に設定したPINなら数日で破られる心配は無用とはいえ、ボラティリティの高い通貨を扱っている場合等、このリードタイムが重い足かせになる場面は容易に想像できます。

また、紛失/盗難により人手に渡ってしまった可能性がある場合は時間を掛ければいずれPINが破られる事を想定してぼちぼち新しいシードフレーズから作ったアドレスに引っ越す作業が必要になるという点もご注意ください。

巷には「手持ちのHWを失くしても新しいHWにインポートすればまたすぐ使えますよ!」などと安易に書いている記事が非常に多いですが、それが通用するのはきちんとその為の準備と心構えがある事が前提になっている事をご承知おきください。

具体的には下記が考えられます。

  • HWでセットアップしたシードフレーズをメモしておく
  • HWを2台常備しておき、片方をセットアップした時のシードフレーズを他方にインポートしておく
  • 番外編:HWが無くても取引できるよう緊急避難的な逃げ道を確保しておく
    • 要は、メモしておいたシードフレーズ(とパスフレーズ)を事故発生時にはソフトウェアのウォレットにインポートしてしまう。当然、あらかじめ安全でクリーンな端末と環境を用意できる事が前提

注意点はまだあります。

「HWが壊れて画面が映らない。ボタンが反応しない。PCに接続しても応答しない」。どうしますか?自治体の指示に従ってゴミの日に……出す前にやる事があります。

水没や破損などで「実用には耐えられない」程度に壊れたとしても、技術のある人なら中のデータをサルベージできる可能性が残っています。ケースをこじ開けて中身を粉々にするか、新しいHWで新しいシードフレーズを生成しそちらに全資産を移動して元のアドレスを空にしてから廃棄しましょう。

これで完璧?

セキュリティに完全は有りません。特に仮想通貨の個人ウォレットは、「鍵を変える事ができない」「何か有った時に問い合わせを受けるべき責任を持つ者が存在しない」「誰も助けられない」等々、他の金融資産口座とは明らかに一線を画す危険性の高い代物です。詐欺行為も蔓延し、犯人は捕まえられず、保険商品も満足にはありません。

くれぐれもお覚悟を。若しくは失っても死なない程度の額での運用を。

Appendix

ウォレットの種類について補足

本文中では省きましたが、以下のようにウォレットはソフトウェアのウォレットアプリとハードウェアウォレットの他にも以下のように幾つかの種類が有ります。

image.png

※シードフレーズや秘密鍵の情報を、インターネットに接続される(され得る)領域に保存するのがホットウォレット、され得ない領域に保存するのがコールドウォレット。

「スチールウォレット」はあまり馴染みがありませんが、”steel”の名の通り金属製プレートにシードフレーズを刻印した物です。紙だと耐久性が心配と。ならいっそ庫内温度保証かつ密閉型の耐火金庫を導入した方が万が一の変形も腐食も防げるし他の貴重品も守れて良いんじゃないですかね……。

シードフレーズとアドレスの成り立ちに係る技術

シードフレーズ・パスフレーズ・秘密鍵・アドレスに関して更に技術面で深掘りしたい方は以下をご参照ください。

初めての方向け参考記事

冒頭に挙げたキーワード自体が初耳という方に向けて、簡単にその概要と光と闇が伝わる記事を幾つかピックアップしてみました。

秋のブログ週間連載の9日目でした。