分层加密比长密码更安全吗?

信息安全 加密 gnupg
2021-08-08 16:45:40

这个问题中的评论讨论了多层加密的附加安全性。似乎存在一些分歧,我认为一个适当的问题在这里会有所帮助。

因此,为了提供一些常见的背景,请考虑以下两种情况:

  1. 我将对称加密应用于给定文件,如下所示:

    gpg --symmetric --cipher-algo AES256 my_file.txt
    

    我在其中添加了密码“mydogisamazing”

  2. 我对给定文件应用了四层加密,如下所示:

    gpg --symmetric --cipher-algo AES256 my_file.txt
    gpg --symmetric --cipher-algo AES256 my_file.txt.gpg
    gpg --symmetric --cipher-algo AES256 my_file.txt.gpg.gpg
    gpg --symmetric --cipher-algo AES256 my_file.txt.gpg.gpg.gpg
    

    其中提供给每个人的密码分别是:“amazing”“is”“dog”“my”(因此,当我解密所有层时,我输入了“my”“dog”“is”“amazing”)

选项 2 是否比选项 1 更安全?对加密安全几乎一无所知,在我看来是这样,因为任何想要闯入的人都必须运行一些密码算法四次,而在选项 1 中,算法只需要运行一次。如果chiper-algo使用不同的而不是相同的呢?

总而言之,对我来说,答案似乎也很明显取决于密码的性质。例如,如果我有 15 层加密,而每一层的密码只有一个字母,那么破解密码似乎“微不足道”。

更新:作为对评论的回应,我强调上面的示例试图呈现一个明显的“等效”案例,即“更短的密码 + 更多层”与“更长的密码 + 更少的层”。对我来说似乎很明显(可能是错误的)仅仅添加更多相同复杂性的层只会增加加密的安全性(仅仅需要更长的时间来破解密码)。因此,我强调不同长度的密码。

4个回答

选项 1 更安全。在选项 2 中,我们可以分别猜测每个单词。当我们猜测“amazing”时,我们确认这个词是正确的,我们可以继续第二个词。在选项 1 中,我们必须同时猜测所有四个单词。

您可能认为一个 GPG 提供了一些安全性,而四个 GPG 提供了四倍的安全性,但事实并非如此。GPG 提供几乎完全的安全性,并且多次应用它并不能提高安全性。

有多次应用加密的用途,例如在签名和加密时,或者在为多方加密时。但是,对事物进行多次加密通常不会使它们的安全性提高几倍。

这不会增加安全性,但可以更轻松地一次猜测一个单词的密码(N⁴vs. N+N+N+N,其中 N 是单词列表的符号数)。即使您使用 PGP 将文件或消息加密给多个收件人,有效负载也只会使用对称加密加密一次,然后为每个收件人单独加密密钥。这样,每个收件人都可以平等地访问有效负载,而不会增加消息大小。

您对使用分层加密的建议可能在某些情况下有用,但所有密码本身都应该很强大。

  • 您必须使用对称加密将文件发送给某人,但您没有可信赖的密钥交换通道。您可以使用电子邮件发送一层密码,使用 SMS 发送第二层密码,使用邮件发送第三层密码。这些中的任何一个都可能被盗,但要全部窃取它们要困难得多。

  • 你有一组你不能见面的人的信息,但没有人应该比其他人更早知道。您将所有包含信息的加密文件发送给他们,但每个人的密码不同。现在他们需要在一起才能揭示内容。这是将遗产保留为比特币钱包的公平方式!

  • 洋葱路由(即 Tor 网络)中,消息被包裹在多层加密中。每个中间路由器都有一个用于解密一层的密钥——就像剥洋葱一样。路由数据包的节点不知道之前有多少层以及剩下多少层。在解密自己的层之前,它甚至不知道将其转发到哪里。Tor 网络不使用密码,而是使用非对称密钥,即提供公钥基础设施的目录节点。

想象一部好莱坞电影,他们正在破解密码或安全码,所有旋转数字都在精美的 UI 上,他们有精英黑客一次破解一个数字,好人必须努力在他们破解最后一个数字之前炸毁黑客的计算机或其他东西。当然,在现实生活中并非如此——对于一个相当安全的系统,你基本上要么知道自己有正确的密码,要么知道自己没有正确的密码——没有办法查看是否有密码以任何方式“关闭”。

你的建议是让你的安全系统像好莱坞那样工作。攻击者将能够对您的加密进行简单的字典攻击,并且知道他们已经成功地立即解密了第一层。然后他们可以简单地重复这四次来恢复文件。相比之下,运行微不足道的字典攻击不会发现您的“mydogisamazing”密码,并且在他们的攻击中出现“my”一词时绝对没有迹象表明这与最终密码“接近”。

其他人所说的另一种观点(猜测单个单词 4 次比一次猜测 4 个单词的组合要便宜得多):

在密码学中,有完全开放的算法和完全封闭的秘密的概念。只要秘密保持(原文如此!)秘密,攻击者是否对算法一无所知都无关紧要。这与“默默无闻的安全”相反,而且很好。这意味着您可以在不损害任何东西的情况下将算法提交给全世界的审查(从字面上看,在像 AES 这样的流行方案中)。

算法“公正”需要是不可破解的;您需要说服自己,既没有算法也没有暴力破解方法。如果你能得出这样的结论,那你就完了,只需要关心你的秘密。你和我可能无法在这种程度上分析 AES,但我们可以决定,让它成为一个开放/公共算法,并大量接触许多可能“优秀”的密码分析家,这对我们来说足够安全。

所以。假设你有这样一个算法。根据定义,一旦你有了一个安全的密码,它就是 100% 的,完全安全的(直到有人发现算法中的漏洞或创建足够快的计算机——这两者当然都会定期发生,例如 MD5)。

之后你对算法所做的任何事情都需要一个庞大的密码学家社区进行非常彻底的检查。您提出的“重复 AES 4 次”算法是一个全新的东西。把它扔给社区(就像你在这里所做的那样),人们会立即发现弱点。这就是为什么你不会(作为外行人,或者作为某个公司里一个孤独的程序员)对算法胡闹,也永远不会因为默默无闻而为安全性而烦恼。

在这种特殊情况下:如果应用 AES 4 次会提高安全性,那么 AES已经这样做了与该领域的复杂性相比,这将是一个微不足道的变化。