朱玉倩,王 超,张 艳
(华北计算机系统工程研究所,北京 100083)
在密码学领域,主要使用对称密码算法对信息进行加密,保障信息的机密性。随着密码分析技术的进步和敌手攻击能力的提升,加密密码算法的设计要求不断提高。分析与识别保密系统所采用的密码算法,对于评估信息系统安全性、密码分析和攻击、非法通信监控、恶意代码识别等都有着重要的理论意义[1]。
近几年加密算法生成密文的检验领域成果层出不穷,王瑛[2]等人结合人工智能技术和机器学习方法,研究和设计了网络加密流量检测体系框架和方法。吴杨[3-4]等人通过NIST 随机性检测标准中的单比特频数检验、块内频数检验和游程检验理论设计统计量,对OpenSSL软件库中的AES、Camellia、DES、3DES和作者实现的SM4 分组密码算法生成的200 组、每组1 万条密文进行分析,实现上述5种分组密码算法的识别。
本文方法具有以下不同点:
(1)支持全部NIST 随机性检验标准;
(2)统计量为NIST 检验失败次数;
(3)7种对称密码算法,涵盖分组密码算法和序列密码算法;
(4)5种随机方式和2种影射方式构造密钥和初始向量得到10 类密文;
(5)运用单因素方差分析。
密码算法主要包括序列密码算法、分组密码算法、公钥密码算法以及散列函数。序列密码算法输出的密文序列既与密码算法相关,又与算法加载的密钥和初始向量相关,不同的密钥和初始向量将产生不同的输出;分组密码算法输出的密文序列既与密码算法和工作模式相关,又与算法加载的密钥、明文和初始向量相关。对于给定的分组密码算法、工作模式和固定明文,不同的密钥和初始向量将产生不同的输出。
本文主要使用序列密码算法和分组密码算法,具体包括ZUC-128算法[5]、ZUC-256算法[6]、Snow算法[7]、AES算法[8]、SM4算法[9]、SOSEMANUK算法[10]以及Triviurm算法[11],共计7种密码算法。
ZUC-128 算法是我国自主研发的序列密码算法,被3GPP 选为LTE 加密标准算法。它采用128 bit的初始密钥和128 bit的初始向量作为输入,输出关于字的密钥流对信息进行加解密。ZUC 执行分为两个阶段:初始化阶段和工作阶段。第一阶段是对密钥和初始向量进行初始化,第二阶段每一个时钟脉冲产生一个32 bit的密钥输出。
ZUC-256 算法是ZUC-128 算法的改进版,包含了初始化阶段、密钥流生成阶段及消息认证码生成阶。初始化阶段采用256 bit 初始密钥,与ZUC-128 流密码高度兼容,进一步提高了算法的安全性。
Snow 算法是一种面向字的序列密码算法,其密钥长度为128 bit,初始向量长度为128 bit。
SM4 算法是一种分组密码算法,作为国家密码管理局公布的第一个商用分组密码标准。分组长度为128 bit,密钥长度也为128 bit。
SOSEMANUK 算法是一种序列密码算法,该算法是欧洲流密码工程胜选算法之一,其密钥长度为256 bit,初始向量长度为128 bit。
Triviurm 算法是一种基于硬件的序列密码算法,是欧洲流密码工程eSTREAM 胜选算法之一,支持多种长度的密钥和初始向量。本文使用经典的长度,密钥长度为80 bit,初始向量长度为80 bit。
AES 算法是一种分组密码算法,作为美国新的分组密码标准,相对于其他传统加密算法,AES 在扩散性、混淆性和数据加解密效率等方面具有较为明显的优势。AES 算法的分组长度为128 bit,支持128 bit、192 bit 和256 bit的密钥长度,分别记为AES-128、AES-192、AES-256,相应的迭代轮数分别为10 轮、12 轮和14 轮。本文使用的是经典的AES-256。
NIST 随机性检测标准是美国国家标准与技术研究院(National Institute of Standards and Technology)用于检测比特序列与真随机序列之间偏差的方法集。主要包括:单比特频数检验(Frequency)、块内频数检验(Block Frequency)、游程检验(Runs)、最大游程检验(Longest Run)、二元矩阵秩检验(Rank)、离散傅里叶变换检验(FFT)、非重叠匹配检验(NonOverlapping Template)、重叠匹配检验(Overlapping Template)、全局通用统计检验(Universal)、线性复杂度检验(Linear Complexity)、序列串行检验(Serial)、近似熵检验(Approximate Entropy)、累加和检验(Universal)、随机偏移检验(Random Excursions)以及随机偏移变量检验(Random Excursions Variant)。其具体应用过程可参考文献[12]中的研究内容。
为了降低密钥和初始向量的选取对密文序列的检测判断产生影响,本文采用5种随机方式复合2种影射方式,共10种方式构造[5,12]。
(1)随机方式
①反馈移位寄存器
n 位线性反馈移位寄存器的逻辑功能如图1 所示,0和1 是特征为2的素域GF(2)的两个元素。其中F(x0,x1,…,xn-1)=
图1 n 位反馈移位寄存器
②random 随机方式
通过rand()函数设置参数作为种子,调用rand()函数,它会依据内部状态返回一个随机数,同时更新内部状态,得到密文序列。
③AES 分组加密算法方式
使用固定的密钥初始化AES 分组加密算法,初始明文设为全0,加密后得到的密文作为伪随机数序列输出;将上一次的密文输出作为新一次的明文输入,如此迭代加密产生密文序列。
④线性反馈移位寄存器联合AES 方式
线性反馈移位寄存器方式产生伪随机数序列,将其作为AES 分组加密算法的明文输入,加密后产生密文序列。
⑤随机方式rand 联合AES 方式
使用rand 方式产生伪随机数序列,将其作为AES 分组加密算法的明文输入,加密后产生密文序列。
(2)影射方式
本文约定32 B、16 B 或10 B 长密钥的二进制表示中,若1 仅出现为0、1、2 或3 次,则称此密钥为弱密钥。32 B 或10 B 长初始向量的二进制表示中,若1 仅出现为0、1、2 或3 次,则称此初始向量为弱初始向量。
①弱方式
5种随机方式中的任一种方式产生64 bit 伪随机数,将其影射至所有弱密钥和弱初始向量之中,生成伪随机的弱密钥或弱初始向量。
②全域投影方法
5种随机方式中任一种方式产生64 bit 伪随机数[12]。
SPSS(Statistical Product and Service Solutions) 统计产品与服务解决方案是常用统计软件[13]。
NIST 随机性检测标准中15种检验方法的失败个数作为因变量共15 列,增加密码算法种类标识列作为因子。7种算法、5种随机方式和2种影射方式总计得到70 行数据。
单因素方差分析的前提条件主要包括正态性和方差齐性。
理论上多元方差分析要求各因变量服从多元正态分布,但目前常见的统计软件还无法实现多元正态性检验,所以在实际应用中,弱化为考察每一个变量是否服从正态分布[13-15]。
由于样本量超过50,选用柯尔莫戈洛夫-斯米诺夫检验,每一个变量的正态性检验结果如表1 所示。在0.05的显著性水平下,只有累加和检验不服从正态分布。进一步,通过非参数检验得到累加和检验为单峰对称分布,因此可以认为近似正态分布。
表1 柯尔莫戈洛夫-斯米诺夫检验
方差齐性检验中,仅单比特频数检验基于平均值的显著性等于0.046,其余均大于0.05,如表2 所示。因此可以认为方差相等,满足单因素方差分析使用的前提要求。
表2 方差齐性检验部分结果
选择密码算法各类标识作为控制变量,15种检验方法的失败个数作为观测变量。
(1)零假设:控制变量不同水平下观测变量各总体的均值无显著性差异,即7种密码算法关于15种检验方法得到的失败数构成的15 维向量的均值相等。
(2)单因素方差分析部分结果如表3 所示,仅二元矩阵秩检验的显著性等于0.48,其余均大于0.05。
表3 ANOVA 部分结果
(3)在显著性水平0.05 下,概率值P 比0.05 大,则零假设成立,认为控制变量不同水平下观测变量的总体均值基本相同,控制变量各水平的效应同时为0,控制变量的不同水平对观测变量的影响并不显著。
本文通过5种随机方式和2种影射方式构造密钥和初始向量,生成对称密码算法10 类密文,使用15种NIST 随机性检验方法统计失败次数,再利用SPSS 软件进行单因素方差分析。实验结果表明,7种对称密码算法在0.05 显著性水平下的检验结果在统计学上无显著差异。因此,此统计检验可作为评价密码算法好坏的指标之一。