Метод грубой силы — это самая глупая стратегия из всех возможных, и это единственная доступная, когда целью является адрес. Она также удивительно быстрая, по причине, которую почти никто не замечает сразу: никто не вычисляет каждый ключ с нуля.
Тестирование кандидата требует четырех этапов. Умножение генератора на число-кандидат, что дает открытый ключ. Пропуск открытого ключа через SHA-256. Пропуск результата через RIPEMD-160. Сравнение двадцати байтов с искомым адресом. Первый этап в десятки раз дороже, чем три других вместе взятых — и именно его поисковые программы избегают.
Трюк заключается в поиске кандидатов последовательно. Если у вас уже есть точка, соответствующая k, то точка, соответствующая k плюс один, — это та же точка, сложенная с G: сложение, а не полное умножение. И поскольку каждое сложение точек требует деления в конечном поле, что является дорогой операцией, используется второй трюк, известный как пакетная инверсия: вычисляется одна инверсия для сотен точек одновременно, и стоимость на кандидата резко падает.

С этими двумя оптимизациями современная видеокарта тестирует несколько миллиардов кандидатов в секунду. Это впечатляющее число, и его значение заслуживает тщательного рассмотрения.
Диапазон в семьдесят бит имеет 2^69 кандидатов, что примерно равно 590 квинтиллионам. Деление на три миллиарда в секунду дает около двухсот миллиардов секунд — примерно шесть тысяч двести лет на одной плате. Тысяча плат в параллели сокращает это до чуть более шести лет. Десять тысяч плат — до семи месяцев.
Теперь о счете за электроэнергию, который действительно имеет значение. Одна такая плата потребляет около четырехсот ватт. Умножив на общее время работы, полное сканирование семидесяти бит потребляет около двадцати двух гигаватт-часов — потребление города среднего размера в течение нескольких дней, независимо от того, сколько плат вы используете для достижения цели. Разделение работы между большим количеством машин сокращает календарное время, но не меняет количество энергии.

А затем приходит то, что все портит: каждый дополнительный бит удваивает весь счет. Семьдесят один бит стоит вдвое больше времени и энергии. Семьдесят пять стоят в тридцать два раза больше. Восемьдесят бит стоят в тысячу раз больше, чем семьдесят — и тысяча раз двадцать два гигаватт-часа — это количество энергии, которое ни одна частная операция не купит для поиска ключа.

Стоит быть точным в отношении сравнения, которое часто появляется. Вся сеть Bitcoin вычисляет около секстиллиона хэшей в секунду, число, в сотни раз большее, чем у любой фермы видеокарт — и все же это не подходит для этой задачи. ASIC-майнер умеет делать только одно — SHA-256 над заголовком в восемьдесят байт, и не умеет умножать точки на кривой. Оборудование, которое решает одну задачу, другое, и оно гораздо медленнее.
Именно поэтому граница грубой силы над адресами сегодня находится где-то между семьюдесятью и восьмьюдесятью битами и не продвигается вперед, потому что кто-то придумал лучшую идею: она продвигается, когда оборудование становится дешевле, и медленно. Ни одна оптимизация программного обеспечения не изменяет экспоненциальную природу стены.
Стоит отметить два практических предупреждения. Первое — количество ключей в секунду, которое программы объявляют, сильно варьируется в зависимости от того, что ищется — поиск конкретного адреса, поиск любого из списка тысяч и поиск по префиксу — задачи с очень разной стоимостью. Второе — большая часть заявленных выигрышей исходит от сравнения с загруженным в память списком, а не от более быстрого вычисления.
Весь этот урок предполагал худший случай: известен только адрес. Когда открытый ключ обнародован, проблема перестает быть сканированием диапазона и становится дискретным логарифмом — и тогда существует обходной путь, который сокращает 2^69 попыток до чего-то около 2^35. В следующем уроке первый из этих обходных путей: обмен памяти на время.