Можно ли использовать SHA1-хэш пароля в качестве соли при получении ключа шифрования и IV из строки пароля?

м используюRfc2898DeriveBytes для безопасного генерирования ключа шифрования и вектора инициализации из предоставленного пользователем строкового пароля для использования с симметричным шифрованием (например, AesManaged) .I '

м взяв хэш пароля SHA1 в качестве параметра соли дляRfc2898DeriveBytes, Это нормально? Если нет, то откуда мне взять соль? Мне понадобится та же соль при расшифровке, верно? Поэтому я должен хранить его где-нибудь в незашифрованном виде - без обеспечения. Если мне нужно надежно хранить его, то он просто станет другим »пароль"нетне так ли?

void SecureDeriveKeyAndIvFromPassword(string password, int iterations, 
    int keySize, int ivSize, out byte[] key, out byte[] iv)
{
    // Generate the salt from password:

    byte[] salt = (new SHA1Managed()).ComputeHash(Encoding.UTF8.GetBytes(password));

    // Derive key and IV bytes from password:

    Rfc2898DeriveBytes derivedBytes = new Rfc2898DeriveBytes(password, salt, iterations);

    key = derivedBytes.GetBytes(keySize);
    iv = derivedBytes.GetBytes(ivSize);
}

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

Вскоре у меня есть файл, который необходимо зашифровать, и ввод пароля пользователем. Как правильно использоватьRfc2898DeriveBytes получить безопасный ключ шифрования и IV?

Благодарю.

РЕДАКТИРОВАТЬ:

Спасибо за ваши ответы. Теперь я понимаю, что основная (может быть, только?) Цель соли - сделать создание радужных таблиц невозможным - вы можетепредварительно сгенерировать хеш "P @ $ w0rd» потому что он будет иметь разные хэш для каждого возможного значения соли. Я прекрасно понимаю, НО ... Это действительно имеет отношение к симметричному шифрованию? Я'm не хранит хэш где-нибудь правильно? Поэтому, даже если у злоумышленника есть радужная таблица для всех возможных комбинаций паролей, он может:много делаю, верно?

Итак, мой вопрос теперь таков: есть ли преимущество использования случайной соли в каждой операции шифрования по сравнению с использованием соли, полученной из пароля (или даже жестко закодированной),при использовании с симметричными алгоритмами шифрования (как AesManaged из .NET)?

Ответы на вопрос(5)

Ваш ответ на вопрос