对称密钥存储

时间:2008-09-08 16:54:39

标签: security symmetric-key key-storage

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


感谢您的回复,大家。

spoulson,问题实际上是你提到的“范围”。我想我应该更清楚。

数据本身以及加密它并对其进行解密的逻辑被抽象为ASP.NET配置文件提供程序。此配置文件提供程序允许加密的配置文件属性和纯文本属性。加密属性值的存储方式与纯文本值完全相同 - 显而易见的是它们已被加密。

那就是说,钥匙需要能够被召唤出于以下三个原因之一:

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

    完全披露 - 如果你还不能说,我以前从未做过这样的事情,所以如果我完全不了解我应该如何运作,请务必告诉我。 / p>

9 个答案:

答案 0 :(得分:9)

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

  1. 硬件安全模块(HSM) - 通常非常昂贵,并且实施起来并不简单。可以是专用设备(例如nCipher)或特定令牌(例如Alladin eToken)。然后你仍然需要定义如何处理该硬件......

  2. DPAPI(Windows数据保护API)。 System.Security.Cryptography(ProtectedMemory,ProtectedStorage等)中有类。这样就可以将密钥管理交给操作系统 - 它可以很好地处理它。在“USER_MODE”中使用,DPAPI将锁定对加密它的单个用户的密钥解密。 (没有太详细,用户的密码是加密/解密方案的一部分 - 不,更改密码不会导致密码。)

  3. ADDED:最好使用DPAPI来保护主密钥,而不是直接加密应用程序的数据。并且不要忘记在加密密钥上设置强ACL ...

答案 1 :(得分:1)

回应来自OP的answer的#3

授权成员能够查看加密数据的一种方法,但如果没有他们实际知道密钥将使用密钥托管(rsa labs) (wikipedia)

总之,密钥被分解为单独的部分并交给“受托人”。由于私钥的性质,每个段对其自身都是无用的。然而,如果需要解密数据,那么“受托人”可以将他们的部分组合成整个密钥。

答案 2 :(得分:1)

我们遇到了同样的问题,并且经历了同样的过程 我们需要在一台计算机(客户端)上启动进程,然后登录到第二台计算机(数据库服务器)。

我们目前认为最佳做法是:

  • 操作员在客户端PC上手动启动该过程。
  • 客户端PC会提示操作员他的个人登录凭据。
  • 运营商输入他的凭据。
  • 客户端PC使用这些登录数据库服务器。
  • 客户端PC从数据库服务器请求自己的登录凭据。
  • 数据库服务器检查运营商的登录凭据是否有权获取客户端进程的凭据并将其返回给客户端PC。
  • 客户端PC注销数据库服务器。
  • 客户端PC使用自己的凭据登录数据库服务器。

实际上,操作员的登录密码是密钥,但它不会存储在任何地方。

答案 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方法让双方安全地同意对称密钥。

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