使用 .NET 在一台服务器上加密并在另一台服务器上解密

Encypting on one server and decrypting on another using .NET

我正在开发 2 个需要存在于两个独立服务器上的应用程序。一个将加密数据并将加密数据存储在 SQL 服务器实例中(SQL 2012 标准,因此不支持 TDE)。另一个应用程序将提取加密数据并将其解密以显示在某些报告中。

我是否应该使用共享 private/public 密钥访问查看密钥 AESManaged

AES 是对称密钥密码,因此不使用 private/public 密钥对。使用 AES,所有参与者都必须能够访问相同的密钥来加密和解密数据。如果您对两个系统都可以访问相同的密钥感到满意,那么您不需要为此解决方案引入非对称 (public/private) 加密。

如果您不希望两个系统都可以持久访问静态共享密钥(您可能不这样做),您可以使用混合密码系统——为每个 message/record,在源系统上使用对称密钥加密数据(使用AEAD模式或通过HMAC在密文上添加认证标签),然后通过接收者的 public 密钥加密会话密钥。您现在可以将加密的会话密钥和加密的数据一起传输,接收方将使用其私钥解密会话密钥,然后解密数据。任何单个消息的泄露都不会泄露任何其他记录(好吧,只要泄露的不是收件人私钥)。

在 .NET 中,这意味着 AesManagedAesCryptoServiceProvider(请参阅 here for more information) and RsaCryptoServiceProvider or RsaCNG (see here)。