1. 程式人生 > >網路傳輸的加密與解密

網路傳輸的加密與解密

由於網際網路早期並沒有考慮到資料報文安全的問題,早期的理念都是基於進行通訊的。現在隨著網路興起,網際網路上慢慢有很多“犯罪團體”,用較低的犯罪成本通常是基於一個網路通訊協議的一個小的漏洞來完成竊取、篡改、重播其他人的資料報文。

而往往計算機網路安全維護者和那些惡意攻擊者玩的就是一個類似貓鼠遊戲,網路安全維護者處處考慮對計算機的安全負責,而惡意攻擊者處處找安全的漏洞。而對於那些惡意攻擊方式大體分兩種。

一種叫被動攻擊,大體上來說就是竊聽,攻擊者獲得傳輸資訊,捕獲了資料流量。而另外一種叫做主動攻擊,即偽裝,冒名頂替資料接受者。重播,把竊取的訊息一遍遍的傳送給接收方。修改、把其他人的資訊擷取下來篡改一番。而針對那些惡意的攻擊者,我們的網路安全機制就規定了,至少要保證在安全的網路通訊下,這兩點是必備的,

一、保證資料完整性,保證是傳送方傳送的資訊沒有被非授權修改 插入刪除重複傳送。

二、安全認證,為了驗證傳送者的身份,要求傳送者做數字簽名,證明是他自己的身份。

為了下面更好的講述,現在引入幾個概念:

明文  指的是傳送方想要接收方獲得的可讀資訊,說白了,就是大家都能看懂的資訊啦。

密文  把明文經過一些加密演算法後生成的一堆正常的地球人無法直接讀懂的字串。

金鑰  就是在同一種演算法內明文、密文之間相互轉換需要輸入的資料,如果輸錯了,就無非獲得正確的明文資訊啦。

演算法(計算機) 無非就是利用一些數學公式演算法的方式。

在計算機加密方式有以下幾種:

一、對稱加密方式:(AES、DES)

在對稱加密演算法中,資料發信方將明文(原始資料)和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的金鑰只有一個,發收信雙方都使用這個金鑰對資料進行加密和解密,這就要求解密方事先必須知道加密金鑰。

該演算法的缺點是,如果一旦金鑰洩漏,那麼加密的內容將都不可信了。

傳送方和接收方都使用同一個金鑰對資訊進行加密、解密。這裡舉個例子就好理解了,假設XX村有個寡婦叫小翠,跟隔壁的二狗有“交流”,小翠要和二狗通訊,通常都是寫一些大家都能理解的語句“月上柳梢頭,人約黃昏後。”一類的吧,萬一“信”讓不懷好意的大牛截取了,張大牛開啟信就看到了祕密了。這個似乎就很尷尬了,於是小翠和二狗商量好了,採取用他倆人的“暗號”對信加密呀。

wKiom1PcYvGS4uz_AAEl4QCpbcM685.jpg

這樣,小翠和二狗兩個人都擁有同一個金鑰,就可以情意綿綿的通訊啦,對於大牛來說,他沒有金鑰,就算截取了信,也是隻能看到一堆亂碼。但是,萬一小翠要是腳踩N只船,和不同的人都有“交流”,豈不是小翠要記得好多金鑰?萬一大牛利用一些手段,截取了資訊,破解了金鑰,這樣的加密就毫無意義了,再設想一下,大牛截取了,破解不了,但是他又一次生成了不一樣的資訊發給二狗,二狗也並不知道小翠要表達什麼,這樣豈不是曲解了原意了麼?還有最重要的,如果小翠和二狗並沒有辦法相見,小翠加密以後,怎麼把金鑰告訴二狗呢???

這樣,對稱加密的缺陷就顯現出來了:

金鑰真的是過多,身份也無法認證,更不用提資料完整性可靠了,同理,金鑰交換就很困難。

但是本質上說,對稱加密的速度還是蠻快的。

二、非對稱加密方式

非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密(這個過程可以做數字簽名)。

非對稱加密主要使用的是RSA演算法。


W.Diffie和M.Hellman 1976年在IEEE Trans.on Information刊物上發表了文章,提出了“非對稱密碼體制即公開金鑰密碼體制”的概念,開創了密碼學研究的新方向。該加密方式規定了金鑰需要有一對兒

一個公鑰(Public Key)和 一個私鑰(Private Key/Security Key),如果用公鑰加密資訊,就需要用相同配對的私鑰才能解密,反之亦然。

讓我們看看非對稱加密的過程是什麼樣子的:

wKioL1PccgDi1l2GAADXIAg-hrI187.jpg


Tom如果想跟Jerry通訊:

Tom再獲得了Jerry的公鑰以後用Jerry的公鑰加密了一段小的“資料”,放到要傳輸的資訊後面,一併發給Jerry,假設通道傳輸時沒有被別人竊聽破壞,Jerry拿到這個資料,想讀取內容,只能通過它自己的私鑰才能開啟那小段資料。此外因為Tom用Jerry的公鑰加密,也能夠保證獲取到正確資訊的一定是Jerry本人(Jerry的私鑰沒有洩露),這樣Jerry不僅拿到了資料也保證了Jerry本人拿到的。非對稱加密方式在很大程式上保證了資料的安全性。但是沒有一種辦法能保證萬無一失,假設這個資料不幸被第三方的Dog拿到了,Dog雖然不知道Jerry的私鑰是什麼,但是Dog惡意破壞資料,隨便用一個私鑰就解密資料,得到一種錯誤的資訊。
非對稱加密的演算法:

