首页> 中国专利> 一种在CPU中抗能量攻击的模幂运算的实现方法

一种在CPU中抗能量攻击的模幂运算的实现方法

摘要

本发明公开了一种在CPU中抗能量攻击的模幂运算的实现方法,涉及信息安全领域,该方法包括,CPU从第一寄存器读取预设总位长,从第二寄存器读取预设分组数;CPU访问第一存储区,根据预设分组数按预设规则读取一个子数据,对当前读取的子数据执行预设操作;当CPU对所有的子数据都执行完预设操作后得到预设分组数个操作结果;CPU控制协处理器对所述预设分组数个操作结果按预设顺序执行模幂运算;依序将所有的子数据更新为相应的模幂运算结果;CPU控制协处理器对更新后的预设分组数个子数据执行模乘运算,并将运算结果输出。与现有技术相比,采用本发明模幂运算的实现方法可以达到抗SPA、DPA、RPA、ZPA攻击的目的。

著录项

  • 公开/公告号CN102521544A

    专利类型发明专利

  • 公开/公告日2012-06-27

    原文格式PDF

  • 申请/专利权人 飞天诚信科技股份有限公司;

    申请/专利号CN201110442321.3

  • 发明设计人 陆舟;于华章;

    申请日2011-12-26

  • 分类号G06F21/00;

  • 代理机构

  • 代理人

  • 地址 100085 北京市海淀区学清路9号汇智大厦B座17层

  • 入库时间 2023-12-18 05:43:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-07-14

    专利权的转移 IPC(主分类):G06F21/71 专利号:ZL2011104423213 登记生效日:20230630 变更事项:专利权人 变更前权利人:飞天诚信科技股份有限公司 变更后权利人:北京宏思电子技术有限责任公司 变更事项:地址 变更前权利人:100085 北京市海淀区学清路9号汇智大厦B座17层 变更后权利人:100085 北京市海淀区学清路9号汇智大厦B座1505室

    专利申请权、专利权的转移

  • 2014-09-10

    授权

    授权

  • 2012-09-05

    实质审查的生效 IPC(主分类):G06F21/00 申请日:20111226

    实质审查的生效

  • 2012-06-27

    公开

    公开

说明书

技术领域

本发明涉及信息安全领域,尤其涉及一种用于实现信息加解密的模幂运算 的实现方法。

背景技术

迄今为止,应用于各种电子设备上的公钥密码体制主要有两类,第一类是 基于大整数分解的密码体制,例如,RSA体制和Rabin-Williams体制,第二类 是基于循环群上离散对数的密码体制,例如,ELGamal体制和数字签名算法 (DSA)。上述公钥密码体制大都需要在模整数意义上计算模幂xE(mod n),这里, x,E,和n都是整数,而在这些公钥密码体制中,总有部分模幂中的整数E需 要严格保密。

现代密码设备的计算部件是集成电路芯片,芯片都是由晶体管门电路组成, 电路在执行不同的程序操作时,电能消耗有所不同,这一点可以通过示波器观 察。据此,Kocher等人提出了电耗分析攻击,电耗分析攻击的前提是电耗轨迹 与设备执行的指令相关,并与处理的操作数的值相关,这样检查电耗轨迹能够 暴漏正在执行的指令和寄存器中数据的信息。当密码设备正在执行秘密密钥操 作时,攻击者有可能推导出秘密密钥。研究表明,几乎所有的公钥密码系统都 潜在存在电耗分析攻击问题,特别是,智能卡这样的需要外界提供电源的嵌入 式设备受到攻击的威胁尤为巨大。

发明内容

本发明的目的是提供一种具有更强的抗攻击能力的模幂运算的实现方法, 特别是一种适合于智能卡等计算资源受限的嵌入式设备的模幂运算的实现方 法。

本发明采用的技术方案如下:

一种在CPU中抗能量攻击的模幂运算的实现方法,包括:

步骤S1:CPU从第一寄存器读取预设总位长,从第二寄存器读取预设分组 数;

步骤S2:CPU访问第一存储区,根据预设分组数按预设规则读取一个子数 据,所述子数据是所述第一存储区中存储的第一数据的一部分;

