初学者加密,高手密码的问题

本文关键字:问题 密码 高手 加密 初学者 | 更新日期: 2023-09-27 18:01:54

我正在编写一个程序,使用Rijndael,将使用用户选择的密码加密和解密文件/文件夹。目前,当用户想要加密某些东西时,他们必须输入一个密码,该密码用于加密,当用户准备好时,解密文件/文件夹。

然而,我想有一个"主密码",将允许用户只输入密码一次在程序的"首选项"部分,然后程序将自动使用该密码进行所有加密/解密。这样,他们就不必每次想要加密/解密时都输入密码。

现在,既然像这样的程序容易受到许多不同类型的攻击,我如何安全地存储用户的"主密码",使别人无法获得它?将其以明文形式存储在程序中显然不是一个好主意,所以我可以使用另一个由我选择的密码加密/解密,并存储在程序中。

然而,如果有人获得了我选择的加密/解密主密码的密码,那么他们就可以解密主密码,这也不太好。

如此!程序如何安全地做到这一点?

目前,我通过使用我自己选择的密码加密它来保存"主密码",并将其存储在用户范围内的设置中。如果你认为这不是一个好主意,请告诉我为什么,你会如何改变我目前实施的流程?

谢谢!

初学者加密,高手密码的问题

回顾一下:http://www.redkestrel.co.uk/Articles/StoringSecrets.html

这是一篇关于你的选择的好文章。

也就是说,我认为你的用例已经很好地由windows本身通过EFS....覆盖了http://technet.microsoft.com/en-us/library/cc700811.aspx

只是想补充一点:从根本上说,保护"秘密"不让那些有物理访问权限的人知道是不可能的。这已经被证明了一次又一次,甚至对于支持本地加密方案的硬盘驱动器也是如此。

你所能做的就是让那些不知道自己在做什么的人有点困难。

最根本的问题是必须有东西可以访问解密密钥。无论是机器的BIOS,硬盘的固件,甚至是存储在通过DPAPI隐藏的某个文件夹中。这意味着唯一有效的方法是在加密/解密文件时强制用户提供必要的凭据。

如果这些凭证足够短,那么可以使用蛮力来获取它们。目前的建议是使用128位或更大的最小密钥长度。当然,如果您被限制使用普通字母,那么要测试的位数就会急剧下降。如果你允许那些在黑客字典中找到的值,那么破解的时间就会进一步缩短。

另一个问题是键盘记录程序。如果安装了一个(并且可以对大多数用户隐藏),那么攻击者所要做的就是等待用户输入他们的解密密码并将其转发给感兴趣的一方。

哎呀,对于真正的偏执狂来说,有一些设备可以仅仅根据你输入时键盘发出的声音来检测你输入的内容。对于其他情况,即使在机器关闭后,RAM也会在一段时间内保持状态…

那么,这一切意味着什么?首先,您必须要求它们在每个加密/解密请求上提供凭据。其次,他们必须确保没有安装键盘记录程序。第三,证书不能是容易记住的东西。第四,计算机不能在物理上可访问的位置。第五,即使是键盘也必须安全…

所有这些加在一起的情况是,如果它在电脑上,其他人可以得到它。

你知道为什么当你丢失密码时网站不会告诉你,他们会要求你重新输入密码吗?
因为他们不知道。是的,他们不知道。他们对它进行哈希,并且哈希得很好,所以他们只能根据数据库中的哈希来检查你输入的密码。

为什么?
因为他们不能安全地储存。
他们无法安全地加密它。

这是一个类似的情况。
最好的方法是不要使用主密码。

当你加密一个文件时,要求一个密码并使用密码的哈希值进行加密。
在解密时,请求密码并尝试解密。
如果失败了,那就错了。
如果没问题,那就是对的。

您可以在文件内容之前添加一些(较短的)虚拟数据,以便用于检查键。


如果你试图用它来存储主密码,你将进入一个安全的无限循环,这不是一个好主意。
你将加密密码,然后加密使用的密钥,然后加密用于加密第一个密钥的密钥,等等。

编辑:我很抱歉这个答案令人沮丧的性质,但你需要做的是真的不可能的。

考虑使用SecureString类将主密码存储在内存中。

我实话实说。把安全留给安全专家。安全是不容易的,即使对于那些被认为是该领域专家的人来说,也很难做好。

如果你真的需要存储用户希望安全的敏感数据,那么询问如何做到这一点绝对不是一个好兆头,也不是要走的路。您应该寻求专业指导,或者考虑使用市场上或Windows本身提供的经过良好测试的实现。

不要保存用户的密码,取一个散列并确保对其加盐。使用散列对文件进行加密和解密。注意,如果用户忘记了他们的密码,你将无法为他们恢复它,但你仍然可以为他们解密文件。这也意味着你的应用程序很容易被黑客攻击或打补丁,让它在不提供密码的情况下解密文件。

如果加密方法是标准的、文档化的、明显的和/或众所周知的,那么为了防止黑客仅仅读取哈希并使用它来解密文件本身,你可以这样做:使用存储的哈希和一些其他信息来生成一个新的哈希,然后你使用它来加密/解密文件,并且永远不会持久。其他信息可以由文件大小、创建日期等组成。黑客可以利用这些信息,但他们必须在知道自己需要你的应用之前破解/逆向工程你的应用。从技术上讲,由于这些密钥隐藏在普通视图中,因此它通过模糊来实现安全性。