480 / 7362^N

Brute Force Search Space

総当たり探索の候補空間

ウォレットの秘密を言い当てるには、どれくらいかかるのでしょう。パスワードや鍵の長さだけでは答えは出ません。実際にあり得る候補と、それぞれの確認に必要な作業量が重要です。

Brute Force Search Spaceとは、秘密を推測するときに順に試せる候補の集合です。自分の暗号化バックアップのパスワードを忘れた場面を考えてみましょう。思いついた答えが候補になり、それで正しく開けたかを確かめる必要があります。同じ確率で選ばれる候補が多く、確認の負担が大きいほど、探索は難しくなります。ただし実際のウォレットでは、まず何を探しているのかをはっきりさせなければなりません。

バックアップのパスワード、ビットコインの支出を認める秘密鍵、その鍵を作った生成器への入力は、それぞれ別のものです。候補も確認方法も異なります。生成器に不具合があり、ごく少数の入力からしか選んでいなければ、完成した鍵の長さから想像するより探索は簡単かもしれません。攻撃者は数学的に可能な鍵をすべて試す代わりに、その限られた入力を調べられます。候補を数える前に、秘密がどう作られたのかを知る必要があるのです。 [1] [3]

同じ確率の候補が16通りあり、正解はちょうど一つとします。重複せず順番に確認すると、早く当たる場合も最後までかかる場合もあり、平均では8.5候補を確認します。候補数をNとすると E = (N+1)/2 と表せます。毎秒2回という一定の速度なら、平均時間は4.25秒です。端数は平均値の話であり、実際の一回の探索で半端な回数を試すわけではありません。これは考え方を示す模型で、ビットコインウォレットの復元時間を実測した値ではありません。 [1]

好きな単語、名前、覚えやすい規則には、無作為な組み合わせより選ばれやすいものがあります。そのため攻撃者は、ありそうな答えから試せます。特定の出力を多く作る不具合のある生成器でも同じ問題が起こります。この場合、前の例の平均値は当てはまりません。最小エントロピーは最も有利な最初の推測が当たる確率を表しますが、それだけで探索全体の作業量や成功が保証される時刻は分かりません。候補数だけで確率を考えない説明は不十分です。 [1] [2]

候補の確認が一瞬で済むとは限りません。PBKDF2はパスワードなどの入力から鍵を導出する関数で、計算を繰り返すことで一回ごとの負担を増やします。別の入力としてsaltも使います。通常これは各導出を区別する公開データです。saltが違えば、同じ事前計算済みの結果表をそのまま使い回すことはできません。Saltはもう一つの秘密パスワードではなく、強い入力の代わりにもなりません。速度を見積もるには、具体的な関数、設定、ハードウェアを知る必要があります。 [3]

BIP39は復元用の単語と任意のpassphrase、つまり追加パスワードからseedを作ります。Seedは鍵を導出するための秘密の出発点です。PBKDF2の内部計算にHMAC-SHA512を使い、2048回の反復によって512ビットのseedを得ます。ここでsaltパラメータは、文字列「mnemonic」にpassphraseを続けたものです。追加の秘密をもたらすのはpassphrase自体です。どのpassphraseでも有効なseedができるので、復元用単語のチェックサムでは目的のpassphraseを入力したか確認できません。自分のウォレットを復元する場合は、正しい鍵導出設定で既知のアドレスが得られるかなどで見分けます。出力が長くても、弱いパスワードが強くなるわけではありません。 [4]

単純な推測の繰り返しとは異なる数学的な方法もあります。楕円曲線暗号(ECC)では秘密鍵から公開鍵を計算できますが、逆向きに秘密の値を求めるのは離散対数問題と呼ばれる難しい課題です。Bitcoinの曲線secp256k1のパラメータはSEC 2に記載されています。このため256ビットの列をすべて数えても、攻撃の可能性を全部捉えたことにはなりません。NIST SP 800-57は鍵長とセキュリティ強度を区別しています。後者は、定めた仮定の下で保護を破るのに必要な労力の見積もりです。数学的な方法があることと、実際に簡単に実行できることは別です。 [5] [6]

複数のプロセッサーで独立した試行を分担できますが、効果はメモリや計算の組み方にも左右されます。採掘のhashrateが測るのは採掘用の計算であり、PBKDF2やECC演算の速度ではありません。ウェブサイトへのログインとバックアップのコピーも区別が必要です。サービスはログイン失敗後のアクセスを制限できます。一方、暗号化ファイルのコピーを持つ人は、自分の機器でオフラインのまま候補を確認できます。サイト側のログイン制限だけでは、その試行を止められません。 [3] [6]

seed全体を入手した人には、膨大な候補を探す必要がありません。悪意あるソフトウェアや、鍵を扱うプログラムの欠陥でも同様の事態が起こり得ます。安全性は予測しにくい秘密を選ぶだけで終わらず、保管方法や使い方にもかかっています。解読時間の説明を見たら、想定する攻撃、攻撃者がすでに知っている情報、速度の測り方を確かめましょう。大きな数字だけで機器の安全性は保証できず、この模型も失ったウォレットの復元を約束するものではありません。 [6]

理解を深めるには、この項目とあわせて次もお読みください Cryptographic Entropy, Entropy Bit, Private Key, Seed Phrase. 次の項目からも参照されています Entropy Bit, Random Number Generator.

DOC · 001RFC 4086 — Secret distributions and guessing仕様 DOC · 002NIST SP 800-90B — Min-entropy and guessing cost仕様 DOC · 003RFC 8018 — Salt, derivation cost and offline search仕様 DOC · 004BIP39 — Passphrase derivation and valid seeds仕様 DOC · 005SEC 2 v2 — secp256k1 parameters仕様 DOC · 006NIST SP 800-57 Part 1 Rev. 5 — Security strength and key protection仕様
改訂日: 一次資料を優先 · 投資助言ではありません