步骤S3:CPU对当前读取的子数据执行预设操作;

步骤S4:当CPU对所有的子数据都执行完预设操作后得到预设分组数个操 作结果;

步骤S5:CPU控制协处理器对所述预设分组数个操作结果按预设顺序执行 模幂运算;

步骤S6:CPU依序将所有的子数据更新为相应的模幂运算结果;

步骤S7:CPU控制协处理器对更新后的预设分组数个子数据执行模乘运算, 并将运算结果输出。

其中,步骤S2所述按预设规则读取一个子数据是指:CPU计算预设总位长 除以预设分组数得到等分数据位长,根据所述等分数据位长随机或按固定顺序 从所述第一数据读取一个子数据;或者是指:CPU根据预先设定的预设分组数个 不等的子数据位长随机或按固定顺序从第一数据中获取一个位长等于所述子数 据位长的子数据。

当步骤S3所述对当前读取的子数据执行预设操作为对当前读取的子数据按 照比特位从低位到高位的顺序执行预设操作,则相应的,所述步骤S3-步骤S4 具体为,

步骤S3-1,CPU初始化第三存储区中存储的所有中间变量,初始化第四存 储区中存储的当前操作数和第三寄存器中存放的比特位索引;

步骤S3-2:按预设规则读取子数据;

步骤S3-3:根据当前比特位索引指向的比特位的值对当前读取的子数据执 行预设操作得到一个操作结果;

步骤S3-4:当读取完预设分组数个子数据,得到预设分组数个操作结果时, 更新当前操作数和当前比特位索引;

步骤S3-5:判断当前比特位索引是否超出等分数据位长,是则执行步骤 S3-6,否则返回执行步骤S3-2;

步骤S3-6:输出预设分组数个操作结果。

进一步地,步骤S3-1所述初始化具体为将所述第三存储区中存储的所有中 间变量的初始值置为1,将第四存储区中存储的当前操作数的初始值设为第二数 据,将第三寄存器中存放的比特位索引初始值置为1。

步骤S3-3所述预设操作具体为如下步骤,

步骤A:判断当前比特位索引指向的比特位的值是否为1,是则执行步骤B, 否则执行步骤D;

步骤B:对与当前读取的子数据对应的中间变量和当前操作数执行模乘运 算;

步骤C:用模乘运算结果更新所述中间变量,所述预设操作完成;

步骤D:所述中间变量不发生改变,所述预设操作完成。

当步骤S3所述对当前读取的子数据执行预设操作具体为按照比特位从高位 到低位的顺序执行预设操作,则相应的,所述步骤S3-步骤S4具体为,

步骤S3-1:CPU初始化当前操作数和比特位索引;

步骤S3-2:按预设规则读取子数据;

步骤S3-3:根据当前比特位索引指向的比特位的值对当前读取的子数据执 行预设操作得到一个操作结果;

步骤S3-4:更新当前比特位索引;

步骤S3-5:判断当前比特位索引的值是否小于零,是则执行步骤S3-6,否 则返回执行步骤S3-2;

步骤S3-6:输出预设分组数个操作结果。

进一步地,步骤S3-1所述初始化当前操作数是指CPU访问第二存储区将存 储的第二数据赋值给当前操作数,初始化比特位索引具体是指将第三寄存器中 存储的比特位索引指向当前访问到的等分数据的最高位起第一个非零比特位的 下一位。

步骤S3-3所述预设操作具体为如下步骤,

步骤A:对当前操作数执行模平方运算并用运算结果更新当前操作数,模平 方运算的模数为预设模数;

步骤B:判断当前读取的子数据的当前比特位索引指向的比特位的值是否为 1,是则执行步骤C,否则执行步骤D;

步骤C:对第二数据和当前操作数执行模数为预设模数的乘法运算,并用模 乘运算结果更新当前操作数,所述预设操作完成;

步骤D:当前操作数不发生改变,所述预设操作完成。

其中,上述步骤S3-步骤S6还可用如下步骤替换,

步骤S3’:CPU对当前读取的子数据执行预设处理;

步骤S4’:当CPU对所有的子数据都执行完预设处理后得到预设分组数个处 理结果;

