こんにちは。キツツキです。

お久しぶりです。最近は、書きたいことがあったときには nemlog に書いていたので、こちらはまったく更新してない状態でした。

むしろお金がもったいないのでサーバーやドメインも解約しようと思っていたのですが、ウッカリ、更新期限を過ぎてしまい、また1年分を払ってしまいました^^;

というわけで、久しぶりに、こちらにも記事を書いてみようと思います。

今回のテーマは、秘密鍵についてです。

せっかく仮想通貨(※)に興味を持ったなら、秘密鍵については、その役割と取り扱いを、なるべく早い段階で理解してお居た方がいいでしょう。

(※ 一般的に、「仮想通貨」の呼称が浸透していますが、以降、「暗号通貨」で統一します。)

私が始めた頃は、秘密鍵についての啓発も盛んだった記憶があるのですが、最近は、昔からいる人にとっては知ってて当たり前状態になっていて、あまり啓発が盛んでなくなっているような気もします。

新しく入ってきた人の中には、「よく聞くけど、イマイチ秘密鍵ってわからない」って人も多い気がします。

そこで今回は、初心者が最低限知っておくべき秘密鍵の役割と、取り扱いについて、気軽に読めるくらいの長さでまとめてみようと思います。

技術に詳しい方は、もし間違いがあれば、ご指摘くださいm(_ _)m

注意:この記事は暗号通貨の秘密鍵についての啓蒙を目的として書かれた記事です。各種操作については、読者各位の自己責任でお願い致します。

そして、もう1つ。

昔、最初の見出し前で投げ銭おねだりする文言が自動ででるように設定しちゃったんだけど、もうテンプレートいじる気力残ってないから、そのままにします↓。投げ銭しなくて、全然いいです。

<この記事が役に立ったら、投げ銭をお願いします!>

暗号通貨で、秘密鍵が果たす役割

突然ですが、質問です。

