发明内容
有鉴于此,本发明的目的在于提供一种密码算法的安全性评估方法和装置,以提高密码算法评估时参数覆盖的完整性和评估的有效性。
第一方面,本发明实施例提供了一种密码算法的安全性评估方法,包括:接收待评估密码算法的初始配置参数;其中,初始配置参数包括数据存储地址标识和密码算法的实现层次;实现层次至少包括流程控制层、接口层和硬件实现层中的一种;根据初始配置参数运行密码算法,保存密码算法运行过程中的第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果;进行下述扰动操作:接收设置的扰动配置参数;其中,扰动配置参数包括变量标识、变量错误类型、扰动对象中的一种或多种;根据扰动配置参数和变量标识的长度,运行密码算法,保存密码算法运行过程中的当前变量标识对应的第二中间结果和密码算法的第二运行结果;继续进行上述扰动操作,直至获取到所有的变量标识对应的第二中间结果和第二运行结果;根据第一运行结果、第二中间结果和第二运行结果生成密码算法的评估结果。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述根据扰动配置参数和变量标识的长度,运行密码算法包括:根据扰动配置参数和变量标识的长度,判断当前变量标识是否是扰动对象;如果是,根据扰动配置参数中的变量错误类型修改变量标识的数值;根据修改后的变量标识的数值,运行密码算法。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,上述保存密码算法运行过程中的第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果包括:使用链表结构保存密码算法运行过程中的第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果;根据密码算法的实现层次,对第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果进行标识;上述保存密码算法运行过程中的当前变量标识对应的第二中间结果和密码算法的第二运行结果包括:使用链表结构保存密码算法运行过程中的每个变量标识对应的第二中间结果和第二运行结果;根据变量标识和密码算法的实现层次,对第二中间结果和第二运行结果进行标识。
结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,上述根据第一运行结果、第二中间结果和第二运行结果生成密码算法的评估结果包括:从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,根据筛选后的变量标识生成密码算法的安全性评估结果;和/或;根据第一运行结果和第二运行结果生成密码算法的安全性评估结果。
结合第一方面的第三种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,其中,上述根据扰动配置参数和变量标识的长度,运行密码算法,保存密码算法运行过程中的当前变量标识对应的第二中间结果和密码算法的第二运行结果包括:将多个随机明文逐一输入至密码算法中,运行密码算法,保存密码算法运行过程中的每个随机明文对应的第一子结果;将多个固定明文逐一输入至密码算法中,运行密码算法,保存密码算法运行过程中的每个固定明文对应的第二子结果;将第一子结果和第二子结果确定为第二中间结果;其中,随机明文和固定明文从扰动配置参数中获取;随机明文和固定明文的数量根据变量标识的长度确定;上述从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,根据筛选后的变量标识生成密码算法的安全性评估结果包括:从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,将变量标识标记一阶备选对象;判断与一阶备选对象存在运算关系的变量标识是否满足下述条件:在第一子结果中,变量标识的所有比特位上的数值均发生变化,且在第二子结果中,变量标识至少一部分比特位上的数值不变;如果是,将变量标识标记为一阶备选对象;判断与一阶备选对象存在运算关系的变量标识是否满足下述条件:在第一子结果中与第二子结果中,变量标识的所有比特位上的数值均发生变化;如果是,根据变量标识在第二子结果中数值的统计特性,确定变量标识是否标记为一阶备选对象;其中,统计特性包括通过汉明重量模型计算出的能量特性;统计一阶备选对象和一阶备选对象的数量,根据统计结果生成密码算法的安全性评估结果。
结合第一方面的第四种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,上述从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,根据筛选后的变量标识生成密码算法的安全性评估结果还包括:从所有的变量标识中删除一阶备选对象;对剩余的变量标识对应的第二中间结果中的数据进行随机配对处理;判断配对的两个数据的长度是否相同;如果否,将配对的两个数据进行对齐处理;将对齐处理后的两个数据进行运算处理,生成当前第二中间结果;其中,运算处理包括异或运算、模加运算和模减运算中的一种或多种;当前第二中间结果包括当前第一子结果和当前第二子结果;从剩余的变量标识对应的当前第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,将变量标识标记二阶备选对象;判断与二阶备选对象存在运算关系的剩余的变量标识是否满足下述条件:在当前第一子结果中,变量标识的所有比特位上的数值均发生变化,且在当前第二子结果中,变量标识至少一部分比特位上的数值不变;如果是,将变量标识标记为二阶备选对象;判断与二阶备选对象存在运算关系的剩余的变量标识是否满足下述条件:在当前第一子结果中与当前第二子结果中,变量标识的所有比特位上的数值均发生变化;如果是,根据变量标识在当前第二子结果中数值的统计特性,确定变量标识是否标记为二阶备选对象;其中,统计特性包括通过汉明重量模型计算出的能量特性;统计一阶备选对象、一阶备选对象的数量、二阶备选对象和二阶备选对象的数量,根据统计结果生成密码算法的安全性评估结果。
结合第一方面的第四种可能的实施方式,本发明实施例提供了第一方面的第六种可能的实施方式,其中,上述根据第一运行结果和第二运行结果生成密码算法的安全性评估结果包括:将第一运行结果和第二运行结果做差值运算,将差值结果进行模N运算;判断模N运算结果与N是否存在最大公约数;如果是,保存最大公约数;如果否,采用无关性分析算法从一阶备选对象中筛选备选对象;统计最大公约数,或者,备选对象和备选对象的数量;根据统计结果生成密码算法的安全性评估结果。
结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,上述接收待评估密码算法的初始配置参数之前,方法还包括:获取待评估密码算法对应的密码设备的物理资源的种类和每种物理资源的大小;其中,物理资源的种类至少包括只读存储器ROM、电可擦可编程只读存储器EEPROM、闪存存储器FLASH、随机存取存储器RAM、总线数据存储空间中的一种或多种;根据每种物理资源的大小,分配每种物理资源对应的数据存储空间;根据物理资源的种类,生成每种物理资源对应的数据存储地址标识。
第二方面,本发明实施例提供了一种密码算法的安全性评估装置,包括:第一参数接收模块,用于接收待评估密码算法的初始配置参数;其中,初始配置参数包括数据存储地址标识和密码算法的实现层次;实现层次至少包括流程控制层、接口层和硬件实现层中的一种;第一算法运行模块,用于根据初始配置参数运行密码算法,保存密码算法运行过程中的第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果;进行下述扰动操作:第二参数接收模块,用于接收设置的扰动配置参数;其中,扰动配置参数包括变量标识、变量错误类型、扰动对象中的一种或多种;第二算法运行模块,用于根据扰动配置参数和变量标识的长度,运行密码算法,保存密码算法运行过程中的当前变量标识对应的第二中间结果和密码算法的第二运行结果;结果获取模块,用于继续进行上述扰动操作,直至获取到所有的变量标识对应的第二中间结果和第二运行结果;评估结果生成模块,用于根据第一运行结果、第二中间结果和第二运行结果生成密码算法的评估结果。
结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,上述第二算法运行模块包括:判断单元,用于根据扰动配置参数和变量标识的长度,判断当前变量标识是否是扰动对象;数值修改单元,用于如果当前变量标识是扰动对象,根据扰动配置参数中的变量错误类型修改变量标识的数值;算法运行单元,用于根据修改后的变量标识的数值,运行密码算法。
本发明实施例带来了以下有益效果:
本发明实施例提供的一种密码算法的安全性评估方法和装置,根据待评估密码算法的初始配置参数运行该密码算法,可以获得该密码算法在多个实现层次的正常运行情况下的第一中间结果和第一运行结果;根据设置的扰动配置参数,对该密码算法进行多次扰动操作,并运行该密码算法,可以获得该密码算法被扰动情况下的第二中间结果和第二运行结果;根据第一运行结果、第二中间结果和第二运行结果可以生成密码算法的评估结果;上述方式可以实现针对密码算法中各个中间结果和运行结果较为全面的仿真和评估,提高了密码算法评估时参数覆盖的完整性;同时,以完整的参数为基础进行密码算法的安全性评估,提高了评估的有效性。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
实施例一:
参见图1所示的一种密码算法的安全性评估方法的流程图,该方法包括如下步骤:
步骤S102,接收待评估密码算法的初始配置参数;其中,初始配置参数包括数据存储地址标识和密码算法的实现层次;实现层次至少包括流程控制层、接口层和硬件实现层中的一种;
参见图2所示的密码算法实现层次的结构示意图;密码算法的实现层次分为三层,顶层为流程控制层202,是整个密码算法的流程控制,相当于算法伪代码设计,所有的功能都是通过调用底层函数实现的;中间层为接口层204,也称为算法功能模块,可以实现密码学中常用的如模乘、平方、置换、Sbox等基本功能模块,还可以实现RSA、ECC等算法的大数模乘、模逆、模加运算及分组密码算法的轮运算等功能模块;底层为硬件实现层206,也称为驱动层,硬件实现层主要是将密码功能单元通过硬件逻辑实现或者软件逻辑实现;这些逻辑是基于基本的加法或者乘法单元、位移寄存器等实现;硬件实现层包括硬件算子仿真模块(例如乘法器,加法器,sbox等模块)。上述流程控制层、接口层和硬件实现层为自上而下依次调用的关系;接口层和硬件实现层均有标准库和DEBUG库,其中,接口层中为标准的功能模块,硬件实现层中为添加了变量监视和扰动函数的DEBUG库。
上述密码算法的实现层次的分层次设计,符合代码编程习惯,同时可以在密码算法实现流程的底层细节不清楚情况下,将上层流程控制层通过仿真功能实现,而接口层和硬件实现层的功能可以直接调用PC上的标准库实现;同理,也可以仿真实现到接口层,而屏蔽硬件实现层的基本逻辑操作层仿真。在进行密码算法的实现层次的仿真实现时,通过PC的CPU执行计算,过程变量可以存储在RAM或者寄存器中。
步骤S104,根据初始配置参数运行密码算法,保存密码算法运行过程中的第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果;
在进行密码算法的安全性评估时,需要首先获取密码算法在正常运行情况下的中间结果和运行结果,作为分析扰动后结果的参照和数据基础,上述步骤S102和步骤S104还可以以下述方式实现:(1)初始化全局变量,初始化链表头,配置控制参数(控制参数主要包括扰动开关、错误类型、变量标识、变量的扰动位置、算法层次、扰动作用范围),关闭扰动开关;(2)将配置参数传递到算法仿真系统,执行算法运算,监视所有中间变量并生成链表;(3)根据生成的链表存储变量的列表及长度等信息;
步骤S106,进行下述扰动操作:接收设置的扰动配置参数;其中,扰动配置参数包括变量标识、变量错误类型、扰动对象中的一种或多种;
接收上述扰动配置参数的方式,可以为步骤S104结束后,用户根据第一中间结果设置扰动配置参数;也可以为用户设置初始配置参数的同时,设置扰动配置参数,当进行扰动操作时,再读取预先设置的扰动配置参数。
步骤S108,根据扰动配置参数和变量标识的长度,运行密码算法,保存密码算法运行过程中的当前变量标识对应的第二中间结果和密码算法的第二运行结果;
步骤S110,继续进行上述扰动操作,直至获取到所有的变量标识对应的第二中间结果和第二运行结果;
步骤S112,根据第一运行结果、第二中间结果和第二运行结果生成密码算法的评估结果。
上述步骤S106至步骤S112还可以以下述方式实现:(1)重新配置控制参数,打开扰动开关,设定变量错误类型等;(2)将配置参数传递到算法仿真系统,扰动相应的参数,执行算法运算,监视所有中间变量并生成链表;(3)重复第(1)、(2)步,直到遍历所有的变量;(4)将监视的变量输出到数据分析系统,使用差分功耗和错误分析的模型对数据进行分析,判断是否存在差分功耗或错误分析的漏洞,根据获取到的漏洞生成密码算法的评估结果。
本发明实施例提供的一种密码算法的安全性评估方法,根据待评估密码算法的初始配置参数运行该密码算法,可以获得该密码算法在多个实现层次的正常运行情况下的第一中间结果和第一运行结果;根据设置的扰动配置参数,对该密码算法进行多次扰动操作,并运行该密码算法,可以获得该密码算法被扰动情况下的第二中间结果和第二运行结果;根据第一运行结果、第二中间结果和第二运行结果可以生成密码算法的评估结果;上述方式可以实现针对密码算法中各个中间结果和运行结果较为全面的仿真和评估,提高了密码算法评估时参数覆盖的完整性;同时,以完整的参数为基础进行密码算法的安全性评估,提高了评估的有效性。
考虑到在进行扰动操作时,可能仅对部分参数进行扰动,因此,上述根据扰动配置参数和变量标识的长度,运行密码算法包括如下步骤:(1)根据扰动配置参数和变量标识的长度,判断当前变量标识是否是扰动对象;(2)如果是,根据扰动配置参数中的变量错误类型修改变量标识的数值;(3)根据修改后的变量标识的数值,运行密码算法。可以理解,当当前变量标识不是扰动对象时,针对先一个变量标识继续判断并进行扰动操作。
上述步骤(1)至(3)也可以称为变量监视和扰动函数的流程,还可以以下述方式实现:(1)读取来自控制系统的变量监视和扰动的配置参数;(2)判断是否打开扰动,如果是,执行步骤(3),如果否,执行步骤(5);(3)比对变量标识,当前变量是否为扰动对象,如果是,执行步骤(4),如果否,执行步骤(5);(4)根据变量扰动的错误类型配置,生成新的变量;(5)调用算法相应的功能模块执行运算;(6)存储运算结果。
考虑到在运行密码算法时,中间结果的数据量较大且不易保存,上述保存密码算法运行过程中的第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果,可以以下述方式实现:使用链表结构保存密码算法运行过程中的第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果;根据密码算法的实现层次,对第一中间结果、第一中间结果中的变量标识和变量标识的长度、以及第一运行结果进行标识;
基于同样的考虑,上述保存密码算法运行过程中的当前变量标识对应的第二中间结果和密码算法的第二运行结果,可以以下述方式实现:使用链表结构保存密码算法运行过程中的每个变量标识对应的第二中间结果和第二运行结果;根据变量标识和密码算法的实现层次,对第二中间结果和第二运行结果进行标识。
具体地,在密码算法运行过程中,该过程中产生的变量的存储空间是在变量产生后临时申请,该变量使用完毕后释放空间,保证仿真空间的充足。为了监测所有中间变量,在进行密码算法运行仿真时,使用链表结构对每个出现的变量进行捕获。密码算法的安全性评估过程执行完毕后,将在算法执行过程中出现的所有变量进行编号;同时,考虑到后续测试问题,需要对不同调用层次的变量进行变量区分。在链表的节点结构体中要设置变量内容、变量的调用层级、变量在该层级序号来标示变量。通过链表结构,可以将密码执行流程中的每个变量的值进行保存分析。
在评估密码算法的安全性时,需要分析该密码算法是否能够抵抗多种密码攻击方式,因此,上述根据第一运行结果、第二中间结果和第二运行结果生成密码算法的评估结果包括:(1)从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,根据筛选后的变量标识生成密码算法的安全性评估结果;和/或;(2)根据第一运行结果和第二运行结果生成密码算法的安全性评估结果。
上述步骤(1)可以实现对密码算法的部分参数和部分流程的抗差分功耗分析有效性;上述步骤(2)可以实现对密码算法的部分参数和部分流程的抗差分错误分析有效性;根据具体的密码算法本身的特性,可以同时或者择一地进行上述步骤(1)和(2)。
进一步地,密码算法在进行抗差分功耗分析时,上述根据扰动配置参数和变量标识的长度,运行密码算法,保存密码算法运行过程中的当前变量标识对应的第二中间结果和密码算法的第二运行结果,具体可以以下述方式实现:(1)将多个随机明文逐一输入至密码算法中,运行密码算法,保存密码算法运行过程中的每个随机明文对应的第一子结果;(2)将多个固定明文逐一输入至密码算法中,运行密码算法,保存密码算法运行过程中的每个固定明文对应的第二子结果;(3)将第一子结果和第二子结果确定为第二中间结果;其中,上述随机明文和固定明文从扰动配置参数中获取;上述随机明文和固定明文的数量根据变量标识的长度确定;
密码算法在进行抗差分功耗分析时,上述从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,根据筛选后的变量标识生成密码算法的安全性评估结果,具体可以以下述方式实现:(4)从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,将变量标识标记一阶备选对象;(5)判断与一阶备选对象存在运算关系的变量标识是否满足下述条件:在第一子结果中,变量标识的所有比特位上的数值均发生变化,且在第二子结果中,变量标识至少一部分比特位上的数值不变;如果是,将变量标识标记为一阶备选对象;(6)判断与一阶备选对象存在运算关系的变量标识是否满足下述条件:在第一子结果中与第二子结果中,变量标识的所有比特位上的数值均发生变化;如果是,根据变量标识在第二子结果中数值的统计特性,确定变量标识是否标记为一阶备选对象;其中,统计特性包括通过汉明重量模型计算出的能量特性;(7)统计一阶备选对象和一阶备选对象的数量,根据统计结果生成密码算法的安全性评估结果。
上述步骤(1)至(7)为密码算法的一阶抗差分功耗分析流程;上述步骤(1)至(7)还可以通过下述方式实现:
抗差分功耗分析分为两步:首先监测所有的中间变量;然后再对所有中间变量的结果进行分析并选取抗差分功耗分析的目标变量。对于嵌入式密码设备,抗差分功耗分析的基础是数据和功耗的相关性,将该相关性抽象成数据模型,即为一个确定性数据和另外一个可变数据的运算结构。根据算法输入数据的不同,可以将上述数据模型分为两种:一种为随机明文输入,一种为固定明文输入;随机明文输入的输入数量应大于最长变量的比特数的10倍,固定明文输入的输入数量应大于与随机数相关的变量的最长比特数的10倍。
基于上述原理,抗差分功耗分析中首先采用随机的明文数据作为输入,输入的数量由密码算法实现流程中最长的变量的比特数决定;随机输入的数据数量为最长变量的比特数的10倍以上;然后选取固定明文进行运算,运算的次数为密码算法流程中与随机数相关的变量的最长比特数的10倍以上;保存密码算法过程变量的所有结果。
获取到密码算法过程变量的所有结果之后,对调用层级和变量编号相同的数据进行逐一比对,如果该变量所有比特或者部分比特在所有运算过程中保持了不变,则该变量被列为备选对象;否则,则不被列为备选对象;遍历分析与列为备选对象的变量存在运算关系的对象,这些运算包括加减等所有操作。筛选对象的准则主要有:如果某些变量在输入随机明文时结果不相同,但是在固定明文时结果相同,则该变量仍然被列为备选对象;如果某些变量在随机明文和固定明文时均保持不变,则该变量被剔除;如果某些变量在随机明文和固定明文时结果均不相同,则需要进一步分析固定明文时这些变量的统计特性,根据统计特性确定该变量是否列为备选对象。计算固定明文时变量的统计特性时,一般采用集中固定的统计模型。在嵌入式密码芯片中,差分功耗分析最常用的能量模型为汉明重量模型,因此,统计该变量每个字节的汉明重量进行分析,判断与随机数据相比是否存在明显的偏差。如果存在明显的偏差,则将该变量列为备选对象;否则,将该变量剔除。通过算法仿真及上述数据分析,可以判断出算法流程中的哪些变量符合差分功耗分析的要求,将其列为差分功耗分析的备选对象。
关于差分功耗分析的目标变量的选取,通过分析选取合适的目标作为差分功耗分析的对象,是密码算法在进行抗差分功耗分析的目的,如果算法实现过程中没有找到合适的变量作为推荐目标,则说明算法实现流程抗差分功耗分析的防御方案完备。
考虑到经过上述一阶抗差分功耗分析后,没有获取合适的推荐目标,或者获取到的推荐目标不完整,上述从所有的变量标识对应的第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,根据筛选后的变量标识生成密码算法的安全性评估结果,还可以包括如下步骤:(1)从所有的变量标识中删除一阶备选对象;(2)对剩余的变量标识对应的第二中间结果中的数据进行随机配对处理;(3)判断配对的两个数据的长度是否相同;(4)如果否,将配对的两个数据进行对齐处理;(5)将对齐处理后的两个数据进行运算处理,生成当前第二中间结果;其中,运算处理包括异或运算、模加运算和模减运算中的一种或多种;当前第二中间结果包括当前第一子结果和当前第二子结果;(6)从剩余的变量标识对应的当前第二中间结果中,筛选在密码算法运行时,至少一部分比特位上的数值不变的变量标识,将所述变量标识标记二阶备选对象;(7)判断与所述二阶备选对象存在运算关系的剩余的变量标识是否满足下述条件:在所述当前第一子结果中,所述变量标识的所有比特位上的数值均发生变化,且在所述当前第二子结果中,所述变量标识至少一部分比特位上的数值不变;如果是,将所述变量标识标记为二阶备选对象;(8)判断与所述二阶备选对象存在运算关系的剩余的变量标识是否满足下述条件:在所述当前第一子结果中与所述当前第二子结果中,所述变量标识的所有比特位上的数值均发生变化;如果是,根据所述变量标识在当前第二子结果中数值的统计特性,确定所述变量标识是否标记为二阶备选对象;其中,所述统计特性包括通过汉明重量模型计算出的能量特性;(9)统计一阶备选对象、一阶备选对象的数量、二阶备选对象和二阶备选对象的数量,根据统计结果生成密码算法的安全性评估结果。
上述步骤(1)至(9),还可以通过下述方式实现:
在一阶统计模型建立后,将列为一阶备选对象的数据剔除掉,然后评估二阶或者高阶差分功耗分析的可能性;评估二阶差分功耗分析时,需要对剩余的中间变量链表进行任意两个数据做运算处理,一般常用的运算处理包括:异或运算、模加运算(模为CPU位宽)和模减运算(模为CPU位宽);
如果中间结果中的两个数据长度不一致,可以将短数据与长数据进行对齐处理,然后对运算结果数据进行重新分析;长短数据对齐时,采用的方法如下:设长短数据的字节差为N,则每个长数据与N+1个短数据对齐,将所有短数据与长数据右对齐,然后将短数据依次左移0,1,2…N个字节。
通过上述方式处理后的数据,可以采用上述步骤(6)至(8)中的流程进行处理,以获取二阶备选对象。
在实际实现时,还可以采用上述同样的处理方式获取更高阶的备选对象。
进一步地,密码算法在进行抗差分错误分析时,上述根据第一运行结果和第二运行结果生成密码算法的安全性评估结果,具体可以通过下述方式实现:(1)将第一运行结果和第二运行结果做差值运算,将差值结果进行模N运算;(2)判断模N运算结果与N是否存在最大公约数;如果是,保存最大公约数;如果否,采用无关性分析算法从一阶备选对象中筛选备选对象;(3)统计最大公约数,或者,备选对象和备选对象的数量;根据统计结果生成密码算法的安全性评估结果。
具体地,为了更加清楚地描述抗差分错误分析的过程,首先需要定义几种错误类型,然后分别对几种错误类型进行仿真和分析。针对错误注入常用的参数有如下几种分类:根据错误注入的空间位置分为:无法控制、部分控制、完全控制;根据错误注入发生的时刻分为:无法控制、部分控制、精确控制;根据发生错误的比特数分为:单比特错误、多比特错误、随机比特错误;根据数据发生错误的类型为:固定值错误、比特翻转错误、随机数据错误、部分比特固定值错误等;根据错误发生的持续时间可以分为:破坏性错误、永久性错误以及临时性错误。
在实际的仿真分析时,通常可以完全控制错误注入的空间位置;具体而言,将不同物理资源中的变量分别分配内存空间,通过改变不同内存中的值,即可以实现针对不同空间位置的错误注入;仿真分析时,可以在任何时刻进行错误注入,原因为在程序运行过程中,可以改变任何变量的值。
关于根据错误发生的比特数量以及错误发生的类型,仿真分析可能发生四种错误:随机数据错误、固定值错误、比特翻转错误以及部分固定值错误;上述随机数据错误是通过PC机调用标准库产生随机数填充变量的空间,而固定值错误是将变量空间填充为固定值,比特翻转错误是将变量空间与全FF的数据进行异或处理,部分固定值错误是将部分比特置为固定值,而其它比特随机填充。
关于根据错误发生持续的时间,仿真分析有两种错误类型:永久性错误、临时性错误。在仿真永久性错误时,针对某个变量A内存空间使用错误发生类型模型进行修改,然后使用修改后的变量A进行运算;在仿真临时性错误时,针对使用的某个变量A,先将该变量A的备份到变量B,然后将变量B使用错误发生类型进行修改,然后使用变量B进行运算。
密码算法在进行抗差分错误分析时,一般存在如下两种结果:
(1)产生了错误并输出错误结果;这种情况下,需要根据密码算法的性质进行数据计算分析。以RSA算法为例,只需要对错误结果和正确结果进行求差,将结果进行模N运算,然后与N求最大公约数。如果能得到大于1的最大公约数,则攻击成功。如果不能求出最大公约数,需要针对该错误类型进行更细致分析,例如判断是否存在其它的运算后结果与N求最大公约数的可能。在检查safe-error漏洞是否存在时,使用电路综合技术中的无关性分析算法。首先,先判断哪些变量是被推荐为差分功耗分析的一阶变量,在这些变量中进行选择。确定该对象为备选对象以后,可以采用上述无关性分析算法。在采用无关性分析算法进行电路综合分析中,一部分输入变量对中间结果没有影响,这时,称该中间结果是统计独立于输入变量。在safe-error问题中,我们采用如下算法1检查是否推荐该变量作为safe-error备选。
算法1:检验变量是否是safe-error漏洞中备选对象。
输入:某个变量A;
输出:返回是否推荐变量A作为备选对象;
设变量A比特长度为n,对变量A的所有比特1-n,依次进行:
G0:设置变量A的第i个比特位为0;
G1:设置变量A的第i个比特位为1;
如果R(G0)!=R(G1),且有一个结果为正确结果,对所有的i从1到n满足,则该变量被推荐为备选对象;如果某变量被推荐为差分功耗分析变量时,使用算法1判断该变量是否被推荐为safe-error变量。
(2)产生了错误并没有输出结果
如果任何错误类型都无法产生出错误结果,说明该密码算法的错误校验机制比较强大,无法通过错误信息获取任何有用的信息。
为了更加有效地对密码算法的安全性进行评估,在实际实现时,可能需要对密码算法进行抗差分功耗和抗差分错误的综合性仿真分析;由于两种分析都是针对仿真的程序流程进行监测或者修改处理,因此考虑在程序框架中并行实现两者的功能判断。同样,考虑到差分功耗分析和差分错误分析的结合性攻击方式的仿真,因此两者需要有效配合实现仿真。
在程序流程中,每个变量部分分别插入链表节点和变量的重新备份和修改,即完成了差分功耗分析和差分错误分析的基础。在上层控制逻辑中,加入本次仿真需要选择差分功耗分析路径还是差分错误路径,即可实现两者的分离。
同时,考虑到差分错误分析的错误类型,因此,在变量修改的部分,可以根据错误类型调用不同的函数接口实现错误类型的仿真。同时,如果要考虑高阶错误注入,需要随机在两个不同变量进行错误类型注入。这些都可以通过变量编号进行控制,依次进行一阶或者二阶的错误注入处理。
另外,还需要控制端进行输入明文数据的控制仿真。如果明文数据随机,则调用库接口进行产生明文随机数。如果是固定明文,则直接使用该明文进行多次循环运算。
综上,即可以实现了差分功耗和差分错误分析的综合仿真。
考虑到在密码算法的安全性评估过程中,产生并需要保存的数量很大,上述接收待评估密码算法的初始配置参数之前,方法还包括:(1)获取待评估密码算法对应的密码设备的物理资源的种类和每种物理资源的大小;其中,物理资源的种类至少包括只读存储器ROM、电可擦可编程只读存储器EEPROM、闪存存储器FLASH、随机存取存储器RAM、总线数据存储空间中的一种或多种;(2)根据每种物理资源的大小,分配每种物理资源对应的数据存储空间;(3)根据物理资源的种类,生成每种物理资源对应的数据存储地址标识。
由于上述安全性评估过程并不是仅仅利用PC机实现密码算法功能,而是要根据密码算法实现流程以及执行过程中所需要的物理资源进行仿真。且,在针对密码算法的防御差分功耗分析和差分错误分析的有效性评估中,数据流以及数据所需要的物理资源是分析的关键变量,因此,本仿真模型重点考虑上述逻辑模块功能仿真。
具体地,在仿真实现密码算法流程时,数据流的仿真需要考虑嵌入式密码设备存在EEPROM\FlASH、CPU访问的主RAM、通讯接口的RAM、CPU Register以及密码模块协处理器寄存器等存储单元,同时也存在地址总线、数据总线等总线结构;芯片上CPU、密码模块协处理器、内存直接访问控制单元等部件可以直接对上述存储单元以及总线进行控制操作。因此,在PC端仿真设计实现嵌入式密码设备时,首先根据嵌入式密码设备物理存储资源大小申请内存空间,并使用变量名称标示该物理单元资源名称。一般嵌入式芯片上主要包括ROM、EEPROM\FLASH、主RAM、通讯接口RAM、CPU寄存器以及密码模块协处理寄存器等存储空间。
目前有两种存储空间分配方案可以选择:(1)根据不同的物理资源大小申请对应的空间大小,然后按照密码算法的设计仿真数据流在各个空间之间读写,并对数据流及各存储空间进行监视;基于目前最常用的嵌入式密码设备,如IC卡芯片看,卡片上述物理资源都是以几十K量级技术,对PC机端的内存来讲都是很小的空间,因此这种机制可以在PC端实现。(2)考虑到密码算法运行过程中使用的变量和数据流一般不能占用所有的物理空间,因此,只给密码算法使用的物理资源分配空间。
上述方案(1)存在同一物理内存的覆盖问题,从仿真方案的鲁棒性设计看,方案(1)更稳定。但是,方案(2)不需要考虑变量的覆盖和内存的重新利用问题,因此方案(2)是实际仿真分析使用方案。实际上,方案(1)的方式是利用有限空间进行覆盖存储,而方案(2)是用空间换时间,通过大量空间换取空间覆盖,提高编程效率。同时,考虑到芯片在不同存储资源之间搬移时,需要通过总线实现。因此,对于总线部分也可以采用方案(1)或方案(2)两种方式进行仿真。
以加密流程为例,假设密钥存放在EEPROM中,分配变量key_EEPROM及对应空间大小,加密时通过CPU将EEPROM数据搬移到密码协处理器中;再分配变量key_CPUREGISTER和key_CCPREGISTER及对应空间,用于存储CPU和密码协处理器中的密钥数据,而key_BUS存储搬移过程中的出现在总线上的数据;通过上述密钥赋值过程可以将EEPROM搬移到总线,总线到CPU寄存器,CPU寄存器到总线,总线到协处理器寄存器几个过程的数据保存。
综合考虑上述过程,有些使用频率特别高的物理资源,如CPU寄存器、密码学协处理器以及BUS需要使用方案(1)进行仿真,而其它变量使用方案(2)进行仿真。
实施例三:
对应于上述方法实施例和装置实施例,参见图4所示的一种密码算法的安全性评估平台的结构示意图,该平台包括控制系统402、算法仿真系统404和数据分析系统406;其中,控制系统402向算法仿真系统404传送控制信号,算法仿真系统404根据控制信号对算法流程的中间变量进行扰动或监视,然后收集中间变量并输出到数据分析系统406。
具体地,上述密码算法的安全性评估装置中的第一参数接收模块302和第二参数接收模块306可以设置于上述控制系统402中;第一算法运行模块304和第二算法运行模块308可以设置于上述算法仿真系统404中;结果获取模块310和评估结果生成模块312可以设置于上述数据分析系统406中。
现有的嵌入式密码设备,以智能卡为例,是电子设备,遵循物理规律。因此,当嵌入式密码设备计算密码结果时,需要一定的时间和能量消耗、并且设备会辐射出电磁波甚至声音等,这些物理量都会受到周围环境的影响。同时,很多嵌入式密码设备自身不携带电源,必须通过读卡装置连接才能工作。这样,攻击者很容易检测嵌入式设备的功耗和执行时间信息。如果这些信息和嵌入式密码设备的密钥信息建立起联系,则攻击者可以获得密钥的更多信息。所有这些额外的信息源都被称为侧信道信息。
目前该领域有很多研究者已经提出了各种各样的侧信道攻击方法,这些方法可以使攻击者很容易攻击获取密码学算法的密钥。这些常用的方法包括:时间攻击、功耗分析、电磁辐射分析、声音分析、探针分析、测试电路的重利用分析、缓存攻击以及错误注入攻击。侧信道攻击方法目前最有效的攻击方法包括了功耗分析、错误注入攻击等。
功耗分析自从1999年kocher等人提出针对DES算法的差分功耗分析以后,在21世纪前十年掀起来一波研究热潮。2001年,Thomas Messerges首先介绍了使用二阶能量分析攻击抗软件DPA防护的方法,而后,Waddle等人在2004年针对二阶DPA攻击给出了两种实用的模型,Zero-Offset2-DPA和FFT 2-DPA,并分析了各自应用场景和攻击效率。2003年,S.Chari等人首次提出了模板攻击的概念,2007年Oswald等人提出了针对掩码措施实施模板攻击的思路。E.Brier等人在2004年的CHES会议上提出了相关性功耗分析的方法,极大提升了差分功耗分析的效果。Gierlichs等人于2008年首次提出了MIA攻击的思想,并成功构造了一种适用于差分侧信道分析的通用区分器,来分析观测到的测量值与假设信息泄露之间的互信息来对密钥猜测进行分级。之后,Mousavi等人继承了Gierlichs的思想,并将MIA和CPA攻击相比较,给出了两种攻击的适用条件。
错误注入方式是自1997年Dan Boneh[等提出了经典的CRT-RSA算法攻击方法。在1997年,li Biham和Adi Shamir(同时也是RSA算法的发明人之一)发表了针对对称加密算法的错误攻击方法,并第一次提出并命名为差分错误分析(Differential FaultAnalysis,简称DFA)的攻击方法,沿用至今。2002年,对CRT-RSA算法的实际实验攻击。英飞凌公司的C.Aumuller等人基于学者们提出的错误攻击模型,对CRT-RSA算法实际进行了攻击,并取得了成功。同年,P.Dusart等人对AES的错误注入进行了系统分析。他们认为对于AES的攻击不能简单借鉴对DES的攻击思想,因为两者在运算结构上存在不同。2008年的CHES会议上,学者David Vigilant提出了一种新的CRT-RSA算法实现方式。
在嵌入式密码设备中,密码算法的运行过程呈现黑盒状态,密码算法执行流程的结果是无法观察的,只能观察输入输出。本发明提出的密码算法的安全性评估方法和装置实现了算法的整个流程,方便监测中间结果和状态的;同时,本发明提出的密码算法的安全性评估方法和装置更接近于嵌入式密码设备的真实数据流传输过程,仿真密码算法实现的每个流程,覆盖了所有的算法参数和过程,从而使评估流程覆盖更加全面。
同一算法的不同实现方案差异很大。具体实现中会引入很多中间参数和流程,这些参数和流程的抗差分功耗分析和差分错误分析的有效性没有经过证明,本发明实现了覆盖所有算法参数和实现流程,因此解决了这些没有证明的步骤的有效性。
针对抗差分功耗分析和差分错误分析,本发明设计了很多模型和判断准则,利用这些模型和判断准则确定算法实现流程的抗差分功耗分析和差分错误分析的有效性。这些模型都是自主设计并经过有效性验证的。
本发明可以对软硬件实现的各种层次密码算法代码进行仿真实验。因此,当嵌入式密码设备密码算法方案设计完成后,可以采用本发明进行方案的预评估,尝试寻找安全漏洞。如果经过本发明方法证明该代码实现的安全有效性,再进行嵌入式密码设备开发和测试,就可以避免密码算法设计的安全漏洞而带来巨大修改成本的问题。同时,本发明使得密码算法方案设计独立于嵌入式密码设备的开发,有效解决了开发瓶颈问题。
本发明实施例所提供的密码算法的安全性评估方法和装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。