第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法

原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-describe-some-basic.html

为了让这篇文章保持简单,我们将会我们将讨论所谓的“香草”RSA(在加密中不使用随机性),并强调少量潜在的侧通道攻击和对策。

让我们回顾一下简单的RSA加密方案。

密钥生成:选择一对秘密的素整数\(p\)和\(q\),然后计算模\(N = pq\)。一个整数\(3 \le e \le \phi(N)\),和\(\phi(N)\)互质。然后公钥对就是\((N,e)\)。私钥式独一无二的整数\(3 \le d \le \phi(N)\),使得\(ed=1 \mod \phi(N)\)。

加密一个消息\(m \in Z_N\),我们能计算\(m^e \mod N\)。

解密一个私钥\(c \in Z_N\),我们能计算\(c^d \mod N\)。

一个确定密钥的SPA类型的攻击

我们首先给出一个示例,说明如何在解密操作期间泄漏关于密钥d的信息。一个典型的实现指数幂乘法的方式就是分支程序。例如,乘加算法能有效的计算一个被二进制表达的幂乘操作。

假如说\(d = \Sigma_{0 \le i \le n}b_i2^i\),其中\(b_i \in \{0,1\}\)。那么,

\[c^d = \Phi_{0 \le i \le n}c^{b_i2^i}
\]

那么我们就可以通过下面的算法来计算\(c^d的值了\)。

  • \(ANS \leftarrow 1\)
  • \(fac \leftarrow c\)
  • \(For 0 \le i \le n\),do
    • \(if \space b_i = 1\)

      • \(ANS \leftarrow ANS \times fac\)
      • \(fac \leftarrow fac^2\)
    • \(Else,\)
      • \(fac \leftarrow fac^2\)
  • \(return ANS\)

算法的行为取决于每个\(b_i\)是0还是1。因此,如果使用这种算法解密RSA密文,它所花费的时间或它的功耗可以显示每一位\(b_i\)的值,从而显示密钥d。这将是一种spa式的攻击,因为只需要一个跟踪。

为了防止这种攻击,必须使算法的两个分支在攻击者看来是相同的,即使平方和乘法算法的两个分支花费相同的时间运行或消耗相同的能量。

一个SPA类型对明文的攻击

上面展示了解密过程中如何危害密钥。但是攻击者可能对特定的明文感兴趣,\(m\)(毕竟,加密被用于设计保持消息机密)。同样,如果加密操作是一个依赖于m值的分支程序,那么单个加密的运行时或功耗可能会在SPA类型攻击中泄漏关于m的信息。特别要注意的是,必须在加密中执行模操作。在大多数实现中,不是在取幂结束时对一个非常大的整数进行单个约简,而是在取幂算法中进行许多次模操作,以保持所涉及的数字(相对)较小。

作为一个例子,我们假设在循环中执行下面的操作:

  • while \(ANS > N\)

    • \(ANS \leftarrow ANS-N\)

在这里,因为机密的时刻,指数是已知的,根据运行所需的时间和消耗的电量泄露关于m的基本信息(参见David关于蒙哥马利算法攻击的文章)。

再一次,以防止这种攻击,我们必须确保我们的使用相同的时间和消耗相同的功率来减少中间值模N,不管他们是什么大小。(由于我们知道底的精确指数和取值范围,所以可以很容易地找到上限)。

防止对密钥进行DPA类型的攻击

即使我们模糊了依赖于d的解密中的任何分支,在执行解密的幂运算时执行的操作的精确细节仍然依赖于该指数(以一种不太明显的方式)。:因此,在多次解密之后,可能会出现解密密钥与操作持续时间或功耗之间的统计关系。因此,我们还需要防止更微妙的dpa风格的攻击,即攻击者对大量跟踪使用统计技术来测试关于秘密密钥的假设。

要做到这一点,我们必须消除密钥和每次执行的计算之间的直接依赖关系。这涉及到盲处理,即在不影响结果的情况下将一些随机噪声注入到求幂运算中。在解密中,我们引入随机性,当\(d\)的在\(Z_{\phi(N)}\)中\(e\)的逆,我们能够加或者减\(\phi(N)\),这样结果也不会改变。因此解密\(c \in Z_N\),选择一个随机的\(r \in Z\)然后计算\(d^{'} = d + r\phi(N)\)。然后计算消息\(c^{d^{'}}\)也和\(c^d \mod N\)相同。关键是加法通常不是一个分支操作,所以增加\(r\phi(N)\),\(d\)不会泄漏在一个跟踪信息,并使用一个新的随机r为每个解密防止DPA-style攻击。

