第三章、 在 MANET 上以 SIP 為基礎的安全群播協定
3.1 數位簽章
當訊息在MANET上進行訊息傳遞時,其他的節點能夠很容易的就擷取到訊 息並且竄改之,如何在訊息傳遞的過程中保持訊息的完整性,是在MANET上通 訊時很重要的工作,本論文的協定中提出使用橢圓曲線數位簽章來保證訊息傳遞 時,訊息完整性相關的安全議題。
3.1.1 Overlay Meshed Network上的安全威脅
第二章中提到在新節點進入網路時,會先傳送一個SUBSCRIBE的訊息去尋 找網路上目前所建立起的SIP Gateway,如果目前MANET網路上已經存在SIP Gateway,存在的SIP Gateway就會發送NOTIFY訊息回去,這樣新節點就會完成 新節點加入的程序,新的節點也會由NOTIFY訊息的內容得知目前網路的狀況以 及目前啟動的ALM群體服務,所以當傳送NOTIFY訊息如果遭到竄改,那新節點 所獲得的訊息,將會是錯誤的網路狀態與服務,所以如何維持NOTIFY訊息的完 整性是極其重要的。
以第二章中描述新節點加入為例,分析其可能會面臨的安全漏洞,節點的分 布圖如圖21。
MN4 MN6
MN2 MN7
MN5
MN7 MN9 MN4 MN8 MN6
1.SUBSCRIBE
8.OK 9.OK
10.NOTIFY_d
12.OK
圖 22、加入 Overlay Meshed 網路流程圖
MN6是一個新加入的節點,MN8是目前已經存在於應用層級的網狀網路的 一個節點,MN4為目前建立的SIP Gateway,其加入的流程如下:
Step 1. MN6向外廣播一個SUBSCRIBE,詢問是否有應用層的網狀網路存在。
Step 2. MN8向MN4詢問是否有收到MN6所廣播的SUBSCRIBE訊息。
Step 3. MN4會回到MN8是否自己有收到這份資訊,在本例中MN4並沒有收到 MN6的資訊,所以回傳的OK訊息中告訴MN8自己並無收到。
Step 4. MN8回傳OK訊息給MN6告知其目前已存在應用層網狀網路,並且接受他 的加入,MN6便將MN8設為自己的SIP Gateway。
Step 5. MN8傳送NOTIFY訊息給MN6,NOTIFY訊息包含目前網狀網路上存在的
節點與節點的分布情況,還有目前已經存在的ALM群體提供哪些服務。
Step 6. MN6回覆給MN8,已接收到NOTIFY訊息。
Step 7. MN8告訴MN4與MN6,MN8成為SIP Gateway以及新的節點MN6加入到應 用層的網狀網路上。
Step 8,9. MN4與MN6回覆MN8以收到訊息。
Step 10. MN4傳送NOTIFY_d訊息給子節點,通知她們網路的狀況有改變,
需要更新節點名單。
Step 11,12,13. MN7,MN8,MN9回傳訊息,完成新節點加入的程序。
在上面的流程圖中,在Step 5中SIP Gateway(MN8)送出一個NOTIFY訊息告 訴MN6目前應用層網狀網路的資訊,這個時候如果經過竄改,那MN6就會使用 錯誤的節點名單,一直向錯誤的節點送資料,在 Step 7中MN8會發出NOTIFY_d 告知他原本SIP Gateway,網路的變化,所以,這個訊息需要確保沒有經過竄改,
否則收到的節點,會對網路的狀況產生誤判,同理Step 10在MN4送出NOTIFY_d 如果經過竄改也會產生問題,所以要保證NOTIFY的完整是非常重要的。
3.1.2 在MANET上SIP的數位簽章協定
一個節點在MANET上首先會廣播SUBSCRIBE去詢問是否有存在的SIP Gateway,如果已經存在一個SIP Gateway他便會加入這個節點,如果沒有,這個 節點便會成為SIP Gateway,因此在加入已經存在的SIP Gateway時,便會產生訊 息在傳送時是否被竄改的安全疑慮。
為了防止訊息經過竄改或偽造,在本研究中,提出使用數位簽章的方式來增 加訊息傳遞時的安全性,當一個節點成為SIP Gateway之後,首先要決定橢圓曲 線的參數Eq(a,b)與G,產生出一條橢圓曲線,然後再產生自己數位簽章的Public key,當有一個新的節點送出SUBSCRIBE時,使用一個<Public key>與<ECC>的 HEADER,將橢圓曲線的參數包括p、a、b、G放入<ECC>(在本研究中為一個 ECCParameterSpec的Object)裡面並請將SIP Gateway產生的Public key放入<Public
key>的HEADER裡面加上簽章傳送給新加入的節點,之後SIP Gateway會傳送 NOTIFY訊息告訴新節點目前網路的狀態,新的節點就可以使用SIP Gateway的 Public key與已知的橢圓曲線,來做簽章的認證,如此可以保證接收到的網路訊 息沒有經過竄改,然後,新的節點在傳送回去的OK回應訊息裡面,將自己的Public key放進<Public key>的HEADER裡面,之後SIP Gateway會再傳送NOTIFY_d給所 有目前存在這個應用層網狀網路的成員,裡面會有新節點的訊息,以及這個節點 橢圓曲線簽章的Public key,這個時候新節點可以比對收到的NOTIFY_d裡面自己 的Public key是否正確,如果有錯,節點重新發出SUBSCRIBE訊息重新進行加入 網路的動作,如果無誤之後新節點的Public key,可以拿來驗證這個節點的訊息 是否經過竄改,或者是否經過偽造。
MN4 MN6
MN1 MN3
SIP Gateway
noode
MN2 MN7
MN5
MN7 MN9 MN4 MN8 MN6 1.SUBSCRIBE
7.NOTIFY_d 2.NOTIFY_d
4.OK Include <ECC>
<Public key>
6.OK Include MN6's Public kry
10.NOTIFY_d
8.OK 9.OK
10.NOTIFY_d
12.OK
圖 24、加入數位簽章節點流程圖
Step 1. MN6向外廣播一個SUBSCRIBE,詢問是否有應用層的網狀網路存在。
Step 2. MN8向MN4詢問是否有收到MN6所廣播的SUBSCRIBE訊息。
Step 3. MN4會回到MN8是否自己有收到這份資訊,在本例中MN4並沒有收到 MN6的資訊,所以回傳的OK訊息中告訴MN8自己並無收到。
Step 4. MN8回傳OK訊息給MN6告知其目前已存在應用層網狀網路,並且接受他 的加入,傳送的OK訊息會加上數位簽章並且裡面會包含,<ECC>與
<Public key>兩個HEADER讓MN6了解MN8的Public key與目前使用的 橢圓曲線,MN6可以依據收到的<ECC>與<Pubkiv key>來做驗證訊息是 否經過竄改,之後就可以使用這兩個訊息來對MN8所傳送的訊息做驗 證,此後訊息在傳遞時皆加上簽章。
Step 5. MN8傳送NOTIFY訊息給MN6,NOTIFY訊息包含目前網狀網路上存在的 節點與節點的分布情況,還有目前已經存在的ALM群體提供哪些服務,
MN6收到NOTIFY訊息之後,便先使用MN8的Public key做簽章驗證,如 果沒有錯誤,便使用此訊息建立節點名單,如果有便丟棄此訊息重新加入 應用層網狀網路。
Step 6. MN6回覆MN8已接收到NOTIFY訊息,並且加上MN6使用<ECC>參數所 計算出的Public key回傳給MN8。
Step 7. MN8告訴MN4與MN6,MN8成為SIP Gateway以及新的節點MN6加入到應 用層的網路網路上,這個訊息裡面會包含MN6的Public key。
Step 8,9. MN4與MN6回覆MN8已收到訊息,MN6會比對是否自己的Public key沒 有錯誤,如果有錯,MN6會重新傳送給MN8。
Step 10. MN4傳送NOTIFY_d訊息給子節點,通知她們網路的狀況有改變,
需要更新節點名單。
Step 11,12,13. MN7,MN8,MN9回傳訊息,完成新節點加入的程序。
透過本研究所提出的通訊流程,可以去確保訊息在傳遞時,訊息內容的完整 性以及不可否認性,不會因為節點在傳送中經竄改或者是接收偽造的訊息,而產 生安全性的疑慮。