如何存储加密密钥

14

我正在使用 .NET 框架中的 AES 加密类来加密医疗保健行业的数据。有哪些推荐的安全存储密钥的位置?在开发过程中,我将其放在了 web.config 文件中,但这显然不适用于生产环境。


你可能想使用基于证书的加密。请参阅http://en.wikipedia.org/wiki/Certificate-based_encryption和http://msdn.microsoft.com/en-us/library/ms867080.aspx以及http://msdn.microsoft.com/en-us/library/ms229744.aspx。 - Wim ten Brink
4个回答

9

真的。但是DPAPI更“安全”吗? - Saraz
2
@Saraz:比什么更安全?它更安全的意思是“在没有管理员级别访问权限的情况下,在该特定计算机上无法恢复”(因为加密算法依赖于该计算机独有的数据)。换句话说,如果有人设法获取了您的web.config文件,他们仍然无法在其他计算机上解密。 - Piskvor left the building

0
你需要做的是将这个密钥藏在某个地方,一个安全的位置可以是在数据库中。最好是与包含数据的数据库不同的数据库。由于数据需要用户名/密码组合才能打开它们,因此您只需为应用程序添加第二个安全层。您的应用程序需要登录到密钥数据库,检索应用程序Y的密钥X,然后才能使用它。不过,您需要将此数据库的连接字符串存储在某个地方。
即使您只在密钥数据库中存储单个密钥,这也值得一试。它迫使黑客在访问数据之前花费更多的时间来打开此数据库以查找密钥。由于没有完美的安全性,您的选择仅限于延迟黑客获得访问权限所需的时间。
加密web.config文件或其中的数据也有助于延迟黑客,但如果密钥在配置文件中,他只需要再次解密即可。

这与在配置文件中存储密钥没有什么不同 - 您需要将连接到密钥数据库的字符串存储在某个地方,如果黑客可以访问您的配置文件,那么他可能能够获取此信息... - Paddy
正确。但它增加了第二层。您需要访问数据库以获取密钥,通常情况下,数据库存储在不同的系统上。如果数据库服务器设置为仅接受来自Web服务器位置的调用,则可以使远程黑客更难获取密钥的访问权限。如果数据库存储了几百个(虚拟的!)密钥,那么黑客仍然不知道该使用哪一个。 - Wim ten Brink

0

如果只有可以绝对信任的人需要使用密钥,一种提供良好安全性的方法是将密钥加密存储在另一个密钥中,并为每个用户存储副本,该副本使用该用户密码的哈希值进行加密(与用于密码验证的哈希值不同)。即使拥有与数据库密钥相关的每一位数据的、来自宇宙中任何地方的恶意人也无法访问数据库而不进行至少一个密码的反向工程。

请注意,如果所有有效账户的密码都丢失或遗忘,则数据将无法检索。这是真正安全性的一部分。如果想要避免可能的数据丢失,必须确保备份必要的密钥和/或密码已被安全地存储。


-2

如果应用程序需要使用您的密钥进行身份验证,则在Unix机器上的正常方法是以散列形式存储密码。您可以使用sha-512+盐。

然后,当用户输入密码时,您可以计算哈希并检查是否与您的哈希相匹配。

如果已经哈希,则密码/密钥本身可以存储在任何地方。如果没有存储在技术用户目录中,那么就没有人可以访问它。

编辑:对于那些不想花太多功夫理解我提出的用例的人

Johny有一些AES加密数据。
他将其密钥存储在头部。
他想将这个密钥存储在PC上的某个地方以实现自动访问。
他可以将其存储为web.config中的ASCII。
但他可以对其进行哈希处理,以便不再是ASCII,而是哈希值。
在身份验证期间,应用程序计算哈希并检查它是否为正确的密钥,然后使用此密钥....
低概率与适当的算法发生冲突。

附言:只是发布了我的观点。
为什么你这么在意“哈希”这个词???

编辑2
我知道什么是哈希,
我知道所谓的双向加密....


4
谁提到了密码?我猜OP想要可逆加密。 - Seva Alekseyev
确实,不想使用单向哈希 ;) - Saraz
关于您的编辑:不行。如果您对密钥进行哈希处理,则无法从哈希中恢复它(因为哈希处理本质上是一种有损转换)。那么,您如何使用计算机上不存在的密钥?(那个词。您一直在使用它。我认为您并不知道它的意思。) - Piskvor left the building
@bua:你可以建立一个系统,将主密钥的密码存储在物理保险箱中的纸张上,但此时最好使用RSA密钥令牌,因为密码变成了“你所拥有的东西”。虽然这将为计算机端提供值得称赞的安全性,但它只会将问题转移到物理安全方面(这可能更容易管理,但肯定会更昂贵)。 - Piskvor left the building
这是我在我的应用程序中所做的。这个想法是我自己想出来的(但我从未幻想过它是原创的),我想了解更多相关信息。你知道这种技术有没有名称吗? - Fantius
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接