步骤S5’:CPU依序将所有的子数据更新为相应的处理结果。

当步骤S3’所述对当前读取的子数据执行预设处理具体为对当前读取的子 数据按照比特位从低位到高位的顺序执行预设操作,则相应的,所述步骤S3’- 步骤S4’具体为,

步骤S3’-1:CPU初始化第三存储区中存储的所有中间变量,初始化第四 存储区中存储的当前操作数和第三寄存器中存放的比特位索引;

步骤S3’-2:按预设规则读取子数据;

步骤S3’-3:根据当前比特位索引指向的比特位的值对当前读取的子数据 执行预设处理;

步骤S3’-4:当CPU对所有的子数据都执行完预设处理后得到预设分组数 个处理结果。

步骤S3’-1所述初始化具体为,将所有中间变量的初始值设置为1,将当 前操作数的初始值设为第二数据,将比特位索引的初始值置为1指向第1比特 位。

步骤S3’-2和步骤S3’-3具体为如下步骤,

步骤A1:按预设规则读取一个子数据;

步骤A2:判断当前读取的子数据的当前比特位索引指向的比特位的值是否 为1,是则执行步骤A3,否则当前中间变量不发生改变执行步骤A4;

步骤A3:对第三存储区中与当前子数据对应的当前中间变量和第四存储区 中的当前操作数执行模乘运算,并用模乘运算结果更新当前中间变量;

步骤A4:对当前操作数执行模平方运算并用运算结果更新当前操作数;

步骤A5:更新当前比特位索引;

步骤A6:判断当前比特位索引的值是否超出当前读取的子数据的位长,是 则执行步骤A7,否则执行步骤A8;

步骤A7:记录当前中间变量为一个处理结果;

步骤A8:判断当前读取的子数据是否为第预设分组数个子数据,是则执行 步骤A10,否则执行步骤A9;

步骤A9:读取下一个子数据,返回执行步骤A2;

步骤A10:输出记录的预设分组数个处理结果。

当步骤S3’所述对当前读取的子数据执行预设处理具体为对当前读取的子 数据按照比特位从高位到低位的顺序执行预设操作,则相应的,所述步骤S3’- 步骤S4’具体为,

步骤S3’-1:CPU初始化当前操作数、当前比特位索引;

步骤S3’-2:按预设规则读取子数据;

步骤S3’-3:根据比特位索引指向的比特位的值对当前读取的子数据执行 预设处理得到预设分组数个处理结果。

步骤S3’-1所述初始化具体为,将当前操作数的初始值设为第二数据,将 比特位索引指向当前访问到的等分数据的最高位起第一个非零比特位的下一 位。

步骤S3’-2和步骤S3’-3具体为如下步骤,

步骤A1:按预设规则访问读取一个子数据;

步骤A2:对当前操作数执行模数为预设模数模平方运算并用运算结果更新 当前操作数;

步骤A3:判断当前读取的子数据的当前比特位索引指向的比特位的值是否 为1,是则执行步骤A4,否则当前操作数不发生改变执行步骤A5;

步骤A4:对第二数据和当前操作数执行模数为预设模数的乘法运算,并用 模乘运算结果更新当前操作数;

步骤A5:更新当前比特位索引;

步骤A6:判断当前比特位索引是否小于零,是则执行步骤A7,否则执行步 骤A8;

步骤A7:记录当前操作数为一个处理结果;

步骤A8:判断当前读取的子数据是否为第预设分组数个子数据,是则执行 步骤A10,否则执行步骤A9;

步骤A9:读取下一个子数据,返回执行步骤A2;

步骤A10:输出记录的预设分组数个处理结果。

上面提到的所述更新当前比特位索引可以是将比特位索引自加1即左移一 位指向下一位,或者是将比特位索引自减1即右移一位指向下一位。

本发明取得的有益效果是:与现有技术相比,采用本发明的模幂运算的实 现方法可以达到抗SPA、DPA、RPA、ZPA攻击的目的。

附图说明

图1是本发明实施例一提出的一种模幂运算的实现方法流程图;

图2是图1中步骤103和步骤104的细化图;

图3是图2中步骤103-3中预设操作的过程示意图;

