力任せの攻撃は最も愚かな戦略であり、アドレスをターゲットにする際に唯一利用可能な方法です。しかし、驚くほど速いのです。なぜなら、誰も最初から各キーを計算しないからです。
候補をテストするには4つのステップが必要です。候補の数で生成器を掛けると公開鍵が生成されます。公開鍵をSHA-256に通します。その結果をRIPEMD-160に通します。20バイトを探しているアドレスと比較します。最初のステップは、他の3つを合わせたものよりも何十倍もコストがかかります。そして、まさにそのステップを検索プログラムは避けます。
トリックは、候補を順番に探すことです。すでにkに対応する点がある場合、kプラス1に対応する点はその点にGを加えたものです。これは積ではなく、和です。そして、すべての点の和は有限体での除算を必要とし、これは高コストな操作です。そこで、バッチインバージョンとして知られる第2のトリックが使用されます。数百の点に対して一度に1つの逆数を計算し、候補ごとのコストが大幅に下がります。

これら2つの最適化により、現代のグラフィックカードは毎秒数十億の候補をテストします。この数字は印象的であり、その意味をじっくりと考える価値があります。
70ビットの範囲には2^69の候補があり、これは約590京です。3秒あたり数十億で割ると、約2000億秒、つまり1枚のカードで約6200年になります。1000枚のカードを並列に使用すると、これが約6年強に短縮されます。1万枚のカードで7か月になります。
そして、実際に決定するのは電気代です。このようなカードは約400ワットを消費します。作業の総時間で掛けると、70ビットの完全なスキャンには約22ギガワット時がかかります。これは、中規模の都市が数日間消費する量です。どれだけのカードを使用しても、作業を分割することでカレンダーを短縮できますが、エネルギーは変わりません。

そして、すべてを台無しにするのは次のことです。ビットが1つ増えるごとに、全体のコストが倍増します。71ビットは時間とエネルギーの両方で2倍のコストがかかります。75ビットは32倍のコストがかかります。80ビットは70ビットの1000倍のコストがかかり、1000倍の22ギガワット時は、鍵を探すために購入できるエネルギー量ではありません。

よく見かける比較について正確に述べる価値があります。ビットコイン全体のネットワークは、毎秒約1セクスティリオンのハッシュを計算しており、これはどんなグラフィックカードファームよりも何百倍も大きな数です。それでもこれには役立ちません。ASICマイナーは80バイトのヘッダーに対してSHA-256を実行することしかできず、曲線上の点を掛けることはできません。課題を解決するハードウェアは別物であり、はるかに遅いのです。
そのため、アドレスに対する力任せの攻撃の限界は現在、70ビットから80ビットの間にあり、進化するのはハードウェアが安くなったときで、ゆっくりと進みます。ソフトウェアの最適化は、指数関数的な壁の性質を変えることはありません。
実用的な警告を2つ記録する価値があります。1つ目は、プログラムが発表する毎秒の鍵数は、探しているものによって大きく異なることです。特定のアドレスを探すこと、数千のリストの中からどれかを探すこと、プレフィックスを探すことは、非常に異なるコストのタスクです。2つ目は、発表された多くの利益は、計算を速くするのではなく、メモリにロードされたリストと比較することから来ています。
このレッスンでは、最悪のケースを想定しました。アドレスだけが知られている場合です。公開鍵が公開されている場合、問題は範囲をスキャンすることから離散対数に変わります。そして、2^69回の試行を2^35に近いものに減らすショートカットがあります。次のレッスンでは、これらのショートカットの最初のもの、メモリを時間に交換する方法を紹介します。