欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種高速有限長度的rc4加解密裝置的制造方法

文檔序號:10538508閱讀:246來源:國知局
一種高速有限長度的rc4加解密裝置的制造方法
【專利摘要】本發(fā)明公開了一種高速有限長度的RC4加解密裝置,涉及信息安全技術(shù)領(lǐng)域。本發(fā)明包括至少一個數(shù)據(jù)接收模塊、至少一個密鑰流生成模塊、至少一個數(shù)據(jù)處理模塊和至少一個數(shù)據(jù)發(fā)送模塊。所有模塊均通過FPGA進(jìn)行實現(xiàn),F(xiàn)PGA通過Pcie接口與主機進(jìn)行通訊,用于信息和數(shù)據(jù)的接收和回傳。本發(fā)明提供的一種高速有限長度的RC4加解密裝置,密鑰接收完成后即開始密鑰流的生成及存儲,并且生成的密鑰流及主機下發(fā)的密鑰未向主機提供讀取操作,避免了密鑰流的暴露;相比于常規(guī)RC4算法實現(xiàn)的每次處理1字節(jié),本發(fā)明提供的一種高速RC4加解密裝置每次處理16字節(jié),并且可根據(jù)需要調(diào)整為32、64或更多字節(jié)的處理能力,處理速度將大大提高。
【專利說明】
一種高速有限長度的RC4加解密裝置
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及信息安全技術(shù)領(lǐng)域,尤其涉及一種高速有限長度的RC4加解密裝置。
【背景技術(shù)】
[0002]RC4加密算法是于1987年提出的密鑰長度可變的對稱流加密算法。該算法的特點是算法簡單,運行速度快,而且密鑰長度是可變的,可變范圍為1-256字節(jié)。以上的特點使得RC4算法被廣泛應(yīng)用,不論是軟件還是硬件都非常易于實現(xiàn)。
[0003]RC4的密鑰流的生成主要包括兩個階段,第一階段是初始化S盒,第二階段是生成偽隨機子密鑰。在密鑰流的生成過程中,使用了狀態(tài)向量S、指針?biāo)饕?、j及密鑰K等關(guān)鍵變量。
[0004]對于第一階段,假設(shè)狀態(tài)向量S的長度為256字節(jié),密鑰K的長度為16字節(jié),可以用如下類C代碼表示:
[0005]for(i = 0;i<256;i++){
[0006]s[i] = i;
[0007]}
[0008]j = 0;
[0009]for(i = 0;i<256;i++)
[0010]{
[0011]j = (j+s[i]+k[i%16])%256;
[0012]swap(s[i],s[j]);
[0013]}
[0014]在該第一階段中,密鑰K主要負(fù)責(zé)攪亂狀態(tài)向量S(S-box),遞增的索引i確保狀態(tài)S-box中的每個元素都能夠進(jìn)行初始化,隨機的索引j確保S-box攪亂的隨機性。
[0015]對于第二階段,假設(shè)明文長度為Len,則可以用如下類C代碼表示:
[0016]i = j = O ;
[0017]while(i<Len)
[0018]{
[0019]i = i++;
[0020]j = (j+S[i%256])%256;
[0021]swap(S[i%256],S[j]);
[0022]sub_k = S((S[i%256]+S[j])%256);
[0023]}
[0024]第二階段所得到的sub_k即為密鑰流,將密鑰流與明文進(jìn)行逐字節(jié)的異或操作即可得到密文或明文。
[0025]由上述類C代碼可得出,對一段明文進(jìn)行加密的過程就是首先采用密鑰對S-box進(jìn)行初始化及攪亂;再根據(jù)明文的長度,再次對S-box進(jìn)行攪亂并逐字節(jié)的輸出密鑰流;在將明文或密文與密鑰流進(jìn)行異或運算來得到加密或解密的結(jié)果。以上所有的操作都是基于字節(jié)進(jìn)行的運算,對于目前的32位或64位的處理器來說,這是一種相當(dāng)浪費的方式。
[0026]對于第一階段對S-box初始化及攪亂的操作,只要密鑰相同,那么初始化和攪亂的結(jié)果就是相同的;對于第二階段,密鑰流的生成只與攪亂后的S-box和需要加密或解密的數(shù)據(jù)長度有關(guān),而與要加密或解密的數(shù)據(jù)本身是無關(guān)的;由此可得出,當(dāng)需要進(jìn)行RC4加解密的數(shù)據(jù)長度有限時,可以預(yù)先定義一個虛擬的長度值,進(jìn)而可以生成與虛擬長度值相對應(yīng)的密鑰流,將生成的密鑰流存儲后,當(dāng)有加密或解密的需求后即可多字節(jié)并行讀取密鑰流進(jìn)行操作,從而通過密鑰流的重用性和并行性大大提高加解密的運算速度。如果采用軟件實現(xiàn)以上操作,那么存儲的密鑰流將始終暴露在內(nèi)存當(dāng)中,將會降低安全性;而采用硬件實現(xiàn),則會避免這種情況。
[0027]本發(fā)明提供的一種高速有限長度的RC4加解密裝置就是針對以上描述的問題,所實現(xiàn)的高速有限長度的RC4加解密裝置。

