RSA算法与错误敏感攻击

news2024/11/17 6:34:23

参见《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.coloradmin.cn/o/956879.html

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

相关文章

Java类的声明周期、对象的创建过程

一、类的生命周期 使用类时&#xff0c;要先使用类加载器将类的字节码从磁盘加载到内存的方法区中&#xff0c;用Class对象表示加载到内存中的类&#xff0c;Class类是JDK中提供的类创建对象时&#xff0c;是根据内存中的Class对象&#xff0c;在堆中分配内存&#xff0c;完成…

c语言之指针的学习

1.指针是什么 &#xff08;指针是内存中一个最小单元的编号,也就是地址&#xff09; int main() {int a10;//当我们取出地址a的时候,取出的其实是a占4个字节中的第一个字节的地址int *pa&a;//pa是一个指针变量,用于存放地址//pa在口头语上常说为指针//指针本质上就是地址,…

C++学习|CUFFT计算一维傅里叶变换

CUFFT计算一维傅里叶变换 CUFFT库介绍CUFFTW计算一维傅里叶变换CUFFT计算一维傅里叶变换 前言&#xff1a;之前实现了CPU运行一维傅里叶变换&#xff0c;最近要改成GPU加速一维傅里叶变换&#xff0c;于是有了此篇作为记录&#xff0c;方便以后查阅。 CUFFT库介绍 CUFFT&#…

Protein - ECD (ExtraCellular Domain) 膜蛋白胞外区的 UniProt 与 PDB 数据分析

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132597158 ECD 是 Extracellular Domain 的缩写&#xff0c;指的是跨膜蛋白质的细胞外部分 (膜蛋白的胞外区)&#xff0c;通常包含一些功能性的结…

JVM的故事——类文件结构

类文件结构 文章目录 类文件结构一、概述二、无关性基石三、Class类文件的结构 一、概述 计算机是只认由0、1组成的二进制码的&#xff0c;不过随着发展&#xff0c;我们编写的程序可以被编译成与指令集无关、平台中立的一种格式。 二、无关性基石 对于不同平台和不同平台的…

77GHz线性调频连续波雷达

文章目录 前言 一、背景 二、优缺点 三、工作原理 四、电路模块设计 4.1.LFMCW信号源 4.2.发射电路 4.3.接收电路 4.4.信号处理器 五、应用 5.1.汽车测距 5.2.军事方面 5.3.气象方面 总结 前言 这篇文章是博主本科期间整理的关于77GHz线性调频连续波雷达的相关资料&#xff0c;…

【Java】文件操作和IO

文件操作和IO 文件树形结构组织和目录文件路径 Java中操作文件File 文件内容的读写(数据流)Reader和Writer字符输入流 Reader字符输出流 WriterFileReader 和 FileWriterFileReaderFileWriter InputStream和OutputStreamInputStreamFileInputStreamFileOutputStream 小程序扫描…

Vue3实现24小时倒计时

方法一:时间戳(24小时以内,毫秒为单位)转成时间,并且倒计时 效果预览: <script> // 剩余时间的时间戳,24小时的时间戳是86400000 const exTime = ref(86400000) // 支付时间期限 const payTime = ref() const maxtime = ref(0) //倒计时(时间戳,毫秒单位)转换成秒…

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c…

OPENCV实现ORB特征检测

# -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/8/31 """ import cv2 import numpy as np# 读图像 img = cv2.imread(F:\\learnOpenCV\\openCVLearning\\pictures\\chess.jpg)

应急日光灯 补光灯 太阳能路灯 升压LED电源驱动恒流IC

产品说明 AP9196 是一系列外围电路简洁的宽调光比升压调光 恒流驱动器&#xff0c;适用于 3-40V 输入电压范围的 LED 照明领域。 AP9196 采用我司专利算法&#xff0c;可以实现高精度的恒流 效果&#xff0c;输出电流恒流精度≤3&#xff05;&#xff0c;电压工作范围为 5-40V&…

重庆市人才系统注册流程

1、IE浏览器打开重庆市科技局官网首页(http://kjj.cq.gov.cn/) 2、选择“重庆市科技管理信息系统”—选择“科技资源共享”—板块—注册—选择“个人注册”—填写注册信息—注册 3、注册—选择“个人注册”—填写注册信息—注册—登录 4、选择“科技管理系统“ 5、选择“科技人…

Linux进程概念及其状态

文章目录 &#x1f347;1. 什么是进程&#x1f348;1.1 概念&#x1f348;1.2 理解进程 &#x1f34b;2. Linux的PCB&#x1f34e;3. 查看进程 & 杀死进程&#x1f352;4. 系统调用获取进程标识符&#x1f353;4.1 进程PID&#x1f353;4.2 父进程PPID &#x1f346;5. 系统…

MetInfo5.0文件包含漏洞

MetInfo历史版本与文件 环境在这里下载&#xff0c;使用phpstudy搭建 我们来看到这个index.php&#xff0c;如下图所示&#xff0c;其中定义了fmodule变量与module变量&#xff0c;其中require_once语句表示将某个文件引入当前文件&#xff0c;在这个代码中&#xff0c;通过r…

【JasperReports笔记06】JasperReport报表开发之常见的组件元素(Table、Subreport、Barcode等)

这篇文章&#xff0c;主要介绍JasperReport报表开发之常见的组件元素&#xff08;Table、Subreport、Barcode等&#xff09;。 目录 一、基础组件元素 1.1、StaticText 1.2、TextField 1.3、Image 1.4、Break分页 1.5、Rectangle矩形区域 1.6、Ellipse椭圆区域 1.7、Li…

基于MQTT协议的物联网关

随着工业领域的不断发展&#xff0c;数字化转型已经成为企业迈向未来的必由之路。在这个数字化浪潮中&#xff0c;HiWoo Box以其强大的功能和创新的设计&#xff0c;在工业物联网领域被越来越多的人所熟知。特别是其基于MQTT协议的物联网关能力&#xff0c;也为企业实现智能化数…

喷泉码浅谈

01、喷泉码简介 喷泉码&#xff08;Fountain Code&#xff09;是一种在无线通信、数据传输和网络编码领域中使用的错误纠正技术。它与传统的纠错码和编码方法有所不同&#xff0c;喷泉码被设计用于在不确定信道条件下的高效数据传输。传统的纠错码&#xff08;如海明码、RS码等…

无涯教程-Android - RadioButton函数

RadioButton有两种状态:选中或未选中,这允许用户从一组中选择一个选项。 Radio Button 示例 本示例将带您完成一些简单的步骤,以展示如何使用Linear Layout和RadioButton创建自己的Android应用程序。 以下是修改后的主要Activity文件 src/MainActivity.java 的内容。 packa…

【算法】函数渐近的界基础知识及定理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Spring依赖注入(DI)

目录 构造器注入 set注入 拓展注入 bean的作用域 Singleton Prototype Dependency Injection 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 构造器注入 具体实现&#xff1a;SpringIOC创建对象的…