Стоит ли беспокоиться о безопасности Биткоин-адреса?

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

Шеннон был одним из первых, кто развеял миф о “безопасности через сокрытие“. До этого пытались сохранить в тайне именно алгоритмы шифрования в надежде на то, что не зная деталей реализации, враг не сможет перехватывать шифрованные сообщения. Достаточно было шпионскими методами выкрасть описание алгоритма и вся система становилась скомпрометированной. Кроме того, подобные алгоритмы, как правило, не обладали удачным дизайном, содержали уязвимости и плохо противостояли атакам так, что подчас даже не было необходимости в узнавании деталей их реализации.

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

Именно знание правильного ключа и делает расшифрование сообщения возможным. Логично, что в идеале, ключ должен быть известен лишь доверенным сторонам. “Уплывший” ключ, в зависимости от выбранной криптографической системы, дает врагу возможность перехватывать и даже подделывать сообщения владельца. В основе Bitcoin все те же принципы, вот почему так важно держать ключи от кошельков в безопасном хранилище.

Когда мы говорим о ключах, мы как правило упоминаем и его длину. Длина ключа в любой криптографической системе измеряется в битах, но в разных системах “безопасная” длина ключа так же разная. Для симметричных алгоритмов, наподобие AES — это сотни битов, а для систем с публичным ключом наподобие RSA — это тысячи. Объединяет их одно — по замыслу взломщику нужны огромные вычислительные мощности и очень много времени для лобовой атаки шифра. К моменту, когда атакующий найдет правильный ключ, информация скорее всего будет уже неактуальной, а электричества он потратит больше, чем сможет выручить от продажи этой информации.

Считая, что ключи имеют вид статистически равномерного распределения, т.е. любая комбинация битов равновероятна, врагу предстоит опробовать в среднем половину из всех комбинаций даже в случае, если он будет перебирать не один за другим, а неким случайным образом. Значит, можно сказать, что безопасность ключа основана на комбинаторике и мы имеем дело с вероятностями. Если вероятность найти ключ за разумное время, обладая разумными мощностями ниже некоторого порогового значения, то мы говорим, что шифр криптографически стойкий, при условии, что у выбранноо алгоритма не существует каких-либо “врожденных” уязвимостей.

Пример

В Bitcoin используется ECDSA secp256k1, криптография на основе эллиптических кривых, с длиной ключа 256 бит. Алгоритм лобовой атаки состоит в следующем:

  1. Сгенерировать новую пару ключей.
  2. Вычислить 160-ти битный хеш публичного ключа и таким образом получить Bitcoin-адрес.
  3. Проверить содержимое полученного адреса на предмет наличия средств, и если кошелек не занят (пуст) — вернуться в пункт номер 1.
  4. Вывести средства.

При помощи следующей команды измерим время генерации ключа secp256k1 на моем 2.3 Ghz Core i7 (на одном ядре):

$ time for i in {1..10000}; do openssl ecparam -genkey -name secp256k1 -noout -out myprivatekey.pem; openssl ec -in myprivatekey.pem -pubout -out mypubkey.pem; done

Здесь, для точности эксперимента я сделал 10 тыс. замеров, что заняло 1 минуту и 40 секунд (user time) или 10 миллисекунд на операцию. Далее мы сделаем следующие допущения:

Коридоры Tianhe-2
Коридоры Tianhe-2
  1. Пропустим этап вычисления 160-ти битного хеша, который конечно же тоже займет какое-то время. Проверку баланса так же опустим.
  2. Так как 160 бит адреса меньше, чем 256 бит ключа, существуют коллизии, т.е. несколько пар ключей одинаково подходят к одному и тому же кошельку. Предположим, что атакующий нашел способ генерировать только 2^160 пар ключей, подходящих каждому одному адресу, а не 2^256.
  3. Так же предположим, что атакующий обладает доступом к самому быстрому суперкомпьютеру на Земле — китайскому Tianhe-2 с мощностью 33,86 petaFLOPS (количество операций с плавающей запятой в секунду). Этот компьютер, а вернее кластер из 16-ти тысяч машин составляет 3,120,000 процессорных ядер.

Получим:

  • 1 / 0.01 = 100 пар ключей в секунду на одном ядре.
  • 312,000,000 = 312 миллионов пар ключей в секунду на суперкомпьютере Tianhe-2.
  • 2^160 = 1461501637330902918203684832716283019655932542976 = 1,46 * 10^48 — куиндициллион, именно столько комбинаций ключей придется перебрать, чтобы получить доступ ко всем кошелькам Bitcoin.
  • Все это составляет примерно 1,48 * 10^32 лет.

Мхм, слишком много, понаделаем еще допущений.

  1. Сейчас в системе Биткоин зарегестрировано примерно 2,5 миллиона адресов с ненулевым балансом. Предположим, что атакующий хочет получить доступ хотя бы к одному из них (непременно вашему).
  2. Китайский монстр оказался не таким уж и мощным? Возьмем всю мощность сети Bitcoin — 445641 petaFLOPS, что в 13161 раз мощнее Tianhe-2.

Получим: 4,5 * 10^21 лет. Все равно слишком и слишком много.

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

Куиндициллион

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

Масса Луны — 0,0123 земной. Таким образом, вероятность случайно найти ключ от Bitcoin-кошелька — это даже не иголка в стоге сена, на самом деле это то же самое, что найти одну единственную заветную молекулу внутри Луны.

Уверяю вас, можете спать спокойно.

По теме

Один комментарий к “Стоит ли беспокоиться о безопасности Биткоин-адреса?”

  1. Wallkar Wallkar

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

Комментарии закрыты.