• 沒有找到結果。

在 MANET 上 SIP 的金鑰交換協定

第三章、 在 MANET 上以 SIP 為基礎的安全群播協定

3.2 金鑰交換

3.2.2 在 MANET 上 SIP 的金鑰交換協定

一個節點要建立一個新的ALM群體時,首先會送出INVITE訊息,在3.2.1中 討論到,如果這個訊息經過竄改,那之後所要加入這個ALM群體的成員,可能 會遭受竊聽或者是中介者攻擊(MAN IN MIDDLE ATTACK),因此首先要保證這 個INVITE訊息的完整性,而當ALM群體建立完成之後,如果兩個群體成員進行 這個ALM群體提供的服務做通訊,例如在一個<IM>的群體,就是進行Instant Message服務,會使用MESSAGERequest(RFC 3428) [5]訊息來做通訊,但是因為 在SIP中Request MESSAGE的是明文,所以,在MANET上所有轉送的節點,都 可以簡單就竊聽到兩方通訊的訊息,因此,在MANET上,兩點通訊的私密性更 是顯得額外重要,因此本研究提出使用橢圓曲線的Diffie-Hellamn金鑰交換法來 做訊息加密,在MANET環境裡,使用金鑰長度短與運算量小的加解密法是很重 要的,因此使用橢圓曲線來做加解密。

因此,在本研究的應用層的網狀網路建立之後,每一個節點皆有其他節點的 Public key,可以用來用驗證訊息的完整性,同時也可以驗證訊息是否為發起的 節點傳送,因為數位簽章具有不可否認性,當一個節點發起一個ALM群體之後,

會傳輸一個INVITE訊息給其他在這個應用層網狀網路的成員,之後這個節點會 等待一段時間收集回傳的OK訊息,每一個成員在接收到這個訊息之後,如果想 要去加入這個新建立的ALM群體,就使用發起節點的Public key去驗證這個訊 息,如果沒有遭受竄改以及確實由這個ALM群體領導者所發起,便回傳OK訊息 回去,並且加上簽章,如果驗證有錯就遺棄這個訊息,發起的ALM群體的節點 在收到OK訊息之後,就依據這個請求加入的節點,使用這個節點的Public key去 做驗證是否經過驗證,以及是否確實為要求加入節點所發起的訊息,如果無誤就 接受這個節點,在等待時間結束之後,這個發起ALM群體的領導者便傳送 NOTIFY_k給所有參予者個ALM群體的節點,這個訊息裡面包含了這個ALM群 體所產生的橢圓曲線的參數,將橢圓曲線的參數包括p、a、b、G放入<ECC>(在 本研究中為一個ECCParameterSpec的Object),然後加上簽章傳送給加入這個 ALM群體的節點,之後收到的ALM成員在確定橢圓曲線參數沒有被竄改之後,

就傳送OK訊息回去裡面包含節點本身計算出來的Public key在<Public

key>HEADER裡面,加上簽章回傳給ALM的領導者,之後ALM領導者收到所有 人的回傳之後,再傳送一個NOTIFY回去給其他的參予者,裡面會有這個ALM群 體所有的參予者,以及這個些參予者的Public key,之後,如果要傳送訊息,便 可以使用節點本身的Private key與對方節點的Public key一起做加密,對方節點收 到之後,就使用節點本身的Private key加上對方節點的Public key做解密,再加上 簽章,這樣在傳送的期間,可以保護訊息的私密性以及訊息的完整性,在MANET 上傳輸經過節點轉傳時,訊息的內容可以保密,也不怕訊息被竄改。

以在3.2.1中所討論ALM群體建立的流程為例,使用同樣的節點的分布圖(圖 24),本研究所提出之使用金鑰交換的ALM群體建立流程如下:

MN4

MN2 MN7

MN5

Non-SIP node

MN9 MN6

SIP NODE MN8

圖 27、ALM 建立節點分布圖

MN7 MN9 MN4 MN8 MN6

18.NOTIFY_d 12.INVITE with

Join

6.OK Include <Publickey> 7.OK Include MN6's Public key 8.NOTIFY

3.OK

5.NOTIFY_k Include

<ECC>

11.OK

18.NOTIFY_d

4.NOTIFY_k Include <ECC>

9.NOTIFY 10.OK

13.OK

1.INVITE 1.INVITE 2.INVITE

2.INVITE

