【发布时间】:2011-04-30 06:02:51
【问题描述】:
我正在使用 .net 框架中的 aes 加密类对数据(医疗保健行业)进行加密。安全存储密钥的推荐位置有哪些?我在 web.config 中有它用于开发,但至少可以这么说,这感觉不值得生产。
【问题讨论】:
标签: .net asp.net encryption
我正在使用 .net 框架中的 aes 加密类对数据(医疗保健行业)进行加密。安全存储密钥的推荐位置有哪些?我在 web.config 中有它用于开发,但至少可以这么说,这感觉不值得生产。
【问题讨论】:
标签: .net asp.net encryption
您可以使用框架中的内置方法加密您的 web.config 值:
http://weblogs.asp.net/scottgu/archive/2006/01/09/434893.aspx
这可能是存储您的密钥的合理位置 - 如果有人设法访问您的服务器以检索这些详细信息,那么您可能会有更大的担忧。
【讨论】:
您需要做的是将此密钥隐藏在某处,而安全位置将位于数据库中。最好是与包含您的数据的数据库不同的数据库。由于数据需要用户名/密码组合才能打开它们,因此您只需在应用程序中添加第二个安全层。您的应用程序需要登录到密钥数据库,为应用程序 Y 检索密钥 X,然后才能使用它。但是,您必须将这个数据库的连接字符串存储在某个地方。
即使您只在密钥数据库中存储一个密钥,也值得麻烦。它迫使黑客在访问数据之前打开此数据库以查找密钥需要更多的麻烦。由于没有完美的安全性,您的选择仅限于延迟黑客获得访问权限所需的时间。
加密 web.config 文件或其中的数据也有助于延迟黑客,但如果密钥在配置文件里面,他需要做的就是再次解密。
【讨论】:
如果唯一需要将密钥用于任何目的的人可以完全信任它,那么一种可以提供良好安全性的方法是存储用另一个密钥加密的密钥,为每个用户存储一个副本,使用该用户密码的哈希加密(与存储用于密码验证的密码不同!)。即使是一个可以访问宇宙中任何地方的每一点数据、与该数据库的密钥相关联的邪恶的人,如果不对至少一个密码进行逆向工程,就无法访问数据库。
请注意,如果所有有效帐户的密码都丢失或忘记,则数据将无法恢复。这是真正安全性的一部分。如果想要避免丢失数据的可能性,则必须确保安全存储必要密钥和/或密码的备份副本。
【讨论】:
如果应用程序需要使用您的密钥进行身份验证,那么
Unix 机器上的常规方法是以散列形式存储密码。
您可以使用 sha-512 + 盐。
然后您可以在用户输入密码时计算哈希值并检查您的密码。
如果经过哈希处理,密码/密钥本身可以存储在任何地方。 如果不将其存储在没有人可以访问的技术用户目录中。
为那些不想花太多精力理解我提出的用例的人编辑
Johny 有一些 AES 加密数据。
他把钥匙放在脑袋里。
他想将这个嘿存储在他的 PC 上的某个地方,以便自动访问。
他可以将其作为 ASCII 码存储在 web.config 中。
但他可以将其散列为不再是 ASCII,而是散列。
在身份验证期间,应用程序计算哈希检查是否是正确的密钥,然后使用此密钥....
与适当算法发生冲突的可能性低。
ps。只是发表我对该主题的看法。
为什么你对“哈希”这个词这么敏感???
编辑 2
我知道什么是哈希,
我知道什么是所谓的2路加密......
【讨论】: