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

實(shí)現(xiàn)rc4算法中s-box初始化的方法和裝置的制作方法

文檔序號:7962703閱讀:393來源:國知局
專利名稱:實(shí)現(xiàn)rc4算法中s-box初始化的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,尤其涉及一種解決RC4加密S-BOX高效初始化的方法和裝置。
背景技術(shù)
RC4算法是一種分組對稱加密算法,算法一般考慮支持64bit和128bit的密鑰。 RC4算法可以分為兩個步驟 第一步S-B0X初始化
1 ) 256字節(jié)大小的S-BOX線性地初始化成值為0-255。
2) 準(zhǔn)備好用來生成偽隨機(jī)字節(jié)的種子(SEED),在通信系統(tǒng)中,種子可由密鑰(Key)和 初始化向量IV (Initialization Vector)組成,若RC4支持64bit密鑰,則種子的 組成如式(1)所示
5^ = {勿[39:0],[23:0]} (1)
若支持128bit密鑰,則種子的組成如式(2)所示
5^ = {勿[103:0],/7[23:0]} (2)
3) j=0,按照下面的偽代碼對S-Box的內(nèi)存單元的線性值進(jìn)行調(diào)整
for i = 0 to 255 begin
j = (j + SD[i] + S[i]) mod 256; swap(S[i], S[j])
end
第二步偽隨機(jī)字節(jié)生成,首先令i-O, j=0,然后執(zhí)行下面的偽代碼
i = i + 1 (mod 256) j = j + S[i] (mod 256) swap(S[i], S[j]) t = S[j] + S[i] (mod 256) K = S(t)
在上面的兩個步驟中SD(i)是指種子的第i個字節(jié),對于64bit的種子,則i應(yīng)該以8 為模進(jìn)行取值,若支持128bit的種子,則i應(yīng)該以16為模進(jìn)行取值;i, j, t的取值與此 類同。
S(i)是指S-Box中的第i個單元的值;S(j)是指S-Box中的第j個單元的值; S (t)是指S-Box中的第t個單元的值;
K是指需要用來為第i個明文字節(jié)進(jìn)行加/解密的偽隨機(jī)字節(jié)。
該算法的硬件實(shí)現(xiàn)中,對于發(fā)送過程而言,IV和Key可以是軟件事先設(shè)置好的已知量, 也就是說,在明文準(zhǔn)備好之前,控制邏輯就可以執(zhí)行S-BOX的初始化過程,待明文準(zhǔn)備好以 后即可一邊加密一邊發(fā)送,但是對于接收過程而言,IV與幀體的其它字節(jié)一樣都是從參與通 信的對方發(fā)送而來,在接收在完整的IV之前,S-BOX的初始化過程以及幀體(密文)解密過 程無法開始,而幀體的接收是緊隨IV接收之后的,兩者接收速度相同。因此,必須設(shè)置相應(yīng) 的緩存來存儲S-BOX初始化過程中接收到的幀體密文字節(jié),這個緩存的大小與S-BOX初始化 時間長度成正比,初始化時間越長,則需要緩存的數(shù)據(jù)越多,緩存的需求量越大。
由此可見,提高S-BOX初始化效率能有效的減少緩存的大小,同時加快加密和解密。
參見圖1,該圖描述了目前--種較為常見的硬件實(shí)現(xiàn)的時序,該實(shí)現(xiàn)中,每次操作都是 首先得到i所指向的存儲單元的值S[i],按照這個值來計(jì)算j,如果i和j不相等,再得到 j所指向的存儲單元的值S[j],隨后通過分別通過雙口 RAM的兩個端口同時將S[i]和S[j] 分別寫入j和i指向的內(nèi)存單元,實(shí)現(xiàn)交換。
圖1中的空心箭頭線條表示地址傳遞過程,實(shí)箭頭線表示數(shù)據(jù)傳遞過程。以第一次數(shù)據(jù) 調(diào)整為例,S[O]表示S-BOX存儲器第0個存儲單元的內(nèi)容,依據(jù)RC4算法,j=j+S[i]+SEED[i], SEED [O]已知,j被初始化成O,由此可以生成j
;由計(jì)算得到的j[O]可以讀出該單元的 值S[j[O]]。在得到S[j[i]]的同時進(jìn)行兩個操作,將該值通過雙口 RAM的B端口更新到O單 元,將S
通過A端口更新到j(luò)
所指向的位置。
由上述過程可見,每次調(diào)整需要花費(fèi)3個時鐘周期,兩個周期進(jìn)行讀操作, 一個周期進(jìn) 行寫操作。由于S-B0X共計(jì)256個單元,完成S-B0X初始化過程序需要768個時鐘周期。
這種方法花費(fèi)時間較多的根本原因在于,獲得S[i]以后,未能夠及時地根據(jù)其計(jì)算得到 的j[i]訪問該值所指向的存儲單元,以便在緊隨的下一個時鐘上升沿到來時進(jìn)行數(shù)據(jù)交換。
一個可行的解決的方法是對B端口采用另外一個與A端口時鐘相位相反的時鐘,這樣,從A 端口得到S[i]以后,在B端口時鐘的上升沿,就能夠?qū)[i]派生到的j[i]作為地址,對j[i] 單元進(jìn)行讀操作。這就是另外一種速度較快的實(shí)現(xiàn)方法,操作過程如圖2所示。
圖2中空心箭頭線條表示由A口數(shù)據(jù)S[i]派生B口地址j[i]的傳遞過程,實(shí)箭頭線條表示由 S[i]替夠[i]單元的數(shù)據(jù)傳遞過程,點(diǎn)畫箭頭線表示將B口數(shù)銜[i]傳遞到A口作為更新i單元數(shù)據(jù) 的過程。這種方法要求,在B口上升沿到來之前,必須能夠從A口輸出的數(shù)據(jù)派生得到地址j[i]; 在A口上升沿到來之前,必須能夠從B口得到更新i單元數(shù)據(jù)。

