7

我正在编写一个简单的文件加密程序。主要作为学术练习,但可能供将来认真使用。所有繁重的工作都由第三方库完成,但以安全的方式将各个部分组合在一起对于非密码学家来说仍然是一个相当大的挑战。基本上,我已经按照我认为应该的方式进行了所有工作。

我使用 128 位 AES 进行加密,密钥长度为 128 位。我希望用户能够输入可变长度的密码,所以我决定用 MD5 对密码进行哈希处理,然后使用哈希作为密钥。我认为这是可以接受的——密钥总是应该是秘密的,所以没有理由担心碰撞攻击。

现在我已经实现了这个,我遇到了几篇文章,表明这是一个坏主意。我的问题是:为什么?如果选择了一个好的密码,密码本身应该足够强大,除非通过非凡的(阅读:目前不可行的)蛮力努力,否则永远不会泄露密钥,对吧?我应该使用 PBKDF2 之类的东西来生成密钥,还是对于除了最极端的加密应用程序之外的所有应用程序来说都是过度杀伤力?

4

3 回答 3

6

这篇关于密钥强化的文章可能会对您有所帮助。基本上,您希望使密钥更强(比密码中的熵更多)并使其从密码中可靠地推导耗时。

于 2009-10-01T03:55:26.903 回答
1

好吧,由于您的帖子很笼统,所以让我陈述一些笼统的事情:

  1. MD5、SHA-0、SHA-1 都是损坏的哈希,你不应该将它们用于任何加密目的,使用 SHA-2。

  2. 通常,您应该使用众所周知的和记录在案的方法从密码中获取密钥(您没有提及哪种语言,请说明您使用的是哪种语言)。

  3. 在进行任何类型的安全编程时,最重要的是,在您做任何事情之前,严格记录您的“威胁模型”。这基本上是您试图阻止的所有攻击的列表,以及您将如何做到这一点,以及您无法阻止的攻击类型。这样做很有趣,您将了解所有攻击和其他有趣的事情。

于 2009-10-01T03:37:06.027 回答
0

您的新问题的答案是:您绝对应该使用 PBKDF2 之类的东西来生成密钥。

我假设您将有一个密码(至少 10 个字符的上下数字和标点符号对吗?),然后将生成一个 AES-256 密钥。密钥将用于加密/解密文件。您想使用 PBKDF2 之类的东西来降低获取您文件的人通过暴力攻击找出您的密钥/密码的能力。使用 PBKDF2(和随机盐!)之类的东西会增加破坏文件加密的成本。

真正建议您将其用作玩具,而不是保护您真正关心的东西。如果你不是安全专家,你就会犯错误,即使是专家(以及他们中的很多人)也会犯错误:http ://www.sslshopper.com/article-ssl-and-tls-renegotiation-vulnerability-发现.html

于 2010-03-20T01:25:55.207 回答