#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. Я сделал это более понятным с помощью редактирования.