發(fā)明內(nèi)容
如上兩種S-BOX初始化方法中,第一種方法無法實(shí)現(xiàn)流水化處理,需要較多的緩存;第 二種方法能夠很好地在A 口和B 口實(shí)現(xiàn)流水操作,近似保證每2個時鐘周期能夠進(jìn)行一次數(shù) 據(jù)調(diào)整,在i單元與j[i]單元不是同一個單元的情況下,全部S-B0X更新完畢需要512個時 鐘周期。與第一種方法相比,初始化速度提高了 1/3。但是由于這種實(shí)現(xiàn)方法需要兩個不同 的時鐘,在邏輯綜合時將會要求對兩個不同的時鐘分別作用的邏輯施加不同的約束;同時, 由于該實(shí)現(xiàn)方法對兩個時鐘的相位有著較為嚴(yán)格的要求,如果時鐘出現(xiàn)偏差,將會導(dǎo)致更新 失效。
對于如上問題,本發(fā)明提供了一種方法和裝置,能夠在不增加時序要求的情況下,實(shí)現(xiàn) S-BOX的高效初始化。本發(fā)明能夠有效的實(shí)現(xiàn)流水化處理,從而減少緩存,降低實(shí)現(xiàn)難度和 成本。
如圖3本發(fā)明部件包括 一個用于存放SEED的SEED存儲器, 一個RC4算法要求的256 字節(jié)長的S-BOX存儲器, 一個地址寄存器ADDRI, 一個地址寄存器ADDRJ,本裝置還包括 一個用于實(shí)現(xiàn)S-BOX初始化的控制器。
所述SEED,由KEY和IV連接構(gòu)成,并存儲于SEED存儲器中;所述S-BOX存儲器, 是RC4算法用于存放偽隨機(jī)數(shù)的雙口 RAM,長度為256字節(jié);所述S-BOX初始化控制器, 用于根據(jù)SEED和S-BOX存儲器中的復(fù)位值,經(jīng)過一系列運(yùn)算生成256字節(jié)的隨機(jī)數(shù),并存 儲于S-BOX存儲器中。所述地址寄存器ADDRI, ADDRJ,用于存放訪問SEED和S-BOX存 儲器的地址,下面i,j均表示訪問地址。
本發(fā)明所述S-BOX初始化控制器,實(shí)現(xiàn)S-BOX的髙效初始化時包括步驟如下
(1) 硬件復(fù)位時,線性設(shè)置為0—255到S-BOX存儲器中;
(2) 當(dāng)發(fā)送或者接收數(shù)據(jù)幀時,根據(jù)KEY和IV連接生成種子,并存放到SEED存儲 器中,初始化地址寄存器ADDRI和ADDRJ為0;
(3) 第0拍中給出SEED存儲器和S-BOX存儲器的訪問地址,記為0,準(zhǔn)備根據(jù)該地 址從SEED存儲器和S-BOX存儲器中各取一個字節(jié)數(shù)據(jù);
(4) 第1拍中,從SEED存儲器讀取一個字節(jié)數(shù)據(jù),記為SD[O],從S-BOX存儲器A 端口讀取一個字節(jié)數(shù)據(jù),記為S[O],計(jì)算j[0H;0+S
+SD
)mod256;
(5) 第2拍中,根據(jù)第1拍中的地址j[O],從S-BOX存儲器A端口讀取一個字節(jié)數(shù)據(jù) 記為S[j[O]],并將S[j
]通過S-BOX存儲器的B端口寫入到地址為0的字節(jié)中; 在做如上處理的同時,將SEED存儲器和S-BOX的訪問地址加1,記為1;
(6) 第3拍中,將S
通過S-BOX存儲器的B端口寫入到地址為j
的字節(jié)中,同時, 根據(jù)第2拍中給出的地址1,從SEED存儲器讀取一個字節(jié)數(shù)據(jù),記為SD[1];從 S-BOX存儲器A端口讀取一個字節(jié)數(shù)據(jù),記為S[1];計(jì)算j[lHJ
+S[l]+SD[1]) mod 256;
(7) 第4拍中,根據(jù)第3拍中的地址j[1],從S-BOX存儲器A端口讀取一個字節(jié)數(shù)據(jù) 記為S[j[l]],并將S[j[l]]通過S-BOX存儲器的B端口寫入到地址為1的字節(jié)中, 在做如上處理的同時,將SEED存儲器和S-BOX的訪問地址加1,記為2。
(8) 第5拍中,將S[l]通過S-BOX存儲器的B端口寫入到地址為j[l]的字節(jié)中,同時 根據(jù)第4拍中給出的地址2,從SEED存儲器讀取一個字節(jié)數(shù)據(jù),記為SD[2];從 S-BOX存儲器A端口讀取一個字節(jié)數(shù)據(jù),記為S[2];計(jì)算j[2HJ[l]+S[2]+SD[2]) mod 256;
(9) 重復(fù)如上過程,直到操作到i255。
這樣通過在同一個時鐘節(jié)拍中對雙口 RAM不同端口的同時讀寫,就能夠使得處理過程 流水化,從而高效的實(shí)現(xiàn)S-BOX的初始化。同時由于不引入新的時序要求,所以也不會增 加時序處理的復(fù)雜度。


