• 沒有找到結果。

尋找可以利用的資源

第三章 系統設計與實作

3.2 Proposed 驗證認證協定演算法

3.2.3 尋找可以利用的資源

在上一小節中我們介紹了如何尋找要攻擊的目標 Item( 重要的 Item ),接 下來在這一小節中,我們會說明如何尋找可以利用的資源。

在 3.1 節我們已經介紹過何謂可以利用的資源。根據 3.1 節的說明,我相信 大部分的人的第一個想法是可以利用的資源就是認證協定的每一個 Item,因為在 網路上任何人(包括 Attacker)都可以攔截下任何一筆資料。當然認證協定的每 一個 Item 都是可以利用的資源的這個想法沒錯,但是我們不僅會問這就是所有 可以利用的資源嗎?因此我們希望能夠根據這些已知的可以利用的資源想辦法 去得到更多更有用處的資源。接下來我們呈現了我們用來得到更多更有用的可以 利用的資源的方法。

void pieceTogether( Message protocol, Item important ) {

Item meaning = NULL;

Item unmeaning = NULL;

Boolean flag = true;

Message protocol_temp = protocol;

while( protocol_temp != null ) {

Item item_temp = protocol_temp. item;

while(item_temp != NULL ) {

if(item_temp is ciphertext )

copy the item_temp to unmeaning;

//copy 代表將這個 item 複製到 unmeaning(不包含 Structure 裡的 next 欄位)。

else

copy the item_temp to meaning;

//copy 代表將這個 item 複製到 meaning(不包含 Structure 裡的 next 欄位)。

item_temp = item_temp.next;

}

protocol_temp = protocol_temp.next;

}

while( flag == true ) {

flag = false;

Item unmeaning_temp = unmeaning;

while( unmeaning_temp != NULL ) {

if( meaning include unmeaning_temp.key )

unmeaning_temp = unmeaning_temp.next;

} } }

pieceTogether function 的用意是要根據已知的可以利用的資源來找出更多更

有用處的資源。pieceTogether function 一開始會先將認證協定所有的 Item 分成兩 類,一類是 “有意義的 Item”,儲存沒有加密的 Item;另一類是 “沒有意義的 Item”,儲存有加密的 Item。接下來的 while loop 是根據 “有意義的 Item” 為已 知的知識來判斷 “沒有意義的 Item” 中是否有 Item 可以從 “沒有意義的 Item”

變成 “有意義的 Item”。

因為一開始 “沒有意義的 Item” 裡面儲存的都是有加密的 Item,因此首先 我們先判斷 “沒有意義的 Item” 裡面的每一筆資料中用來加密的 key 是否是

“有意義的 Item” 裡面的資料,如果是的話,就將目前分析的 Item 從 “沒有意義 的 Item” 裡面移除,並同時將自己還有被自己加密的所有 Item 中沒有被加密的 Item 也都加到 “有意義的 Item” 裡面,而有加密的 Item 儲存到 “沒有意義的 Item” 裡面;如果不是的話,利用 3.2.2 節裡面介紹的 include function 來找出 “有 意義的 Item” 中是否包含目前分析的 Item(這裡包含的意思是指目前分析的 Item 裡面所有的資料都要出現在 “有意義的 Item” 裡面),如果有包含就將目前分析 的 Item 加到 “有意義的 Item” 並同時從 “沒有意義的 Item” 裡面移除,一直到 把 “沒有意義的 Item” 裡面的所有資料都依據這方法分析完畢。如果分析完畢 有 “沒有意義的 Item” 變成 “有意義的 Item” 那麼就要重新再分析一次,如果 分析完畢沒有 Item 從 “沒有意義的 Item” 變成 “有意義的 Item” 那麼這個 while loop 就結束。這時候 “有意義的 Item” 就是我們依據已知的可以利用的資 源找出更多更有用處的資源。

上面我們詳細的介紹了尋找出更多更有用處的可以利用的資源的流程,接下 來我們開始說明為什麼要這樣判斷。

在 pieceTogether function 中為什麼一開始我們要先將認證協定中所有的 Item 分成兩類:第一類是沒有加密的 Item、第二類是有加密的 Item。

z 因為第一類的 Item 是沒有加密過的所以 Attacker 可以對這些 Item 做任意的 修改,甚至隨便拿一個 Item 來偽裝,換個角度講,這也是代表著 Attacker 可以隨意的控制這一類的 Item,而第二類的 Item 因為是有加密過的,再加 上 Attacker 不知道用來加密的 key,所以 Attacker 是無法控制住這一類的 Item。

z 將所有的 Item 分成兩類之後,接下來是把第一類的 Item 當成已知的知識來 分析第二類的 Item。假設是第一次分析,那麼第一類的 Item 就是沒有加密 的 Item,第二類的 Item 就是有加密的 Item。假設有 Item 從第二類的 Item 變成第一類的 Item,如果這個 Item 是因為它用來加密的 key 有出現在第一 類的 Item 裡面所以才從第二類的 Item 變成第一類的 Item,那麼很明顯的,

Attacker 知道用來加密的 key,所以 Attacker 可以隨意的來控制這個 Item;

如果這個 Item 是因為它被加密的資料都有出現在第一類的 Item 裡面所以才 從第二類的 Item 變成第一類的 Item,那麼我們可以知道這個 Item 是利用第 一類 Item 裡的資料拼湊組合出來的,所以只要 Attacker 可以湊齊必要的 Item 之後就可以利用別人製造出這個 Item 了,因此 Attacker 也可以控制這一個 Item。經由這樣不斷的更新第一類的 Item 和第二類的 Item,最後我們就可 以找出所有 Attacker 可以控制的 Item 了。

在這一小節中,我們找到了兩組可以利用的資源,為了方便之後說明,我們 把攔截下來認證協定的所有 Item 稱為攔截直接使用的資源,而將 pieceTogether function 分析出來的可利用資源稱為可控制的資源。

相關文件