Насколько закрытый ключ в хранилище ключей устойчив к брутфорсу?

Мне было интересно, насколько безопасным будет мой ключ, если кто-то сможет достать мой файл хранилища ключей (UTC / JSON), созданный с помощью MyEtherWallet. В прошлом я использовал hashcat, и поэтому я знаю, что он может легко найти открытый текст пароля средней длины за разумное время, начиная с его хэша, даже с обычным графическим процессором. Так можно ли взломать хранилище ключей таким же простым способом? Или, другими словами, какой длины должен быть пароль, чтобы быть в безопасности?

@RichardHorrocks Я видел, что используется AES128, но я думаю, чтобы знать, насколько он защищен от грубой силы, важно знать алгоритм хеширования, используемый для получения ключа AES из пароля.

Ответы (2)

На самом деле KDF практически не имеет ничего общего с общей безопасностью вашего кошелька. Вот почему:

Основные функции вывода

KDF добавляет к паролю пользователя вычислительную энтропию . Единственная причина, по которой необходим KDF, связана с тем, что люди плохо разбираются в паролях (это означает, что пароли предсказуемы). Люди склонны придумывать пароли типа P@ssw0rd! которые, кажется, имеют математически высокую энтропию (9 символов, нижний/верхний регистр, числа, специальные символы), но явно страдают от предсказуемости.

Однако, если вы в любом случае используете надежный пароль в качестве ключа AES (т. е. не сгенерированный человеком, а, например, 128-битный CSPRNG ), нет необходимости использовать KDF вообще (потенциальный злоумышленник, вероятно, попробует другой подход и атакуйте ваше шифрование напрямую, а не ваш KDF).

Однако вы правы: KDF добавляет некоторую вычислительную энтропию и создан для замедления злоумышленника за счет увеличения сложности, которую ему необходимо преодолеть. Для k итераций добавленная сложность составляет около log2(k) бит (дополнительная информация) . Конечно, это всего лишь гипотетическое значение, и вы не хотите на него полагаться. Лучше выбрать надежный пароль в первую очередь.

Теоретическая математика

Давайте посчитаем для вашего случая и предположим, что вы используете средний пароль (32 бита энтропии) и 1024 итерации (число указано как n в вашей конфигурации). 32 + log2(1024) = 42 бита энтропии

Теперь фактическая осуществимость атаки зависит только от вычислительных ресурсов и денег злоумышленника соответственно. Если он сможет сделать 10 тысяч догадок в секунду, атака займет

2^42/(10000*3600*24*356) = 14 лет

Что действительно важно

Пожалуйста, имейте в виду, что 14 лет и другие результаты являются теоретическими. Реальный извлеченный урок: KDF незначителен, если вы хотите знать реальную безопасность своего кошелька. Если вы выберете пароль типа «1234», в котором строчные/прописные буквы, цифры и специальные символы не разрешены, ни KDF, ни AES вам не помогут, и ваш кошелек нельзя будет считать безопасным.

В конце концов, безопасность вашего кошелька зависит от вашего пароля и его энтропии. Защитите свой кошелек надежным паролем, и вы в безопасности.

Заглянув в файл хранилища ключей, я обнаружил, что указаны все алгоритмы шифрования. В качестве алгоритма KDF используется «scrypt» со следующими параметрами «n»: 1024, «r»: 8, «p»: 1.

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