既存金融(たとえばネットバンク)で誰かに送金したい場合、あなたは何をしなければいけないでしょうか?

  • ID・パスワードを打ってログイン
  • ログイン時に設定している秘密の質問(母の旧姓は?など)に答える
  • 送金相手の口座番号や、送金金額を記入
  • 取引パスワードの入力
  • 使っている場合は、スマホアプリやメール・SMSを使った2段階認証
  • 銀行によって差はあるでしょうが、だいたいこんな感じですよね。

    ところで、もしパスワードを忘れてしまったらどうでしょう?

    その場合には、銀行に連絡して、本人確認をしてパスワードのリセットと再設定をしてもらうなどの対応をするはずです。

    この時に、電話で、氏名 / 生年月日 / 住所 / 登録電話番号 などを答えることで本人確認をしたりします。

    場合によっては、住所の正しさを確認するために、登録住所に遅れれてきた郵便物に書かれている内容を入力することで本人確認とすることもありますよね。

    ところで、送金を行う際に、上に書いたようなことをするのはなぜでしょうか?

    それは、あなたが送金する資金の正当な所有者であることを証明するためです。

    本人しか知らないはずのパスワードを知っている、本人のスマホにSMS通知が届いた、パスワードを忘れていても個人情報を答えることで本人であることを証明できた、などなど。

    こういった方法で、あなたが送金指示を出せる正当な権利を持っていることを証明しています。

    実は、この方法が通用するのは、銀行というあなたのお金を預かり管理する主体(中央管理者)が存在するから実現できる方法です。

    ビットコインを始めとした暗号通貨は、この中央集権へのアンチテーゼとしてつくられた側面があります。

    ですから、暗号通貨には、集権的な管理主体が存在しません。

    だから、管理者にパスワードや個人情報を預けておき、何かをしたいときにはそれらを使って、自分が正当な権利者だと証明する方法は使えないのですね。

    では、ナカモトサトシは、どのようにしてこの問題を解決したのでしょうか?

    それが、秘密鍵です。

    ネットバンクにおける、パスワード入力や二段階認証、個人情報の照会などに相当するのが、秘密鍵です。

    暗号通貨においては、秘密鍵こそが、唯一にして絶対の「その資金の持ち主であることを証明する方法」になります。

    だから、ビットコインを送金したいときには、送金先アドレスと金額を入力した後に、自分の秘密鍵を使って署名(※2)をします。

    自分の秘密鍵を使って署名することで、送金しようとしている資金に対して自分が権利を持っていることを証明しています。

    これが、唯一の証明方法です。

    逆にいえば、秘密鍵を誰かに教えるというこは、その秘密鍵に紐づく資産を譲るのと同じ意味だと考えてください。

    ビットコインのパブリックチェーンに接続している人々は、唯一、秘密鍵で署名された結果を見て、その資金が正当な権利者によって送金されたと判断します。

    だから、秘密鍵を知っていれば、誰にもとがめられることなく資金を送ることが出来てしまいます。

    こうなったら、もう、どうしようもありません。

    銀行のような中央集権による管理主体も存在しないので、氏名や生年月日を名乗ろうが、パスポートを見せようが、誰にもどうすることも出来ません(※3)。

    これは取引所でも同じことで、取引所の秘密鍵を悪意を持った者に知られてしまうと、いとも簡単に資金を抜き取られてしまいます。

    これが、いわゆるGOXです。

    人に盗まれなくても、自分の秘密鍵を忘れてしまうと、その資金の持ち主であることを証明できなくなり、送金が不可能になります。

    これが、セルフGOXです。

    いずれにしても、自分の資金を守りたければ、秘密鍵を「人に知られることなく」「自分も忘れることなく」保持しなければいけません。

    どちらかの条件が崩れれば、もう何をやってもどうしようもない状態になってしまいます。

    個人情報を照会すれば、パスワードを忘れても復活できるような既存金融になれ親しんだ人にとって、この秘密鍵についての厳しい現実は、大きなカルチャーショックになるでしょう。

    とにかく、資金を守りたければ、秘密鍵を守るしかありません。他に方法はありません(※4)。

    (※2 この署名という行為では、秘密鍵で署名した結果を見れば、その署名者が正しい秘密鍵を持っていることは証明できるが、秘密鍵そのものは誰にも見せる必要が無いという面白い性質があります。だから、自分の権利を証明するために秘密鍵が必要だと言っても、秘密鍵そのものを誰かに見せる必要はありません。というよりも、自分の秘密鍵は他者に絶対に見せてはいけません。

    ※3 チェーンの巻き戻しや、不正送金の無かった新しいチェーンをつくるという方法もありますが、現実的ではありません。基本的に、暗号通貨の文化圏では、このような行為を悪とみなします。

    ※4 間接的な所有方法としては取引所に入れておくという方法もあります。ただしこの場合、管理を取引所に委託した状態であり自分で秘密鍵を持つことは出来ません。取引所も定期的にGOXしますから、これも完全に安全な方法とは言えません。取引所があなたの資産を持ち逃げすることも、「技術的には」簡単です。暗号通貨がつくられた本来的な目的からすれば、各個人が秘密鍵を管理するのが筋ですが、そのような文化が出来るまでの移行期間としては、GOXリスクを理解した個人が取引所に資産を預けておくことは、個人的にはアリかと思っています。)

    秘密鍵の管理方法

    ここまで説明したように、秘密鍵は、その資産の持ち主であることを証明する唯一にして絶対の方法です。

    とくにある程度の暗号通貨資産を持つ人にとっては、絶対に守り抜かなければならない情報です。

    この情報を守るための方法として、いろいろな方法が考案されています。

    たとえば、ペーパーウォレット(紙にメモ)、ブレインウォレット(暗記)、秘密鍵を外部メモリ(光学ディスクやUSBメモリ)に保存などなどです。

    しかし、個人で、ある程度以上の資産を持つ人にオススメなのがハードウェアウォレットとクリプトスチールの組み合わせです。

    まず、ハードウェアウォレットの説明です。

    (ちなみに、HDウォレットとハードウェアウォレットを混同してる人をたまに見かけますが、全然違うので注意してください。この記事の対象読者の方はHDウォレットについては考えなくてOKです。)

    ハードウェアウォレットの代表格は、Trezorです。

    なんやかんやで評判が高いので、私はこれを愛用しています。

    価格が安めの旧型と、新型があります。(私は旧型を使っています)

    これが旧型。

    そして、これが新型。

    (※ Trezorは、販売経路中に無断開封と細工を防ぐため、かなり厳重に梱包されているので、開梱が大変です。
    また、最初に利用するときにファームのハッシュ値(本体の画面に表示される文字列)とPCに表示される文字列を比較することでファームが正しいことも確認できます。
    なので私はアマゾンで買ってしまいましたが、少しでもリスクを低くするという観点では、公式サイトから購入した方がいいかもしれません。このあたりの判断は自己判断でお願いします。)

    上の画像のような感じのUSBでPCに接続するタイプのウォレットで、この本体の中に秘密鍵を保管します。

    秀逸なのは、送金時などはボタン操作をすると、署名結果だけをPCに渡すような動作をしており、秘密鍵そのものはPC側から参照できません。

    先ほども説明した通り、送金に必要なのは「秘密鍵そのもの」ではなく、「秘密鍵による署名結果」だけなので、これで十分です。

    つまり、たとえPCがウイルスに感染したとしても、ウイルスは秘密鍵による署名結果は見れても、秘密鍵そのものにアクセスすることが出来ないわけです。

    ハードウェアウォレットそのものを盗まれた場合にも、ハードにPIN認証(数字何桁かのパスワード)を設定できるので、ウォレットを盗まれても、PINを盗まれなければ送金は難しいです。

    (これについては、現物を盗まれたら秘密鍵にアクセスできる脆弱性があるような報道があったので、注意が必要。ただ、現物を盗まれた場合でも、後述するシードをそのまま盗まれた場合にくらべれば盗難の難易度は高い。)

    また、後述するシード(種)によってウォレットを復元する作業の時にも、シードを打ち込む順序にセキュリティ対策の工夫があるなど、とても好感がもてるつくりです。

    もちろん、送金先アドレス書き換えウイルスなどの話題もありましたし、セキュリティに完璧ということはありませんので、OSのアップデートやウイルス対策ソフトの導入、場合によっては普段使い用のPCと暗号通貨用のPCを分けるなど、ハードウェアウォレットだけで満足せず、出来ることはした方が良いとは思います。

    というわけで、喜び勇んでTrezorを手に入れて現物を見てみると、驚きます。

    「これ中華製の安物MP3プレイヤー?」

    そう、どうみても作りの華奢な安物製品なのですw

    もちろん、一定確率で故障します。

    そして、ファームのアップデートで秘密鍵が消えてしまうこともあります。

    だから、この中に秘密鍵を入れておけば、人に盗まれるリスクは下がっても、秘密鍵を忘れずに守り抜くという意味ではかなり不安が残ります。

    そこで重要になるのが、復元シードです。

    秘密鍵というのは、生データだと、単なる意味のわからない文字列です。

    これを正確にメモしたり、正確に復元するのは至難の業です。

    そこで使われている技術がBIP39(Bitcoin Improvement Proposals)と呼ばれているものです。

    この技術によって、12ケなり24ケなりの英単語を記録しておくと、そこから秘密鍵をつくりだすことができます。

    この英単語の組み合わせを、シードと呼びます。

    たとえば、BOOK、EYE、………のような感じです。

    そして、工夫されているのが、これらの組み合わせで登場する英単語は、最初の4文字が被らないようにできていることです。

    たとえば、BOOKとBOOKSTOREでは、最初の四文字がBOOKで被ってしまうので、このような組み合わせはありません。

    だから、英単語は最初の4文字だけをメモしておけばOKです。

    この理屈を利用してつくられたのがクリプトスチールと呼ばれる製品です。

    これは、金属製の文字盤でシードを記録するためのツールです。文字盤をパズルのように組み合わせることで、最大24単語の頭4文字を記録することができます。

    私が購入したときは、海外から個人輸入するしかなく、頑張って英語でやりとりしましたが、今はアマゾンでも購入できるようです。こちらは、超アナログツールなので、変な細工がされる心配はほとんどありませんので、アマゾン購入で問題ないでしょう。(とはいえ、購入は自己判断で)

    紙にペンで記録したシードは、洪水がくればぶやけてしまうし、火事がくれば燃えてしまいます。経年劣化でインクが退色してしまうかもしれません。

    しかし、金属に刻まれた文字列は、流されなければ洪水にも耐えますし、溶ける程の温度にならなければ火事にも耐えます。もちろん、100年やそこらで文字が読めなくなってしまうこともありません。

    もちろんこの世に完璧は存在しませんが、紙にくらべると圧倒的な安心感です。

    この12個か24個の英単語の組み合わせがあれば、新品の何も入っていないTrezorであっても、中に秘密鍵を復元することができます。

    使い方と製品のイメージは、下の動画を見て頂ければわかると思います。見ればわかると思いますが、紙等と比べて圧倒的な安心感があります。

    ちなみに、このシードは色んな通貨で共通して使うことができます。

    たとえば、Trezorが提供するウォレットでは、同じシードに紐づく、BTC、BCH、LTC、DASH、ZEC、などなどを保管することが出来ます。(随時対応通貨が増えているので、正確には、公式ページを確認してください)

    マイ・イーサ・ウォレットにTrezorを接続すれば、まったく同じシードで、ETHやERC20などのイーサリアム上のトークンを保管することができます。

    NEM Walletのユニバーサル版を使えば、XEMやその他の独自トークンを保管することもできます。もちろん、ハーベストの設定なども可能です。

    このように、クリプトスチールに1つの組み合わせのシードとTrezorがあれば、さまざまな通貨を、より安全に保管することができます。

    ちなみに、この運用に移行する際には、一度でもどこかに平文で保存した秘密鍵がある場合はそれを流用せずに、Trezor側で新しい秘密鍵を生成することをオススメします。

    新しい秘密鍵を生成したら、古い秘密鍵のウォレットから、新しい秘密鍵のウォレットに資金を送金しましょう。

    注意点としては、

  • ミスを想定して、百円相当程度のテスト送金で無事の送金を確認
  • 数百円を入れたら、一度Trezorを初期化して、シードから復元を試してみましょう(シードのメモが間違っていて、Trezorの故障後に復元できなかったら悲惨としか言いようがありません)
  • とにかく、何をするにも慎重に。セルフGOXしたら、誰も助けることは出来ません
  • でしょうか。

    ちなみに私の場合は、Trezorはセキュリティが確保されており地理的に離れた2か所にPIN付きのものを、クリプトスチールは1か所に保管をしています。

    さいごに

    色々と書いてきましたが、セキュリティに絶対はありません。

    まず、暗号通貨に触れたばかりの方のために、秘密鍵の役割と保管方法の1例を簡単に説明しました。

    これが正解というわけではありませんので、この記事をとっかかりにして、自分なりの保管方法を見つけて頂ければと思います。

    最後にもう1度、念のためですが、この記事は暗号通貨の秘密鍵についての啓蒙を目的として書かれた記事です。各種操作については、読者各位の自己責任でお願い致します。

    クレームは受け付けませんが、万が一この記事に間違いを見つけた場合や、不明点がある場合は、ツイッターでリプを頂ければ対応すると思います(たぶん)。

    あ、ちなみに、投げ銭とかは不要です。

    大丈夫ですって!あくまで、啓蒙の為に書いただけの記事なので。

    え?無駄に払ったサーバー代だけでも支援したい?

    いや、ほんと困ります。そんなつもりは、全然ないので!!!

    ↑ちなみに、これはわざわざ手動で追加しましたw(ほんとに無理に投げ銭は不要ですがw

    あー、あと途中のアマゾンへのリンクはアフィリンクなので、嫌な人はそこから買わないように気をつけてね!

    追記

    と、ここまでの文章をテキストエディタで下書きして、貼りつけようと思ってブログにログインしようと思ったら、出来なくてクソ焦ったわwww

    パスワードリセットしようにも、登録アドレスにもメール届かないのwwww

    GOXの注意喚起記事書いてる本人がブログGOXしてるっていうねwwww

    ※ 結局、データベース弄って、強制的にパスワード変更かけたらログインできました(←中央集権に助けられたw)。