RSA算法与错误敏感攻击

参见《RSA 算法的错误敏感攻击研究与实践》

RSA 算法简介

   RSA 算法原理:
1) RSA 算法密钥产生过程
(1)系统随机产生两个大素数 p p p q q q,对这两个数据保密;
(2)计算 n = p × q n = p \times q n=p×q (公开),计算欧拉函数 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n) = (p-1)(q-1) ϕ(n)=(p1)(q1)(保密);
(3)随机选择满足 g c d ( e , ϕ ( n ) ) = 1 gcd(e, \phi(n) )=1 gcd(e,ϕ(n))=1 e ( 1 < e < ϕ ( n ) ) e (1 < e < \phi(n) ) e(1<e<ϕ(n)) 作为公钥,则加密密钥 ( e , n ) (e,n) (e,n)
(4)计算私钥 d d d,使其满足 e d ≡ 1 ( m o d ϕ ( n ) ) ed \equiv 1(\mod \phi(n)) ed1(modϕ(n)),私钥为 ( d , n ) (d,n) (d,n)
2)RSA 加解密过程
   首先,将需要加密的明文信息转化为二进制数,然后将其进行分组(分组长度根据实际需要来定),最后对每个分组进行加解密操作:
(1) 加密运算:使用公钥 e e e 和要加密的明文 m m m,进行 c = m e m o d n c = m^e \mod n c=memodn 运算即得密文;
(2)解密运算:使用私钥 d d d 和要解密的密文 c c c, 进行 m = c d m o d n m = c^d \mod n m=cdmodn 运算即得明文。

针对 RSA 算法的侧信道攻击

   目前智能卡的密码芯片很多都采用了RSA算法来保护用户个人信息。然而,如果在智能卡运行过程中没有施以任何保护,攻击者则可以轻而易举地利用侧信道信息来破译密钥。其中功耗攻击和故障攻击作为侧信道攻击中最为有效的两种攻击方法,对智能卡安全而言是一个巨大的挑战。实施功耗攻击首先要获取密码芯片运行过程中的功耗曲线,然后通过分析找到功耗曲线和密钥之间的相关性,以此来破译算法密钥;故障攻击首先要确定注入错误的时间点,然后在该点注入足够大的错误使得密码芯片运算发生错误,最后利用得到的错误输出和算法特性等来获取密钥相关信息。

功耗攻击

   Kocher等人发现可以利用密码芯片运行过程中的功耗曲线来破译加密算法密钥。简单功耗攻击正是基于这个特性,其只需获得密码芯片完整运行一次的功耗曲线就可以从中得出算法密钥。
   智能卡在执行加解密算法时,电路会根据算法的运行步骤而处于不同的状态,由于电路所处的状态不同会导致电路运行过程中的消耗功耗不同,例如当设备处于存储数据和算术运算时设备所需的功耗是不同的。SPA核心思想就是利用获取得到的功耗曲线,通过分析将电路所处的状态区分开来,从而得到算法实施过程的各个时间点,推测实际运算过程涉及到的秘密参数,以此来破译算法密钥。
  对于RSA算法来说,在加解密过程中进行最多次的是模幂运算。SPA利用这个特性,通过分析模幂运算过程中的功耗曲线来确定参与运算的指数位为1或0.其中L-R模幂算法尤为明显。L-R模幂算法如下所示:

L-R模幂算法

  在上述算法步骤2.2中,当 e i = 1 e_i=1 ei=1 时, s < − s ⋅ c m o d n s <- s\cdot c \mod n s<scmodn 就会被执行一次;当 e i = 0 e_i = 0 ei=0 时,则算法直接跳过步骤2.2。基于这一点,密钥位的不同使得算法执行不同的分支,对应的,攻击者可以从功耗曲线上看出算法执行的不同路径。因此通过检测一次完整的RSA解密过程,获取功耗曲线,从功耗曲线上就可以推测出算法的具体实现过程,从而就可以对密钥进行重构。
  从上述分析来看,采用SPA攻击RSA具有简单、高效的特点。针对SPA攻击方式的特征,其防御工作可以从几个方面展开:使攻击者不能够正确区分模乘和摸平方操作;消除算法中不平衡操作,可以对每一个比特都进行模乘和摸平方操作;在主要的运算中插入伪指令以消除或减小中间数据和功耗轨迹之间的相关性;阻止能量消耗的采集。近几年来,密码学界对功耗分析的威胁性越来越重视,并针对其防御投入很大的人力和物力,不断地提出有效的防御方案,目前具体有以下几种防护措施:减小信号强度、引入随机噪声、随机过程中断、非线性密钥升级

