Как известно, Bitcoin построен на принципах криптографии — науки о шифрах. Наверное все слышали о взломе шифровальной машины Enigma, позволившем союзникам расшифровывать перехваченные сообщения для немецких подлодок во время Великой Отечественной войны. Именно с Энигмы, а так же работ Шеннона и Тьюринга началась история современной криптографии.
Шеннон был одним из первых, кто развеял миф о “безопасности через сокрытие“. До этого пытались сохранить в тайне именно алгоритмы шифрования в надежде на то, что не зная деталей реализации, враг не сможет перехватывать шифрованные сообщения. Достаточно было шпионскими методами выкрасть описание алгоритма и вся система становилась скомпрометированной. Кроме того, подобные алгоритмы, как правило, не обладали удачным дизайном, содержали уязвимости и плохо противостояли атакам так, что подчас даже не было необходимости в узнавании деталей их реализации.
Шеннон сформулировал принцип “враг знает систему”, а это значило, что не было смысла прятать алгоритм, а даже наоборот, следовало открыть его для всех желающих. Но что-то скрываемое все равно должно быть, ведь шифр по определению — это сообщение, прочитать которое в идеале может лишь один человек — обладатель секрета шифра. При подходе “враг знает систему” подобным секретом стал так называемый “ключ”.
Именно знание правильного ключа и делает расшифрование сообщения возможным. Логично, что в идеале, ключ должен быть известен лишь доверенным сторонам. “Уплывший” ключ, в зависимости от выбранной криптографической системы, дает врагу возможность перехватывать и даже подделывать сообщения владельца. В основе Bitcoin все те же принципы, вот почему так важно держать ключи от кошельков в безопасном хранилище.
Когда мы говорим о ключах, мы как правило упоминаем и его длину. Длина ключа в любой криптографической системе измеряется в битах, но в разных системах “безопасная” длина ключа так же разная. Для симметричных алгоритмов, наподобие AES — это сотни битов, а для систем с публичным ключом наподобие RSA — это тысячи. Объединяет их одно — по замыслу взломщику нужны огромные вычислительные мощности и очень много времени для лобовой атаки шифра. К моменту, когда атакующий найдет правильный ключ, информация скорее всего будет уже неактуальной, а электричества он потратит больше, чем сможет выручить от продажи этой информации.
Считая, что ключи имеют вид статистически равномерного распределения, т.е. любая комбинация битов равновероятна, врагу предстоит опробовать в среднем половину из всех комбинаций даже в случае, если он будет перебирать не один за другим, а неким случайным образом. Значит, можно сказать, что безопасность ключа основана на комбинаторике и мы имеем дело с вероятностями. Если вероятность найти ключ за разумное время, обладая разумными мощностями ниже некоторого порогового значения, то мы говорим, что шифр криптографически стойкий, при условии, что у выбранноо алгоритма не существует каких-либо “врожденных” уязвимостей.
Пример
В Bitcoin используется ECDSA secp256k1, криптография на основе эллиптических кривых, с длиной ключа 256 бит. Алгоритм лобовой атаки состоит в следующем:
- Сгенерировать новую пару ключей.
- Вычислить 160-ти битный хеш публичного ключа и таким образом получить Bitcoin-адрес.
- Проверить содержимое полученного адреса на предмет наличия средств, и если кошелек не занят (пуст) — вернуться в пункт номер 1.
- Вывести средства.
При помощи следующей команды измерим время генерации ключа 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 миллисекунд на операцию. Далее мы сделаем следующие допущения:
- Пропустим этап вычисления 160-ти битного хеша, который конечно же тоже займет какое-то время. Проверку баланса так же опустим.
- Так как 160 бит адреса меньше, чем 256 бит ключа, существуют коллизии, т.е. несколько пар ключей одинаково подходят к одному и тому же кошельку. Предположим, что атакующий нашел способ генерировать только 2^160 пар ключей, подходящих каждому одному адресу, а не 2^256.
- Так же предположим, что атакующий обладает доступом к самому быстрому суперкомпьютеру на Земле — китайскому 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 лет.
Мхм, слишком много, понаделаем еще допущений.
- Сейчас в системе Биткоин зарегестрировано примерно 2,5 миллиона адресов с ненулевым балансом. Предположим, что атакующий хочет получить доступ хотя бы к одному из них (непременно вашему).
- Китайский монстр оказался не таким уж и мощным? Возьмем всю мощность сети Bitcoin — 445641 petaFLOPS, что в 13161 раз мощнее Tianhe-2.
Получим: 4,5 * 10^21 лет. Все равно слишком и слишком много.
Еще в наши вычисления можно включить закон Мура, прикинуть мощности квантовых компьютеров будущего, найти ошибку в моих расчетах и т.д., но все равно — до 2140-года, конца эпохи Биткоин, ну никак не успеть.
Куиндициллион
Отдельно хочу остановиться на числе с 48-ю нулями и красивым названием куиндициллион и чтобы такое огромное число могло уместиться в голове, предлагаю несколько сравнений от маленького к большому:
- 7,5 * 10 ^ 18 — именно столько песчинок на всех пляжах мира.
- 41,75 * 10^45 — столько молекул воды находится во всех океанах Земли.
- 89 * 10^48 — из такого количества молекул состоит Земля.
Масса Луны — 0,0123 земной. Таким образом, вероятность случайно найти ключ от Bitcoin-кошелька — это даже не иголка в стоге сена, на самом деле это то же самое, что найти одну единственную заветную молекулу внутри Луны.
Уверяю вас, можете спать спокойно.
Wallkar Wallkar
При доступе к файлам кошльков и имея облачный кластер за очень небольшие деньги в аренду можно хлопать кошельки как воздушные шарики.