IPSec

全名是 IP Security


一般來說,大部分的網路加密都實做在TCP/UDP以上
故只支援使用特定TCP/UDP協定,例如常見的 SSLSSH
但是使用其他軟體就無法被此支援,例如MSN

MSN上其實是有軟體在做加密,MSN Shell內建使用RAS方式的加密
但是說真的,有時候怪怪的,而且使用這種外掛,對某些人來說會很敏感
(廣告,安全性,隱私權....都是外掛的隱憂)
如果要不使用這類套件達到加密的作業,那大概可以想到的是
  1. 自己寫一隻程式,跟MSN Shell做一樣的事情 !?
  2. 直接傳送加密過的密文!!?? (有人會這麼費工嗎XD)
  3. 不要用MSN...

其實是有辦法的,因為IPSec,我們可以達到所有IP資訊加密
IPSec實作在IP層,所有用到IP的任何協定、程式、作業,都會被加密
簡單的說,可以連Ping都加密,不過這樣做實在是有點過頭

IPSec 簡單的分成兩種加密方式:AHESP

  • 認證表頭(Authentication Header,AH)提供封包認證的功能
    這種型態的加密,並不會把明文加密,主要作用在
    1. 確保IP封包完整
    2. 確認IP封包發送者身份
    這樣的做法可以避免所謂的第三方(中間人)Attack,也可以避免資料被竄改
  • 資料封裝加密(Encapsulating Security Payload,ESP)提供封包加密功能
    ESP亦可以搭配AH服用,達到加密與驗證雙效合一的功能
    當然作用是對TCP封包內容加密(不含原始 IP Header)

使用IPSec也分成兩種作法
  • 傳輸模式
    此模式並不會在進行加密後產生新表頭(IP Header)
    AH加密使用此種模式,似乎會把IP Header變動
    造成無法通過NAT與其他相關設備的問題(若有支援就可以)
    ESP不會把IP Header部分變動,故沒使用上的問題
  • 通道模式
    此模式必須指定對方IP,在進行加密之後會產生新表頭
    以避免AH加密造成某些設備無法辨識AH之後的IP Header
    但因需要標明對方IP,故在使用上較無彈性

我個人測試的方式大致上是以 純ESP 方式來做,畢竟不需要驗證功能
且使用AH好像過VDSL跟中華的Router會不行!? 實際上究竟是怎樣我就沒研究了
而我採用IPSec Policy預設的Server REQUEST Security 為基礎政策
另外建立新的Policy,已達到"就算對方不支援IP Sec或是沒提供,亦可傳輸"
避免無法上網等窘況發生,再來就是使用被動式,不主動採取Data Out加密
而在Data In時要求對方加密,這樣避免一開始就硬傳送IP Sec造成無法傳輸

實際範例:
A,B,C三主機
A,B實作IPSec且都實行被動式加密
C並不支援IPSec (98/NT4.0 or non-MS-OS)
假設都使用TCP來傳送資料

A傳送資訊給B時,並不會一開始就使用IPSec,Normal TCP 3-handshake
B收到A的HS,但因為啟動被動式加密,故開始請求A做IPSec
A開始ISPKMP進行IPSec協調,完成後開始使用IPSec作業

A傳送資訊給C時,也同樣的不會立即使用IPSec,同樣的進行Normal TCP 3-handshake
C收到A的HS,馬上就reply回去,但A此時收到reply卻請求C開始IPSec(ISPKMP)
C收到IPSec請求,但是不懂,所以沒理A,A只好放棄使用IPSec
使用一般非IPSec模式來傳送資料


以上僅是推論,還沒有實際測試過是否可以加密
但可以確定的是的確有在進行ISPKMP (從封包側錄可以看到ISPKMP在傳遞)
目前已經確認的是,啟動IPSec使用我自己創建的被動式加密
不會無法上網,魔獸也不受影響,MSN亦可正常運作
接下來就等我老大跟我ㄧ起測試雙方都有IPSec的狀態,看看是否可以正常運作

報告完畢~


相關閱讀:
IPSec實作 by Rmrug
IPSec實錄 by Rmrug

rmrug 發表在 痞客邦 PIXNET 留言(0) 人氣()