基於證書認證的IPSec ×××原理與實現

 1.ca介紹:

      基於Internet網的電子商務系統技術使在網上購物的顧客能夠極
其方便輕鬆地獲得商家和企業的信息,但同時也增加了對某些敏感
或有價值的數據被濫用的風險。買方和賣方都必須對於在因特網上
進行的一切金融交易運作都是真實可靠的,並且要使顧客、商家和
企業等交易各方都具有絕對的信心,因而因特網(Internet)電子商
務系統必須保證具有十分可靠的安全保密技術,也就是說,必須保
證網絡安全的四大要素,即信息傳輸的保密性、數據交換的完整性、發
送信息的不可否認性、交易者身份 的確定性。
      然而基於數字證書的應用就是互聯網通訊中標誌通訊各方身份信
息的一系列數據,提供了一種在Internet上驗證您身份的方式,其作
用類似於日常生活中的×××。它是由一個由權威機構-----CA機
構,又稱爲證書授權(Certificate Authority)中心發行的,人們可以
在網上用它來識別對方的身份。數字證書是一個經證書授權中心數
字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的
證書包含一個公開密鑰、名稱以及證書授權中心的數字簽名。一般
情況下證書中還包括密鑰的有效時間,發證機關(證書授權中心)的
名稱,該證書的序列號等信息,證書的格式遵循 ITUT X.509國際
標準。
       一個標準的X.509數字證書包含以下一些內容:
 
                                     
 
Version..................證書的版本標識符(例如,版本3)
Serialnumber................標識證書的唯一整數
Signature....................用於簽證書的算法標識
Issuer................證書頒發者的唯一識別名
Validity ................證書有效時間段
Subject....................證書擁有者的唯一識
SubjectPublicKeyInfo ........證書擁有者的公鑰
IssuerUniqueID........頒發者的可選唯一標識符
SubjectUniqueID ........主體的唯一識別符
Extensions ........可選的擴展
      在介紹完了x.509證書的基本結構之後,讓我們來研究一下x.509數
字證書在CA環境之下的應用。
證書在CA中的應用,主要是基於CA(Certificate Authorization):稱之
爲證書權威,承擔公鑰體系中公鑰的合法性檢驗的責任。它的基本
作用是充當一個通信雙方都相互信任的第三方,由CA負責爲通信雙
方頒發數字證書,當擁有數字證書的雙方要相互通信時,交換並且互
相驗證對方的證書,由於通信雙方都相互信任CA,故由CA頒發的數
字證書也被雙方相互信任。
2.IPSec中的CA:
      IPSec的整個過程實際是非常複雜的,但是正是由於它需要一個極
其複雜的過程來對流量實施各種各樣的處理,它才能夠爲網絡通信提
供一個非常安全的底層環境。
IPSec對等體的認證一共有三種方法:
1.pre-shared-key認證
此種認證方法配置最簡單,在小型網絡環境中應用比較廣泛,但是由
於需要針對每一個neighbor指明一個key,因此擴展性不是很好。
2.RSA公鑰加密
RSA公鑰加密相對pre-shared-key較安全,它的本質是在IKE階段一的
第三、四條消息就開始用對方的公鑰進行加密,但是配置過程比較
複雜,需要手工將對端的RSA公鑰保存在本端。
3.RSA私鑰加密
RSA私鑰加密(即數字證書)是三種認證方式中最安全,也是擴展性
最好的。
下面將較詳細的講解RSA私鑰加密在IPSec中的整個過程。
(注:本專題只討論基於certificate認證的main-mode的IPSec協商過程。
其餘認證模式以及認證類型(比如:aggressive-mode)不在本技術專題
範圍之內。)
 IPSec協商過程大致可以分爲下列幾個步驟:
1。敏感流量觸發IPSEC建立。
2。IKE階段1
3。IKE階段2
4。IPSEC隧道建立
5。IPSEC隧道終止
IKE階段1:
IKE階段1的主要目的是協商IKE-SA,最終目的是保護IKE階
段2,IPSec-SA的安全協商。
IKE階段1的協商共有兩種模式:Main-mode , Aggressive-mode,本
專題只討論Aggressive-mode,
Main-mode的基本過程是3次交換,6條消息。
1,2條消息:  主要目的是協商IKE_SA
包頭格式如下(注:並非完整的包頭,只列出其中重要的字段):
                                       
                                 
            
