我的公司将为我们的客户存储敏感数据,并将使用其中一个托管的.NET加密算法类加密数据.大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储密钥.我做了一些轻松的搜索和阅读,似乎硬件解决方案可能是最安全的.有没有人对密钥存储解决方案或方法有任何建议?
感谢您的回复,大家.
spoulson,问题实际上是你提到的"范围".我想我应该更清楚一点.
数据本身以及加密和解密它的逻辑被抽象为ASP.NET配置文件提供程序.此配置文件提供程序允许加密的配置文件属性和纯文本属性.加密属性值的存储方式与纯文本值完全相同 - 除非它们已加密.
也就是说,密钥需要能够被召唤出于以下三个原因之一:
在授权服务器上运行的授权Web应用程序需要加密数据.
与#1相同,但用于解密数据.
我们业务团队的授权成员需要查看加密数据.
我想象的方式是没有人会真正知道密钥 - 会有一个软件控制数据的实际加密和解密.也就是说,钥匙仍然需要来自某个地方.
完全披露 - 如果你还不能说,我以前从未做过这样的事情,所以如果我完全不了解我应该如何运作,那么请告诉我.
这个问题(技术方面)只有两个真正的解决方案.假设只有应用程序本身需要访问密钥......
硬件安全模块(HSM) - 通常非常昂贵,并且不易实现.可以是专用设备(例如nCipher)或特定令牌(例如Alladin eToken).然后你仍然需要定义如何处理该硬件......
DPAPI(Windows数据保护API).System.Security.Cryptography(ProtectedMemory,ProtectedStorage等)中有类.这样就可以将密钥管理交给操作系统 - 它可以很好地处理它.在"USER_MODE"中使用,DPAPI将锁定对加密它的单个用户的密钥解密.(没有太详细,用户的密码是加密/解密方案的一部分 - 不,更改密码不会导致密码崩溃.)
增加:最好使用DPAPI来保护主密钥,而不是直接加密应用程序的数据.并且不要忘记在加密密钥上设置强ACL ...