SM2算法的抗侧信道攻击

SM2 算法中底层模块抗侧信道

   标量乘 ( [ k ] G [k]G [k]G) 运算过程中需要用到大量的倍点运算与点加运算。传统倍点运算与点加运算之间由于需要的运算次数不同,功耗存在明显区别,攻击者可以通过功耗波形特征分析密钥信息。传统算法如下图所示:
标量乘的传统算法
   在传统算法中, d i d_i di 等于 0 0 0 1 1 1 对应不同的执行指令,图中符号 Π 0 \Pi_0 Π0 代表倍点运算,符号 Π 1 \Pi_1 Π1 代表点加运算。可参考侧信道原子算法,调整点加和倍点运算过程中寄存器运算顺序,采用原子块形式将点加运算和倍点运算都划分为若干个原子小块,每个小块先进行模乘运算,再进行模加运算,最后进行模减运算,其结构表示为 Γ \Gamma Γ。用 '☆’表示不影响最终结果的一次加/减的空操作。如此,实际计算过程中总在执行一组组相同操作,点加和倍点之间的功耗曲线将变得更加连续,从而达到抗SPA攻击的目的。以固定参数倍点运算和固定点加运算为例,如表1所示是改进的原子小块点加运算,如表2所示是改进的原子小块倍点运算。

表1 改进的原子小块点加运算
改进的原子小块点加运算

表2 改进的原子小块倍点运算
改进的原子块倍点运算

SM2 算法中标量乘抗侧信道模块

   NAF 标量乘法算法是标量乘法算法的一种增强,该算法使用了非邻接形式(Non-Adjacent Form)表达,减少了算法的期望运行时间。下面是具体算法细节:
   将 标量表示为 k = ∑ i = 0 l − 1 k i × 2 i k =\sum_{i=0}^{l-1}k_i\times 2^i k=i=0l1ki×2i,其中 k i ∈ { 0 , + , − } k_i\in \{0,+,-\} ki{0,+,}。一个十分有用的有符号整数表达,规定 k l − 1 ≠ 0 k_{l-1}\neq 0 kl1=0,且没有两个相邻的 k i = 0 k_i = 0 ki=0
   NAF 表示有如下性质

  • 每个正整数 k k k 都有独一无二的 NAF 表达。记作 N A F ( k ) NAF(k) NAF(k)
  • N A F ( k ) NAF(k) NAF(k) 有所有 k k k的有符号表达最少得非零数字;
  • N A F ( k ) NAF(k) NAF(k) 的长度最多比二进制表达多1位;
  • 如果 N A F ( k ) NAF(k) NAF(k)长度为 l l l,那么有 2 l 3 < k < 2 l + 1 3 \frac{2^l}{3}<k<\frac{2^{l+1}}{3} 32l<k<32l+1;
  • 在所有长度为 l l l 的 NAF中,非零系数的概率约为 1 / 3 1/3 1/3

N A F ( k ) NAF(k) NAF(k) 能够通过以下算法计算
输入 : 正整数 k k k
输出 : N A F ( k ) NAF(k) NAF(k)
i ← 0 i\leftarrow 0 i0
k ≥ 0 k \geq 0 k0 执行
   若 k k k 为奇数,则
      k i ← 2 − ( k m o d 4 ) k_i\leftarrow 2-(k \mod 4) ki2(kmod4)
      k ← k − k i k\leftarrow k-k_i kkki
   否则
      k i ← 0 k_i\leftarrow 0 ki0
   k ← k / 2 k\leftarrow k/2 kk/2
   i ← i + 1 i \leftarrow i+1 ii+1
返回 ( k i − 1 , k i − 2 , ⋯ k 1 , k 0 k_{i-1},k_{i-2},\cdots k_1,k_0 ki1,ki2,k1,k0)

最后可以通过 N A F ( k ) NAF(k) NAF(k) 代替 k k k 的二进制表示来修改标量乘从左至右的二进制方法
输入 : 正整数 k k k
输出 : [ k ] P [k]P [k]P
根据上一个算法将正整数 k k k 表示为 N A F ( k ) NAF(k) NAF(k)
Q ← O Q\leftarrow O QO
i i i l − 1 l-1 l1 0 0 0 执行
   Q ← 2 Q Q \leftarrow 2Q Q2Q
   若 k i = 1 k_i = 1 ki=1 Q ← Q + P Q\leftarrow Q+P QQ+P
   若 k i = − 1 k_i = -1 ki=1 Q ← Q − P Q\leftarrow Q-P QQP
返回(Q)

