网络安全:加密算法

说到数据加密,最开始的起源是来自于英国的一次反叛,玛丽女王因为使用了低级的加密手法使得反叛的信息暴露而被处死。

003_001.jpg

而在计算机网络中,加密一般就是使用几种不同的技法,比如公钥私钥加密。

在电脑里,所有资料都是0和1的比特值阵列,完全可以通过数字的运算加密数据,常见的加密方式是RSA,这就是纯数学的东西,理解一下就是存在一个钥匙(理解成隧道),数据通过这个隧道之后就变成了加密过后的乱码,而隧道不一样,加密出来的东西也不一样,而让这个乱码再从隧道走回来,就能恢复成我们想要的东西。

对称加密

只有一个钥匙,就是公钥,数据加密和解密都用同一把钥匙

非对称加密

有一把私钥和公钥,必须配合使用才能加密解密,要么是私钥加密公钥解密,要么是公钥加密私钥解密

DH算法加密

两个人ALice和Bob,先选一个prime number和一个base g,然后Alice选一个a<p-1,Bob选一个b<p-1,分别计算 A = g^a mod p, B = g^b mod p。两个人交换数据,然后就能算出来私钥, K = (B)^a mod p , K = (A)^b mod p.

然后我们放在实际的应用里,在网络里,如果A给B发消息,需要提前传出自己的公钥或者私钥,倘若此时中间有一个人同时能听到两个人的消息,实际上他们说什么加密的信息,这个中间人都能解开,甚至包括DH算法。

而且这个人甚至还能代替A跟B聊天。

003_002.jpg

那你可能就想了,我让A和B约定一个密码,每次说完验证这个密码就可以,然而道高一尺魔高一丈,中间人可以记录这个密码实现replay攻击。

003_003.jpg

那么如何解决replay攻击呢?

我就使用一个随机的code,先发给A,然后让A用自己的私钥加密,传给我后我再用公钥解密,就能防止replay攻击。这个随机的code一生只用一次,叫nonce。

003_004.jpg

但是,如果有个人给你发消息声称他是A,你如何判断真假呢?

这时你就需要Digital Signature了。

如何做呢?

比如,我要发一个m信息给B,我就使用我自己的私钥加密m,然后把(m,私钥(m))发给B。

等到B收到后,使用我的公钥解密 第二个东西,看看和第一个东西一样不一样,如果一样,说明

  1. nonforgeable 不可以被伪造
  2. non-repudiation 不可以否认
  3. integrity:完整性

我特意标出来了 nonforgeable,其实这个是可以被伪造的,但是伪造之后的信息会成为乱码。

003_005.jpg

如何破局?

用哈希函数再加密一次!

003_006.png

PKI(Public Key Infrastructure)

我还是觉得传公钥不是很方便,如果在现实社会中,我只需要摆上我的身份证就能证明我是我了,那么效仿这个身份证系统,也有一个公钥系统,你只需要去CA注册拿到一个CA颁发的certificate,CA会用自己的private key加密,就成为了你想要的证书,后面,你只需要用CA的public key解密,看两个是否一致就能解决认证的问题。

参考HTTPS

003_007.jpg


网络安全:加密算法
https://yiyuwang.be/2022/01/17/2022-01-17-458688793/
作者
StevenWong
发布于
2022年1月17日
许可协议