专利名称:一种指令级密码设备能量消耗信息生成方法
技术领域:
本发明涉及一种指令级密码设备能量消耗信息生成方法,用于基于密码算法生成其宿主密码设备运行时的能量迹(能耗值曲线),能量迹用于评估密码算法对于能量分析攻击的防御能力,属于信息安全技术领域。
背景技术:
侧信道攻击(Side-Channel Attacks)指攻击者通过密码算法执行过程中产生的额外信息泄露对密码算法实现进行破解的攻击方式。近年来,侧信道攻击作为一种新型的密码分析方法受到了产业界和学术界的广泛关注,得到迅速发展。传统的密码分析将密码实现视作黑盒子,只利用其输入与输出实施密码破解;而侧信道攻击在考虑密码实现输入输出的同时,利用密码实现在进行密码计算时泄露的时间信息、能量消耗信息或者电磁辐射信息等物理信息,辅助实施密码破解。
能量分析攻击是一种利用密码设备运行时的能量消耗信息实施密钥恢复的重要的侧信道攻击方法。能量迹是时间轴上的能耗值曲线,记录密码设备执行周期的瞬时能量消耗。能量分析攻击即利用能量迹实施攻击,这种攻击严重威胁着集成电路以及基于集成电路设计的各种密码设备的实际安全性。
密码设备能量消耗模拟工具对于评估密码实现的实际安全性,尤其是设计阶段的实际安全性具有重要意义,对于客观比较和评估各种能量分析攻击的有效性,以及评估各种防御措施的有效性同样具有重要意义。传统的针对实际密码设备的评估,其代价相当高昂,原因在于设计者无法在设计过程中评估抗防御对策的有效性,不安全的防御对策很可能导致整个开发周期的重新实施;在模拟工具的支撑下,能量分析攻击安全性检测可以渗透在各个层次的设计中,可以显著缩减研发周期和成本。
然而,截至目前,尚未出现适用于能量分析攻击的能量消耗信息生成方法,特别缺乏同时具有多种能量模型适应能力及具有不同噪声水平刻画能力的模拟工具。 SimplePower和JouleTrack是目前两种典型的能量消耗模拟器,前者的应用对象是编译优化和体系结构优化,在噪声模拟方面不符合能量分析攻击的要求;后者宣称可以针对多种体系结构提供时钟级的能量消耗信息,但是只能以C源文件作为输入,无法结合特定微处理器的体系结构进行能量消耗信息的生成。发明内容
针对现有技术存在的问题,本发明旨在提供一种指令级密码设备能量消耗信息生成方法。本发明基于密码算法及其宿主硬件的体系结构生成能量迹,对密码设备能耗特征的刻画能力强、资源开销小、生成速度快。需要特别指出的是,该方法并不局限于特定密码算法的类型(对称、非对称密码算法等)以及实现方式(朴素实现抑或受保护实现),具有广泛的适用范围。
本发明基于“指令级密码设备能量消耗信息生成方法”,设计并实现了一种指令4级密码设备能量消耗信息生成原型系统,使用该系统可以精确模拟典型密码设备的能量消耗。本发明实现的原型系统采用高度模块化、可扩展的体系结构,本发明为设计阶段对密码设备进行分析与刻画提供基础,从而通过合适的参数配置,可以刻画多种类型的设备泄漏特征。具体的,包括4个基本功能模块,即预编译模块、指令铺平模块、模拟引擎模块以及能量迹生成器模块。同时,该系统易于扩展至除C51之外的其他硬件平台,还可以基于 SvstemC在不同的抽象层次上生成密码设备的能量消耗信息。
本发明的技术方案为
一种指令级密码设备能量消耗信息生成方法,其步骤为
1)选取一目标密码设备,选取并初始化该密码设备中各主要物理单元的噪声模式、能量模型,设置各主要物理单元能耗占总能耗比重;
2)对所选密码算法的实现源程序进行编译,得到源程序的汇编指令序列;
3)采用词法分析器对所述汇编指令序列中的指令进行逐条识别,并根据识别结果及该密码算法的输入参数将该算法中的分支指令、循环指令铺平为顺序执行的指令序列;
4)指令模拟引擎模拟执行步骤幻铺平后的指令序列,记录各主要物理单元在指令执行过程中所处理的数据;
5)能量迹生成器根据步骤1)的初始化结果,将步骤4)记录的每条指令执行过程中处理的数据映射为指令的能量消耗值,得到该目标密码设备运行该密码算法的能量消耗 fn息ο
进一步的,所述步骤3)中指令序列的铺平方法为
a)标记所述汇编指令序列中每条指令的tag值,将每条跳转指令的tag标记为0、 将没有跳转发生的指令的tag标记为-1 ;
b)词法分析器识别到一条指令后,根据标记tag的值判断是否有跳转发生,若没有则进行步骤c);若有跳转发生,则判断当前指令的地址是否为要跳转到的地址,如果是, 则置当前指令的tag值为-1,进行步骤c),否则对当前指令不作处理,取下一条指令进行识别;
c)判断当前指令是否为跳转指令,若是跳转指令且跳转条件成立,则置当前指令的地址为要跳转到的地址,然后继续取下一条指令识别;否则直接取下一条指令识别。
进一步的,所述模拟引擎模块包括处理器模块、总线模块以及存储器RAM模块,所述总线模块包括地址总线模块和数据总线模块,所述存储器MM模块包括片内RAM模块和片外RAM模块;所述指令模拟引擎模拟执行步骤幻铺平后的指令序列过程中,对每一条指令的模拟方法为
a)所述处理器模块从程序存储器ROM中取出待执行指令,并通过所述总线模块读取指令的地址PC及指令的二进制编码;其中,总线模块将其传输的PC及指令的二进制编码顺序以“物理单元名称该物理单元处理的数据”的形式存储到一中间值文件中;
b)所述处理器模块将该指令的操作数地址通过地址总线模块传送给存储器RAM 模块,然后存储器RAM模块将指定地址的数据通过数据总线模块传输给处理器模块;其中, 地址总线模块将指令操作数地址存储到该中间值文件中,存储器RAM模块将指令操作数地址和该地址存储的数据存储到该中间值文件中,数据总线模块将指令操作数地址对应的数据以“物理单元名称该物理单元处理的数据”的形式顺序存储到该中间值文件中;
c)所述处理器模块执行当前指令,并将执行结果通过总线模块传输给存储器RAM 模块;其中,总线模块将处理器模块的执行结果及地址存储到该中间值文件中,存储器RAM 模块将处理器模块的执行结果及地址结果以“物理单元名称该物理单元处理的数据”的形式顺序存储到该中间值文件中。
进一步的,所述噪声模式初始化为无噪声、或随机噪声、或高斯噪声。
进一步的,所述能量模型初始化为汉明重量模型、或汉明距离模型、或比特权重模型。
进一步的,所述主要物理单元包括总线、片内RAM、片外RAM等。
原型系统各模块描述如下
■预编译模块
对密码算法的实现源程序进行编译,得到源程序的汇编指令序列,比如密码算法C51汇编代码。若系统输入为密码算法的C等高级语言实现代码,则可通过使用 KeiluVision等编译工具对相应的实现代码源程序进行编译。
■指令铺平模块
该模块基于词法分析器Lex进行汇编指令铺平,即对算法执行序列中的指令序列进行逐条识别,继而根据识别的结果以及算法的输入参数将算法中的分支指令、循环指令铺平为顺序执行的指令序列。这种处理能够显著提高模拟速度。
■模拟引擎模块
该模块基于对密码设备能耗特征的刻画(刻画层次可配置),这种刻画包括对数字电路实现中的主要物理单元(处理器、存储器和总线等)活动的模拟,并将这些物理单元的活动(数据处理、指令执行等)过程中处理的数据(存取数据,传输数据等),传送给能量迹生成器。该模块根据C51微控制器指令集将汇编指令类型、操作数映射为设备中各个功能单元的计算及存储行为,最终得到各主要物理单元指令执行过程中的状态。
■能量迹生成器模块
该模块可以灵活配置各主要物理单元在总能量消耗中的比重、能量模型、噪声模型,并将模拟引擎记录的各物理单元在各活动过程中的状态或者状态迁移映射为瞬时能量消耗值,即将各主要物理单元活动过程中处理的数据根据本领域公知的能量模型映射为能量消耗值,继而累加成密码设备的瞬时能量消耗。
与现有技术相比,本发明的积极效果为
■本发明不局限于特定密码算法的类型(对称、非对称密码算法等)以及实现方式(朴素实现抑或受保护实现),具有广泛的适用范围。
■本发明支持自定义密码设备的各物理单元在整体能量消耗中的比重。
■本发明支持定制密码设备各物理单元的能量消耗模型,例如汉明重量模型、汉明距离模型、比特权重模型以及其他自定义能量模型等。
■本发明支持刻画密码设备各个物理单元以及整体噪声水平(均值,方差及峰值等)以及噪声形态,例如均勻噪声、高斯噪声等。
■本发明支持C51、DSP、ARM等不同的微处理器体系架构。
目前,本发明已经测试过的算法包括AES、DES、Camellia、SMS4、RSA、LBlock等算法,以及部分算法的掩码实现(例如,AES、LBlock等的掩码实现),支持兼容C51系列微处理器平台。此外,本发明可扩展的体系结构还为日后的功能扩展和升级提供了完善的接口。
图1 指令级能量消耗信息生成系统工作流程图2 指令铺平模块指令解析流程图3 密码设备的高层次能耗特征刻画示意图。
具体实施方式
以C51体系结构下的密码算法指令级能量消耗信息生成为例,本发明主要分以下 4个基本步骤实施。
(1)预编译
对输入对象为密码算法C51汇编代码进行编译,得到源程序的汇编指令序列。若系统输入为密码算法的C等高级语言实现代码,则可通过使用Keil uVision等编译工具得到功能等价的C51指令系统下的实现代码或其他指令系统的汇编程序代码。
(2)指令铺平
将密码算法汇编指令序列中非顺序执行的指令(例如,跳转指令)铺平为顺序执行的指令序列。指令铺平技术主要利用词法分析器Lex生成的适合密码设备硬件平台的指令扫描器,扫描密码算法的汇编指令代码,并对算法执行序列中的每一条指令进行识别。如果识别到的指令是跳转指令且跳转条件成立,则将当前跳转指令输出到中间代码,并跳转到指定地址继续扫描下一条指令;否则,则将当前指令输出到中间代码,并对下一条指令进行扫描处理;然后根据识别结果以及该密码算法的输入参数将该算法中的分支指令、循环指令铺平为顺序执行的指令序列。
(3)模拟引擎
模拟引擎可以精确模拟指令的执行行为,记录指令执行过程中主要物理单元(总线、片内RAM和片外RAM)的活动(数据处理、指令执行),将这些中间值存储到中间值文件中。
(4)能量迹生成器
能量迹生成器不仅可以方便地配置密码设备主要物理(处理器、存储器和总线等)单元在总能量消耗中所占比重、能量模型以及噪声水平等,还可以方便地配置全局噪声。能量迹生成器根据设定的配置,将模拟引擎记录的密码设备主要物理单元(处理器、存储器和总线等)在活动过程中所处理的数据根据本领域公知的能量模型(汉明重量模型、 汉明距离模型、比特权重模型等)映射为主要物理单元的能量消耗值,并根据配置的噪声水平添加相应的噪声作为该物理单元最终能量消耗值。
本发明在指令级级别上将密码设备刻画为包含处理器、存储器、总线等物理单元的集合;首先,通过预编译将密码算法实现适合于本发明的输入;然后,通过指令铺平模块将密码算法汇编指令铺平为顺序执行的指令序列,以提高模拟引擎的模拟速度;接着,通过模拟引擎模块精确模拟密码算法汇编指令的执行行为,记录各物理单元在指令执行过程中所处理的数据;最后,能量迹生成器模块根据各物理单元在能量消耗中所占比重的配置、噪声水平以及所选择的适当能量模型(由目标密码设备决定),将每条指令执行过程中处理的数据(包括总线传输数据、RAM数据变化等)映射为指令的能量消耗值。
工作流程
本发明目前支持的C51硬件平台的总线、片内RAM和片外RAM是主要物理单元。本发明系统工作流程如图1所示。
(1)初始化参数
■初始化算法类型(AES-128、LBlock 等)为 AES-128 ;
■初始化硬件平台为C51平台;
■初始化密码设备各物理单元的噪声模式(随机噪声、高斯噪声、无噪声)为无噪声;
■初始化密码设备各物理单元的能量模型(汉明重量模型、汉明距离模型、比特权重模型等)为汉明重量模型;
■初始化程序存储器ROM。
■初始化密码设备各物理单元能耗占总能耗比重,总线为70%、片内RAM为20%、 片外RAM为10%。
(2)预编译
预编译阶段,将密码算法的C等高级语言实现代码,编译为为密码算法C51汇编代码,得到源程序的汇编指令序列。
(3)指令铺平
指令铺平模块以预编译模块输出的汇编指令序列为输入。
指令铺平模块输出的顺序执行指令序列称之为中间代码,该模块输出的中间代码存储在中间代码文件中。
以C51硬件平台为例,指令铺平模块需要处理的跳转指令有AJMP、LJMP, SJMP, JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNE、RET 等。
该模块采用公知的词法分析器Lex生成C51指令扫描器,扫描密码算法8051汇编代码。C51指令扫描器对输入的密码算法汇编代码逐条扫描,如果当前识别到的指令是跳转指令且跳转条件成立,则将当前跳转指令输入到中间代码文件中,并跳转到指定地址,继续扫描一条指令;否则,则将当前指令输入到中间代码文件中,其中中间指令顺序存储,然后对下一条指令进行扫描处理。
其中,指令铺平对每一条指令的处理按如下三个步骤进行处理,每条指令的处理流程如图2所示。这里的tag标记为-1时表示没有跳转发生,否则表示有跳转发生。
Step 1 标记每条指令的tag值,其中每条跳转指令的tag为0,每条非跳转指令为-I。
Step 2 :C51指令扫描器识别到一条指令后,根据标记tag的值判断是否有跳转发生,若有跳转发生(Jump Stisfied),则转至乂印3 (Jump Occurred);否则,转至Mep 4(No Jump Occurred)。
Step 3 判断当前指令的地址(PC)是否就是要跳转到的地址(JumpAddr),若PC =JumpAddr,也即是当前指令的地址就是要跳转到的地址,则置当前指令的tag标记为-1, 表示跳转已完成,转至乂印4 ;否则对当前指令不作处理,C51指令扫描器取下一条指令识别。8
Step 4 判断当前指令是否为跳转指令,若是跳转指令且跳转条件成立,则置标记 PC = JumpAddr,即置当前指令的地址为要跳转到的地址,表示已经有跳转发生,然后继续取下一条指令识别;否则直接取下一条指令识别。
(4)模拟指令执行
模拟引擎模块以指令铺平的输出中间代码文件为输入,将中间代码文件中的指令序列读入到程序存储器ROM中。
模拟引擎模块输出密码设备主要物理单元的数据处理、指令执行活动数值为“中间值”,存储中间值的文件称之为“中间值文件”。中间值文件的文件存储格式为(物理单元名称该物理单元处理的数据),其中文件中并无括号。
模拟引擎模块精确模拟指令的执行行为,记录指令执行过程中主要物理单元(总线、片内RAM和片外RAM)的活动(数据处理、指令执行),将这些中间值存储到中间值文件中。
模拟引擎模块包括处理器模块、总线模块(地址总线模块和数据总线模块)以及存储器RAM模块(片内RAM模块和片外RAM模块)等主要物理单元模块。其中处理器模块主要完成取指令、解码以及指令执行等功能,实现主要是对硬件平台支持的汇编指令进行解析;总线模块(地址总线模块和数据总线模块)主要功能是记录处理器模块在取指令、解码以及指令执行三个阶段过程中放到总线上传输的数据,实现就是开辟一块连续的存储空间用来存取值;存储器模块(片内RAM模块和片外RAM模块)主要功能是记录处理器模块在取指令、解码以及指令执行三个阶段过程中存在存储器上的数据,实现就是开辟一块连续的存储空间用来存取值。
其中,每条指令的处理过程均分为3个阶段,如图3所示。
Step 1 取指令,处理器模块从程序存储器ROM中取出待执行指令,取指令过程中从寄存器中取出该指令的PC及指令的二进制编码,通过总线模块传输到处理器模块,其中总线模块会将其传输的PC以及指令的二进制编码顺序以“物理单元名称该物理单元处理的数据”的形式存储到中间值文件中。
Step 2 解码,处理器模块对指令进行解码,将该指令的操作数地址通过地址总线模块传送给存储器RAM模块,然后存储器RAM模块将指定地址的数据通过数据总线模块传输给处理器模块,其中地址总线模块将指令操作数地址、存储器RAM模块将指令操作数地址和该地址存储的数据、数据总线模块将指令操作数地址对应的数据以(物理单元名称 该物理单元处理的数据)的形式顺序存储到中间值文件中。
Step 3 指令执行,取得操作码和操作数后,处理器模块进行计算,并将最后的结果通过总线模块传输给存储器RAM模块,其中总线模块将处理器模块的计算结果及地址、 存储器RAM模块将处理器模块的计算结果及地址结果以“物理单元名称该物理单元处理的数据”的形式顺序存储到中间值文件中。
(5)生成能量迹
能量迹生成器模块以模拟指令执行的输出文件为输入。
能量迹生成器模块输出密码设备执行过程的能量消耗到能耗文件。
其中,每条指令的能耗计算如下所示。
■配置密码设备主要物理单元(总线、片内RAM、片外RAM)的噪声模式;
■配置密码设备全局噪声模式;
■配置密码设备主要物理单元(总线、片内RAM、片外RAM)的能量消耗在总能量消耗中的比重;
■配置密码设备主要物理单元(总线、片内RAM、片外RAM)的能量模型;
■假设密码设备主要物理单元总线、片内RAM、片外RAM的能量消耗在总能量消耗中的比重分别为Brate、Irate、Erate,其中比重取值范围均为
;密码设备主要物理单元总线、片内RAM、片外RAM的能量模型分别为Bpm、Ipm、Epm,其中能量模型可以是汉明重量模型、 汉明距离模型、比特权重模型等;密码设备主要物理单元总线、片内RAM、片外RAM的噪声分别为Bn。ise、Inoise> Emi…密码设备的全局噪声为Gn。ise,其中噪声水平可以为无噪声、高斯噪声、随机噪声等。出现在密码设备主要物理单元总线、片内RAM、片外RAM的中间值分别为 Bvalue> Ivalue> EvallK。那么每条指令能量消耗Ip。可由下列公式计算得出。
Ipc = Brate* (Bpm (Bvalue) +Bnoise)
+Irate* (Ipm (Ivalue)+Inoise)
+Erate* (Epm (Evalue)+Enoise)
+Gnoise
(6)能量迹绘制
能量迹绘制模块以生成能量迹输出的能耗文件为输入,绘制出能量迹曲线。
权利要求
1.一种指令级密码设备能量消耗信息生成方法,其步骤为1)选取一目标密码设备,选取并初始化该密码设备中主要物理单元的噪声模式、能量模型,设置各主要物理单元能耗占总能耗比重;2)对所选密码算法的实现源程序进行编译,得到源程序的汇编指令序列;3)采用词法分析器对所述汇编指令序列中的指令进行逐条识别,并根据识别结果及该密码算法的输入参数将该算法中的分支指令、循环指令铺平为顺序执行的指令序列;4)指令模拟引擎模拟执行步骤幻铺平后的指令序列,记录各物理单元在指令执行过程中所处理的数据;5)能量迹生成器根据步骤1)的初始化结果,将步骤4)记录的每条指令执行过程中处理的数据映射为指令的能量消耗值,得到该目标密码设备运行该密码算法的能量消耗信肩、ο
2.如权利要求1所述的方法,其特征在于所述步骤3)中指令序列的铺平方法为a)标记所述汇编指令序列中每条指令的tag值,将每条跳转指令的tag标记为0、将没有跳转发生的指令的tag标记为-1 ;b)词法分析器识别到一条指令后,根据标记tag的值判断是否有跳转发生,若没有则进行步骤c);若有跳转发生,则判断当前指令的地址是否为要跳转到的地址,如果是,则置当前指令的tag值为-1,进行步骤c),否则对当前指令不作处理,取下一条指令进行识别;c)判断当前指令是否为跳转指令,若是跳转指令且跳转条件成立,则置当前指令的地址为要跳转到的地址,然后继续取下一条指令识别;否则直接取下一条指令识别。
3.如权利要求1所述的方法,其特征在于所述模拟引擎模块包括处理器模块、总线模块以及存储器MM模块,所述总线模块包括地址总线模块和数据总线模块,所述存储器RAM 模块包括片内RAM模块和片外RAM模块;所述指令模拟引擎模拟执行步骤;3)铺平后的指令序列过程中,对每一条指令的模拟方法为a)所述处理器模块从程序存储器ROM中取出待执行指令,并通过所述总线模块读取指令的地址PC及指令的二进制编码;其中,总线模块将其传输的PC及指令的二进制编码顺序以“物理单元名称该物理单元处理的数据”的形式存储到一中间值文件中;b)所述处理器模块将该指令的操作数地址通过地址总线模块传送给存储器RAM模块, 然后存储器RAM模块将指定地址的数据通过数据总线模块传输给处理器模块;其中,地址总线模块将指令操作数地址存储到该中间值文件中,存储器RAM模块将指令操作数地址和该地址存储的数据存储到该中间值文件中,数据总线模块将指令操作数地址对应的数据以 “物理单元名称该物理单元处理的数据”的形式顺序存储到该中间值文件中;c)所述处理器模块执行当前指令,并将执行结果通过总线模块传输给存储器RAM模块;其中,总线模块将处理器模块的执行结果及地址存储到该中间值文件中,存储器RAM模块将处理器模块的执行结果及地址结果以“物理单元名称该物理单元处理的数据”的形式顺序存储到该中间值文件中。
4.如权利要求1或2或3所述的方法,其特征在于所述噪声模式初始化为无噪声、或随机噪声、或高斯噪声。
5.如权利要求1或2或3所述的方法,其特征在于所述能量模型初始化为汉明重量模型、或汉明距离模型、或比特权重模型。
6.如权利要求1或2或3所述的方法,其特征在于所述待测密码设备为C51硬件平台; 所述物理设备包括总线、片内RAM、片外RAM。
全文摘要
本发明公开了一种指令级密码设备能量消耗信息生成方法,属于信息安全领域。本方法为1)选取一目标密码设备,并初始化该密码设备中各主要物理单元的噪声模式、能量模型,设置各主要物理单元能耗比重;2)对所选密码算法的实现源程序进行编译,得到汇编指令序列;3)采用词法分析器对汇编指令序列中的指令进行识别,并将分支指令、循环指令铺平为顺序执行的指令序列;4)指令模拟引擎模拟执行铺平后的指令序列,记录各主要物理单元在指令执行过程中所处理的数据;5)根据初始化结果,将记录的每条指令执行过程中处理的数据映射为指令的能量消耗值,得到目标密码设备运行该密码算法的能量消耗信息。本发明具有刻画能力强、资源开销小等优点。
文档编号G06F9/30GK102508637SQ20111037462
公开日2012年6月20日 申请日期2011年11月22日 优先权日2011年11月22日
发明者刘继业, 周永彬, 李建堂 申请人:中国科学院软件研究所