14.NOTIFY_k Include <ECC>

15.OK Include

<Publickey>

16.NOTIFY 17.OK

3.OK

18.NOTIFY_d

19.OK 19.OK

20.OK

21.MESSAGE Use ECC encryeption

22.MESSAGE Use ECC encryeption

圖 28、架入金鑰節點流程圖

Step 1. MN8決定發起一個ALM群體,傳送INVITE訊息給其他的節點,這個 INVITE的訊息會使用MN8在應用層網狀網路所交換的數位簽章的Private key加上簽章。

Step 2. 因為MN9、MN7為MN4的子節點,所以透過MN4來轉傳MN8的INVITE 訊息。

Step 3,4. 所有收到INVITE訊息的節點,都會使用MN8的Public key做簽章的驗 證,如果有錯誤,就丟棄這個訊息,如果簽章驗證正常,再決定是否加入 這個ALM群體,在本例中MN6與MN9決定加入MN8所成立的ALM群體,

並且回傳OK訊息給MN8,MN6與MN9也在傳遞的OK訊息中加入自己的 簽章,這樣一來可以防止有節點偽造節點要加入的訊息也竊取資料。

Step 5. MN8收到回傳的OK訊息之後,先去驗證是否簽章正確,如果產生問題則 丟棄這個OK訊息,如果簽章正確,即將傳送OK訊息的節點設為ALM群 體的成員,在等待期間結束之後,MN8傳送NOTIFY_k訊息給MN6與 MN9,這個NOTIFY_k訊息為MN8所選定的橢圓曲線參數,用來計算 Diffie_Hellman金鑰交換的每個ALM成員的Public key,此訊息加上簽章,

以防止訊息遭受竄改。

Step 6,7. MN6與MN9驗證完傳送的訊息之後,依據<ECC>的參數,計算出自己 的Public key,加上簽章回傳OK訊息給MN8。

Step 8,9. MN8將加入ALM群體的成員資料,包括各個節點計算的Public key,加 上簽章傳送給ALM群體的成員MN6與MN9。

Step 10,11. MN6與MN9收到NOTIFY訊息之後,先比對簽章,然後再比對自己的 Public key是否正確,沒有錯誤的話,就回傳OK訊息給MN8。

Step 12. MN4決定加入MN8的ALM群體,因此傳送INVITE訊息給MN8其中包含 一個Join的Header,加上簽章傳送給MN8,如此一來可以確保這個加入訊 息沒有被竄改,更重要的是透過簽章,可以確定這個訊息是由MN4所傳 送。

Step 13. MN8驗證無誤之後,接受MN4的加入請求,回傳OK訊息回去給MN4。

Step 14. MN8傳送一個NOTIFY_k訊息給MN4,裡面包含這個ALM群體所用來做 為金鑰交換的橢圓曲線參數<ECC>。

Step 15. MN4收到之後,驗證簽章,之後便使用<ECC>中的參數,計算自己的 Public key,加上簽章回傳給MN8。

Step 16. MN8驗證簽章之後,便加上簽章傳送NOTIFY訊息給MN4,裡面包含目 前ALM群體上的成員以及成員的Public key。

Step 17. MN4收到NOTIFY訊息之後,驗證簽章接著回傳OK訊息給MN8。

Step 18. MN8傳送NOTIFY_d訊息給所有的ALM群體成員,有ALM成員加入,將 新成員的資訊以及新籌員的Public key一起傳送給ALM群體的所有成員。

Step 19,20. 所有的ALM成員驗證簽章之後,就回傳OK訊息給MN8表示已經收到 更新的訊息,MN4也比對自己的公開金鑰是否有錯,如果無誤就回傳OK 訊息回去,如此便完成新節點加入的流程。

Step 21,22. MN4使用MN6的Public key與MN4自己的Private key做加密傳送 Instant Message給MN6,MN6收到之後使用自己的Private key與MN4的 Public key做解密,雙方進行通訊。

而當節點要離開ALM群體以及應用層網狀網路時,網路與ALM群體成員只 需要將這個節點從節點名單與ALM群體名單移除即可,不需要額外的動作就可 以移除離開的成員。

透過本研究所提出的協定,可以在ALM群體加入以及訊息傳遞的過程中,

保障其訊息傳遞的不可否認性,完整性與私密性,提升了SIP系統在MANET上運 作的安全性。