随机NAF窗口法

   传统的NAF因为扰乱了带有规律的点加和倍点二进制编码顺序,因而可以成功抵抗 SPA 攻击,又由于传统的NAF在进行点加运算时,点为固定值,标量乘中 k k k 的值固定时,NAF编码数值也就确定了,攻击者可以通过采集大量的功耗曲线并进行相关性波形分析,通过波形分析猜测出倍点与点加的位置及点加运算对应的操作点,从而恢复 k k k 值,实现 DPA 攻击。
  对于以上的情况,可以将随机数应用于 NAF 标量乘,通过随机数将 NAF 编码进行随机化来躲避固定值运算带来的隐患。第一步,先选取一个随机数 l l l,其 l ∈ [ 0 , ( n − 1 ) / m ] l\in [0,(n-1)/m] l[0,(n1)/m] n n n为值 k k k的位数, m m m为自选值),第二步,再选取一个随机数 w w w ,使 w ∈ [ 2 , m w ] w\in [2,m_w] w[2,mw] m w m_w mw 的大小要在预计算表的范围内。第三步,循环进行计算 NAF 值,当 i = l , 2 l , ⋯ , m l i=l,2l,\cdots,ml i=l,2l,,ml 时,重新选取 w w w

N A F w ( k ) NAF_w(k) NAFw(k) 能够通过以下算法计算
输入 : 正整数 k k k
输出 : N A F w ( k ) NAF_w(k) NAFw(k)
i ← 0 i\leftarrow 0 i0
选择随机数 l ∈ [ 0 , ( n − 1 ) / m ] , w ∈ [ 2 , m w ] l \in[0,(n-1)/m], w\in[2,m_w] l[0,(n1)/m],w[2,mw]
k ≥ 0 k \geq 0 k0 执行
   判断 i i i 是否等于 l , 2 l , ⋯ , m l l,2l,\cdots,ml l,2l,,ml,相等则重新选取 随机数 w w w
   否则:
      若 k k k 为奇数,则
        k i ← k m o d 2 w k_i\leftarrow k \mod 2^w kikmod2w
        k ← k − k i k\leftarrow k-k_i kkki
      否则
         k i ← 0 k_i\leftarrow 0 ki0
      k ← k / 2 k\leftarrow k/2 kk/2
      i ← i + 1 i \leftarrow i+1 ii+1
返回 ( k i − 1 , k i − 2 , ⋯ k 1 , k 0 k_{i-1},k_{i-2},\cdots k_1,k_0 ki1,ki2,k1,k0)

  根据以上算法可以看出NAF值存在不固定的变化,每一次执行标量乘 k k k 对应的NAF编码各不相同,含有很大程度的随机性,因包含不确定的 k i k_i ki 值,所以攻击者做相关性功耗分析时就要有庞大的功耗波形及数据分析来做支持,所以也可以抗DPA攻击。在进行模板攻击时,因为 NAF 的编码形式存在多样性,故攻击者也没法建立所有模板,因此也适用在抗模板攻击方法中。

改进的蒙哥马利阶梯算法

  标准的蒙哥马利标量乘算法如下:
蒙哥马利标量乘算法
   标准的蒙哥马利算法容易受到倍点攻击,当 k = 157 = ( 10011101 ) 2 k = 157 = (10011101)_2 k=157=(10011101)2 时,蒙哥马利计算过程如下表所示,其中标蓝的部分为倍点运算相同处。当 k i = k i + 1 k_i=k_{i+1} ki=ki+1 时, [ k ] P [k]P [k]P 的第 i + 1 i+1 i+1 步和 [ k ] 2 P [k]2P [k]2P 的第 i i i步计算的倍点步骤一样,对两条曲线对齐看临近的倍点运算曲线,相同就能知道 k i = k i + 1 k_i=k_{i+1} ki=ki+1,攻击者能知道 k k k 的相邻比特位之间的关系,只需猜测首位是 0 0 0 还是 1 1 1,再根据关系推测其他位置就能推测全部标量值 k k k
蒙哥马利点加及倍点运算
   采用改进的蒙哥马利标量乘法,如以下算法。标量 k k k 不论为 1 1 1 0 0 0 都需做一次点加和一次倍点,可抗 SPA。添加随机点 R R R 与随机坐标 Z l Z_l Zl, 使得中间值含有随机成分,可抗DPA。随机成分的存在使得无法建立模板,可以抗TA。基于盲化后不能自己选择输入点 P P P,因此可抗 DA, RPA,ZPA。
改进蒙哥马利阶梯算法

变换公式法

   在数据传输过程中,数据的不可否认性非常重要,为此人们提出了数字签名技术。SM2签名算法中,包含了大数模乘 r ⋅ d A r\cdot d_A rdA,其中 r r r 是已知变量, d A d_A dA 是未知常量。大数模乘会涉及大量的中间数据,攻击者能够根据已知的 r r r 反推出与 d A d_A dA相关的中间数据,然后分析功耗与中间数据之间的相关性来确定私钥 d A d_A dA。这种方法攻击的实质是对乘法器进行攻击,为了预防这种攻击,对签名中公式进行如下变形。