對端基於收到的transform-payload的中加密算法,散列算法,DH
組等信息,
將找到一個相匹配的IKE_SA.
同樣對端也會把已經相匹配的IKE_SA封裝在transform_payload
中,傳遞給本端,消息格式基本一致,故不再列出。
IKE_SA是雙向的,即每臺IPSEC路由器的入站與出站方向的SA是
一致的。
3,4消息:   DH交換
                     其目的是產生後繼密鑰資源。
                     DH交換的工作原理如下:
                           DH Exchange
  
      p(本端產生的隨機數)                 q (對端產生的隨機數)
                                 g=h^(p-1)/q
      Xa(本端產生的私鑰)                   Xb(對端產生的私鑰)
      Ya= g^Xa mod p                      Yb= g^Xb mod p
   (本端利用私鑰計算出自已的公鑰)  (對端利用私鑰計算出自已
的公鑰)
                                   Ya-------->
                                   <---------Yb
         (通信雙方相互交換公鑰,記住只交換公鑰,私鑰永遠不交換)
                  ZZ = Yb^(Xa) mod p = Ya(Xb) mod p
(雙方計算出一個共同的共享的祕密數字ZZ,也就是後面SKEYID
會話密鑰中的g^xy)
       DH交換的工作原理得益於一個非常簡單的數學公式:
                          (a^m)^n=(a^n)^m
                   就像(2^2)^3=(2^3)^2=64一樣簡單
 
     從上述DH交換的過程我們可以看到,最終生成的ZZ是由已端
的RSA私鑰和對端的RSA公鑰共同組成,但是雙方在DH交換的
過程中,只是相互交換雙方的RSA公鑰,RSA私鑰永遠不會在線
路上傳遞,因爲即使有竊聽者,他能得到的也只是RSA公鑰,因
此DH交換幫助我們在一個共享的、不安全的底層介質之上,實現
了通信雙方加密密鑰的安全協商。                          
Message_3 , Message_4消息格式如下:
                                
                                 
 
CKY_I/CKY_R:雙方各自產生的隨機數
KE_Payload:包含了雙方各自的公鑰g^xi
Nonce_Payload:雙方各自產生的臨時值,用於後繼SKEYID的協商
當第3,4條消息交換完成之後,通信雙方將會計算一個非常重要
的參數:
SKEYID(會話密鑰,此密鑰做爲產生後繼三個子密鑰
SKEYID_d, SKEYID_a, SKEYID_e的密鑰源):    
公式如下:SKEYID  =  prf { Ni|Nr,g^xy }
表示:將Ni與Nr的串聯作爲key,帶入明文的g^xy中,作一個prf(僞隨
機處理)。                           
 
利用此SKEYID產生一個子密鑰:
SKEYID_d = prf { SKEYID, g^xy | CKY_I | CKY_R | 0 }            
                        用於最終加密數據的密鑰原材料
SKEYID_a = prf { SKEYID, SKEYID_d | g^xy | CKY_I | CKY_R | 1 } 
                         用於IKE階段2,提供數據完整性保護
SKEYID_e = prf { SKEYID, SKEYID_a | g^xy | CKY_I | CKY_R | 2 } 
                        用於加密後繼的IKE消息
 
5,6條消息:   對等體之間進行認證(rsa-signature)
        採用certificate進行認證:
                           
                                 
 
有必要對signature_payload說明一下:
發起方首先基於IDi_b計算一個HASH(I):
HASH(I) = prf (SKEYID , g^xi | g^xr | CKY_I | CKY_R | SA | IDi_b )  
然後發起方再用自已的RSA密鑰對中的RSA私鑰對此HASH(I)加密。
加密的結果就存放在Signature_Payload中。
 
注意:以上消息將用SKEYID_e加密,因此main-mode保護的是一部分
的IKE階段1, 和全部的IKE階段2。(IKE階段2的保護將在後文介紹)
對端在收到第5條消息之後,將按照下列步聚解封裝:
1.用SKEYID_e解密。
2.解密Certificate_Payload , 獲得發起方的RSA密鑰對中的公鑰(g^xi).
3.用g^xi解Signature_Payload 獲取HASH(I)
  由於signature_payload是用發起方的RSA私鑰加密的,故用發起方的
RSA公鑰可以解密,滿足非對稱加密算法的基本原理。
4.自已計算HASH(I),將所得結果與第3步的HASH(I)進行比較,從
而完成認證。
接收方也會開始一個同樣的過程,包頭幾乎一致辭,唯一不一樣的是
接收方的HASH計算公式
        HASH(R) = prf (SKEYID , g^xi | g^xr | CKY_I | CKY_R | SA | IDr_b )  
                    
