本發(fā)明涉及信息安全的技術(shù)領(lǐng)域,特別涉及一種基于對稱密碼的可認(rèn)證的代理重加密系統(tǒng)及方法。
背景技術(shù):
密碼技術(shù),是信息安全的核心和基礎(chǔ),廣泛用于網(wǎng)絡(luò)通信、電子商務(wù)、銀行、國防軍事等領(lǐng)域。密碼技術(shù)包括對稱密碼和非對稱密碼,非對稱密碼也稱為公鑰密碼。
在目前的云服務(wù)模型中,用戶將加密后的數(shù)據(jù)存放在不可靠的云服務(wù)器當(dāng)中。由于安全策略或信息分享等原因,數(shù)據(jù)的加密密鑰有可能需要經(jīng)常改變。傳統(tǒng)的方案是將數(shù)據(jù)從云服務(wù)器當(dāng)中取回后用原來的密鑰解密,之后再用新的密鑰進(jìn)行加密并傳回云服務(wù)器。但這種方案顯然效率低下,不具有可擴(kuò)展性。在這種背景之下,代理重加密方案應(yīng)運(yùn)而生。
代理重加密是一種能夠?qū)⒚芪脑诓煌拿荑€之間相互轉(zhuǎn)換的密碼學(xué)技術(shù)。在代理重加密系統(tǒng)中,用戶首先根據(jù)自己的新舊密鑰生成重加密密鑰,并將其發(fā)送給代理服務(wù)器。代理服務(wù)器在獲得重加密密鑰后,能夠在不解密的情況下,將原密鑰下的密文轉(zhuǎn)換成為新密鑰下的密文。用戶使用新密鑰即可對其進(jìn)行解密。
傳統(tǒng)的代理重加密方案采用的是公鑰密碼體制,其顯著弊端在于計算量大,加密速度相當(dāng)慢,無法適應(yīng)如今大數(shù)據(jù)時代的需求,實用性大打折扣。而且目前的代理重加密方案無法驗證消息的可靠性,無法保證消息不被惡意篡改,對安全性同樣造成了很大威脅。
因此,在保證實現(xiàn)代理重加密的情況下,目前亟待提出一種基于對稱密碼技術(shù)的、可驗證消息正確性、完整性的代理重加密系統(tǒng)。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點與不足,提供一種基于對稱密碼的可認(rèn)證的代理重加密系統(tǒng)及方法,該系統(tǒng)大大提高了代理重加密的速度,而且能夠確認(rèn)消息是否被惡意篡改。
本發(fā)明的第一個目的通過下述技術(shù)方案實現(xiàn):
一種基于對稱密碼的可認(rèn)證的代理重加密系統(tǒng),所述系統(tǒng)包括:
用戶端,用于向代理端發(fā)起重加密請求,包括隨機(jī)數(shù)生成器、密鑰生成模塊、加密模塊、解密模塊和密鑰更新模塊,當(dāng)需要對數(shù)據(jù)進(jìn)行重加密時,所述隨機(jī)數(shù)生成器首先生成一個隨機(jī)數(shù),用所述密鑰生成模塊生成新的加密密鑰和新的認(rèn)證密鑰,然后通過所述密鑰更新模塊生成重加密密鑰和認(rèn)證變換密鑰,然后將該隨機(jī)數(shù)、重加密密鑰與認(rèn)證變換密鑰一起發(fā)送給所述代理端的重加密模塊,同時,所述加密模塊和所述解密模塊還能夠?qū)?shù)據(jù)進(jìn)行加解密操作;
代理端,用于保存用戶的密文,同時對用戶端發(fā)送過來的重加密請求進(jìn)行處理,并對數(shù)據(jù)進(jìn)行重加密并生成新的消息認(rèn)證碼。
進(jìn)一步地,所述隨機(jī)數(shù)生成器,用于生成隨機(jī)數(shù);
所述密鑰生成模塊,用于生成加密密鑰與認(rèn)證密鑰;
所述密鑰更新模塊,用于根據(jù)新的加密密鑰和認(rèn)證密鑰,生成重加密密鑰和認(rèn)證變換密鑰,其包含一個逆元生成器,用于生成某個元素的逆元。
進(jìn)一步地,所述加密模塊,用于對消息明文進(jìn)行加密,該模塊包括多項式運(yùn)算部件和消息認(rèn)證碼生成部件,其中,所述多項式運(yùn)算部件首先將輸入的兩個字符串參數(shù)分別轉(zhuǎn)換成兩個多項式的系數(shù),即轉(zhuǎn)換成為兩個多項式,接著對該兩個多項式進(jìn)行多項式環(huán)上的乘法運(yùn)算;所述消息認(rèn)證碼生成部件用于生成與消息對應(yīng)的認(rèn)證碼,以備后續(xù)檢測之用。
進(jìn)一步地,所述解密模塊,用于對密文進(jìn)行解密,該模塊包括多項式運(yùn)算部件與校驗部件,其中,所述多項式運(yùn)算部件首先將輸入的兩個字符串參數(shù)分別轉(zhuǎn)換成兩個多項式的系數(shù),即轉(zhuǎn)換成為兩個多項式,接著對該兩個多項式進(jìn)行多項式環(huán)上的乘法運(yùn)算;所述校驗部件用于檢測消息認(rèn)證碼是否正確,若正確則返回解密之后的消息,否則返回解密失敗;
其中,所述校驗部件包含一個DDH群映射器,用于將一個哈希值映射到DDH群上。
進(jìn)一步地,所述代理端包括重加密模塊,用于響應(yīng)用戶請求,根據(jù)用戶端傳遞過來的重加密密鑰和認(rèn)證變換密鑰對數(shù)據(jù)進(jìn)行重加密,并更新消息認(rèn)證碼;該重加密模塊包括多項式運(yùn)算部件與消息認(rèn)證碼更新部件,其中,所述多項式運(yùn)算部件首先將輸入的兩個字符串參數(shù)分別轉(zhuǎn)換成兩個多項式的系數(shù),即轉(zhuǎn)換成為兩個多項式,接著對該兩個多項式進(jìn)行多項式環(huán)上的乘法運(yùn)算;所述消息認(rèn)證碼更新部件根據(jù)用戶端傳遞過來的認(rèn)證變換密鑰,對原來的消息認(rèn)證碼進(jìn)行處理,生成新認(rèn)證密鑰下的消息認(rèn)證碼;
其中,所述消息認(rèn)證碼生成部件包括一個DDH群映射器,用于將一個哈希值映射到DDH群上。
本發(fā)明的第二個目的通過下述技術(shù)方案實現(xiàn):
一種基于對稱密碼的可認(rèn)證的代理重加密方法,所述方法包括下列步驟:
用戶端生成參數(shù)步驟,該步驟具體為:
S101、選擇并生成公共參數(shù);
S102、根據(jù)公共參數(shù),通過密鑰生成模塊生成新的加密密鑰、新的認(rèn)證密鑰以及DDH群;
S103、若需要發(fā)起重加密請求,則將新的加密密鑰和新的認(rèn)證密鑰傳遞給密鑰更新模塊,生成重加密密鑰和認(rèn)證變換密鑰,然后將這兩個密鑰發(fā)送給代理端的重加密模塊;
S104、若需要對數(shù)據(jù)進(jìn)行加密,則將消息明文、加密密鑰和認(rèn)證密鑰傳遞給加密模塊;
重加密過程步驟,該步驟具體為:
S201、重加密模塊接收用戶端傳遞過來的重加密密鑰和認(rèn)證變換密鑰;
S202、調(diào)用多項式運(yùn)算部件,對重加密密鑰與一個隨機(jī)數(shù)進(jìn)行處理,輸出處理結(jié)果;
S203、將上一步的處理結(jié)果與原來的密文進(jìn)行運(yùn)算;
S204、調(diào)用消息認(rèn)證碼更新部件,根據(jù)認(rèn)證變換密鑰對原密鑰下的消息認(rèn)證碼進(jìn)行運(yùn)算,將步驟S202中的隨機(jī)數(shù)、步驟S203中的運(yùn)算結(jié)果及新密鑰下的消息認(rèn)證碼一起作為新密鑰下的密文輸出;
加密過程步驟,該步驟具體為:
S301、加密模塊接收消息明文、加密密鑰與一個隨機(jī)數(shù)作為輸入;
S302、調(diào)用多項式運(yùn)算部件,對加密密鑰與該隨機(jī)數(shù)進(jìn)行處理,輸出處理結(jié)果;
S303、將上一步的處理結(jié)果與消息明文進(jìn)行運(yùn)算;
S304、調(diào)用消息認(rèn)證碼生成部件,生成該消息的消息認(rèn)證碼,將步驟S301中的隨機(jī)數(shù)、步驟S303的運(yùn)算結(jié)果及消息認(rèn)證碼一起作為密文輸出;
解密過程步驟,該步驟具體為:
S401、解密模塊接收消息密文。
S402、調(diào)用多項式運(yùn)算部件,對加密密鑰與一隨機(jī)數(shù)進(jìn)行處理,輸出處理結(jié)果;
S403、將上一步的處理結(jié)果與消息密文進(jìn)行運(yùn)算,得到消息明文。
S404、計算解密出的消息明文的消息認(rèn)證碼,若它與收到的消息認(rèn)證碼相同,則返回該明文,否則返回解密失敗。
進(jìn)一步地,所述用戶端生成參數(shù)步驟具體如下:
選擇合適的公共參數(shù)p,q,n,r,p′,q′。其中,p,q是與多項式環(huán)相關(guān)的參數(shù),r為隨機(jī)數(shù),p′,q′是與DDH群相關(guān)的參數(shù);
根據(jù)上述公共參數(shù),生成新的加密密鑰(ske_2)ske_1、新的認(rèn)證密鑰(skm_1)skm_2和群GDDH;
若需要發(fā)起重加密請求,則將ske_2與skm_2傳遞給密鑰更新模塊,生成重加密密鑰rke=ske_2-ske_1,并計算skm_1模q′的逆元然后計算認(rèn)證變換密鑰然后將rke與rkm發(fā)送給代理端的重加密模塊;
若需要對數(shù)據(jù)進(jìn)行加密,則將消息明文m、加密密鑰ske_1和認(rèn)證密鑰skm_1傳遞給加密模塊。
進(jìn)一步地,所述重加密過程步驟具體如下:
接收用戶端傳遞過來的重加密密鑰rke和認(rèn)證變換密鑰rkm;
調(diào)用多項式運(yùn)算部件PRFe,該部件以ske(ske可以是ske_1或ske_2)和r作為輸入,計算其中,運(yùn)算表示計算不大于x的最大整數(shù),運(yùn)算表示將x與p/q相乘的結(jié)果近似到不大于它的最大整數(shù),<x,y>運(yùn)算表示將x和y轉(zhuǎn)換成多項式形式之后,進(jìn)行多項式環(huán)上的多項式乘法;
計算
調(diào)用認(rèn)證碼更新部件,該部件以認(rèn)證變換密鑰rkm與原密鑰下的消息認(rèn)證碼t1作為輸入,計算即為新密鑰下的消息認(rèn)證碼,將隨機(jī)數(shù)r,c2與t2一起作為新的密文輸出。
進(jìn)一步地,所述加密過程步驟具體如下:
接收需要加密的消息m、加密密鑰ske_1與隨機(jī)數(shù)r;
調(diào)用多項式運(yùn)算部件PRFe,該部件以ske_1和r作為輸入,計算其中,運(yùn)算表示將x與p/q相乘的結(jié)果近似到不大于它的最大整數(shù),<x,y>運(yùn)算表示將x和y轉(zhuǎn)換成多項式形式之后,進(jìn)行多項式環(huán)上的多項式乘法;
計算c1=(m+PRFe(ske_1,r))mod q;
調(diào)用認(rèn)證碼生成部件,該部件以消息m、認(rèn)證密鑰skm_1與隨機(jī)數(shù)r作為輸入,首先計算哈希值Hm(r||m),然后使用DDH群映射器將其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后計算消息認(rèn)證碼:
將隨機(jī)數(shù)r,c1與t1一起作為密文輸出。
進(jìn)一步地,所述解密過程步驟具體如下:
S401、解密模塊接收數(shù)據(jù)密文c和消息認(rèn)證碼t;
S402、調(diào)用多項式運(yùn)算部件PRFe,該部件以ske(ske可以是ske_1或ske_2)和r作為輸入,計算其中,運(yùn)算表示將x與p/q相乘的結(jié)果近似到不大于它的最大整數(shù),<x,y>運(yùn)算表示將x和y轉(zhuǎn)換成多項式形式之后,進(jìn)行多項式環(huán)上的多項式乘法;
計算
調(diào)用校驗部件,該部件以消息m、認(rèn)證密鑰skm(skm可以是skm_1或skm_2)與隨機(jī)數(shù)r作為輸入,首先計算哈希值Hm(r||m),然后使用DDH群映射器將其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后計算消息認(rèn)證碼
如果t′=t,則返回m,否則認(rèn)證失敗,認(rèn)為消息被篡改,返回解密失敗。
本發(fā)明相對于現(xiàn)有技術(shù)具有如下的優(yōu)點及效果:
1、本發(fā)明使用了對稱密碼技術(shù),目前的代理重加密方案采用的是公鑰密碼體制,即其加密體系中采用了一對公私鑰。公鑰代理重加密的顯著弊端在于計算量大,加密速度相當(dāng)慢,完全無法適應(yīng)如今大數(shù)據(jù)時代的需求。而本系統(tǒng)采用對稱密碼技術(shù),大大提高了重加密的效率。
2、本發(fā)明在實現(xiàn)代理重加密的同時,還實現(xiàn)了消息的認(rèn)證機(jī)制,能夠認(rèn)證消息是否在重加密的過程中被惡意篡改,從而保護(hù)消息的完整性、正確性。而目前的代理重加密方案,只能做到在重加密的過程中保證數(shù)據(jù)不會泄露,但無法保證惡意代理不會篡改消息內(nèi)容,本系統(tǒng)方案很好地解決了惡意篡改消息的問題。
附圖說明
圖1為本發(fā)明公開的一種基于對稱密碼的可認(rèn)證的代理重加密系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚、明確,以下參照附圖并舉實施例對本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
實施例
本實施例公開了一種基于對稱密碼的可認(rèn)證的代理重加密系統(tǒng),如附圖1所示,該系統(tǒng)包括:
1)用戶端
用戶端用于向代理端發(fā)起重加密請求。它包括隨機(jī)數(shù)生成器、密鑰生成模塊、加密模塊、解密模塊和密鑰更新模塊。當(dāng)需要對數(shù)據(jù)進(jìn)行重加密時,隨機(jī)數(shù)生成器首先生成一個隨機(jī)數(shù),用密鑰生成模塊生成新的加密密鑰和新的認(rèn)證密鑰,然后通過密鑰更新模塊生成重加密密鑰和認(rèn)證變換密鑰,然后將該隨機(jī)數(shù)、重加密密鑰與認(rèn)證變換密鑰一起發(fā)送給代理端的重加密模塊。除了能夠向代理端發(fā)起重加密請求,用戶端還能夠?qū)?shù)據(jù)進(jìn)行加解密操作。
隨機(jī)數(shù)生成器,用于生成系統(tǒng)當(dāng)中用到的隨機(jī)數(shù)。同時,在使用前,隨機(jī)數(shù)生成器還需初始化一些系統(tǒng)參數(shù)。
密鑰生成模塊,用于生成加密密鑰與認(rèn)證密鑰。
加密模塊,用于對消息明文進(jìn)行加密。它包含多項式運(yùn)算部件(一個同態(tài)的PRF(pseudorandom function,偽隨機(jī)函數(shù)))和消息認(rèn)證碼生成部件。其中,多項式運(yùn)算部件首先將輸入的兩個字符串參數(shù)分別轉(zhuǎn)換成兩個多項式的系數(shù),即將它們轉(zhuǎn)換成為兩個多項式,接著對這兩個多項式進(jìn)行多項式環(huán)上的乘法運(yùn)算;消息認(rèn)證碼生成部件用于生成與消息對應(yīng)的認(rèn)證碼,以備后續(xù)檢測之用。
解密模塊,用于對密文進(jìn)行解密。它包含多項式運(yùn)算部件(一個同態(tài)的PRF(pseudorandom function,偽隨機(jī)函數(shù)))與校驗部件。其中,多項式運(yùn)算部件首先將輸入的兩個字符串參數(shù)分別轉(zhuǎn)換成兩個多項式的系數(shù),即將它們轉(zhuǎn)換成為兩個多項式,接著對這兩個多項式進(jìn)行多項式環(huán)上的乘法運(yùn)算;校驗部件用于檢測消息認(rèn)證碼是否正確,若正確則返回解密之后的消息,否則返回解密失敗。
其中,校驗部件包含一個DDH群映射器,用于將一個哈希值映射到DDH群上。
密鑰更新模塊,用于根據(jù)新的加密密鑰和認(rèn)證密鑰,生成重加密密鑰和認(rèn)證變換密鑰。其包含一個逆元生成器,用于生成某個元素的逆元。
2)代理端
代理端保存了用戶的密文,同時對用戶端發(fā)送過來的重加密請求進(jìn)行處理,并對數(shù)據(jù)進(jìn)行重加密并生成新的消息認(rèn)證碼。
代理端包括重加密模塊,用于響應(yīng)用戶請求,根據(jù)用戶端傳遞過來的重加密密鑰和認(rèn)證變換密鑰對數(shù)據(jù)進(jìn)行重加密,并更新消息認(rèn)證碼。該模塊由多項式運(yùn)算部件(一個同態(tài)的PRF(pseudorandom function,偽隨機(jī)函數(shù)))與消息認(rèn)證碼更新部件組成。其中,多項式運(yùn)算部件首先將輸入的兩個字符串參數(shù)分別轉(zhuǎn)換成兩個多項式的系數(shù),即將它們轉(zhuǎn)換成為兩個多項式,接著對這兩個多項式進(jìn)行多項式環(huán)上的乘法運(yùn)算;認(rèn)證碼更新部件根據(jù)用戶端傳遞過來的認(rèn)證變換密鑰,對原來的消息認(rèn)證碼進(jìn)行處理,生成新認(rèn)證密鑰下的消息認(rèn)證碼。
消息認(rèn)證碼生成部件包括一個DDH群映射器,用于將一個哈希值映射到DDH群上。
本實施例還公開了一種基于對稱密碼的可認(rèn)證的代理重加密方法,該方法運(yùn)行在上述公開的基于對稱密碼的可認(rèn)證的代理重加密系統(tǒng)上,包含以下步驟:
S1、用戶端生成參數(shù):
S101、選擇并生成公共參數(shù);
S102、根據(jù)公共參數(shù),通過密鑰生成模塊生成新的加密密鑰、新的認(rèn)證密鑰以及DDH群;
S103、若需要發(fā)起重加密請求,則將新的加密密鑰和新的認(rèn)證密鑰傳遞給密鑰更新模塊,生成重加密密鑰和認(rèn)證變換密鑰。然后將這兩個密鑰發(fā)送給代理端的重加密模塊。
S104、若需要對數(shù)據(jù)進(jìn)行加密,則將消息明文、加密密鑰和認(rèn)證密鑰傳遞給加密模塊。
S2、重加密過程:
S201、重加密模塊接收用戶端傳遞過來的重加密密鑰和認(rèn)證變換密鑰。
S202、調(diào)用多項式運(yùn)算部件,對重加密密鑰與一個隨機(jī)數(shù)(系統(tǒng)的一個公共參數(shù))進(jìn)行處理,輸出處理結(jié)果;
S203、將上一步的處理結(jié)果與原來的密文進(jìn)行運(yùn)算;
S204、調(diào)用消息認(rèn)證碼更新部件,根據(jù)認(rèn)證變換密鑰對原密鑰下的消息認(rèn)證碼進(jìn)行運(yùn)算,將步驟S202中的隨機(jī)數(shù)、步驟S203中的運(yùn)算結(jié)果及新密鑰下的消息認(rèn)證碼一起作為新密鑰下的密文輸出。
S3、加密過程:
S301、加密模塊接收消息明文、加密密鑰與一個隨機(jī)數(shù)(同上,為系統(tǒng)公共參數(shù))作為輸入;
S302、調(diào)用多項式運(yùn)算部件,對加密密鑰與該隨機(jī)數(shù)進(jìn)行處理,輸出處理結(jié)果;
S303、將上一步的處理結(jié)果與消息明文進(jìn)行運(yùn)算;
S304、調(diào)用消息認(rèn)證碼生成部件,生成該消息的消息認(rèn)證碼,將步驟S301中的隨機(jī)數(shù)、步驟S303的運(yùn)算結(jié)果及消息認(rèn)證碼一起作為密文輸出。
S4、解密過程:
S401、解密模塊接收消息密文。
S402、調(diào)用多項式運(yùn)算部件,對加密密鑰與一隨機(jī)數(shù)(同上,為系統(tǒng)公共參數(shù))進(jìn)行處理,輸出處理結(jié)果。
S403、將上一步的處理結(jié)果與消息密文進(jìn)行運(yùn)算,得到消息明文。
S404、計算解密出的消息明文的消息認(rèn)證碼,若它與收到的消息認(rèn)證碼相同,則返回該明文,否則返回解密失敗。
具體應(yīng)用中,所述步驟S1、用戶端生成參數(shù)具體步驟如下:
S101、選擇合適的公共參數(shù)p,q,n,r,p′,q′。其中,p,q是與多項式環(huán)相關(guān)的參數(shù),r為隨機(jī)數(shù),p′,q′是與DDH群相關(guān)的參數(shù);
S102、根據(jù)這些公共參數(shù),生成新的加密密鑰(ske_2)ske_1、新的認(rèn)證密鑰(skm_1)skm_2和群GDDH;
S103、若需要發(fā)起重加密請求,則將ske_2與skm_2傳遞給密鑰更新模塊,生成重加密密鑰rke=ske_2-ske_1,并計算skm_1模q′的逆元然后計算認(rèn)證變換密鑰然后將rke與rkm發(fā)送給代理端的重加密模塊;
S104、若需要對數(shù)據(jù)進(jìn)行加密,則將消息明文m、加密密鑰ske_1和認(rèn)證密鑰skm_1傳遞給加密模塊。
所述步驟S2、重加密過程具體步驟如下:
S201、接收用戶端傳遞過來的重加密密鑰rke和認(rèn)證變換密鑰rkm;
S202、調(diào)用多項式運(yùn)算部件PRFe,該部件以ske(ske可以是ske_1或ske_2)和r作為輸入,計算其中,運(yùn)算表示計算不大于x的最大整數(shù)。運(yùn)算表示將x與p/q相乘的結(jié)果近似到不大于它的最大整數(shù)。<x,y>運(yùn)算表示將x和y轉(zhuǎn)換成多項式形式之后,進(jìn)行多項式環(huán)上的多項式乘法(即將多項式相乘之后的結(jié)果模xn+1);
S203、計算
S204、調(diào)用認(rèn)證碼更新部件,該部件以認(rèn)證變換密鑰rkm與原密鑰下的消息認(rèn)證碼t1作為輸入,計算即為新密鑰下的消息認(rèn)證碼。將隨機(jī)數(shù)r,c2與t2一起作為新的密文輸出。
所述步驟S3、加密過程具體步驟如下:
S301、接收需要加密的消息m、加密密鑰ske_1與隨機(jī)數(shù)r;
S302、調(diào)用多項式運(yùn)算部件PRFe,該部件以ske_1和r作為輸入,計算其中,運(yùn)算表示將x與p/q相乘的結(jié)果近似到不大于它的最大整數(shù)。<x,y>運(yùn)算表示將x和y轉(zhuǎn)換成多項式形式之后,進(jìn)行多項式環(huán)上的多項式乘法(即將多項式相乘之后的結(jié)果模xn+1);
S303、計算c1=(m+PRFe(ske_1,r))mod q;
S304、調(diào)用認(rèn)證碼生成部件,該部件以消息m、認(rèn)證密鑰skm_1與隨機(jī)數(shù)r作為輸入,首先計算哈希值Hm(r||m),然后使用DDH群映射器將其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后計算消息認(rèn)證碼:
將隨機(jī)數(shù)r,c1與t1一起作為密文輸出。
所述步驟S4、解密過程具體步驟如下:
S401、解密模塊接收數(shù)據(jù)密文c和消息認(rèn)證碼t;
S402、調(diào)用多項式運(yùn)算部件PRFe。該部件以ske(ske可以是ske_1或ske_2)和r作為輸入,計算其中,運(yùn)算表示將x與p/q相乘的結(jié)果近似到不大于它的最大整數(shù)。<x,y>運(yùn)算表示將x和y轉(zhuǎn)換成多項式形式之后,進(jìn)行多項式環(huán)上的多項式乘法(即將多項式相乘之后的結(jié)果模xn+1);
S403、計算
S404、調(diào)用校驗部件,該部件以消息m、認(rèn)證密鑰skm(skm可以是skm_1或skm_2)與隨機(jī)數(shù)r作為輸入,首先計算哈希值Hm(r||m),然后使用DDH群映射器將其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后計算消息認(rèn)證碼
如果t′=t,則返回m,否則認(rèn)證失敗,認(rèn)為消息被篡改,返回解密失敗。
下面以一個具體的例子來詳細(xì)介紹系統(tǒng)運(yùn)行過程:
一、系統(tǒng)參數(shù)設(shè)置與哈希函數(shù)選擇:
(1)在本例中,系統(tǒng)運(yùn)行的參數(shù)為
p=10,q=213+1=12289,n=10,r=1,q′=11,p′=2q′+1=23。
(2)選取He(x)=SHA1(x),Hm(x)=SHA256(x);
二、加密過程:
(1)因為n=10,所以消息的長度為10,假設(shè)待加密消息為m=[6,3,9,6,6,9,3,6,3,9](因為采用多項式環(huán)上的多項式乘法的方式進(jìn)行重加密后,解密時會引入{-1,0,1}的誤差,為了使本系統(tǒng)具有容錯性,、將消息選擇為3的倍數(shù))。
(2)計算r的SHA1值:
He(r)=He(1)=SHA(1)=356a192b7913b04c54574d18c28d46e6395428ab
將這十六進(jìn)制的字符串按每16位的長度拆分開:
356a|192b|7913|b04c|5457|4d18|c28d|46e6|3954|28ab,
轉(zhuǎn)換為十進(jìn)制為:
13674|6438|30995|45132|21591|19736|49805|18150|14676|10471
對每一項進(jìn)行模q運(yùn)算,得到多項式系數(shù):
[1358,6438,6417,8265,9302,7447,649,5861,2387,10471]
(3)生成加密密鑰ske:
這里選取加密密鑰ske為
[10471,2387,5861,649,7447,9302,8265,6417,6438,1358],
同樣將其看成是一個多項式的系數(shù)。
(4)計算即首先計算兩個多項式He(r)和ske的乘積:
He(r)=1358+6438*x1+6417*x2+8265*x3+9302*x4
+7447*x5+649*x6+5861*x7+2387*x8+10471*x9
ske=10471+2387*x1+5861*x2+649*x3+7447*x4
+9302*x5+8265*x6+6417*x7+6438*x8+1358*x9,
<He(r),ske>mod(x10+1)=263+7731*x1+4529*x2
+9891*x3+2398*x5+7760*x6+4558*x7
+12026*x8+3178*x9
將每個系數(shù)乘以p/q,并將結(jié)果近似到不大于它的最大整數(shù)(如8.6近似為8、6.1近似為6),可得PRFe(ske,r)的最終結(jié)果為
[0,6,3,8,0,1,6,3,9,2]。
(5)加密:
將m與步驟(4)中的最終結(jié)果相加之后模p:
(m+PRFe(ske,r))mod p=
([6,3,9,6,6,9,3,6,3,9]+[0,6,3,8,0,1,6,3,9,2])mod p=
[6,9,2,4,6,0,9,9,2,1],
即c1=[6,9,2,4,6,0,9,9,2,1]。
三、生成消息認(rèn)證碼:
(1)計算r||m=16396693639,選擇認(rèn)證密鑰skm。
(2)計算這里將Hm選定為SHA256,為了描述方便,將skm選定為3。
計算Hm_DDH=((Hm(r||m)mod q′)2)mod q′=4,
所以,此即為消息認(rèn)證碼。
即密文為
(r,c1,t1)=(1,[6,9,2,4,6,0,9,9,2,1],18)。
四、解密過程:
(1)和加密過程類似,由于用戶自己是知道加密密鑰ske的,所以可以計算PRFe(ske,r)=[0,6,3,8,0,1,6,3,9,2]。
(2)計算
m=(c-PRFe(ske,r))modp=
([6,9,2,4,6,0,9,9,2,1]-[0,6,3,8,0,1,6,3,9,2])mod10=
[6,3,9,6,6,9,3,6,3,9]。
可以看到,正確解密出了原始的消息。
五、重加密過程:
(1)設(shè)原始的加密密鑰為ske_1,新的加密密鑰為ske_2,
ske_1=[10471,2387,5861,649,7447,9302,8265,6417,6438,1358],
ske_2=[10476,2382,5864,679,8447,9342,8295,6517,7438,558]。
計算重加密密鑰:
rke=ske_1-ske_2=[5,12284,3,30,1000,40,30,100,1000,11489]。
rke寫成多項式的形式為:
rke=5+12284*x1+3*x2+30*x3+1000*x4
+40*x5+30*x6+100*x7+1000*x8+11489*x9
計算
計算c2
c2=c1+PRFe(rke,r)=([6,9,2,4,6,0,9,9,2,1]+[8,9,3,7,5,5,2,1,9,4])p
=[4,8,5,1,1,5,1,0,1,5]。
六、更新認(rèn)證碼:
(1)選擇一個新的認(rèn)證密鑰skm_2,為描述方便起見,將skm_2設(shè)為9。
(2)計算認(rèn)證碼更新密鑰
rkm=(skm_2·skm_1-1)mod q′=9·4mod 11=3。
(3)計算新認(rèn)證密鑰下的消息認(rèn)證碼:
此即為新的消息認(rèn)證碼。重加密后的密文為
(r,c2,t2)=(1,[4,8,5,1,1,5,1,0,1,5],13)。
七、重加密后的解密以及驗證消息認(rèn)證碼:
為了驗證經(jīng)過重加密后的消息是否被更改,必須要對消息認(rèn)證碼進(jìn)行驗證。
(1)首先,要對重加密后的密文進(jìn)行解密:
和解密過程類似,但是這里用來解密的密鑰是
ske_2=[10476,2382,5864,679,8447,9342,8295,6517,7438,558]。
由于會有{-1,0,1}的誤差,因此需要采用容錯機(jī)制,在這個實例中,將消息都設(shè)置為3的倍數(shù),因此在產(chǎn)生誤差之時能夠進(jìn)行糾錯:
a.解密結(jié)果中已經(jīng)是3的倍數(shù)的不需要改變;
b.將不是3的倍數(shù)的解密結(jié)果近似到距它最近的3的倍數(shù),即進(jìn)行如下變換:8→9;5→6;2→3;
經(jīng)過糾錯之后,得到的解密結(jié)果為:
m=[6,3,9,6,6,9,3,6,3,9]。
(2)解密之后,用新的認(rèn)證密鑰skm_2計算消息認(rèn)證碼:
新的消息認(rèn)證碼
對比t′和t2,它們相等,說明消息沒有被惡意篡改。
(3)若t′和t2相等,返回解密后的m,否則說明消息被惡意篡改,返回解密失敗。
上述實施例為本發(fā)明較佳的實施方式,但本發(fā)明的實施方式并不受上述實施例的限制,其他的任何未背離本發(fā)明的精神實質(zhì)與原理下所作的改變、修飾、替代、組合、簡化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。