Рейтинг:1

Как создать ключ для AES с длиной ключа 192 бита из пароля?

флаг mu

Допустим, у меня есть пароль. И это безопасно. Но это строка из 10 символов.

Итак, если бы я хотел создать ключ AES для 128-битной версии алгоритма, я бы просто хэшировал его с помощью MD5. Или, если бы мне нужна была версия алгоритма 256, я бы хэшировал ее с помощью любой из хэш-функций длины 256, таких как Sha_256. Но мне не удалось найти никаких хэшей (кроме некоторых с именем Tiger), которые генерируют 192-битные выходные данные.Независимо от соли или предыдущих шагов в процессе генерации ключа, последний шаг, кажется, всегда представляет собой хеш, который возвращает ключ желаемой длины.

Является ли нормальным решением всегда использовать один и тот же хэш (скажем, Sha256) и просто брать количество битов, необходимое для ключа? Если нет, то как на 192?

Marc Ilunga avatar
флаг tr
На самом деле не рекомендуется использовать md5 sha256 для создания ключа из пароля. Если пароль не был сгенерирован случайным образом, лучше всего использовать медленную функцию хеширования пароля, такую ​​как argon2 (https://en.wikipedia.org/wiki/Argon2). Что также позволяет вам выбрать длину вывода. Кроме того, вывод безопасного хэша пароля может быть усечен до нужной длины.
флаг mu
Хорошо. Спасибо за ваш вклад!
Рейтинг:2
флаг in

Допустим, у меня есть пароль. И это безопасно. Но это строка из 10 символов.

Если мы предположим, что все 10 символов являются ASCII (не расширенными), вы получите максимум 64-битное пространство поиска для нападающего. Это означает, что вы эффективно используете 64-битный ключ для AES-128. Правило

  • Важен не только размер ключа, но и энтропия источника ключа.

Обычный способ — генерация одинаковых случайных 128 бит для ключа AES-128. Это легко, если вы используете обмен ключами, такой как DH (в конце концов, это тоже хэш - это утечка Лежандра) или ECDH (это тоже хэш, точки не являются однородными случайными)

Если вы используете пароль, вам также нужен хороший источник энтропии для ваших паролей. Использовать Дивевир с 10 словами, чтобы получить 128-битную энтропию. Если у вас есть это, на самом деле не имеет значения использование алгоритмов хеширования паролей для замедления злоумышленников, поскольку у вас уже есть 128-бит (вам все равно нужно хэшировать, так как он очень длинный). Если вы используете хеширование паролей, то путь злоумышленника будет самым быстрым; они будут перебирать ключ, а не пароль.

Теперь, если у вас нет возможности увеличить энтропию источника вашего пароля, вам определенно нужны алгоритмы хэширования паролей, такие как хеширование Argon2 и Balloon. У них есть такие параметры, как

  • итерация; увеличивает время атаки пропорционально итерации.
  • твердость памяти; устраняет/уменьшает массовый поиск пароля при поиске ASIC/PFGA/GPU, где память не привязана к CPU
  • и, счетчик потоков; уменьшает распараллеливание программ поиска паролей.

Все параметры должны быть скорректированы для достижения вашей целевой безопасности. Например, если ваш пароль имеет 100-битную безопасность, вам нужно $2^{28}$ итерация, чтобы заставить злоумышленника искать 128-бит.

Как создать ключ для AES с длиной ключа 192 бита из пароля?

  • Используйте 15 слов Dicewire, хешируйте их, а затем обрежьте до 192 бит или

  • Используйте свой пароль с солью и хэшируйте его с помощью алгоритмов хеширования паролей, таких как Argon2, с хорошо настроенными параметрами. Они уже разработаны, и вы можете найти библиотеки который выводит желаемую длину (имейте в виду, что Безопасность Argon2 ограничена 512-битным ). И;

    • Используйте уникальную соль для каждого сгенерированного ключа
    • Используйте столько, сколько более высокая энтропия
    • Используйте как можно больше параметров
флаг mu
Спасибо за объяснение. Сам пароль будет сгенерирован не человеком, а криптографически безопасным алгоритмом (по крайней мере, в соответствии с php), и он будет преобразован в 512-битную строку, представленную в виде шестнадцатеричной строки. Я использовал пароль в качестве примера по незнанию. Потому что я хотел знать, как получить правильную длину. Но если я правильно понял ваше объяснение, то достаточно просто хэшировать строку или удалить биты в конце для использования в качестве ключа, верно?
kelalaka avatar
флаг in
Да, теоретически все биты вывода хорошего криптографического хэша зависят от всех входных значений. Обрезка — это распространенный способ, например, SHA512/256 обрезается SHA-512 (с разными начальными значениями для разделения доменов).

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

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