安全なイーサリアムの鍵管理と、秘密鍵/キーストア/ニーモニックについて
みなさん、こんばんわ。
トークンポケットの中村です。
近頃、メタマスクが表示されなくなった、、や秘密鍵が漏れて全部盗まれたなどのインシデントが起きていることが確認されるので改めて安全な鍵の管理と鍵の種類の基本について解説したいと思います。
鍵の種類について
大きく3つの鍵の種類があります。
1.秘密鍵(private key)
2.KeyStore
3.ニーモニックKey(いわゆる12word/24word)
ざっくりとした理解で良いので専門的なものはEthereumのYellowPaperとかを読んでいただきたいのですが、概念図としてはこんな感じです。

ニーモニック/秘密鍵は「通帳と印鑑」、そしてキーストアは「キャッシュカード」と思えばOK

オンラインに通帳と印鑑をまとめておいておく。それは危険そうですよね?キャッシュカードパスワードが漏れたら問題そうなので、誰にも渡さないようにするのが安全です。
鍵の管理方法について

秘密鍵、ニーモニックキー
一般的に、秘密鍵やニーモニックはそれそのものが鍵であり超危険な存在なので、絶対にスマートフォン上のメモやエバーノート、GoogleDriveなどで管理してはいけません。スマートフォン落としたら盗まれますし、どこぞの悪いハッカーが解析プログラムを書いてたりしますので(実際に、Git上に秘密鍵あげると2~3分で奪われます。)絶対にオンラインにおいておいてはいけません。なお、紙に書いておくと火事になった際に死ぬので、金庫に入れておいたほうが良いです。もしくは脳に記憶ですね。記憶。
キーストア
キーストアに関しては、英字数字記号10桁以上か、英字数字12桁以上のパスワードをセットしておけば、ブルートフォースアタック(総当り攻撃)に対しての耐性は基本的にはバッチリであり、エバーノートやGmailなどのオンラインにおいておいても大丈夫ではあるのですが(ただし他で使っているパスワードや英単語の組み合わせなどは辞書使って攻撃されたら死ぬので、2文字変えるとか一個間に数字や記号を挟むとか必ずしましょうね)
とはいえ攻撃されるのもキモチが良いものではありませんから、こちらもオフラインで保存するようにしましょう。また、パスワードをなくしたらこちらはセルフGOXするので、パスワードについても適切に保存しましょう。

コラム: なぜトークンポケットではキーストアしかエクスポートできず、しかもパスワード入力が毎回あるのか。
これは蛇足になってしまうかもしれませんが、弊社のアプリトークンポケットではある程度のユーザービリティを犠牲にしても「キーストアしかエクスポートできない/パスワード入力を毎回促す」という方式をとっています。
この背景としては、弊社のアプリでは、オンラインや端末にパスワードを一切保存していないため、パスワードを正しくセットしてもらえれば、たとえ、第三者に攻撃をされたとしても先程申した10桁(8桁でも10年以上)あれば、論理的には攻撃は不可能になることが保証されています。
一方でデメリットとして、キーストアの最大のネックはパスワードを忘れてしまったさいにどうしようもなくなることです。
キーストアのパスワードは、実は銀行通帳における印鑑ばりに大事なのですが、一般のウェブサービスの感覚で忘れ去られてしまう方がたくさんいらっしゃいます。
そのため、必ず毎回パスワードを入力するように、忘れづらくしています。ある程度なれてきたら一部FaceIDとかに委ねても良いのですが、まだ黎明期ですし、新しく入ってきた方こそ鍵の管理が大事という考え方のもとでこのような使用にしています。
コラム2:階層式ウォレットとその注意点
メタマスクからウォレットがなくなった!!という衝撃を最近受けたかもしれません。でも大丈夫です。メタマスクは階層式ウォレットと呼ばれるもので実装されています。
階層式ウォレットとはどういうものか。大元の秘密鍵に対して+1とか算術的な方法で階層的にアカウントを作っていく仕組みです。
大元の秘密鍵(メタマスクの場合は12words)さえあれば、すべてのアカウントを簡単に復元できますが、一方でメタマスク上でアカウントをたくさん作っても分散にはなりません。大元の秘密鍵を奪われるとすべてのアカウントが奪われます。
なお、トークンポケットについてはすべてのアカウントで別のキーストアを作成させる必要がある仕様にしており、階層式ウォレットは採用していません。ある程度ユーザビリティを犠牲にしておりますが、セキュリティを分散的にするためにこのような処理にしています。
鍵を入力する際の注意点
・ありとあらゆる秘密鍵や12ワードを入力させることを促すアプリは基本的に詐欺だと思いましょう。(これでいくとトークンポケットも当てはまりますが、それくらい気をつけてください)
・キーストアの作成やインポートがオフラインで実施不可能なサイト/アプリは基本的に危険です。詐欺だと思いましょう。
・階層型ウォレットを裏側で採用しているようなオンラインでの鍵管理サービスは、事実上あなたは鍵を管理しているようで鍵を管理していません。また、サーバー上で自分の秘密鍵が管理されているケースではそのサーバーが単一障害点になりますので、分散セキュリティとは言えません。使う際は、十分に注意しましょう。
さいごに、自分のアセットを自分だけが管理できるのが利点だよね。
ここまで読むと、なんでこんな難しいことをわざわざやってるの??ってなると思います笑 が、昔読んだMyEtherWalletの説明がとても好きなのであらためて貼っておきます。

ざっくり訳)
ブロックチェーンにおいては誰にも頼らないで自分でアセットを管理する事ができます。政府や銀行によっても管理される事はありません。あなただけが、そのアセットにアクセスできる存在であり、そのために必要なのは、ただパブリックアドレスとプライベートキーだけなのです
ユーザービリティとセキュリティは相反するとは言いませんが、よく理解いて使うようにできると良いですね!
トークンポケットについてはセキュリティについては、上述の通り原始的な手法を使っており、暗号的にも強固なので、楕円曲線暗号が説かれたりシない限り(その場合全部の暗号資産が死ぬ)安全ですのでぜひ、安心してお使い下さい!
トークンポケットアップデート実施しました。

iPhone版も無事アップデートされ、Android/iPhone双方でニーモニックキー(いわゆる12ワードに対応したことをご報告します)
これでTrustWalletやメタマスクから、トークンポケットへ簡単にインポートできるようになりました。ぜひインポートしてお使い下さい!