【發(fā)明內(nèi)容】

[0028]本發(fā)明采用FPGA的邏輯資源、RAM資源及并行運算的特性,提供一種高速有限長度的RC4加解密裝置,能夠支持RC4算法的密鑰流的生成和存儲,支持最長16字節(jié)一組的任意長度數(shù)據(jù)的加密或解密,支持每個時鐘周期輸出一個最長16字節(jié)的操作結(jié)果。
[0029]本發(fā)明提供的一種高速有限長度的RC4加解密裝置,包括以下模塊:
[0030]至少一個數(shù)據(jù)接收模塊,用于緩存主機下發(fā)的隊列信息及加解密的數(shù)據(jù)。
[0031 ]至少一個密鑰流生成模塊,用于緩存主機下發(fā)的密鑰,通過密鑰生成密鑰流,并將密鑰流進(jìn)行緩存。
[0032]至少一個數(shù)據(jù)處理模塊,用于根據(jù)主機下發(fā)的隊列信息對數(shù)據(jù)進(jìn)行加密或解密處理。
[0033]至少一個數(shù)據(jù)發(fā)送模塊,用于將數(shù)據(jù)處理模塊產(chǎn)生的結(jié)果回送到主機。
[0034]本發(fā)明提供的一種高速有限長度的RC4加解密裝置中,所有模塊均通過FPGA進(jìn)行實現(xiàn),F(xiàn)PGA通過Pcie接口與主機進(jìn)行通訊,用于信息和數(shù)據(jù)的接收和回傳。
[0035]本發(fā)明提供的一種高速有限長度的RC4加解密裝置,密鑰接收完成后即開始密鑰流的生成及存儲,并且生成的密鑰流及主機下發(fā)的密鑰未向主機提供讀取操作,避免了密鑰流的暴露;相比于常規(guī)RC4算法實現(xiàn)的每次處理I字節(jié),本發(fā)明提供的一種高速RC4加解密裝置每次處理16字節(jié),并且可根據(jù)需要調(diào)整為32、64或更多字節(jié)的處理能力,處理速度將大大提尚O
【附圖說明】
[0036]圖1為本發(fā)明的高速有限長度的RC4加解密裝置結(jié)構(gòu)示意圖。
[0037]圖2為本發(fā)明的密鑰流生成流程圖。
[0038]圖3為本發(fā)明的數(shù)據(jù)處理流程圖。
【具體實施方式】
[0039]下面結(jié)合附圖對本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明。
[0040]本發(fā)明提供的一種高速有限長度的RC4加解密裝置,如圖1所示,所述RC4加解密裝置由數(shù)據(jù)接收模塊、密鑰流生成模塊、數(shù)據(jù)處理模塊及數(shù)據(jù)發(fā)送模塊構(gòu)成。數(shù)據(jù)接收模塊負(fù)責(zé)將主機傳入的隊列信息和加解密的數(shù)據(jù)進(jìn)行緩存,緩存完成后通知數(shù)據(jù)處理模塊對所述的隊列信息和加解密的數(shù)據(jù)進(jìn)行處理;密鑰流生成模塊負(fù)責(zé)緩存主機傳入的密鑰,采用RC4算法生成密鑰流,并將生成的密鑰流緩存;數(shù)據(jù)處理模塊負(fù)責(zé)從數(shù)據(jù)接收模塊的緩存中讀取待處理的隊列信息和加解密數(shù)據(jù),從密鑰流生成模塊讀取密鑰流,并將待處理的隊列信息和加解密數(shù)據(jù)和密鑰流異或后得到密文,將密文送入數(shù)據(jù)發(fā)送模塊;數(shù)據(jù)發(fā)送模塊負(fù)責(zé)將密文通過Pcie接口回傳到主機。
[0041]圖2顯示了本發(fā)明的密鑰流生成流程,下面結(jié)合圖2并假設(shè)密鑰為16字節(jié)、生成1024字節(jié)的密鑰流的情況對密鑰流生成流程進(jìn)行逐步的詳細(xì)說明:
[0042]步驟1:主機下發(fā)密鑰,該密鑰緩存在FPGA內(nèi)部RAM。
[0043]步驟2:主機下發(fā)密鑰流生成指令,此時將開始根據(jù)主機下發(fā)的密鑰進(jìn)行密鑰流的生成。
[0044]步驟3:初始化索引i為O
[0045]步驟4:將索引i的值賦值到S[i ],索引i自加。
[0046]步驟5:判斷索引i的值是否小于256,如小于256則返回步驟4,否則進(jìn)入步驟6。
[0047]步驟6:將索引1、j的值初始化為O。
[0048]步驟7:將索引」賦值,」=(」+5[1]+1([1%16])%256。1(為密鑰,5[1]為5盒中的第1個元素。
[0049]步驟8:攪亂S盒,攪亂方式為將S[i]與S[j]進(jìn)行交換。
[0050]步驟9:索引i進(jìn)行遞增。
[0051]步驟10:判斷索引i的值是否小于256,如小于256則返回步驟7,否則進(jìn)入步驟11。
[0052]步驟11:將索引1、j的值初始化為O。
[0053]步驟12:索引i進(jìn)行遞增。
[0054]步驟13:將索引j 賦值,j = (j+S[i%256])% 256。
[0055]步驟14:交換 S[i]與S[j]。
[0056]步驟15:將 sub_k 賦值,sub_k = S((S[i%256]+S[j])%256),sub_k 即為生成的密鑰流。
[0057]步驟16:將sub_k存儲到FPGA的片內(nèi)RAM中。
[0058]步驟17:判斷索引i的值是否小于1024,如果小于1024則返回步驟12,否則結(jié)束密鑰流生成。
[0059]圖3顯示了本發(fā)明的數(shù)據(jù)處理流程,下面結(jié)合圖3并假設(shè)處理數(shù)據(jù)為18字節(jié)的情況對數(shù)據(jù)處理流程進(jìn)行逐步的詳細(xì)說明:
[0060]步驟1:等待密鑰流生成模塊的密鑰流就位信號,如就位則轉(zhuǎn)到步驟2,否則繼續(xù)等待。
[0061]步驟2:主機下發(fā)隊列信息,指明本次操作的數(shù)據(jù)長度、操作序列號及回傳主機的偏移地址。
[0062]步驟3:主機下發(fā)待處理數(shù)據(jù),由于主機下發(fā)的數(shù)據(jù)位寬為64位,而數(shù)據(jù)處理模塊處理數(shù)據(jù)的位寬為128位,所以數(shù)據(jù)接收模塊在緩存數(shù)據(jù)時,將主機輸入的64位數(shù)據(jù)重新拼接為128位數(shù)據(jù),拼接的規(guī)則為先輸入的數(shù)據(jù)緩存到高64位,后輸入的數(shù)據(jù)緩存到低64位,當(dāng)輸入的有效數(shù)據(jù)不足128位時,將在有效數(shù)據(jù)后添加O進(jìn)行補足并緩存;當(dāng)緩存至少一個128位的數(shù)據(jù)后,給出數(shù)據(jù)就位信號。
[0063]步驟4:數(shù)據(jù)處理模塊收到數(shù)據(jù)就位信號后,從數(shù)據(jù)接收模塊中讀取一個16字節(jié)的待處理數(shù)據(jù)。
[0064]步驟5:數(shù)據(jù)處理模塊從密鑰流生成模塊中讀取相應(yīng)的16字節(jié)的密鑰流。
[0065]步驟6:將16字節(jié)的待處理數(shù)據(jù)與密鑰流進(jìn)行異或操作。
[0066]步驟7:將異或結(jié)果寫入數(shù)據(jù)發(fā)送模塊的緩存。
[0067]步驟8:判斷是否為最后一個16字節(jié)的數(shù)據(jù)處理完成,是則通知數(shù)據(jù)發(fā)送模塊進(jìn)行發(fā)送數(shù)據(jù),否則返回步驟4。
[0068]步驟9:數(shù)據(jù)發(fā)送模塊收到通知后,首先發(fā)送數(shù)據(jù)接收模塊接收到的隊列信息,指明回傳的數(shù)據(jù)長度、操作序列號等信息。
[0069]步驟10:向主機發(fā)送數(shù)據(jù)發(fā)送模塊緩存中的數(shù)據(jù)。
[0070]步驟11:判斷當(dāng)前發(fā)送的數(shù)據(jù)是否為最后一個數(shù)據(jù),是則轉(zhuǎn)到步驟12,否則轉(zhuǎn)到步驟10 ο
[0071]步驟12:再次發(fā)送數(shù)據(jù)接收模塊接收到的隊列信息,用于標(biāo)識數(shù)據(jù)發(fā)送完成。
[0072]綜上所述,本發(fā)明提供的一種高速有限長度的RC4加解密裝置采用硬件實現(xiàn)了RC4的核心部分,并通過子密鑰緩存后并行輸出的方式,實現(xiàn)了每時鐘周期完成16字節(jié)數(shù)據(jù)的處理;相比于軟件實現(xiàn)的每個指令周期處理I字節(jié)的方式,處理效率大大提升,并且本發(fā)明提供的一種高速有限長度的RC4加解密裝置作為主機的加速外設(shè),降低了 CPU的資源消耗。
[0073]本發(fā)明提供的一種高速有限長度的RC4加解密裝置所生成的密鑰流存儲于FPGA的片內(nèi)RAM中,并且未向主機提供訪問接口,使得密鑰流不會被讀取到主機內(nèi)存中,當(dāng)本裝置脫離主機環(huán)境時,由于RAM的掉電丟失特性,使得密鑰流會自動銷毀,避免了密鑰流暴露的風(fēng)險,提高了系統(tǒng)的安全性。
【主權(quán)項】
1.一種高速有限長度的RC4加解密裝置,其特征在于:包括, 至少一個數(shù)據(jù)接收模塊,用于緩存主機下發(fā)的隊列信息及加解密的數(shù)據(jù); 至少一個密鑰流生成模塊,用于緩存主機下發(fā)的密鑰,通過密鑰生成密鑰流,并將密鑰流進(jìn)行緩存; 至少一個數(shù)據(jù)處理模塊,用于根據(jù)主機下發(fā)的隊列信息對數(shù)據(jù)進(jìn)行加密或解密處理; 至少一個數(shù)據(jù)發(fā)送模塊,用于將數(shù)據(jù)處理模塊產(chǎn)生的結(jié)果回送到主機。2.根據(jù)權(quán)利要求1所述的一種高速有限長度的RC4加解密裝置,其特征在于:所述的數(shù)據(jù)接收模塊、密鑰流生成模塊、數(shù)據(jù)處理模塊和數(shù)據(jù)發(fā)送模塊均通過FPGA進(jìn)行實現(xiàn),F(xiàn)PGA通過Pcie接口與主機進(jìn)行通訊,用于信息和數(shù)據(jù)的接收和回傳。3.根據(jù)權(quán)利要求1所述的一種高速有限長度的RC4加解密裝置,其特征在于:密鑰流生成流程如下, 步驟1:主機下發(fā)密鑰,該密鑰緩存在FPGA內(nèi)部RAM; 步驟2:主機下發(fā)密鑰流生成指令,此時將開始根據(jù)主機下發(fā)的密鑰進(jìn)行密鑰流的生成; 步驟3:初始化索引i為O; 步驟4:將索引i的值賦值到S [ i ],索引i自加; 步驟5:判斷索引i的值是否小于256,如小于256則返回步驟4,否則進(jìn)入步驟6; 步驟6:將索引i、j的值初始化為O; 步驟7:將索引j賦值,j=(j+3[1]+1([1%16])%256;K為密鑰,S[1]為3盒中的第1個元素; 步驟8:攪亂S盒,攪亂方式為將S[ i ]與3[ j ]進(jìn)行交換; 步驟9:索引i進(jìn)彳丁遞增; 步驟10:判斷索引i的值是否小于256,如小于256則返回步驟7,否則進(jìn)入步驟11; 步驟11:將索引i、j的值初始化為O ; 步驟12:索引i進(jìn)行遞增; 步驟13:將索引 j賦值,j = (j+S[ i % 256 ]) % 256; 步驟14:交換S[i]與S[j]; 步驟 15:將 sub_k 賦值,sub_k = S((S[i%256]+S[j])%256),sub_k 即為生成的密鑰流; 步驟16:將sub_k存儲到FPGA的片內(nèi)RAM中; 步驟17:判斷索引i的值是否小于1024,如果小于1024則返回步驟12,否則結(jié)束密鑰流生成。4.根據(jù)權(quán)利要求1所述的一種高速有限長度的RC4加解密裝置,其特征在于:數(shù)據(jù)處理模塊進(jìn)行數(shù)據(jù)處理的流程如下, 步驟I:等待密鑰流生成模塊的密鑰流就位信號,如就位則轉(zhuǎn)到步驟2,否則繼續(xù)等待;步驟2:主機下發(fā)隊列信息,指明本次操作的數(shù)據(jù)長度、操作序列號及回傳主機的偏移地址; 步驟3:主機下發(fā)待處理數(shù)據(jù),由于主機下發(fā)的數(shù)據(jù)位寬為64位,而數(shù)據(jù)處理模塊處理數(shù)據(jù)的位寬為128位,所以數(shù)據(jù)接收模塊在緩存數(shù)據(jù)時,將主機輸入的64位數(shù)據(jù)重新拼接為.128位數(shù)據(jù),拼接的規(guī)則為先輸入的數(shù)據(jù)緩存到高64位,后輸入的數(shù)據(jù)緩存到低64位,當(dāng)輸入的有效數(shù)據(jù)不足128位時,將在有效數(shù)據(jù)后添加O進(jìn)行補足并緩存;當(dāng)緩存至少一個128位的數(shù)據(jù)后,給出數(shù)據(jù)就位信號; 步驟4:數(shù)據(jù)處理模塊收到數(shù)據(jù)就位信號后,從數(shù)據(jù)接收模塊中讀取一個16字節(jié)的待處理數(shù)據(jù); 步驟5:數(shù)據(jù)處理模塊從密鑰流生成模塊中讀取相應(yīng)的16字節(jié)的密鑰流; 步驟6:將16字節(jié)的待處理數(shù)據(jù)與密鑰流進(jìn)行異或操作; 步驟7:將異或結(jié)果寫入數(shù)據(jù)發(fā)送模塊的緩存; 步驟8:判斷是否為最后一個16字節(jié)的數(shù)據(jù)處理完成,是則通知數(shù)據(jù)發(fā)送模塊進(jìn)行發(fā)送數(shù)據(jù),否則返回步驟4; 步驟9:數(shù)據(jù)發(fā)送模塊收到通知后,首先發(fā)送數(shù)據(jù)接收模塊接收到的隊列信息,指明回傳的數(shù)據(jù)長度、操作序列號信息; 步驟10:向主機發(fā)送數(shù)據(jù)發(fā)送模塊緩存中的數(shù)據(jù); 步驟11:判斷當(dāng)前發(fā)送的數(shù)據(jù)是否為最后一個數(shù)據(jù),是則轉(zhuǎn)到步驟12,否則轉(zhuǎn)到步驟.10; 步驟12:再次發(fā)送數(shù)據(jù)接收模塊接收到的隊列信息,用于標(biāo)識數(shù)據(jù)發(fā)送完成。
【文檔編號】H04L9/06GK105897407SQ201610388124
【公開日】2016年8月24日
【申請日】2016年6月2日
【發(fā)明人】徐曉燕, 李高超, 周淵, 張露晨, 馬秀娟, 唐積強, 徐小磊, 毛洪亮, 劉俊賢, 蘇沐冉, 何萬江, 劉慶良
【申請人】北京賽思信安技術(shù)股份有限公司, 國家計算機網(wǎng)絡(luò)與信息安全管理中心
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
潍坊市| 花垣县| 泸水县| 昌邑市| 永宁县| 安多县| 吉木乃县| 蒲江县| 吉隆县| 班玛县| 同仁县| 成武县| 牙克石市| 蒲江县| 九龙城区| 卫辉市| 广州市| 靖州| 南华县| 顺昌县| 开阳县| 柳州市| 桃园县| 汉川市| 中方县| 綦江县| 武义县| 大邑县| 太白县| 海淀区| 晋中市| 昌吉市| 读书| 虹口区| 凌云县| 安阳县| 会昌县| 梁平县| 渭南市| 香河县| 南京市|