图4是图1中步骤105按预设顺序执行模幂运算的过程示意图;

图5是本发明实施例二提出的一种模幂运算的实现方法流程图;

图6是图5中步骤103’的细化图;

图7是图6中步骤103’-2至步骤103’-4的细化图;

图8是本发明实施例三针对图1中步骤103和步骤104的细化图;

图9是图8中步骤A3的细化图;

图10是本发明实施例三针对图5中步骤103’和步骤104’的细化图;

图11是图10中步骤B2的细化图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明 实施方式做进一步地详细描述。

为了保证使用密码密钥或保密参数为指数进行模幂运算的安全性,本发明 提出了一种模幂运算的实现方法,通过对模幂运算中的指数进行处理,使其不 易被不法者攻击。

实施例一

本实施例提供了一种在CPU中抗能量攻击的模幂运算的实现方法,包括以 下步骤,如图1所示:

步骤101:CPU从第一寄存器读取预设总位长,从第二寄存器读取预设分组 数;

具体的,所述预设分组数取值为大于等于2的整数,优选取等于2的整数。

步骤102:CPU访问第一存储区,根据预设分组数按预设规则读取第一存储 区中存储的第一数据,且每次读取一个子数据,所述子数据是所述第一数据的 一部分;

本步骤等同于将第一存储区中存储的第一数据分为预设分组数个子数据, 相应的第一存储区从逻辑上被分为预设分组数个子存储区;

优选的,所述按预设规则读取第一存储区中存储的第一数据可以具体为: CPU计算预设总位长除以预设分组数得到子数据位长,根据所述子数据位长随机 或按固定顺序从所述第一数据读取子数据。

本实施例中步骤102之后的步骤都是以所述优选的预设规则基础上进行详 细描述的。

本实施例中具体的,从第一存储区中第一数据的最低位开始到最高位依次 截取位长等于所述子数据位长的二进制子串,每个二进制子串为一个子数据, 每个子数据对应一个子存储区;

进一步的,如果第一数据位长不足预设总位长则在第一数据的最高位前补 零直至位长等于预设总位长,相应的,从最高位开始截取,第一个截取到的子 数据对应的子存储区的高位是用零填充的,例如第一数据的位长与预设位长的 差值为12,则对应的第一个截取到的子数据从最高位开始数取12个零后的下一 位即第13位才是第一数据的最高位。

在本实施例中定义从位长等于预设总位长的第一数据的最高位开始截取到 的子数据依次为第一子数据、第二子数据……,截取到的子数据的个数等于预 设分组数。

除上述优选外,所述按预设规则读取第一存储区中存储的第一数据还可以 具体为:根据预先设定的预设分组数个不等的子数据位长随机或按固定顺序从 第一数据中获取位长等于所述子数据位长的子数据,即每次读取的子数据位长 可以是不相等的。

步骤103:对当前读取的子数据执行预设操作;

步骤104:当CPU对所有的子数据都执行完预设操作后得到预设分组数个操 作结果;

步骤105:CPU控制协处理器对所述预设分组数个操作结果按预设顺序执行 模幂运算;

步骤106:CPU依序将所有的子数据更新为相应的模幂运算结果;

步骤107:CPU控制协处理器对更新后的预设分组数个子数据执行模乘运算, 并将运算结果输出。

如图2所示,上述步骤103是对当前读取的子数据按照比特位从低位到高 位的顺序执行预设操作的,具体为如下步骤:

步骤103-1:CPU初始化第三存储区中存储的所有中间变量,初始化第四存 储区中存储的当前操作数和第三寄存器中存放的比特位索引;

本实施例中具体地,第三存储区中存储有预设分组数个中间变量,CPU访 问第三存储区,初始化第三存储区中存储的所有中间变量具体是指将每个中间 变量的初始值置为1,访问第二存储区将存储的第二数据赋值给当前操作数;将 第三寄存器中存储的比特位索引置为1。

进一步地,所述预设分组数个中间变量与所述预设分组数个子数据一一对 应,所述第三寄存器中存储的比特位索引用于表示子数据的比特位索引号。

步骤103-2:CPU按预设规则访问子存储区,读取子数据;

