实现rc4算法中s-box初始化的方法和装置的制作方法

文档序号:7962703阅读:335来源:国知局
专利名称:实现rc4算法中s-box初始化的方法和装置的制作方法
技术领域
本发明涉及网络通信领域,尤其涉及一种解决RC4加密S-BOX高效初始化的方法和装置。
背景技术
RC4算法是一种分组对称加密算法,算法一般考虑支持64bit和128bit的密钥。 RC4算法可以分为两个步骤 第一步S-B0X初始化
1 ) 256字节大小的S-BOX线性地初始化成值为0-255。
2) 准备好用来生成伪随机字节的种子(SEED),在通信系统中,种子可由密钥(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的内存单元的线性值进行调整
for i = 0 to 255 begin
j = (j + SD[i] + S[i]) mod 256; swap(S[i], S[j])
end
第二步伪随机字节生成,首先令i-O, j=0,然后执行下面的伪代码
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个字节,对于64bit的种子,则i应该以8 为模进行取值,若支持128bit的种子,则i应该以16为模进行取值;i, j, t的取值与此 类同。
S(i)是指S-Box中的第i个单元的值;S(j)是指S-Box中的第j个单元的值; S (t)是指S-Box中的第t个单元的值;
K是指需要用来为第i个明文字节进行加/解密的伪随机字节。
该算法的硬件实现中,对于发送过程而言,IV和Key可以是软件事先设置好的已知量, 也就是说,在明文准备好之前,控制逻辑就可以执行S-BOX的初始化过程,待明文准备好以 后即可一边加密一边发送,但是对于接收过程而言,IV与帧体的其它字节一样都是从参与通 信的对方发送而来,在接收在完整的IV之前,S-BOX的初始化过程以及帧体(密文)解密过 程无法开始,而帧体的接收是紧随IV接收之后的,两者接收速度相同。因此,必须设置相应 的缓存来存储S-BOX初始化过程中接收到的帧体密文字节,这个缓存的大小与S-BOX初始化 时间长度成正比,初始化时间越长,则需要缓存的数据越多,缓存的需求量越大。
由此可见,提高S-BOX初始化效率能有效的减少缓存的大小,同时加快加密和解密。
参见图1,该图描述了目前--种较为常见的硬件实现的时序,该实现中,每次操作都是 首先得到i所指向的存储单元的值S[i],按照这个值来计算j,如果i和j不相等,再得到 j所指向的存储单元的值S[j],随后通过分别通过双口 RAM的两个端口同时将S[i]和S[j] 分别写入j和i指向的内存单元,实现交换。
图1中的空心箭头线条表示地址传递过程,实箭头线表示数据传递过程。以第一次数据 调整为例,S[O]表示S-BOX存储器第0个存储单元的内容,依据RC4算法,j=j+S[i]+SEED[i], SEED [O]已知,j被初始化成O,由此可以生成j
;由计算得到的j[O]可以读出该单元的 值S[j[O]]。在得到S[j[i]]的同时进行两个操作,将该值通过双口 RAM的B端口更新到O单 元,将S
通过A端口更新到j
所指向的位置。
由上述过程可见,每次调整需要花费3个时钟周期,两个周期进行读操作, 一个周期进 行写操作。由于S-B0X共计256个单元,完成S-B0X初始化过程序需要768个时钟周期。
这种方法花费时间较多的根本原因在于,获得S[i]以后,未能够及时地根据其计算得到 的j[i]访问该值所指向的存储单元,以便在紧随的下一个时钟上升沿到来时进行数据交换。
一个可行的解决的方法是对B端口采用另外一个与A端口时钟相位相反的时钟,这样,从A 端口得到S[i]以后,在B端口时钟的上升沿,就能够将S[i]派生到的j[i]作为地址,对j[i] 单元进行读操作。这就是另外一种速度较快的实现方法,操作过程如图2所示。
图2中空心箭头线条表示由A口数据S[i]派生B口地址j[i]的传递过程,实箭头线条表示由 S[i]替夠[i]单元的数据传递过程,点画箭头线表示将B口数銜[i]传递到A口作为更新i单元数据 的过程。这种方法要求,在B口上升沿到来之前,必须能够从A口输出的数据派生得到地址j[i]; 在A口上升沿到来之前,必须能够从B口得到更新i单元数据。

发明内容
如上两种S-BOX初始化方法中,第一种方法无法实现流水化处理,需要较多的缓存;第 二种方法能够很好地在A 口和B 口实现流水操作,近似保证每2个时钟周期能够进行一次数 据调整,在i单元与j[i]单元不是同一个单元的情况下,全部S-B0X更新完毕需要512个时 钟周期。与第一种方法相比,初始化速度提高了 1/3。但是由于这种实现方法需要两个不同 的时钟,在逻辑综合时将会要求对两个不同的时钟分别作用的逻辑施加不同的约束;同时, 由于该实现方法对两个时钟的相位有着较为严格的要求,如果时钟出现偏差,将会导致更新 失效。
对于如上问题,本发明提供了一种方法和装置,能够在不增加时序要求的情况下,实现 S-BOX的高效初始化。本发明能够有效的实现流水化处理,从而减少缓存,降低实现难度和 成本。
如图3本发明部件包括 一个用于存放SEED的SEED存储器, 一个RC4算法要求的256 字节长的S-BOX存储器, 一个地址寄存器ADDRI, 一个地址寄存器ADDRJ,本装置还包括 一个用于实现S-BOX初始化的控制器。
所述SEED,由KEY和IV连接构成,并存储于SEED存储器中;所述S-BOX存储器, 是RC4算法用于存放伪随机数的双口 RAM,长度为256字节;所述S-BOX初始化控制器, 用于根据SEED和S-BOX存储器中的复位值,经过一系列运算生成256字节的随机数,并存 储于S-BOX存储器中。所述地址寄存器ADDRI, ADDRJ,用于存放访问SEED和S-BOX存 储器的地址,下面i,j均表示访问地址。
本发明所述S-BOX初始化控制器,实现S-BOX的髙效初始化时包括步骤如下
(1) 硬件复位时,线性设置为0—255到S-BOX存储器中;
(2) 当发送或者接收数据帧时,根据KEY和IV连接生成种子,并存放到SEED存储 器中,初始化地址寄存器ADDRI和ADDRJ为0;
(3) 第0拍中给出SEED存储器和S-BOX存储器的访问地址,记为0,准备根据该地 址从SEED存储器和S-BOX存储器中各取一个字节数据;
(4) 第1拍中,从SEED存储器读取一个字节数据,记为SD[O],从S-BOX存储器A 端口读取一个字节数据,记为S[O],计算j[0H;0+S
+SD
)mod256;
(5) 第2拍中,根据第1拍中的地址j[O],从S-BOX存储器A端口读取一个字节数据 记为S[j[O]],并将S[j
]通过S-BOX存储器的B端口写入到地址为0的字节中; 在做如上处理的同时,将SEED存储器和S-BOX的访问地址加1,记为1;
(6) 第3拍中,将S
通过S-BOX存储器的B端口写入到地址为j
的字节中,同时, 根据第2拍中给出的地址1,从SEED存储器读取一个字节数据,记为SD[1];从 S-BOX存储器A端口读取一个字节数据,记为S[1];计算j[lHJ
+S[l]+SD[1]) mod 256;
(7) 第4拍中,根据第3拍中的地址j[1],从S-BOX存储器A端口读取一个字节数据 记为S[j[l]],并将S[j[l]]通过S-BOX存储器的B端口写入到地址为1的字节中, 在做如上处理的同时,将SEED存储器和S-BOX的访问地址加1,记为2。
(8) 第5拍中,将S[l]通过S-BOX存储器的B端口写入到地址为j[l]的字节中,同时 根据第4拍中给出的地址2,从SEED存储器读取一个字节数据,记为SD[2];从 S-BOX存储器A端口读取一个字节数据,记为S[2];计算j[2HJ[l]+S[2]+SD[2]) mod 256;
(9) 重复如上过程,直到操作到i255。
这样通过在同一个时钟节拍中对双口 RAM不同端口的同时读写,就能够使得处理过程 流水化,从而高效的实现S-BOX的初始化。同时由于不引入新的时序要求,所以也不会增 加时序处理的复杂度。


图1常用的S-BOX初始化方法的时序示意图 图2改进的S-BOX初始化方法的时序示意图 图3为实现本发明所述方法的装置结构示意图 图4是基于图3装置的S-BOX初始化时序示意图 图5是本发明一个实现的示意图
具体实施例方式
请参阅图5,该图描述本发明的一个实现装置,该装置组成如下 一个用于存放SEED 的SEED存储器; 一个RC4算法要求的256字节长的S-BOX存储器, 一个用于实现S-BOX 初始化的控制器, 一个地址寄存器ADDRI, 一个地址寄存器ADDRJ, —个用于缓存数据的 寄存器DATASWAP。
所述SEED,由KEY和IV连接构成,并存储于SEED存储器中,如果该加密是64位, 那么该种子存储器为64字节;如果加密是128位,那么该种子存储器为128字节。
所述S-BOX存储器,是RC4算法用于存放伪随机数的双口RAM,长度为256字节,硬 件复位时被线性设置为0—255。
所述地址寄存器ADDRI, ADDRJ,用于存放访问SEED和S-BOX存储器的地址,下面U 均表示访问地址。
所述S-BOX初始化控制器,用于根据SEED和S-BOX存储器中的复位值,经过一系列 运算生成256字节的随机数,并存储于S-BOX存储器中。
请参阅图4,该图描述了采用本发明的S-BOX初始化的基本时序过程。
(1) 硬件复位时,线性设置为0—255到S-BOX存储器中;
(2) 当发送或者接收数据帧时,根据KEY和IV连接生成种子,并存放到SEED存储 器中,初始化地址寄存器ADDRI和ADDRJ为0;
(3) 第0拍中给出SEED存储器和S-BOX存储器的访问地址,记为0,准备根据该 地址从SEED存储器和S-BOX存储器中各取一个字节数据;
(4) 第1拍中,从SEED存储器读取一个字节数据,记为SD
;从S-BOX存储器 A端口读取一个字节数据,记为S
,存放到寄存器DATASWAP中;计算 j
=(0+ S
+SD
,从S-BOX存储器A端口读取一个字节数 据记为S[j[O]],并将S[j
]通过S-BOX存储器的B端口写入到地址为0的字节 中;在做如上处理的同时,0+l,给出SEED存储器和S-BOX的下一个访问地址, 记为1;
(6) 第3拍中,将寄存器DATASWAP中存放的S
通过S-BOX存储器的B端口写 入到地址为j
的字节中;同时,根据第2拍中给出的地址1,从SEED存储器读 取一个字节数据,记为SD[1];从S-BOX存储器A端口读取一个字节数据,记 为S [1],存放到寄存器DATASWAP中;计算j[lHJ
+S[l]+SD[l])mod256,存 放到ADDRJ中;
(7) 第4拍中,根据第3拍中的地址j[1],从S-BOX存储器A端口读取一个字节数 据记为S[j[l]],并将S0[l]]通过S-BOX存储器的B端口写入到地址为1的字节 中。在做如上处理的同时,1 + 1,给出SEED存储器和S-BOX的下一个访问地址, 记为2;
(8) 第5拍中,将存放在寄存器DATASWAP中的数据S[l]通过S-BOX存储器的B 端口写入到地址为j[l]的字节中;同时,根据第4拍中给出的地址2,从SEED存
储器读取一个字节数据,记为SD[2],;从S-BOX存储器A端口读取一个字节 数据,记为S [2],存放到寄存器DATASWAP中;计算j[2]=(j[l]+S[2]+SD[2]) mod 256,存放到ADDRJ中。 (9)重复如上过程,直到操作到i255。 图4中空心线条表示地址传递过程,实线线条表示数据传递过程。由图可见,最差情 况,即每次交换时i与j[i]指向不同的存储单元,S-BOX的256个单元的更新需要514个时钟 周期。与第二种方法相比,这种方法的好处在于避免了在两个端口上采用不同的时钟,取得 的初始化速度与之几乎相同;与第一种方法相比,初始化速度提高了近1/3。
改进方法需要考虑三种特殊情况j[i]=i, j[i]=i+l,以及j[i]=j[i-l],这三种情况分别表示
下述三种情形
(1) [i]=i,表示第i次操作需要访问的两个单元在S-BOX中的位置相同;
(2) [i]=i+l,表示第i次操作的i单元实际上需要与其紧邻的下一个单元进行数据交换;
(3) j[i]=j[i-l],表示第i次操作中需要与i单元交换数据的j[i]单元,实际上是上一次更新 的单元。也就是说,当硬件需要从A 口读取j[i]单元数据时,由于B口流水操作滞后 的原因,也正在写入j[i-l]单元的数据,而这两个单元处在同一个位置,这样就会导致 读或写的结果不确定。
上述三种情况仍然遵循基本时序过程,但是需要在一些细节上特别处理,在此不再赘述。 如上所述,本发明利用S-BOX的双端口特性,通过时序设计,能够不断从A端口读取数 据,在B端口依次更新前面访问的单元,从而实现流水化操作。本发明有效縮短了 S-BOX 的总体调整时间,大多情况下S-BOX的调整时间会少于514个时钟周期。同时本实现的硬 件模块仅仅存在1个时钟域,与其它模块集成变得更加灵活。
权利要求
1、一种实现RC4算法中S-BOX初始化的方法和装置,涉及的部件包括一个用于存放SEED的SEED存储器,一个RC4算法要求的256字节长的S-BOX存储器,一个地址寄存器ADDRI,一个地址寄存器ADDRJ,其特征在于在本装置中还包含一个S-BOX初始化控制器。
2、 根据权利1所述的方法和装置,其特征在于包括以下步骤(1) 硬件复位时进行上述各部件的初始化;(2) 第0拍中给出SEED存储器和S-BOX存储器的访问地址,记为0,准备根据该 地址从SEED存储器和S-BOX存储器中各取一个字节数据;(3) 第1拍中,从SEED存储器读取一个字节数据,记为SD[O];从S-BOX存储器 A端口读取一个字节数据,记为S
;计算j
气0+S
+SD
)mod256;(4) 第2拍中,根据第l拍中的地址j[O],从S-BOX存储器A端口读取一个字节数 据记为S[j[O]],并将S[j
]通过S-BOX存储器的B端口写入到地址为0的字节 中。在做如上处理的同时,0+l,给出SEED存储器和S-BOX的下一个访问地址, 记为1;(5) 第3拍中,将S
通过S-BOX存储器的B端口写入到地址为j[O]的字节中。同 时,根据第2拍中给出的地址l,从SEED存储器读取一个字节数据,记为SD[1]; 从S-BOX存储器A端口读取一个字节数据,记为S [l];计算 J[I]=G
+S[1]+SD[1〗)mod 256;(6) 第4拍中,根据第3拍中的地址j[1],从S-BOX存储器A端口读取一个字节数 据记为S[j[l]],并将S[j[l]]通过S-BOX存储器的B端口写入到地址为1的字节 中。在做如上处理的同时,l + l,给出SEED存储器和S-BOX的下一个访问地址, 记为2;(7) 第5拍中,将S[l]通过S-BOX存储器的B端口写入到地址为j[l]的字节中。同 时,根据第4拍中给出的地址2,从SEED存储器读取一个字节数据,记为SD[2]; 从S-BOX存储器A端口读取一个字节数据,记为S P];计算 J[2]=(j[l]+S[2]+SD[2]) mod 256;(8) 重复如上过程,直到操作到i255。
全文摘要
本发明提供一种在通信硬件中,高效实现RC4算法的S-BOX初始化的方法和装置。目前在数据通信中广泛应用RC4算法对数据进行加密,RC4算法对每帧数据加密和解密以前,需要根据密钥(KEY)和初始化向量IV(Initialization Vector)连接生成的种子(SEED)来初始化RC4的S-BOX。对于接收过程而言,KEY和IV必须在帧到达的时刻从帧头中取得,然后才能开始S-BOX的初始化过程。而由于帧体的接收是紧随IV接收之后的,所以在初始化S-BOX的同时,必须设置相应的缓存来存储收到的帧体密文字节,这个缓存的大小与S-BOX初始化时间长度成正比。本方法就是提供一种高效的S-BOX的初始化方法,在不增加硬件的时序要求的情况下,能够有效的加快S-BOX的初始化过程,从而减少硬件缓存的大小,降低硬件成本。
文档编号H04L9/18GK101114904SQ20061008892
公开日2008年1月30日 申请日期2006年7月26日 优先权日2006年7月26日
发明者梅张雄 申请人:北京中电华大电子设计有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1