【发布时间】:2017-01-05 14:57:11
【问题描述】:
我正在开发 2 个需要存在于两个独立服务器上的应用程序。一种是加密数据并将加密数据存储在 SQL Server 实例中(SQL 2012 Standard,因此不支持 TDE)。另一个应用程序将提取加密数据并对其进行解密以显示在某些报告中。
我是否应该使用共享的私钥/公钥访问来查看密钥 AESManaged?
【问题讨论】:
标签: .net encryption .net-4.0 secret-key
我正在开发 2 个需要存在于两个独立服务器上的应用程序。一种是加密数据并将加密数据存储在 SQL Server 实例中(SQL 2012 Standard,因此不支持 TDE)。另一个应用程序将提取加密数据并对其进行解密以显示在某些报告中。
我是否应该使用共享的私钥/公钥访问来查看密钥 AESManaged?
【问题讨论】:
标签: .net encryption .net-4.0 secret-key
AES 是一种对称密钥密码,因此不使用私钥/公钥对。使用 AES,所有参与者都必须有权访问相同的密钥来加密和解密数据。如果您对两个系统都可以访问相同的密钥感到满意,那么您不需要在此解决方案中引入非对称(公共/私有)加密。
如果您不希望两个系统都拥有对静态共享密钥的持久访问权(您可能不会),您可以使用混合密码系统——为每条消息/记录生成一个随机的 AES“会话”密钥,该密钥是要在源系统上加密,使用对称密钥加密数据(使用 AEAD 模式或通过 HMAC 在密文上添加身份验证标签),然后通过接收方的公钥加密会话密钥.您现在可以将加密的会话密钥和加密的数据一起传输,接收方将使用其私钥解密会话密钥,然后解密数据。任何一条消息的泄露都不会泄露任何其他记录(好吧,只要不是被泄露的收件人私钥)。
在 .NET 中,这意味着 AesManaged 或 AesCryptoServiceProvider(有关详细信息,请参阅 here)和 RsaCryptoServiceProvider 或 RsaCNG(请参阅 here)。
【讨论】: