kenmaroです。
秘密計算、準同型暗号などの記事について投稿しています。
最近格子暗号を理解するためのロードマップを公開しました。 格子暗号に興味のある方、勉強してみようかな、という方はぜひご覧ください。
概要
2020年と2021年の今にかけて仮想通貨が大いに盛り上がり、
ブロックチェーンで管理される仮想通貨及びNFTなどのデジタル資産に興味を持った人も多いのではないでしょうか。
仮想通貨はブロックチェーンを基盤とした分散型で管理された通貨として、
セキュリティや暗号とは切っても切り離すことのできない関係にあります。
ブロックチェーンと絡めた暗号学についてまとめて行けたらいいなあと思って調べていた矢先に、
このブログに行き当たりました。
これは仮想通貨の取引所として世界最大(であり現在ほぼ一強)であるBinanceのCEOを務める、
CZ氏によって書かれたブログです。
2020年2月に更新されています。
書いてあるテーマとしては、題名にある通り
どのように仮想通貨を安全に管理するか
といったことなのですが、実際に読んでみると
われわれが生きるこのデジタル社会における、セキュリティに対する考え方の基本姿勢
みたいなものを読み取ることができました。
基本的に彼のテーマとしては仮想通貨をいかにして安全に守るか、ということですが、
読み方によってはデジタル資産や、個人の情報をいかにして守ることができるか、
と読み替えることができることに気づきました。
今回は、このCZ氏によるブログ記事を中心に、
我々の大切な資産や個人情報などをいかに安全に守るのか、
それに必要なことや考え方が詰まった記事です。
ブロックチェーンに関する暗号技術などは一旦置いておいて、
このあたりのマインドのことについてまとめていきたいと思います。
大事な3つのこと
To secure your coins, you just need to do the following 3 things:
- Prevent others from stealing.
- Prevent yourself from losing it.
- Have a way to pass them to your loved ones in the event that you become unavailable.
コイン(我々の資産や情報と読み換えていきます。)を
守るためには、次の3つの観点(だけ)から対策をする必要がある。
- 他人が盗むことを妨げること
- 自分でなくしてしまうことを妨げること
- 自分が居なくなってしまった時、愛する人へとそれらを贈与できるような方法を持っておくこと
これを達成するために、仮想通貨で言えば自分の資産を自身のウォレットで管理することを推奨する人が多いですが、これが普通の人にとっていかに技術的に簡単ではないか、考える必要がある。
A bitcoin private key looks like this: KxBacM22hLi3o8W8nQFk6gpWZ6c3C2N9VAr1e3buYGpBVNZaft2p
ビットコインに関してはアドレス(口座番号)を開ける鍵は上記のような文字列である。
非常に単純だが、この文字列がだれかに漏洩してしまうと、アドレス上の仮想通貨を好きに使ったり送金したり、なんでもできてしまう。
There is also the concept of a “seed phrase,” which is a set of 12 or 24 plain English words in a particular order. They can be used to generate a set of private keys. Many wallets use seeds
また、個人やクラウド上のウォレットを管理している人も多いでしょうが、
シードフレーズと呼ばれるものもあり、これは12や24の英単語の組み合わせからできている。
これを使うと上の秘密鍵を生成できるため、多くのウォレットでは秘密鍵の代わりにこのシードフレーズを用いている。
このフレーズが盗まれるということは秘密鍵を盗まれたことと同値なため、シードの扱いについても秘密鍵の扱いと同等のことをする必要がある。
Back on topic, to securely hold crypto yourself, you need to:
- Prevent others from obtaining your private keys; preventing hackers, securing your computers from viruses, the internet, etc.
- Prevent yourself from losing your private keys; having backups to prevent loss or damaged devices, and securing those backups.
- Have a way to pass your private keys to your loved ones in the event of a death. It’s not a pleasant scenario to consider, but as responsible adults to our loved ones, we must manage that risk.
つまり、上で書いた3つの観点はこのように書き換えることができる。
- ハッカー、ウイルス、インターネットなどの脅威から、あなたの秘密鍵を守る術を持っていること
- バックアップなどにより秘密鍵を欠損や紛失から守り、あなたが秘密鍵を失ってしまうことを防ぐこと
- あなたに万が一のことがあった時、秘密鍵を安全に相続人へと贈与できる術を持っていること
言われてみれば当たり前に感じるかもしれませんが、
自分の資産となるものや、重大な個人情報などを今の社会のなかで守ろうとした時、
上の3つの観点はたしかに重要だと感じますよね?
我々の持っている情報はインターネットにさらされており、
セキュリティを今一度きちんと考えて管理し始めること、その意識改革から始めるべきな気がしてきます。
ブログでは、以上の3つの観点をさらに掘り下げていきます。
他人から秘密鍵を守る
秘密鍵やコインをどこで管理するか、ということにはいろいろな選択肢がありますが、
コンピュータ上で管理しようとする人が一番多いのではないだろうか。
一番大事なのは、
- 資産の入ったコンピュータを普段使うようなコンピュータとは完全に隔離し、
- そのコンピュータはインターネットから常に切断された状態で保管すること
です。インターネットに接続された瞬間に、OSやダウンロードしているソフトウェアの脆弱性をついたウイルスやハッキングの対象となるリスクがあります。
ソフトウェアからバグを完全に消し去ることは不可能だからである。
個人のウォレットを使うという選択肢
個人でウォレットを管理し、資産を守るという選択肢を取る場合、
上記で言及したポイントを踏まえていくつかのアドバイスがある。
コンピュータによるウォレット管理
基本ルール
- USBにまずオンラインに繋いでも良いコンピュータを利用してダウンロードし、そのUSBを使用してオフラインでソフトウェアをインストールする
- USBは最低3つのウイルスソフトによってスキャンをかけてきれいにしておく
- USBから目的のコンピュータにソフトウェアをインストールするとき、最低3日はそのソフトウェアのセキュリティに関するニュースが報道されていないかをチェックし、その上でインストールする
- 必ず公式のウェブサイトからソフトウェアをダウンロードする
- OSとソフトウェアは必ずオープンソースのものを選択する(OSはLinuxを、オープンソースのウォレットを使用する)
オフラインサイニングについて知る
これらを安全に行い、全てをオフライン上のコンピュータに用意したら、
オフラインサイニング を行って取引を行います。
offline signing を行うことで秘密鍵をオンライン状態に置くことなく、
署名のみを行い、それをインターネットにつながっているデバイスに送ることができます。
offline signing に関しては下を参照。
ディスク暗号化について知る
また、コンピュータのディスクが物理的に盗まれた時のことを考慮し、
ディスクは暗号化を必ず行います。
ハードディスク暗号化に関しても詳細はやはりウィキペディアなどを参照します。
もし以上が全て実行でき、デバイスを用意できるとすれば、そのデバイスを安全な場所で保管することでこの記事をこれから先読む必要はないでしょう。
もし上記の実行が難しければ、いかが比較的実行しやすい選択肢となります。
モバイルデバイスによるウォレット管理
- iphoneを用意する(Androidはバージョンが多すぎるためセキュリティのためのバージョントラッキングすることが困難になりやすい)
- 普段使いのモバイルとは完全に隔離する
- 必要なソフトウェア(ウォレット)のみをダウンロードする
- SIMカードは普段使いのものとは違うものを専用で用意する
- ダウンロードするときはモバイル回線の4Gを必ず使う(WiFiには絶対に繋がない)
- 取引にサインするとき、OSのアップデートをすっるときのみ4Gでインターネット接続し、その他の時間は常に機内モードにしてインターネットから隔離しておく
- 実際にいくつかのソフトウェアはオフラインサイニングを実装しているため、それらを使用できるのであれば使用する。これによってもしウォレットアプリにバックドアが仕込まれていたとしても、インターネットを介して秘密鍵が漏洩することはありえない。
最新のモバイル(iphone)はディスクを完全に暗号化をサポートしている。
デバイスが物理的に盗まれた時のために、パスワードは類推されにくいものにし、厳重にしておく。
このドキュメントのページ10あたりを見てみても良いでしょう。
自分で秘密鍵を無くしてしまうことから守る
自身が資産を保存しているデバイスをなんらかの形で紛失してしまったり、
そのデバイスがダメージを受けてしまうことは考えておけなければならない。
例えば下のような記事は最近よく見たりしますよね。。
バックアップの大切さについて今一度考える
そのような事象に対して一番やっておかなければならないことはもちろんバックアップをとっておくことである。
色々な方法があり、それぞれに利点や欠点があるが、
大事な考え方は、バックアップは複数を取り、それぞれを物理的に離れた場所に保存しておくことが一番大事である。
バックアップとして秘密鍵を紙に書き保存しておくことを推奨されることも多いが、
いくつも考えておかなければならないことがある。
簡単にスペルミス、たとえば0とOなどは顕著であるし、そのようなことが起きてしまった後になにを間違っていしまったのか辿ることはとても難しい。
なにより、以下のリスクは往々にして考えられる。
- 他の紙と紛れたり、紛失のリスク
- 火事、洪水などの災害リスク
- 暗号化をすることができないため、他人に見られ漏洩してしまうリスク
秘密情報の保管場所
金庫など
金庫などに置いておく手法もあるが、上のリスクが根本にあることから推奨はしていない。
写真を撮ってクラウドストレージに置いておくことにも大きなリスクがあることを覚えておかなければならない。
ハッカーによりメールやパスワードを盗まれた場合、クラウド上のデータは簡単に漏洩してしまう。
また、クラウド上のデータはクラウドプロバイダーの管理者の権限を濫用すればいつでも漏洩することが可能であることは知っておく必要がある。
シードを保管するためにデザインされた金属タグのような製品も存在し、それにシードを保管し、
そのタグを他の重要な貴金属とともに銀行の金庫に保管しているひとも存在する。
これは金属を保管するのに慣れている人にはいいかもしれない、しかしながら銀行に物理的にアクセスされた場合のリスクについて、その際に暗号化などは施されていないケースが多いことは知っておくべきである。
USBなど
私は以上のことを考慮し、USBによる保管を推奨している。シードや秘密鍵を複数のUSBに保管し、それらを物理的に離れた複数の場所に保管しておく手法である。
技術的もしくはツールに対しUSBの選択に少し専門知識が必要となるが、
USBに対しても耐衝撃、耐水、耐磁気などの性能をもっているUSBは多くマーケットに存在している。
VeraCryptはエントリーレベルとして非常に適したデバイスだと考えられる。
強力な暗号化が施されているが、もちろん他人に対して簡単に手渡してしまうようなことは避けなければならないし、暗号化の鍵についても定期的に変更し、セキュリティ対策の新しいデバイスがマーケットに登場した場合は速やかに交換する準備もしておくべきである。
相続人へと安全に渡す術
当たり前ではあるがあなたは永遠には生きられない。
いつでも自身の資産を自身が考える人に渡す準備をしておくべきである。
仮想通貨による資産は、他の人の干渉を受けない形での譲渡が比較的簡単である。
先述の紙や金属タグによるシードの保管をしている人に対して、この譲渡はとても単純なものである。
しかしながら、ハッカーによるデータの漏洩、一度渡してしまった後にそれらの資産をいつでも彼らが好き勝手にできることは大きなリスクであるため、譲渡する相手への信頼度によってはそのリスクを取るかどうかはきちんと考えておく必要があるだろう。
いざというときの秘密情報の共有方法について考えておく
私は鍵を他人とそのようにシェアしてしまうことについてはいかなる場合であっても推奨はしていない。
もし資産が誰かによって動かされたり盗まれたりした時、誰によって動かされたかはわからないし、だれが情報を漏洩したかがわからないからである。そのような事態が起きてしまった時、状況は混沌とし収拾がつかなくなるだろう。
銀行にそれらを保存しておくことは、弁護士を仮に介していたとしても推奨はできない。
現金や貴金属などの物理的なものを銀行の金庫に置いている場合、それらを弁護士が仲介となって動かす場合とは違い、秘密鍵に対する情報を複数人が知っている可能性がある場合(この場合銀行の担当者、弁護士、本来資産を譲渡しようとしている人など)、仮に資産が動かされたり盗まれた時、だれが動かしたかの証拠を掴むのはとても難しくなることが考えられるからである。
Deadman Switch について知る
もし先述のUSBによる保管手法を実践している場合、安全に譲渡することを考えるといくつかのセットアップが必要となる。
故人スイッチというサービスが存在する。
資産保有者に対して定期的にメールなどを送り、一定の期間個人を証明するような返信がない場合、保有者が故人になった、つまり消息不明もしくは死亡したと判断し、前もって設定してあった相続人に対して決められた情報を相続するようなサービスである。
詳しくはこの辺が参考になるかと思います。
google自体も、故人となった人のアカウントに対して、相続人がアクセスできるサービスも存在する。
私はこのようなサービスを使用していないため、どのサービスが良いかと言及することはできないが、
個々人がこれらを試し、信頼できるとする故人サービスを活用することも可能である。
少し古いですが、この辺に言及されていました。
USBを使って保管している秘密情報を暗号化している鍵に対して、メールなどを使って相続人に対して共有指定置くことを考えるかもしれない。実際その手法はかなり私の考える正解に近いが、最適ではないだろう。
いかなる環境であっても、USBを暗号化する際の鍵をインターネット上に晒してしまうことは秘密情報に対するセキュリティを圧倒的に低下させてしまうことにつながるからである。
では、相続人に対してUSBの秘密鍵をメールなどの手法で送信する際に、
メールにスクランブルをかけ(つまり暗号化し)送信してはどうだろうか。
そう考えた人は実際いい方向に考えていると言っていいだろう。
GPGについて知る
しかしながら、メールをスクランブルするようなことは必要ではない。
GPGもしくはPGPと呼ばれる公開鍵型の暗号を用いてやり取りするのが一番簡潔であり有効である。
相続人が生成した秘密鍵と公開鍵のペアに対し、公開鍵を資産保有者が受け取り公開鍵を用いて故人になった時のための秘密情報を暗号化する。
それにより、相続人のみが秘密鍵を用いてこれを復号できるようになる。
PGPを用いたメールなどを使うある程度の技術に対する知識が必要なのと、相続人が秘密鍵に対して安全に保管する必要がある、その点に関しては気をつけなければならない。
GPGについて知らない人は、以下のリンクなどを読むとかなり理解が深まります。
上に書かれていることを全て心に留め、セキュリティを考慮した秘密情報の保護ができるとすれば、
これでようやくエントリーレベルのセキュリティを担保したと考えて良い。
しかし、これはアドバンスレベルではない。
アドバンスレベルのセキュリティを考えるために、multi-sig, threshold signatures などのキーワードについて考える必要もあるが、ここでは言及しない。
仮想通貨取引所を使用するという選択肢
ここまで読んで、「エントリーレベル」のセキュリティを手に入れるために、
どれほどの労力をかけなかればならないのか、途方に暮れてしまった人も多いと思う。
それらの人に対して、手放しに仮想通貨取引所を使用すれば全てが解決される、などということはできない。
仮想通貨取引所を使用するとしても、気をつけなければならなないことはたくさんある。
基本的に大規模な取引所はセキュリティ対策に優位性があることを知る
取引が大きく、実績のある取引所を使うことが必要である。
Binanceをはじめとした世界でも有数の大規模な取引所を使うことは、リスクの観点からとても重要である。
- セキュリティにかけるコストと人員
- セキュリティに対応する技術スタック
に対し、大規模な取引所は小さな取引所に対して圧倒的な優位性がある。
最新のセキュリティを担保するためのコストは膨大であり、小さな取引所ではかけることのできないコストを大規模な取引所は費やしていることを知るべきである。
小規模の取引所には上場を目指すことを繕ったスキャムのような会社があることを理解しておく必要がある。
実質の取引で十分な利益を上げている大規模な取引所ではこのようなスキャムを働く必要は非常に低いため、
自身の大切な資産がこのようなスキャムの餌食になるリスクを取りにくい。
悪質な取引所のスキャムについて知る
もちろん大規模な取引所はハッカーの攻撃対象となるチャンスも大きい。
しかし、近年では小さい規模の取引所にもハッカーが積極的に攻撃を仕掛けていること、
また、大規模取引所には常時5〜10の外部のサイバーセキュリティに特化した会社が常駐し、
セキュリティを守るために膨大な労力を費やしていることを知っておくべきである。
Binanceに関するマーケティングのように聞こえるかもしれないが、Binanceは他の大規模な取引所とくらべても圧倒的な優位性を持っている。
SIMスワップなどによりメールアドレスをハックされたユーザーに対して、他の取引所では資産が動かされた事件などに対し、BinanceではAIなどのパトロールによりそれを事前に検知しユーザの資産を守った実績などがある。
仮想通貨取引所を使用する際に守ること
アクセス元のコンピュータを守る
コンピュータはセキュリティ上一番脆弱なポイントになりやすい。
可能な限り取引所を使うコンピュータと普段使いのコンピュータは分ける。
また、アクセスするためのコンピュータには信頼できるセキュリティ対策ソフトを入れ(セキュリティには投資するべき)、その他の不必要なソフトウェアに関しては極力入れないようにする。
ファイヤーフォールは最大の設定にしておく。
また、ファイルをダウンロードするようなことは行わないようにする。
ドキュメントやファイルを転送してもらうことがあれば、ダウンロードするような形ではなく、
Googleドキュメントへのリンクなどをもらい、実際にファイルをダウンロードせずブラウザ上で確認しよう。
勝手にローカルのファイルをインターネット上にシンクするような設定にも気をつけよう。きhん敵にはオフにしておくべきである。
OSのアップデートは手間となることが多いが、多くの場合セキュリティへのパッチを行うなどのアップデートがなされている。アップデートは極力行うべきである。
メールアドレスを守る
メールに関してはGmail もしくは Protonmailを使用する。
この二つは他のメールサービスに比べてセキュリティ対策が強固である。
仮に複数の取引所を使っている場合、それぞれの取引所でことなるメールアドレスを用いよう。
また、それぞれのメールアドレスは推測されにくいものを使い、ハッキングのリスクを極力減らそう。
メールサービスには2段階認証を必ず用いる。Yubikeyによる2段階認証を強く推奨している。
近年SIMスワップによる被害が多数あり、それによりモバイルを用いての2段階認証が破られ、
結果的に取引所へのハッキングを受けてしまった事例が発生している。
特にあなたの住んでいる場所がSIMスワップが多く起きている国である場合、より電話番号とメールアドレスの紐付けには注意を払うべきである。
パスワードをセキュアに守る
とりあつかうソフトウェアやアカウントに対して、異なるパスワードを用いることは当たり前と考えるべきである。それらを記憶しようとすることはやめよう。パスワード管理ソフトウェアを使用するべきである。
LastPass もしくは 1Passwordが推奨するパスワード管理ソフトである。
それらのソフトウェアは異なるデバイス間やブラウザ上でシンクして使うことができる。
生のパスワードはローカルのみに存在し、シンクされるものは暗号状態のパスワードとして取り扱われている。
このシンクの問題についてより対処する必要があると考えるのであれば、KeePassを用いるのが推奨されるだろう。KeePassはローカルにのみパスワードを保管する。その代償として各デバイス間でのシンクなどはできない。
ここは先述したように利便性とセキュリティがいつも背反するものだと知っておく必要がある。
また、KeePassはオープンソースであり、パスワードを秘密裏に流すバックドアのような心配もいらないところが推奨できる理由である。
何回も言及しているが、これらのソフトウェアやサービスに関しては自身できちんと調査をし、
納得したサービスを実際に使用すること。
一番やってはならないことは、これらの手間を惜しみセキュリティを軽視した行動(ここでは同じパスワードをいろんな場所で使い回すなど)を取ることである。
これによって節約しようとした時間により、後で資産に対してツケを払うことになることが一番怖いからである。
2段階認証とU2F(Universal Second Factor)の準備
2段階認証については先述の通り言及したが、いかなる場合に置いても設定しておくべきである。
メールアカウントとパスワードは、悪質なソフトウェアがコンピュータに侵入した場合、
キーストロークから簡単に盗まれたりする可能性があるからである。
U2Fは時間で変化するユニークなコードを発行することのできるハードウェアデバイスのことを指す。
多くのデバイスが存在するものの、Yubikeyがこの業界のデファクトスタンダードと考えて差し支えない。
U2Fには3つの大きな利点がある。
- ハードウェアデバイスなので発行されたコードを物理的に盗むことが非常に難しいこと
- ドメインによって発行されるコードが違うため、フィッシング詐欺などを防げること
- 取扱がとても簡単なこと
以上の理由から、私はBinanceアカウントとYubikeyをバインドさせることを強く推奨している。
また、Gmailやパスワード管理ソフトとYubikeyを同期させることも強く推奨している。
SMSでの認証を使わないこと
SMSでの認証は推奨されていたこともあったが、もう時代に即していない。
SIMスワップによる被害を考慮すると、先述の2FAやU2Fへと移行を進めるべきである。
資産引き出しのWhitelist機能を使う
Binanceが提供する資産引き出しのWhitelist機能を用いることで、
前もって登録されたアドレスへの資産の引き出しが簡単になり、
他のアドレスを登録する手続きを非常に複雑にすることができる。
これにより、ハッカーが資産を不正に引き出す際のアドレスの登録を非常に困難なものにできる。
API鍵を使用する
APIを用いて取引をする人がとても多い。
APIを使用するときは公開鍵認証に対応しているもののみを使い、APIアクセス元にのみ秘密鍵を保持。
サーバに公開鍵を配布する。これらによりAPI認証を行い、それらの鍵ペアに関してはきちんとアップデートを行うべきである。
L2 KYC を完了する
アカウントを安全にする一つの手法としてL2 KYCを完了することがある。
より詳細な情報を登録しておくことで、個人の認証をより詳細なものにできます。
詳細は以下などをご覧ください。
モバイルデバイス、コンピュータの物理的保護に対する再考を行う
極力守りたいデバイスに対してインストールするものは以下のものだけにしておく。
- email App
- Binance App
- 2FA codes
フィッシングに対して今一度対策を行う
主にフィッシング行為はメールやテキスト、送られてくるリンクから行われる。
取引所へのアクセスはブックマークされた公式のURLから行い、別リンクからのアクセスは絶対にしないようにする。
Telegram, Instagram などでBinance関係者などを装ったメッセージが来たとしてもリンク先に接続してはいけない。
個人ウォレットと取引所
以上長かったがこれらを守ることで、
- 個人ウォレットへのアクセス
- Binanceなど取引所へのアクセス
は比較的安全に保たれる。
結論として、個人のセキュリティに対する知識などを包括的に考慮しどちらを使うか個人で判断するべきである。
しかしながら、一般的な知識を持つ人に関しては取引所のセキュリティ対策は大きく資産へのセキュリティ強度を高めてくれることを知っておくべきである。
どちらを選んだとしても、ここに書いてあることを度々見返し、
自身のセキュリティ対策に抜け漏れがないかをチェックしてほしいと考えている。
CZ
まとめ
いかがでしたでしょうか。
CZ氏はもちろんBinanceの代表ですのでテーマは仮想通貨資産でしたが、
この考え方自体は他のデジタル資産にも共通します。
セキュリティは利便性との相反関係にあり、確かにめんどくさく考えることも多いでしょう。
しかしながら、近年ハッキングなどにより例えば数百億円のデジタル資産がハッキングにあったりしているのは事実です。
このようなことが起きないように、また、貴重な資産を守るためのセキュリティ意識は常にアップデートしておく必要がありますね。
筆者に関しても、自身のセキュリティに対する考え方が甘かった部分などがわかりましたし、
紹介されているいろいろなソフトウェアやデバイスなど、導入を検討してみようと考えさせられました。
現在は盛り上がり的な側面もあり、仮想通貨などの言葉をよく聞きますが、
膨大な資産がブロックチェーン上で管理され、取引所などでそれらが売買されている中で、
デジタル資産に対するセキュリティについて今一度学び、自分の身は自分で守るという意識が大事なのではないでしょうか。
また、それらのデジタル資産は現代の暗号学によって守られています。
これらのセキュリティインフラとして生活の基盤となっている暗号に対し、
この記事を読むことで今一度興味をもち調べてみようと考えていただけたら幸いです。
今回はこの辺で。