ASP.Net Web サーバーの構成ファイル設定を暗号化するアプリケーションに取り組んでいます。私が実装している暗号化方法は、AES と RSA を使用してデータをエンベロープすることです。AES キーを生成し、その AES キーを使用してデータを暗号化し、Windows 証明書ストアの証明書の公開キーで AES キーを暗号化しています。次に、データを、暗号化された AES キーと、暗号化に使用された証明書のシリアル番号と共に、構成ファイルに保存します。
このデータにアクセスしたいときは、AES キーを暗号化するために使用された証明書のシリアル番号を読み取り、その証明書から秘密キーを引き出し、AES キーを復号化し、そのキーを使用してデータを復号化します。ここで、セキュリティのレベルが不明です。
証明書に関連付けられた秘密鍵にアクセスするには、秘密鍵をエクスポート可能としてマークし、アプリケーションが秘密鍵にアクセスして実行できるようにする必要があります。これは ASP.Net サーバーであるため、そのユーザーは "Network Services" です。これがセキュリティ上の問題になる理由がわかると思います。基本的に、誰かが Web 経由で私の 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);
}
ありがとう。