计算机安全算法




1.数据传输中的四个问题

  • A 向 B 发送的消息,中间可能被 X 偷看,这就是 “窃听”。
  • A 向 B 发送消息,这个 B 可能是 X 冒充的,这个就是“假冒”。
  • 即便是 B 确实收到 A 的消息,但是这个消息也有可能在中途被 X 更改,这个问题就叫做“篡改”。
  • B 从 A 那里得到了消息,但是作为消息发送者的 A 可能对 B 抱有恶意,并时候声称这不是我发的消息,这就是 “事后否认”。

2.应对这 4 个问题

问题 解决方法
窃听 加密
假冒 消息认证码 or 数字签名
篡改 消息认证码 or 数字签名
事后否认 数字签名


3.哈希函数

哈希函数可以把给定的数据转换成固定长度的无规律数值。转换后的无规律数值可以作为
数据摘要应用于各种各样的场景。

哈希函数的六个特征

  • 是输出的哈希值数据长度不变。
  • 是如果输入的数据相同,那么输出的哈希值也必定相同
  • 输入相似的数据并不会导致输出的哈希值也相似。
  • 是即使输入的两个数据完全不同,输出的哈希值也有可能是相同的,虽然出现这种情况的概率比较低。这种情况叫作“哈希冲突”。
  • 不可能从哈希值反向推算出原本的数据。输入和输出不可逆这一点和加密有很大不同。
  • 求哈希值的计算相对容易。

注意,哈希和加密是不一样的,最显著的区别是不可逆。

Hash 算法中 SHa-1, Sha-2 是代表性的算法,其中 SHA-2 应用最广泛



4.共享密钥和公开密钥

加密数据的方法分为两种:

  • 共享加密(对称加密)
  • 公开加密(非对称加密)

对称加密中遇到的问题,就是 密钥 在传送的过程中,也有可能被窃听,但是非对称加密不存在这个问题。

如何把密钥安全的送出去,这就是 “ 密钥分配问题 ”。要想解决这个问题,就要使用 (1).密钥交换协议 和(2).公开密钥加密两种方法

非对称加密:由接收方 B 来生成公开密钥和私有密钥,并将共有密钥发送给 A 实现共有密钥加密的算法中,最广泛的是 RSA 算法。

非对称加密存在的问题
  • 有可能有个 X ,通过中途替换公开密钥来窃听数据,这种攻击方法称为 “中间人攻击”。
  • 公开加密和解密都比较耗时,所以这种方法不适用于持续发送零碎数据的情况。

应对这两个的方法

  • 为了应对第一个问题,就要使用“数字证书”。
  • 解决问题2,要用到混合加密(密文用对称加密,密钥用非对称加密)。

5.迪菲 - 赫尔曼密钥交换

迪菲 - 赫尔曼(Diffie-Hellman)密钥交换是一种可以在通信双方之间安全交换密钥的方法。这种方法通过将双方共有的秘密数值隐藏在公开数值相关的运算中,来实现双方之间密钥的安全交换。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述



6.消息认证码

消息认证码可以实现“认证”和“检测篡改”这两个功能。密文的内容在传输过程中可能会被篡改,这会导致解密后的内容发生变化,从而产生误会。消息认证码就是可以预防这种情况发生的机制。

假设A发送给B的密文在通信过程中被X恶意篡改了,而B收到密文后没有意识到这个问题。

应对这个问题,就要使用消息认证码:
我们可以把MAC想象成是由密钥和密文组成的字符串的“哈希值”。计算MAC的算法有HMAC、OMAC、CMAC等。目前,HMAC的应用最为广泛。


7.数字签名

数字签名不仅可以实现消息认证码的认证和检测篡改功能,还可以预防事后否认问题的发生。由于在消息认证码中使用的是共享密钥加密,所以持有密钥的收信人也有可能是消息的发送者,这样是无法预防事后否认行为的。而数字签名是只有发信人才能生成的,因此使用它就可以确定谁是消息的发送者了。

接收者只能验证签名的正确性,但无法生成数字签名。

签名使用的是公开密钥加密。他和非对称加密相反,非得对称加密中的公钥和私钥,由接收者生成,而数字签名中的加密由发送者生成,并用私钥要加密,用公钥解密。

在公开密钥加密中,用公开密钥加密的数据都可以用私有密钥还原。而本节讲解的数字签名利用的是用私有密钥加密的数据,用公开密钥解密后就能还原这一性质。也就是说,即使密钥的使用顺序不同,运行结果也都是一样的。并不是所有的公开密钥加密都具有这个性质,不过 RSA 加密算法是可以的


8.数字证书

“公开密钥加密”和“数字签名”无法保证公开密钥确实来自信息的发送者。因此,就算公开密钥被第三者恶意替换,接收方也不会注意到。不过,如果使用本节讲解的数字证书,就能保证公开密钥的正确性。



猜你喜欢

转载自blog.csdn.net/zhaozhao236/article/details/112980619