圖1常用的S-BOX初始化方法的時序示意圖 圖2改進(jìn)的S-BOX初始化方法的時序示意圖 圖3為實(shí)現(xiàn)本發(fā)明所述方法的裝置結(jié)構(gòu)示意圖 圖4是基于圖3裝置的S-BOX初始化時序示意圖 圖5是本發(fā)明一個實(shí)現(xiàn)的示意圖
具體實(shí)施例方式
請參閱圖5,該圖描述本發(fā)明的一個實(shí)現(xiàn)裝置,該裝置組成如下 一個用于存放SEED 的SEED存儲器; 一個RC4算法要求的256字節(jié)長的S-BOX存儲器, 一個用于實(shí)現(xiàn)S-BOX 初始化的控制器, 一個地址寄存器ADDRI, 一個地址寄存器ADDRJ, —個用于緩存數(shù)據(jù)的 寄存器DATASWAP。
所述SEED,由KEY和IV連接構(gòu)成,并存儲于SEED存儲器中,如果該加密是64位, 那么該種子存儲器為64字節(jié);如果加密是128位,那么該種子存儲器為128字節(jié)。
所述S-BOX存儲器,是RC4算法用于存放偽隨機(jī)數(shù)的雙口RAM,長度為256字節(jié),硬 件復(fù)位時被線性設(shè)置為0—255。
所述地址寄存器ADDRI, ADDRJ,用于存放訪問SEED和S-BOX存儲器的地址,下面U 均表示訪問地址。
所述S-BOX初始化控制器,用于根據(jù)SEED和S-BOX存儲器中的復(fù)位值,經(jīng)過一系列 運(yùn)算生成256字節(jié)的隨機(jī)數(shù),并存儲于S-BOX存儲器中。
請參閱圖4,該圖描述了采用本發(fā)明的S-BOX初始化的基本時序過程。
(1) 硬件復(fù)位時,線性設(shè)置為0—255到S-BOX存儲器中;
(2) 當(dāng)發(fā)送或者接收數(shù)據(jù)幀時,根據(jù)KEY和IV連接生成種子,并存放到SEED存儲 器中,初始化地址寄存器ADDRI和ADDRJ為0;
(3) 第0拍中給出SEED存儲器和S-BOX存儲器的訪問地址,記為0,準(zhǔn)備根據(jù)該 地址從SEED存儲器和S-BOX存儲器中各取一個字節(jié)數(shù)據(jù);
(4) 第1拍中,從SEED存儲器讀取一個字節(jié)數(shù)據(jù),記為SD
;從S-BOX存儲器 A端口讀取一個字節(jié)數(shù)據(jù),記為S
,存放到寄存器DATASWAP中;計(jì)算 j
=(0+ S
+SD
,從S-BOX存儲器A端口讀取一個字節(jié)數(shù) 據(jù)記為S[j[O]],并將S[j
]通過S-BOX存儲器的B端口寫入到地址為0的字節(jié) 中;在做如上處理的同時,0+l,給出SEED存儲器和S-BOX的下一個訪問地址, 記為1;
(6) 第3拍中,將寄存器DATASWAP中存放的S
通過S-BOX存儲器的B端口寫 入到地址為j
的字節(jié)中;同時,根據(jù)第2拍中給出的地址1,從SEED存儲器讀 取一個字節(jié)數(shù)據(jù),記為SD[1];從S-BOX存儲器A端口讀取一個字節(jié)數(shù)據(jù),記 為S [1],存放到寄存器DATASWAP中;計(jì)算j[lHJ
+S[l]+SD[l])mod256,存 放到ADDRJ中;
(7) 第4拍中,根據(jù)第3拍中的地址j[1],從S-BOX存儲器A端口讀取一個字節(jié)數(shù) 據(jù)記為S[j[l]],并將S0[l]]通過S-BOX存儲器的B端口寫入到地址為1的字節(jié) 中。在做如上處理的同時,1 + 1,給出SEED存儲器和S-BOX的下一個訪問地址, 記為2;
(8) 第5拍中,將存放在寄存器DATASWAP中的數(shù)據(jù)S[l]通過S-BOX存儲器的B 端口寫入到地址為j[l]的字節(jié)中;同時,根據(jù)第4拍中給出的地址2,從SEED存
儲器讀取一個字節(jié)數(shù)據(jù),記為SD[2],;從S-BOX存儲器A端口讀取一個字節(jié) 數(shù)據(jù),記為S [2],存放到寄存器DATASWAP中;計(jì)算j[2]=(j[l]+S[2]+SD[2]) mod 256,存放到ADDRJ中。 (9)重復(fù)如上過程,直到操作到i255。 圖4中空心線條表示地址傳遞過程,實(shí)線線條表示數(shù)據(jù)傳遞過程。由圖可見,最差情 況,即每次交換時i與j[i]指向不同的存儲單元,S-BOX的256個單元的更新需要514個時鐘 周期。與第二種方法相比,這種方法的好處在于避免了在兩個端口上采用不同的時鐘,取得 的初始化速度與之幾乎相同;與第一種方法相比,初始化速度提高了近1/3。
改進(jìn)方法需要考慮三種特殊情況j[i]=i, j[i]=i+l,以及j[i]=j[i-l],這三種情況分別表示
下述三種情形
(1) [i]=i,表示第i次操作需要訪問的兩個單元在S-BOX中的位置相同;
(2) [i]=i+l,表示第i次操作的i單元實(shí)際上需要與其緊鄰的下一個單元進(jìn)行數(shù)據(jù)交換;
(3) j[i]=j[i-l],表示第i次操作中需要與i單元交換數(shù)據(jù)的j[i]單元,實(shí)際上是上一次更新 的單元。也就是說,當(dāng)硬件需要從A 口讀取j[i]單元數(shù)據(jù)時,由于B口流水操作滯后 的原因,也正在寫入j[i-l]單元的數(shù)據(jù),而這兩個單元處在同一個位置,這樣就會導(dǎo)致 讀或?qū)懙慕Y(jié)果不確定。
上述三種情況仍然遵循基本時序過程,但是需要在一些細(xì)節(jié)上特別處理,在此不再贅述。 如上所述,本發(fā)明利用S-BOX的雙端口特性,通過時序設(shè)計(jì),能夠不斷從A端口讀取數(shù) 據(jù),在B端口依次更新前面訪問的單元,從而實(shí)現(xiàn)流水化操作。本發(fā)明有效縮短了 S-BOX 的總體調(diào)整時間,大多情況下S-BOX的調(diào)整時間會少于514個時鐘周期。同時本實(shí)現(xiàn)的硬 件模塊僅僅存在1個時鐘域,與其它模塊集成變得更加靈活。
權(quán)利要求
1、一種實(shí)現(xiàn)RC4算法中S-BOX初始化的方法和裝置,涉及的部件包括一個用于存放SEED的SEED存儲器,一個RC4算法要求的256字節(jié)長的S-BOX存儲器,一個地址寄存器ADDRI,一個地址寄存器ADDRJ,其特征在于在本裝置中還包含一個S-BOX初始化控制器。
2、 根據(jù)權(quán)利1所述的方法和裝置,其特征在于包括以下步驟(1) 硬件復(fù)位時進(jìn)行上述各部件的初始化;(2) 第0拍中給出SEED存儲器和S-BOX存儲器的訪問地址,記為0,準(zhǔn)備根據(jù)該 地址從SEED存儲器和S-BOX存儲器中各取一個字節(jié)數(shù)據(jù);(3) 第1拍中,從SEED存儲器讀取一個字節(jié)數(shù)據(jù),記為SD[O];從S-BOX存儲器 A端口讀取一個字節(jié)數(shù)據(jù),記為S
;計(jì)算j
氣0+S
+SD
)mod256;(4) 第2拍中,根據(jù)第l拍中的地址j[O],從S-BOX存儲器A端口讀取一個字節(jié)數(shù) 據(jù)記為S[j[O]],并將S[j
]通過S-BOX存儲器的B端口寫入到地址為0的字節(jié) 中。在做如上處理的同時,0+l,給出SEED存儲器和S-BOX的下一個訪問地址, 記為1;(5) 第3拍中,將S
通過S-BOX存儲器的B端口寫入到地址為j[O]的字節(jié)中。同 時,根據(jù)第2拍中給出的地址l,從SEED存儲器讀取一個字節(jié)數(shù)據(jù),記為SD[1]; 從S-BOX存儲器A端口讀取一個字節(jié)數(shù)據(jù),記為S [l];計(jì)算 J[I]=G
+S[1]+SD[1〗)mod 256;(6) 第4拍中,根據(jù)第3拍中的地址j[1],從S-BOX存儲器A端口讀取一個字節(jié)數(shù) 據(jù)記為S[j[l]],并將S[j[l]]通過S-BOX存儲器的B端口寫入到地址為1的字節(jié) 中。在做如上處理的同時,l + l,給出SEED存儲器和S-BOX的下一個訪問地址, 記為2;(7) 第5拍中,將S[l]通過S-BOX存儲器的B端口寫入到地址為j[l]的字節(jié)中。同 時,根據(jù)第4拍中給出的地址2,從SEED存儲器讀取一個字節(jié)數(shù)據(jù),記為SD[2]; 從S-BOX存儲器A端口讀取一個字節(jié)數(shù)據(jù),記為S P];計(jì)算 J[2]=(j[l]+S[2]+SD[2]) mod 256;(8) 重復(fù)如上過程,直到操作到i255。
全文摘要
本發(fā)明提供一種在通信硬件中,高效實(shí)現(xiàn)RC4算法的S-BOX初始化的方法和裝置。目前在數(shù)據(jù)通信中廣泛應(yīng)用RC4算法對數(shù)據(jù)進(jìn)行加密,RC4算法對每幀數(shù)據(jù)加密和解密以前,需要根據(jù)密鑰(KEY)和初始化向量IV(Initialization Vector)連接生成的種子(SEED)來初始化RC4的S-BOX。對于接收過程而言,KEY和IV必須在幀到達(dá)的時刻從幀頭中取得,然后才能開始S-BOX的初始化過程。而由于幀體的接收是緊隨IV接收之后的,所以在初始化S-BOX的同時,必須設(shè)置相應(yīng)的緩存來存儲收到的幀體密文字節(jié),這個緩存的大小與S-BOX初始化時間長度成正比。本方法就是提供一種高效的S-BOX的初始化方法,在不增加硬件的時序要求的情況下,能夠有效的加快S-BOX的初始化過程,從而減少硬件緩存的大小,降低硬件成本。
文檔編號H04L9/18GK101114904SQ20061008892
公開日2008年1月30日 申請日期2006年7月26日 優(yōu)先權(quán)日2006年7月26日
發(fā)明者梅張雄 申請人:北京中電華大電子設(shè)計(jì)有限責(zé)任公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
乌恰县| 都昌县| 大城县| 肥东县| 鹤山市| 海宁市| 仁寿县| 广安市| 横山县| 开阳县| 隆尧县| 永春县| 怀宁县| 松潘县| 金华市| 沙雅县| 南丹县| 奉化市| 永宁县| 武宁县| 金塔县| 永安市| 四平市| 连州市| 栖霞市| 南召县| 登封市| 新丰县| 建始县| 静安区| 宿松县| 湄潭县| 碌曲县| 龙岩市| 长武县| 巴彦淖尔市| 甘孜| 河西区| 宁河县| 荥经县| 罗田县|