第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法
第四十五个知识点:描述一些对抗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的值了\)。
- \(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\)
- \(if \space b_i = 1\)
- \(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侧信道攻击的基础防御方法的更多相关文章
- 第四十九个知识点:描述在IPsec和TLS后的基本想法
第四十九个知识点:描述在IPsec和TLS后的基本想法 网络安全协议(Internet Protocol Security,IPsec)和安全传输层协议(Transport Layer Securit ...
- 第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述
第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述 我们的目标是对任 ...
- Gradle 1.12用户指南翻译——第四十五章. 应用程序插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备
孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...
- 第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密
第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密 1.RSA-OAEP RSA-OAEP是RSA加密方案和OAEP填充方案的同时使用.现实世界中它们同时使用.(这里介绍的只是&quo ...
- 第二十五个知识点:使用特殊的素数定义$GF(p)$和$GF(2^n)$的方法。
第二十五个知识点:使用特殊的素数定义\(GF(p)\)和\(GF(2^n)\)的方法. 在我们之前看到的博客中,当实现密码学方案时,一个最频繁调用的操作就是模运算.不幸的是,尽管模块化的使用非常广泛, ...
- NeHe OpenGL教程 第四十五课:顶点缓存
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...
- “全栈2019”Java第四十五章:super关键字
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- 云原生时代,为什么基础设施即代码(IaC)是开发者体验的核心?
作者 | 林俊(万念) 来源 |尔达 Erda 公众号 从一个小故事开始 你是一个高级开发工程师. 某天,你自信地写好了自动煮咖啡功能的代码,并在本地调试通过.代码合并入主干分支后,你准备把服务发布到 ...
- A Child's History of England.10
In the next reign, which was the reign of Edward, surnamed The Elder, who was chosen in council to s ...
- Sharding-JDBC 简介
什么是Sharding-JDBC 1.是轻量级的 java 框架,是增强版的 JDBC 驱动2. Sharding-JDBC(1)主要目的是:简化对分库分表之后数据相关操作.不是帮我们做分库分表,而是 ...
- android studio 使用 aidl(二)异步回调
基础使用请移步 android studio 使用 aidl (一) 首先建立在server端建立两个aidl文件 ITaskCallback.aidl 用于存放要回调client端的方法 // IT ...
- Linux基础命令---echo打印内容到标准输出
echo echo指令可以输出内容到标准输出,以空白分割字符串,并且后面增加换行. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 ec ...
- springboot+vue集成mavon-editor,开发在线文档知识库
先睹为快,来看下效果: 技术选型 SpringBoot.Spring Security.Oauth2.Vue-element-admin 集成mavon-editor编辑器 安装 mavon-edit ...
- 【Linux】【Services】【Package】rpm
CentOS系统上rpm命令管理程序包: 安装.升级.卸载.查询和校验.数据库维护 rpm命令:rpm [OPTIONS] [PACKAGE_F ...
- Mysql脚本 优化检测
下载地址: wget https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh 安装依赖: y ...
- gitlab 备份&恢复
Gitlab 成功运行起来之后,最终的事情就是定期的备份,遇到问题后的还原. 备份配置 默认 Gitlab 的备份文件会创建在/var/opt/gitlab/backups文件夹中,格式为时间戳_日期 ...
- Jenkins视图管理
目录 一.简介 二.视图维护 创建视图 将项目加入视图中 三.状态图标变绿 四.看板 一.简介 在现在的编程中,公司往往采用的是模块化的编程方式,也就是说将一个项目拆分成许多模块,每个小项目组往往只负 ...