本方法涉及信息技術(shù)領(lǐng)域,特別是一種基于可逆邏輯電路的aes的本地文件加密方法。
背景技術(shù):
一、aes算法
高級(jí)加密標(biāo)準(zhǔn)(英語(yǔ):advancedencryptionstandard,縮寫(xiě):aes)是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的des,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過(guò)五年的甄選流程,高級(jí)加密標(biāo)準(zhǔn)由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(nist)于2001年11月26日發(fā)布于fipspub197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。2006年,高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱密鑰加密中最流行的算法之一。
aes的區(qū)塊長(zhǎng)度固定為128比特,密鑰長(zhǎng)度則可以是128,192或256比特。大多數(shù)aes計(jì)算是在一個(gè)特別的有限域完成的。
aes加密過(guò)程是在一個(gè)4×4的字節(jié)矩陣上運(yùn)作,這個(gè)矩陣又稱為“狀態(tài)(state)”,其初值就是一個(gè)明文區(qū)塊(矩陣中一個(gè)元素大小就是明文區(qū)塊中的一個(gè)byte)。加密時(shí),各輪aes加密循環(huán)(除最后一輪外)均包含4個(gè)步驟:
addroundkey—矩陣中的每一個(gè)字節(jié)都與該次輪秘鑰(roundkey)做xor運(yùn)算;每個(gè)子密鑰由密鑰生成方案產(chǎn)生。
subbytes—通過(guò)非線性的替換函數(shù),用查找表的方式把每個(gè)字節(jié)替換成對(duì)應(yīng)的字節(jié)。
shiftrows—將矩陣中的每個(gè)橫列進(jìn)行循環(huán)式移位。
mixcolumns—為了充分混合矩陣中各個(gè)直行的操作。這個(gè)步驟使用線性轉(zhuǎn)換來(lái)混合每列的四個(gè)字節(jié)。
最后一個(gè)加密循環(huán)中省略mixcolumns步驟,而以另一個(gè)addroundkey取代。
其存在的問(wèn)題在于傳統(tǒng)的邏輯門存在一定位上的扇出,即兩個(gè)輸入,卻只有一個(gè)輸出。這樣便有利于邊信道攻擊中的功耗分析進(jìn)行破解。
二、可逆邏輯線路
可逆邏輯線路是由一系列可逆邏輯門搭建而成的具有一定函數(shù)功能的邏輯電路。它具有如下特點(diǎn):
(1)輸入數(shù)等于輸出數(shù);
(2)沒(méi)有扇入與扇出;
(3)沒(méi)有反饋;
(4)網(wǎng)絡(luò)分層級(jí)聯(lián),有時(shí)為了保證網(wǎng)絡(luò)可逆,需要添加一些無(wú)用的輸出或輸入信息位,即垃圾信息位;
(5)n輸入、輸出向量的可逆網(wǎng)絡(luò)共有2n!種。
三、pkcs5填充
在aes中,算法處理的數(shù)據(jù)塊大小是16字節(jié)。假設(shè)輸入數(shù)據(jù)的最后一個(gè)數(shù)據(jù)塊少于16字節(jié),便需要填充一些數(shù)據(jù)補(bǔ)足16字節(jié),并在解密后能正確地分割出原文與填充數(shù)據(jù)。pkcs5就是為了解決這一類問(wèn)題而約定的一種通用的填充標(biāo)準(zhǔn)。在該方案中,最后一個(gè)數(shù)據(jù)塊使用等于填充字節(jié)數(shù)量的值(16-最后一個(gè)數(shù)據(jù)塊的長(zhǎng)度)作為填充值進(jìn)行填充。如果l是最后一個(gè)(不完整的)數(shù)據(jù)塊,那么它將按如下方式進(jìn)行填充:
l01iflength(l)=15
l0202iflength(l)=14
l0303iflength(l)=13
...
l151515...151515(共計(jì)15個(gè)15)iflength(l)=1
如果最后一個(gè)數(shù)據(jù)塊的長(zhǎng)度能夠被16整除,那么就填充16個(gè)16。
在加密過(guò)程中,上述填充內(nèi)容會(huì)附加到數(shù)據(jù)塊后,并進(jìn)行加密。在解密時(shí),明文的最后一個(gè)字節(jié)就是要丟棄的填充字符數(shù),根據(jù)該字節(jié)內(nèi)容進(jìn)行丟棄填充部分。
在大數(shù)據(jù)發(fā)展的今天,越來(lái)越多的用戶已經(jīng)不僅僅滿足于普通文檔等小文件的加解密,一些大文件的安全也同樣至關(guān)重要。為了保證大文件的加密速度,避免大量數(shù)據(jù)的擁塞和用戶的等待,需對(duì)現(xiàn)有的加密方式進(jìn)行改良。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了克服以上不足,提供一種基于可逆邏輯電路的aes的本地文件加密方法,將可逆邏輯與經(jīng)典加密算法的結(jié)合應(yīng)用在本地文件加密過(guò)程中,既提升了文件加密的速度,同時(shí)大大加強(qiáng)了加密算法的抗攻擊能力。
本發(fā)明的目的通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn):一種基于可逆邏輯電路的aes的本地文件加密方法,具體步驟包括:
(100)、加密過(guò)程:
(110)、以字節(jié)為單位讀取需要加密的原文件的總長(zhǎng)度,并將該文件是否大于8mb的標(biāo)記通過(guò)文件輸出流寫(xiě)在加密文件的前16字節(jié)塊中;
(120)、將原文件通過(guò)文件輸入流分組讀入,每組最大長(zhǎng)度為16字節(jié),若一組數(shù)據(jù)長(zhǎng)度不足16字節(jié),則采用pkcs#5標(biāo)準(zhǔn)填充方法填充至16字節(jié),然后將其存放在字節(jié)數(shù)組中;
(130)、對(duì)字節(jié)數(shù)組中的數(shù)據(jù)采用基于可逆邏輯的aes加密算法進(jìn)行分組加密,得到長(zhǎng)度為16字節(jié)的密文字節(jié)數(shù)組;
(140)、將經(jīng)過(guò)加密后的密文字節(jié)數(shù)組寫(xiě)入到加密文件中,若原文件小于等于8mb,則重復(fù)a-c步驟直至文件末尾;若文件大于8mb,則將文件前8mb重復(fù)a-c步驟進(jìn)行加密,將8mb后的數(shù)據(jù)取aes密鑰拓展生成的若干列與之進(jìn)行異或操作加密。
在本發(fā)明一個(gè)較佳實(shí)施例中,具體步驟還包括:
(200)、解密過(guò)程:
(210)、讀取加密文件的前16字節(jié)塊,獲取原文件的總長(zhǎng)度是否大于8mb的信息,若原文件的總長(zhǎng)度小于等于8mb,則;
(220)、將加密文件通過(guò)文件輸入流分組讀入,每組長(zhǎng)度為16字節(jié),然后將其存放在字節(jié)數(shù)組中;
(230)、對(duì)字節(jié)數(shù)組中的數(shù)據(jù)采用基于可逆邏輯的aes加密算法進(jìn)行分組解密,讀到最后一組字節(jié)數(shù)組時(shí)調(diào)用pkcs#5標(biāo)準(zhǔn)填充方法的還原方法進(jìn)行還原,得到長(zhǎng)度為最長(zhǎng)為16字節(jié)的原文字節(jié)數(shù)組;
(240)、將經(jīng)過(guò)解密后的原文字節(jié)數(shù)組寫(xiě)入到加密文件中,若原文件小于等于8mb,則重復(fù)e-g步驟直至文件末尾;若文件大于8mb,則將文件前8mb重復(fù)e-g步驟進(jìn)行解密,將8mb后的數(shù)據(jù)取aes密鑰拓展生成的若干列與之進(jìn)行異或操作解密。
在本發(fā)明一個(gè)較佳實(shí)施例中,所述原文件包括任意格式的純文本文件、圖片或視頻。
在本發(fā)明一個(gè)較佳實(shí)施例中,所述可逆邏輯的aes算法,具體為:
a、運(yùn)用可逆邏輯門的可逆特性,構(gòu)造相應(yīng)的可逆邏輯電路來(lái)替換、改造傳統(tǒng)aes算法中列混合過(guò)程的電路構(gòu)造,達(dá)到運(yùn)用可逆邏輯門來(lái)替代傳統(tǒng)邏輯門的效果,從而實(shí)現(xiàn)aes算法中的加密過(guò)程;
b、運(yùn)用可逆邏輯門的可逆特性,構(gòu)造相應(yīng)的可逆邏輯電路來(lái)替換、改造傳統(tǒng)aes算法中逆列混合過(guò)程的電路構(gòu)造,達(dá)到運(yùn)用可逆邏輯門來(lái)替代傳統(tǒng)邏輯門的效果,從而實(shí)現(xiàn)aes算法中的解密過(guò)程。
在本發(fā)明一個(gè)較佳實(shí)施例中,所述步驟a中的所述列混合過(guò)程的具體步驟如下:
列混合的操作是通過(guò)矩陣相乘來(lái)實(shí)現(xiàn)的,在算法中,矩陣的乘法和加法都是定義基于z2[x]的不可約多項(xiàng)式m(x)=x8+x4+x3+x+1構(gòu)造的有限域gf(28)上的運(yùn)算,所涉及到的加法和乘法運(yùn)算具體如下:
列混合是針對(duì)字、字節(jié)和位的操作,到最終列混合是針對(duì)位的操作,寫(xiě)成多項(xiàng)式相乘的形式,令
w(x)={03}x3+{01}x2+{01}x+{02}
為了便于計(jì)算操作,寫(xiě)成如下的形式:
所以
經(jīng)過(guò)該乘法計(jì)算后,每一列中的一個(gè)字有下述結(jié)果取代:
通過(guò)構(gòu)造可逆邏輯可逆電路來(lái)實(shí)現(xiàn);
其中b7b6b5b4b3b2b1b0輸入的相應(yīng)的字節(jié),也即是狀態(tài)矩陣中每個(gè)元素的值,其中b(x)為一個(gè)字節(jié);
而一個(gè)狀態(tài)中共含有16個(gè)元素,即含有16個(gè)字節(jié),每一個(gè)字節(jié)都需要進(jìn)行上述的操作,為了簡(jiǎn)化電路,我們將迦羅瓦域中2·b(x)的運(yùn)算封裝成一個(gè)小的可逆邏輯模塊電路。
在本發(fā)明一個(gè)較佳實(shí)施例中,所述步驟b中所述逆列混合過(guò)程的具體步驟如下:
逆列混合變換是列混合變換的逆變換,逆混合變換是在狀態(tài)上對(duì)每一列進(jìn)行運(yùn)算,將每一列看作是4次多項(xiàng)式,將狀態(tài)的列看作gf(28)上的多項(xiàng)式且被一個(gè)固定的多項(xiàng)式w-1(x)模x4+1,其中w-1(x)為:
w-1(x)={03}x3+{01}x2+{01}x+{02}
同樣,這里可以寫(xiě)成矩陣乘法,令
經(jīng)過(guò)該乘法計(jì)算后,一列中的4個(gè)字節(jié)將由下述結(jié)果取代:
本發(fā)明一種基于可逆邏輯電路的aes的本地文件加密方法與現(xiàn)有技術(shù)相比具有以下優(yōu)點(diǎn):
1、aes算法基于可逆邏輯線路構(gòu)造:
基于可逆邏輯構(gòu)造的原理,通過(guò)增加可構(gòu)造密鑰的種類提升了加密線路的抗攻擊性。在n條線路上的有限域內(nèi)可以構(gòu)造的密鑰種類多達(dá)2n!種,而傳統(tǒng)的線路構(gòu)造方法可以實(shí)現(xiàn)的密鑰種類僅有2n!種。
2、提升大文件加密速度:
加密文件中包含文件大小標(biāo)識(shí),對(duì)大文件(大于8mb)采用分段加密的方法,前8mb段采用基于可逆邏輯的aes算法進(jìn)行加密,8mb后的文件段采用異或的方法進(jìn)行加密,對(duì)大文件的加密具有速度優(yōu)勢(shì)。
附圖說(shuō)明
圖1是本發(fā)明基于可逆邏輯電路的aes的本地文件加密方法的軟件實(shí)例圖;
圖2是本發(fā)明基于可逆邏輯電路的aes的本地文件加密方法的用例圖;
圖3是本發(fā)明基于可逆邏輯電路的aes的本地文件加密方法的流程圖;
圖4是本發(fā)明基于可逆邏輯電路的aes的本地文件加密方法的時(shí)序圖;
圖5是aes算法的加密流程圖;
圖6是為實(shí)現(xiàn)aes算法中的列混合過(guò)程而設(shè)計(jì)的可逆邏輯電路;
圖7是可逆邏輯電路數(shù)乘2的電路構(gòu)造;
圖8是u器件;
圖9是可逆邏輯電路;
圖10是逆列混合的電路構(gòu)造圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。在本發(fā)明的一種實(shí)施方式中描述的元素和特征可以與一個(gè)或更多個(gè)其它實(shí)施方式中示出的元素和特征相結(jié)合。應(yīng)當(dāng)注意,為了清楚的目的,說(shuō)明中省略了與本發(fā)明無(wú)關(guān)的、本領(lǐng)域普通技術(shù)人員已知的部件和處理的表示和描述?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有付出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
在大數(shù)據(jù)發(fā)展的今天,越來(lái)越多的用戶已經(jīng)不僅僅滿足于普通文檔等小文件的加解密,一些大文件的安全也同樣至關(guān)重要。盡管結(jié)合了可逆邏輯電路設(shè)計(jì)的aes加密算法在加解密的實(shí)現(xiàn)效率和安全性上足夠可觀,但為了保證大文件的加密速度,避免大量數(shù)據(jù)的擁塞和用戶的等待,仍需對(duì)現(xiàn)有的加密方式進(jìn)行改良。
通過(guò)對(duì)音視頻等大文件的編碼研究我們發(fā)現(xiàn),這一類文件通常會(huì)在文件頭設(shè)置相應(yīng)的信息段。信息段的長(zhǎng)度小但相關(guān)閱讀器只有借助這些信息后才能正常讀寫(xiě)文件供用戶瀏覽。因此在大型文件的加解密中,信息段的內(nèi)容顯得至關(guān)重要。但僅僅對(duì)信息段進(jìn)行加解密任然不能保證安全,剩余部分的大量數(shù)據(jù)仍需要選擇一個(gè)科學(xué)且高效的方式進(jìn)行處理,因此我們對(duì)于大文件與小文件進(jìn)行了一個(gè)分類,對(duì)大文件進(jìn)行了相應(yīng)的切割處理。
結(jié)合圖1-4,本發(fā)明公開(kāi)了一種基于可逆邏輯電路的aes的本地文件加密方法,具體步驟包括:
一、新增信息段
先通過(guò)文件輸入流中的相應(yīng)方法獲取文件的大小,然后將文件的大小與8mb比較,若文件大小小于8mb,則在加密文件的前16字節(jié)塊中全部置0;反之,若文件大小大于8mb,則在加密文件的前16字節(jié)塊中全部置1;
二、加密分類
當(dāng)文件小于等于8m時(shí),則直接對(duì)全文進(jìn)行基于可逆邏輯線路的aes加密。當(dāng)文件大小大于8m時(shí),則將原文切分為兩個(gè)部分,小于等于8m的部分進(jìn)行基于可逆邏輯線路的aes加密,大于8m的部分取aes密鑰拓展生成的第8、12、16、20列數(shù)據(jù)共16字節(jié)與之進(jìn)行異或操作加密,以此在保證效率的同時(shí)也注重了加密的隨機(jī)性與安全。
具體加密步驟如下:
a、以字節(jié)為單位讀取需要加密的任意原文件(包括純文本、圖片、視頻等)的總長(zhǎng)度,并將該文件是否大于8mb的標(biāo)記通過(guò)文件輸出流寫(xiě)在加密文件的前16字節(jié)塊中;
b、將原文件通過(guò)文件輸入流分組讀入,每組最大長(zhǎng)度為16字節(jié),若一組數(shù)據(jù)長(zhǎng)度不足16字節(jié),則采用pkcs#5標(biāo)準(zhǔn)填充方法填充至16字節(jié),然后將其存放在字節(jié)數(shù)組中;
c、對(duì)字節(jié)數(shù)組中的數(shù)據(jù)采用基于可逆邏輯的aes加密算法進(jìn)行分組加密,得到長(zhǎng)度為16字節(jié)的密文字節(jié)數(shù)組;
d、將經(jīng)過(guò)加密后的密文字節(jié)數(shù)組寫(xiě)入到加密文件中,若原文件小于等于8mb,則重復(fù)a-c步驟直至文件末尾;若文件大于8mb,則將文件前8mb重復(fù)a-c步驟進(jìn)行加密,將8mb后的數(shù)據(jù)取aes密鑰拓展生成的第8、12、16、20列數(shù)據(jù)共16字節(jié)與之進(jìn)行異或操作加密;
三、解密分類
當(dāng)文件小于等于8m時(shí),則直接對(duì)全文進(jìn)行基于可逆邏輯線路的aes解密。當(dāng)文件大小大于8m時(shí),則將原文切分為兩個(gè)部分,小于等于8m的部分進(jìn)行基于可逆邏輯線路的aes解密,大于8m的部分取aes密鑰拓展生成的第8、12、16、20列數(shù)據(jù)共16字節(jié)與之進(jìn)行異或操作解密,以此在保證效率的同時(shí)也注重了加密的隨機(jī)性與安全。
具體解密步驟如下:
a、讀取加密文件的前16字節(jié)塊,獲取原文件的總長(zhǎng)度是否大于8mb的信息,若原文件的總長(zhǎng)度小于等于8mb,則;
b、將加密文件通過(guò)文件輸入流分組讀入,每組長(zhǎng)度為16字節(jié),然后將其存放在字節(jié)數(shù)組中;
c、對(duì)字節(jié)數(shù)組中的數(shù)據(jù)采用基于可逆邏輯的aes加密算法進(jìn)行分組解密,讀到最后一組字節(jié)數(shù)組時(shí)調(diào)用pkcs#5標(biāo)準(zhǔn)填充方法的還原方法進(jìn)行還原,得到長(zhǎng)度為最長(zhǎng)為16字節(jié)的原文字節(jié)數(shù)組;
d、將經(jīng)過(guò)解密后的原文字節(jié)數(shù)組寫(xiě)入到加密文件中,若原文件小于等于8mb,則重復(fù)a-c步驟直至文件末尾;若文件大于8mb,則將文件前8mb重復(fù)a-c步驟進(jìn)行解密,將8mb后的數(shù)據(jù)取aes密鑰拓展生成的第8、12、16、20列數(shù)據(jù)共16字節(jié)與之進(jìn)行異或操作解密。
結(jié)合圖5所示,所述基于可逆邏輯的aes算法具體步驟如下:
(1)、運(yùn)用可逆邏輯門的可逆特性,構(gòu)造特殊的可逆邏輯電路來(lái)替換、改造傳統(tǒng)aes算法中列混合過(guò)程的電路構(gòu)造,達(dá)到運(yùn)用可逆邏輯門來(lái)替代傳統(tǒng)邏輯門的效果,從而實(shí)現(xiàn)aes算法中的加密過(guò)程。
(2)、運(yùn)用可逆邏輯門的可逆特性,構(gòu)造特殊的可逆邏輯電路來(lái)替換、改造傳統(tǒng)aes算法中逆列混合過(guò)程的電路構(gòu)造,達(dá)到運(yùn)用可逆邏輯門來(lái)替代傳統(tǒng)邏輯門的效果,從而實(shí)現(xiàn)aes算法中的解密過(guò)程。
列混合過(guò)程改造:
列混合是整個(gè)加密過(guò)程中最為重要的一個(gè)部分,本質(zhì)上來(lái)講列混合的操作是通過(guò)矩陣相乘來(lái)實(shí)現(xiàn)的,在算法中,矩陣的乘法和加法都是定義基于z2[x]的不可約多項(xiàng)式m(x)=x8+x4+x3+x+1構(gòu)造的有限域gf(28)上的運(yùn)算,所涉及到的加法和乘法運(yùn)算的詳細(xì)介紹見(jiàn)下面所述。
列混合是針對(duì)字,字節(jié)和位的操作,到最終列混合說(shuō)到底是針對(duì)位的操作,之前提到列混合的操作相當(dāng)于是通過(guò)矩陣相乘來(lái)實(shí)現(xiàn)的,我們可以用來(lái)寫(xiě)成多項(xiàng)式相乘的形式,令
w(x)={03}x3+{01}x2+{01}x+{02}
為了便于計(jì)算操作,可以寫(xiě)成如下的形式:
所以
經(jīng)過(guò)該乘法計(jì)算后,每一列中的一個(gè)字有下述結(jié)果取代:
這里我們通過(guò)構(gòu)造可逆邏輯可逆電路來(lái)實(shí)現(xiàn),見(jiàn)圖6。
其中b7b6b5b4b3b2b1b0輸入的相應(yīng)的字節(jié),也即是狀態(tài)矩陣中每個(gè)元素的值,圖7就表示迦羅瓦域中2·b(x)的運(yùn)算,其中b(x)為一個(gè)字節(jié)。
而一個(gè)狀態(tài)中共含有16個(gè)元素,即含有16個(gè)字節(jié),每一個(gè)字節(jié)都需要進(jìn)行上面的操作,為了簡(jiǎn)化電路,我們將圖7封裝成一個(gè)小的可逆邏輯模塊電路圖,見(jiàn)圖8所示。
而針對(duì)每一列所進(jìn)行的操作,我們構(gòu)造如下的可逆邏輯電路圖,見(jiàn)圖9。
逆列混合過(guò)程改造:
逆列混合變換是列混合變換的逆變換。逆混合變換是在狀態(tài)上對(duì)每一列進(jìn)行運(yùn)算。將每一列看作是4次多項(xiàng)式。將狀態(tài)的列看作gf(28)上的多項(xiàng)式且被一個(gè)固定的多項(xiàng)式w-1(x)模x4+1,其中w-1(x)為:
w-1(x)={03}x3+{01}x2+{01}x+{02}
同樣這里可以寫(xiě)成矩陣乘法。令
經(jīng)過(guò)該乘法計(jì)算后,一列中的4個(gè)字節(jié)將由下述結(jié)果取代:
構(gòu)造的可逆邏輯電路圖見(jiàn)圖10。
最后應(yīng)說(shuō)明的是:雖然以上已經(jīng)詳細(xì)說(shuō)明了本發(fā)明及其優(yōu)點(diǎn),但是應(yīng)當(dāng)理解在不超出由所附的權(quán)利要求所限定的本發(fā)明的精神和范圍的情況下可以進(jìn)行各種改變、替代和變換。而且,本發(fā)明的范圍不僅限于說(shuō)明書(shū)所描述的過(guò)程、設(shè)備、手段、方法和步驟的具體實(shí)施例。本領(lǐng)域內(nèi)的普通技術(shù)人員從本發(fā)明的公開(kāi)內(nèi)容將容易理解,根據(jù)本發(fā)明可以使用執(zhí)行與在此所述的相應(yīng)實(shí)施例基本相同的功能或者獲得與其基本相同的結(jié)果的、現(xiàn)有和將來(lái)要被開(kāi)發(fā)的過(guò)程、設(shè)備、手段、方法或者步驟。因此,所附的權(quán)利要求旨在在它們的范圍內(nèi)包括這樣的過(guò)程、設(shè)備、手段、方法或者步驟。