当前位置: 首页 > news >正文

安全错误攻击

   近年来基于错误的密码分析(fault-based cryptanalysis)已成为检测智能卡(Smartcard)安全的重要因素。这种基于错误的密码分析,假设攻击者可以向智能卡中导入一定数量的、某种类型的错误,那么智能卡会输出错误的信息,攻击者有可能利用这些错误信息揭露出嵌入在智能卡中的秘密参数(如密钥)。为此,一些研究者提出了通过检验计算结果的正确性来防止这种攻击,即如果检验结果不正确,那么拒绝输出,从而使攻击者无法得到想要的错误信息。
   然而,仅通过检验计算结果来防止这种攻击的方法不可行。以RSA中模指数运算为例,提出了一种所谓基于安全错误的对RSA的攻击。该攻击可以攻破RSA的一些实现算法,即使那些算法中加入了检验计算结果的步骤。

密码实现

   RSA 算法中经常用到的是模幂运算 M d m o d N M^d\mod N MdmodN。其中将私钥表达成二进制的形式,即, d = ∑ i = 0 n − 1 d i 2 i , d i ∈ { 0 , 1 } d = \sum_{i=0}^{n-1}d_i 2^i, d_i\in\{0,1\} d=i=0n1di2i,di{0,1}。从而在密码芯片中对应R-L比特算法实现。
  在算法1中,当 d i = 1 d_i = 1 di=1 时,算法执行一次模乘运算( A ⋅ B 2 m o d N A\cdot B^2\mod N AB2modN)和一次摸平方运算( B 2 m o d N B^2\mod N B2modN)。当 d i = 0 d_i=0 di=0时,算法只需执行一次摸平方运算。
   其中,RSA 用到模乘运算 R = A ⋅ B m o d N R = A\cdot B \mod N R=ABmodN。将A表达成 2 t 2^t 2t进制的形式, A = ∑ j = 0 m − 1 A j ( 2 t ) j A j ∈ { 0 , 1 , ⋯ , 2 t − 1 } , m = ⌈ n / t ⌉ A = \sum_{j=0}^{m-1}A_j(2^t)^j A_j\in\{0,1,\cdots,2^t-1\},m=\lceil n/t \rceil A=j=0m1Aj(2t)jAj{0,1,,2t1},m=n/t。则 模乘运算的结果 R R R 可用以下表达式来实现。
R = ( ( ⋯ ( ( A m − 1 B ) 2 t + A m − 2 B ) 2 t + ⋯ + A 1 B ) 2 t + A 0 B ) m o d N R =((\cdots( (A_{m-1}B)2^t + A_{m-2}B)2^t+\cdots + A_1B)2^t + A_0B) \mod N R=((((Am1B)2t+Am2B)2t++A1B)2t+A0B)modN

算法1 R-L 比特模幂
输入: M M M, d = ( d n − 1 , ⋯ , d 0 ) 2 d = (d_{n-1},\cdots ,d_0)_2 d=(dn1,,d0)2, N N N
输出: A = M d m o d N A = M^d \mod N A=MdmodN
1.1 A ⟵ 1 A \longleftarrow 1 A1; B ⟵ M B \longleftarrow M BM
1.2 for i i i from 0 0 0 to n − 1 n-1 n1
1.3   if ( d i = 1 d_i=1 di=1) then A ⟵ A ⋅ B m o d N A \longleftarrow A\cdot B \mod N AABmodN
1.4   B ⟵ B 2 m o d N B \longleftarrow B^2 \mod N BB2modN
1.5 endfor

算法2 底数为 2 t 2^t 2t的模乘运算
输入: A , B , N A,B,N A,B,N
输出: R = A ⋅ B m o d N R = A\cdot B \mod N R=ABmodN
2.1 R ⟵ 0 R \longleftarrow 0 R0
2.2 for j j j from m − 1 m-1 m1 downto 0 0 0
2.3    R ⟵ ( R 2 t + A j B ) m o d N R \longleftarrow (R2^t + A_j B)\mod N R(R2t+AjB)modN
2.4 endfor

   将算法1和算法2合并起来,那么R-L比特模幂运算可写成如下实现过程。

算法3
输入: M M M, d = ( d n − 1 , ⋯ , d 0 ) 2 d = (d_{n-1},\cdots ,d_0)_2 d=(dn1,,d0)2, N N N
输出: A = M d m o d N A = M^d \mod N A=MdmodN
3.1 A ⟵ 1 A \longleftarrow 1 A1; B ⟵ M B \longleftarrow M BM
3.2 for i i i from 0 0 0 to n − 1 n-1 n1
3.3   if ( d i = 1 d_i=1 di=1) then
3.4     R ⟵ 0 R \longleftarrow 0 R0
3.5     for j j j from m − 1 m-1 m1 downto 0 0 0
3.6         R ⟵ ( R 2 t + A j B ) m o d N R \longleftarrow (R2^t + A_j B)\mod N R(R2t+AjB)modN
3.7     endfor
3.8      A ⟵ R A \longleftarrow R AR
3.9   endif
3.10   R ⟵ 0 R \longleftarrow 0 R0
3.11   for j j j from m − 1 m-1 m1 downto 0 0 0
3.12       R ⟵ ( R 2 t + A j B ) m o d N R \longleftarrow (R2^t + A_j B)\mod N R(R2t+AjB)modN
3.13   endfor
3.14   B ⟵ R B \longleftarrow R BR
3.15 endfor

