linux系统中单向、对称和公钥等加密算法介绍

本文发布时间: 2019-Mar-21
TCP/IP协议在产生之初时,并没有考虑对传输的信息进行加密,我们在网络上传输信息时,都是以明文的形式传输的,比方说ftp,http,smtp,telnet等,也就是说,当两个人之间互相通信时,他们传输的信息是可以被其他人看到的。但随着网络的扩大,我们希望我在跟某个人通信时,我们之间的通信不被其他人看到,即使看到,我们传输的信息也是密文的。当我们在网络上互相通信时,如何保证机密性、数据完整性及实现身份验证呢?由此就产生了很多算法。这里我们主要介绍对称加密算法、单向加密算法和公钥加密算法。对称加密算法当两个用户在通信时,希望他们之间传输的信息不被其他人看到,仅能够让他们两个人看到,也就是说,我发送的是明文,希望通过某个算法转换成密文,然后再网络上传输。当到达对方时,对方也采用同样的算法方法以及双方事先协商好的密钥来解密密文。由此就产生了对称加密算法。对称加密是指通信双方使用同样的加密机制,并且使用相同的密钥,发送方使用密钥加密,接收方使用相同的密钥解密。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。现在我们来考虑这样一种情况,当某个用户与成千上百个通信时,如果采用对称加密算法进行通信,那这个用户为了同不同用户通信就需要为每个用户协商一个对称密钥,且还必须各不相同,如果相同,就无法保证数据机密性了。这个用户为了记住这成千上百的密钥,就不得不每天拿着密钥背啊背啊背的。那这真够痛苦的。这就使得密钥管理成为用户的负担。因此,对称加密算法虽然可解决数据机密性问题,但却没有办法解决密钥有效管理的问题举个例子,就好理解了。刚开始,A就和B和C通信,他们都使用对称加密算法,但密钥却不相同,A现在只需要记住与B和C通信时的密钥就行了。A与B通信时,A使用对称密钥将数据加密,然后把对称密钥和数据一起传输给B,不传输密钥B怎么知道密钥是什么呢,所以需要传输密钥。A与C通信时,也一样要这样。现在我们虽然保证了机密性,但我的密钥却在网上传输,如果哪个好事者截获该信息,就可以获得我们密钥,然后解密该信息了。好吧,这个问题我们先不考虑,继续往后看。现在,A交际面广,与好多人都要通信,这时候,A就需要与每个和他通信的人都建立一个密钥,A为了和每个人都通信就需要记住成千上万的密钥,这时候密钥管理就成了A最头疼的事。因此,虽然使用对称加密可以部分解决机密性的问题,但当一个用户与多个用户通信时,密钥管理就成为其负担了。好吧,那现在我不管机密性了,我只想让我们之间的传输信息不被修改就行了,谁看也就看吧。由此就产生了下面的算法。单向加密算法该算法对数据部分进行加密,然后提取数据特征码,并将特征码放到数据后边与数据一块传送。其特性包含:输入一样,输出必然相同。当我们的用户对同一份数据进行加密提取特征码时,不管你加密几次,也不管你在哪里加密,只要你加密的数据相同,提取到的特征码都是一样的。雪崩效应,即输入的微小改变,将会引起结果的巨大改变。当我们对一份数据加密并提取出特征码后,我们对其中哪怕是就修改一个字符,然后再加密提取其特征码,得到的结果与上次就完全不一样。定长输出:无论原始数据是多大,结果大小都是相同的。单向加密是对数据部分加密然后提取特征码,当我们指定好单向加密算法后,该算法输出的位数就一定了,不管数据多长,提取到的特征码都是定长的。不可逆:无法根据特征码还原原来的数据。就像我们提取人的指纹,不可能根据某个人的指纹还原回人一样。继续上边的例子:A和B在传输信息时,A使用单向加密算法对传输的数据进行加密,将加密后生成的特征码放在数据后边一块传给B,B在收到该数据后,也使用同样的加密算法,即单向加密算法对数据进行加密,生成特征码后与传输过来的特征码进行比较,如果两个特征码一样,证明数据没有被修改,否则就可以认为数据被修改了。单向加密存在另一个问题,比如,A传输的数据,在传输过程中,可能会被C截获,而A以为已成功传给了B。如果C对该数据进行修改,然后使用同样的加密算法计算好特征码与修改后的数据一起发给B,B收到后计算特征码发现与传过来的一样,认为没有没修改过,但此时B并不知道数据已被C截获且修改过,以为还是A发来的数据。那如何解决这个问题呢?我们知道在对称加密算法中,我们的密钥也需要在网络中传输,这是很不安全的,我如何实现协商密钥,且不被其他人发现呢?这就是密钥交换算法了。Diffie-Hellman协议(算法):密钥交换协议(算法),该算法可以协商生成密钥,实现密钥交换(Internet Key Exchange, IKE)。我们一起来看一下是如何实现的。A与B在通信时,A会生成一个大素数p和一个生成数g,然后自己在随机选择一个数x,该x仅自己知道,不在网络上传输,使用公式g^x%p,即取g的x次方,然后对p取余,将得到的结果和p、g一块传给B。即现在在网络上传输的有三个数p、g、g^x%p。B收到这三个数后,在本地也随机选择一个数y,也使用公式g^y%p得到一个数发给A,B收到这三个数后,取(g^x%p)^y,即取g^x%p整体的y次方。同样,当A收到B发来的g^y%p后,也取(g^y%p)^x次方。用下面的方式描述过程。A: x,随机选择一个数x,该数字仅A知道,其他任何人都不知道,B也不知道B: y,随机选择一个数y,该数字仅B知道,其他任何人都不知道,A也不知道A: 计算g^x%p,然后与p、g一起发给BB: 计算g^y%p,然后发给A互联网仅传输这四个数:g, p, g^x%p, g^y%pA: (g^y%p)^x=g^yx%p #收到B发来的结果后,在取该结果的x次方B: (g^x%p)^y=g^xy%p #收到A发来的结果后,在取该结果的y次方,发现这两个数计算结果相同,由此实现交换密钥。这就是密钥交换算法,有些人可能会说,就这四个数,给出三个我就可以推出另一个了。你真的能推出来么?如给出下面4个数,有兴趣的可以自己验证一下。g=2p=7x=2y=3可以看到上边计算出来的结果是一样的。这就是Diffie-Hellman密钥交换算法。但这种算法无法实现身份验证,也就是说当A向B发送信息时,如果C伪装成A给B发送信息,B无法验证哪个才是真正的A。由此产生了下面的算法。公钥加密算法公钥加密算法,是一种非对称加密算法,主要作用是用来进行身份验证。密钥对:公钥:p,是从私钥中提取出来的,可对外公布,常用来加密私钥:s,仅自己知道,且很长,常用来解密用公钥加密只能用与之对应的私钥解密。如用A的公钥加密,则只能使用A的私钥解密。发送方用自己的私钥加密数据,可以实现身份验证。发送方用对方的公钥加密数据,可以保证数据机密性。公钥加密算法很少用来加密数据:速度太慢。因此常用此算法来实现身份验证。继续上边的例子: A向B发送数据,先用单向加密算法生成特征码,然后用自己的私钥对该特征码进行加密,然后将加密过的特征码和数据一块传送。即使在传输过程中被C截获,但C没有A的私钥,所以即使C伪装成A给B发送数据,也没法将修改后生成的特征码使用A的私钥加密。当B收到该数据后,因B有A的公钥,B只需用A的公钥解密A用自己的私钥加密的特征码,如果没有被C修改过,因为B有A的公钥,所以可以解密,然后B再使用单向加密算法对数据加密,与解密出来的特征码比较,一致则没有修改过;否则无法对加密后的特征码进行解密,B就认为不是A发来的数据。以此来实现身份验证。但就出现了另一个问题,我如何获取对方的公钥呢?由此就产生了第三方机构。但此第三方机构必须是双方共同认可的第三方机构。A自己生成一对密钥,公钥和私钥,A将自己的公钥交给第三方认证机构,由第三方机构对A的公钥做公证,第三方对该公钥制作一个数字证书。然后将该数字证书发给A,当其他用户想跟A通信时,只需获得A的公钥即可。PKI: Public Key Infrastructure,公钥基础设施,是互联网上我们数字证书的颁发机构。这里不再对PKI做介绍,有兴趣的读者可查阅相关资料。但我如何能够实现既可以保证机密性,又可以保证数据完整性。同时又可以实现身份验证呢?继续上面的例子:首选,我们假定A和B都已获得对方的公钥。A在给B发送数据前,假定要发送的数据用x表示,先用单向加密算法将数据x加密提取出特征码y,然后用自己的私钥对该特征码加密,将加密后的特征码z附在要传送的数据后边,让x和z组成一个整体x+z,在使用自己随机生成的密码对数据和加密后的特征码整体即x+z进行加密形成[x+z],最后,A使用B的公钥将自己随机生成的密码进行加密后和[x+z]一块发送给B。当B收到A发来的数据后,先用自己的私钥解密后边的密码,因A是用B的公钥加密的,因此只有B可以解密,解密后得到A随机生成的密码。有了密码就可以解密[x+z]得到数据和加密后的特征码x+z,因B有A的公钥,因此B可以解密加密后的特征码。然后B用A的公钥解密加密后的特征码z,解密后得到特征码y,接着B在用单向加密算法加密数据得到特征码,如果得到的特征码也为y,则认为数据没有被修改,是A发来的数据。上边的过程也可简单描述为:A发送方:1、计算数据的特征码(单向加密);2、用自己的私钥加密特征码,并附加在数据后面;3、生成一个随机数密钥;4、用此密钥结合某算法加密数据及加密后的特征码;5、用接收方的公钥加密此随机数密钥,并附加加密后的数据后面;6、发送至接收方;B接收方:1、用自己的私钥解密加密的发送方产生的随机数密钥;2、用随机数密钥解密数据;3、用对方的公钥解密加密的特征码;4、用同样的算法计算数据的特征码,并与解密而来的特征码进行比较;从上边的过程我们可以看到,我们传输的数据经过加密,数据的机密性得到保证;其次,都使用对方的公钥加密,并使用自己的私钥来解密,实现了身份验证;接着,使用单向加密算法,确保特征码一致,可以保证数据完整性。至此机密性、数据完整性和身份验证我们就都可以实现了。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2019-May-25 12:55pm
栏目列表