嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content
shopping_basket 购物车 0
登录

工业安全第2部分:关于非对称密钥

第1部分复习:密钥和加密

对称密钥与非对称密钥

我们需要先谈谈密码学中非凡的概念。这个概念是指,使用不同的密钥来加密和解密消息。因此,它被称为非对称密码术。它解决了以下问题。这是一个爱情故事:

asymmetric_key1_190472c397a5683166dbeff27619e5d5d08e6fcb.png

皮特爱海伦,海伦也爱皮特。但是海伦距离皮特300公里。因此,她给皮特发出情书。即使别人读到她写的内容,她也不会感到困扰,因为爱皮特并没有错。但是她不希望苏珊给皮特发信并且假装自己是海伦。苏珊也爱皮特。但是,只要皮特与海伦相爱,她就没有机会。因此,苏珊计划假装成海伦给皮特发一封信,并说她将与皮特分手。皮特希望确保自称是海伦的消息确实来自海伦本人,并且没有人可以操纵它们。

苏珊向皮特发送了一份密钥,以解密被她加密的字母。这份密钥是她自己手上密钥的副本。这两份密钥是相同的,因此称为“对称”(我将它们标记为sKpriv =对称私钥)。因此,皮特可以确定,如果他的密钥能解密消息,那它肯定是用这份密钥加密的。但是由于数字密钥不是实体硬件而是数字。并且苏珊确实留意了海伦和皮特之间的邮件流量。因此,苏珊在给皮特发信过程中,苏珊可能用密钥打开信并复制了这个数字。现在,她可以读取所有加密的消息(不会被海伦或皮特发现),更重要的是,她还可以写信并使用苏珊和皮特的密钥对其进行加密。可怜的海伦,可怜的皮特……

asymmetric_key2_9296113dcd3ccd0986b87a22debe82ed3b99cbd2.png

但是这就出现了一份非对称密钥:海伦生成两份不相同的密钥。使用第一份密钥,她可以加密消息,使用第二份密钥,其他人可以解密消息。反之亦然。海伦将第二份密钥发给皮特。由于任何人都可以使用此密钥来读信,因此这种密钥称为“公钥”(aKpub)。她确保另一份密钥的私有和保密性(aKpriv)。因此,此密钥称为“私钥”。现在,我们假设苏珊复制了公钥。她又这样做了吗?嗯,不完全是。她现在唯一能做的就是读取海伦给皮特的信息,因为她复制的密钥仅适合此过程。如果她尝试使用此密钥加密信,则皮特将无法使用其公共密钥副本解密这封信。

asymmetric_key3_0aa1c02f8c9bff6c01e1c18275f12d87404b7400.png

数学上不对称的加密是通过“单向函数”完成的。 这类函数很容易在一个方向上求解,但是反函数是“非常困难”的数学任务。

在我举例之前,我需要解释一下模块化算法。使用C语言对8位CPU进行编程的人都知道,在字节算术中将200+100时会出现什么情况。由于8位字节最多只能计数255,因此不会得到300。某些系统会提醒错误,但通常您只会得到所谓的“整数溢出”:在加56上之后,该字节再次归零,结果是从100中减去56,得到44。您可以使用“模量”函数表达这种整数溢出(板载Windows 10计算器确实在科学模式中提供此函数):

300 mod 255 = 44

我来解释一下

32 mod 14 = 4

对于不熟悉位和字节操作编程的读者,我用另一种方式来解释:

modulo_arithmetics_156c0444c69868cf674554b9174ddc9ae1d326fa.png

假设有一个带有14个滴答声的时钟(而不是常见的12个滴答声)。您从刻度1开始圈出总共32个标记。在此过程结束时,您将到达刻度号4。如需要,还可以定义X = A mod B等于除法A/B的余数。

回到我们的单向函数。我们举一个这类函数的简单例子:

X = YA

可以直接转化为

Y = X1/A

任何便携式计算器都可以计算出该方程式的结果。所以它肯定不是单向的。

但是要逆转这个函数,您将面临不小的困难

X = YA mod B

如果您的非编码信息 Y 是,例如 2,并且编码密钥A5,如果选择B等于14,那么得到的编码信息为

X = 32 mod 14 = 4