故障攻击

  故障攻击是指通过利用物理方法(如电磁辐射、X光、微探测或切断路线)干扰密码信息的正常工作,使密码芯片产生错误的操作,然后对密码芯片的输出进行收集和分析,从而可以得到芯片中的密钥信息。目前有很多成熟的故障攻击方法。
  针对RSA,Yen提出了一种新的思想,即,安全错误攻击(Safe-Error Attack),其主要思想如图所示:

安全错误攻击
  RSA算法执行了两个分支,分别是 operation1 和 operation2,运算完成后将结果存储在变量C当中。攻击者可以在算法执行者两个分支运算时注入错误,由于算法对错误做出了不同的反应,左边的计算没有受到影响,输出了正确的结果 C;而错误注入对 operation2产生了影响使其输出了错误的结果 C,因此根据这二者的不同,攻击者可以很直观地分辨出算法执行了哪个步骤,从而获取有关密钥的信息。
  为了防范SPA,L-R模幂算法在密钥为0时加入了虚假操作,该操作对最终的结果没有任何影响。Joye等提出了C-safe error攻击,该攻击方式正是利用上述特点,在密码芯片进行模幂运算时,注入错误的时钟频率,使得本步的计算发生错误,然后继续运算,将得到的结果和正确的输出进行比较,如果二者一致,则说明本步的密钥为0,反之,则为1。如此反复,直到得到正确的密钥。为了防御 C-safe error攻击,Joye等提出了Powering Ladder 模幂算法。

错误敏感攻击

   在FSA过程中,除了错误密文之外,攻击者还可以利用错误敏感信息。所谓错误敏感就是将错误注入到密码芯片中而恰使其好产生错误密文时的状态。当攻击者逐渐加大故障注入的强度时,可以辨别出故障开始出现和故障变得稳定时的临界状态。类似于大多数侧信道攻击,如果错误敏感信息和敏感数据之间的关系是已知的,那么FSA可以得到密钥的相关信息。
   由于在密码芯片中电路信号的转换是数据依赖的,因此可以肯定的是错误敏感信息也是数据依赖的。数据依赖的基本概念就是指电路的输入信号对电路的运行时间起确定性左右。下面使用与门、或门和异或门作为例子来解释信号时序延迟的数据依赖的一般机制。如下图所示:

数据依赖性的例子
   图中 T X T_X TX 表示信号 X X X 的延迟。对与门(a),假设 T A < T B T_A < T_B TA<TB,即信号A到达与门的速度的快于信号B。如果信号A为0,则信号C的延时取决于信号A,即 T C = T A + T A N D T_C = T_A + T_{AND} TC=TA+TAND,其中 T A N D T_{AND} TAND为与门的延时;反之,如果信号A为1,信号C的值取决于信号B,即, T C = T B + T A N D T_C = T_B + T_{AND} TC=TB+TAND。即,信号A为1,则输出结果会更慢。
   类似的,对于或门(b),仍然假设 T A < T B T_A < T_B TA<TB。如果信号A为1, T C = T A + T O R T_C = T_A + T_{OR} TC=TA+TOR;反之, T C = T B + T O R T_C = T_B + T_{OR} TC=TB+TOR。即,信号A为1时,输出会更快。由以上分析可知,一旦电路结构确定,数据依赖性的错误敏感度也会被固定。攻击者可以利用电路结构来分析得到数据依赖性,以此来获得错误敏感信息。
   相较于差分故障攻击攻击,FSA攻击不需要通过假设只有几个比特或将注入的故障限制在一个小的子空间内。即使DFA可能只需更少的错误注入次数就可以获得密钥,但是它要求攻击者必须拥有将错误注入指定位置的能力。虽然攻击者可能拥有整个攻击设备,可以对设备进行多次非入侵式的注入故障,但是它需要有大量的知识来注入预期的故障。此外,FSA所需要的信息不包括错误的输出信息。因此,对于检测到故障即停止计算的密码设备,FSA的攻击仍然是一个潜在的威胁。
   从L-R模幂算法的实现中可以看到,只要能够正确区分算法执行的是模乘操作还是模平方操作,就可以得到该比特位为1还是0。针对该特性,FSA攻击可以从模乘操作和模平方操作对错误时钟频率的不同敏感度入手,将错误时钟频率作为敏感信息来区分本步的具体操作,从而破译私钥。
   RSA在智能卡中的应用十分广泛,研究该类智能卡的错误敏感攻击和针对性的防御措施具有重要的意义。

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

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