s = ( ( 1 + d A ) − 1 ⋅ ( k − r ⋅ d A ) ) m o d n = [ ( 1 + d A ) − 1 ⋅ k − ( 1 + d A ) − 1 ⋅ r ⋅ d A ] m o d n = [ ( 1 + d A ) − 1 ⋅ k − ( 1 + d A ) − 1 ⋅ ( 1 + d A − 1 ) ⋅ r ] m o d n = [ ( 1 + d A ) − 1 ⋅ k − ( 1 + d A ) − 1 ⋅ ( 1 + d A ) ⋅ r + ( 1 + d A ) − 1 ⋅ r ] m o d n = [ ( 1 + d A ) − 1 ⋅ k − ( 1 + d A ) − 1 ⋅ r − r ] m o d n = [ ( 1 + d A ) − 1 ⋅ ( k + r ) − r ] m o d n \begin{align} s = & ((1+d_A)^{-1}\cdot (k-r \cdot d_A))\mod n\\ =& [(1+d_A)^{-1}\cdot k - (1+d_A)^{-1}\cdot r \cdot d_A]\mod n\\ = & [(1+d_A)^{-1}\cdot k - (1+d_A)^{-1}\cdot (1+d_A-1)\cdot r] \mod n\\ = & [(1+d_A)^{-1}\cdot k - (1+d_A)^{-1}\cdot (1+d_A)\cdot r + (1+d_A)^{-1}\cdot r ] \mod n\\ = &[(1+d_A)^{-1}\cdot k - (1+d_A)^{-1}\cdot r - r] \mod n\\ = & [(1+d_A)^{-1}\cdot (k+r)-r]\mod n \end{align} s======((1+dA)1(krdA))modn[(1+dA)1k(1+dA)1rdA]modn[(1+dA)1k(1+dA)1(1+dA1)r]modn[(1+dA)1k(1+dA)1(1+dA)r+(1+dA)1r]modn[(1+dA)1k(1+dA)1rr]modn[(1+dA)1(k+r)r]modn
   公式变形之后公式中不再含有易受攻击的 r ⋅ d A r\cdot d_A rdA。攻击者便无法针对 r ⋅ d A r\cdot d_A rdA 进行差分功耗攻击。此外利用此公式只需进行一次模逆和一次模乘,比原公式减少了一次模乘,在运算上也有减少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11. 使用tomcat中碰到的一些问题

文章目录 问题一&#xff1a;Tomcat的startup.bat启动后出现乱码问题二&#xff1a;一闪而退之端口占用问题三&#xff1a;非端口问题的一闪而退问题四&#xff1a;服务器的乱码和跨域问题问题五: 在tomcat\webapps\下创建文件夹为什么tomcat重启就会丢失问题六&#xff1a;Tom…

【C++】AVL(平衡二叉搜索树)树的原理及实现

文章目录 一、引言 二、AVL树的概念 三、AVL树的插入 3、1 AVL树的简单插入 3、2 旋转分类 3、2、1 新节点插入较高右子树的右侧&#xff1a;左单旋 3、2、2 新节点插入较高左子树的左侧&#xff1a;右单旋 3、2、3 新节点插入较高左子树的右侧&#xff1a;左右双旋&#xff08…

数据库执行新增时,字段写值错乱/字段值写反了 的问题

今天给表加了个字段&#xff0c;执行新增后查看表&#xff0c;发现数据库执行新增完成后&#xff0c;字段写值错乱了&#xff0c;表现为这两个字段的值写反了↓↓↓↓↓↓ 排查了xml中所有赋值的地方&#xff0c;全都没有问题 字段与属性的通用映射&#xff1a; <resultMap…

【已解决】Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

&#x1f389;工作中遇到这样一个需求场景&#xff1a;由于ES数据库中历史数据过多&#xff0c;占用太多的磁盘空间&#xff0c;需要定期地进行清理&#xff0c;在一定程度上可以释放磁盘空间&#xff0c;减轻磁盘空间压力。 &#x1f388;在经过调研之后发现&#xff0c;某服务…

编织人工智能:机器学习发展历史与关键技术全解析

文章目录 1. 引言1.1 机器学习的定义1.2 重要性和应用场景重要性应用场景 2. 机器学习的早期历史2.1 初期理论与算法感知机决策树 2.2 早期突破支持向量机神经网络初探 3. 21世纪初期的发展3.1 集成学习方法随机森林XGBoost 3.2 深度学习的崛起卷积神经网络&#xff08;CNN&…

css-4:元素水平垂直居中的方法有哪些?如果元素不定宽高呢?

