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

工业安全第3部分:关于哈希和签名

第一部分第二部分,我已经讨论过密码和密钥类型。在我们继续讨论非对称密码学之前,我需要解释另一个基本概念:

Hashing散列法

shutterstock_1436161268_1d15458ce3b4e3123ceb6561f0f0c61c1d20b416.jpg

如果您曾进行串行传输编程,则可能已经无意中使用了哈希。通过串行线路发送数据时,您要确保接收到的数据是发送的数据。EMI(电磁干扰)和其他干扰可能会在过程中改变位。即使丢失一个位,也可能会极大地改变消息并导致致命的后果。因此,为了保护消息免受环境干扰,您需要计算消息的一种校验和。仅仅将每个字节的位相加并将其总和作为额外的位进行发送,这就是所谓的“奇偶校验位”。这种快速的方法可检查通过串行线路传输的单个字节的完整性。我们可以通过硬件完成奇偶校验,而无需进行CPU计算。但这不是很安全;因为它只能用于确定该字节是否有1位偶数或奇数计数。如果两个位翻转,尽管字节不正确,但仍能得到正确的奇偶校验位。

parity_bit_0875dc0809e4e8f848c9c22e8288d9cd8c85a9bd.png

 

因此,才华横溢的工程师们发明了所谓的CRC(“循环冗余校验”),该校验传递校验值以验证已计算CRC值的字节。如果您想更多了解CRC,可通过以下链接进入在线CRC计算器。在该网页上,您还可以找到作者对如何实施CRC计算的解释。对于所有不喜欢数学的人,只需将CRC算法当作黑箱即可。

Hashing_e0fab5568931c0a6edd14154d8cffdac10daf756.png

这个黑箱是哈希计算器的示例。您可以将它看作“摘要算法”。它会消化消息,最后,您会得到一条更短的消息(对于CRC,只有一个值),可以完美地代表原始消息。最常用的哈希算法之一称为“ SHA”(安全哈希算法)。shutterstock_566442157_c9d328cfde980d46cd2761bcbc313f9ce56bab8d.jpg

我不知道牛粪堆是否各不相同,但是完美的哈希算法会避免不同的输入产生相同的输出结果(即“哈希碰撞”)。如果不同输入的数量大于可能的输出数量,那么这是不可能的。但是实际上,您永远无法拥有所有可能的输入。以一本大书为例。您无法找到1000个字母序列的所有可能组合。这样的字母组合的数量永远不会是N的最大值(提高到1000)(其中N是允许使用的字母数量)。它实际要少得多。因此,将一本书的所有1000个字母序列减少为代表序列唯一性的少量数字是完全可能的。这样的哈希算法始终是单行道。特定的消息将始终对应唯一的哈希。但是无法从哈希中计算消息。

shutterstock_596722127_f41f6d7f28e52a6fe0ffb5843bad4ce7eb2dd0de.jpg

我用一个非常直观的示例来说明这条原理:地球上没有两个人拥有相同的指纹。甚至同卵双胞胎的指纹也是不同的。因此,指纹有点像是个人的哈希。您可以通过比较个人指纹来检查其身份。另一方面,您却无法通过指纹来计算出与此指纹匹配的人的面部。指纹不包含其所属个人的完整数据。 

如果要检查接收到的消息与发送的消息是否相同,只需要求发送者也将哈希值与他的消息一起发送即可。收到他的消息及其哈希后,您可以接收消息并从中计算哈希。如果您计算出的哈希值与消息附带的哈希值相同,则可以确保发送的消息与您收到并检查的消息相同。当然,这并不能保护并避免有人将原始消息和原始哈希值替换为其他事实(以及相应的消息和哈希值)。在本系列的第4部分中,我将向您介绍实现这种保护机制的方法。下面,我们来看一下数字签名和证书。您可在评论部分提出问题。这种安全性问题是很难的,而且我知道,我们所有人都希望让事情运转起来,而不是用密码术来折磨我们的大脑。

数字签名