至此,IKE階段1完成,到目前爲止,通信雙方還是沒有爲真正保護用
戶數據的加密算法,散列算法等達成一致,雙方只是爲這一事情的協
商構建了一個安全的通道。
IKE階段2:
     IKE階段2只有一種模式:QM(Quick Mode)
     主要目的:協商真正用來保護用戶數據的IPSec_SA.
     3條消息。
    
     Message 1 , Message 2:
 
                                 
 
對端收到之後,將基於本端所支持的Ipsec-sa,找到一組通信雙方都
支持的SA。
比如雙方都支持以3DES,SHA分別作爲加密算法和散列算法。
HASH(1)= prf {SKEYID_a , Message_ID | SA | Ni | IDci_b | IDcr_b }
接收端返回的消息幾乎一致,唯一不同的是HASH_payload:
HASH(2)= prf {SKEYID_a , Message_ID | SA | Ni | Nr | IDci_b | IDcr_b}
Message 3:       
          
                                 
 
               HASH(3)= prf {SKEYID_a , 0 | Message_ID | Ni_b | Nr_b }
               message_3的作用可以簡單的理解爲對message_2的確認。
 
到此爲止,IKE階段2的協商全部完成,最後通信雙方只剩下一件最
最重要的事情,那就是計算保護用戶數據的加密密鑰。
           K= prf { SKEYID_d , Protocol | SPI | Ni_b | Nr_b }
由於IPSEC_sa是單向的, 所以SPI參數是不同的,故入站與出站的
Key值不相同,故數據在加密時和解密時的密鑰也是不一樣的,這
是一件很有意思的事情,也充分說明了IPSec的安生性。
 
3.基於CA認證的IPSec配置實例:
下面附上在CISCO路由器上的一個基於證書認證的IpSec ×××配置
過程
 
(僅以R1爲例):
Certificate配置過程:
利用SCEP獲取路由器的證書
1.配置router的時鐘
clock set
clock timezone
2.控制路由器memory
crypto ca certificate query(可選)
3.配置路由器主機名,域名
hostname
ip domain-name
4. 產生RSA密鑰對
crypto key generate rsa
5.宣稱CA
crypto ca trustpoint CA
enrollment url http://202.106.10.254/certsrv/mscep/mscep.dll
enrollment mode ra
6.獲取CA的證書
crypto ca authenticate CA
7.獲取路由器自已的證書
crypto ca enroll CA
 
檢查CRL:
crypto ca crl request CA
檢查路由器上的證書:
show crypto ca certificate
刪除路由器上的證書:
conf t
crypto ca certificate chain CA
no certificate
刪除被標識的CA:
no crypto ca idnetity CA
IpSec配置過程:
1.入站ACL允許ISAKMP , AH , ESP 進入。
   access-list 101 permit udp host 192.168.12.2 host 192.168.12.1 eq isakmp
   access-list 101 permit ahp host 192.168.12.2 host 192.168.12.1
   access-list 101 permit esp host 192.168.12.2 host 192.168.12.1
   access-list 101 permit ospf any any
 
   int s0
   ip access-group 101 in
2.打開ISAKMP。
   crypto isakmp enable
3.建立IKE策略。
   crypto isakmp policy 100
   encryption des
   hash sha
   authentication rsa-sig
   group 1
   lifetime 86400
4.標識身份類型
   crypto isakmp identity hostname
6.定義敏感流量
   access-list 102 per ip 172.16.10.0 0.0.0.255 172.16.20.0 0.0.0.255
7.建立transform-set
   crypto ipsec transform-set TRANS esp-sha-hmac esp-des
   mode tunnel
8.建立加密映射
   crypto map IPSEC 100 ipsec-isakmp
   match address 102
   set peer 192.168.12.2
   set transform-set TRANS
   set security-association lifetime seconds 3600
   set security-association lifetime kilobytes 4608000
9.激活加密映射
   int s0
   crypto map IPSEC
 
       到此爲止,基於certificate的IPSec實現的基本過程就是如此,
希望對大家有所幫助。
-----------------------------------------------------------------------------------------------------------------------------
推薦讀物:
RFC2409     --------The Internet Key Exchange (IKE)  
                                    D. Harkins, D. Carrel
                                              
RFC2459     --------Internet X.509 Public Key Infrastructure Certificate and CRL Profile
                                    R. Housley, W. Ford, W. Polk, D. Solo
                        
RFC2402     --------IP Authentication Header
                                    S. Kent, R. Atkinson
 
RFC2406     --------IP Encapsulating Security Payload (ESP)
                                    S. Kent, R. Atkinson
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章