我的公司将为我们的客户存储敏感数据,并将使用其中一个托管的.NET加密算法类加密数据。大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储密钥。我做了一些轻松的搜索和阅读,似乎硬件解决方案可能是最安全的。有没有人对密钥存储解决方案或方法有任何建议?
感谢您的回复,大家。
spoulson,问题实际上是你提到的“范围”。我想我应该更清楚。数据本身以及加密它并对其进行解密的逻辑被抽象为ASP.NET配置文件提供程序。此配置文件提供程序允许加密的配置文件属性和纯文本属性。加密属性值的存储方式与纯文本值完全相同 - 显而易见的是它们已被加密。
那就是说,钥匙需要能够被召唤出于以下三个原因之一:
我想象的方式是,没有人会真正知道密钥 - 会有一个软件控制数据的实际加密和解密。也就是说,密钥仍然需要来自某处。
完全披露 - 如果你还不能说,我以前从未做过这样的事情,所以如果我完全不了解我应该如何运作,请务必告诉我。 / p>
答案 0 :(得分:9)
这个问题(技术方面)只有两个真正的解决方案。 假设只有应用程序本身需要访问密钥...
硬件安全模块(HSM) - 通常非常昂贵,并且实施起来并不简单。可以是专用设备(例如nCipher)或特定令牌(例如Alladin eToken)。然后你仍然需要定义如何处理该硬件......
DPAPI(Windows数据保护API)。 System.Security.Cryptography(ProtectedMemory,ProtectedStorage等)中有类。这样就可以将密钥管理交给操作系统 - 它可以很好地处理它。在“USER_MODE”中使用,DPAPI将锁定对加密它的单个用户的密钥解密。 (没有太详细,用户的密码是加密/解密方案的一部分 - 不,更改密码不会导致密码。)
ADDED:最好使用DPAPI来保护主密钥,而不是直接加密应用程序的数据。并且不要忘记在加密密钥上设置强ACL ...
答案 1 :(得分:1)
回应来自OP的answer的#3
授权成员能够查看加密数据的一种方法,但如果没有他们实际知道密钥将使用密钥托管(rsa labs) (wikipedia)
总之,密钥被分解为单独的部分并交给“受托人”。由于私钥的性质,每个段对其自身都是无用的。然而,如果需要解密数据,那么“受托人”可以将他们的部分组合成整个密钥。
答案 2 :(得分:1)
我们遇到了同样的问题,并且经历了同样的过程 我们需要在一台计算机(客户端)上启动进程,然后登录到第二台计算机(数据库服务器)。
我们目前认为最佳做法是:
实际上,操作员的登录密码是密钥,但它不会存储在任何地方。
答案 3 :(得分:0)
Microsoft Rights Management Server (RMS)也有类似的问题。它只是通过使用主密码加密其配置来解决它。 ...密码密码,如果你愿意的话。
答案 4 :(得分:0)
您最好的选择是物理保护密钥所在的硬件。此外,不要将其写入磁盘 - 找到一些方法来防止该部分内存被分页到磁盘。当加密/解密密钥需要加载到内存中,并且使用不安全的硬件时,总会存在这种攻击的场所。
就像你说的那样,有硬件加密设备,但它们不能扩展 - 所有加密/解密都通过芯片。
答案 5 :(得分:0)
您可以使用另一个使用PBKDF2之类的密码派生的对称密钥来加密对称密钥。
让用户出示密码,生成用于加密数据的新密钥,使用密码生成另一个密钥,然后加密并存储数据加密密钥。
它不如使用硬件令牌那么安全,但它可能仍然足够好并且非常易于使用。
答案 6 :(得分:0)
我想我误解了你的问题。您要求的不在于应用程序如何处理其密钥存储的范围,而在于您的公司将如何存储它。
在这种情况下,您有两个明显的选择:
物理:写入USB驱动器,刻录到CD等。存储在物理安全的位置。但是你遇到了递归问题:你将密钥存储在哪里?通常,您委派2个或更多人(或团队)来持有钥匙。
软件:Cyber-Ark私人方舟是我公司用来存储其秘密数字信息的方式。我们存储所有管理员密码,许可证密钥,私钥等。它的工作原理是运行未加入域的Windows“保险库”服务器,防火墙除了自己的所有端口,并将所有数据存储在磁盘上。用户通过首先对用户进行身份验证的Web界面进行访问,然后通过类似资源管理器的界面与Vault服务器进行安全通信。记录所有更改和版本。但是,这也有同样的递归问题......主管理员访问CD。它存储在我们的物理保险库中,访问受限。
答案 7 :(得分:0)
使用硬编码密钥在写出之前加密生成的密钥。然后你可以在任何地方写它。
是的,您可以找到硬编码密钥,但只要您假设可以将对称密钥存储在任何地方,就不会那么安全。
答案 8 :(得分:0)
根据您的应用程序,您可以使用Diffie-Hellman方法让双方安全地同意对称密钥。
在初始安全交换之后,密钥达成一致,会话的其余部分(或新会话)可以使用这个新的对称密钥。