1、背景 在开发中&#xff0c;经常遇到这个问题&#xff0c;即让某个元素的内容在水平和垂直方向上都居中&#xff0c;内容不仅限于文字&#xff0c;可能是图片或其他元素。 居中是一个非常基础但又是非常重要的应用场景&#xff0c;实现居中的方法存在很多&#xff0c;可以将这…

Spring IOC

◆ 传统Javaweb开发的困惑 ◆ IoC、DI和AOP思想提出 ◆ Spring框架的诞生 Spring | Home IOC控制反转&#xff1a;BeanFactory 快速入门 package com.xiaolin.service.Impl;import com.xiaolin.dao.UserDao; import com.xiaolin.service.UserService;public class UserServic…

Intel 4工艺太难了!酷睿Ultra终于突破5GHz

无论是14nm还是10nm&#xff0c;Intel这些年的新工艺都有一个通性&#xff1a;刚诞生的时候性能平平&#xff0c;高频率都上不去&#xff0c;只能用于笔记本移动端(分别对应5代酷睿、10代酷睿)&#xff0c;后期才不断成熟&#xff0c;比如到了13代酷睿就达到史无前例的6GHz。 接…

【Linux】守护进程

1 相关概念 1.1 守护进程的概念 守护进程也叫做精灵进&#xff0c;是运行在后台的一种特殊进程。它独立于控制终端并且可以周期性的执行某种任务或者处理某些发生的事件。 守护进程是非常有用的进程&#xff0c;在Linux当中大多数服务器用的就是守护进程。比如&#xff0c;web…

前端 select 标签如何创建下拉菜单?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 代码示例⭐ 代码讲解⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏…

【网络基础知识铺垫】

文章目录 1 :peach:计算机网络背景:peach:1.1 :apple:网络发展:apple: 2 :peach:协议:peach:2.1 :apple:协议分层:apple:2.2 :apple:OSI七层模型:apple:2.3 :apple:TCP/IP模型:apple:2.4 :apple:TCP/IP模型与操作系统的关系:apple: 3 :peach:网络传输基本流程:peach:4 :peach:网…

MybatisPlus存在 sql 注入漏洞(CVE-2023-25330)解决办法

首先我们了解下这个漏洞是什么&#xff1f; MyBatis-Plus TenantPlugin 是 MyBatis-Plus 的一个为多租户场景而设计的插件&#xff0c;可以在 SQL 中自动添加租户 ID 来实现数据隔离功能。 MyBatis-Plus TenantPlugin 3.5.3.1及之前版本由于 TenantHandler#getTenantId 方法在…

DeviceNet主站网关转ETHERCAT连接ethercat总线伺服如何控制

大家好&#xff0c;今天要和大家分享一款自主研发的通讯网关——捷米JM-ECTM-DNT。这款产品可是解决了不同协议设备数据交换的麻烦问题&#xff0c;让我们一起来看看它的神奇之处吧&#xff01; 这款通讯网关有什么特别的呢&#xff1f;首先&#xff0c;它可以连接DEVICENET总…

火车头标题伪原创【php源码】

大家好&#xff0c;给大家分享一下python怎么读取文件中的数据&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 火车头采集ai伪原创插件截图&#xff1a; python是一门非常火爆且相对易学的编程语言&#xff0c;应用在各种场景。许多人想学…

electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

文章目录 引入IPC通信[主/渲染]进程对应渲染进程>主进程代码测试测试效果 主进程>渲染进程代码测试测试效果 双向通信代码测试测试效果 引入 electron项目常常由一个主进程和多个渲染进程构成&#xff0c;渲染进程之间是隔离的&#xff0c;而所有渲染进程都和主进程共享…

vscode 格式问题

1、EditorConfig for VS Code 插件 shift alt f 格式化文件&#xff08;VS Code格式化按键&#xff09;&#xff0c;如下图&#xff0c;每个缩进4空格 代码如下 创建文件名 .editorconfig root true [*] charset utf-8 indent_style space indent_size 2 end_of_…

Docker 启动 Nacos 报错:No DataSource set

​ &#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 …

Microsoft Message Queuing Denial-of-Service Vulnerability

近期官方公布了一个MSMQ的拒绝服务漏洞&#xff0c;可能因为网络安全设备的更新&#xff0c;影响业务&#xff0c;值得大家关注。 漏洞具体描述参见如下&#xff1a; Name: Microsoft Message Queuing Denial-of-Service Vulnerability Description: Microsoft Message Queuing…

java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查…

静态页面与动态页面的区别及部署jpress应用

简述静态网页和动态网页的区别 静态网页&#xff1a; 1、首先是静态网页&#xff0c;静态网页每个网页中都有一个固定的URL&#xff0c;网页URL以htm、HTML、jpg、.gif、.mp4等常见形式为后缀&#xff0c;而且不含有问号&#xff1b; 2、静态网页内容一经发布到网页服务器上…