Coppersmith's的SPA类型攻击来确定明文

我们使用一个特殊但是有趣的攻击来结束这篇文章,这个攻击只会发生在e很小的时候,例如\(e=3\)是在加密时刻为了效率的一个选择。这有一个定理叫史密斯定理,这里会有介绍,一个攻击者能有效率的找到所有的小整数的解:\(f(x)=0 \mod N\),其中\(x < N^{1/e}\)。如果\(m<N^{1/e}\),那么直接就通过开方计算出来。但是如果\(m\)的某些位泄露,那么我们就可以写成\(m = m_k+m_u\)。这样我们就有多项式\(f(X) = (m_k+X)^e\)。因此我们需要确保\(m\)的位数在加密过程中不被泄露。

为了对抗这种攻击,我们再次使用了盲方法:我们在取幂之前给m引入一些随机性,然后再将其移除。简单来说,我们取一个随机数\(r\),然后计算\(rm \mod N\),然后是\((rm)^e \mod N\),最后计算\(r^{\phi(N)-e}\)。显然,密文是一样的,如果没有盲方法,但泄漏的指数运算现在是独立于m的。

这篇文章应该让您了解可以安装在加密方案上的那种侧通道攻击,以及实现可以避免它们的方式。

第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法的更多相关文章

  1. 第四十九个知识点:描述在IPsec和TLS后的基本想法

    第四十九个知识点:描述在IPsec和TLS后的基本想法 网络安全协议(Internet Protocol Security,IPsec)和安全传输层协议(Transport Layer Securit ...

  2. 第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述

    第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述 我们的目标是对任 ...

  3. Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  4. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备

     孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...

  5. 第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密

    第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密 1.RSA-OAEP RSA-OAEP是RSA加密方案和OAEP填充方案的同时使用.现实世界中它们同时使用.(这里介绍的只是&quo ...

  6. 第二十五个知识点:使用特殊的素数定义$GF(p)$和$GF(2^n)$的方法。

    第二十五个知识点:使用特殊的素数定义\(GF(p)\)和\(GF(2^n)\)的方法. 在我们之前看到的博客中,当实现密码学方案时,一个最频繁调用的操作就是模运算.不幸的是,尽管模块化的使用非常广泛, ...

  7. NeHe OpenGL教程 第四十五课:顶点缓存

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  9. “全栈2019”Java第四十五章:super关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 在windows 10家庭版上安装docker的步骤

    本人之前写Redis书和Spring Cloud Alibaba书时,发现一些分布式组件更适合安装在linux环境,而在搭建Redis等集群时,更需要linux环境. 本人日常练习代码和写书所用的机器 ...

  2. Hadoop 相关知识点(一)

    作业提交流程(MR执行过程) Mapreduce2.x Client:用来提交作业 ResourceManager:协调集群上的计算资源的分配 NodeManager:负责启动和监控集群上的计算容器( ...

  3. Linux基础命令---ntpdate网络时间服务器

    ntpdate ntpdate指令通过轮询指定为服务器参数的网络时间协议(NTP)服务器来设置本地日期和时间,从而确定正确的时间. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS ...

  4. javaAPI1

    Iterable<T>接口, Iterator<T> iterator() Collection<E>:接口,add(E e) ,size() , Object[] ...

  5. android TabLayout设置选项卡之间的距离无效已解决

    根据下面的链接设置完距离后无法生效 https://www.jb51.net/article/131304.htm layout <com.google.android.material.tab ...

  6. gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法

    1. Right click on the project and go to "Properties" //鼠标右键点击项目,然后选中Properties   2. Select ...

  7. js实现递归菜单无限层

    /*动态加载菜单*/ function dynamicMenu(data){ if (userID != "admin"){ //1.清空所有菜单 $("#menuLis ...

  8. Spring Boot with H2 Database

    Learn to configure H2 database with Spring boot to create and use an in-memory database in runtime, ...

  9. JavaEE复习三

    Http协议是基于请求/响应模式.无状态的协议:所有请求时相互独立的.无连续的:服务器无法记住与识别用户. 对于简单的页面浏览或信息获取,http协议可以完全胜任:对于需要提供客户端和服务器端交互的网 ...

  10. 【Java】【学习】【监听器】Listener的学习的案例(窗体程序)

    JavaWeb 监听器listener 学习与简单应用 Java窗体程序使用监听器 效果:点击按钮,控制台出现文字 代码如下 import javax.swing.*; import java.awt ...