.net 在哪里存储加密密钥

.net 在哪里存储加密密钥,.net,asp.net,encryption,.net,Asp.net,Encryption,我正在使用.net framework中的aes加密类加密数据(医疗保健行业)。安全存放钥匙的推荐位置有哪些?我在web.config中有它用于开发,但至少可以说,这不值得生产。如果应用程序需要使用您的密钥进行身份验证,那么 unix机器上的正常方法是以哈希形式存储密码。 您可以使用sha-512+盐 然后,您可以在用户输入密码时计算哈希值,并对照您的密码进行检查 密码/密钥本身可以存储在任何地方,只要对其进行哈希处理。 如果没有,则将其存储在技术用户目录中,其中没有人可以访问 为那些不想花太多

我正在使用.net framework中的aes加密类加密数据(医疗保健行业)。安全存放钥匙的推荐位置有哪些?我在web.config中有它用于开发,但至少可以说,这不值得生产。

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

然后,您可以在用户输入密码时计算哈希值,并对照您的密码进行检查

密码/密钥本身可以存储在任何地方,只要对其进行哈希处理。 如果没有,则将其存储在技术用户目录中,其中没有人可以访问

为那些不想花太多精力理解我介绍的用例的人编辑

约翰尼有一些AES加密数据。
他把钥匙藏在脑袋里。
他想将此信息存储在PC上的某个位置,以便自动访问。
他可以将其作为ASCII码存储在web.config中。
但他可以将其散列,使其不再是ASCII,而是散列。
在身份验证期间,应用程序计算哈希检查是否为正确的密钥,然后使用此密钥….
通过适当的算法,碰撞概率较低

顺便说一句,我只是发表了我对这个话题的观点。
你为什么对“哈希”这个词这么敏感

编辑2
我知道什么是散列,

我知道什么是所谓的双向加密…

您可以使用框架中的内置方法加密web.config值:


这可能是存储您的密钥的合理位置-如果有人设法访问您的服务器以检索这些详细信息,那么您可能会有更大的担忧。

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

如果只有出于任何目的需要使用密钥的人才能完全信任密钥,那么将提供良好安全性的一种方法是存储用另一个密钥加密的密钥,该密钥的副本为每个用户存储,并用该用户密码的散列加密(与存储用于密码验证的密码不同!)即使是一个可以访问宇宙中任何地方与数据库密钥相关的所有数据的邪恶人物,如果不反向工程至少一个密码,也无法访问数据库


请注意,如果所有有效帐户的密码丢失或遗忘,数据将无法恢复。这是真正安全性的一部分。如果要避免数据丢失的可能性,必须确保安全存储必要密钥和/或密码的备份副本。

谁提到了密码?我想是这样的OP需要可逆加密。事实上,不需要单向散列;)Re your edit:否。如果对密钥进行散列,则无法从散列中恢复密钥(根据定义,散列是一种有损转换)。然后,如何使用计算机上任何地方都没有的密钥?(这个词。你一直在用它。我不认为它的意思和你想的一样。)@Piskvor来自应用程序缓存。。。。什么时候会有任何超级用户身份验证隧道密钥发送。@bua:问题不在于身份验证。他的应用程序需要加密将由另一个应用程序解密的数据。为此,他必须使用加密密钥。True。DPAPI更“安全”吗?@Saraz:比什么更安全?从某种意义上讲,它更安全,“在特定机器上没有管理员级别的访问就无法恢复”(因为加密算法依赖于该机器特有的数据)。换句话说,如果有人成功获取了你的web.config,他们仍然无法在其他计算机上解密。这与在配置文件中存储密钥没有什么区别-你需要将连接字符串存储到密钥数据库的某个位置,如果你的黑客有足够的权限访问你的配置文件,他可能会得到这个…真的。但它增加了第二层。您需要访问数据库以获取密钥,通常,数据库存储在不同的系统上。如果数据库服务器设置为仅接受来自web服务器位置的调用,则会使远程黑客更难访问密钥。如果数据库存储了几百个(虚拟!)密钥,那么黑客仍然不知道该使用哪一个。你可能想使用基于证书的加密。查看和