前言
本文介绍的是我在校期间做过的一个具有一定思维难度和挑战的问题,如果你也具有密码学相关背景,可以一起来探讨一下这个问题。
关键词
AES 对称加密 侧信道 DPA CPA
摘要
差分功耗分析(Differential Power Analysis, DPA)和相关性功耗分析(Correlation Power Analysis, CPA)是两种常见的侧信道攻击技术,它们通过分析加密设备在执行加密算法时的功耗信息来推断密钥信息。本文给出基于CPA和DPA的高级加密标准(Advanced Encryption Standard,AES)侧信道攻击实践案例——已知功耗曲线数据,借助Python的Numpy库实现密钥恢复。
正文
-
DPA 差分功耗分析
-
DPA是一种高效低成本的攻击方法,不需要知道被攻击芯片的具体内容。该技术利用加密运算的特点和统计分析技术来推测加密系统中的关键信息,即利用它们获取保存在智能卡内部的数据,而且搜索的密钥空间大大小于目前已知的几种密码分析方法,只需要大约1000次加密,几乎可以破解所有不设防御的智能卡。
-
进行攻击需要准备的数据:N个明文,使用未知密钥的加密器加密,采集得到N条功耗曲线。
-
N条曲线是为了利用统计分析技术增强抗噪声能力
-
数据预处理:曲线采样得到N*M个功耗点,表示为矩阵T。
-
计算猜测的中间结果:选取第一轮第一个S盒的结果作为目标中间值,由于第一轮密钥的每个字节在这个过程中都是独立的,可以采取分治策略逐字节进行攻击,对N个明文对应的字节,分别穷举密钥空间 k 计算中间结果,表示为N*|k|的矩阵Z。
-
到第一次S盒置换结束为止,密钥只与明文进行了一次异或操作,所以用单字节明文和单字节密钥计算得到单字节中间结果,单字节有8位,密钥共256种可能性,利用N组明文得到N*256个中间结果
-
用功耗模型(如取计算结果最高位/最低位)将猜测的中间结果矩阵转成猜测的功耗矩阵H。
-
N组明文得到对应密钥下的N个预测功耗值
-
根据矩阵H划分矩阵T:对于每一列的H,将h值为1的曲线集合分为一类,h值为0的分为另一类,两类曲线求均值后再求均方误差MSE,差值最大的即为正确密钥。
-
一字节密钥对应一列预测功耗值,按照预测功耗值对实际功耗曲线进行分类,如果是正确密钥,分类结果应该与实际结果一致,功耗值较高的为一组,较低的为另一组;若是错误密钥则无明显差异,MSE接近0
-
-
CPA 相关性功耗分析
-
基本过程同DPA,只是采用不同的功耗模型,DPA采用的可看做只输出一个比特的功耗模型,CPA一般可用汉明重量/汉明距离模型,也可以使用机器学习的方式利用已知密钥的设备训练一个模型,去攻击未知密钥的设备。
-
CPA在计算预测功耗矩阵H时采用不同功耗模型,模型越接近实际预测越精准,通过正确密钥预测的功耗值越接近原功耗值,即与原功耗曲线的相关性越高;使用机器学习的方式可以得到更优秀的功耗模型,因为模型本身描述的是中间结果(或者说加密过程)和功耗值的关系,这个关系可以用某种复合函数来表示,也就是可以用多个多项式函数来拟合,各个多项式的参数通过机器学习算法如梯度下降来调参,最后实现更精准的预测。
-
计算每个猜测密钥的功耗曲线和原功耗曲线的相关系数,最大的那个提示正确密钥。
-
这个相关的程度我们使用协方差除以两者的标准差得到的相关系数来描述
-
The End
参考资料: