天天看點

建構兩端點間的安全通信

網絡最根本的作用是資料傳輸通信,與現實中的通信一樣,網絡通信也不得不面對安全性問

題,尤其是網絡安全問題日益突出的今天。下面以兩個端點為例介紹相關概念:

兩個端點之間的安全通信具有哪些特性:

機密性:封包内容僅有發送方和接收方可以了解,使得即使竊聽者擷取了兩端點間傳輸的報

文,也無法擷取封包的真正内容。

封包完整性:接收方接收的封包與發送方發送的封包内容一緻,沒有被惡意或意外篡改。

端點鑒别:發送方與接收方都可以證明在通信過程中,它們确實是自己所聲稱的身份。

運作安全性:在面對各個潛在的網絡攻擊時,系統具有預測、抵禦這些攻擊的能力。

如何使得兩個端點間的通信滿足上述特性?

在看到機密性時,最先被想到的應該是加密二字,我們通常将封包的最初形式稱為明文,而

通過加密算法加密明文封包,生成的加密封包稱為密文,該密文對于其他入侵者來說是無意

義的。在現代的衆多密碼系統中,加密技術本身是标準化的、公開發行的,任何人包括竊聽

者在内都可以擷取資料加密的方法。是以,我們需要一些秘密資訊阻止竊聽者解密資料,這

些秘密資訊就是秘鑰。

建構兩端點間的安全通信

在上圖中,發送方使用秘鑰A 和明文作為加密算法的輸入,生成的密文作為輸出,接收方使

用秘鑰B 和密文作為解密算法的輸入,生成的明文作為輸出。當秘鑰A與秘鑰B相同且都是秘

密的,稱為對稱秘鑰系統;當秘鑰A與秘鑰B中一個是公開的,另一個是隻有接收方或發送方

知道,稱為公開秘鑰系統。

根據對稱加密的工作方式,今天的對稱加密技術可以分為兩種寬泛的類型:流密碼、塊密碼

塊密碼:

在塊密碼中将要加密的封包處理為k比特的塊,每個塊被獨立加密。塊密碼采取一對一映射,

将k比特塊的明文映射為k比特的密文。塊密碼的每個塊越大,則該密碼就越安全。k 比特塊

密碼可能映射數量為 2^k。但對于較大的 k值,發送方與接收方之間就需要維護一張很大的

映射表,并且如果雙方需要更改秘鑰,就不得不重新生成該表,這幾乎不能實作。是以,塊

密碼通常使用函數模拟随機排清單。

還存在一個問題,當傳輸長封包時,我們需要将封包切割成 k比特的塊獨立加密,但如果多

個明文塊相同,那麼它們的密文塊也将相同,這将使得入侵者可能破解密文。為了解決這個

問題,我們在密文中加入某些随機性,使得相同明文塊産生不同的密文。Linux 中密碼存儲

也采用了相同的思想,為了避免由于相同明文密碼的密文形式相同而使得一些使用者密碼被猜

出,在計算使用者密碼的密文時會在明文秘密中加入随機值salt

目前流行的塊密碼:DES(資料加密标準)、AES(進階加密标準)

根據入侵者所擁有的資訊區分三種不同的入侵形式:

唯密文攻擊:入侵者隻能截取密文而不知道明文的内容

已知明文攻擊:入侵者知道部分明文與密文的比對

選擇明文攻擊:入侵者能夠選擇某一明文并取得該明文的密文形式

對稱加密要求發送方和接收方擁有相同的秘鑰,但在網絡中兩個端點可能相隔千裡,通信雙

方能否在沒有預先商定的共享秘鑰的條件下進行加密通信呢?Diffie-Hellman秘鑰交換解決

了這個問題,開創了如今的公開秘鑰系統的發展之路。而公開秘鑰系統的良好特性使得它不

僅可以用于加密,還可以用于鑒别和數字簽名。

建構兩端點間的安全通信

流行的公鑰加密算法:Diffie-Hellman、RSA

公開秘鑰密碼的概念:

在發送方與接收方之間不存在共享秘鑰的情況下,接收方具有兩個秘鑰,一個是衆所周知的

公鑰,另一個是隻有接收方知道的私鑰。發送方可以使用接收方的公鑰加密資料發送給接收

方,而此密文隻能用接收方的私鑰解密。同時使用接收方私鑰加密的封包也可以用接收方的

公鑰解密。

公開秘鑰密碼面對的問題:

由于接收方的公鑰是衆所周知的,除了發送方外其他入侵者也可以使用此公鑰加密資訊發送

給接收方,那麼應該如何鑒别發送方的身份呢?這就需要用數字簽名将發送方和封包綁定。

密碼散列函數:

建構兩端點間的安全通信

密碼散列函數通常用于提供封包完整性。散列函數給任意輸入 X計算出一個稱為散列的固定

