Security 对称密钥存储

Security 对称密钥存储,security,symmetric-key,key-storage,Security,Symmetric Key,Key Storage,我的公司将为我们的客户存储敏感数据,并将使用托管的.NET加密算法类之一对数据进行加密。大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储密钥。我做了一些简单的搜索和阅读,似乎硬件解决方案可能是最安全的。是否有人对密钥存储解决方案或方法有任何建议 谢谢大家的回复 实际上,问题是你提到的两个“范围”。我想我应该说得更清楚些 数据本身以及加密和解密数据的逻辑被抽象为ASP.NET概要文件提供程序。此配置文件提供程序既允许加密配置文件属性,也允许纯文本属性。加密属性值的存储方式与纯文本属性值的存

我的公司将为我们的客户存储敏感数据,并将使用托管的.NET加密算法类之一对数据进行加密。大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储密钥。我做了一些简单的搜索和阅读,似乎硬件解决方案可能是最安全的。是否有人对密钥存储解决方案或方法有任何建议


谢谢大家的回复

实际上,问题是你提到的两个“范围”。我想我应该说得更清楚些

数据本身以及加密和解密数据的逻辑被抽象为ASP.NET概要文件提供程序。此配置文件提供程序既允许加密配置文件属性,也允许纯文本属性。加密属性值的存储方式与纯文本属性值的存储方式完全相同,唯一明显的例外是它们已加密

也就是说,由于以下三个原因之一,需要调用密钥:

  • 在授权服务器上运行的授权web应用程序需要加密数据
  • 与#1相同,但用于解密数据
  • 我们业务团队的授权成员需要查看加密数据
  • 我想象的是,没有人会真正知道密钥——会有一个软件控制数据的实际加密和解密。也就是说,钥匙仍然需要来自某个地方


    完全披露-如果你还不能告诉我,我以前从未做过类似的事情,所以如果我对这应该如何工作的看法完全不正确,请务必告诉我。

    也有类似的问题。它只是通过使用主密码加密其配置来解决它。。。密码上的密码,如果您愿意。

    您最好的选择是物理保护密钥所在的硬件。此外,永远不要将其写入磁盘-找到某种方法防止该部分内存被分页到磁盘。当加密/解密密钥时,需要将其加载到内存中,并且对于不安全的硬件,总是存在这种攻击场所


    正如您所说,有硬件加密设备,但它们不能扩展-所有加密/解密都通过芯片。

    您可以使用另一个对称密钥加密对称密钥,该对称密钥是使用类似的密码派生的

    让用户提供密码,生成用于加密数据的新密钥,使用密码生成另一个密钥,然后加密并存储数据加密密钥


    它不像使用硬件令牌那样安全,但它可能仍然足够好,而且非常容易使用。

    我想我误解了你的问题。您要求的不是应用程序如何处理其密钥存储,而是您的公司将如何存储它

    在这种情况下,您有两个明显的选择:

    • 物理:写入USB驱动器、刻录到CD等。存储在物理安全的位置。但是您遇到了递归问题:您将保险库的密钥存储在哪里?通常,您会委派两名或多名人员(或一个团队)来保管钥匙

    • 软件:私人方舟是我的公司用来存储其秘密数字信息的东西。我们存储所有的管理员密码、许可证密钥、私钥等。它通过运行未加入域的Windows“vault”服务器来工作,对除自身端口以外的所有端口进行防火墙,并将其所有加密数据存储在磁盘上。用户通过web界面进行访问,该界面首先对用户进行身份验证,然后通过类似浏览器的界面与vault服务器进行安全通信。将记录所有更改和版本。但是,这也有同样的递归问题。。。主管理访问CD。这存储在我们的物理保险库中,访问权限有限


    在写入之前,使用硬编码密钥对生成的密钥进行加密。然后你可以在任何地方写


    是的,您可以找到硬编码密钥,但只要您假设可以在任何位置存储对称密钥,它的安全性就不会降低。

    根据您的应用程序,您可以使用该方法让双方安全地商定对称密钥


    初始安全交换后,密钥已达成一致,会话的其余部分(或新会话)可以使用此新的对称密钥。

    此问题(技术方面)只有两种真正的解决方案。 假设只有应用程序本身需要访问密钥

  • 硬件安全模块(HSM)-通常非常昂贵,而且不容易实现。可以是专用设备(如nCipher)或特定令牌(如Alladin eToken)。然后你还必须定义如何处理这些硬件

  • DPAPI(Windows数据保护API)。System.Security.Cryptography(ProtectedMemory、ProtectedStorage等)中有相应的类。这就把密钥管理交给了操作系统,而且处理得很好。在“用户模式”中使用,DPAPI将密钥的解密锁定给加密密钥的单个用户。 (在不太详细的情况下,用户的密码是加密/解密方案的一部分——不,更改密码不会弄糟密码。)

  • 添加:最好使用DPAPI来保护主密钥,而不是直接加密应用程序的数据。别忘了在加密密钥上设置强ACL…

    以响应OP中的第3条

    授权成员查看加密数据的一种方法是使用密钥托管,但他们实际上不知道密钥


    总的来说,钥匙被分成不同的部分,交给“受托人”。由于私钥的性质,每个段本身都是无用的。然而,如果数据需要解密,那么“受托人”可以将它们的部分组合成整个密钥。

    我们也有同样的问题,也经历了同样的过程。
    我们需要启动一个流程