Brute Force Search Space — это набор вариантов, которые можно последовательно проверять, пытаясь угадать секрет. Представьте, что вы забыли пароль от собственной зашифрованной резервной копии: каждое предположение — кандидат, и нужно понять, правильно ли оно открыло копию. Чем больше равновероятных вариантов и чем дороже их проверка, тем сложнее обычно поиск. Но для настоящего кошелька сначала надо определить, что именно мы ищем.
Пароль от резервной копии, приватный ключ, разрешающий тратить биткоины, и входные данные генератора, создавшего ключ, — разные вещи. Различаются и варианты, и способы их проверки. Если неисправный генератор выбирал из небольшого набора входных данных, поиск может оказаться проще, чем подсказывает длина готового ключа. Злоумышленник может проверять этот ограниченный набор вместо всех математически возможных ключей. Поэтому перед подсчётом вариантов нужно разобраться в происхождении секрета. [1] [3]
Предположим, есть 16 равновероятных вариантов и ровно один правильный. Проверяем их по очереди, без повторений. Иногда ответ находится быстро, иногда лишь в конце; в среднем потребуется проверить 8,5 кандидата. Для произвольного количества N это записывают как E = (N+1)/2. При постоянной скорости 2 попытки в секунду среднее время составит 4,25 секунды. Дробное число попыток относится к среднему, а не к отдельному поиску. Это наглядная модель, а не измеренное время восстановления биткоин-кошелька. [1]
Любимые слова, имена и запоминающиеся шаблоны встречаются чаще случайных комбинаций. Поэтому злоумышленник может начать с более вероятных догадок. Похожую проблему создаёт неисправный генератор, чаще выдающий определённые результаты. Среднее из предыдущего примера тогда уже не работает. Мин-энтропия описывает шанс лучшей первой догадки, но сама не определяет общий объём работы или гарантированный срок успеха. Количество вариантов без их вероятностей — неполная информация. [1] [2]
Проверка кандидата не обязательно мгновенна. PBKDF2 — функция, выводящая ключ из пароля и других входных данных; повторение вычислений увеличивает работу для каждой попытки. Ещё один входной параметр — salt. Обычно это открытые данные, различающие отдельные выводы ключа: при разных salt нельзя просто повторно использовать одну заранее рассчитанную таблицу результатов. Salt не является ещё одним секретным паролем и не заменяет надёжные входные данные. Чтобы оценить скорость, нужно знать конкретную функцию, её настройки и оборудование. [3]
BIP39 преобразует слова восстановления и необязательную passphrase, то есть дополнительный пароль, в seed — секретное начальное значение для выведения ключей. Он использует PBKDF2 с HMAC-SHA512 в качестве внутренней вычислительной функции и 2048 итераций, то есть повторений, получая 512-битный seed. Здесь параметр salt состоит из текста «mnemonic», за которым следует passphrase; дополнительный секрет вносит именно passphrase. Каждая passphrase создаёт допустимый seed, поэтому контрольная сумма слов восстановления не подтверждает, что введена нужная passphrase. Восстанавливая собственный кошелёк, его можно узнать, например, по известному адресу при правильных настройках выведения ключей. Длинный результат не делает слабый пароль сильным. [4]
Есть и математические методы, которые не сводятся к последовательным догадкам. В криптографии на эллиптических кривых (ECC) из приватного ключа можно вычислить публичный; найти приватное значение в обратном направлении — сложная задача дискретного логарифмирования. SEC 2 описывает параметры кривой secp256k1, используемой в Bitcoin. Поэтому подсчёт всех 256-битных строк не охватывает всех путей атаки. NIST SP 800-57 различает длину ключа и стойкость защиты — оценку усилий для её преодоления при определённых предположениях. Наличие математического пути не делает его практически простым. [5] [6]
Несколько процессоров могут разделить независимые попытки, но выигрыш зависит также от памяти и организации вычислений. Hashrate в майнинге измеряет вычисления для майнинга, а не скорость PBKDF2 или операций ECC. Важно и различие между входом на сайт и копией резервного файла. Сервис может ограничить доступ после неверных попыток. Но обладатель копии зашифрованного файла способен проверять догадки offline на собственном устройстве. Одно лишь ограничение входа на сайте таких попыток не остановит. [3] [6]
Тому, кто получил весь seed, не нужно перебирать огромное множество вариантов. К такому же результату может привести вредоносная программа или ошибка в программе, работающей с ключами. Поэтому безопасность не заканчивается выбором непредсказуемого секрета: важны и его хранение, и использование. Услышав оценку времени взлома, выясните, какая атака предполагается, что злоумышленник уже знает и как измерена скорость. Большое число само по себе не гарантирует безопасность устройства, а эта модель не обещает успешного восстановления потерянного кошелька. [6]
Для полной картины прочитайте эту статью вместе с Cryptographic Entropy, Entropy Bit, Private Key, Seed Phrase. На эту статью также ссылаются Entropy Bit, Random Number Generator.