Рейтинг:3

Разве сгенерированные человеком пароли, используемые с функциями получения ключей, не снижают безопасность симметричного шифрования?

флаг et

Размер ключа для AES выбран равным 256, потому что это считается минимальным размером ключа, который может защитить от атаки грубой силы, т.е. $2^{256}$ пытается.

Однако на практике для многих приложений выбранный пользователем пароль используется для получения ключа размера 256 с использованием KDF. Допустим, приложение требует пароль из 8 символов — это 64-битный пароль — так что грубая сила сводится к $2^{64}$ пытается. И, вероятно, еще больше уменьшится, потому что байт обычного пароля имеет гораздо меньшую энтропию, чем байт ключа. Грубая сила может быть использована побайтно, а не побитно, тем самым уменьшая грубую силу до меньшего, чем $2^{64}$ пытается. Это означает, что AES256 даже с 32-символьным паролем будет слабее, чем AES256 со случайно сгенерированным ключом.

Так почему это не беспокоит? Или я что-то упускаю?

Использование медленных KDF уменьшит некоторые потери безопасности из-за использования пароля, выбранного человеком, вместо случайной генерации AES-256 - однако есть ли какой-либо анализ по этому поводу?

fgrieu avatar
флаг ng
Это забота. Но вы, кажется, упустили из виду, что проблема в некоторой степени смягчается специальными, намеренно медленными KDF для пароля, такими как [Argon2] (https://en.wikipedia.org/wiki/Argon2), а до этого устаревшим PBKDF2. Вам следует изучить эту линию защиты. Тем не менее хороший вопрос, особенно если вы добавите: сколько дополнительных битов энтропии реально могут дать эти смягчающие меры? Как технический прогресс влияет на безопасность криптографии на основе паролей, на краткосрочную и долгосрочную секретность?
флаг et
@fgrieu - я знаю, что медленные KDF всегда используются (или, скорее, всегда должны использоваться). Тем не менее, есть ли какой-либо анализ того, сколько смягчения они действительно обеспечивают, то есть сравнение атаки грубой силы на случайно сгенерированном 256-битном ключе с 256-битным ключом, сгенерированным из n-символьного пароля с использованием медленного KDF. Что даст рекомендации относительно того, сколько символов следует выбрать, а также сколько раундов KDF вернет безопасность от атаки грубой силы к тому же, что и 256-битный ключ.
fgrieu avatar
флаг ng
Вышеприведенное разъясняет, что [хеширование пароля] (https://crypto.stackexchange.com/tags/password-hashing/info) имеет отношение к вопросу. Я добавил этот тег и рекомендую 1) просмотреть, чем вопрос отличается от [_Password, энтропия намного ниже, чем энтропия ключей шифрования. Почему это приемлемо? _](https://crypto.stackexchange.com/q/36851) и другие теги [tag:password-hashing]. 2) Затем либо измените хотя бы последний абзац, чтобы уточнить вопрос (например, включив некоторые из приведенных выше комментариев), либо удалите вопрос, если он повторяется.
Рейтинг:5
флаг in

Размер ключа для AES выбран равным 256, потому что это считается минимальным размером ключа, который может защитить от атаки грубой силы, т.е. $2^{256}$ пытается.

Это не правильно, $2^{128}$ или, точнее, размер ключа 128 бит для $2^{127}$ Попыток в среднем считается достаточно, особенно против любой практической атаки.

Однако на практике для многих приложений выбранный пользователем пароль используется для получения ключа размера 256 с использованием KDF. Допустим, приложение требует пароль из 8 символов — это 64-битный пароль — так что грубая сила сводится к $2^{64}$ пытается. И, вероятно, еще больше уменьшится, потому что байт обычного пароля имеет гораздо меньшую энтропию, чем байт ключа.

64 бита - напрасная надежда, пароли генерируются человеком в среднем около 40 бит. Конечно, даже хорошо подобранные пароли из 8 символов обычно используют подмножество ASCII, которое само по себе является подмножеством всех возможных значений байтов. Со всеми 24 специальными, которые обычно используются, я получаю 86 значений из 256, т.е. $log_2(86) \примерно 6,43$ бит энтропии на байт, или $\около 51,41$ бит для 8 таких символов. Но это только в том случае, если предполагается идеальное распределение, а люди ужасно не умеют генерировать случайные значения.

Грубая сила может быть использована побайтно, а не побитно, тем самым уменьшая грубую силу до меньшего, чем $2^{64}$ пытается.

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

Это означает, что AES256 даже с 32-символьным паролем будет слабее, чем AES256 со случайно сгенерированным ключом.

Да. Обратная сторона салфетки покажет вам, что вы пропали без вести 16$ \умножить на 1.5 = 24$ биты на по крайней мере.

Так почему это не беспокоит? Или я что-то упускаю?

Это огромный проблема, как правило, вы стараетесь вообще избегать использования паролей. В противном случае вы бы использовали функцию получения ключа на основе пароля, которая применяет растяжение ключа, например, один из вариантов Argon2 (вероятно, более известны PBKDF2, scrypt и bcrypt). Но они обеспечивают лишь небольшую защиту для каждого вывода ключа. Это около 20 бит на миллион итераций (как $log_2(1 000 000)$ приближается к 20). Вас это точно не поднимет $2^{128}$ для общих паролей; $40 + 20 = 60$ бит, поэтому взлом шифрования будет дорогим, но далеко не невозможным.

Там, где невозможно избежать паролей, рекомендуется использовать менеджер паролей, например. Пароли из 12 символов, которые генерируются случайным образом (возможно, потребуется присутствие некоторых символов на случай, если вам не повезет). Это не приблизит вас к 128 битам, но будет достаточно сдерживающим фактором для любого, кто пытается использовать грубую силу или подобные методы. Конечно, также можно использовать 32 случайных шестнадцатеричных символа и просто сохранить ключ, предполагая, что нет ограничений на размер пароля.

Простой трюк показывает, что вы можете использовать $$l_p = \bigg\lceil {l_k - \log_2(i) \over log_2(N)} \bigg\rceil$$ как способ узнать количество символов для каждого пароля, скажем, мы используем значения выше: $$\bigg\lceil {128 - \log_2(1,000,000) \over \log_2(86)} \bigg\rceil = \bigg\lceil {{128 - 20} \over 6,43} \bigg\rceil = 17$$ расширенный символьный пароль для достижения 128 бит с использованием KDF с 1 000 000 итераций, при условии, что он совершенно случайный.

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

Обратите внимание, что это менее проблематично, когда можно принять контрмеры. Например. PIN-код обычно состоит всего из 4-6 цифр, но тот факт, что вы можете попробовать только три раза, защищает его от атак (коды PUK, как правило, намного больше, так как они обычно не блокируются, так как это может привести к отказу в обслуживании). атаки). Однако, например. шифрование файлов автономные атаки вообще можно предположить.

Рейтинг:2
флаг si

Ответ Маартена хорош, но не упоминает, что можно довольно легко иметь запоминающиеся кодовые фразы с > 128 битами энтропии. посуда система использует хороший ГСЧ (высококачественные игральные кости или CSPRNG) для выбора «символов» из огромного «алфавита»: вместо использования отдельных английских букв (или символов ASCII) «символы» представляют собой целые слова, а «алфавит» представляет собой список из 7776 слов (или 1296 слов для их «коротких» списков).

С 7776 словами вы получаете 12,9 бит энтропии на слово, с 1296 словами вы получаете 10,3 бит энтропии на слово. Таким образом, фраза из 10 слов, использующая словарь из 7776 слов, например «ChompBuggyOkayPlatonicGrafted.KiltDecreeRecessOpacityUnedited», имеет 129 бит энтропии и является хорошим выбором для защиты базы данных менеджера паролей. "." в середине просто легко запоминающийся символ, который легко набирается, чтобы помочь разбить парольную фразу на две парольные фразы из 5 слов, что облегчает запоминание всего этого.

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

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

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