読者から良い質問がありました。今回はこれを題材に、ウォレットの安全性についておさらいをしておこうとおもいます。

【質問】

早速、質問ですが、TREZORの24語のシードフレーズについての質問です。世界のどこかで、攻撃者が、シードフレーズ(24単語)を全て当てようと考えたとして、このとき、考えられる組み合わせは、BIP39(2048word)の24桁分で、2048^24=「80桁通り亅という計算はあってますか?もし合ってた場合、これを破るためには、今現在の「総当たり攻撃」でどれくらいの時間がかかる物でしょうか?それと、TREZORタイプTという製品ですが、これは、シードフレーズが、TREZORONEの半分の、12語になっているみたいなんですが、これは、単純に半分の2048^12=「40桁通り」で合ってますか?24語に比べると、半分になります。単純に半分の時間でハッキング可能になりますか?素人なりに、セキュリティ的に心配になるんですが、この辺はどうなんでしょうか?最近、遠隔地からのシードフレーズが破られる可能性について、色々ネット上で調べますが、もやもやしてまして質問させてい頂きました。

24単語の組み合わせはどのくらいの数か?

さて、まず最初のところから考えていきましょう。BIP39の規格では、2048個の単語のなかから24個の単語を選んでシードフレーズにします。このとき、単語は重複しても構わないので、組み合わせの数は、2048の23乗になります。(最後の1単語はチェックサム=過ち検出のためのチェックワード)なので、実際は23単語の組み合わせになります。これは何桁の数になるでしょうか?Googleに式をいれると簡単に計算してくれます。log(2048^23) = 76(桁)ですね。

76桁の数はどのくらいの大きさなのか?

さて、76桁の数というのはどのくらいの大きさなのでしょうか?全宇宙に存在する素粒子の数が約80桁の数だといわれています。原子ではなく素粒子です。つまり電子とかニュートリノとかヒッグス粒子とかそういうレベルのもののことです。それと比較すると、76桁の数というのは実に膨大なことがわかります。到底総当り攻撃ができるようなものではありませんね。ちなみにビットコインの秘密鍵は、256bitの数です。これも同様に桁数を求めると、log(2^256) = 77という桁数になります。つまり、24単語のシードフレーズの組み合わせは、ビットコインの秘密鍵とほぼ同じだけの数があるわけす。これは事実上突破は不可能です。

12単語の組み合わせはどのくらいの数か?

次に12単語の組み合わせの数をみてみましょう。これも正確には11単語+チェックサムですので、組み合わせにつかわれるのは11単語です。log(2048^11) = 36桁という感じになります。これを総当りしたらどのくらいの時間がかかるでしょうか?仮に、ビットコインの総ハッシュレートと同じレベルで計算ができると仮定しましょう。ビットコインのハッシュレートは130EH/sくらいです。E(エクサ)は18桁の数ですね。130EH/sは、つまり20桁の数になります。1秒に20桁の総当りができるとすると、10^(36-20) = 10^16 秒ですべて調べることができることになります。実際には平均してこの半分の時間で済むので、10^15.69秒になります。これを年になおすと、(10^15.69)/60/60/24/365 = 155,307,844 年これを見る限り、まあ大丈夫そうですね。なお、24単語からアドレスを生成するのと、マイニングのハッシュ計算では計算量がだいぶ違います。前者は工程増え複雑でマイニングのハッシュ計算より遥かに時間がかかりますし、ハードウェアで行うことはいまのところできません。

24単語の並び替えではどうなのか?

最後にオマケとして、24単語がバレてしまったという想定をかんがえます。ただしバレたのは単語だけ。それをどの順番で並べればよいのかはバレてないとします。正しい順番で並べられればビンゴ!この組み合わせを考えてみます。log(24!) = 23.79となりました。23桁の数ですね。これを総当りするとするとどうでしょうか?それでも、かなり安全であることがわかります。さきほども書きましたが、24単語からアドレスを生成し、そのアドレスにコインがあるかをブロックチェーンをみてチェックするという工程は、非常に時間が掛かるプロセスで1秒間にそれほど多くはできないからです。せいぜい1秒間に100万回できたとしても、23桁の組み合わせをためすのにはやはり100万年以上かかることになります。ということで、シードフレーズは、なんにせよ、かなり安全であるということがいえそうです。

豆知識 TrezorTはなぜ12単語なのか?

さて、ここで豆知識です。Trezor-one(旧モデル)は24単語を採用しているのですが、最新のTrezor-Tモデルは12単語になってます。単純にいってセキュリティが減っているように見えるのですが、なぜ新しいモデルのほうが単語数がすくないのでしょうか?これは、Trezor-Tモデルにはタッチパネル液晶パネルがあって、そこで直接単語を入力して復元できるからです。Trezo-oneは、タッチパネルではないので、PCに接続し、PCの画面をとおして復元するひつようがあり、万が一でも単語がリークする可能性を考えているようです(その場合でも前述のように、24単語の並びを当てないといけないので安全性は確保できる)。Tモデルはそれがないので、12単語でも十分である、という設計思想とのことです。なるほどですね。