Шифрование байтового [] ключа C # Aes

#c# #encryption #cryptography #aes

#c# #шифрование #криптография #aes

Вопрос:

Я создаю программу для сохранения своих паролей и использую метод шифрования Aes для шифрования и дешифрования своих файлов. Теперь вот моя проблема, я использую этот метод для этого.

Каждый раз, когда я запускаю программу, она генерирует новый КЛЮЧ и новый IV, но для того, чтобы программа считывала файлы, мне нужно иметь один и тот же ключ и iv каждый раз, когда я снова открываю программу.

Они являются ключом, и IV хранится как a byte[] , оба из которых должны быть «секретными»

Создаваемых ими байтов иногда слишком много для чтения компилятором, или он просто выходит из себя.

Есть ли какой-либо способ установить их как константы? или лучше сохранить его в файл?

Комментарии:

1. Я никогда не видел, чтобы компилятор «сходил с ума». Я видел, как программисты сходят с ума, и те, кому приходится читать эти «очень информативные» описания ошибок.

Ответ №1:

Они являются ключом, и IV хранится как байт [], оба из которых должны быть «секретными»

Не совсем. IV не является секретом. IV должен быть разным и случайным для каждой вещи, которую вы шифруете, но он может быть сохранен в виде открытого текста. Они должны быть сгенерированы как CSPRNG. Шифрование IV на самом деле не служит цели.

Каждый раз, когда я запускаю программу, она генерирует новый КЛЮЧ и новый IV

Ваш ключ должен быть получен из другого пароля. То есть ваше приложение должно запрашивать «главный» пароль, который запускается через что-то вроде PBKDF2, и его вывод используется в качестве ключа AES для того, что вы шифруете и расшифровываете. При таком подходе вашему приложению вообще не нужно хранить ключ.


Подумайте, нужно ли вам вообще «шифровать» пароли. Если вы используете пароли для проверки, например, для входа в систему, то лучше хешировать их с помощью чего-то вроде bcrypt.

Также имейте в виду, что это чрезвычайно сложная вещь, которую нужно исправить. До сих пор вы не упоминали о какой-либо аутентификации в своем шифровании (например, Encrypt-then-Mac) и т. Д.

Комментарии:

1. Спасибо за ответ

2. Все еще очень новичок в этом (фактически все еще в школе) Но я делаю все возможное, чтобы узнать больше

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

4. @vcsjones К сожалению, CBC по-прежнему является предпочтительным режимом для большинства; в этом случае IV должен быть непредсказуемым (для злоумышленника), а не просто другим.

5. Да, генерируется CSPRNG. Я сделал это более понятным с помощью редактирования.