几年来,我将所有密码都放在一个文本文件中,并使用使用AES-128的软件解决方案(Axcrypt)使用密码对该文件进行了加密。密码不是很强,但是我认为AES加密会以某种方式使其更强。

但是,它总是让我感到困扰,因为它似乎很安全,而且现在我对加密有所了解。这实际上与AES加密无关。因为当使用密码而不是直接提供密钥时,AES加密变得完全不相关。破解AES花费多少亿年不再重要,因为现在唯一需要破解的就是我的密码。攻击者找到我的文件,下载Axcrypt,然后通过蛮行/词典对其进行攻击,直到其被破解。攻击者不需要使用128位密钥对我的文件进行暴力破解,而只需使用密码对我的文件进行暴力破解。

所以我有两个问题:


我对吗?使用密码对AES加密文件是否完全没有意义?
Axcrypt网站建议使用22个字符长的密码来实现128位安全性。 22个字符的密码和随机生成的密钥一样安全吗?

(我知道实际的密钥是通过算法从密码派生的。我只是不明白密​​码的安全性。密码的存在意味着攻击者将不再必须处理AES和密钥,而只能处理密码)

评论

我猜推荐的22个字符是基于随机生成的字母数字密码的假设。如果您使用数字以及从a到z的大小写字母,将有62个可能的字符。而62²²与2¹²⁸的数量级相同。

每个系统只有最薄弱的一环才有力量。

#1 楼

您是正确的,因为与AES纯文本/密文的密码分析相反,针对对手的最佳策略是猜测密码。但是,这并不能使加密变得毫无意义-与加密分开,基于密码的密钥派生本身就是一项挑战,但确实有实用的解决方案。

我们可以通过花费大量时间来从密码派生密钥来加强此薄弱环节。如果对手每秒只能测试少数几个密码,那么他们能够破解给定密码的可能性就会大大降低。

当然,这不是一个完美的解决方案-您可能需要在速度较慢的旧计算机上导出密钥,而对手可能需要访问配备有GPU和FPGA的分布式网络。因此,在您获取密钥需要多长时间(必须足够快)与对手猜测密码需要多长时间(必须足够慢)之间要取得平衡。

通常,每次派生尝试1秒的持续时间被认为是适当的。但是,即使对函数进行了固定的次数迭代,计算哈希所需的实际持续时间也不会保持恒定。这是由于计算能力随时间扩展的方式所致-今天用于保护密码的迭代次数可能无法在几年内为您提供几乎一样的保护。

关于22个字符是否password的强度等同于128位密钥,这不是一个可以用简单的“是”或“否”回答的问题-例如,如果您的22个字符的密码是1010101 ... 10,则否。绝对不具有与均匀随机的128位值差不多的熵。如果您的22个字符的密码由3-4个带间隔的英文单词组成,那么它的熵几乎不及128位随机值。

评论


$ \ begingroup $
那么gsdkafjpewğ32roew* -320411 * /这样的密码呢? (在一些发现密码的网站上,我的密码类似)?绝对没有办法让我记住这一点,但是无论如何我都不必使用密码本身(除了一年中的几次)。
$ \ endgroup $
–约翰·汉密尔顿
16/12/26在12:36

$ \ begingroup $
@JohnHamilton-您的密码中包含14个普通小写字母,8位数字和7个特殊字符。您建议的密码显示了不同类型字符的分组,因此,我假设它是从一小套可能令人难忘的格式中提取的,也许是其中的100种。这给出了大约10 ^ 40左右的组合,大约等于2 ^ 132,因此答案是“是的,但仅仅是”。
$ \ endgroup $
– Periata Breatta
16年12月26日在16:00

$ \ begingroup $
请允许我来提一下:“熵”是指“密码生成方法的熵”还是“特定密码的香农熵”?您的回答建议使用后者,而我认为在这种情况下不相关。
$ \ endgroup $
– Evpok
16 Dec 26 '21:15

$ \ begingroup $
您的密码可以是AAAAAA,但攻击者不知道。因此,他仍然反对六字母字母来源的熵,并且AAAAAA并不比QPAJKF或SCREAM更好或更差。现在,您可以尝试对攻击者尝试其暴力执行的顺序进行猜测:顺序地进行?因此,AAAAAA不好,因此不是熵。字典优先?然后SCREAM不好。
$ \ endgroup $
– Lerni
16 Dec 27'8:23