步骤103-3:根据当前比特位索引指向的比特位的值对当前访问到的子存储 区中存储的子数据执行预设操作得到一个操作结果;

本实施例中具体地,所述预设规则是指预先设定的CPU对子存储区的访问 顺序,例如,可以预先设定CPU按照随机的方式来访问所有的子存储区,具体 的可以采用倒序或间隔方式访问。

如图3所示,所述预设操作具体为如下步骤:

步骤103-31:判断子存储区中存储的子数据的当前比特位索引指向的比特 位的值是否为1,是则执行步骤103-32,否则执行步骤103-34;

步骤103-32:控制协处理器对与子数据对应的当前中间变量和当前操作数 执行模乘运算;

步骤103-33:用模乘运算结果更新当前中间变量,所述预设操作完成;

步骤103-34:当前中间变量不发生改变,所述预设操作完成。

例如:若CPU访问的子存储区是第一子存储区,当前操作数为第二数据, 当前比特位索引为1指向第1比特位,与第一存储区中的第一子数据一一对应 的中间变量的初始值为1,则判断第一子数据的第1比特位的值是否为1,若是 则CPU控制协处理器对当前中间变量和第二数据执行模数为预设模数的乘法运 算,并用乘法运算结果更新当前中间变量,否则当前中间变量不变。

进一步地,执行步骤103-2和步骤103-3具体是对所有子数据根据当前比 特位索引指向执行一次预设操作,子数据个数为预设分组数,每次预设操作选 取的对象是CPU按照预设规则访问的子存储区中存储的子数据所对应的中间变 量,正因为访问顺序是按预设规则进行的,因此增强了数据运算的安全性、抗 攻击性。

步骤103-4:更新当前操作数和当前比特位索引;

本实施例中具体地,所述更新当前操作数是指CPU控制协处理器对当前操 作数执行模平方运算并用运算结果更新当前操作数,模平方运算的模数为预设 模数;所述更新比特位索引是指将比特位索引自加1即左移一位指向下一位。

步骤103-5:判断当前比特位索引是否超出子数据的位长,是则执行步骤 103-6,否则返回执行步骤103-2;

步骤103-6:输出预设分组数个操作结果。

如图4所示,步骤105所述协处理器按预设顺序执行模幂运算的过程包括 如下步骤:

步骤105-1:将当前读取的子数据赋值给操作变量,将当前比特位索引的初 始值置为1;

步骤105-2:CPU计算每个子数据的循环次数;

具体的,若当前读取的子数据是第一子数据,则第一子数据的循环次数等 于预设分组数减1后再乘以子数据位长得到的结果,第二子数据的循环次数等于 预设分组数减2后再乘以子数据位长得到的结果,依次类推。

步骤105-3:判断当前比特位索引指向的中间变量的比特位的值是否为1, 是则执行步骤105-4,否则当前输出数不发生改变跳转执行步骤105-5;

步骤105-4:对当前操作变量执行模数为预设模数的平方运算并用运算结果 更新当前操作变量;

步骤105-5:将当前比特位自加1;

步骤105-6:判断当前比特位索引的值是否大于当前获取的子数据的循环次 数,是则执行下一步,否则返回执行步骤105-3;

步骤105-7:输出当前操作变量。

对所有的子数据均按照上述步骤105-1至105-7执行操作,得到预设分组数 个操作变量即模幂运算结果。

实施例二

在实施例一的基础上,本实施例是将实施例一提供的一种在CPU中抗能量 攻击的模幂运算的实现方法中的步骤103至步骤106用步骤103’至步骤105’ 替换,其余步骤不变,如图5所示具体如下:

步骤103’:对当前读取的子数据执行预设处理,得到一个处理结果;

步骤104’:当CPU对所有的子数据都执行完预设处理后得到预设分组数个 处理结果;

步骤105’:CPU将所有的子数据分别更新为相应的处理结果;

如图6所示,上述步骤103’是对所有的子数据按照比特位从低位到高位的 顺序执行预设操作的,具体为如下步骤:

步骤103’-1:初始化第三存储区中存储的所有中间变量,初始化第四存储 区中存储的当前操作数和第三寄存器中存放的比特位索引;