基于安全错误的攻击

   考虑针对算法3进行攻击,攻击者攻击目的是要找到运算中隐藏着的密钥 d d d
   所谓安全错误,是指在算法中导入1比特或几比特错误,但这一错误可能并不会影响最终的模幂运算结果。
   例如,在 d i = 1 d_i = 1 di=1时的第 i i i 次循环中,向寄存器 A k A_k Ak 中导入错误,且满足 k > j k > j k>j,那么,由于正确的 A k A_k Ak 在先前的子循环中已经使用了,所以算法三第3步的子循环不会计算出错,即, R R R计算正确。而紧接着 A ⟵ R A \longleftarrow R AR使得先前导入的错误被清除。于是算法三在以下的计算都不会受到影响。从而使得最终的计算结果是正确的。把这样导入的错误称之为安全错误。换言之,安全错误发生了却并没有带来错误的计算结果。
   但是,导入的安全错误并不总是安全的。在一些情况下安全错误也会使得计算结果不正确。例如,在 d i = 0 d_i=0 di=0的第 i i i次循环中,向 A k A_k Ak 中导入错误,且满足 k > j k > j k>j,这时导入的错误就会使得最后的计算结果出错。因为,当 d i = 0 d_i=0 di=0时,整个循环将跳过第3步,从而使得导入的错误不能得到纠正,并带入到下面的循环中。
   通过上面分析得到以下结论。当 d i = 1 d_i = 1 di=1时,导入的安全错误不会影响计算结果的正确性;当 d i = 0 d_i=0 di=0时,导入的安全错误会使得计算结果不正确。
   基于以上的分析,攻击者分别对 d d d的每一位 d i d_i di进行攻击。为了攻击第 i i i 比特,在算法第 i i i次循环中导入安全错误。如果算法三输出正确结果,那么由以上分析,得 d i = 1 d_i=1 di=1;如果算法三输出错误结果,或者算法三通过附加的检测出计算结果错误,从而拒绝输出,那么攻击者可知 d i = 0 d_i=0 di=0
   这就是说,即是智能卡检测出错误,并拒绝输出,攻击者仍可利用这一点得到 d i d_i di 的值。所以说,对算法三实现模幂运算,通过检验计算结果的方式不能防止基于安全错误的攻击。但,通过加指数掩码,每一次进行模幂运算时,在指数 d d d上增加随机数,可防止该攻击。

相关文章:

安全错误攻击

近年来基于错误的密码分析(fault-based cryptanalysis)已成为检测智能卡(Smartcard)安全的重要因素。这种基于错误的密码分析,假设攻击者可以向智能卡中导入一定数量的、某种类型的错误,那么智能卡会输出错…...

ELK安装、部署、调试 (八)logstash配置语法详解

