本發(fā)明涉及一種安全性驗(yàn)證方法,屬于信息安全領(lǐng)域,具體是涉及一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法。
背景技術(shù):
:一直以來(lái),由于ios操作系統(tǒng)源碼不開(kāi)源,人們普遍認(rèn)為它比開(kāi)源的android操作系統(tǒng)具有更高的安全性,更能保證用戶(hù)的隱私安全,因而得到了廣泛的應(yīng)用。然而,2015年9月發(fā)生的“xcodeghost”事件打破了ios系統(tǒng)安全的“神話(huà)”,黑客直接將木馬代碼嵌入了ios平臺(tái)應(yīng)用軟件的開(kāi)發(fā)工具xcode,程序員們使用被植入惡意代碼的xcode工具開(kāi)發(fā)應(yīng)用程序,會(huì)導(dǎo)致應(yīng)用程序本身攜帶惡意代碼,被植入惡意代碼的應(yīng)用程序可以在appstore正常下載并安裝使用,對(duì)用戶(hù)的隱私數(shù)據(jù)安全造成了威脅,讓人們對(duì)ios系統(tǒng)的安全性產(chǎn)生了懷疑。當(dāng)前,人們對(duì)ios系統(tǒng)安全性的分析集中在對(duì)操作系統(tǒng)本身安全機(jī)制的研究和ios平臺(tái)下的應(yīng)用程序的安全性研究,主要包括分析基于ios操作系統(tǒng)架構(gòu)、軟硬件的安全特性、應(yīng)用程序的數(shù)據(jù)庫(kù)設(shè)計(jì)、安裝包、實(shí)時(shí)監(jiān)測(cè)等評(píng)估方案,還沒(méi)有涉及對(duì)ios系統(tǒng)安全協(xié)議實(shí)施安全性分析。安全協(xié)議實(shí)施安全性指安全協(xié)議在實(shí)際應(yīng)用過(guò)程中代碼的安全性。研究者們提出了大量能夠保證網(wǎng)絡(luò)空間安全的安全協(xié)議規(guī)范模型,然而理論上被證明安全的安全協(xié)議在實(shí)際應(yīng)用的過(guò)程中會(huì)由于各種原因變得不安全,如某些開(kāi)發(fā)人員為了方便實(shí)現(xiàn)常常以犧牲安全性、內(nèi)存泄露為代價(jià),這就使得開(kāi)發(fā)的應(yīng)用程序本身就存在不安全因素。當(dāng)然,某些公司也會(huì)對(duì)開(kāi)發(fā)的應(yīng)用程序進(jìn)行安全測(cè)試,但這種測(cè)試并沒(méi)有用自動(dòng)化工具進(jìn)行驗(yàn)證,有時(shí)并不能完全地檢驗(yàn)出其中是否存在不安全因素。因此,研究安全協(xié)議實(shí)施安全性,保證安全協(xié)議規(guī)范與安全協(xié)議實(shí)施的安全性是極其重要的。技術(shù)實(shí)現(xiàn)要素:本發(fā)明解決的問(wèn)題是,分析ios平臺(tái)上的安全協(xié)議swift語(yǔ)言實(shí)施安全性,保證安全協(xié)議實(shí)施與安全協(xié)議規(guī)范模型具有同等的安全性,為此,本發(fā)明提出了一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法。該方法基于計(jì)算模型,利用模型抽取方法從安全協(xié)議swift語(yǔ)言實(shí)施中得到安全協(xié)議blanchet演算實(shí)施;然后將抽取出來(lái)的安全協(xié)議blanchet演算實(shí)施轉(zhuǎn)化為cryptoverif的輸入語(yǔ)言,并在cryptoverif中運(yùn)行得到安全性驗(yàn)證結(jié)果,從而驗(yàn)證安全協(xié)議swift語(yǔ)言實(shí)施安全性。本發(fā)明所述的技術(shù)問(wèn)題主要是通過(guò)下述方案解決的:一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法,包括以下步驟:映射建模步驟,建立swift語(yǔ)言到blanchet演算的映射模型,并根據(jù)映射模型建立swift語(yǔ)言語(yǔ)句到blanchet演算語(yǔ)句、類(lèi)型的bnf映射規(guī)則;實(shí)施抽取步驟,從swift語(yǔ)言實(shí)現(xiàn)的安全協(xié)議實(shí)施中抽取出自動(dòng)化驗(yàn)證工具cryptoverif可以識(shí)別的安全協(xié)議形式化語(yǔ)言blanchet演算實(shí)施;安全驗(yàn)證步驟,根據(jù)自動(dòng)化驗(yàn)證工具cryptoverif的輸入語(yǔ)法,向從安全協(xié)議swift語(yǔ)言實(shí)施中抽取出來(lái)的安全協(xié)議blanchet演算實(shí)施添加安全性驗(yàn)證目標(biāo),然后導(dǎo)入cryptoverif中進(jìn)行安全性分析。優(yōu)選的,上述的一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法,所述映射建模步驟中,建立swift語(yǔ)言到blanchet演算的映射模型包括:將swift語(yǔ)言中的套接字聲明轉(zhuǎn)化為blanchet演算中的通道聲明;將swift語(yǔ)言中的消息發(fā)送和接收接口映射至blanchet演算中的通道輸出和通道輸入;將swift語(yǔ)言中的類(lèi)型聲明、變量/常量聲明、方法聲明、語(yǔ)句等分別映射至blanchet演算中的類(lèi)型聲明、創(chuàng)建項(xiàng)聲明、函數(shù)聲明、語(yǔ)句。優(yōu)選的,上述的一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法,所述映射建模步驟中,根據(jù)映射模型建立swift語(yǔ)言語(yǔ)句到blanchet演算語(yǔ)句規(guī)則包括:將swift語(yǔ)言中的常量映射為blanchet演算中的常量;將swift語(yǔ)言中的變量映射為blanchet演算中的項(xiàng);將swift語(yǔ)言中的賦值表達(dá)式映射為blanchet演算中的let…in語(yǔ)句;將swift語(yǔ)言中的邏輯表達(dá)式映射為blanchet演算中的邏輯表達(dá)式cond。優(yōu)選的,上述的一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法,所述映射建模步驟中,根據(jù)映射模型建立swift語(yǔ)言語(yǔ)句到blanchet演算語(yǔ)句規(guī)則包括:在轉(zhuǎn)換blanchet演算模型過(guò)程中,忽略swift語(yǔ)言中的import導(dǎo)入包;將swift語(yǔ)言中的常量聲明轉(zhuǎn)換為blanchet演算中的new語(yǔ)句;將swift語(yǔ)言中的未初始化的變量聲明映射為blanchet演算中的new語(yǔ)句;將swift語(yǔ)言中的已初始化的變量聲明映射為blanchet演算中的let…in語(yǔ)句;將swift語(yǔ)言中的函數(shù)聲明function_declaration:funcf(x:t,...){fun_body;}轉(zhuǎn)換為blanchet演算中對(duì)應(yīng)的函數(shù)funident(seq<t>):t[compos].;將swift語(yǔ)言中的類(lèi)聲明轉(zhuǎn)換為blanchet演算中的進(jìn)程。優(yōu)選的,上述的一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法,所述映射建模步驟中,根據(jù)映射模型建立swift語(yǔ)言語(yǔ)句到blanchet演算語(yǔ)句規(guī)則包括:將任意一條swift語(yǔ)句statement:s轉(zhuǎn)換為blanchet演算中輸入或輸出進(jìn)程中的語(yǔ)句<outprocess/inprocess>。根據(jù)權(quán)利要求1所述的一種swift語(yǔ)言實(shí)施的安全協(xié)議的安全性驗(yàn)證方法,所述映射建模步驟中,根據(jù)映射模型建立swift語(yǔ)言中數(shù)據(jù)類(lèi)型與blanchet演算的映射規(guī)則包括:對(duì)于swift語(yǔ)言中的基本數(shù)據(jù)類(lèi)型,在blanchet演算中聲明一個(gè)同名的數(shù)據(jù)類(lèi)型,直接進(jìn)行調(diào)用;對(duì)于swift語(yǔ)言中與密碼體制、簽名機(jī)制相關(guān)的數(shù)據(jù)類(lèi)型需映射到blanchet演算中對(duì)應(yīng)的密碼體制、簽名機(jī)制中的數(shù)據(jù)類(lèi)型。因此,本發(fā)明具有如下優(yōu)點(diǎn):基于計(jì)算模型,利用模型抽取方法分析ios平臺(tái)上的安全協(xié)議swift語(yǔ)言實(shí)施安全性能夠?qū)?duì)安全協(xié)議的分析由規(guī)范模型擴(kuò)展到具體實(shí)施方面,分析在實(shí)際應(yīng)用中的安全協(xié)議是否與安全協(xié)議規(guī)范模型具有同樣的安全屬性。附圖說(shuō)明附圖1是安全協(xié)議swift語(yǔ)言實(shí)施安全性分析與驗(yàn)證原理圖。附圖2是swift語(yǔ)言到blanchet演算的映射模型。附圖3是swift語(yǔ)言表達(dá)式語(yǔ)句到blanchet演算的bnf映射規(guī)則。附圖4是swift語(yǔ)言聲明語(yǔ)句到blanchet演算的bnf映射規(guī)則。附圖5是swift語(yǔ)言中基本語(yǔ)句到blanchet演算的bnf映射規(guī)則。具體實(shí)施方式下面通過(guò)實(shí)施例,并結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步具體的說(shuō)明。實(shí)施例:分析ios平臺(tái)上的安全協(xié)議swift語(yǔ)言實(shí)施安全性的原理圖如圖1所示。由圖可知,主要包括兩個(gè)部分:獲取安全協(xié)議blanchet演算實(shí)施和獲取安全性驗(yàn)證結(jié)果。1、獲取安全協(xié)議blanchet演算實(shí)施獲取安全協(xié)議blanchet演算實(shí)施主要通過(guò)模型抽取的方法。模型抽取是從高級(jí)程序語(yǔ)言swift語(yǔ)言實(shí)現(xiàn)的安全協(xié)議實(shí)施中抽取出自動(dòng)化驗(yàn)證工具cryptoverif可以識(shí)別的安全協(xié)議形式化語(yǔ)言blanchet演算實(shí)施,是ios平臺(tái)上安全協(xié)議swift語(yǔ)言實(shí)施安全性分析與驗(yàn)證的關(guān)鍵。在抽取安全協(xié)議blanchet演算實(shí)施的過(guò)程中,需要考慮swift語(yǔ)言和blanchet演算的語(yǔ)法規(guī)則,基于操作語(yǔ)義的一致性,將swift語(yǔ)言實(shí)施的語(yǔ)法映射到blanchet演算中相對(duì)應(yīng)的語(yǔ)法,進(jìn)而生成對(duì)應(yīng)的blanchet演算語(yǔ)言實(shí)施。bnf作為一種廣泛應(yīng)用于編程語(yǔ)言語(yǔ)法規(guī)則定義的規(guī)范,非常適合用來(lái)作為swift語(yǔ)言語(yǔ)法與blanchet演算語(yǔ)法之間建立映射關(guān)系的橋梁。為了完成模型抽取,首先建立swift語(yǔ)言到blanchet演算的映射模型,并根據(jù)映射模型建立swift語(yǔ)言語(yǔ)句到blanchet演算語(yǔ)句、類(lèi)型的bnf映射規(guī)則。(1)swift語(yǔ)言到blanchet演算的映射模型通常情況下,安全協(xié)議的參與實(shí)體有多個(gè)。安全協(xié)議各參與實(shí)體在安全協(xié)議swift語(yǔ)言實(shí)施中是多個(gè)與之相對(duì)應(yīng)的類(lèi),而在blanchet演算中,參與實(shí)體用多個(gè)進(jìn)程來(lái)模擬。因此,swift語(yǔ)言中的類(lèi)與blanchet演算中的進(jìn)程存在映射關(guān)系,安全協(xié)議swift語(yǔ)言實(shí)施中的發(fā)送者類(lèi)、接收者類(lèi)分別轉(zhuǎn)化為blanchet演算中的發(fā)送者進(jìn)程、接收者進(jìn)程。安全協(xié)議的不同實(shí)體之間不可避免的需要進(jìn)行網(wǎng)絡(luò)連接和消息傳輸。在swift語(yǔ)言實(shí)施中,通常會(huì)利用自定義的類(lèi)庫(kù)和相對(duì)應(yīng)的接口來(lái)實(shí)現(xiàn)不同實(shí)體之間的通信,如websocket、swiftsockets、ysocket等等,從而實(shí)現(xiàn)不同實(shí)體在網(wǎng)絡(luò)中發(fā)送和接收消息;在blanchet演算中,不同實(shí)體之間消息的傳遞在通道中實(shí)現(xiàn),并利用相應(yīng)的輸出、輸入方法分別實(shí)現(xiàn)消息的發(fā)送和接收。因此,在安全協(xié)議swift語(yǔ)言實(shí)施中,套接字的聲明應(yīng)該轉(zhuǎn)化為blanchet演算中的通道聲明,而消息的發(fā)送和接收接口分別對(duì)應(yīng)blanchet演算中的通道輸出和通道輸入。在安全協(xié)議swift實(shí)施中,具體的類(lèi)型聲明、變量/常量聲明、方法聲明、語(yǔ)句等分別可以與blanchet演算中的類(lèi)型聲明、項(xiàng)、函數(shù)聲明、語(yǔ)句建立對(duì)應(yīng)關(guān)系。如此,可以得到安全協(xié)議swift語(yǔ)言實(shí)施到blanchet演算實(shí)施的映射模型,如圖1所示。(2)swift語(yǔ)言語(yǔ)句到blanchet演算語(yǔ)句的bnf映射規(guī)則在swift語(yǔ)言的表達(dá)式語(yǔ)句(expression)中,主要定義了常量(value)、變量(variable)、賦值表達(dá)式(assignment)、邏輯表達(dá)式(logical_statement)。在定義表達(dá)式的bnf映射規(guī)則時(shí),swift語(yǔ)言中的常量a∈value與blanchet演算中的常量a[:t]對(duì)應(yīng),變量x∈variable可以轉(zhuǎn)化為blanchet演算中的項(xiàng)x[:t]。賦值表達(dá)式assignment:x=a可以轉(zhuǎn)化blanchet演算中的let…in語(yǔ)句lety:t=simpletermin。邏輯表達(dá)式(logical_statement)可與blanchet演算中的邏輯表達(dá)式(cond)相對(duì)應(yīng),具體來(lái)說(shuō),邏輯與表達(dá)式logicaland:e1&&e2轉(zhuǎn)化為blanchet演算中的邏輯與<simpleterm>&&<simpleterm>,邏輯或表達(dá)式logicalor:e1||e2轉(zhuǎn)化為blanchet演算中的邏輯或<simpleterm>||<simpleterm>,邏輯等于表達(dá)式logicalequal:e1==e2轉(zhuǎn)化為blanchet演算中的邏輯等于simpleterm>=<simpleterm>,邏輯不等于表達(dá)式logicalunequal:e1?。絜2轉(zhuǎn)化為blanchet演算中的邏輯不等于<simpleterm><><simpleterm>,由此可以得到swift語(yǔ)言表達(dá)式語(yǔ)句到blanchet演算的bnf映射規(guī)則如圖2所示。聲明(declaration)是swift語(yǔ)言中重要的部分,任何常量、變量、函數(shù)等都必須先聲明,然后才能被使用。在swift語(yǔ)言的語(yǔ)法規(guī)則定義中,主要定義了導(dǎo)入聲明(import_declaration)、常量聲明(constant_declaration)、變量聲明(variable_declaration)、函數(shù)聲明(function_declaration)、類(lèi)聲明(class_declaration)。其中,導(dǎo)入聲明用于加載編譯器中已經(jīng)定義好的類(lèi)或包,從而確保程序能夠調(diào)用類(lèi)或包中定義的方法,在blanchet演算中,并不存在對(duì)應(yīng)的語(yǔ)法,因此,在轉(zhuǎn)換blanchet演算模型過(guò)程中,遇到import導(dǎo)入包,可以直接跳過(guò)。對(duì)于常量聲明letx[:t]/letx[:t]=a,由于swift語(yǔ)言實(shí)施中的許多用于初始化的常量在blanchet演算中沒(méi)有實(shí)際意義,因此直接將其轉(zhuǎn)換為blanchet演算中的new語(yǔ)句newx:t;對(duì)于變量聲明,如果僅僅是聲明而沒(méi)有進(jìn)行初始化varx[:t],可將其與blanchet演算中new語(yǔ)句newx:t相對(duì)應(yīng);如果是聲明且進(jìn)行了初始化varx[:t]=a,則將其與blanchet演算中的let…in語(yǔ)句lety:t=simpletermin相對(duì)應(yīng)。swift語(yǔ)言中的函數(shù)聲明function_declaration:funcf(x:t,...){fun_body;}可以轉(zhuǎn)換為blanchet演算中對(duì)應(yīng)的函數(shù)funident(seq<t>):t[compos].。關(guān)于swift語(yǔ)言中的類(lèi)聲明,根據(jù)上一節(jié)定義的映射模型,可以確定將swift語(yǔ)言中的類(lèi)class_declaration:classa{}轉(zhuǎn)換為blanchet演算中進(jìn)程leta_process=,每一個(gè)類(lèi)均轉(zhuǎn)換為一個(gè)進(jìn)程。由此得到swift語(yǔ)言聲明語(yǔ)句到blanchet演算的bnf映射規(guī)則如圖3所示。最后需要定義的是swift語(yǔ)言中基本語(yǔ)句(statement)到blanchet演算的bnf映射規(guī)則。在將swift語(yǔ)句轉(zhuǎn)換為blanchet演算語(yǔ)句時(shí),任意一條swift語(yǔ)句statement:s將被轉(zhuǎn)換為blanchet演算中輸入或輸出進(jìn)程中的語(yǔ)句<outprocess/inprocess>,每個(gè)swift語(yǔ)句塊code_block:{s*}將轉(zhuǎn)換為blanchet演算中輸入或輸出進(jìn)程中的多條語(yǔ)句<outprocess/inprocess>*,swift語(yǔ)句中的if語(yǔ)句if_statement:ife{p}else{q}被轉(zhuǎn)換為blanchet演算中對(duì)應(yīng)的if語(yǔ)句if<cond>then<outprocess>else<outprocess>,swift語(yǔ)句中的guard語(yǔ)句guard_statement:guardeelse{p}同樣轉(zhuǎn)換為blanchet演算中的if語(yǔ)句if<!cond>then<outprocess>,需要注意的是,將guard語(yǔ)句轉(zhuǎn)換為blanchet演算中的if語(yǔ)句時(shí),條件表達(dá)式需要進(jìn)行取非操作,因?yàn)橹挥術(shù)uard語(yǔ)句中有不成立的條件時(shí),else后的語(yǔ)句塊才會(huì)被執(zhí)行,當(dāng)所有的條件均成立時(shí),else后的語(yǔ)句塊是不會(huì)執(zhí)行的。此外,在swift語(yǔ)言中創(chuàng)建一個(gè)類(lèi)的實(shí)例new_class:letx=class(e1,e2,...),那么在blanchet演算中與之對(duì)應(yīng)的是利用new語(yǔ)句創(chuàng)建一個(gè)新的項(xiàng)newx:t,swift語(yǔ)言中調(diào)用類(lèi)的方法class_method:class.method(e1,e2,...),可以轉(zhuǎn)換為blanchet演算中的函數(shù)funident(seq<t>):t[compos]。在swift語(yǔ)言中,利用套接字等多種形式來(lái)進(jìn)行消息的發(fā)送與接收,而在blanchet演算中,消息的發(fā)送與接收通常用out和in語(yǔ)句來(lái)實(shí)現(xiàn),以swift語(yǔ)言套接字為例,將其建立映射關(guān)系即可得到:利用socket中的send方法socket_send:socket.send(x1,x2,...)來(lái)發(fā)送消息,在blanchet演算中可映射為out語(yǔ)句out(<channel>,<term>)[;<inprocess>;利用socket中的receive方法socket_receive:socket.receive(x1,x2,...)來(lái)接收消息,在blanchet演算中可映射為in語(yǔ)句in(<channel>,<term>)[;<outprocess>。由此得到swift語(yǔ)言基本語(yǔ)句到blanchet演算的bnf映射規(guī)則如圖4所示(3)swift語(yǔ)言到blanchet演算類(lèi)型的映射規(guī)則swift語(yǔ)言和blanchet演算都是強(qiáng)類(lèi)型語(yǔ)言。區(qū)別在于,swift語(yǔ)言中的基本類(lèi)型如整型int、單精度浮點(diǎn)型float、雙精度浮點(diǎn)型double、布爾型bool、字符串string等都是swift語(yǔ)言本身預(yù)先定義的,用戶(hù)直接使用即可;而在blanchet演算中,除了與密碼體制、簽名機(jī)制相關(guān)的部分?jǐn)?shù)據(jù)類(lèi)型是由blanchet演算本身預(yù)先定義的之外,其他大部分類(lèi)型是用戶(hù)自己聲明后使用的。因此,在定義swift語(yǔ)言到blanchet演算的類(lèi)型映射規(guī)則時(shí),主要從以下兩個(gè)方面考慮:swift語(yǔ)言中的基本數(shù)據(jù)類(lèi)型,在blanchet演算中聲明一個(gè)同名的數(shù)據(jù)類(lèi)型,直接進(jìn)行調(diào)用;swift語(yǔ)言中與密碼體制、簽名機(jī)制相關(guān)的數(shù)據(jù)類(lèi)型需映射到blanchet演算中對(duì)應(yīng)的密碼體制、簽名機(jī)制中的數(shù)據(jù)類(lèi)型。swift語(yǔ)言到blanchet演算的部分類(lèi)型映射規(guī)則如表1所示。表1swift語(yǔ)言到blanchet演算的部分類(lèi)型映射規(guī)則swift語(yǔ)言類(lèi)型blanchet演算類(lèi)型類(lèi)型說(shuō)明ciphertextciphertext密文類(lèi)型plaintextcleartext明文類(lèi)型stringkeyseed/mkeyseed密鑰種子類(lèi)型stringkey/key密鑰類(lèi)型stringseed隨機(jī)種子類(lèi)型stringpkey公鑰類(lèi)型stringskey私鑰類(lèi)型stringsigninput數(shù)字簽名函數(shù)輸入類(lèi)型stringsignature數(shù)字簽名函數(shù)輸出類(lèi)型stringhashinput哈希函數(shù)輸入類(lèi)型stringhashoutput哈希函數(shù)輸出類(lèi)型2、獲取安全性驗(yàn)證結(jié)果獲取安全性驗(yàn)證結(jié)果的方法是:根據(jù)自動(dòng)化驗(yàn)證工具cryptoverif的輸入語(yǔ)法,向從安全協(xié)議swift語(yǔ)言實(shí)施中抽取出來(lái)的安全協(xié)議blanchet演算實(shí)施添加安全性驗(yàn)證目標(biāo),將其轉(zhuǎn)化為cryptoverif的輸入后導(dǎo)入cryptoverif中進(jìn)行。本文中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明精神作舉例說(shuō)明。本發(fā)明所屬
技術(shù)領(lǐng)域:
的技術(shù)人員可以對(duì)所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類(lèi)似的方式替代,但并不會(huì)偏離本發(fā)明的精神或者超越所附權(quán)利要求書(shū)所定義的范圍。當(dāng)前第1頁(yè)12