Допустим, у меня есть пароль. И это безопасно. Но это строка из 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-битным ). И;
- Используйте уникальную соль для каждого сгенерированного ключа
- Используйте столько, сколько более высокая энтропия
- Используйте как можно больше параметров