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