$ \ begingroup $
我的意思是,重要的是选择密码的密码组的大小,而不是结果得到的实际密码。确实,选择128个随机位的熵比4个随机英语单词大几个数量级,但这不是我的意思。让我感到困扰的是您的“如果您的密码是[…],那么它就没有那么多的熵”。您正在比较密码和密码来源,这没有多大意义。
$ \ endgroup $
– Evpok
16/12/27在12:39



#2 楼


对吗?使用密码对AES加密文件是否完全没有意义?


不,当然,使用密码对AES加密文件也不完全没有意义。但是,问题出在细节之内。


攻击者无需使用128位密钥对我的文件进行暴力破解,而只需使用密码对其进行暴力破解即可。


>这是事实,128位密钥通常远大于密码熵。这就是为什么好的加密方案不直接使用密码的原因(我们通常不赞成这样做,因为只有在密钥具有通过整个密钥的熵扩散的情况下,才对AES安全性进行检查)。取而代之的是,我们使用密码密钥派生功能(PKDF),该功能旨在使暴力破解密码更加困难(因为密码速度很慢),并将熵分散到整个密钥中。这给了我们更多的预测复杂性(因为PKDF速度很慢),但是它并不是弱密码的借口。


Axcrypt网站建议使用22个字符长的密码来实现128位安全。 22个字符的密码和随机生成的密钥一样安全吗?



蛮力密码需要多长时间不取决于密码的长度,而是取决于密码的复杂性(熵)。有关更多详细信息,我建议您查看“密码熵”一词。这里的示例。


密码的存在意味着攻击者将不再需要仅使用密码来处理AES和密钥


这不是真的。要检查密码是否正确,您需要使用PKDF(这需要时间),然后尝试对数据库进行解密以检查您获得的密钥是否正确。因此,您绝不能神奇地避免使用AES,但是没有什么可以阻止您永远猜测密码(毕竟,如果您具有正确的密码,我们希望您获取文件)。

附带说明:对文本文件进行解密并将其放在解密的磁盘上时,它是未加密的,并且在删除文本文件后通常会保留在那里。这是(原因之一)您应该使用专用密码管理器的原因。当然,您应该使用正确的密码。

#3 楼

简短的答案是,这取决于您如何选择密码,以及取决于软件如何从密码中获取加密密钥。

您已经正确指出,AES几乎从来不是最弱的链接。您的加密系统。到目前为止,没有人发现(或至少已发布)以任何一种比通过蛮力尝试所有可能的AES密钥更快的方式来破坏AES本身的方法。对于AES-128密钥而言,这样做远远超出了人类的承受能力。至少使用传统的计算技术,强行强制使用AES-256密钥*,应该远远超出了仅限于单星系统的任何文明的手段。

另一方面,猜测密码可以比这容易得多。究竟有多容易,取决于您选择密码的方式。如果您的密码恰好是123456passwordqwertyletmeinabc123或在某些最常见密码列表上找到的任何其他密码,则根本不需要任何时间。即使您说出一个晦涩的单词并将其与一些数字和标点符号混合使用,也有密码破解工具,例如John Ripper,可以非常快速地尝试所有类似的组合。

另一方面,实际上并不难想出像随机AES密钥一样难于猜测的密码(或更恰当地说,是密码短语)。例如,一个10字的随机Diceware密码短语具有略高于129位的熵,因此其蛮力破解的强度是AES-128密钥的两倍。

当然,一个10字的随机密码短语需要需要一点点的记忆,但没有您想的那么多。这是我刚刚生成的(使用/dev/urandom和Perl脚本,因为我没有碰到实际的骰子):paso stew glans statue north max admix gloat frau betsy。我敢打赌,如果您真的想要,您可以记住。**