本实施例中具体地,CPU访问第三存储区,初始化第三存储区中存储的所有 中间变量具体是指将所有中间变量的初始值设置为1,访问第二存储区将存储的 第二数据赋值给第四存储区中存储的当前操作数;将第三寄存器中存储的比特 位索引置为1指向第1比特位。

进一步地,每个子数据一一对应一个比特位索引,所述第三寄存器中存储 的比特位索引用于表示访问的第三存储区中的当前中间变量对应的子数据当前 正在执行的比特位。

步骤103’-2:CPU按预设规则访问子存储区,读取子数据;

步骤103’-3:根据当前比特位索引指向的比特位的值对当前访问到的子存 储区中存储的子数据执行预设处理得到一个处理结果;

步骤103’-4:当CPU对所有的子数据都执行完预设处理后得到预设分组数 个处理结果。

本实施例中具体地,所述按预设规则读取第一存储区中存储的第一数据是 指CPU计算预设总位长除以预设分组数得到等分数据位长,根据所述等分数据 位长随机或按固定顺序从所述第一数据读取子数据。

如图7所示,步骤103’-2至步骤103’-4具体为如下步骤:

步骤103’-21:按预设规则访问一个子存储区;

步骤103’-22:判断当前访问的子存储区中存储的子数据的当前比特位索 引指向的比特位的值是否为1,是则执行步骤103’-23,否则执行步骤103’-24;

步骤103’-23:CPU控制协处理器对第三存储区中与当前子数据对应的当前 中间变量和第四存储区中的当前操作数执行模乘运算,并用模乘运算结果更新 当前中间变量,然后执行步骤103’-25;

步骤103’-24:当前中间变量不发生改变;

步骤103’-25:CPU控制协处理器对当前操作数执行模平方运算并用运算 结果更新当前操作数;

步骤103’-26:更新当前比特位索引;

本实施例中具体地,若当前比特位索引的初始值是1,则所述更新当前比特 位索引是指将当前比特位索引的值自加1即左移一位指向下一位。

步骤103’-27:判断当前比特位索引的值是否超出子数据的位长,是则执 行步骤103’-28,否则执行步骤103’-29;

步骤103’-28:记录当前中间变量为一个处理结果;

步骤103’-29:判断当前子数据是否为最后一个子数据,是则执行步骤103’ -31,否则执行步骤103’-30;

步骤103’-30:访问下一个子存储区,返回执行步骤103’-22;

步骤103’-31:输出记录的预设分组数个处理结果。

实施例三

本实施例提供的方案适用于实施例一和实施例二,本实施例提供的技术方 案的思想是将实施例一中步骤104和实施例二中步骤104’进行了变换,具体为 对所有的子数据按照比特位从高位到低位的顺序执行预设操作,针对本实施例 的思想以实施例一和实施例二为基础具体说明如下:

参见图8,实施例一中的步骤103和步骤104具体包括如下步骤:

步骤A1:CPU初始化当前操作数和比特位索引;

本实施例中具体地,初始化当前操作数是指CPU访问第二存储区将存储的 第二数据赋值给当前操作数,初始化比特位索引具体是指将第三寄存器中存储 的比特位索引指向当前访问到的子数据的最高位起第一个非零比特位的下一 位。

步骤A2:CPU按预设规则访问子存储区,读取子数据;

步骤A3:根据当前比特位索引指向的比特位的值对当前访问到的子存储区 中存储的子数据执行预设操作得到一个操作结果;

本实施例中具体地,所述预设规则同实施例一所述优选的预设规则。

如图9所示步骤A3中所述预设操作进一步包括如下步骤:

步骤A3-1:CPU控制协处理器对当前操作数执行模平方运算并用运算结果更 新当前操作数,模平方运算的模数为预设模数;

步骤A3-2:判断子存储区中存储的子数据的当前比特位索引指向的比特位 的值是否为1,是则执行步骤A3-3,否则执行步骤A3-4;

步骤A3-3:CPU控制协处理器执行第二数据和当前操作数的模数为预设模数 的乘法运算,并用模乘运算结果更新当前操作数,预设操作完成;

步骤A3-4:当前操作数不发生改变,预设操作完成。