相关文章

RealSense D455启动教程

环境&#xff1a; ubuntu20.04 ros:noetic 视觉传感器&#xff1a;Intel RealSense D455 通过命令安装不成功后改为下面源码安装 1. 安装Intel RealSense SDK 2.0 1.1源码安装 1. 下载源码git clone https://github.com/IntelRealSense/librealsense cd librealsense…

【爬虫】实验项目二:模拟登录和数据持久化

目录 一、实验目的 二、实验预习提示 三、实验内容 实验要求 基本要求&#xff1a; 改进要求A&#xff1a; 改进要求B&#xff1a; 四、实验过程 基本要求&#xff1a; 源码如下&#xff1a; 改进要求A: 源码如下&#xff1a; 改进要求B&#xff1a; 源码如下&…

Java【手撕双指针】LeetCode 18. “四数之和“, 图文详解思路分析 + 代码

文章目录 前言一、四数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表, 堆…

设计模式大白话——适配器模式

适配器模式 概述示例适配器的种类小结 概述 ​ 适配器其实非常好理解&#xff0c;放到生活中来&#xff0c;我们身边处处都有这样的例子&#xff0c;最常见的是用的比较多的各种转接线&#xff08;如&#xff1a;USB 转 Type-C&#xff09;&#xff0c;有了这个“适配器”&…

Linux系统下建立Socket聊天服务器

目录 1.服务器结构 2.各模块函数 2.1 socket函数 2.2 bind函数 2.3 Listen函数 2.4 accept函数 2.5 接收发送函数 2.6 close函数 2.7 connect函数 3 代码段 3.1 服务器代码 1.服务器结构 使用socket的API函数编写服务端和客户端程序的步骤图示: 2.各模块函数 服务…

循环购模式:美妆行业的新趋势

美妆是一种能够提升自信和魅力的艺术&#xff0c;它让每个人都可以展现自己的个性和风格。但是&#xff0c;美妆也是一种需要不断更新和学习的技能&#xff0c;它需要消费者投入时间和金钱&#xff0c;才能找到适合自己的产品和方法。有没有一种方式&#xff0c;可以让美妆变得…

MySQL 数据库常用命令大全(详细)

文章目录 1. MySQL命令2. MySQL基础命令3. MySQL命令简介4. MySQL常用命令4.1 MySQL准备篇4.1.1 启动和停止MySQL服务4.1.2 修改MySQL账户密码4.1.3 MySQL的登陆和退出4.1.4 查看MySQL版本 4.2 DDL篇&#xff08;数据定义&#xff09;4.2.1 查询数据库4.2.2 创建数据库4.2.3 使…

[Linux]进程程序替换

[Linux]进程程序替换 文章目录 [Linux]进程程序替换进程程序替换的意义见一见进程程序替换进程程序替换的原理进程程序替换中的写时拷贝介绍进程程序替换接口 进程程序替换的意义 Linux系统下使用fork系统函数创建子进程后&#xff0c;子进程只能执行继承的部分父进程代码&…

cocos creator配置终端调试

在launch.json里添加"preLaunchTask":“CocosCreator compile” 在cocos creator里选择开发者&#xff0c;visual studio code工作流&#xff0c;选择添加编译任务。 添加 settings.json {"files.exclude":{"**/.git": true,"**/.DS_Sto…

哈希表HashMap(基于vector和list)

