專利名稱:一種基于aes算法的加解密方法及加解密器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信安全技術(shù)領(lǐng)域,尤其涉及一種加解密技術(shù)。
背景技術(shù):
AES算法是Advanced Encrypt Standard的簡稱,它是美國國家標(biāo)準(zhǔn)委員會NIST公布的一種新型對稱密鑰加密算法標(biāo)準(zhǔn)。AES算法由于具有應(yīng)用范圍廣,等待時間短,容易隱藏,吞吐量高的優(yōu)點,因而,AES算法被應(yīng)用在越來越多的安全領(lǐng)域。
AES算法作為一種替代數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)的新型對稱密鑰加密算法標(biāo)準(zhǔn),是一個迭代分組密碼算法,分組長度為128bit,密鑰長度可以指定為128bit、192bit或256bit。AES算法的密鑰迭代由三個稱之為層的可逆變換組成,這三個層分別是線性混合層、非線性層和密鑰加層。
圖1是現(xiàn)有的AES算法流程圖,如圖1所示,以128位的密鑰為例,現(xiàn)有的AES算法流程如下加密操作流程待加密的數(shù)據(jù)按128位分組輸入,在進(jìn)行第一次加密迭代之前,首先進(jìn)行密鑰運算操作,之后啟動Nr次加密迭代操作流程;在Nr次加密迭代過程中,加密數(shù)據(jù)首先經(jīng)過S盒置換和字節(jié)的移位操作,之后進(jìn)行混列變換,最后進(jìn)行密鑰運算操作;在最后一次加密迭代的時候省略混列變換操作,輸出加密以后的數(shù)據(jù);解密操作流程待解密的數(shù)據(jù)按128位分組輸入,在進(jìn)行第一次解密迭代之前,首先進(jìn)行密鑰運算操作,之后啟動Nr次解密迭代操作流程;在Nr次解密迭代過程中,與加密流程不同的是,解密首先進(jìn)行的是字節(jié)的移位操作,再進(jìn)行S盒的逆置換,之后進(jìn)行密鑰運算操作,最后進(jìn)行混列逆變換;在最后一次解密迭代的時候省略混列逆變換步驟,輸出解密以后的數(shù)據(jù)。
AES的加密操作和解密操作使用的是相同的子密鑰值,只是使用的子密鑰的順序不相同。例如,在加密操作的時候,依次使用K0,K1,...,KNr-1,KNr。而在解密操作的時候,依次使用KNr,KNr-1,...,K1,K0。
AES算法在一定程度上大大提高了安全性,但是除了關(guān)注算法的安全性以外,算法模塊執(zhí)行的效率和面積是需要解決的重要問題。而現(xiàn)有的AES算法,其加密和解密流程基本上是一致的,但是,每一輪的操作,以及使用的子密鑰是不同的,在硬件設(shè)計的時候,兩種操作的基本單元都不能共享,這必然會造成較大的面積開銷,電路的整體規(guī)模較大,浪費功耗和成本。
首先,在實現(xiàn)一個S盒置換模塊的過程中,就需要用比較多的邏輯電路。具體來說,一個查找表需要800個等效的邏輯門,為了保證設(shè)計的預(yù)期速度,一般采用16×16的查找表來實現(xiàn)S盒置換(SubByte),對于S盒的逆置換(InvSubByte)也同樣使用16×16的查找表來實現(xiàn)。而S盒不光用在加密流程中,在密鑰擴(kuò)展操作中,同樣要使用S盒。以輸入為128位的密鑰為例,如果執(zhí)行并行算法,需要20個S盒置換,16個S盒的逆置換,即總共需要36個16×16的查找表,這在設(shè)計上,需要耗費很大的面積開銷。
第二,現(xiàn)有的AES算法混列變換(MixColumn)和混列逆變換(InvMixColumn)分別使用一個獨立的單元進(jìn)行操作,使得加密和解密需要使用不同的模塊,不僅不利于AES模塊化的實現(xiàn),更直接的增加了面積上的開銷。
第三,現(xiàn)有的AES密鑰擴(kuò)展算法在實現(xiàn)解密操作的時候,為了保證AES算法實現(xiàn)的效率,通常是在運算開始的時候,將所有的子密鑰計算出來,并將結(jié)果寄存在密鑰存儲單元里面,以供每輪密鑰迭代使用。這種方法在電路設(shè)計實現(xiàn)的時候,也會造成較大的面積開銷,例如對于256位的密鑰,就需要14×128位的密鑰存儲單元。
因此有必要簡化AES算法設(shè)計的電路,降低功耗和成本。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于,提供一種基于AES算法的加解密方法及基于AES算法的加解密器,可簡化AES算法設(shè)計的電路,減小面積開銷,降低功耗和成本。
為了解決上述技術(shù)問題,本發(fā)明提出了一種基于AES算法的加解密方法,包括以下步驟
a、根據(jù)密鑰長度確定迭代次數(shù)Nr;b、初始化數(shù)據(jù),輸入的待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行第一次迭代前,將其與子密鑰進(jìn)行異或操作;c、加載加密控制信號或解密控制信號;d、在加密控制信號的控制下在加解密迭代復(fù)用模塊上進(jìn)行加密的Nr次迭代操作,在解密控制信號的控制下在加解密迭代復(fù)用模塊上進(jìn)行解密的Nr次迭代操作。
其中,步驟d還包括以下步驟在加密控制信號的控制之下,加解密迭代復(fù)用模塊處于加密導(dǎo)通狀態(tài),輸入的待加密的數(shù)據(jù)在該模塊上進(jìn)行Nr次加密迭代;在解密控制信號的控制之下,加解密迭代復(fù)用模塊處于解密導(dǎo)通狀態(tài),輸入的待解密的數(shù)據(jù)在該模塊上進(jìn)行Nr次解密迭代。
其中,所述Nr次加密迭代中的單次加密迭代的步驟為f1、對輸入的數(shù)據(jù)進(jìn)行S盒置換操作;f2、對經(jīng)S盒置換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;f3、將經(jīng)數(shù)據(jù)行移位變換輸出的數(shù)據(jù)進(jìn)行混列變換操作;f4、在加密控制信號的控制下,由密鑰存儲單元里存儲的前一次加密迭代的子密鑰獲得本次加密迭代的子密鑰;f5、將經(jīng)混列變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行密鑰運算操作;在最后一次加密迭代的時候省略步驟f3;需要指出的是,在S盒置換中,所述的數(shù)據(jù)在進(jìn)行第一次加密迭代時,為經(jīng)過步驟b初始化的數(shù)據(jù);在以后的單次加密迭代過程中,為經(jīng)過上一次解密迭代操作的數(shù)據(jù);所述Nr次解密迭代中的單次解密迭代的步驟為g1、對輸入的數(shù)據(jù)進(jìn)行S盒逆置換操作;g2、對經(jīng)S盒逆置換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;g3、在解密控制信號的控制下,由密鑰存儲單元里存儲的前一次解密迭代的子密鑰獲得本次解密迭代的子密鑰;g4、將經(jīng)數(shù)據(jù)行逆移位變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行密鑰運算操作;
g5、將經(jīng)密鑰運算變換輸出的數(shù)據(jù)進(jìn)行混列逆變換操作;在最后一次解密迭代的時候省略步驟g5。
需要指出的是,在S盒逆置換中,所述的數(shù)據(jù)在進(jìn)行第一次解密迭代時,為經(jīng)過步驟b初始化的數(shù)據(jù);在以后的單次解密迭代過程中,為經(jīng)過上一次解密迭代操作的數(shù)據(jù);可選擇地,Nr次解密迭代中的單次解密迭代的步驟為h1、對輸入的數(shù)據(jù)進(jìn)行S盒逆置換操作;h2、對經(jīng)S盒逆置換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;h3、將經(jīng)數(shù)據(jù)行逆移位變換輸出的數(shù)據(jù)進(jìn)行混列逆變換操作;h4、在解密控制信號的控制下,由密鑰存儲單元里存儲的前一次解密迭代的子密鑰獲得本次解密迭代的子密鑰;h5、將經(jīng)子密鑰生成步驟產(chǎn)生的用于本次解密迭代的解密子密鑰進(jìn)行混列逆變換;h6、將經(jīng)混列逆變換輸出的數(shù)據(jù)與該次輸入的經(jīng)過混列逆變換的子密鑰進(jìn)行密鑰運算操作;在最后一次密鑰迭代的時候省略步驟h3和步驟h5,直接將步驟h2變換輸出的數(shù)據(jù)與步驟h4生成的子密鑰進(jìn)行密鑰運算操作。
需要指出的是,在S盒逆置換中,所述的數(shù)據(jù)在進(jìn)行第一次解密迭代時,為經(jīng)過步驟b初始化的數(shù)據(jù);在以后的單次解密迭代過程中,為經(jīng)過上一次解密迭代操作的數(shù)據(jù);其中,所述的步驟f1和步驟g1是通過S盒置換復(fù)用子模塊來實現(xiàn)的,所述步驟f1具體包括以下步驟在加密控制信號的控制下,經(jīng)過初始化的數(shù)據(jù)通過查找域元的逆元查找表,矩陣乘,向量加操作,完成S盒的置換;所述步驟g1具體包括以下步驟在解密控制信號的控制下,經(jīng)過初始化的數(shù)據(jù)通過向量加,矩陣乘,查找域元的逆元查找表,完成S盒的逆置換。
其中,所述步驟f1和步驟h1也是是通過S置換復(fù)用子模塊來實現(xiàn)的,其實現(xiàn)步驟與步驟f1和步驟g1在S盒置換復(fù)用子模塊上實現(xiàn)步驟一樣。
其中,所述步驟f3和步驟g5是在混列變換復(fù)用子模塊上實現(xiàn)的,所述步驟f3具體包括以下步驟在加密控制信號的控制之下,混列變換復(fù)用電路處于混列變換導(dǎo)通狀態(tài),進(jìn)行混列變換操作;在解密控制信號的控制之下,混列變換復(fù)用電路處于混列逆變換狀態(tài),進(jìn)行混列逆變換操作。
其中,混列變換復(fù)用電路是由域元的加法和域元的乘2邏輯電路實現(xiàn)的。
需要說明的是,首先,混列變換復(fù)用電路可以供輸入數(shù)據(jù)的4列,共16個字節(jié)實現(xiàn)混列變換復(fù)用該電路,進(jìn)行混列變換時,是以一列的四個字節(jié)為單位輸入,經(jīng)過變換以后得到對應(yīng)列的四個字節(jié),其他列的處理參照上述操作執(zhí)行;第二,該復(fù)用電路還可以實現(xiàn)混列變換和混列逆變換的復(fù)用,混列逆變換參照混列變換的步驟進(jìn)行。
其中,所述步驟f3和步驟h3也是在混列變換復(fù)用子模塊上實現(xiàn)的,其實現(xiàn)步驟與步驟f3和步驟g5在混列變換復(fù)用子模塊上實現(xiàn)的步驟一樣。
可選擇地,所述步驟f3和步驟g5在混列變換復(fù)用子模塊上還有另外一種實現(xiàn)方式,所述步驟f3具體包括以下步驟bb1、在加密信號的控制下,混列變換復(fù)用單元將輸入的四個字節(jié)做混列變換,得到一個字節(jié)的結(jié)果;所述的四個字節(jié)為做混列變換的數(shù)據(jù)中的一列的四個字節(jié);所得到一個字節(jié)的結(jié)果為該列經(jīng)過混列變換以后的對應(yīng)列的一個字節(jié);bb2、在加密控制信號的控制之下,將當(dāng)前的四個字節(jié)做移字節(jié)處理,并重用步驟bb1中得到一個字節(jié)結(jié)果的混列變換結(jié)構(gòu),得到該列經(jīng)混列變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列變換;bb3、其他列的數(shù)據(jù)做混列變換參照上述步驟進(jìn)行;所述步驟g5具體包括以下步驟bb4、在解密信號的控制下,混列變換復(fù)用單元將輸入的四個字節(jié)做混列逆變換,得到一個字節(jié)的結(jié)果;所述的四個字節(jié)為做混列逆變換的數(shù)據(jù)中的一列的四個字節(jié);所得到一個字節(jié)的結(jié)果為該列經(jīng)過混列逆變換以后的對應(yīng)列的一個字節(jié);bb5、在解密控制信號的控制之下,將當(dāng)前的四個字節(jié)做移字節(jié)處理,并重用步驟bb4中得到一個字節(jié)結(jié)果的混列逆變換結(jié)構(gòu),得到該列經(jīng)混列逆變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列逆變換;
bb6、其他列的數(shù)據(jù)做混列逆變換參照上述步驟進(jìn)行。
其中,所述混列變換復(fù)用單元是域元的加法和域元的乘2邏輯電路。
需要指出的是,該混列變換復(fù)用單元是上述混列變換復(fù)用電路中產(chǎn)生第一行字節(jié)的電路。
其中,所述步驟f3和步驟h3在混列變換復(fù)用子模塊上也有另一種實現(xiàn)方式的,其實現(xiàn)步驟與步驟f3和步驟g5在混列變換復(fù)用子模塊上的另一種實現(xiàn)方式的步驟一樣。
相應(yīng)地,本發(fā)明還提供了基于AES算法的加解密器,包括子密鑰產(chǎn)生模塊用于在單次加密迭代或單次解密迭代之前,生成對待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行初始化時進(jìn)行密鑰運算所需的子密鑰,在單次加密迭代或單次解密迭代進(jìn)行時,動態(tài)生成加密迭代或解密迭代過程中進(jìn)行密鑰運算的所需子密鑰;初始化數(shù)據(jù)模塊將待加密或者待解密的數(shù)據(jù)進(jìn)行第一次迭代前,與所述子密鑰產(chǎn)生模塊產(chǎn)生的子密鑰進(jìn)行密鑰運算操作;信號控制模塊用于生成并加載加密控制信號或解密控制信號,分別用于控制對數(shù)據(jù)進(jìn)行加密或是解密操作;加解密迭代復(fù)用模塊在信號控制模塊加載的加密控制信號的控制下,在加解密迭代復(fù)用模塊上進(jìn)行加密的Nr次迭代操作,在信號控制模塊加載的解密控制信號的控制下,在加解密迭代復(fù)用模塊上進(jìn)行解密的Nr次迭代操作。
其中,子密鑰產(chǎn)生模塊用于根據(jù)供加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰動態(tài)擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰,包括密鑰存儲單元,用于存儲加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰以及由其動態(tài)擴(kuò)展產(chǎn)生的相繼輪次的子密鑰;密鑰擴(kuò)展單元,用于在加密控制信號的控制下,根據(jù)密鑰存儲單元存儲的加密過程中進(jìn)行密鑰運算的的子密鑰擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰;或用于在解密控制信號的控制下,根據(jù)密鑰存儲單元存儲的解密過程中進(jìn)行密鑰運算的子密鑰擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰。
需要說明的是,所述的加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰包括對待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行初始化時進(jìn)行密鑰運算所需的子密鑰和加密迭代或解密迭代過程中進(jìn)行密鑰運算的所需子密鑰;
并且,密鑰擴(kuò)展單元是由邏輯電路實現(xiàn)的,有兩種處理方式第一種方式在本輪次進(jìn)行密鑰運算時,密鑰擴(kuò)展單元根據(jù)密鑰存儲單元存儲的前一輪次進(jìn)行密鑰運算的子密鑰擴(kuò)展生成當(dāng)前輪次密鑰運算所需的子密鑰;第二種方式在本輪次密鑰運算結(jié)束時,密鑰擴(kuò)展單元根據(jù)密鑰存儲單元存儲的當(dāng)前輪次進(jìn)行密鑰運算的子密鑰擴(kuò)展生成下一輪次進(jìn)行密鑰運算所需的子密鑰。
其中,加解密迭代復(fù)用模塊,包括以下子模塊數(shù)據(jù)行移位子模塊用于在加密控制信號的控制下,對輸入其中的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;混列變換復(fù)用子模塊在加密控制信號控制的控制下,對輸入其中的數(shù)據(jù)進(jìn)行混列變換操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)進(jìn)行混列逆變換操作;密鑰運算子模塊在加密控制信號或者解密控制信號的控制下,將輸入其中的數(shù)據(jù)與該次輸入子密鑰進(jìn)行按位異或操作;其中,在最后一次加密或解密迭代時,所述混列變換復(fù)用子模塊不工作。
其中,S盒置換復(fù)用子模塊還包括以下單元S盒置換單元用于在加密控制信號的控制下,通過查找域元的逆元查找表,矩陣乘,向量加操作,完成對數(shù)據(jù)的S盒的置換;S盒逆置換單元用于在解密控制信號的控制下,通過向量加,矩陣乘,查找域元的逆元查找表,完成對數(shù)據(jù)的S盒的逆置換。
其中,S盒置換單元所查找的域元的逆元查找表與S盒逆置換單元所查找的域元的逆元查找表是同一個域元的逆元查找表。
其中,域元的逆元查找表可以是8位有限域上的逆元查找表,也可以是4位有限域上的逆元查找表。
其中,混列變換復(fù)用子模塊包括混列變換復(fù)用電路在加密控制信號的控制之下,選通混列變換電路,完成對數(shù)據(jù)的混列變換操作;在解密控制信號的控制之下,選通混列逆變換電路,完成對數(shù)據(jù)的混列逆變換操作。
其中,混列變換復(fù)用電路由域元的加法和域元的乘2邏輯電路組成。
可選擇地,混列變換復(fù)用子模塊還可以包括移字節(jié)處理單元用于將當(dāng)前進(jìn)行混列變換或混列逆變換的四個字節(jié)做移字節(jié)處理;混列變換復(fù)用單元用于將輸入的四個字節(jié)進(jìn)行混列變換或混列逆變換,產(chǎn)生一個字節(jié)結(jié)果。
較佳地,混列變換復(fù)用單元中可以是所述的域元的加法和域元的乘2邏輯電路。
實施本發(fā)明,具有如下有益效果本發(fā)明提出的AES算法的改進(jìn)實現(xiàn)方案可以應(yīng)用于智能卡中的加解密器的電路設(shè)計中,也可以應(yīng)用在其它對面積敏感的應(yīng)用領(lǐng)域,本發(fā)明通過利用AES算法電路設(shè)計中可以復(fù)用的部分,設(shè)計出加解密復(fù)用迭代模塊和子密鑰產(chǎn)生模塊,達(dá)到減小電路設(shè)計的面積開銷和規(guī)模,從而降低了功耗,使得智能卡以及其它應(yīng)用AES算法的產(chǎn)品競爭力大大提高。
圖1是現(xiàn)有的AES算法流程圖;圖2是本發(fā)明基于AES算法的加解密器的結(jié)構(gòu)示意圖;圖3是本發(fā)明中子密鑰生成模塊的結(jié)構(gòu)示意圖;圖4是本發(fā)明中子密鑰擴(kuò)展的結(jié)構(gòu)示意圖;圖5是本發(fā)明中S盒置換復(fù)用子模塊的結(jié)構(gòu)示意圖;圖6是本發(fā)明中混列變換復(fù)用子模塊的第一實施例的結(jié)構(gòu)示意圖;圖7是本發(fā)明中混列變換復(fù)用子模塊的第一實施例的邏輯電路示意圖;圖8是本發(fā)明中混列變換復(fù)用子模塊的第二實施例的結(jié)構(gòu)示意圖;圖9是本發(fā)明中混列變換復(fù)用子模塊的第二實施例的邏輯電路示意圖;圖10是本發(fā)明基于AES算法的加解密方法的第一實施例流程示意圖;圖11是本發(fā)明基于AES算法的加解密方法的第二實施例流程示意圖。
具體實施例方式
AES作為一種安全性很高的加解密算法,在智能卡以及對面積敏感的領(lǐng)域,如手持設(shè)備應(yīng)用方面發(fā)揮了很大的作用,但是AES算法在硬件實現(xiàn)時,存在面積開銷很大的問題,本發(fā)明在關(guān)注其安全性的前提下,提出了能夠解決這一問題的一種基于AES算法的加解密電路實現(xiàn)方案以及基于AES算法的加解密器,從而有效地減小了電路規(guī)模,降低了功耗和成本。
參考圖2,是本發(fā)明基于AES算法的加解密器的結(jié)構(gòu)示意圖,具體包括初始化數(shù)據(jù)模塊1用于將待加密或者待解密的數(shù)據(jù)進(jìn)行第一次迭代前,與子密鑰進(jìn)行異或操作;信號控制模塊2生成加密控制信號或解密控制信號,分別用于控制對數(shù)據(jù)進(jìn)行加密或是解密操作;子密鑰產(chǎn)生模塊3用于在單次加密迭代或單次解密迭代之前,生成對待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行初始化時進(jìn)行密鑰運算所需的子密鑰,在單次加密迭代或單次解密迭代進(jìn)行時,動態(tài)生成加密迭代或解密迭代過程中進(jìn)行密鑰運算的所需子密鑰;用于在單次加密迭代或解密迭代進(jìn)行時,動態(tài)生成密鑰迭代需要的子密鑰;在本例中為,在加密操作的時候,依次產(chǎn)生并使用K0,K1,...,KNr-1,KNr。而在解密操作的時候,依次產(chǎn)生并使用KNr,KNr-1,...,K1,K0。
加解密迭代復(fù)用模塊4在加密控制信號的控制之下,加解密迭代復(fù)用模塊處于加密導(dǎo)通狀態(tài),經(jīng)過初始化數(shù)據(jù)模塊輸出的數(shù)據(jù)在該模塊上進(jìn)行Nr次加密迭代;或在解密控制信號的控制之下,加解密迭代復(fù)用模塊處于解密導(dǎo)通狀態(tài),經(jīng)過初始化數(shù)據(jù)模塊輸出的數(shù)據(jù)在該模塊上進(jìn)行Nr次解密迭代。
其中,加解密迭代復(fù)用模塊4,包括以下子模塊S盒置換復(fù)用子模塊41在加密控制信號的控制下,對輸入其中的數(shù)據(jù)進(jìn)行S盒置換操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)進(jìn)行S盒逆置換操作;數(shù)據(jù)行移位子模塊42用于在加密信號的控制下,對輸入其中的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的操作;混列變換復(fù)用子模塊43混列變換復(fù)用子模塊在加密信號控制的控制下,對輸入其中的數(shù)據(jù)進(jìn)行混列變換操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)進(jìn)行混列逆變換操作;
密鑰運算子模塊44,在加密或者解密信號的控制下,將輸入其中的數(shù)據(jù)與該次輸入子密鑰進(jìn)行按位異或操作;其中,在最后一次密鑰迭代時,混列變換復(fù)用子模塊43不工作。
參考圖3,為本發(fā)明中子密鑰生成模塊的結(jié)構(gòu)示意圖。
改進(jìn)的密鑰擴(kuò)展算法主要是為了高效的產(chǎn)生加密和解密操作中的每輪的子密鑰輸入,使用通用的模塊來實現(xiàn)該操作,避免了解密操作中為了保證操作速度,而增加的存儲各輪子密鑰的存儲單元的開銷。
因此本發(fā)明提供了改進(jìn)的子密鑰產(chǎn)生模塊3,用于根據(jù)供加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰動態(tài)擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰,包括密鑰存儲單元31,用于存儲加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰以及由其動態(tài)擴(kuò)展產(chǎn)生的相繼輪次的子密鑰;密鑰擴(kuò)展單元32,用于在信號控制模塊2所產(chǎn)生的加密控制信號的控制下,根據(jù)密鑰存儲單元31存儲的加密過程中進(jìn)行密鑰運算的的子密鑰擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰;或用于在信號控制模塊2所產(chǎn)生的解密控制信號的控制下,根據(jù)密鑰存儲單元31存儲的解密過程中進(jìn)行密鑰運算的子密鑰擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰。
需要說明的是,所述的加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰包括對待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行初始化時進(jìn)行密鑰運算所需的子密鑰和加密迭代或解密迭代過程中進(jìn)行密鑰運算的所需子密鑰;并且,密鑰擴(kuò)展單元32是由邏輯電路實現(xiàn)的,有兩種處理方式第一種方式在本輪次進(jìn)行密鑰運算時,密鑰擴(kuò)展單元32根據(jù)密鑰存儲單元31存儲的前一輪次進(jìn)行密鑰運算子密鑰擴(kuò)展生成當(dāng)前輪次進(jìn)行密鑰運算所需的子密鑰;第二種方式在本輪次密鑰運算結(jié)束時,密鑰擴(kuò)展單元32根據(jù)密鑰存儲單元31存儲的當(dāng)前輪次的進(jìn)行密鑰運算的子密鑰擴(kuò)展生成下一輪次進(jìn)行密鑰運算所需的子密鑰。
參考圖4,該圖舉例描述了128位密鑰輸入時,改進(jìn)的子密鑰擴(kuò)展方法示意圖。
圖中使用兩種線條區(qū)分了加密和解密操作下進(jìn)行產(chǎn)生每輪需要的子密鑰的輸出,其中實線表示加密操作中由密鑰存儲單元存儲的由四個字節(jié)W0、W1、W2、W3組成的本輪子密鑰Ki,推導(dǎo)出由四個字節(jié)W0、W1、W2、W3組成的下輪子密鑰的結(jié)果(Ki+1),虛線表示解密操作過程中,由密鑰存儲單元存儲的由四個字節(jié)W0、W1、W2、W3組成的本輪子密鑰Ki,最終推導(dǎo)出由四個字節(jié)W0、W1、W2、W3組成的下輪子密鑰的結(jié)果(Ki-1)。擴(kuò)展產(chǎn)生的子密鑰(Ki+1)和子密鑰(Ki-1)存儲到密鑰存儲單元中,密鑰存儲單元只保存相繼輪次的子密鑰,加解密控制信號來控制進(jìn)行產(chǎn)生加密操作還是解密操作需要的下輪子密鑰的結(jié)果。
其中RCON(i)是一個只與輪數(shù)相關(guān)的常數(shù)值,i=1-10分別對應(yīng)的RCON(i)為8’h01,8’h02,8’h04,8’h08,8’h10,8’h20,8’h40,8’h80,8’h16,8’h36。
參考圖5,為本發(fā)明中S盒置換復(fù)用子模塊的結(jié)構(gòu)示意圖。
S盒置換復(fù)用子模塊41具體包括以下單元域元的逆元查找表410、矩陣乘(M*bT)單元411、向量加(c+z)單元412、向量加(x+z)單元413以及矩陣乘(M-1*dT)單元414。
其中,域元的逆元查找表410、矩陣乘(M*bT)單元411、向量加(c+z)單元412組成了S盒置換單元;向量加(x+z)單元413以及矩陣乘(M-1*dT)單元414和域元的逆元查找表410組成了S盒逆置換單元。
S盒置換涉及到矩陣的乘和域元的逆操作,而S盒的逆置換也存在著矩陣的乘和域元的逆操作,對于S盒置換,以輸入為x={x7,x6,x5,x4,x3,x2,x1,x0}的例子來進(jìn)行說明,經(jīng)過S盒置換或S盒逆置換以后的結(jié)果就是y={y7,y6,y5,y4,y3,y2,y1,y0}。
具體來講,在信號控制單元2所產(chǎn)生的加密控制信號的控制下,數(shù)據(jù)x={x7,x6,x5,x4,x3,x2,x1,x0}首先通過域元的逆元查找表410的操作變換,再經(jīng)過矩陣乘單元411的M*bT操作,最后經(jīng)過向量加單元412的c+z操作,即可得到經(jīng)S盒置換后的數(shù)據(jù)y={y7,y6,y5,y4,y3,y2,y1,y0};在信號控制單元2所產(chǎn)生的解密控制信號的控制下,數(shù)據(jù)x={x7,x6,x5,x4,x3,x2,x1,x0}首先經(jīng)過向量加單元413的x+z操作,再經(jīng)過矩陣乘單元414的矩陣乘M-1*dT操作處理,最后經(jīng)過域元的逆元查找表410的操作處理,即得到經(jīng)過S盒逆置換以后的數(shù)據(jù)y={y7,y6,y5,y4,y3,y2,y1,y0}。
圖5中,實線用來表示加密操作使用的S盒置換,虛線用來表示解密操作使用的S盒的逆置換。
其中,矩陣M=1111100001111100001111100001111110001111110001111110001111110001,]]>而M-1=0101001000101001100101000100101000100101100100100100100110100100,]]>M-1是矩陣M的逆矩陣。Z是一個常量值z={1,1,0,0,0,1,1,0}。上標(biāo)“T”表示向量的轉(zhuǎn)置,向量x={x7,x6,x5,x4,x3,x2,x1,x0}經(jīng)過轉(zhuǎn)置處理之后,結(jié)果為xT=x7x6x5x4x3x2x1x0.]]>這里域元的逆元查找表410以8位域元的逆元查找表作為公共模塊,來構(gòu)建S盒置換和S盒的逆置換,以達(dá)到復(fù)用模塊的目的;同樣地,可以使用4位有限域上的逆元查找表來作為公共模塊,來構(gòu)建S盒的逆置換,以實現(xiàn)一種電路規(guī)模更小,面積更優(yōu)的復(fù)用模塊。
S盒的置換和逆置換是由信號控制模塊2所產(chǎn)生的加密控制信號或者解密控制信號來選擇的,需要說明的是,如果是在子密鑰擴(kuò)展中,需要選擇加密控制信號,來選擇S盒置換。
參見圖6,為本發(fā)明中混列變換復(fù)用子模塊的第一實施例的結(jié)構(gòu)示意圖;在這種實施例中,混列變換復(fù)用子模塊包括混列變換復(fù)用電路430以一列數(shù)據(jù)的四個字節(jié){s0c、s1c、s2c、s3c}做混列變換為例,在信號控制單元2產(chǎn)生的加密控制信號的控制之下,混列變換復(fù)用電路430處于混列變換選通狀態(tài),完成對{s0c、s1c、s2c、s3c}的混列變換操作;其他列的字節(jié)參照上述操作進(jìn)行混列變換,從而完成不同列的字節(jié)在同一混列變換復(fù)用電路上完成混列變換;
同樣地,該混列變換復(fù)用電路還可以完成混列逆變換,以一列數(shù)據(jù)的四個字節(jié){s0c、s1c、s2c、s3c}做混列逆變換為例,在信號控制單元2產(chǎn)生的解密控制信號的控制之下,混列變換復(fù)用電路430處于混列逆變換選通狀態(tài),完成對{s0c、s1c、s2c、s3c}的混列逆變換操作;其他列的字節(jié)參照上述操作進(jìn)行混列逆變換,從而完成不同列的字節(jié)在同一混列變換復(fù)用電路上完成混列逆變換;混列變換和混列逆變換操作都是域元的加法和乘法操作,為了便于電路實現(xiàn),可以進(jìn)一步將乘法操作分解成域元的加法和域元的乘2操作,利用混列變換和混列逆變換中可以復(fù)用的部分,構(gòu)建混列變換復(fù)用模塊,這種處理方式一方面可以模塊化兩種變換操作,另一方面也可以減小兩種變換的面積開銷。
在本實施例中,混列變換復(fù)用電路430是由域元的加法和域元的乘2邏輯電路組成。
參見圖7,為本發(fā)明中混列變換復(fù)用子模塊的第一實施例的邏輯電路示意圖。
混列變換和混列變換的電路可以使用由域元的加法和域元的乘2邏輯電路組成,其中{02}·表示使用模數(shù)為x8+x4+x3+x+1的域元乘2操作的電路,表示域元的加法操作的電路。第一行字節(jié)的混列變換和混列的逆變換的結(jié)構(gòu)如圖5中的虛線框表示,其操作表示如下MixColumn0={02}·(S0cS1c)S1c(S2cS3c)InvMixColumn0=({02}·({02}·(({02}·(S0cS1c))({02}·(S2cS3c))(S0cS2c))))MixColumn0其他三列的混列變換操作如下MixColumn1={02}·(S1cS2c)S2c(S0cS3c)MixColumn2={02}·(S2cS3c)S3c(S0cS1c)MixColumn3={02}·(S0cS3c)S0c(S1cS2c)其它三列的混列逆變換操作如下InvMixColumn1=({02}·({02}·(({02}·(S1cS2c))({02}·(S0cS3c))(S1cS3c))))MixColumn1InvMixColumn2=({02}·({02}·(({02}·(S2cS3c))({02}·(S0cS1c))(S0cS2c))))MixColumn2InvMixColumn3=({02}·({02}·(({02}·(S0cS3c))({02}·(S1cS2c))(S1cS3c))))MixColumn3經(jīng)過處理之后,一列的混列變換和混列的逆變換可以使用同一個模塊來實現(xiàn),提高了相同操作的共用性,減小了面積的開銷。
圖7中使用兩種線條區(qū)分了加密和解密操作下進(jìn)行混列變換和混列的逆變換的最后結(jié)果輸出。其中實線表示加密操作中選擇混列變換結(jié)果的輸出,虛線表示解密操作中選擇混列的逆變換結(jié)果的輸出。加密、解密控制信號用來控制進(jìn)行混列變換還是進(jìn)行混列的逆變換。虛線框是產(chǎn)生混列變換或混列的逆變換的第一行數(shù)據(jù),執(zhí)行的操作及結(jié)構(gòu)。
參見圖8,為本發(fā)明中混列變換復(fù)用子模塊的第二實施例的結(jié)構(gòu)示意圖。
基于混列變換和混列的逆變換的特點,同一列操作中,各行字節(jié)的相關(guān)聯(lián)性,在實現(xiàn)的時候,可以基于第一行的結(jié)果,重用產(chǎn)生第一行的結(jié)構(gòu),將輸入數(shù)據(jù)做移字節(jié)處理之后,產(chǎn)生其它行的字節(jié)結(jié)果。
因此在這種實施例中,混列變換子模塊43還可以通過移字節(jié)處理的方式來實現(xiàn),具體包括以下單元移字節(jié)處理單元4310用于將當(dāng)前進(jìn)行混列變換或混列逆變換的四個字節(jié)做移字節(jié)處理;混列變換復(fù)用單元4311用于將輸入的四個字節(jié)進(jìn)行混列變換或混列逆變換,產(chǎn)生一個字節(jié)結(jié)果。
首先,在信號控制單元2產(chǎn)生的加密控制信號的控制之下,混列變換復(fù)用單元4311將輸入做混列變換的數(shù)據(jù)中的一列的四個字節(jié)做混列變換,得到該列經(jīng)過混列變換以后的對應(yīng)列的一個字節(jié);移字節(jié)處理單元4310對當(dāng)前做混列變換的四個字節(jié)做移字節(jié)處理,混列變換復(fù)用單元4311再對其進(jìn)行混列變換,得到該列經(jīng)混列變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列變換;其他列的數(shù)據(jù)做混列變換參照上述操作進(jìn)行,從而完成整個混列變換操作。
與此相應(yīng)地,在信號控制單元2產(chǎn)生的解密控制信號的控制之下,混列變換復(fù)用單元4311將輸入做混列變換的數(shù)據(jù)中的一列的四個字節(jié)做混列逆變換,得到該列經(jīng)過混列逆變換以后的對應(yīng)列的一個字節(jié);移字節(jié)處理單元4310對當(dāng)前做混列逆變換的四個字節(jié)做移字節(jié)處理,混列變換復(fù)用單元4311再對其進(jìn)行混列逆變換,得到該列經(jīng)混列逆變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列逆變換;其他列的數(shù)據(jù)做混列逆變換參照上述操作進(jìn)行,從而完成整個混列逆變換操作。
參考圖9,為本發(fā)明中混列變換復(fù)用子模塊的第二實施例的邏輯電路示意圖。
圖9中的虛線結(jié)構(gòu)框圖為混列變換復(fù)用單元,即采用圖7中的虛線框部分內(nèi)容,產(chǎn)生第一行的字節(jié)結(jié)果,結(jié)合圖8,說明此種實施例的實現(xiàn)方式以一列的四個字節(jié){s0c、s1c、s2c、s3c}做混列變換為例,在該混列變換復(fù)用子模塊上具體實現(xiàn)混列變換的步驟如下首先,在加密控制信號的控制下,混列變化復(fù)用單元4311首先將輸入其中的一列數(shù)據(jù)的四個字節(jié){s0c、s1c、s2c、s3c}做混列變換,得到第一行的一個字節(jié)s’0c;在加密控制信號的控制下,移字節(jié)處理單元4310將{s0c、s1c、s2c、s3c}做移字節(jié)處理,得到移位后的字節(jié){s3c、s0c、s1c、s2c},經(jīng)混列變換復(fù)用單元4311對其做混列變換,得到第二行的一個字節(jié)s’1c;在加密控制信號的控制下,移字節(jié)處理單元4310將{s0c、s1c、s2c、s3c}做移字節(jié)處理,得到移位后的字節(jié){s2c、s3c、s0c、s1c},經(jīng)混列變換復(fù)用單元4311對其做混列變換,得到第三行的一個字節(jié)s’2c;在加密控制信號的控制下,字節(jié)處理單元4310將{s0c、s1c、s2c、s3c}做移字節(jié)處理,得到移位后的字節(jié){s1c、s2c、s3c、s0c},經(jīng)混列變換復(fù)用單元4311對其做混列變換,得到第四行的一個字節(jié)s’3c;其中s’0c、s’1c、s’2c、s’3c組成了經(jīng)混列變換以后的對應(yīng)列;至此,完成該列的混列變換操作,其他列的混列變換操作參照上述操作進(jìn)行,從而完成整個的混列變換。
與此相應(yīng)的,以一列的四個字節(jié){s0c、s1c、s2c、s3c}做混列逆變換為例,在該混列變換復(fù)用子模塊上具體實現(xiàn)混列逆變換的步驟如下首先,在解密控制信號的控制下,混列變化復(fù)用單元4311首先將輸入其中的一列數(shù)據(jù)的四個字節(jié){s0c、s1c、s2c、s3c}做混列逆變換,得到第一行的一個字節(jié)s’0c;在解密控制信號的控制下,移字節(jié)處理單元4310將{s0c、s1c、s2c、s3c}做移字節(jié)處理,得到移位后的字節(jié){s3c、s0c、s1c、s2c},經(jīng)混列變換復(fù)用單元4311對其做混列逆變換,得到第二行的一個字節(jié)s’1c;在解密控制信號的控制下,移字節(jié)處理單元4310將{s0c、s1c、s2c、s3c}做移字節(jié)處理,得到移位后的字節(jié){s2c、s3c、s0c、s1c},經(jīng)混列變換復(fù)用單元4311對其做混列逆變換,得到第三行的一個字節(jié)s’2c;在解密控制信號的控制下,字節(jié)處理單元4310將{s0c、s1c、s2c、s3c}做移字節(jié)處理,得到移位后的字節(jié){s1c、s2c、s3c、s0c},經(jīng)混列變換復(fù)用單元4311對其做混列逆變換,得到第四行的一個字節(jié)s’3c;其中s’0c、s’1c、s’2c、s’3c組成了經(jīng)混列逆變換以后的對應(yīng)列;至此,完成該列的混列逆變換操作,其他列的混列逆變換操作參照上述操作進(jìn)行,從而完成整個的混列逆變換。
使用這種方法同樣可以模塊化的實現(xiàn)混列變換和混列的逆變換的混合處理。
另外,在圖9中的實現(xiàn)中,作為一種可替換的方案,圖8中的混列變換復(fù)用單元4311也可以不是用圖7中的虛線框部分來產(chǎn)生第一行的字節(jié)結(jié)果,也就是說{03}·、{0e}·、{0b}·、{0d}·和{09}·也可以不進(jìn)一步拆分成異或和{02}·的操作。
參考圖10,為本發(fā)明基于AES算法的加解密方法的第一實施例流程示意,該方法具體實現(xiàn)過程如下;首先在步驟S100,進(jìn)行迭代次數(shù)Nr的確定,根據(jù)密鑰長度設(shè)定迭代次數(shù)Nr,密鑰長度可以是128位、192位和256位,相應(yīng)的迭代次數(shù)Nr可以是10、12或14;在步驟S101,動態(tài)生成Nr次加密迭代或者解密迭代過程中進(jìn)行密鑰運算所需要的子密鑰,需要指出的是,該步驟貫穿于Nr次加密迭代過程或解密迭代過程;在步驟S102,對待加密或者待解密的數(shù)據(jù)進(jìn)行初始化操作,即在待加密或者待解密的數(shù)據(jù)輸入以后,在其進(jìn)行第一輪迭代之前,首先將其與步驟S101中產(chǎn)生的子密鑰進(jìn)行密鑰運算操作,即與之進(jìn)行按位異或操作;在步驟S103,加載加密、或者解密控制信號,控制相應(yīng)的加密或者解密操作。
在步驟S104,啟動加密迭代或解密迭代過程,在加密控制信號的控制下,啟動加密迭代操作流程,在解密控制信號的控制下,啟動解密的迭代操作流程;在步驟S105,在加解密迭代復(fù)用模塊上進(jìn)行加密或者解密的Nr次迭代操作。
在加密控制信號的控制之下,加解密迭代復(fù)用模塊處于加密導(dǎo)通狀態(tài),所輸入的待加密的數(shù)據(jù)在該模塊上進(jìn)行Nr次加密迭代;在解密控制信號的控制之下,加解密迭代復(fù)用模塊處于解密導(dǎo)通狀態(tài),所輸入的待解密的數(shù)據(jù)在該模塊上進(jìn)行Nr次解密迭代。
其中,Nr次加密迭代中的單次加密迭代的步驟為在步驟S106,對數(shù)據(jù)進(jìn)行S盒置換操作;在步驟S107,將經(jīng)過步驟S106變換輸出的數(shù)據(jù)的每一行進(jìn)行字節(jié)移位,即對經(jīng)步驟S106變換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;在步驟S108,將經(jīng)過步驟S107變換輸出的數(shù)據(jù)進(jìn)行混列變換,即將經(jīng)步驟S107變換輸出的數(shù)據(jù)的每列與矩陣進(jìn)行相乘操作;在步驟S109,將經(jīng)過步驟S108變換輸出的數(shù)據(jù)進(jìn)行密鑰運算,即將經(jīng)S108變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行按位異或操作;在最后一次加密迭代的時候省略步驟S108;需要指出的是,在步驟S106中,所述的數(shù)據(jù)在進(jìn)行第一次加密迭代時,為經(jīng)過步驟S102初始化的數(shù)據(jù);在以后的單次加密迭代過程中,為經(jīng)過上一次加密迭代操作的數(shù)據(jù)。
Nr次解密迭代中的單次解密迭代的步驟為在步驟S106,對數(shù)據(jù)進(jìn)行S盒逆置換操作;在步驟S107,將經(jīng)過步驟S106變換輸出的數(shù)據(jù)的每一行進(jìn)行字節(jié)移位的逆操作,即對經(jīng)步驟S106變換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;在步驟S110,將經(jīng)過步驟S107變換輸出的數(shù)據(jù)進(jìn)行密鑰運算,即將經(jīng)步驟S107變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行按位異或操作;在步驟S111,將經(jīng)過步驟S110變換輸出的數(shù)據(jù)進(jìn)行數(shù)據(jù)混列逆變換,即將經(jīng)步驟S110變換輸出的數(shù)據(jù)的每列與矩陣進(jìn)行相乘操作;在最后一次解密迭代的時候省略步驟S111;需要指出的是,在步驟S106中,所述的數(shù)據(jù)在進(jìn)行第一次解密迭代時,為經(jīng)過步驟S102初始化的數(shù)據(jù);在以后的單次解密迭代過程中,為經(jīng)過上一次解密迭代操作的數(shù)據(jù)。
圖10中的S115表示的是加密子密鑰的輸入順序,S116表示的是解密子密鑰的輸入順利,這兩種子密鑰的輸入順序正好相反。在本例中為,在加密迭代操作的時候,依次使用K0,K1,...,KNr-1,KNr。而在解密迭代操作的時候,依次使用KNr,KNr-1,...,K1,K0。
可選擇地,本發(fā)明還給出了基于AES算法的加解密方法的第二種實施方式,參見圖11,該方法具體實現(xiàn)方法步驟如下首先在步驟S200,根據(jù)密鑰長度設(shè)定迭代次數(shù)Nr,密鑰長度可以是128位、192位和256位,相應(yīng)地,迭代次數(shù)Nr可以是10、12或14;在步驟S201,動態(tài)生成Nr次加密迭代或者解密迭代過程進(jìn)行密鑰運算所需要的子密鑰,需要指出的是,該步驟貫穿于Nr次加密迭代過程或解密迭代過程;在步驟S202,對待加密或者待解密的數(shù)據(jù)進(jìn)行初始化操作,即在待加密或者待解密的數(shù)據(jù)輸入以后,在其進(jìn)行第一輪密鑰迭代之前,首先將其與在步驟S201所產(chǎn)生的子密鑰進(jìn)行密鑰運算操作,即與之進(jìn)行按位異或操作;在步驟S203,加載加密或者解密控制信號,控制相應(yīng)的加密或者解密操作。
在步驟S204,啟動加密迭代或解密迭代過程,在加密控制信號的控制下,啟動加密迭代操作流程,在解密控制信號的控制下,啟動解密的迭代操作流程;在步驟S205,在加解密迭代復(fù)用模塊上進(jìn)行加密或者解密的Nr次迭代操作。
在加密控制信號的控制之下,加解密迭代復(fù)用模塊處于加密導(dǎo)通狀態(tài),所輸入的待加密的數(shù)據(jù)在該模塊上進(jìn)行Nr次加密迭代;在解密控制信號的控制之下,加解密迭代復(fù)用模塊處于解密導(dǎo)通狀態(tài),所輸入的待解密的數(shù)據(jù)在該模塊上進(jìn)行Nr次解密迭代。
其中,Nr次加密迭代中的單次加密迭代的步驟為在步驟S206,對數(shù)據(jù)進(jìn)行S盒置換操作;在步驟S207,將經(jīng)過步驟S206變換輸出的數(shù)據(jù)的每一行進(jìn)行移位,即對經(jīng)步驟S206變換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;在步驟S208,將經(jīng)過步驟S207變換輸出的數(shù)據(jù)進(jìn)行混列變換,即將經(jīng)步驟S207變換輸出的數(shù)據(jù)的每列與矩陣進(jìn)行相乘操作;
在步驟S210,將經(jīng)過步驟S208變換輸出的數(shù)據(jù)進(jìn)行密鑰運算,將經(jīng)S208變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行按位異或操作;在最后一次加密迭代的時候省略步驟S208;需要指出的是,在步驟S206中,所述的數(shù)據(jù)在進(jìn)行第一次加密迭代時,為經(jīng)過步驟S202初始化的數(shù)據(jù);在以后的單次加密迭代過程中,為經(jīng)過上一次加密迭代操作的數(shù)據(jù);在電路實現(xiàn)的時候,經(jīng)步驟S201產(chǎn)生的用于本次加密迭代的加密子密鑰經(jīng)過混列變換復(fù)用單元,但是被混列變換復(fù)用單元旁路,不做混列變換或混列逆變換。
Nr次解密迭代中的單次解密迭代的步驟為在步驟S206,對數(shù)據(jù)進(jìn)行S盒逆置換操作;在步驟S207,將經(jīng)過步驟S206變換輸出的數(shù)據(jù)的每一行進(jìn)行移位逆操作,即對經(jīng)步驟S206變換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;在步驟S208,將經(jīng)過步驟S207變換輸出的數(shù)據(jù)進(jìn)行數(shù)據(jù)混列逆變換,將經(jīng)步驟S207變換輸出的數(shù)據(jù)的每列與矩陣進(jìn)行相乘操作;在步驟S209,將經(jīng)步驟S201產(chǎn)生的用于本次解密迭代的解密子密鑰進(jìn)行混列逆變換;在步驟S210,將經(jīng)步驟S208處理的數(shù)據(jù)進(jìn)行密鑰運算,即將經(jīng)步驟S208變換輸出的數(shù)據(jù)與經(jīng)步驟S209變換的子密鑰進(jìn)行按位異或操作;在最后一次解密迭代的時候省略步驟S208及步驟S209,直接將經(jīng)過步驟S207處理后輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行按位異或操作。
需要指出的是,在步驟S206中,所述的數(shù)據(jù)在進(jìn)行第一次解密迭代時,為經(jīng)過步驟S202初始化的數(shù)據(jù);在以后的單次解密迭代過程中,為經(jīng)過上一次解密迭代操作的數(shù)據(jù)。
圖11中的S214表示的是加密子密鑰的輸入順序,S215表示的是解密子密鑰的輸入順利,這兩種子密鑰的輸入順序正好相反。在本例中為,在加密操作的時候,依次使用K0,K1,...,KNr-1,KNr。而在解密操作的時候,依次使用KNr,KNr-1,...,K1,K0。
以上所述是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種基于AES算法的加解密方法,其特征在于,包括以下步驟a、根據(jù)密鑰長度確定迭代次數(shù)Nr;b、初始化數(shù)據(jù),輸入的待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行第一次迭代前,將其與子密鑰進(jìn)行密鑰運算操作;c、加載加密控制信號或解密控制信號;d、在加密控制信號的控制下,在加解密迭代復(fù)用模塊上進(jìn)行加密的Nr次迭代操作,在解密控制信號的控制下,在加解密迭代復(fù)用模塊上進(jìn)行解密的Nr次迭代操作。
2.如權(quán)利要求1所述的基于AES算法的加解密方法,其特征在于,步驟d具體包括以下步驟在加密控制信號的控制之下,加解密迭代復(fù)用模塊處于加密導(dǎo)通狀態(tài),輸入的待加密的數(shù)據(jù)在該模塊上進(jìn)行Nr次加密迭代;在解密控制信號的控制之下,加解密迭代復(fù)用模塊處于解密導(dǎo)通狀態(tài),輸入的待解密的數(shù)據(jù)在該模塊上進(jìn)行Nr次解密迭代。
3.如權(quán)利要求2所述的基于AES算法的加解密方法,其特征在于,所述Nr次加密迭代中的單次加密迭代的步驟為f1、對輸入的數(shù)據(jù)進(jìn)行S盒置換操作;f2、對經(jīng)S盒置換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;f3、將經(jīng)數(shù)據(jù)行移位變換輸出的數(shù)據(jù)進(jìn)行混列變換操作;f4、在加密控制信號的控制下,由密鑰存儲單元里存儲的前一次加密迭代的子密鑰獲得本次加密迭代的子密鑰;f5、將經(jīng)混列變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行密鑰運算操作;在最后一次加密迭代的時候省略步驟f3;所述Nr次解密迭代中的單次解密迭代的步驟為g1、對輸入的數(shù)據(jù)進(jìn)行S盒逆置換操作;g2、對經(jīng)S盒逆置換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;g3、在解密控制信號的控制下,由密鑰存儲單元里存儲的前一次解密迭代的子密鑰獲得本次解密迭代的子密鑰;g4、將經(jīng)數(shù)據(jù)行逆移位變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行密鑰運算操作;g5、將經(jīng)密鑰運算變換輸出的數(shù)據(jù)進(jìn)行混列逆變換操作;在最后一次解密迭代的時候省略步驟g5。
4.如權(quán)利要求2所述的基于AES算法的加解密方法,其特征在于,所述Nr次解密迭代中的單次加密迭代的步驟為f1、對輸入的數(shù)據(jù)進(jìn)行S盒置換操作;f2、對經(jīng)S盒置換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;f3、將經(jīng)數(shù)據(jù)行移位變換輸出的數(shù)據(jù)進(jìn)行混列變換操作;f4、在加密控制信號的控制下,由密鑰存儲單元里存儲的前一次加密迭代的子密鑰獲得本次加密迭代的子密鑰;f5、將經(jīng)混列變換輸出的數(shù)據(jù)與該次輸入的子密鑰進(jìn)行密鑰運算操作;在最后一次加密迭代的時候省略步驟f3;所述Nr次解密迭代中的單次解密迭代的步驟為h1、對輸入的數(shù)據(jù)進(jìn)行S盒逆置換操作;h2、對經(jīng)S盒逆置換輸出的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;h3、將經(jīng)數(shù)據(jù)行逆移位變換輸出的數(shù)據(jù)進(jìn)行混列逆變換操作;h4、在解密控制信號的控制下,由密鑰存儲單元里存儲的前一次解密迭代的子密鑰獲得本次解密迭代的子密鑰;h5、將經(jīng)子密鑰生成步驟產(chǎn)生的用于本次解密迭代的解密子密鑰進(jìn)行混列逆變換;h6、將經(jīng)混列逆變換輸出的數(shù)據(jù)與該次輸入的經(jīng)過混列逆變換的子密鑰進(jìn)行密鑰運算操作;在最后一次解密迭代的時候省略步驟h3和步驟h5,直接將步驟h2變換輸出的數(shù)據(jù)與步驟h4生成的子密鑰進(jìn)行按位異或操作。
5.如權(quán)利要求3所述的基于AES算法的加解密方法,其特征在于,所述的步驟f1和步驟g1是在S盒置換復(fù)用子模塊上實現(xiàn)的,所述步驟f1具體包括以下步驟在加密控制信號的控制下,經(jīng)過初始化的數(shù)據(jù)通過查找域元的逆元查找表,矩陣乘,向量加操作,完成S盒的置換;所述步驟g1具體包括以下步驟在解密控制信號的控制下,經(jīng)過初始化的數(shù)據(jù)通過向量加,矩陣乘,查找域元的逆元查找表,完成S盒的逆置換。
6.如權(quán)利要求4所述的基于AES算法的加解密方法,其特征在于,所述的步驟f1和步驟g1是在S盒置換復(fù)用子模塊上實現(xiàn)的,所述步驟f1具體包括以下步驟在加密控制信號的控制下,經(jīng)過初始化的數(shù)據(jù)通過查找域元的逆元查找表,矩陣乘,向量加操作,完成S盒的置換;所述步驟g1具體包括以下步驟在解密控制信號的控制下,經(jīng)過初始化的數(shù)據(jù)通過向量加,矩陣乘,查找域元的逆元查找表,完成S盒的逆置換。
7.如權(quán)利要求3所述的基于AES算法的加解密方法,其特征在于,所述的步驟f3和g5是在混列變換復(fù)用子模塊上實現(xiàn)的,步驟f3具體包括以下步驟在加密控制信號的控制之下,混列變換復(fù)用電路處于混列變換導(dǎo)通狀態(tài),進(jìn)行混列變換操作;所述步驟g5具體包括以下步驟在解密控制信號的控制之下,混列變換復(fù)用電路處于混列逆變換狀態(tài),進(jìn)行混列逆變換操作。
8.如權(quán)利要求4所述的基于AES算法的加解密方法,其特征在于,所述的步驟f3和步驟h3是在混列變換復(fù)用子模塊上實現(xiàn)的,所述步驟f3具體包括以下步驟在加密控制信號的控制之下,混列變換復(fù)用電路處于混列變換導(dǎo)通狀態(tài),進(jìn)行混列變換操作;所述步驟h3具體包括以下步驟在解密控制信號的控制之下,混列變換復(fù)用電路處于混列逆變換狀態(tài),進(jìn)行混列逆變換操作。
9.如權(quán)利要求7或8所述的基于AES算法的加解密方法,其特征在于,所述混列變換復(fù)用電路是由域元的加法和域元的乘2邏輯電路實現(xiàn)的。
10.如權(quán)利要求3所述的基于AES算法的加解密方法,其特征在于,所述步驟f3和步驟g5是在混列變換復(fù)用子模塊上實現(xiàn)的,所述步驟f3具體包括以下步驟bb1、在加密信號的控制下,混列變換復(fù)用單元將輸入的四個字節(jié)做混列變換,得到一個字節(jié)的結(jié)果;所述的四個字節(jié)為做混列變換的數(shù)據(jù)中的一列的四個字節(jié);所得到一個字節(jié)的結(jié)果為該列經(jīng)過混列變換以后的對應(yīng)列的一個字節(jié);bb2、在加密控制信號的控制之下,將當(dāng)前的四個字節(jié)做移字節(jié)處理,并重用步驟bb1中得到一個字節(jié)結(jié)果的混列變換結(jié)構(gòu),得到該列經(jīng)混列變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列變換;bb3、其他列的數(shù)據(jù)做混列變換參照上述步驟進(jìn)行;所述步驟g5具體包括以下步驟bb4、在解密信號的控制下,混列變換復(fù)用單元將輸入的四個字節(jié)做混列逆變換,得到一個字節(jié)的結(jié)果;所述的四個字節(jié)為做混列逆變換的數(shù)據(jù)中的一列的四個字節(jié);所得到一個字節(jié)的結(jié)果為該列經(jīng)過混列逆變換以后的對應(yīng)列的一個字節(jié);bb5、在解密控制信號的控制之下,將當(dāng)前的四個字節(jié)做移字節(jié)處理,并重用步驟bb4中得到一個字節(jié)結(jié)果的混列逆變換結(jié)構(gòu),得到該列經(jīng)混列逆變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列逆變換;bb6、其他列的數(shù)據(jù)做混列逆變換參照上述步驟進(jìn)行。
11.如權(quán)利要求4所述的基于AES算法的加解密方法,其特征在于,所述步驟f3和步驟h3是在混列變換復(fù)用子模塊上實現(xiàn)的,所述步驟f3具體包括以下步驟bb1、在加密信號的控制下,混列變換復(fù)用單元將輸入的四個字節(jié)做混列變換,得到一個字節(jié)的結(jié)果;所述的四個字節(jié)為做混列變換的數(shù)據(jù)中的一列的四個字節(jié);所得到一個字節(jié)的結(jié)果為該列經(jīng)過混列變換以后的對應(yīng)列的一個字節(jié);bb2、在加密控制信號的控制之下,將當(dāng)前的四個字節(jié)做移字節(jié)處理,并重用步驟bb1中得到一個字節(jié)結(jié)果的混列變換結(jié)構(gòu),得到該列經(jīng)混列變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列變換;bb3、其他列的數(shù)據(jù)做混列變換參照上述步驟進(jìn)行;所述步驟h3具體包括以下步驟bb4、在解密信號的控制下,混列變換復(fù)用單元將輸入的四個字節(jié)做混列逆變換,得到一個字節(jié)的結(jié)果;所述的四個字節(jié)為做混列逆變換的數(shù)據(jù)中的一列的四個字節(jié);所得到一個字節(jié)的結(jié)果為該列經(jīng)過混列逆變換以后的對應(yīng)列的一個字節(jié);bb5、在解密控制信號的控制之下,將當(dāng)前的四個字節(jié)做移字節(jié)處理,并重用步驟bb4中得到一個字節(jié)結(jié)果的混列逆變換結(jié)構(gòu),得到該列經(jīng)混列逆變換以后對應(yīng)列的其他字節(jié)的結(jié)果,完成該列的混列逆變換;bb6、其他列的數(shù)據(jù)做混列逆變換參照上述步驟進(jìn)行。
12.如權(quán)利要求10或11所述的基于AES算法的加解密方法,其特征在于,所述混列變換復(fù)用單元是域元的加法和域元的乘2邏輯電路。
13.一種基于AES算法的加解密器,其特征在于,包括子密鑰產(chǎn)生模塊用于在單次加密迭代或單次解密迭代之前,生成對待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行初始化時進(jìn)行密鑰運算所需的子密鑰,在單次加密迭代或單次解密迭代進(jìn)行時,動態(tài)生成加密迭代或解密迭代過程中進(jìn)行密鑰運算的所需子密鑰;初始化數(shù)據(jù)模塊將待加密或者待解密的數(shù)據(jù)進(jìn)行第一次迭代前,與所述子密鑰產(chǎn)生模塊產(chǎn)生的子密鑰進(jìn)行密鑰運算操作;信號控制模塊用于生成并加載加密控制信號或解密控制信號,分別用于控制對數(shù)據(jù)進(jìn)行加密或是解密操作;加解密迭代復(fù)用模塊在信號控制模塊加載的加密控制信號的控制下,在加解密迭代復(fù)用模塊上進(jìn)行加密的Nr次迭代操作,在信號控制模塊加載的解密控制信號的控制下,在加解密迭代復(fù)用模塊上進(jìn)行解密的Nr次迭代操作。
14.如權(quán)利要求13所述的基于AES算法的加解密器,其特征在于,所述子密鑰產(chǎn)生模塊用于根據(jù)供加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰動態(tài)擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰,包括密鑰存儲單元,用于存儲加密過程中或解密過程中進(jìn)行密鑰運算所用的子密鑰以及由其動態(tài)擴(kuò)展產(chǎn)生的相繼輪次的子密鑰;密鑰擴(kuò)展單元,用于在加密控制信號的控制下,根據(jù)密鑰存儲單元存儲的加密過程中進(jìn)行密鑰運算的的子密鑰擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰;或用于在解密控制信號的控制下,根據(jù)密鑰存儲單元存儲的解密過程中進(jìn)行密鑰運算的子密鑰擴(kuò)展產(chǎn)生相繼輪次進(jìn)行密鑰運算的子密鑰。
15.如權(quán)利要求13所述的基于AES算法的加解密器,其特征在于,所述的加解密迭代復(fù)用模塊,包括以下子模塊S盒置換復(fù)用子模塊用于在加密控制信號的控制下,對輸入其中的數(shù)據(jù)進(jìn)行S盒置換操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)進(jìn)行S盒逆置換操作;數(shù)據(jù)行移位子模塊用于在加密控制信號的控制下,對輸入其中的數(shù)據(jù)的每一行進(jìn)行移字節(jié)操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)的每一行進(jìn)行移字節(jié)的逆操作;混列變換復(fù)用子模塊在加密控制信號控制的控制下,對輸入其中的數(shù)據(jù)進(jìn)行混列變換操作;或在解密控制信號的控制下,對輸入其中的數(shù)據(jù)進(jìn)行混列逆變換操作;密鑰運算子模塊在加密控制信號或者解密控制信號的控制下,將輸入其中的數(shù)據(jù)與該次輸入子密鑰進(jìn)行按位異或操作;其中,在最后一次加密或解密迭代時,所述混列變換復(fù)用子模塊不工作。
16.如權(quán)利要求15所述的基于AES算法的加解密器,其特征在于,所述的S盒置換復(fù)用子模塊具體包括以下單元S盒置換單元用于在加密控制信號的控制下,通過查找域元的逆元查找表,矩陣乘,向量加操作,完成對數(shù)據(jù)的S盒的置換;S盒逆置換單元用于在解密控制信號的控制下,通過向量加,矩陣乘,查找域元的逆元查找表,完成對數(shù)據(jù)的S盒的逆置換。
17.如權(quán)利要求15所述的基于AES算法的加解密器,其特征在于,所述混列變換復(fù)用子模塊包括混列變換復(fù)用電路在加密控制信號的控制之下,選通混列變換電路,完成對數(shù)據(jù)的混列變換操作;在解密控制信號的控制之下,選通混列逆變換電路,完成對數(shù)據(jù)的混列逆變換操作。
18.如權(quán)利要求17所述的基于AES算法的加解密器,其特征在于,所述混列變換復(fù)用電路是域元的加法和域元的乘2邏輯電路。
19.如權(quán)利要求15所述的基于AES算法的加解密器,其特征在于,所述混列變換復(fù)用子模塊包括移字節(jié)處理單元用于將當(dāng)前進(jìn)行混列變換或混列逆變換的四個字節(jié)做移字節(jié)處理;混列變換復(fù)用單元用于將輸入的四個字節(jié)進(jìn)行混列變換或混列逆變換,產(chǎn)生一個字節(jié)結(jié)果。
20.如權(quán)利要求19所述的基于AES算法的加解密器,其特征在于,所述混列變換復(fù)用單元是所述的域元的加法和域元的乘2邏輯電路。
全文摘要
本發(fā)明公開了一種基于AES算法的加解密方法,包括a、根據(jù)密鑰長度確定迭代次數(shù)Nr;b、初始化數(shù)據(jù),輸入的待加密數(shù)據(jù)或待解密數(shù)據(jù)進(jìn)行第一次迭代前,將其與子密鑰進(jìn)行密鑰運算操作;c、加載加密控制信號或解密控制信號;d、在加密控制信號的控制下在加解密迭代復(fù)用模塊上進(jìn)行加密的Nr次迭代操作,在解密控制信號的控制下在加解密迭代復(fù)用模塊上進(jìn)行解密的Nr次迭代操作。本發(fā)明還公開了一種基于AES算法的加解密器,其采用一個加解密迭代復(fù)用模塊來完成加密迭代或解密迭代操作。采用本發(fā)明,具有簡化AES算法設(shè)計的電路規(guī)模,減小電路設(shè)計的面積開銷,降低功耗和成本等優(yōu)點。
文檔編號H04L9/28GK1921382SQ200610037539
公開日2007年2月28日 申請日期2006年9月6日 優(yōu)先權(quán)日2006年9月6日
發(fā)明者譚麗娟 申請人:華為技術(shù)有限公司