Безопасная обработка закрытых ключей из хранилища ключей Windows

Я ' m работает над приложением, которое шифрует параметры файла конфигурации для веб-сервера ASP.Net. Метод шифрования, который я реализую, заключается в охвате данных с использованием AES и RSA. Я генерирую ключ AES, используя этот ключ AES для шифрования моих данных, а затем шифрую ключ AES с помощью открытого ключа из сертификата в моем хранилище сертификатов Windows. Затем я сохраняю данные вместе с зашифрованным ключом AES и серийным номером сертификата, использованным для его шифрования, обратно в файл конфигурации.

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

Чтобы получить доступ к закрытому ключу, связанному с сертификатом, Я должен пометить закрытый ключ как экспортируемый и предоставить пользователю мое приложение, работающее под доступом к закрытому ключу. Поскольку это сервер ASP.Net, этим пользователем является «Сетевые службы». Я уверен, что вы понимаете, почему это может быть проблемой безопасности. В принципе, если бы кто-нибудь взломал мой сервер ASP.Net через Интернет, возможно, с помощью какой-либо инъекции, у них был бы доступ к этому закрытому ключу, не так ли?

Есть ли у кого-нибудь предложения относительно того, как я могу сделать моя модель более безопасна?

Функция дешифрования:

//need an rsa crytpo provider to decrypt the aes key with the private key associated with the certificate
using (RSACryptoServiceProvider rsaCSP = (RSACryptoServiceProvider) decryptionCertificate.PrivateKey)
{
    //decrypt the aes key with the cert's private key
    byte[] aesKey = rsaCSP.Decrypt(encryptedAESKey, false);

    //decrypt data using the decrypted aes key and the IV passed in
    decryptedData = decryptWithAes(encryptedData, aesKey, aesIV);
}

Спасибо.

6
задан jww 3 January 2016 в 14:42
поделиться