亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        面向代理重加密算法的程序設(shè)計語言研究

        2018-07-30 09:45:22蘇铓俞研吳檳付安民
        通信學(xué)報 2018年6期
        關(guān)鍵詞:定義語言

        蘇铓,俞研,吳檳,付安民

        (1. 南京理工大學(xué)計算機科學(xué)與工程學(xué)院,江蘇 南京 210094;2. 中國科學(xué)院信息工程研究所信息安全國家重點實驗室,北京 100093;3. 中國科學(xué)院大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,北京 100049)

        1 引言

        云計算等復(fù)雜網(wǎng)絡(luò)環(huán)境的發(fā)展,推動了數(shù)據(jù)共享和互聯(lián)等相關(guān)技術(shù)的進步,越來越多的用戶開始通過網(wǎng)絡(luò)進行數(shù)據(jù)的傳輸和分發(fā),其中,包含了大量隱私數(shù)據(jù)、機密數(shù)據(jù)的不可信的云存儲環(huán)境增大了用戶共享的難度,各類外包計算和云應(yīng)用需求給人們帶來了隱私泄露的風(fēng)險[1]。為了確保該類數(shù)據(jù)的安全使用,保障用戶和服務(wù)提供商雙方的權(quán)益,數(shù)據(jù)加密和簽名的相關(guān)技術(shù)被廣泛應(yīng)用。代理重加密是眾多的密碼技術(shù)之一,其依托于公鑰密碼加密的思想,采用公私鑰對的形式進行秘密數(shù)據(jù)的發(fā)布和使用,基于其技術(shù)特點,密鑰的產(chǎn)生可以由代理服務(wù)器進行處理,在實現(xiàn)共享的同時,減輕數(shù)據(jù)分享者的計算量[2],這對于云這類用戶眾多、密鑰計算量巨大的系統(tǒng)來說至關(guān)重要,因此,受到眾多云計算安全研究人員的青睞。

        代理重加密技術(shù)的研究涉及密碼算法的設(shè)計和實現(xiàn)這2個方面,密碼算法的研究和設(shè)計者多為密碼學(xué)家或數(shù)學(xué)領(lǐng)域工作者,其描述的算法從數(shù)學(xué)理論方面進行分析和證明,在理論層面對其進行安全性分析,依托線性對、有限域等數(shù)學(xué)理論。算法一般采用形式化的方式進行描述,安全性證明則通過隨機語言、標準等模型,基于“挑戰(zhàn)—應(yīng)答”的機制。算法在實現(xiàn)與具體應(yīng)用時,需要針對具體系統(tǒng)進行程序代碼編寫,該方面的研究人員多為計算機專業(yè),依托于程序設(shè)計理論,對于算法的描述通常采用流程圖、偽代碼等形式進行,最終編寫具體程序語言代碼。這個過程中除了關(guān)注數(shù)學(xué)理論外,更加注重數(shù)據(jù)定義、程序邏輯結(jié)構(gòu)等方面,例如,數(shù)學(xué)語言使用無符號字符數(shù)組定義明文數(shù)據(jù),而不是使用假設(shè)變量進行描述。

        針對密碼算法的實現(xiàn)問題,主流研究思想是通過開發(fā)開源密碼算法代碼庫,為廣大算法研究人員提供支持。目前,對于對稱密碼、非對稱密碼等傳統(tǒng)密碼算法均有對應(yīng)的開源代碼庫,例如,crypto++[3]提供了 C++版本的多種傳統(tǒng)密碼算法的實現(xiàn)接口,包含 AES、RC6、MARS、Twofish、RSA、ECC等,同時兼顧密鑰分發(fā)、散列函數(shù)等多個方面。結(jié)合SSL協(xié)議的特點,OPENSSL開源代碼庫為用戶提供了對稱加解密、數(shù)字簽名等相關(guān)傳統(tǒng)密碼的應(yīng)用接口。上述代碼庫提供了針對傳統(tǒng)密碼學(xué)算法的實現(xiàn),對于目前的屬性基加密、雙線性對理論并未提供支持。為此,文獻[4]設(shè)計并實現(xiàn)了針對雙線性對的C語言代碼庫PBC Library,提供了雙線性對相關(guān)的定義、計算等數(shù)學(xué)運算的計算機代碼。PBC為用戶提供了基本的群、有限域等運算,同時實現(xiàn)了線性對相關(guān)的運算,為廣大密碼研究人員的算法實現(xiàn)提供了重要程序基礎(chǔ)[5]。隨著各類計算機編程語言的發(fā)展,PBC不再局限于C語言,出現(xiàn)了針對Java的JPBC、針對Python的版本,將PBC的C語言接口進行了進一步封裝,使用起來更加便利,面向的操作系統(tǒng)也涉及Windows、Linux等。更進一步,針對代理重加密,文獻[6]提出了開源代碼庫PRL,通過C++或C語言進行代理重加密的基本核心代碼,并且在不斷擴充算法。PBC、PRL等的出現(xiàn)在很大程度上方便了研究人員的算法實現(xiàn)與測試,但是PBC具體程序的編寫過程中仍然需要熟悉具體程序語言、進行數(shù)組定義、明確內(nèi)存空間分配原則等,這些對于密碼算法設(shè)計人員仍然是一項不小的挑戰(zhàn)。

        上述研究成果與開源庫為密碼算法實現(xiàn)提供了重要的編程工具,但是,這些開源工具一般基于指定的程序設(shè)計語言,要求使用者能夠熟練地進行計算機語言的使用,給密碼算法的設(shè)計者帶來使用上的困難,進而導(dǎo)致密碼算法的性能和安全性測試分析脫離具體系統(tǒng)環(huán)境,停留在數(shù)學(xué)理論層面;而計算機編程人員雖然熟知程序設(shè)計,但是對密碼算法設(shè)計中所包含的數(shù)學(xué)理論和描述較為陌生,在具體實現(xiàn)的過程中容易出現(xiàn)應(yīng)為理解的偏差導(dǎo)致的實現(xiàn)與設(shè)計脫節(jié)的問題。上述問題是目前包含代理重加密算法等一系列密碼算法設(shè)計與測試面臨的主要困境。

        領(lǐng)域?qū)S谜Z言(DSL, domain specific language)有別于通用程序設(shè)計語言,其針對具體的領(lǐng)域和問題,例如,HTML、SQL、YACC等,這類語言在使用過程中,不需要使用者關(guān)注過多的計算機實現(xiàn)細節(jié),更加接近人類的自然語言或數(shù)學(xué)描述語言,為此DSL被引入密碼算法的描述和實現(xiàn)中[7]。Cryptol就是其中的代表之一,用于指定加密算法的特定域語言。其設(shè)計之初是用來表達各類加密算法,以便可以有效地應(yīng)用到硬件電路上,后來不斷地被用于軟件設(shè)備上,可行度較高。Cryptol與平臺無關(guān),側(cè)重算法的具體實現(xiàn),其描述規(guī)則類似于算法的數(shù)學(xué)描述[8]。Cryptol在密碼算法描述和實現(xiàn)方面被廣泛應(yīng)用于安全性和正確性的證明和測試[9-10],但是該語言在直觀性上仍然有待提高。文獻[11]針對對稱密碼算法的特點,提出一種面向分組密碼算法的程序設(shè)計語言PLBCA,并針對DES算法進行了描述,該語言定義了變量、控制結(jié)構(gòu)、置換函數(shù)等元素,對于對稱密碼算法能夠進行類數(shù)學(xué)語言的描述,并基于ANTLR(another tool for language recognition)進行了實現(xiàn),通過ANTRL的解釋,最終對對稱密碼算法進行實現(xiàn)。PLBCA的思想即為密碼學(xué)家提供密碼算法正確性和安全性分析的具體實現(xiàn)途徑,描述簡明直觀。上述DSL語言在密碼算法實現(xiàn)方面的研究為代理重加密的算法實現(xiàn)提供了重要的理論支撐,若將DSL語言引入代理重加密的算法實現(xiàn)中,就為算法設(shè)計人員提供了一個類似數(shù)學(xué)語言的編程描述工具,搭建了一座算法設(shè)計與編程實現(xiàn)的橋梁。

        本文針對上述代理重加密研究過程中面臨的問題,提出一種針對代理重加密算法的程序設(shè)計語言(PLPRE, programming language for proxy re-encryption),通過近乎數(shù)學(xué)語言的方式對代理重加密算法進行描述,并借助ANTLR工具[12]對描述程序進行解析,產(chǎn)生對應(yīng)的計算機語言代碼,既能夠適用于密碼學(xué)家描述,又能夠與計算機編程語言無縫對接。這有利于算法研究人員的交流和算法實際性能的測試與分析,減輕算法研究人員的計算機編程難度,同時避免計算機編程人員由于數(shù)學(xué)理論陌生而導(dǎo)致的實現(xiàn)偏差,將推動代理重加密理論在各類系統(tǒng)的廣泛應(yīng)用。

        2 PLPRE相關(guān)介紹

        PLPRE語言設(shè)計的初衷在于為密碼研究人員提供一種面向重加密算法的專業(yè)程序設(shè)計語言,使密碼學(xué)專家能夠以近乎自然語言或數(shù)學(xué)語言的方式和思維進行算法的描述,以表述算法思想和過程。在 PLPRE語言的研究過程中,一方面需要分析各類代理重加密算法的基本步驟,提取共性特點,并進行抽象的表達;另一方面,需要定義針對雙線性對等理論和重加密算法的專用符號和運算。另外,PLPRE的語法結(jié)構(gòu)要盡量簡單、明確、易于表達,同時要兼容PBC等開源代碼庫,實現(xiàn)代理重加密算法設(shè)計與實現(xiàn)的無縫對接。

        2.1 范式定義

        PLPRE采用BNF范式的形式進行基本的語法規(guī)范描述,具體范式如下。

        <program>::=<definition_list><program_block>

        <definition_list>::=“/def”<definition_seq>“def”

        <definition_seq>::={<definition>}

        <definition>::=<var>“(”<expression>“)”“;”|<modular_dec>“;”

        <modular_dec>::=<var>“(”<para_list>“)”

        <para_list>::=<var>*(“,”<var>)|empty

        <program_block>::=“/start”<function_list>“end”

        <function_list>::={<function>}

        <function>::=“/method”<function_name>“(”<para_list>“)”“<function_block>”“method”

        <function_name>::=“Setup”|“KeyGen”|“Enc”|“ReKeyGen”|“ReEnc”|“Dec”|“main”

        <function_block>::={<statement>}|empty

        <statement>::=<expressions>|<modulars>|

        <loops>|<selections>|<sub_fun>

        <expressions>::=<expression>“;”

        <modulars>::=<modular_dec>“;”

        <loops>::=“/loop”“(”<expression>“;”“step=”

        <simple_expression>“;”“until=”<expression>“)”

        <statement>“l(fā)oop”<selections>::=“/if ”“(”<expression>“)”“then” <statement>“if ”|“/if ”“(”<expression>“)”“then” <statement>“else”<statement>“if ”

        <sub_fun>::=<sfun_name>“(”<para_list>“)”

        <sfun_name>::=“Prime”|“Group”|“Generator”|“e”|“random”

        <expression>::=<var>“=” <expression>|<simple_expression>

        <simple_expression>::=<var><op><var>|<modular_dec>

        <op>::=^|@|“xor”|==|!=

        <var>::=<ALPHA>*(<ALPHA>|<DIGIT>|“_”)

        <ALPHA>::=%x41-5A|%x61-7A

        <DIGIT>::=%x30-39s

        2.2 PLPRE語法

        2.2.1 程序結(jié)構(gòu)

        PLPRE的程序主要包含定義、主體、注釋3個部分。

        定義部分用于對算法描述過程中涉及的變量或常量進行定義、對變量進行初始賦值等。定義以“/def”表示開始定義,以“def”表示結(jié)束定義,該部分等同于其他程序語言中的聲明、變量定義的部分,對于代理重加密算法描述,定義的內(nèi)容包含群、域、生成元、大素數(shù)等數(shù)學(xué)相關(guān)變量定義以及明文、密文等內(nèi)容的定義,是必選部分。

        主體部分以“/start”關(guān)鍵字標識主體描述開始,以“end”關(guān)鍵字標識主體描述結(jié)束,主要用于代理重加密的算法描述,包含初始化、加密、重加密、密鑰生成、重加密密鑰生成、解密等主要函數(shù)過程,算法的描述可以使用普通的文本編輯進行,采用純文本格式,算法描述以“行”為單位,以“;”標識“行”的結(jié)束。

        注釋部分是對定義、主體部分內(nèi)容的附件說明,與現(xiàn)有程序設(shè)計語言的注釋功能類似,單行以“//”標識開始,內(nèi)容不能跨行;多行則以“/*”標識開始,“*/”標識截止,可以跨行。

        2.2.2 關(guān)鍵字

        PLPRE需要關(guān)鍵字實現(xiàn)具體描述,關(guān)鍵字包括描述類、控制類和函數(shù)類,其中,描述類包含def、method、sfun、bits、start、end 等,分別用于表示變量或常量定義、函數(shù)描述起始、子函數(shù)調(diào)用、數(shù)據(jù)位數(shù)定義、描述主體開始、描述主體結(jié)束;函數(shù)類包含 Setup、KeyGen、Enc、ReKeyGen、ReEnc、Dec、main等關(guān)鍵字分別表示初始化、密鑰生成、加密、重加密、重加密密鑰生成、解密函數(shù)和主函數(shù)的定義;控制類包含 if、then、else、loop、step、until,分別針對選擇和循環(huán)類的操作。

        2.2.3 變量及常量類型

        變量定義以關(guān)鍵字“/def”為起始,以“def”為終止。代理重加密的算法描述中涉及循環(huán)群、雙線性對、生成元、大素數(shù)等變量類型的定義,涉及的運算包含散列、按位邏輯運算等,多針對整數(shù)、比特串等進行描述。因此,PLPRE所提供的變量類型如下。

        整型:采用十進制表示。

        邏輯型:僅包含true和false這2種類型,使用1和0與之對應(yīng)。

        比特串:用于明文、密文、密鑰、大素數(shù)等相關(guān)數(shù)據(jù)的定義,使用二進制比特串表示。

        枚舉型:用于循環(huán)群等相關(guān)類型的表示和定義。

        在使用過程中,變量的定義僅說明位數(shù),類型的定義則通過具體描述中子函數(shù)和運算規(guī)則進行表示。例如,定義循環(huán)群G1的語句為“/def G1def”,循環(huán)群的表示則在具體函數(shù)描述中通過語句“G1=Group(q)”進行說明,其中,q為群G1的階,Group為系統(tǒng)子函數(shù),子函數(shù)說明見2.2.5節(jié)。

        PLPRE變量名的命名規(guī)則如下。

        變量名不得與關(guān)鍵字、運算符重復(fù)。

        變量名需要區(qū)分大小寫,即變量g與G為不同的變量。

        變量名不超過20個字符,超出則忽略20個字符之外的內(nèi)容。

        變量名必須以字母開頭,可以包含字母、數(shù)字、下劃線,其他字符則不能包含在變量名中。

        對于數(shù)組類數(shù)據(jù)的定義,則以“數(shù)組名[數(shù)據(jù)長度]”的形式進行定義,數(shù)組名的定義需要符合變量名的定義約束,數(shù)據(jù)長度采用整型定義。

        2.2.4 函數(shù)

        函數(shù)的描述規(guī)則是PLPRE中的重要組成部分,依托的數(shù)據(jù)理論、面向的具體環(huán)境的不同可能導(dǎo)致代理重加密算法描述各異,但是通常的算法描述中包含初始化、密鑰對生成、加密、解密、重加密密鑰生成、重加密等函數(shù)步驟,因此針對不同的代理重加密算法中可以抽象出共性的函數(shù)步驟進行描述語言的定義,PLPRE的函數(shù)描述均以“/method”關(guān)鍵字為起始,形式為“/method”函數(shù)名(參數(shù)表),以“method”表示函數(shù)描述結(jié)束;參數(shù)表中參數(shù)數(shù)量為0~N,N為自然數(shù),參數(shù)數(shù)量由描述用戶需求來確定。

        具體函數(shù)的定義形式和描述說明如表1所示。

        2.2.5 運算規(guī)則

        PLPRE的運算規(guī)則定義包含子函數(shù)描述和運算符描述。其中,子函數(shù)描述以sfun 表示,子函數(shù)是指數(shù)學(xué)算法設(shè)計過程中相關(guān)的通用數(shù)學(xué)函數(shù),由現(xiàn)有的通用程序源碼庫支撐。

        子函數(shù)描述包括大素數(shù)生成子函數(shù)Prime()、循環(huán)群生成子函數(shù) Group()、整數(shù)循環(huán)群生成子函數(shù)GroupZ()、生成元獲取子函數(shù)Generator()、雙線性對生成子函數(shù) e()、隨機選取群中元素子函數(shù)random()、散列函數(shù)構(gòu)造函數(shù) Hash(),運算符包含冪運算^、連接運算@、有限域乘*,具體說明如表2所示。

        2.2.6 控制結(jié)構(gòu)

        PLPRE中包含了條件選擇和循環(huán) 2類控制結(jié)構(gòu),條件判定以“/if”開始,結(jié)構(gòu)如下所示。

        /if(邏輯判定條件)

        表1 PLPRE函數(shù)定義說明

        表2 PLPRE子函數(shù)及運算符說明

        then 程序語句1

        else 程序語句2

        條件判定多用于加密、解密過程描述中的先決條件判定的描述。

        循環(huán)以“/loop”和“l(fā)oop”分別表示開始和結(jié)束,“step =”表示起始變量變化步長,“until =”表示循環(huán)結(jié)束條件。具體描述示例如下。

        /loop (a=0; step =1; until = 10 )

        …//程序語句,即循環(huán)內(nèi)容

        loop

        該示例中a為實變量,步長為1,10為截止條件,每執(zhí)行一次程序語句,a加1,直至a=10,進行 11次循環(huán)。循環(huán)語句多用于明文數(shù)據(jù)輸入、密文數(shù)據(jù)輸出、密鑰數(shù)據(jù)產(chǎn)生等描述。

        3 PLPRE的描述示例

        基于上述PLPRE語法描述,現(xiàn)以文獻[12]中描述的代理重加密算法為實例,給出該 PRE算法的PLPRE描述程序。

        3.1 定義部分

        /def /*參數(shù)定義*/

        q (bits=128) ;

        /*定義長度128 bit的變量q,用于大素數(shù)生成,大素數(shù)具體位數(shù)有初始化函數(shù)參數(shù)k確定*/

        g ;

        G1;//定義變量g用于循環(huán)群生成元,G1表示循環(huán)群

        …//此處定義其他生成元、循環(huán)群以及其他中間變量,方法同上

        plaintxt(bits=128) ;

        ciphertxt(bits=128) ;

        /*定義明文數(shù)據(jù)plaintxt、密文數(shù)據(jù)ciphertxt,長度均為128 bit,重加密基于公鑰密碼體制,明文、密文不需要估計按照長度分組,此處定義 128 bit旨在便于數(shù)據(jù)讀取*/

        Input (plaintxt, “plaintxt.txt”);

        Output (ciphertxt, “ciphertxt.txt”);/*描述明文和密文的輸入和輸出文件*/

        def

        3.2 主體部分

        參考文獻[13]的算法,本節(jié)選取ACC-PRE的初始化、加密、重加密部分進行描述。

        1) 初始化函數(shù)Setup

        該函數(shù)輸入?yún)?shù)k,定義大素數(shù)長度,生成k長度的大素數(shù)p,q階循環(huán)群,構(gòu)造散列函數(shù)映射關(guān)系,具體算法及描述語言對應(yīng)關(guān)系實例如表 3所示。

        2) 第一次加密函數(shù)Enc

        該函數(shù)輸入明文及用戶i的公鑰pki,產(chǎn)生第一加密的密文C1。算法及程序設(shè)計語言對應(yīng)關(guān)系實例如表4所示。

        3)重加密函數(shù)Re-Enc

        該函數(shù)輸入第一次加密密文 C1與重加密密鑰rk,產(chǎn)生可由用戶j解密的重加密密文C2。具體算法及描述語言對應(yīng)關(guān)系實例如表5所示。

        由于篇幅關(guān)系,密鑰生成、重加密生成函數(shù)以及解密函數(shù)將不再贅述,具體描述方法與上述算法描述相同。

        4 PLPRE系統(tǒng)實現(xiàn)

        ANTLR是一種語言識別工具,前身為PCCTS,該工具可以為包括Java、C++、C#在內(nèi)的語言提供了一個通過語法描述來自動構(gòu)造自定義語言的識別器(recognizer)、編譯器(parser)和解釋器(translator)的框架,涉及詞法分析器、語法分析器、語法分析樹等內(nèi)容。本文基于 ANTRL工具,對PLPRE語言及其解析程序進行了實現(xiàn)和測試,具體實現(xiàn)流程如圖1所示。

        表3 ACC-PRE Setup算法PLPRE描述

        表4 ACC-PRE 第一次加密算法PLPRE描述

        表5 ACC-PRE 重加密算法PLPRE描述

        圖1 PLPRE實現(xiàn)流程

        用戶依據(jù)自身需求,描述重加密算法,產(chǎn)生描述文本文件ReEnc.pre,具體解析過程說明如下。

        1) 對重加密描述文件ReEnc.pre進行詞法分析。

        步驟 1 預(yù)處理,去除無效的空格、制表符、換行這些字符。

        步驟2 識別專用運算符,如“^”“xor”“==”“!=”“@”,專用運算符識別為相應(yīng)的TOKEN碼。

        步驟3 識別關(guān)鍵字,為其指定相應(yīng)的屬性值,并將其對應(yīng)為TOKEN碼,為語法分析程序準備。

        步驟 4 識別字符串、數(shù)字、字符常量,保存并將其對應(yīng)為TOKEN碼,為語法分析程序準備。

        步驟5 識別main函數(shù)描述結(jié)束符,并交給語法分析程序處理。

        2) 接下來,對代理重加密描述文件進行語法分析,根據(jù)前面類數(shù)學(xué)描述語言的語法規(guī)則,把詞法分析的結(jié)果分解為各個語法單元,并進行進行語法錯誤的檢查與識別。

        語法分析主要依托的是詞法分析中產(chǎn)生的TOKEN碼表,識別各類語法成分,分別包含關(guān)鍵字、變量、常量、函數(shù)、運算子函數(shù)和運算符,并進行關(guān)鍵字單詞撰寫錯誤、括號不匹配錯誤的識別。

        3) 對代理重加密描述文件進行語義分析,并對描述語言具體語義含義進行識別和分析、靜態(tài)語義檢查,例如,指定變量是否定義、類型是否匹配、代理重加密步驟函數(shù)是否描述完整、齊全,為代碼生成階段搜集相關(guān)的語義信息。

        經(jīng)過語義分析將構(gòu)造以下信息:全局變量、常量信息表;步驟函數(shù)信息表;步驟函數(shù)聲明信息表;子函數(shù)調(diào)用信息表;產(chǎn)生中間代碼。

        4) 此時生成的中間代碼已經(jīng)類似于用戶指定的計算機編程語言對應(yīng)的代碼,但是具體子函數(shù)的實施還未進行處理。

        5) 依據(jù)用戶的目標代碼需求,選擇對應(yīng)計算機編程語言的代碼底層庫,生成目標代碼。目前程序?qū)崿F(xiàn)代碼庫依托于 PBC庫。在現(xiàn)有的PBC底層支持庫中進行選擇,調(diào)用不同的子函數(shù)實現(xiàn)程序及相關(guān)代碼,并產(chǎn)生對應(yīng)的頭文件函數(shù)生成列表。

        6) 將產(chǎn)生的子函數(shù)代碼與頭文件信息進行整合,生成輸出文件ReEnc.c和ReEnc.h文件,此處以C語言為例,若用戶選擇其他編程語言,則后綴名與文件格式會發(fā)生相應(yīng)的變化。

        上述6個步驟是依托于ANTRL工具產(chǎn)生的編譯程序,ANTRL工具則以 PLPRE.g文件中描述的文法規(guī)則進行編譯框架程序的生成,依據(jù)文獻[12],對第 3節(jié)中定義的規(guī)則進行描述,針對變量描述的文法描述示例如下。

        grammar PLPRE;

        options {

        language = C;}

        @header {

        #include <pbc.h>

        #include <gmp.h>}

        expr: multExpr ((CON| EXP| XOR) multExpr)*;

        CON: '@';

        EXP: '^';

        XOR:'xor';

        multExpr : atom*

        atom: INT

        | ID

        | '('! expr ')'!;

        stmt: expr NEWLINE -> expr| ID ASSIGN expr NEWLINE -> ^(ASSIGN ID expr)| NEWLINE ->;

        ASSIGN: '=';

        ID: ('a'..'z'|'A'..'Z')+ ;

        INT: '~'? '0'..'9'+ ;

        NEWLINE: ' '? ' ' ;

        結(jié)合3.1節(jié)中的范式描述,進一步描述關(guān)鍵字、函數(shù)、子函數(shù)以及程序邏輯的文法描述,最終產(chǎn)生PLPRE.g文件。該文件通過ANTRL工具編譯,產(chǎn)生 PLPRE對應(yīng)的詞法、語法和語義分析器,用于算法源文件的編譯。

        5 PLPRE特征分析

        PLPRE語言針對PRE的基本特征,提取功能步驟,給出了 PRE算法描述的基本框架和語法結(jié)構(gòu),描述語言類似數(shù)學(xué)語言,對于密碼算法研究人員和數(shù)學(xué)專家來說簡單明了,本節(jié)將從知識背景、適用范圍、跨平臺等方面對PBC、PRL、Cryptol、PLPRE等進行對比,如表6所示。

        1) 知識背景

        PBC與PRL基于C++、C、Java等語言,需要用戶熟知計算機編程語言,明確數(shù)據(jù)的定義類型、長度,還需要用戶在實現(xiàn)過程中進行數(shù)據(jù)結(jié)構(gòu)、內(nèi)存分配等方面的設(shè)計與分析;Cryptol與PLPRE則僅僅關(guān)注數(shù)據(jù)的長度,不需要過度關(guān)注類型,更不用考慮如何分類內(nèi)存和定義何種數(shù)據(jù)結(jié)構(gòu)。對于非計算機從業(yè)的密碼研究人員更為便捷。

        2) 適用范圍

        Cryptol主要針對傳統(tǒng)密碼算法,如DES、AES,同時包含 MD5等散列函數(shù)的描述方法,不適用于代理重加密算法的描述;PBC則針對大量密碼算法中至關(guān)重要的雙線性對進行了C語言的實現(xiàn),提供循環(huán)群產(chǎn)生、生成元提取、有限域運算等編程接口;PRL更進一步針對PRE給出C++程序接口,但是PBC與PRL需要在調(diào)用接口前,用戶自行定義數(shù)據(jù)結(jié)構(gòu),設(shè)計程序邏輯;PLPRE是針對PRE的專用DSL,更加適合代理重加密算法的設(shè)計人員使用。

        3) 跨平臺

        PRL基于PBC進行了部分線性對重加密算法的 C++接口實現(xiàn),需要運行平臺具備 C++代碼編譯的能力;PBC兼顧了 C++、Java等多種高級語言,提供了具體的線性對相關(guān)的算法實現(xiàn)接口,但是仍然需要考慮具體選擇語言適用的平臺;Cryptol和PLPRE則具備了其特有的語法描述體系,并產(chǎn)生出具體編程平臺需要的算法代碼。

        表6 相關(guān)技術(shù)對比

        6 結(jié)束語

        代理重加密以其特有的技術(shù)特點,被廣泛應(yīng)用于云安全、隱私保護等領(lǐng)域。通常從事代理重加密算法研究的多為熟知數(shù)學(xué)理論的非計算機專業(yè)人員,使算法設(shè)計僅通過數(shù)學(xué)分析進行安全性的證明,性能的分析則依托于理論計算;算法在具體應(yīng)用時,系統(tǒng)編程人員由于不熟悉數(shù)學(xué)理論,往往出現(xiàn)理解的偏差,從而產(chǎn)生實現(xiàn)過程中的漏洞。這一現(xiàn)狀導(dǎo)致了代理重加密算法的設(shè)計與實際應(yīng)用脫節(jié)。本文針對這一問題,提出一種面向代理重加密算法的程序設(shè)計語言PLPRE,該語言能夠通過類似數(shù)學(xué)語言的方式對代理重加密算法進行描述。描述過程中不需要關(guān)注代碼設(shè)計細節(jié),適用于非計算機專業(yè)的密碼算法設(shè)計者,從而避免代理重加密算法的設(shè)計與實現(xiàn)的偏差。這有利于算法研究人員的理論交流,減輕算法研究人員的計算機編程難度,進而推動代理重加密技術(shù)在各類系統(tǒng)的廣泛應(yīng)用。

        猜你喜歡
        定義語言
        永遠不要用“起點”定義自己
        海峽姐妹(2020年9期)2021-01-04 01:35:44
        定義“風(fēng)格”
        語言是刀
        文苑(2020年4期)2020-05-30 12:35:30
        讓語言描寫搖曳多姿
        多向度交往對語言磨蝕的補正之道
        累積動態(tài)分析下的同聲傳譯語言壓縮
        成功的定義
        山東青年(2016年1期)2016-02-28 14:25:25
        我有我語言
        論語言的“得體”
        語文知識(2014年10期)2014-02-28 22:00:56
        修辭學(xué)的重大定義
        aaaaaa级特色特黄的毛片| 亚洲av熟女传媒国产一区二区| 女女同恋一区二区在线观看| 亚洲精品无码永久在线观看你懂的 | 91桃色在线播放国产| 亚洲成人福利在线视频| 精品久久香蕉国产线看观看亚洲| 男女男在线精品网站免费观看 | 国产98在线 | 免费| 国产做a爱片久久毛片a片| 国产爆乳无码一区二区在线| 青青草最新在线视频观看| 亚洲国产美女高潮久久久| 无码国产福利av私拍| av中文字幕综合在线| 国内专区一区二区三区| 男女啪啪动态视频在线观看| 高清日韩av在线免费观看| 特黄 做受又硬又粗又大视频| 性生交大全免费看| 怡春院欧美一区二区三区免费 | av中文字幕一区不卡| 人人爽人人爽人人爽人人片av| 粗大的内捧猛烈进出在线视频 | 日韩精品无码一区二区三区视频| 国产视频不卡在线| 一区二区三区日本高清| 欧美老熟妇喷水| 日韩AV无码免费二三区| 久久综合久中文字幕青草| 夜夜高潮夜夜爽夜夜爱爱一区| 无套内谢的新婚少妇国语播放 | 99国产综合精品-久久久久| av天堂手机一区在线| 国产精品日日做人人爱| 无码少妇一区二区三区| 免费无码AⅤ片在线观看| 日本免费一区二区在线视频播放 | 日本激情视频一区在线观看| 精品国内日本一区二区| 极品新婚夜少妇真紧|