Рейтинг:0

Подойдет ли AES GCM с итерациями PBKDF2 100 000 по состоянию на 2022 год?

флаг us

Является ли использование AES GCM с PBKDF2 и 100 000 итераций безопасным по состоянию на 2022 год?

В нашей модели угроз, если мы игнорируем риски, связанные с квантовыми вычислениями, безопасно ли это?

Вот пример работающей реализации Python:

импортировать Crypto.Random, Crypto.Protocol.KDF, Crypto.Cipher.AES
открытый текст = b"привет, мир, привет, мир, привет, мир, привет, мир, привет, мир"
password = b"правильная скоба для конского аккумулятора"
одноразовый номер = Crypto.Random.new().read(16)
ключ = Crypto.Protocol.KDF.PBKDF2 (пароль, одноразовый номер, количество = 100000)
шифр = Crypto.Cipher.AES.new(ключ, Crypto.Cipher.AES.MODE_GCM, nonce=nonce, mac_len=16)
ciphertext = (nonce,) + cipher.encrypt_and_digest(открытый текст) # nonce | зашифрованный текст | тег
печать (зашифрованный текст)

Примечание: используя тот же одноразовый номер за ПБКДФ2 и AES.новый(...) кажется, не проблема, если мы никогда не используем это повторно одноразовый номер для будущих шифровок см. Повторное использование соли PBKDF2 для AES/GCM в качестве IV: опасно?

forest avatar
флаг vn
Какие качества необходимы для того, чтобы он «все еще был в порядке» для вашей модели угроз? Лучше использовать KDF с жестким объемом памяти, потому что PBKDF2 легко распараллелить, но он не сломан.
флаг us
@forest Под «ОК», скажем, устойчивый к злоумышленнику, у которого есть бюджет вычислительной мощности в 1 миллион долларов по состоянию на 2022 год для конкретной задачи по взлому данного файла, защищенного паролем :) (и без доступа к квантовым вычислениям).
forest avatar
флаг vn
Дальше все зависит от того, насколько надежный пароль. 100 000 раундов PBKDF2 для заданного хэша добавляют $\log_2(100000) \приблизительно 16,6$ бит энтропии по сравнению с одним раундом этого хэша. Если сам пароль уже очень надежный, то вам даже _не нужен_ PBKDF2. Единственная цель медленного KDF — повысить безопасность паролей минимальной надежности. Если ваш пароль имеет только, скажем, 64 бита энтропии, то 1 000 000 итераций, скорее всего, сделают его недосягаемым для описанного вами злоумышленника.
флаг us
@forest Допустим, пароли состоят из 10 случайно выглядящих буквенно-цифровых символов (`a-zA-Z0-9`). Делают ли 100 000 итераций PBKDF2 его сегодня недосягаемым для злоумышленников? PS: я думаю, что ваш последний комментарий можно превратить в ответ.
Maarten Bodewes avatar
флаг in
Вы можете сделать расчеты самостоятельно, см., например. [здесь] (https://www.wolframalpha.com/input?i=log_2%28%2826+%2B+26+%2B+10%29+%5E+10%29). Таким образом, ~ 59,5 + ~ 16,6 = 76,1 бита безопасности, но это при условии, что пароль является полностью случайным, а не просто *случайным взглядом* для злоумышленника. Обратите внимание, что приведенное выше основано на полном поиске, поэтому в среднем у вас на 1 бит меньше безопасности (на самом деле я должен был удалить этот бит).
флаг us
Да, @MaartenBodewes, мне было любопытно, сколько бит энтропии считается «сильным» для пароля в настоящее время. > 70 бит вроде нормально, да?
Maarten Bodewes avatar
флаг in
Зависит от того, с кем вы сталкиваетесь, но скажем так, я не думаю, что обычный хакер попытается взломать это. Вам понадобится большая организация, ботнет или правительство, чтобы взломать только один пароль (при условии, что вы используете случайные соли), так что будет слишком много потраченных впустую циклов процессора. Одна из проблем заключается в том, что люди плохо запоминают 10-символьные полностью случайные пароли, и если вы используете диспетчер ключей, вы можете также использовать еще более надежный пароль.
forest avatar
флаг vn
Написал ответ на основе одного из моих комментариев, так как это кажется лучшим, что можно сделать на основе предоставленной информации.
Рейтинг:1
флаг vn

Это полностью зависит от того, насколько надежный пароль. 100 000 раундов PBKDF2 для пароля с заданным хэшем добавляют эквивалент $\log_2(100000)\около 16,6$ бит энтропии по сравнению с одним раундом этого хэша. Если сам пароль уже очень надежный, то вы даже не необходимость ПБКДФ2. Единственная цель медленного KDF — повысить безопасность паролей минимальной надежности. Если ваш пароль имеет только, скажем, 64 бита энтропии, то 1000 000 итераций, скорее всего, сделают его недосягаемым для злоумышленника с активами в 1 миллион долларов, потому что 64 + 16,6 = 80,6 бит, что, вероятно, будет стоить больше, чем \ 1 миллион долларов, чтобы сломаться.

Лучше использовать KDF с жестким объемом памяти. Это не потому, что PBKDF2 сломан как таковой, а потому, что злоумышленник может легче масштабировать атаку из-за хэширования, которое обеспечивает экстремальный параллелизм.

Ответить или комментировать

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