Ключи должны быть защищены и сохранены в тайне, просто так. Реализация нет. Системы управления ключами продаются за большие деньги доверенными поставщиками, потому что решение проблемы - трудно .
Вы, конечно, не хотите использовать один и тот же ключ для каждого пользователя, чем больше он используется, тем «легче» его сломать или, по крайней мере, иметь некоторые утечки информации. AES - это блочный шифр, он разбивает данные на блоки и передает результаты шифрования последнего блока в следующий блок. Вектор инициализации - это начальная подача в алгоритм, потому что в начальной точке начинать не с чего. Использование случайных IV с одним и тем же ключом снижает риск утечки информации - он должен быть разным для каждого зашифрованного фрагмента данных.
Как вы храните ключи, зависит от того, как ваша система спроектирована. Я только что закончил KMS, где ключи хранятся вдали от основной системы, а функции для шифрования и дешифрования доступны через WCF. Вы отправляете простой текст и получаете ссылку на ключ и зашифрованный текст обратно - таким образом, KMS отвечает за всю криптографию в системе. Это может быть излишним в вашем случае. Если пользователь вводит пароль в вашу систему, вы можете использовать его для генерации пары ключей. Затем эту пару ключей можно использовать для шифрования хранилища ключей для этого пользователя - XML, SQL и т. Д. И использовать для расшифровки каждого ключа, который используется для защиты данных.
Не зная больше о том, как настроена ваша система, или о ее назначении, трудно порекомендовать что-либо кроме «Ключи должны быть защищены, ключи и IV не должны использоваться повторно».