据说,凯撒为了与他的将军们在战场上交换秘密信息,曾经把他的使者剃光头,并将信息写在他们的头皮上。然后他会等几个月让他们的头发长回来,然后把他们送到目的地。只有他信任的将军会知道这种交换信息的方法,从而安全地传递他的命令(尽管晚了几个月)。
这个不切实际且相当愚蠢的示例描述了密码学的全部内容。密码学是保护通信安全的科学。该术语取自希腊语kryptós (“隐藏的、秘密的”)和lógos (“词”)。从本质上讲,它是关于“隐藏的话”。它只是网络安全科学的一个支柱,但却是一个重要的支柱。该支柱的基础是密码学的细分:密码学和密码分析。两者几乎可以看作是互补的。密码学是将通信转换为窃听者无法读取的形式的实践,而密码分析是试图通过非预期的接收者解开这些转换的消息的实践。
正是在这里,在这个支柱的基础上,一个问题的证据可能导致网络安全的崩溃。
所以,如果你愿意,请进入万神殿,这座网络安全的神殿,让我引导你到科林斯柱子开始出现裂缝的地方。
有许多不同的算法旨在保证消息的安全。我将告诉你一些关于其中一些系统的信息,以便这些算法的基础变得清晰。
如果你读过任何关于密码学的东西,你很可能会遇到一个叫做“凯撒密码”的概念。这是用于保护消息的方法的另一个示例。它也归功于凯撒,尽管这不涉及信使的锁(双关语)以保证消息的安全。相反,这个密码引入了一个重要的概念,密码算法的很大一部分都基于:模块化算术。
我知道我知道。听起来很可怕,对吧?如果我告诉你,它是如此简单,以至于你每天都在使用它呢?看,你的时钟也是基于模运算的。当您试图计算如果您必须在 06:00 起床时您将获得多少睡眠时,因为您将在 23:00 完成最后期限,您知道不要计算超过 24:00 .结果总是小于 24:00。您实际上是在计算模 24。这是模算术,它广泛用于密码学。然而,即使在它的简单性上,模算术也有许多不是立即显而易见的秘密。许多密码算法依赖于这些秘密。
凯撒密码是对称密码。这意味着双方使用相同的密钥。假设密钥是 3。发送者将他的消息中的每个字母移动 3。这称为加密。接收者需要知道密钥,然后将每个字母向后移动 3,获得原始消息。这称为解密。将此与秃头信使方法进行比较。加密是让信使的头发长在消息上,解密是让信使剃光头。
现在,凯撒密码非常安全吗?嗯,不是真的。任何人都可以轻松尝试所有不同的密钥,总共有 26 个,并找到正确的一个来解开信息。这称为蛮力攻击。虽然密码不是很安全,但它确实遵守了凯撒的秃头信使不遵守的重要原则。 Kerckhoffs 原则指出:
“密码不需要保密,落入敌人手中也不成问题。”
换句话说,该原则规定只有密钥才能保密。该方法可以公开,但没有密钥,消息应该保持安全。
如果凯撒之前的光头信使被敌人拦截,而拦截者知道了凯撒的手段,那可怜的信使马上又会被剃光头,露出头皮上的信息。然而,使用凯撒的密码,即使拦截器知道加密方法,他仍然需要尝试 26 个不同的密钥才能发现消息。
凯撒密码是现存最简单的密码之一,但它的简单性很好地展示了模运算的各个方面。其他常见的对称密码系统是 DES、3DES 和 AES。它们本质上与凯撒的密码做同样的事情,尽管方式更复杂,更难暴力破解。如果您想了解更多关于这些系统的信息,我强烈建议您阅读AES Comic 。
让我们介绍另一个重要的概念。非对称加密(或公钥加密)。不同之处在于,双方不是拥有相同的密钥,而是拥有自己的公钥和私钥。
在我们深入研究 RSA 之前,这里有一个关于它的很酷的花絮。当 Ron Rivest、Adi Shamir 和 Leonard Adleman 发明 RSA 时,作为美国军火管制的一部分,他们将算法甚至其描述导出是非法的。 RSA 被认为是如此强大,以至于它被保密为军事机密。作为言论自由抗议,他们穿着印有算法的 T 恤参加会议和会谈。
RSA 是最流行的公钥密码系统。这是一个超级酷的系统,完美地说明了许多现代密码学的基础。我们将在这里获得一些技术性,但请耐心等待。
算术基本定理指出,任何正数都可以以一种方式表示为一个或多个素数的乘积。例如,数字 77 可以用 7(素数)和 11(素数)相乘来表示。除了改变素数的顺序之外,没有其他方法可以用素数表示 77。在我解释 RSA 时请记住这一点。
在发送消息之前,我们需要进行一些设置。比如说,Bob 想向 Alice 发送一条消息,并且有一个叫 Eve 的窃听者。 Alice 作为接收者,选择两个大素数。她将这两个数字相乘得到结果 m,即模数。在我们的示例中,我们将使其保持简单和小巧。 Alice 选择 7 和 11 作为素数,得到模数 77。她公布了模数 77 和一些选定的加密指数 e。模数 77 和加密指数 e 的组合称为她的公钥。
使用 Alice 的公钥,Bob 可以加密他想要发送的消息。在这种情况下,消息是一个数字 x。 RSA 中的加密是通过 x^e mod m 完成的。这会产生密文 y 并将其发送给 Alice。
现在,Alice 可以用质因数 7 和 11 做一些魔术,这会产生一条称为 d(用于解密)的信息。这是爱丽丝的秘密密钥。 Alice 现在要做的就是获取 y^d,这将导致 Bob 的原始消息 x。
唷,这是很多,但最困难的部分已经结束了!现在,请注意只有 Alice 知道素因数 7 和 11。这意味着只有 Alice 可以做这个魔术来获取信息 d。但如果你很敏锐,你会在这里不同意我的观点。你会说:“既然 77 已经发布并且每个人都可以访问它,那么 Eve 可以很容易地计算出 77 = 7*11 并且还可以使用魔术来获得 d,从而她可以获得原始消息 x”。我在这里同意你的看法。然后我会告诉你:“数字 30142741 的质数是什么”。你可能无法告诉我答案。我可以很容易地告诉你答案,因为我所做的只是取两个素数并将它们相乘得到 30142741。如果我告诉你这两个数字,你可以很容易地验证乘积是 30142741。确实,RSA依靠夏娃(或您)无法找到这两个素数。在这种情况下,素数是 6037 和 4993。看看素数分解有多难,但验证正确素数有多容易?
而已!我们终于在柱子的底部了。你看到裂缝了吗?可能不是。让我澄清一下。
因此,我们应用于消息(加密)的转换需要是可逆的,以便接收者能够解密它。接收者可以反转消息,因为她拥有一些额外的信息。同时,任何不拥有该信息的拦截器将无法解密该消息。例如,在 RSA 中,拦截器需要找到模数的两个主要因子。 Finding the two prime factors of a small number like 77 is, of course, easy, but prime factorization becomes much harder when a large number is chosen.验证两个素数是否是模的因子总是相对容易的,因为您只需进行乘法运算。
如果素数分解很容易,或者如果有一种算法可以相对快速地解决问题,那么 RSA 就会过时。它依赖于难以解决但易于验证的素数分解。我们可以区分两组问题。有些问题我们知道一种快速找到答案的方法,例如乘法或平方。这组被称为“P 级”。另一类“NP”是一组问题,没有已知的方法可以快速找到答案,但是当你有一些信息时,答案很容易验证。素数分解属于此类。
但是,如果有一种方法可以轻松解决素数分解问题呢?这意味着素数分解属于 P 类。事实上,也许我们可以证明所有的 NP 问题实际上都是 P 问题。结论是 P = NP。
这个结论将对密码学产生灾难性的后果。正如我们所见,RSA 依赖于难以解决的素数分解。但是 RSA 只是依赖于 NP 问题的众多算法之一,而素数分解只是 NP 问题的一个例子。用于您的金融交易、电子邮件通信等的其他对称和非对称密码将被淘汰。
比特币和其他加密货币也将遭受严重后果,因为比特币依赖于加密散列,特别是 SHA-256 散列算法。对于要在区块链中接受的新块,这个新块需要包含工作量证明。简而言之,证明对于网络中的任何节点来说都很容易验证,但生成正确的数字却非常困难。
另一方面,P = NP 的证明可能对其他领域产生积极影响。许多数学问题仍然难以解决。想象一下它可能对数学产生的影响!
P ≠ NP 的证明意味着我们的密码算法是安全的,并且本文的标题只是点击诱饵。但至少我给了你赢得一百万美元的机会!这是克莱数学研究所将奖励给第一个解决“P vs NP”问题的人。
所以,试一试吧!也许你可能是打破现代密码学的人,让我们重新使用秃头信使进行日常交流。
也在这里发布