asymmetriy_keying4_37768455cf3bdf08129d2c86bb14624a135a0aa1.jpg

让我们回到非对称密码学。还记得第2部分中的爱情故事吗?通过使用非对称密钥,海伦的情书已经非常接近数字签名的概念。只有海伦才能使用她的私钥加密她的消息。并且皮特知道海伦向他发送了邮件,因为他可以使用从海伦那里收到的公钥解密该邮件。但请稍等:如果苏珊操纵加密的消息并将此操纵的消息发送给皮特,情况会怎么样?皮特能够解密那封信。他可能会得出一些奇怪的东西,甚至不是正确的词语。但是他不知道是海伦学了一种新语言,还是有人操纵了这封信。

数字签名必须证明消息的真实性

数字签名过程始终包括以下步骤:

  • 发件人生成非对称密钥对
  • 发件人使用其消息和私钥来生成签名
  • 发送者通过添加数字签名来“签署”他的消息,并将其发送给接收者
  • 接收者使用其公钥解密签名
  • 接收者验证签名是否与消息匹配

DSA(数字签名算法)方案定义了此过程,是一项全球标准。

使用哈希代替消息

还记得第2部分中的哈希吗?我还提到,非对称加密非常耗时耗能,因为当消息太长时,它需要巨大的计算能力。因此,在大多数签名过程中,发件人不会从完整的消息中生成签名,而是通常使用消息中较短的哈希值。然后,接收者使用其公钥对哈希进行解密。他还需要计算原始消息的哈希(使用相同的哈希算法),并通过比较两个哈希来验证真实性。由于理想的哈希就像指纹一样,它只能从原始消息中派生。

攻击签名

如果您能发现弱点,就可以称自己为安全专家:如果黑客在散列算法中找到查找碰撞的方法,那么他可以用碰撞消息(可产生相同的哈希)交换原始消息。请暂时忘记海伦和皮特的爱情故事。签名还用于其他情况(将在本系列的下一部分中进行说明)。在这种情况下,海伦会将文件A发送给巴克莱爵士。作为权威专家,他会阅读文件内容并证明文件真伪和内容的真实性。然后,他发给海伦用他的私钥加密的签名。海伦现在可以将文件A和签名一起发送给任何人。接收者将使用巴克莱爵士的公钥来验证签名以及文件A是否来自海伦且包含正确的信息。现在想象海伦是一名诈骗犯。在将文件A发送给巴克莱爵士之前,她成功地找到了与文件A拥有相同散列的文件B。她在获得证书后,将A换为B(包含虚假信息),并将它(与证书一起)发送给其他人。接收者无法检测到巴克莱爵士从未见过并同意文件B。他们认为他已经批准了B的真实性并签署了B。

因此,安全性需要使用散列算法,这使得黑客的设备难以发现哈希碰撞。

随机元素

还记得我曾解释为什么“选择明文攻击”是纯RSA概念的弱点吗? 幸运的是,现代签名过程确实使用随机元素来阻止这一漏洞和其他漏洞。

业界已经为签名定义了标准程序,例如DSA(或其“椭圆”曲线加密算法ECDSA,我将在后面解释)。它们都包含一个随机元素。但是随机元素的作用取决于它们的随机数生成器(“RNG”)。看起来似乎很容易,但是用软件创建一个“真”随机数是不可能的。因此,此类RNG称为PRNG(伪随机数生成器)。理想的方法是使用涉及自然界中随机过程(例如“随机噪声”)的硬件。这种设备称为TRNG(真随机数生成器)。

可信平台模块

您可能听说过“可信平台模块”(“TPM”)。TPM是一种能够执行多个安全程序的电子模块。其中一些需要TRNG。TPM的标准不仅定义其功能和接口,而且还定义了一些细节,例如其RNG规范。该规范为RNG的“熵源”命名示例: 热噪声或时钟抖动。

在第4部分中,我将向您展示如何在安全互联网协议中使用这些概念。我们将讨论证书和证书颁发机构。

现在继续第4部分:数字证书、证书颁发机构和椭圆曲线

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