例如:若CPU访问的子存储区是第一子存储区,当前操作数为第二数据, 当前比特位索引为127,则首先对当前操作数执行模平方运算并用运算结果更新 当前操作数,然后判断第一子数据的最高位起第二个比特位对应的数是否为1, 若是则CPU控制协处理器对当前操作数和第二数据执行模数为预设模数的乘法 运算,并用乘法运算结果更新当前操作数,否则当前操作数不变。

进一步地,对所有子数据根据当前比特位索引执行一次步骤A3所述预设操 作,子数据个数为预设分组数,则会执行预设分组数次预设操作,每次操作选 取的对象是CPU按照预设规则访问子存储区,并对其中存储的子数据执行预设 操作,正因为访问顺序是按预设规则进行的,因此增强了数据运算的安全性、 抗攻击性。

步骤A4:更新当前比特位索引;

本实施例中具体地,所述更新当前比特位索引是指将当前比特位索引自减1 即右移一位指向下一位。

步骤A5:判断当前比特位索引的值是否小于零,是则执行步骤A6,否则返 回执行步骤A2;

步骤A6:输出预设分组数个操作结果。

参见图10,实施例二中的步骤103’和步骤104’具体包括如下步骤:

步骤B1:初始化当前操作数、当前比特位索引;

本实施例中具体地,CPU访问第二存储区将存储的第二数据赋值给当前操作 数;将第三寄存器中存储的比特位索引指向当前访问到的子数据的最高位起第 一个非零比特位的下一位。

步骤B2:CPU按预设规则访问子存储区,读取子数据;

步骤B3:根据比特位索引指向的比特位的值对当前访问到的子存储区中存 储的子数据执行预设处理得到一个处理结果;

步骤B4:当CPU对所有的子数据都执行完预设处理后得到预设分组数个处 理结果。

本实施例中具体地,所述预设规则同实施例二所述预设规则相同。

如图11所示,步骤B3所述预设处理具体为如下步骤:

步骤B2-1:按预设规则访问一个子存储区;

步骤B2-2:CPU控制协处理器对当前操作数执行模平方运算并用运算结果更 新当前操作数,模平方运算的模数为预设模数;

步骤B2-3:判断当前访问的子存储区中存储的子数据的当前比特位索引指 向的比特位的值是否为1,是则执行步骤B2-5,否则执行步骤B2-4;

步骤B2-4:当前操作数不发生改变,然后执行步骤B-26;

步骤B2-5:CPU控制协处理器执行第二数据和当前操作数的模数为预设模 数的乘法运算,并用模乘运算结果更新当前操作数;

步骤B2-6:更新当前比特位索引;

本实施例中具体地,所述更新当前比特位索引是指将比特位索引自减1即 右移一位指向下一位。

步骤B2-7:判断当前比特位索引的值是否小于零,是则执行步骤B2-8,否 则执行步骤B2-9;

步骤B2-8:记录当前操作数为一个处理结果;

步骤B2-9:判断当前子数据是否为最后一个子数据,是则执行步骤B2-11, 否则执行步骤B2-10;

步骤B2-10:访问下一个子存储区,返回执行步骤B2-2;

步骤B2-11:输出记录的预设分组数个处理结果。

上述四个实施例中,我们采用了将第一存储区中存储的第一数据等分为预 设分组数个子数据,相应的第一存储区从逻辑上被等分为预设分组数个子存储 区,然后采用随机顺序的访问方式对所有的子存储区中的子数据分别执行操作, 通过这种方式来达到本发明的目的,即一种抗SPA、DPA、RPA、ZPA攻击的模幂 运算的实现方法。

根据本发明实施例的记载,采用本发明原理对模幂运算过程中幂指数划分 得份数越多,效率越慢,因此要达到最佳效果是将幂指数分为两部分即两个子 数据,并且对每个子数据按照比特位从低到高进行预设操作或处理。上述实施 例一记载了最优的技术方案。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于 此,例如,在实施例一中提到的对第一数据做不等分处理同样可以实现本发明 并达到抗SPA、DPA、RPA、ZPA攻击的效果,任何熟悉本技术领域的技术人员在 本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保 护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号