Продвинутый Урок 2 4 мин чтения

Грубая сила: сколько это стоит по времени и энергии

Один номер за раз, с честными расчетами, сколько номеров в секунду и сколько это стоит в электричестве.

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

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

Трюк заключается в поиске кандидатов последовательно. Если у вас уже есть точка, соответствующая k, то точка, соответствующая k плюс один, — это та же точка, сложенная с G: сложение, а не полное умножение. И поскольку каждое сложение точек требует деления в конечном поле, что является дорогой операцией, используется второй трюк, известный как пакетная инверсия: вычисляется одна инверсия для сотен точек одновременно, и стоимость на кандидата резко падает.

Продвинуться на шаг стоит почти ничего. Начинать измерение с нуля на каждом шаге стоило бы всего.

С этими двумя оптимизациями современная видеокарта тестирует несколько миллиардов кандидатов в секунду. Это впечатляющее число, и его значение заслуживает тщательного рассмотрения.

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

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

Весь этот зал подключен, чтобы открыть одну коробку.

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

Первые ступени может преодолеть любой. Верхние никто не достигает.

Стоит быть точным в отношении сравнения, которое часто появляется. Вся сеть Bitcoin вычисляет около секстиллиона хэшей в секунду, число, в сотни раз большее, чем у любой фермы видеокарт — и все же это не подходит для этой задачи. ASIC-майнер умеет делать только одно — SHA-256 над заголовком в восемьдесят байт, и не умеет умножать точки на кривой. Оборудование, которое решает одну задачу, другое, и оно гораздо медленнее.

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

Стоит отметить два практических предупреждения. Первое — количество ключей в секунду, которое программы объявляют, сильно варьируется в зависимости от того, что ищется — поиск конкретного адреса, поиск любого из списка тысяч и поиск по префиксу — задачи с очень разной стоимостью. Второе — большая часть заявленных выигрышей исходит от сравнения с загруженным в память списком, а не от более быстрого вычисления.

Весь этот урок предполагал худший случай: известен только адрес. Когда открытый ключ обнародован, проблема перестает быть сканированием диапазона и становится дискретным логарифмом — и тогда существует обходной путь, который сокращает 2^69 попыток до чего-то около 2^35. В следующем уроке первый из этих обходных путей: обмен памяти на время.