C数据结构与算法实现&#xff08;目录&#xff09; 1 什么是HashMap&#xff1f; 我们这里要实现的HashMap接口不会超过标准库的版本&#xff08;是一个子集&#xff09;。 HashMap是一种键值对容器&#xff08;关联容器&#xff09;&#xff0c;又叫字典。 和其他容易一样…

FFDNet-pytorch版本代码训练教程

一、FFDNet-pytorch版本代码下载 (1)FFDNet-pytorch下载 https://download.csdn.net/download/qq_41104871/88233742 (2)FFDNet-pytorch版本代码运行环境配置 https://blog.csdn.net/qq_41104871/article/details/132497008 二、FFDNet-pytorch版本代码训练教程 (1)按…

Elasticsearch 7.6 - Springboot应用基础操作篇

ES 7.6 - JAVA应用基础操作篇 环境准备依赖配置 实体类准备使用说明索引/映射操作创建索引和映射索引和映射相关查询删除索引 文档操作插入数据更新数据删除数据批量操作 文档查询根据ID查询根据字段精准查询根据字段分词查询控制返回字段范围查询组合查询排序分页高亮搜索聚合…

大数据平台数据脱敏是什么意思?有哪些方案?

大数据平台包含了海量多样化数据&#xff0c;所以保障大数据平台数据安全非常重要&#xff0c;数据脱敏就是手段之一。今天我们就来简单聊聊大数据平台数据脱敏是什么意思&#xff1f;有哪些方案&#xff1f; 大数据平台数据脱敏是什么意思&#xff1f; 大数据平台数据脱敏简…

matlab使用教程(27)—微分代数方程(DAE)求解

1.什么是微分代数方程&#xff1f; 微分代数方程是一类微分方程&#xff0c;其中一个或多个因变量导数未出现在方程中。方程中出现的未包含其导数的变量称为代数变量&#xff0c;代数变量的存在意味着您不能将这些方程记为显式形式 y ′ f t , y 。相反&#xff0c;您可以…

安全学习DAY20_自动化工具项目武器库介绍

信息打点-自动化工具 文章目录 信息打点-自动化工具本节思维导图&概述 各类红蓝队优秀工具项目集合&#xff1a;All-Defense-Tool 自动化-武器库部署F8x 自动化信息搜集-网络空间AsamF 自动化信息搜集-企查信息ENScan 自动化信息搜集-综合架构-ARL&NemoARL灯塔Nemo_Go …

javaCV实现java图片ocr提取文字效果

引入依赖&#xff1a; <dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.5</version></dependency> 引入中文语言训练数据集&#xff1a;chi_sim GitHub - tesseract-ocr…

网络综合布线专业技能人才培养方案

一、网络综合布线专业技能人才培养方案概述 网络综合布线专业技能人才培养方案旨在培养具备综合布线系统设计、安装与维护的全面技能和知识的专业人才。以下是一个概述&#xff1a; 培养目标&#xff1a;培养具备综合布线系统的理论基础和实践操作技能的专业人才&#xff0c;能…

使用postman做接口测试

1.接口测试&#xff1a;针对软件对外提供服务的接口的输入输出进行测试&#xff0c;以及接口间相互逻辑的测试&#xff0c;验证接口功能与接口描述文档的一致性 2.接口测试流程&#xff1a; 1&#xff09;获取接口信息&#xff1a;通过接口文档或抓包来获取接口的基本调用方式和…

uniapp 微信小程序 锚点跳转

uniapp文档 以下是我遇到的业务场景&#xff0c;是点击商品分类的某一类 然后页面滚动至目标分类&#xff0c; 首先第一步是设置锚点跳转的目的地&#xff0c;在目标的dom上面添加id属性 然后给每个分类每一项添加点击事件&#xff0c;分类这里的item数据里面有一字段是和上…

SpringBoot初级开发--多环境配置的集成(9)

在Springboot的开发中&#xff0c;我们经常要切换各种各样的环境配置&#xff0c;比如现在是开发环境&#xff0c;然后又切换到生产环境&#xff0c;这个时候用多环境配置就是一个明智的选择。接下来我们沿用上一章的工程来配置多环境配置工程。 1.准备多环境配置文件 这里我…