摘要:本文档对序列密码算法ZUC128和ZUC256在32位平台下进行软件实现和评估,包括加密性能和计算MAC的性能,文档最后一章给出ZUC128和ZUC256的性能对比评估结果。
关键词:ZUC128,ZUC256,序列密码,软件实现。
目录
1. 性能测试说明
1.1 对比测试算法说明
本章列举ZUC128、ZUC256与几个常见的序列密码算法的性能对比情况。
性能对比算法中的HC-128、Rabbit、Salsa20-12、Sosemanuk为eSTREAM中偏软件实现的序列密码算法;Mickey v2、Trivium、Grain为eSTREAM中偏硬件实现的序列密码算法;分组密码算法AES仅选用128比特分组和128比特密钥的情况;SM4是分组密码算法,为128比特分组和128比特密钥,Enocoro-128为日本的标准序列密码算法。
1.2 测试环境
测试环境为Intel Core i3@3400 MHz的CPU、Microsoft VS 2008编译器,所有算法均采用标准C实现。表1列出了测试环境详情。
表1 测试环境详情
项目 |
参数 |
处理器 |
DualCore Intel Core i3 @ 3400 MHz (34 x 100) 一级缓存每个核心32KB 二级缓存每个核心256KB 三级缓存共享3MB |
内存 |
4 GB DDR3 SDRAM 1600MHz |
操作系统 |
Microsoft Windows XP Professional Service Pack 3 32bit |
编译器 |
Intel C++ Composer XE 2011 V12.0.1016.2008 优化选项O2 |
1.3 性能测试项说明
性能测试项来自于estreambench以及《ZUC256算法软硬件性能比较大纲》,各测试项的含义如下:
- Init:表示算法初始化所用时间,即密钥和IV装载时间。单位是cycles/setup,表示执行一次初始化需要的时钟周期,简写为cps,下同。
- Stream:表示加密大量数据时的速度,单位为时钟周期每字节(cycle/byte),简写为cpb,或者兆比特每秒(106bit/second)简写为Mbps,下同。此项测试只统计加密数据的时间,不考虑算法初始化的时间,即速度值为加密数据的时间除以加密的字节数。
- xB:表示加密x字节时的速度,这里的xB取16B、40B、576B、1500B、1MB等。此项测试统计算法初始化时间和加密数据的时间,速度值为数据处理时间与算法初始化时间之和,再除以处理字节数。
1.4 测试方式
实验采用欧洲estream算法竞赛的速度测试模型,详情如下。
第1步,在被测试代码段的前后各设置一个时间计数器TS和TF;
第2步,将两个计时器之差T=TS—TF作为这段代码的耗时;
第3步,重复步骤1和步骤2多次,为统计方便设定重复次数为奇数,记重复测试次数为C,得到一系列的耗时值T[i],i=1,2,...,C;
第4步,将统计得到的耗时值序列按从大到小的顺序排列,得到的新序列仍记为T[i],i=1,2,...,C;当然也可按从小到大的顺序排列;
第5步,取新序列的中值T[(C+1)/2]作为本段代码的统计耗时值。
为了保证测试结果的准确性,本测试模型中第1步的时间计数器使用CPU频率计时器,可直接调用汇编指令RDTSC,在Windows环境下可调用__rdtsc()函数。该指令或函数返回CPU时钟周期值,按现代CPU的时钟频率计算,此计数器可精确到纳秒级。两次RDTSC指令返回的时钟周期之差再除以CPU频率,即可得到以秒为单位的耗时值。
本测试中取重复测试次数C为21。
2. 性能测试结果
2.1 资源者占用
资源者占用情况如下表。
2.2 ZUC的加密性能
ZUC算法以及其它对比算法在32位平台下的软件实现性能指标见表3和表4,其中表3列出Init和Stream的性能指标;表4列出处理各种数据长度的性能。
表3 32位平台上各加密算法的软件实现性能
(速度单位cps = cycles/setup,cpb = cycle/byte,mbps = 106bit/second)
算法 |
key+iv (bit) |
Init (cps) |
Stream |
|
(cpb) |
(mbps) |
|||
HC-128 |
128+128 |
15347 |
2.43 |
11193 |
Rabbit |
128+ 64 |
487 |
2.38 |
11429 |
Salsa20-12 |
128+ 64 |
39 |
8.23 |
3305 |
Sosemanuk |
256+128 |
2855 |
14.34 |
1897 |
AES |
128+128 |
752 |
15.86 |
1715 |
SM4* |
128+128 |
665 |
32.64 |
833 |
Mickey v2 |
128+128 |
55427 |
26.61 |
1062 |
Trivium |
80+ 80 |
651 |
4.51 |
6031 |
Grain |
128+ 96 |
1085 |
31.87 |
853 |
Enocoro-128 |
128+64 |
3964 |
35.55 |
765 |
ZUC128 |
128+128 |
4016 |
26.76 |
1017 |
ZUC256 |
256+184 |
4132 |
26.88 |
1011 |
表4 加密算法处理各种数据长度的性能比较
(速度单位cpb = cycle/byte)
算法 |
16B (cpb) |
32B (cpb) |
40B (cpb) |
576B (cpb) |
1500B (cpb) |
9000B (cpb) |
100MB (cpb) |
HC-128 |
947 |
458 |
389.8 |
29.14 |
12.75 |
— |
2.82 |
Rabbit |
32.56 |
18.57 |
11.38 |
2.86 |
2.61 |
— |
2.36 |
Salsa20-12 |
31.38 |
17.64 |
30.96 |
8.54 |
8.48 |
— |
8.61 |
Sosemanuk |
143.54 |
72.58 |
59.61 |
19.94 |
17.53 |
— |
14.94 |
AES |
63.46 |
39.61 |
41.09 |
17.50 |
16.60 |
— |
16.08 |
SM4 |
74.06 |
53.28 |
60.12 |
34.53 |
33.29 |
— |
32.64 |
Mickey v2 |
4518 |
2703 |
2398 |
1138 |
1093 |
— |
1075 |
Trivium |
45.79 |
24.94 |
20.93 |
5.69 |
4.95 |
— |
4.65 |
Grain |
128.96 |
31.87 |
59.54 |
33.67 |
32.42 |
— |
33.67 |
enocoro-128 |
273.47 |
155.28 |
131.09 |
42.21 |
38.15 |
— |
37.03 |
ZUC128 |
258.75 |
142.75 |
118.92 |
32.86 |
28.84 |
26.77 |
— |
ZUC256 |
262.01 |
144.50 |
120.63 |
32.97 |
28.89 |
26.79 |
— |
注:ZUC256限制同一密钥和IV输出的最大子密钥长度为20000比特,即2500字节,因此9000B的测试为越界使用。
2.3 ZUC的加密性能对比结论
从表3和表4可以看出,ZUC128和ZUC256的加密速度没有显著差异。
从理论上讲,ZUC128和ZUC256在加密时,仅初始化时的仅寄存器设置方式不同,在初始化和工作时每一拍的执行流程完全相同。因此它们的速度不应该有显著差异。
2.4 ZUC的MAC性能
测试时,每包数据均更换了随机的密钥和IV值。
ZUC128和ZUC-256计算MAC(包括ZUC256计算32比特、64比特、128比特MAC)的性能测试结果见表5。
表5 ZUC128和ZUC-256计算MAC的性能
(速度单位:us)
算法 |
16B |
32B |
40B |
128B |
576B |
1500B |
9000B |
ZUC128 32b-MAC |
1.34 |
1.442 |
1.527 |
2.244 |
5.989 |
13.376 |
74.532 |
ZUC256 32b-MAC |
1.393 |
1.502 |
1.631 |
2.388 |
6.549 |
14.799 |
82.765 |
ZUC256 64b-MAC |
1.451 |
1.596 |
1.701 |
2.532 |
6.933 |
15.84 |
88.541 |
ZUC256 128b-MAC |
1.613 |
1.749 |
1.886 |
2.835 |
7.827 |
18.216 |
101.958 |
2.5 ZUC的MAC性能对比结论
从表5可以看出,ZUC256的MAC性能比ZUC128的MAC性能略低。详见表6和图1。
表6 ZUC128和ZUC-256计算MAC的性能对比
对比项 |
比值 |
ZUC256-32 b MAC : ZUC128 32b-MAC |
0.905 : 1 |
ZUC256-64 b MAC : ZUC128 32b-MAC : |
0.847 : 1 |
ZUC256-128b MAC : ZUC128 32b-MAC : |
0.738 : 1 |
图1 ZUC128和ZUC-256计算MAC的性能对比
(以ZUC128 32b-MAC的速度为基数1)
ZUC256的MAC性能略低的原因如下。
- ZUC128 32b-MAC和ZUC256 32b-MAC在计算MAC时,理论上的计算量没有显著差异。但在具体实现时,为兼容32b、64b、128b-MAC的实现,ZUC256 32b-MAC的实现比ZUC128 32b-MAC略微复杂。这就是ZUC256 32b-MAC实际测试速度略低的主要原因。
- ZUC128 64b-MAC和ZUC256 128b-MAC相比ZUC128 32b-MAC需要分别多增加2个和6个密钥字;此外,TAG长度的增加使得异或数也增加。这就使得ZUC128 64b-MAC和ZUC256 128b-MAC会更慢。
3. 分析结论
ZUC128和ZUC256的性能测试结论如下。
- ZUC128和ZUC256的加密速度没有显著差异,详情参见2.3 ZUC的加密性能对比结论。
- ZUC256的MAC性能比ZUC128略低,32b、64b、128b-MAC的速度分别可达到ZUC128 32b MAC速度的90.5%、84.7%、73.8%,详情参见2.5 ZUC的MAC性能对比结论。