本發(fā)明涉及信息加密技術(shù)領(lǐng)域,具體地說,是一種用于高速加密的新型對稱性密鑰算法。
背景技術(shù):
隨著計算機(jī)性能的提升和大數(shù)據(jù)的興起,我們對于數(shù)據(jù)的處理計算能力要求成幾何倍數(shù)的提高。同時隨著旁路攻擊的出現(xiàn),許多安全性極高的密碼算法遭到破壞,原來安全度極高的AES(Advanced Encryption Standard)算法在128位制被破解。人們開始設(shè)計尋找加密效率更快、安全性更高的算法。
目前主流的對稱密鑰算法或者流密碼算法比較典型的有RC4算法、RC6算法、AES加密中的Rijndael算法、國密標(biāo)準(zhǔn)SM4算法。
(1)RC4算法:RC4加密算法是RSA三人組中的頭號人物Ronald Rivest在1987年設(shè)計的密鑰長度可變的流加密算法簇。RC4算法的本質(zhì)就是查找表,該表包含所有可能的256個字節(jié)的值的排列。核心部分S-box長度任意,算法速度可以達(dá)到DES加密的十倍左右,具有很高級別的非線性。其原理是初始化和偽隨機(jī)子密碼生成算法。每次生成密鑰流字節(jié)后,查找表就被修改,而查找表總會包含{0,1,2,···,255}的一個排列。因為這種持續(xù)更新,該算法的查找表以及相應(yīng)的加密算法自身都為密碼分析者提供了移動靶。而且由于存在弱密鑰,使得其子密鑰序列在不到100萬字節(jié)內(nèi)就出現(xiàn)了完全的重復(fù),在10萬字節(jié)內(nèi)出現(xiàn)部分重復(fù)。
(2)RC6算法:RC6是作為AES的候選算法提交給NIST(美國國家標(biāo)準(zhǔn)局)的一種新的分組密碼,是在RC5算法的基礎(chǔ)上設(shè)計的。RC5本身因為使用了大量的數(shù)據(jù)依賴循環(huán),所以算法本身非常簡潔。只是在AES候選中,為了滿足征集要求,使用4個寄存器并加進(jìn)了32比特的整數(shù)乘法,用于加強(qiáng)擴(kuò)散的特性。但是正因為使用了32比特的整數(shù)乘法,使得RC6的運(yùn)算速度受到了一定的影響[6]。此外RC6的精準(zhǔn)表示為RC6-w/r/b(字長為w位,r為加密輪數(shù),b為加密密鑰用字節(jié)表示的長度)。RC6是一種安全、架構(gòu)完整而且簡單的區(qū)塊加密法。它提供了較好的測試結(jié)果和參數(shù)方面相當(dāng)大的彈性。RC6可以抵抗所有已知的攻擊,能夠提供AES所要求的安全性,可以說是近幾年來相當(dāng)優(yōu)秀的一種加密法。
(3)AES算法:RC6算法盡管是相當(dāng)優(yōu)秀的一款算法,但仍然只是AES候選算法之一。目前使用的AES加密使用的是Rijndael算法,AES目前成為對稱加密中最重要的國際標(biāo)準(zhǔn)之一。AES加密速度較快,且分組長度靈活,密鑰長度比DES大且可以靈活選擇,可以有效抵抗差分分析和線性分析,目前僅有旁道攻擊是唯一可以成功的攻擊方式(上海交通大學(xué)郁昱教授使用的便是旁路攻擊成功破解AES-128加密)。在加密過程中,AES有十輪,且前九輪都要進(jìn)行字節(jié)代換、行位移、列混淆和輪密鑰加四個算法,第十輪只要進(jìn)行字節(jié)代換、行移位、輪密鑰加三個算法。對于每個分組明文段的加密步驟相比流密碼仍然復(fù)雜的多。
(4)國密SM4算法:國家密碼管理局于2012年3月21日公布了“GM/T0002-2012《SM4分組密碼算法》”,SM4算法分組長度和密鑰長度都是128bit,加密算法和密鑰擴(kuò)展算法都采用32輪非線性迭代結(jié)構(gòu),加解密算法結(jié)構(gòu)相同,只是輪密鑰的使用順序相反。國密SM4的安全性毋庸置疑,但是仍然具備功耗攻擊的可能性[12]。同時因為加密和密鑰擴(kuò)展時都采用了32輪,因此理論上加密速度上仍然不如流密碼。
目前被密碼學(xué)界公認(rèn)的不可攻破的密碼算法為“一次一密體制”,Shannon在《保密系統(tǒng)的信息理論》提出了完善保密的概念,并證明了“一次一密體制”具備完善保密性。其算法方案的基準(zhǔn)原則是:密鑰是隨機(jī)選取的,并且僅使用一次,使用之后便立即銷毀。但是經(jīng)過論證一次密碼本也有兩點不足之處:
(1)明文長度暴露:“一次一密制”密鑰隨機(jī)選擇生成,該密鑰字符串與明文消息具有相同的長度,密鑰與明文消息異或運(yùn)算產(chǎn)生密文。但是對于敵手而言,截獲密文的同時便獲知了明文的長度,假設(shè)發(fā)送的明文消息長度為N,則密文長度也為N,那么當(dāng)N的值小于敵手計算能力時,便毫無保密性可言。此外,因為一次密密鑰是隨機(jī)分布的,而假設(shè)明文具有一定的先驗概率分布,那么根據(jù)密文的后驗概率分布也可以對明文產(chǎn)生一定的威脅。
(2)實際使用不便:假設(shè)對長消息進(jìn)行加密,則需要與消息樣本本身等長的密碼本,因為密碼本正是密鑰自身,所以必須安全的將密鑰發(fā)送給接收方。
基于以上兩點,一次性密碼本并沒有大規(guī)模的投入使用。但“一次性密碼本”的思想?yún)s產(chǎn)生設(shè)計出一些新型算法,如流密碼算法RC4和RC6等算法。但是流密碼算法并不是可證明為安全的,只是犧牲了可證明安全性以向?qū)嵱眯酝讌f(xié)。
中國發(fā)明專利CN201610467088.7,公開日為2016.09.21,公開了一種基于FPGA的在線生成密鑰的AES數(shù)據(jù)加密方法,但是該加密方法加密輪數(shù)過多,加密方式單一,密鑰會重復(fù)出現(xiàn),無法保證數(shù)據(jù)安全。
因此,亟需一種一次一密、加密速度快、密鑰不重復(fù)出現(xiàn)的高效密鑰算法,而目前關(guān)于這種算法還未見報道。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是針對現(xiàn)有技術(shù)中的不足,提供一種用于高速加密的新型對稱型密鑰算法。
為實現(xiàn)上述目的,本發(fā)明采取的技術(shù)方案是:
一種用于高速加密的新型對稱密鑰算法,所述對稱密鑰算法包括加密算法和解密算法,所述的加密算法的步驟包括:
S11:對明文M進(jìn)行分組,得到Mi,Mi∈{M0,M1,···,Mn-1};
S12:利用隨機(jī)數(shù)生成器生成n位基礎(chǔ)密鑰R1和R2;
S13:統(tǒng)計明文長度L,并對Mn-1進(jìn)行明文填充,在明文后首先填充二進(jìn)制密鑰生成器識別碼,計算剩余位數(shù),并用隨機(jī)二進(jìn)制碼填充;
S14:獲得密鑰偏移生成器G;
S15:對Mn-1明文組進(jìn)行加密;
S16:獲得加密密鑰Keyi;
S17:對所有明文組進(jìn)行加密;
S18:對基礎(chǔ)密鑰R1和R2進(jìn)行加密,得到密文密鑰CR;
S19:完成加密,并將密文密鑰CR與密文進(jìn)行傳輸;
所述的解密算法的步驟包括:
S21:對密文密鑰CR進(jìn)行解密,得到基礎(chǔ)密鑰R1和R2;
S22:解密得到Mn-1;
S23:得到密鑰偏移生成器G;
S24:對所有密文進(jìn)行解密,得到明文M。
所述的加密算法的S12步驟中,R1和R2為1024位的二進(jìn)制序列隨機(jī)數(shù),R1∈{0,1}1024,R2∈{0,1}1024。
所述的加密算法的S13步驟中,如果Mn-1∈(0,1000)時,在明文后首先填充二進(jìn)制密鑰生成器識別碼,剩余的位數(shù)使用隨機(jī)二進(jìn)制碼填充,使得Mn-1最終滿足1024位;如果Mn-1∈[1000,1024]之間,那么填充需要擴(kuò)展,即在Mn-1之后首先進(jìn)行密鑰生成器識別碼的填充,并在之后的位數(shù)填充二進(jìn)制序列隨機(jī)數(shù),這樣便組成了兩段1024位的明文組Mn-1和Mn。
所述的二進(jìn)制密鑰生成器識別碼位數(shù)為24位,該識別碼為(0000-1111-1111-1111-1111-0000)。
所述的加密算法的S14步驟中,當(dāng)Mn-1∈(0,1000)時,模運(yùn)算的計算公式為G=1024-L mod1024,當(dāng)Mn-1∈[1000,1024]時,模運(yùn)算的計算公式為G=2048-L mod1024,所述的密鑰偏移生成器G∈[25,1048]。
所述的加密算法的S15步驟中,對Mn-1明文組進(jìn)行加密時,將基礎(chǔ)密鑰R1和R2分別根據(jù)n的值進(jìn)行左偏移和右偏移,異或加密得到密文;當(dāng)Mn-1∈(0,1000)時,計算公式為當(dāng)Mn-1∈[1000,1024]時,計算公式為
所述的加密算法的S16步驟中,將子明文組i代入密鑰偏移生成器G中,計算出偏轉(zhuǎn)量Xj,計算公式為Xj=(G mod512×(i+G)+19)mod512,并將偏移量代入基礎(chǔ)密鑰R2中進(jìn)行左循環(huán)或右循環(huán)產(chǎn)生偏移密鑰R2(j),計算公式為R2(j)=R2<<Xj Xj mod2=0或R2(j)=R2>>XjXj mod2≠0;基礎(chǔ)密鑰R1則每次右偏移i位得到R1(i),計算公式為R1(i)=R1>>(imod1024);將R1(i)和R2(j)進(jìn)行異或運(yùn)算得到加密密鑰Keyi,計算公式為
所述的加密算法的S17步驟中,從M0開始到Mn-2,將加密密鑰Keyi與相對應(yīng)明文進(jìn)行異或加密,得到密文Ci,計算公式為
所述的加密算法的S18步驟中,對基礎(chǔ)密鑰R1和R2進(jìn)行RSA加密,采用最有非對稱加密(RSA-OAEP)方案得到密文密鑰CR。
所述的對稱密鑰算法每加密n個明文組時需要更換基礎(chǔ)密鑰,其步驟如下:
S31:一組基礎(chǔ)密鑰R1和R2,其加密的明文空間為n×n位,這個加密后的等量空間為密文塊(C-Block);
S32:當(dāng)需要對基礎(chǔ)密鑰進(jìn)行重新構(gòu)造時,新的基礎(chǔ)密鑰從前一個密文塊中選擇;
S33:新的基礎(chǔ)密鑰為R1’和R2’;
在S33步驟中,基礎(chǔ)密鑰R1’的計算公式為基礎(chǔ)密鑰R2’的計算公式為或其中,Cx和Cy中的x和y,分別代表加密后的前一密文塊內(nèi)從第一段開始的密文段數(shù)(與明文代表的段數(shù)相同),其計算公式分別為x=(17×i+G)mod512和y=(13×(i+G)+i)mod512+512,R1’中的R1>>x與Cx中的R1(i)完全相同,R2’中的Xj(y)就是明文段數(shù)為y的情況下的R2偏移量,偏移后與R2(j)完全相同;將R1’和R2’進(jìn)行異或運(yùn)算得到加密密鑰Key,計算公式為
所述的對稱密鑰算法還包括摘要算法,其步驟如下:
S41:加密前,首先使用摘要算法對明文進(jìn)行摘要得到哈希值,即Hash(Mess);
S42:將哈希值存儲在密文的末尾,并一通進(jìn)行傳輸保存;
S43:解密前,將哈希值單獨取出;
S44:使用摘要算法對解密后的明文進(jìn)行摘要得到新的哈希值,即Hash(Mess’);
S45:將Hash(Mess)與Hash(Mess’)進(jìn)行對比,若Hash(Mess)=Hash(Mess’),則密文未被篡改,證明信息完整性或通信線路安全性與可靠性;;若Hash(Mess)≠Hash(Mess’),則密文篡改,存儲環(huán)境或通信線路存在隱患,需要及時保護(hù)。
本發(fā)明優(yōu)點在于:
1、通過密文塊(C-Block)的設(shè)計,降低密鑰重復(fù)的概率至0;
2、每個明文段加密的子密鑰為唯一且隨機(jī)的,提高了安全性;
3、加密速度快,僅需要進(jìn)行兩次偏移、兩次模運(yùn)算、一次乘法、兩次加法、一次判斷、兩次異或共10步基本運(yùn)算操作。
附圖說明
附圖1是本發(fā)明的一種用于高速加密的新型對稱密鑰算法的加密算法的明文分組填充的示意圖。
附圖2是本發(fā)明的一種用于高速加密的新型對稱密鑰算法的加密算法的明文加密的示意圖。
附圖3是本發(fā)明的一種用于高速加密的新型對稱密鑰算法的加密算法的生成新基礎(chǔ)密鑰的示意圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明提供的具體實施方式作詳細(xì)說明。
實施例1
本發(fā)明的一種用于高速加密的新型對稱密鑰算法的加密算法具體流程如下:
A1:設(shè)明文總體為M,對明文總體M進(jìn)行分組得到Mi,Mi分組長度為1024bit(或者是1024bit的整數(shù)倍),因此有Mi∈{M0,M1,···,Mn-1};
A2:利用隨機(jī)數(shù)生成器生成兩串1024位的二進(jìn)制序列隨機(jī)數(shù)R1和R2,R1和R2為基礎(chǔ)密鑰,R1∈{0,1}1024,R2∈{0,1}1024;
A3:如圖1所示,將明文M轉(zhuǎn)化為二進(jìn)制序列Mess,統(tǒng)計明文長度L,計算公式為(1);最后一組Mn-1可能不滿1024位,所以需要對Mn-1進(jìn)行填充;如果Mn-1∈(0,1000)時,在明文后首先填充二進(jìn)制密鑰生成器識別碼,該識別碼為24位,識別碼為(0000-1111-1111-1111-1111-0000),剩余的位數(shù)使用隨機(jī)二進(jìn)制碼填充,使得Mn-1最終滿足1024位,并通過模運(yùn)算獲得密鑰偏移生成器G,計算公式為(2);如果Mn-1∈[1000,1024]之間,那么填充需要擴(kuò)展,即在Mn-1之后首先進(jìn)行密鑰生成器識別碼的填充,并在之后的位數(shù)填充二進(jìn)制序列隨機(jī)數(shù),這樣便組成了兩段1024位的明文組Mn-1和Mn,并通過模運(yùn)算獲得密鑰偏移生成器G,計算公式為(3);密鑰偏移生成器G的取值范圍為(4);
L=strlen(Mess) (1)
G=1024-L mod1024Mn-1∈(0,1000) (2)
G=2048-L mod1024Mn-1∈[1000,1024] (3)
G∈[25,1048] (4)
A4:如圖2所示,對Mn-1明文組進(jìn)行加密,將基礎(chǔ)密鑰R1和R2分別根據(jù)n的值進(jìn)行左偏移和右偏移,異或加密得到密文;當(dāng)Mn-1∈(0,1000)時,計算公式為(5);當(dāng)Mn-1∈[1000,1024]時,計算公式為(6);
A5:將子明文組i代入密鑰偏移生成器G中,計算出偏轉(zhuǎn)量Xj,計算公式為(7),并將偏移量代入基礎(chǔ)密鑰R2中進(jìn)行左循環(huán)或右循環(huán)產(chǎn)生偏移密鑰R2(j),計算公式為(8)或(9);基礎(chǔ)密鑰R1則每次右偏移i位得到R1(i),計算公式為(10);將R1(i)和R2(j)進(jìn)行異或運(yùn)算得到加密密鑰Keyi,計算公式為(11);
Xj=(G mod512×(i+G)+19)mod512 (7)
R2(j)=R2<<Xj Xjmod2=0 (8)
R2(j)=R2>>Xj Xjmod2≠0 (9)
R1(i)=R1>>(i mod1024) (10)
A6:從M0開始到Mn-2,將加密密鑰Keyi與相對應(yīng)明文進(jìn)行異或加密,得到密文Ci,計算公式為(12);
A7:對基礎(chǔ)密鑰R1和R2進(jìn)行RSA加密,采用最有非對稱加密(RSA-OAEP)方案得到密文密鑰CR,并將信息傳輸給信息接收方;
A8:完成加密,設(shè)任意一段密文為Ci,則Ci∈{C0,C1,···,Cn-1,(Cn)}。
實施例2
本發(fā)明的一種用于高速加密的新型對稱密鑰算法的解密算法具體流程如下:
B1:接收到密文密鑰CR,對其進(jìn)行RSA-OAEP方案解密,分別得到基礎(chǔ)密鑰R1和R2;
B2:首先截取密文的最后2048位二進(jìn)制序列,使用解密得到的基礎(chǔ)密鑰R1和R2進(jìn)行與加密同向的偏移n位后再進(jìn)行異或運(yùn)算,得到2048位包含Mn-1的二進(jìn)制序列;
B3:對2048位包含Mn-1的二進(jìn)制序列進(jìn)行搜索并識別填充時產(chǎn)生的24位密鑰生成器識別碼,并得到密鑰偏移生成器G,之后拋棄隨機(jī)數(shù)序列得到Mn-1明文組,計算公式為(13);
B4:從C0正向開始,根據(jù)密文組數(shù)量i一次進(jìn)行運(yùn)算得到R1(i)和每組密文基礎(chǔ)密鑰R2的偏移量Xj,并進(jìn)行密鑰偏移后得到R2(j),兩者異或運(yùn)算得到加密密鑰Keyi,將加密密鑰Keyi與密文結(jié)合得到明文,計算公式為(14);依次解密并得到全部明文M,M=M0+M1+…+Mn-1。
實施例3
為了更加安全的進(jìn)行加密,本發(fā)明的一種用于高速加密的新型對稱密鑰算法的基礎(chǔ)密鑰會進(jìn)行重新構(gòu)造。
初始加密產(chǎn)生的一組兩串隨機(jī)數(shù)序列R1和R2,首先在對Mn-1進(jìn)行加密后,再依次從M0開始進(jìn)行相對應(yīng)的偏移加密,對于基礎(chǔ)密鑰R1,每個明文組加密中都相當(dāng)于向右移一位,因此當(dāng)加密到M1023時,R1會出現(xiàn)重復(fù),因此,當(dāng)Mi中i mod 1024-1=0時,需要對基礎(chǔ)密鑰進(jìn)行重新構(gòu)造。
如圖3所示,基礎(chǔ)密鑰重新構(gòu)造的流程如下:
C1:一組基礎(chǔ)密鑰R1和R2,其加密的明文空間為1024×1024位,這個加密后的等量空間為密文塊(C-Block);
C2:當(dāng)需要對基礎(chǔ)密鑰進(jìn)行重新構(gòu)造時,新的基礎(chǔ)密鑰從前一個密文塊中選擇;
C3:新的基礎(chǔ)密鑰為R1’和R2’,R1’的計算公式為(15),R2’的計算公式為(16)或(17),
其中,Cx和Cy中的x和y,分別代表加密后的前一密文塊內(nèi)從第一段開始的密文段數(shù)(與明文代表的段數(shù)相同),其計算公式分別為(18)和(19),
x=(17×i+G)mod512 (18)
y=(13×(i+G)+i)mod512+512 (19)
R1’中的R1>>x與Cx中的R1(i)完全相同,R2’中的Xj(y)就是明文段數(shù)為y的情況下的R2偏移量,偏移后與R2(j)完全相同;將R1’和R2’按照A5的步驟進(jìn)行異或運(yùn)算得到加密密鑰Key,計算公式為(20)。
實施例4
為了保持密文的完整性,本發(fā)明的一種用于高速加密的新型對稱密鑰算法還包括摘要算法,其流程如下:
D1:加密前,首先使用摘要算法對明文進(jìn)行摘要得到哈希值,即Hash(Mess);
D2:將哈希值存儲在密文的末尾,并一通進(jìn)行傳輸保存;
D3:解密前,將哈希值單獨取出;
D4:使用摘要算法對解密后的明文進(jìn)行摘要得到新的哈希值,即Hash(Mess’);
D5:將Hash(Mess)與Hash(Mess’)進(jìn)行對比,若Hash(Mess)=Hash(Mess’),則密文未被篡改,證明信息完整性或通信線路安全性與可靠性;;若Hash(Mess)≠Hash(Mess’),則密文篡改,存儲環(huán)境或通信線路存在隱患,需要及時保護(hù)。
本發(fā)明的一種用于高速加密的新型對稱密鑰算法的優(yōu)點在于,通過密文塊(C-Block)的設(shè)計,將密鑰重復(fù)的概率降低為0;并且密文塊內(nèi)產(chǎn)生的密鑰基于前一密文塊的明文內(nèi)容,即要破解加密密鑰必須先知道前一密文塊內(nèi)隨機(jī)明文段的內(nèi)容,因此保證了每個明文段加密的子密鑰是獨一無二且隨機(jī)的,達(dá)到了一次性密碼本的加密要求,由此保證了算法的絕對安全性,可以有效抵御各種類型的攻擊;單明文段加密操作僅有兩次偏移、兩次模運(yùn)算、一次乘法、兩次加法、一次判斷、兩次異或共10步基本運(yùn)算操作,沒有AES和SM4的多輪數(shù)和其他復(fù)雜步驟,對于RC6不存在大整數(shù)模乘運(yùn)算,因此算法加密速度可以更快;
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明方法的前提下,還可以做出若干改進(jìn)和補(bǔ)充,這些改進(jìn)和補(bǔ)充也應(yīng)視為本發(fā)明的保護(hù)范圍。