Безопасность с использованием AES с солевым паролем в качестве ключа

Я понимаю, как работает соленый хэш пароля, но я предполагаю, что мне также нужно будет хранить соль, имя пользователя, КЛЮЧ и зашифрованный пароль. Я думаю, что в целом мне просто нужно понять, как я буду это реализовывать, например, как сохранить его, а затем как восстановить пароль. Кроме того, если бы кто-то мог объяснить, почему использование этого соленого значения лучше, не мог бы человек провести атаку по словарю с солью перед каждым словом?

Спасибо,


person Shawn    schedule 18.02.2011    source источник
comment
Почему вы хотите восстановить пароль? Для паролей лучше использовать одностороннее шифрование.   -  person hrnt    schedule 18.02.2011
comment
Единственная причина хеширования с солью — НЕ позволять восстанавливать пароль.   -  person blaze    schedule 18.02.2011


Ответы (2)


Непонятно, что вы пытаетесь сделать: проверить правильность предоставленного пароля (как при входе в систему); или внедрить шифрование данных, где ключ получается из пароля.

В последнем случае (известном как шифрование на основе пароля) следует использовать функцию получения ключа, например PBKDF2. Функция получения ключа принимает соль и предоставленный пароль пользователя и создает ключ, который можно использовать с шифром, таким как AES.

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

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

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

person caf    schedule 21.02.2011

Вы должны использовать хэш-алгоритм для хранения ваших паролей, который является односторонним "шифрованием". Затем вы можете просто хэшировать пароль, полученный от пользователя, и сравнить с сохраненным хэшем.

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

Вам нужно будет сохранить соль, чтобы вы могли получить тот же хеш при вычислении хэша на вводе пользователя. Вы должны хранить соль безопасным способом.

person Tony The Lion    schedule 18.02.2011