長度的字元串 Y。任意兩個不同的輸入封包所得到的輸出散列都不相同。即散列函數生成一

個屬于資料的"指紋"(封包摘要)。

著名的雜湊演算法:MD5、SHA-1

建構兩端點間的安全通信

在使用密碼散列函數提供完整性時,接收方與發送方之間還需要一個鑒别秘鑰,鑒别秘鑰由

接收方與發送方共享,但對于其他人是秘密的。發送方在發送資料時,将封包m與鑒别秘鑰k

一起作為密碼散列函數的輸入,而密碼散列函數的輸出稱為封包驗證碼 MAC,發送方将封包

驗證碼M 加在封包上,生成擴充封包,并發送給接收方。接收方使用共享的鑒别秘鑰與接收

的封包m 一起計算出封包驗證碼,并将其與接收到的封包驗證碼M 比較,如果兩者相等,則

确定封包未被修改,且是由發送方發送的。

數字簽名:

建構兩端點間的安全通信

數字簽名就是在數字領域實作證明身份的一種密碼技術,數字簽名可鑒别、不可僞造。是以

數字簽名必須由某種與簽名者相關且私密的東西生成。上述的私鑰正好滿足這點,當我們使

用發送方的私鑰加密某個封包,如果接收方使用發送方的公鑰解密後得到的明文與初始明文

相同則可以判斷該封包是發送方發送的。是以,數字簽名還可以提供完整性,使得接收方在

驗證該封包未被篡改的同時驗證該封包的源。

使用加密進行資料簽名的缺點是加密、解密需要的開銷過大,是以,更有效的方法是将散列

函數引入數字簽名,發送方對封包的散列簽名,而不是對封包本身簽名。

公鑰認證:

數字簽名的一個重要應用是公鑰認證,即證明一個公鑰屬于某個特定的實體。将公鑰與特定

實體綁定通常是由認證中心CA完成的,CA的職責就是使識别和發行證書合法化。CA必須具有

一定公信力。

CA的作用:

1.CA證明一個實體的真實身份,這個實體可以是一個發送方、一台路由器等

2.在CA驗證了某實體的真實身份後,CA就會生成一個把其身份與實體公鑰綁定起來的證書,

證書包含這個公鑰和公鑰所有者全局唯一的身份辨別資訊。

公鑰認證的應用:IPsec、SSL

端點鑒别:

端點鑒别就是一個實體經過計算機網絡向另一個實體證明其身份的過程。而網絡中的端點鑒

别是在封包和資料交換的基礎上,作為鑒别協定ap的一部分獨立完成。

ap1.0:發送方發送一個封包給接收方,聲稱它就是發送方。明顯缺陷是,因為其他人也可以

向接收方發送封包說它是發送方。

ap2.0:當發送方有一個衆所周知的IP位址時,接收方可以通過比較接收封包的源位址是否與

發送方衆所周知的IP位址相同來鑒别。但這也不安全,因為我們知道可以在IP資料報中填入

我們希望的任意IP位址。

ap3.0:在發送方與接收方之間共享一個秘密密碼,用于身份鑒别。看起來這種方式十分安全,

但它的缺陷是如果發送方端口被竊聽,那麼該密碼就不在秘密。

ap3.1:為了避免密碼被入侵者擷取,我們最先想到的應該是将密碼加密,這樣就可以防止入

侵者擷取密碼。但此時并不能解決鑒别問題,因為入侵者可以利用回放攻擊,入侵者隻需要

竊聽發送方的通信,記錄下該密碼的加密版本,并向接收方發送該密碼的加密版本,即可假

裝它就是真正的發送者。

ap4.0:不重數和對稱秘鑰機制的使用形成了ap4.0,ap3.1面對的問題是無法判斷發送者的活

躍狀态,在ap4.0中接收方發送給發送方一個不重數(在一個協定生存期中隻使用一次的數),

發送方用它與接收方之間共享的對稱秘鑰來加密這個數,然後将加密的結果發送給接收方來

證明它的身份。

以上所述都站在滿足兩個端點之間的安全通信的部分特性的角度,下面将以安全電子郵件為

例,講述如何利用上述方法滿足兩個端點之間的安全通信的全部特性:

建構兩端點間的安全通信

安全通信封包的生成過程:

1.計算将被發送封包的封包摘要,并使用發送方的私鑰加密此摘要,将加密後的結果與初始

封包作為一個新的封包。

2.随機選用一個會話秘鑰加密這個新的封包,并将得到的結果與使用接收方公鑰加密這個會

話秘鑰所得的結果作為發送給接方的最終的封包。

為什麼使用會話秘鑰加密封包?

1.對稱秘鑰分發困難

2.公開秘鑰加密效率低下

繼續閱讀