input {#输入插件 }filter {#过滤插件 }output {#输出插件 } 1.读取文件。 使用filewatch的ruby gem库来监听文件变化&#xff0c;并通过.sincedb的数据库文件记录被监听日志we年的读取进度&#xff08;时间 搓&#xff09; 。sincedb数据文件的默认路径为<path.data>/…...

SPI协议

文章目录 前言一、简介1、通信模式2、总线定义3、SPI通信结构4、SPI通讯时序5、SPI数据交互过程 二、多从机模式1、多NSS2、菊花链3、SPI通信优缺点4、UART、IIC、SPI 区别 三、总结四、参考资料 前言 SPI协议是我们的重要通信协议之一&#xff0c;我们需要掌握牢靠。 一、简介…...

机器学习算法系列————决策树(二)

1.什么是决策树 用于解决分类问题的一种算法。 左边是属性&#xff0c;右边是标签。 属性选择时用什么度量&#xff0c;分别是信息熵和基尼系数。 这里能够做出来特征的区分。 下图为基尼系数为例进行计算。 下面两张图是对婚姻和年收入的详细计算过程&#xff08;为GINI系…...

ACM中的数论

ACM中的数论是计算机科学领域中的一个重要分支&#xff0c;它主要研究整数的性质、运算规律和它们之间的关系。在ACM竞赛中&#xff0c;数论问题经常出现&#xff0c;因此掌握一定的数论知识对于参加ACM竞赛的选手来说是非常重要的。本文将介绍一些常见的数论概念和方法&#x…...

我的创作纪念日 —— 一年之期

前言 大家好&#xff01;我是荔枝嘿~看到官方私信才发现原来时间又过去了一年&#xff0c;荔枝也在CSDN中创作满一年啦&#xff0c;虽然中间因为种种原因并没有经常输出博文哈哈&#xff0c;但荔枝一直在坚持创作嘿嘿。记得去年的同一时间我也同样写了一篇总结文哈哈哈&#x…...

qt.qpa.plugin:找不到Qt平台插件“wayland“|| (下载插件)Ubuntu上解决方案

相信大家也都知道这个地方应该做什么&#xff0c;当然是下载这个qt平台的插件wayland,但是很多人可能不知道怎么下载这个插件。 那么我现在要说的这个方法就是针对这种的。 sudo apt install qtwayland5完事儿了奥兄弟们。 看看效果 正常了奥。...

详解Spring Boot中@PostConstruct的使用

PostConstruct 在Java中&#xff0c;PostConstruct是一个注解&#xff0c;通常用于标记一个方法&#xff0c;它表示该方法在类实例化之后&#xff08;通过构造函数创建对象之后&#xff09;立即执行。 加上PostConstruct注解的方法会在对象的所有依赖项都已经注入完成之后执行…...

判断子序列

判断子序列 题目: 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"…...

Python Opencv实践 - 轮廓特征(最小外接圆,椭圆拟合)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.PNG") plt.imshow(img[:,:,::-1])#轮廓检测 img_gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) ret,thresh cv.threshold(img_gray, 127, 255, 0) contou…...

Ubuntu22.04 LTS+NVIDIA 4090+Cuda12.1+cudnn8.8.1

系统环境中&#xff1a; 1.系统驱动安装的是&#xff1a; NVIDIA-Linux-x86_64-530.30.02.run 2.CUDA安装&#xff1a;cuda_12.1.0_530.30.02_linux.run&#xff08;无需第1步&#xff0c;直接安装它就带配套驱动&#xff09; wget https://developer.download.nvidia.com/…...

重装系统后,MySQL install错误,找不到dll文件,或者应用程序错误

文章目录 1.找不到某某dll文件2.mysqld.exe - 应用程序错误使用DX工具直接修复 1.找不到某某dll文件 由于找不到VCRUNTIME140_1.dll或者MSVCP120.dll&#xff0c;无法继续执行代码&#xff0c;重新安装程序可能会解决此问题。 在使用一台重装系统过的电脑&#xff0c;再次重新…...

线程同步机制类封装及线程池实现

1.线程池 线程池是由服务器预先创建的一组子线程&#xff0c;线程池中的线程数量应该和 CPU 数量差不多。线程池中的所有子线程都运行着相同的代码。当有新的任务到来时&#xff0c;主线程将通过某种方式选择线程池中的某一个子线程来为之服务。相比与动态的创建子线程&#x…...

Linux中的用户、组和权限

一&#xff0c;Linux的安全模型 1.安全3A Authentication(认证),Authorization(授权),Accounting(审计)(AAA)是用于对计算机资源的访问、策略执行、审计使用情况和提供服务账单所需信息等功能进行智能控制的基本组件的一个术语。大多数人认为这三个组合的过程对有效的网络管理和…...

python学习--基本数据类型之字典

python中数据类型 第一类&#xff1a;不可变类型、静态数据类型、不支持增删改操作 数字&#xff08;number&#xff09;字符串&#xff08;string&#xff09;元组&#xff08;tuple&#xff09; 第二类&#xff1a;可变类型、动态数据类型、支持增删改操作 列表&#xff…...

【OpenCV入门】第九部分——模板匹配

文章结构 模板匹配方法单模板匹配单目标匹配多目标匹配 多模板匹配 模板匹配方法 模板是被查找的图像。模板匹配是指查找模板在原始图像中的哪个位置的过程。 result cv2.matchTemplate(image, templ, method, mask)image&#xff1a; 原始图像templ&#xff1a; 模板图像&a…...

在设计web页面时,为移动端设计一套页面,PC端设计一套页面,并且能自动根据设备类型来选择是用移动端的页面还是PC端的页面。

响应式设计&#xff0c;即移动端和PC端共用一个HTML模式&#xff0c;网站的程序和模板自动根据设备类型和屏幕大小进行自适应调整。这种方法我不喜欢&#xff0c;原因是不能很好保证各种客户端的效果&#xff0c;里面存在各种复杂的兼容性等问题。 我喜欢为不同的客户端写不同的…...

微信小程序地图应用总结版

1.应用场景&#xff1a;展示公司位置&#xff0c;并打开第三方app&#xff08;高德&#xff0c;腾讯&#xff09;导航到目标位置。 &#xff08;1&#xff09;展示位置地图 uniapp官网提供了相关组件&#xff0c;uniapp-map组件https://uniapp.dcloud.net.cn/component/map.ht…...

分支创建查看切换

1、初始化git目录&#xff0c;创建文件并将其推送到本地库 git init echo "123" > hello.txt git add hello.txt git commit -m "first commit" hello.txt$ git init Initialized empty Git repository in D:/Git/git-demo/.git/ AdministratorDESKT…...

参编三大金融国标,奇富科技以技术促行业规范化演进

近期&#xff0c;由中国互联网金融协会领导制定的《互联网金融智能风险防控技术要求》《互联网金融个人网络消费信贷信息披露》《互联网金融个人身份识别技术要求》三项国家标准颁布&#xff0c;由国家市场监督管理总局、国家标准化管理委员会发布&#xff0c;奇富科技作为核心…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...