为什么通过默默无闻的安全性不是加密的好选择?

信息安全 加密 朦胧
2021-08-18 15:38:34

我觉得必须有一个简单的解释,但我一直在寻找任何有益的答案。

举个例子,我的名字是 Alice,我最好的朋友 Bob,我们想要安全地交流。

如果我编写一个程序,通过几十个过滤器将我的文本隐藏起来,并且可以成功地逆转这个过程,假设我随后将程序写在一张纸上,并将我的纸交给 Bob 在沙漠中央,然后他在那里记住了它并烧掉它,怎么会有人破解我们的代码?

为了详细说明默默无闻,例如,我执行以下操作:

  • 获取我的原始字符串并将其转换为二进制
  • 从那里我将年份的最后一位数字添加到每个数字
  • 然后我把文字倒过来
  • 然后我每 3 个字符添加一个随机生成的字符
  • 依此类推,一直到我过滤掉了几十个晦涩难懂的东西。

如果没有程序或公式本身(或至少几年),为什么几乎不可能解密我们的消息?

旁注:我会完全理解为什么通过默默无闻的安全对于那些说“我只会使用奇怪的操作系统并且我会很安全因为谁知道奇怪的操作系统!”之类的话不起作用的人。我纯粹是询问有关来回发送加密消息的问题,如果被第三方拦截,由于其晦涩难懂而无法实际破解。

4个回答

不赞成通过默默无闻来依赖安全性的原因是,一旦算法被泄露或破坏,您就完全失去了通过默默无闻获得的所有安全性。因此,如果任何有权访问该算法的参与者离开了您的组织,或者您被黑客入侵,或者加密/解密程序的源代码(或可执行文件)以某种方式泄露/被盗,那么您就完全失去了您的所有安全性。算法晦涩难懂。

要想通过默默无闻重获安全,你必须想出一个全新的密码算法,让密码专家安全地分析新算法,并秘密地与需要通信的各方交换算法。

同时,在使用经过严格审查的标准密码算法时,我们将算法(您不介意有人窃取它)与在计算上无法通过暴力破解(例如,暴力破解 256 位对称如果地球上的每个质子/中子(全部 10 ^ 51 个)每人每秒尝试十亿个密钥,在一百万年的暴力破解中,你只有千分之一的机会打破它)。

只有密钥需要保密。如果您因攻击而丢失密钥或需要与新方安全地发送消息,则无需发明全新的算法。您只需要生成一个新密钥。

有了经过严格审查的公共算法,任何人都可以过来尝试分析它,看看是否有任何严重的漏洞。这不能用你的私有算法来完成,它通常比实现者想象的要弱得多。(例如,正如 Daniel 提到的,您描述的算法容易受到许多标准攻击,例如字母频率分析、分析文本中的句点、利用底层明文中的模式等)


此外,从可用性的角度来看,使用秘密算法要困难得多。对于与其他用户的每次交换,用户必须记住更多内容。当您找到某个 5 年前加密的文件或有人向您发送文件时,即使您仍然拥有密钥/密码,如果您知道它是在 CBC 模式下使用 AES256 加密的,那么解密会容易得多,因为文件元- 说明该信息的数据,而不是试图记住您可能与此特定个人一起使用的秘密自定义加密算法类型。如果用户在各种平台上工作,那么让您的自定义秘密加密算法在所有平台上完美运行会变得很麻烦。

如果您只发送一条短消息(一两句话),那么很难破解。但是,一旦您开始发送大量消息或频繁消息,使用语言字母频率等技术可能很容易破解。

例如,对于许多简单的加密技术,“a”总是会转换为相同的加密字母。结果,有了足够的文本,很容易根据频率找出哪些字母是哪些字母。

您甚至可以在不了解加密文本的公式的情况下执行此操作。即使似乎隐藏字母频率的密码仍然可以暴露它(例如,参见这个)。使用计算机,评估字母频率可以自动化并且非常快速地完成。

还有其他破解密码的方法;字母频率只是一个容易理解的例子。

看看这个问题,特别是这个答案你的问题几乎和我的一样,Thomas Pornin 一如既往地给出了这个问题的最佳答案。你最好去读一下。这是一段摘录:

“通过默默无闻的安全”是使用术语默默无闻的表达,而不是保密。密码学是关于通过保密来实现安全性这就是全部区别:密码可以是秘密的;算法充其量是晦涩难懂的一旦某个聪明人想到带一个隐喻的灯笼,默默无闻就被驱散了。保密更像是一个钢铁保险箱:要突破它,你需要更强大的工具。

使用密钥或使用秘密算法是一样的让我重复一遍:在众所周知的密码算法中使用密钥或使用您发明的特殊巧妙算法是相同的:两种方式都有一个可以用原始信息位来衡量的共享秘密。

所有密码方法都基于“模糊性”,基本上是对共享秘密的保护。基本上,它是关于保持共享秘密的秘密。密钥的保密性与它的随机性(它的熵)相关。它的随机性越小,我就越能猜出你的部分秘密。由于这些猜测的部分不再是秘密,我们可以说共享秘密是一些原始信息。

而且,从某种意义上说,您是完全正确的,只要您有足够长的预共享秘密,您就可以设计一种牢不可破的方法

但是,您不需要对算法过于复杂:如果您使用标准密钥加密并且您的密钥足够长(例如比消息长),那么很容易理解您的保护是完美的。提醒一下:简单的XOR 密码具有比消息更长的真正随机密钥是牢不可破的。但不要忘记以下几点:您需要一个足够长的预共享秘密(并且每次通信都需要一个新秘密)。

那么问题出在哪里?我们为什么不这样做呢?因为您的共享秘密在您每次使用时都会失效你最终会用完它。使用您的密钥会泄露其中的微妙部分:例如,查看生成算法的内容会给出一些微妙的提示。我们从你的算法中看到的越多,就会注意到越多的模式。

因此,在大多数实际情况下,我们喜欢从Alice 和 Bob 最初不共享秘密的点开始,或者至少这个秘密不足以覆盖他们的通信。请记住,在您的情况下,秘密就是算法,在标准情况下,它通常是密钥,我们称之为共享秘密

因此,在标准加密情况下,关注点转移到创建(更多)共享密钥因此,大部分精力都花在寻找方法来创建一些密钥,然后这将导致 Bob 和 Alice 受到理论和标准牢不可破的密码的保护:拥有足够长的秘密。

当今大多数加密通信都将以这种方式工作:即时创建共享密钥(通常在连续通信中以固定时间间隔),然后使用任何简单但完美的密码算法(例如 XOR 算法)用这把钥匙。Diffie Hellman就是其中一种算法。通常,第一部分是最复杂的,会占用大量的计算机能力,第二部分是微不足道的。

因此,困难的部分是拥有(或生成)足够的共享密钥来加密您的数据。