推理引擎實(shí)現(xiàn)UML模型向多 種形式化模型的轉(zhuǎn)化,從而綜合利用多種形式化模型的優(yōu)點(diǎn)。
[0065] 形式化模型的生成主要包括兩個(gè)部分,一部分為XMI格式UML模型的解析,另一部 分為匹配推理規(guī)則的制定。XMI格式UML模型的解析主要是將輸入XMI文件解析為UML模 型元素,為生成形式化模型作準(zhǔn)備。匹配推理規(guī)則的制定主要服務(wù)于轉(zhuǎn)化推理引擎,通過(guò)制 定UML元素與形式化模型元素的映射關(guān)系,利用推理規(guī)則與轉(zhuǎn)化推理引擎,完成形式化模 型的自動(dòng)生成。
[0066] XMI格式的UML模型解析主要包括對(duì)類圖和時(shí)序圖的解析,分別闡述如下:
[0067] (3-1)類圖模型解析
[0068] 在UML的類圖模型中,包含了各種的類,類中主要有類名、屬性、操作、構(gòu)造型與標(biāo) 記值等。通過(guò)分析由ProwerDesigner導(dǎo)出的XMI文件,可以得出類圖的XMI格式數(shù)據(jù)中需 要解析的關(guān)鍵節(jié)點(diǎn)。表1中給出了 XMI類圖的關(guān)鍵節(jié)點(diǎn)及內(nèi)容。
[0069] 表UXMI類圖關(guān)鍵節(jié)點(diǎn)及其內(nèi)容表
[0070]
[0071]
[0072] (3-2)時(shí)序圖模型解析
[0073] 在UML的時(shí)序圖模型中,包含了各種角色及其生命線、異步消息、返回消息與自關(guān) 聯(lián)消息等,通過(guò)分析PowerDesigner導(dǎo)出的XMI模型,可以知道UML時(shí)序圖模型中的元素信 息保存在uml:Model節(jié)點(diǎn)下。表2給出了時(shí)序圖需要解析的關(guān)鍵節(jié)點(diǎn)。
[0074] 表2、XMI時(shí)序圖關(guān)鍵節(jié)點(diǎn)及其內(nèi)容表
[0075]
[0076]
[0077] 從XMI文件向應(yīng)用P1演算模型的轉(zhuǎn)化主要包括定義部分、子進(jìn)程以及主進(jìn)程三個(gè) 部分的轉(zhuǎn)化,分別闡述如下:
[0078] 1、進(jìn)程定義部分轉(zhuǎn)化
[0079] 該部分轉(zhuǎn)換過(guò)程主要將〈〈Type?、〈〈Global?、〈〈Cryptographic?、 〈〈Confidentiality?、〈〈Authenticity?等構(gòu)造型定義的內(nèi)容,結(jié)合時(shí)序圖中添加的消息 元素類型集合,轉(zhuǎn)化成類型、變量、密碼原語(yǔ)與函數(shù)及安全屬性等進(jìn)程定義內(nèi)容,以自動(dòng)構(gòu) 建進(jìn)程定義部分,具體轉(zhuǎn)換規(guī)則如表3所示。
[0080] 表3、進(jìn)程定義部分匹配映射轉(zhuǎn)換規(guī)則表
[0081]
[0082]
[0083] 2、子進(jìn)程轉(zhuǎn)化
[0084] 將擴(kuò)展的UML模型轉(zhuǎn)化為應(yīng)用?1演算模型的子進(jìn)程定義,需要分析類圖中 〈〈Participator〉〉、〈〈Global>>、〈〈Cryptographic>>、〈〈Confidentiality>> 等構(gòu)造型描述 的協(xié)議參與者信息、全局變量、密碼原語(yǔ)及私密性驗(yàn)證操作等信息,并結(jié)合時(shí)序圖中參與者 對(duì)應(yīng)的對(duì)象在生命線上的所有消息及消息中元素類型的標(biāo)記值集合,制定匹配規(guī)則與轉(zhuǎn)換 方法,完成應(yīng)用? 1演算模型的子進(jìn)程定義的轉(zhuǎn)化。子進(jìn)程定義轉(zhuǎn)化是一個(gè)知識(shí)推理的過(guò)程, 依據(jù)消息的樹(shù)形結(jié)構(gòu),從參與者已有的知識(shí)出發(fā),推導(dǎo)出要發(fā)送或接受的消息的知識(shí)形式, 直到完成整個(gè)子進(jìn)程構(gòu)建。
[0085] 在協(xié)議的執(zhí)行過(guò)程中,需要構(gòu)建消息的符號(hào)樹(shù)。新消息可以通過(guò)組合、分解、構(gòu)造、 解構(gòu)消息的推理規(guī)則包括消息的推導(dǎo)、分解與組合等操作生成。K- m表示消息可以通過(guò) 知識(shí)集K進(jìn)行推導(dǎo);t代表項(xiàng);Same (t,m)用來(lái)表示t和m的類型相同且它們包含相同的主 機(jī)標(biāo)識(shí);f代表構(gòu)造而g表示解構(gòu),k是g的解構(gòu)參數(shù);T表示符號(hào)樹(shù)的節(jié)點(diǎn)集合,TO表示消 息符號(hào)樹(shù)的當(dāng)前節(jié)點(diǎn)。如下①~⑤表示的是消息的推理規(guī)則,而⑥~⑦表示的是消息符號(hào) 樹(shù)的構(gòu)建規(guī)則。
[0086] 消息推理規(guī)則及符號(hào)樹(shù)構(gòu)建規(guī)則
[0094] (1)對(duì)于每一條發(fā)送的消息,采取如下步驟完成構(gòu)建。
[0095] ①?gòu)闹R(shí)集中查找根節(jié)點(diǎn)的知識(shí)值,如果根節(jié)點(diǎn)不存在知識(shí)集中,那么就把根節(jié) 點(diǎn)拆解到下一層。
[0096] ②對(duì)于每一個(gè)拆解得到的節(jié)點(diǎn)重復(fù)步驟1,原子消息元素不能再拆解,如密鑰k不 可進(jìn)行拆解。
[0097] ③對(duì)于符號(hào)樹(shù)中的每一個(gè)葉子節(jié)點(diǎn),如果其不存在知識(shí)集K中,它需要通過(guò)推理 規(guī)則來(lái)完成推理。
[0098] ④當(dāng)整個(gè)符號(hào)樹(shù)構(gòu)建完成后,葉子節(jié)點(diǎn)及其知識(shí)值從底部往頂層合并,所以根節(jié) 點(diǎn)的知識(shí)值就是對(duì)應(yīng)需要發(fā)送的消息。
[0099] 以消息{{pkB,k} skB} pkA為例,樹(shù)形結(jié)構(gòu)每次拆解僅對(duì)當(dāng)前節(jié)點(diǎn)的一次操作原語(yǔ) 或消息組合進(jìn)行拆解,該消息完全展開(kāi)后的消息樹(shù)如圖2所示。
[01 00] (2)對(duì)于每一條接收的消息,樹(shù)的構(gòu)建步驟和節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)是不同的。拆解接收 消息的具體步驟如下所示。
[0101 ] ①添加根節(jié)點(diǎn)的知識(shí)值到知識(shí)集K中。
[0102] ②使用推理規(guī)則盡可能的拆解節(jié)點(diǎn)以獲得更多的子知識(shí)來(lái)豐富知識(shí)集,從而為發(fā) 送消息使用做準(zhǔn)備。
[0103] 3、主進(jìn)程轉(zhuǎn)化
[0104] 在ProVerif規(guī)格的應(yīng)用P1演算模型中,主進(jìn)程需要實(shí)例化多個(gè)特定參數(shù)的子進(jìn) 程定義來(lái)表示不同協(xié)議會(huì)話中不同角色的協(xié)議參與者,并在公共信道發(fā)布共享消息,如公 鑰等。將UML擴(kuò)展模型轉(zhuǎn)化為主進(jìn)程定義部分,需要分析擴(kuò)展類圖模型中每一個(gè)構(gòu)造型為 〈〈Participator?的類,每個(gè)類給出了一個(gè)特定角色的協(xié)議參與者子進(jìn)程的相關(guān)靜態(tài)信 息。主進(jìn)程定義轉(zhuǎn)化的具體過(guò)程如下:
[0105] (1)獲取所有公共信道中公開(kāi)的消息channelMsg,即所有〈〈Participator? 構(gòu)造型中訪問(wèn)權(quán)限為public的屬性,并獲取各參與者所知的消息knowMsg,即構(gòu)造型 〈〈Participator?中構(gòu)造函數(shù)的各個(gè)參數(shù)。
[0106] (2)獲取協(xié)議相關(guān)的所有主機(jī)標(biāo)識(shí)hostTag,即所有〈〈Participator?構(gòu)造型類 中類型為Intend和Self的屬性,去掉其中重復(fù)的主機(jī)標(biāo)識(shí)。根據(jù)hostTag對(duì)knowMsg與 channelMsg描述的消息進(jìn)行分類,并利用〈〈Cryptographic?定義的相關(guān)原語(yǔ)操作依據(jù)消 息類型對(duì)消息元素進(jìn)行等價(jià)轉(zhuǎn)化約簡(jiǎn),從而實(shí)現(xiàn)所有參數(shù)與消息的定義聲明。值得注意的 是對(duì)于含有標(biāo)記值的構(gòu)造函數(shù)中參數(shù),需根據(jù)具體表達(dá)形式進(jìn)行參數(shù)聲明,其構(gòu)造過(guò)程與 發(fā)送消息推理過(guò)程相似,這里不累贅介紹。
[0107] (3)完成參數(shù)及消息定義聲明后,使用ProVerif進(jìn)程構(gòu)造中"out(C,M) ;P"的形式 將消息發(fā)布到公共信道,并根據(jù)〈〈Participator?中構(gòu)造函數(shù)的具體內(nèi)容實(shí)例化子進(jìn)程, 最后讓這些子進(jìn)程無(wú)限且并行,如
[0108] (( ! processA (pkB, skA)) | ( ! processB (pkA, skB))) 〇
[0109] 4、形式化模型的驗(yàn)證:該階段目的是對(duì)生成的形式化模型進(jìn)行驗(yàn)證,檢查其安全 屬性是否滿足。驗(yàn)證的具體過(guò)程則是通過(guò)已有或擴(kuò)展后的形式化驗(yàn)證工具,對(duì)安全協(xié)議的 私密性、認(rèn)證性等安全屬性進(jìn)行驗(yàn)證,以便于工作人員對(duì)模型的分析與精化。因此可以融合 多種形式化工具的驗(yàn)證結(jié)果,對(duì)協(xié)議的多種屬性進(jìn)行驗(yàn)證和分析。
[0110] 在ProVerif中可以使用查詢語(yǔ)句對(duì)可達(dá)性和一致性的驗(yàn)證,這些性質(zhì)的驗(yàn)證能 很好地用來(lái)對(duì)安全協(xié)議進(jìn)行私密性和認(rèn)證性的驗(yàn)證。
[0111] (1)私密性查詢:查詢數(shù)據(jù)能否被攻擊者得到,如下面的語(yǔ)句query attcker (M) 用來(lái)測(cè)試模型中的項(xiàng)M是否能被攻擊者得到。
[0112] (2)認(rèn)證性驗(yàn)證:基于ProVerif中的事件完成驗(yàn)證,當(dāng)進(jìn)程A發(fā)送一個(gè)消息m給 進(jìn)程B,這個(gè)過(guò)程如果需要認(rèn)證,可以在進(jìn)程A發(fā)送消息前執(zhí)行一個(gè)事件(eventSendM),并 且在進(jìn)程B接受消息后執(zhí)行一個(gè)事件(eventReceiveM)。攻擊者不允許執(zhí)行事件,這就可以 證明是否每一個(gè)接受消息m的事件都有一個(gè)與之對(duì)應(yīng)的發(fā)送消息m的事件。最后,使用一 個(gè)單射的查詢可以用來(lái)建模認(rèn)證性。
[0113] 本發(fā)明以"針對(duì)NS公鑰協(xié)議的形式化建模及驗(yàn)證"為實(shí)施例,以下為該實(shí)施例具 體執(zhí)行過(guò)程:
[0114] NS公鑰協(xié)議實(shí)現(xiàn)了主體A與主體B之間的身份認(rèn)證;協(xié)議的具體交互過(guò)程及驗(yàn)證 安全屬性見(jiàn)表4所示。
[0115] 表4 :NS公鑰協(xié)議的交互過(guò)程及安全屬性
[0116]
[0117] 下面對(duì)驗(yàn)證的安全屬性進(jìn)行說(shuō)明:
[0118] 私密性:私密性指消息不能被攻擊者得到。
[0119] 認(rèn)證性:如果參與者B完成協(xié)議,那么B就認(rèn)為他是與參與者A完成協(xié)議,即A與 B在一個(gè)會(huì)話中完成協(xié)議;對(duì)于A來(lái)說(shuō)也是相同的。