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

Я построил систему CMS, чтобы пользователи могли создавать онлайн-формы и управлять ими в приложении моего интранета.

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

Все хорошо, но теперь, перед выпуском, я мог бы сделать с рулем в отношении shared secret а также salt,

Моей оригинальной идеей было сделать (динамический) shared secret путем объединения (на основе GUID) идентификатора Form содержащий зашифрованное поле с идентификатором (опять же на основе GUID) Question поле является ответом на:

FormId:QuestionId

мой Salt в настоящее время генерируется таким же образом, только с измененным порядком направляющих, т.е.

QuestionID:FormID.

Я новичок в этом деле, поэтому не уверен, что это разумная стратегия, или мне следует заняться этим как-то иначе?

1 ответ

Решение

Соль должна быть случайно сгенерированным значением. Его цель - сделать атаки по словарю / перебором более трудными для выполнения. В Википедии есть хорошая статья о криптографических солях: http://en.wikipedia.org/wiki/Salt_(cryptography)

Для общего секрета в идеале это не должно быть значение, которое хранилось в незашифрованном виде с данными, которые оно шифровало (например, ваши идентификаторы). Обычно рекомендуется, чтобы ключ выбирался каким-либо образом конечным пользователем или администратором, чтобы они могли периодически его поворачивать или в случае какого-либо нарушения безопасности. Этот ключ пароля может принадлежать каждому пользователю CMS или, возможно, учетной записи администратора. Если у вас очень серьезные требования к безопасности, вы можете использовать сторонний сервер управления ключами.

Если главной целью здесь является больше запутывания, и CMS не будет подвергаться какой-либо форме аудита безопасности, тогда что-то в соответствии с вашей первоначальной идеей подойдет. Это предотвратило бы случайный доступ к данным, но, вероятно, не прошло бы проверку на соответствие формальным стандартам, которые требовали бы случайной соли, способа поворота ключей и способа для "владельца" системы изменить пароль так, чтобы Вы сами не могли получить доступ к данным.

Другие вопросы по тегам