加密解密實現和原理

我們有這樣的一個場景,有發送方,接收方,第三方。發送方想要發送消息給接收方,第三方想要截取消並篡改消息,然後再轉發給接收方。

怎樣才能襯得上是安全的交流方式呢?一般來說需要滿足下面的三個條件:

完整性(消息不被篡改),保密性(第三方無法解密),可認證性(接收方知道消息是由誰發送的)。

首先,我們來講下MD5加密,嚴格來說,MD5並不能稱爲加密,它只是一種散列運算,對消息進行散列運算,可以獲得消息的摘要(Digest,指紋)。

MD5算法有三個特點,

1. 散列算法是不可逆的,可以將散列運算理解爲單向的加密:根據原消息運算得到摘要,根據摘要,無法推導出原消息。比如只要有一個完整的人,就可以獲取它的指紋;但是如果只有指紋,是無法獲取這個人的全部信息的。

2.任何不同的文件,哪怕只有一個字節的細微差別,得到的摘要都是完全不同的。

3.無論原始消息的大小如何,運算得到的摘要信息是固定長度的。

下面是判斷消息是否被篡改的流程。

發送方對消息進行散列運算,得到消息摘要,發送消息摘要和消息,並說明摘要所使用的散列算法,如MD5。

接收方獲得消息和摘要,使用相同的散列算法對收到的消息進行散列運算,獲得新的摘要

接收方判斷髮送方的摘要和自己生成的摘要是否相同,相同則認爲消息沒有被篡改,否則就被篡改了。

但是這個不能保證第三方截取消息,篡改消息,重新生成摘要,再轉發。

對稱加密

對稱加密表示加密解密使用相同的密鑰,對稱加密算法DES(數據加密標準),AES(高級加密標準)等。

對稱加密需要雙方都持有密鑰,並保證密鑰不被泄露。但是發送至和接受者總要有一次初始的通信,用來傳遞密鑰,此時如何保證安全。

非對稱加密

非對稱加密有一組密鑰對,一個是對外公開的,任何人都可以獲取,稱爲公鑰。一個是自行保管並嚴格保密的,稱爲私鑰。消息由公鑰加密則只能由私鑰解密,由私鑰加密只能由公鑰解密。通過RSA算法加密解密。

這種加密方式,第三方沒有私鑰,是無法解密的。但是公鑰是任何人都可以獲得,任何人都可以用公鑰來加密併發送給接收者,因此它無法滿足條件可認證性。

認證模式

在認證模式中,有消息的發送方發佈公鑰,持有私鑰,步驟如下

1.發送方公佈自己的公鑰,任何人都可以獲得

2.發送發使用自己的私鑰對消息進行加密,然後發送

3.接收方使用發送方的公鑰對消息進行解密。

在這種模式下,假如發送方A,接收方B,因爲B持有A的公鑰,所以B能夠解密並且知道消息是由A發送過來的。這樣就滿足了可認證性的條件

但是因爲A的公鑰是公開的,所以第三方截取了消息都能通過公鑰解密,消息相當於是公開的。不滿足保密性

非對稱加密運算過程相對耗時,不適合大數據。因此,對它的認證模式進行了改進,形成一種新的加密方式,叫做數字簽名。

數字簽名

數字簽名和認證模式很相似,只不過加入了散列算法。步驟如下

1.發送方對消息進行散列運算,得到原始消息摘要。

2.發送方使用自己的私鑰對消息摘要進行加密,該過程也叫作簽名。

3.接收方使用發送方的公鑰對收到的消息進行解密,得到摘要。

4.接收方對消息進行散列運算,得到本地摘要。

5.判斷髮送方的摘要和本地摘要是否相等,以判斷消息是否被篡改。

數字簽名同時滿足了完整性和可認證性。但是沒有對消息本身進行加密,第三方如果截獲消息,就能看到消息的內容。如果傳遞的是保密性不高的非敏感數據,那麼數字簽名將是非常好的選擇。

綜合實現

發送方步驟

1.將消息進行散列運算,得到消息摘要。

2.使用發送方的私鑰對消息摘要加密(認證模式,確保了接收方能夠確認自己)

3.使用接收方的公鑰對消息進行加密(加密模式,確保了消息只能由期望的接收方解密)

4.發送消息和消息摘要

接收方步驟

1.使用發送方的公鑰對消息摘要進行解密(認證模式:確認消息是由誰發送的),獲取原始消息摘要

2.使用自己的私鑰對消息進行解密(加密模式:安全地獲得消息內容)

3.將消息進行散列運算,獲取本地消息摘要。

4.將原始消息摘要和本地消息摘要進行對比,確認消息是否被篡改。

可以看到,通過上面的方式,綜合使用了接收方,發送方全部的四個密鑰,再配合使用散列算法,是的前面提出的三個安全條件都滿足了。但是非對稱加密算法是一種相對耗時的操作,這個方案對於大數據來說是低效的。但是實際上,可以通過它來解決對稱加密中的密鑰傳遞問題,也就是說,密鑰傳遞使用這種綜合的方式來加密,之後採用對稱加密,因爲現在這樣已經安全了。

證書機制

與數字簽名相關的一個概念就是證書機制,證書用來做什麼呢?在上面的各種模式中,一直存在這樣的一個假設:就是接收方或發送方所持有的,對方的公鑰總是正確的。可實際上除非對方當面交接公鑰,否則在傳遞公鑰的時候,一樣有可能被篡改。那怎麼解決這個問題呢?這是就需要證書機制了:可以引入一個公正的第三方機構,當某一方想要發佈公鑰時,它將自身的身份信息及公鑰提交給第三方,第三方對其身份進行證實,如果沒有問題,則將其信息和公鑰打包成證書。當需要獲取公鑰時,只需要獲取其證書,就可以從中提取出公鑰了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章