实际上,对于大多数目的来说,即使是较短的密码短语也应足够。 6字的Diceware密码短语具有大约77.5位的熵,尽管强行使用它可能会在NSA的范围之内,例如,如果他们确实愿意,您的秘密对于国家安全来说绝对是至关重要的,这样才值得的努力。紧随您的信用卡号或您的Steam帐户之后的一些随机黑客几乎没有可用的此类资源。

此外,正如我前面提到的,加密软件还有多种方法可以减缓暴力破解密码的企图,方法是使用故意缓慢的密钥派生功能将密码转换为加密密钥。这被称为密钥扩展,任何使用密码的体面密码系统都应实现它。密码。在“技术细节”下,有一个指向此PDF的链接,该链接为:


密码派生算法
密码是UTF-8编码的,没有BOM。然后将其传递给PBKDF2-HMAC-SHA512密钥派生功能。产生64个字节的输出,然后减小到目标密钥大小。盐是32个字节,并且迭代设置为固定值1000。


因此,似乎他们使用的PBKDF2的迭代计数为1000,至少……总比没有好。与仅使用SHA-512直接哈希密码相比,经过1000次迭代后,暴力密码猜测攻击的速度基本降低了1000倍。因此,例如,如果攻击者可以在一秒内破解您的密码而无需进行迭代(很可能,如果它恰巧是1,000,000个最常见的密码之一或其中的一些简单变体),那么他们将拥有该密码花了将近20分钟才能破解它。或者换一种方式来看,将暴力攻击的速度减慢1000倍,大约等于在Diceware密码短语中增加了一个单词。

,好的现代加密软件可以使迭代计数可调,并且(对于桌面使用)默认至少为1,000,000,000左右。这几乎等同于在Diceware密码短语中添加三个单词,或将一秒钟的攻击速度降低到30年。这也与典型的现代CPU在不到一秒钟的时间内运行的哈希迭代次数有关。它的设计不仅速度慢,而且要消耗大量内存,因此很难在大规模并行密码破解硬件上实现。但是,此类功能仅在最近几年才真正流行。

使用精心选择的密码,可能要借助良好的密钥拉伸KDF来帮助,实际上有可能确保您的密码获得也不是您密码系统中最薄弱的环节。当然,实际上,这并不意味着该系统将是坚不可摧的。只是意味着其他东西将是最弱的链接。


*)后量子安全性是与AES-128相比更喜欢AES-256的一个潜在有效原因。如果有效率的通用量子计算机可用,则可以使用Grover算法在$ O(\ sqrt n)$时间内搜索$ n $元素密钥空间。这可能会破坏AES-128,但AES-256仍应至少与像AES-128对抗非量子暴力攻击一样安全地抵御这种量子攻击。

**)一般的记忆技巧(不只是密码!):1)不要将密码短语中的单词视为单词,请考虑一下它们会提醒您的内容; 2)不要试图分别记住每个单词,而应将心理意象与连续单词的每对或三联词关联起来,以便每个单词都能使您想起下一个单词; 3)使用您能想到的任何助记符-它们越怪异或越尴尬,它们的效果就越好; 4)一旦您认为完整的短语已经记下来,请等待15分钟,然后尝试再次调用它;记下笔记,以防您忘记。然后等待一个小时,看看您是否还记得它;然后一天;再过一天;依此类推,直到它牢牢地保存在您的长期记忆中。

#4 楼


对吗?使用密码对AES加密文件完全没有意义吗?


我想说的是您是在反向看。更好的问题是:“使用AES加密受密码保护的文件是否完全没有意义?”然后答案是明确的否定的,因为AES是一种广泛使用的,久经考验的算法,它使我们确信该部分不会变得很弱。

后一部分与什么有关安全人员称其为弱链接属性:安全系统的安全性与其最弱的链接相同。重新定义上面的内容,使用强大的算法保护数据的意义并不在于它们足以保证实践中的安全性,而是在于它们使我们确信,如果系统出现故障,它将位于其他地方,因此我们可以集中精力我们在那里的防御努力。


基于密码的安全性恰恰是您所担心的弱点。它的优点是易于使用。安全性的目标不是建议用户部署最大安全的解决方案,而是要平衡安全性和可用性,以使用户实际上可以在实践中获得足够的安全性。在更广泛的角度来看,基于密码的加密如何发挥作用当然是一个难题。