RSA

D-H

Elgamal

等等

但是這裡有個很大的問題,Tom和Jerry雙方怎麼取得各自的公鑰呢??是不是雙方需要一個可靠的機構或者是第三方個人來擔保雙方獲得的公鑰是正規途徑得來的。而且公鑰加密本身生成的密碼就很長,意味著解密時間也就很長。

非對稱加密演算法

優點:資料可靠性相當強,很大程式上保證了身份認證。

缺點:生成大量字串故解密速度較慢,若用公鑰加密,公鑰傳輸的渠道成問題。

三、單向加密(MD5

     單向加密,它自己無法進行解密過程,不能用作直接進行加密資料資訊。它採用兩種MD5和SHA演算法方式,把一段資料進行加密處理,獲得一個叫做“特徵碼”的東西。

這段“特徵碼”跟原資料資訊半毛錢關係沒有。假設現在有人採用高科技手段篡改了檔案內容,此時檔案內容做了改動,哪怕是微小改動,被修改過以後的檔案再次提取“特徵碼”。結果也會發生翻天覆地的變化,加密學裡稱之為雪崩效應(avalanche effect)。這種對於資料內容的識別很直接,一眼就能辨別資料內容有無修改。“特徵碼”識別過程我們好比照妖鏡一樣,偽裝的再好的妖精也會被識別出來。

就讓我們採取md5方式在linux上做個小例項:

1 2 3 4 5 6 7 8 9 10 11 [[email protected] tmp]# cat 1.txt  I have a dream. [[email protected] tmp]# md5sum 1.txt  431ee9fa1c63997e59586b118905d32d  1.txt [[email protected] tmp]# cat > 1.txt << EOF > i have a dream. > EOF [[email protected] tmp]# md5sum 1.txt  10734d2b3be4151b61faea8a7cc622af  1.txt 本來1.txt的文件內容是I have a dream,我們把它進行md5演算法加密,獲得一個 431ee9fa1c63997e59586b118905d32d這就是原資料1.txt的長度為256bits的“特徵碼”
1 而我們一旦對原檔案的資料內容進行個微小的修改把“I ”改成“i”結果又偷偷寫回到原檔案之中

結果確發現大相徑庭,10734d2b3be4151b61faea8a7cc622af變成這個“特徵碼”了。用它來甄別資料是否被人偷偷的改過是不是很有效?

讓我們對上述的做個總結,

我僅僅是想快速的對資料進行加密對其他人傳送的時候,我可以採取對稱加密的辦法。

我們要驗證傳送接收雙方的身份真偽,可以用“非對稱加密”辦法。

我們想知道資料內容有沒有被人非法篡改過,就用“單向加密”方式。

所以大致上

對稱加密:快速

非對稱加密:認證身份

單向加密:驗證資料內容

這裡就有個好的意見,如果我們想跟另一個機構或個人通訊,不妨把上述三點都揉在一起,這樣任何都會照顧到了。這樣就大致誕生了PKI裡面叫做“公鑰基礎通訊設施模型”。

模型大體上步驟是這樣的,還是以Tom和Jerry為例:

Tom想跟Jerry通訊,Tom會採取加密步驟,步驟如下wKiom1PclQHwBByaAAOFsveqwCs546.jpg

此時我們的Jerry收到資訊,它的解密步驟如下:


wKiom1PcnGXwt_isAALo0ftS8kY279.jpg

這樣是不是就能夠保證通訊雙方萬無一失了呢??看著很是天衣無縫,但是其實仔細想想,似乎哪裡還有蹊蹺。

Tom想跟Jerry通訊,Tom是怎麼獲得Jerry的公鑰的呢????

看看,原來是如此縝密的通訊機制裡還有遺漏,我們仍無法保證資料夠保密的。Tom和Jerry如何可靠的獲得真正屬於本人的公鑰的?看來得找一個牢靠的第三方,一個能夠保障雙方身份都可靠的仲裁機構了。對,這就是CA的誕生了。

==================================CA(Certification Authority)==========================

CA就是認證身份的中心,用它來確認公鑰擁有者的真實身份!!它會給Tom和Jerry每個人發給類似***一樣的“數字證書”。而且對於這個CA的第三方几乎沒人敢懷疑它是“冒牌貨”。那麼CA是如何進行認證的呢?

CA會利用它自己的私鑰為數字證書附加上數字簽名,類似於上公安局蓋上大印了一樣。

通常我們的CA採取x.509格式資訊的數字證書

    ·證書的版本資訊;

    ·證書的序列號,每個證書都有一個唯一的證書序列號;

    ·證書所使用的簽名演算法;

    ·證書的發行機構名稱,命名規則一般採用X.500格式;

    ·證書的有效期,現在通用的證書一般採用UTC時間格式;

    ·證書所有人的名稱,命名規則一般採用X.500格式;(這裡必須要寫真實的主機名)!!!

    ·證書所有人的公鑰。

    ·證書發行者對證書的簽名。

但如果Tom想申請一個證明自己公鑰所有權的CA的數字證書並不是那麼容易,Tom需要填寫一個類似“入黨申請書”一樣的東西交給CA,CA進行實地考察,看看Tom三代是否有不合法的,看看Tom是不是一個品德高尚的人等等,核實成功了,CA才會簽署表示同意。