现在,如果仅知道结果X、A和B(4、5、14),则尝试找出使用的Y值(未编码信息)。这不仅是一项艰巨的任务,而且您最终得出的还不止一个结果(例如,在我们的示例中,Y不仅可以是2,16也可以得出X=4。

用一种数学方法可以从X得出Y,我将详细描述。通过此过程,您需要找到一个与A和B对应的第三个关键参数C,以使您可以通过以下公式得出结果:

Y = XC mod B

在我们的示例中,C必须为11: 

411 mod 14 = 4,194,304 mod 14 = 2

这是(一种)非对称密钥的工作方式。在我们的示例中,您生成私钥A和公钥C(它们仅与已知的公钥B结合使用)。您可以使用密钥C对消息进行编码(根据上述等式)。其他人只能使用密钥A对其进行解码。如果您使用密钥A对消息进行编码,则接收方只能使用其密钥C对消息进行解码。请将密钥生成视为许多库提供的黑箱函数。 

AES 和 RSA

您可能听说过AES(“高级加密标准”),它是一种对称密码算法。如果您想深入了解此类算法的数学知识并了解其安全级别,请继续阅读Wikipedia文章“对称密钥算法”的相关链接。现在,您可以将算法看作一只黑箱,只需要知道密钥越长(即它包含的位数越多),加密就越安全。例如AES.256使用256位密钥,并且(目前)业界对它的安全性非常有信心。现代超级计算机需要比我们的时代更长的时间来破解256位密钥加密的消息。大约需要2254 (大约3后面有76个零),才能找到正确的密钥。

最常用的非对称密钥算法称为“ RSA”(字母代表三个发明者的名字)。与对称算法相比,非对称密钥使用更大的密钥,并且需要更多的计算能力。

RSA通常与“OAEP”结合使用,以使其具备更强大的抵御攻击的能力。 OAEP向RSA添加一个随机因子。因此,它将算法从确定性变为概率性。

因为这些随机因子在本系列后面的实际操作部分也会涉及到,所以我想说明一下它的必要性:

我们继续上面的示例。这次,皮特使用他的公钥向海伦发送秘密消息。而这次他希望苏珊或其他任何人阅读。这是可能的,因为他可以用他的公钥加密消息。只有私钥的拥有者(海伦)才能解密此消息。请注意,这通常用于非对称密钥:因为公钥是“公共”交换的,所以发送者无法发送秘密消息(任何人都可以读取它们,因为解密是使用公共已知的密钥完成的)。接收者只能确定他收到的消息的真实性。但是,任何公钥的拥有者都可以向私钥的所有者发送秘密消息,只有他才能解密。我们在学到证书和签名之后,您将了解这两种情况的必要性。

known-plaintext_attack_4099dc4908823db0778288b2f88ab0758d630acb.png

苏珊制定了新计划:她发现,每当海伦问皮特“你爱我吗?”皮特就会发送三个不同的答案其中之一。因此,苏珊对已编码的可能消息和期望消息建立了一个库,所有这些都使用公钥完成。我们假设皮特是这些被简短编码的男性中的一员。苏珊收到的1000条消息中,可能有她所希望的一条。她现在正在监视皮特对海伦重复问题的答案,并将其与她的库进行比较。当她找到一个匹配项时,她便知道该消息的原始内容(称为“纯文本”)。这称为“选择明文攻击”。对于短消息和内容有限的情况,它特别有效。想象一下,如果皮特在邮件末尾添加一个定界符,然后添加一个随机数。这样,他将永远不会发送两条相同的消息。海伦能够将真实内容与随机内容分开,因为她知道分隔符。不过,苏珊永远不会得到与她的库相匹配的结果(随机部分太长,无法生成所有可能的组合)。

我们也将非对称算法简单地视为黑箱。同样,如果您热爱数学,请继续学习有关密码算法的优秀书籍。为了便于给您留下深刻印象,我仅引用Wikipedia中OAEP文章的介绍:

OAEP算法是Feistel网络的一种形式,它使用一对随机预言G和H在非对称加密之前处理明文。当与任何安全的陷门单向置换f{\displaystyle f}f组合时,此处理在随机预言模型中得到证明,从而导致组合方案在选择明文攻击(IND-CPA)下在语义上是安全的。当使用某些陷门置换(例如RSA)进行实施时,OAEP还被证明可以抵御选择密文攻击。OAEP可用于构建全有或全无的转换。“

相信我,那东西对我来说是胡说八道。对于“随机预言”,我更喜欢把这个奇迹当作一个对我而言完全有效的黑箱。(我知道,那些书呆子会发现使其在会议上看起来“不好”的可能性,因为破解密钥不再需要十亿年的时间,而只有数百万年的时间)。因此,如果您无法深入了解这些概念背后的算法,请不要感到羞愧。

在本系列的后面部分,我们将变得更加实用。将AES或RSA集成到程序代码中并不是一件大事,因为那里有许多库可以帮助您进行繁重的数学运算。“开放SSL”是其中之一,也是最常用的。

shutterstock_326046704_7a70bc11d49281eaf18a2f2cc7e24ae14e77de6a.jpg

第3部分:涵盖哈希和签名

Volker de Haas started electronics and computing with a KIM1 and machine language in the 70s. Then FORTRAN, PASCAL, BASIC, C, MUMPS. Developed complex digital circuits and analogue electronics for neuroscience labs (and his MD grade). Later: database engineering, C++, C#, industrial hard- and software developer (transport, automotive, automation). Designed and constructed the open-source PLC / IPC "Revolution Pi". Now offering advanced development and exceptional exhibits.
DesignSpark Electrical Logolinkedin