摘要:本文档对序列密码算法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性能对比结论。