Средний Урок 5 4 мин чтения

Размер 2^256: почему никто не может угадать ключ

Пространство ключей не велико, это абсурд. Этот урок измеряет стену с числами, которые можно представить, и показывает, где она действительно уступает.

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

Частный ключ состоит из 256 бит. Это значит, что количество возможных ключей равно 2, умноженному на себя 256 раз: примерно 115, за которым следуют 75 нулей. Написать это количество легко; представить его сложно, и сравнения, которые обычно используются, все ошибочны в одном и том же направлении — они слишком малы.

Зерна песка на всех пляжах и в пустынях Земли составляют около семи с половиной квинтиллионов, число с девятнадцатью цифрами. Звезды во всех галактиках, которые могут увидеть телескопы, составляют около десяти секстиллионов, с двадцатью двумя цифрами. Атомы, существующие в наблюдаемой вселенной, находятся в пределах 10^80 — и это первое сравнение, которое наконец превышает пространство ключей, с разницей в тысячу раз. Если бы каждому возможному ключу соответствовал атом во вселенной, оставались бы еще тысячи атомов на каждый ключ.

Если бы каждое зерно песка на Земле было попыткой, поиск даже не начался бы.

Такие большие числа становятся более конкретными, когда за них платят энергией. Вся сеть Bitcoin сегодня вычисляет около одного секстиллиона хешей в секунду, что является самым большим вычислительным усилием, когда-либо предпринятым человечеством для одной задачи. Если бы она прекратила майнинг и начала проверять ключи с такой скоростью, она покрыла бы около 3, за которым следуют 28 нулей в год — и потребовалось бы более 10^48 лет, чтобы просмотреть все пространство. Возраст вселенной составляет 13,8 миллиарда лет, число с одиннадцатью цифрами.

Самый жесткий предел даже не в этом, и он был рассчитан Брюсом Шнайером в 1996 году. Существует минимальное количество энергии, которое любой компьютер должен затратить, чтобы изменить один бит состояния, и оно определяется термодинамикой, а не технологией. Если сделать расчет с этим теоретическим минимумом, идеальный компьютер, который захватывал бы всю энергию, излучаемую Солнцем в течение тридцати двух лет, смог бы только досчитать до 2^192. Досчитать. Без проверки чего-либо, без сравнения с каким-либо адресом. А 2^192 — это незначительная часть от 2^256.

Досчитать до туда не дорого: это невозможно. Энергии целой звезды не хватит.

Теперь честная поправка, потому что реальная безопасность не равна 2^256. Существуют алгоритмы, которые атакуют частный ключ через публичный ключ и решают проблему примерно за квадратный корень из пространства — что уменьшает показатель степени вдвое и переводит усилие в порядок 2^128, или 34, за которым следуют 37 нулей. Это тема модуля о поиске ключей в продвинутом курсе. И 2^128 остается недостижимым с огромным запасом: расчет Солнца выше уже показывает, что даже 2^192 не помещается, но даже при таком снижении число остается больше, чем количество зерен песка на планете, умноженное на само себя.

Что можно сделать, и что делает мир, так это уменьшить интервал. Никто не ищет в 2^256; ищут в 2^70, в 2^80, в диапазонах, где кто-то уже знает, что ключ находится. Каждый бит меньше сокращает работу вдвое, и именно эта арифметика отделяет проект от невозможности.

Никогда не падал размер интервала. Падал размер розыгрыша.

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

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