基于格攻击的密钥恢复方法

本篇博文介绍针对椭圆曲线签名算法的基于格攻击的密钥恢复方法,本研究将这种方法应用于椭圆曲线签名算法。针对椭圆曲线算法的攻击研究一般主要集中于算法的两个运算阶段,即标量乘阶段和组合阶段。对于椭圆曲线签名算法,针对标量乘阶段的攻击目标是恢复标量,即随机数的值。在只能获取随机数一部分比特信息的情况下,结合格基归约的方法仍然可以恢复密钥。这使得我们在攻击带有防护的算法实现时,可以考虑尝试恢复随机数一部分信息,而不是必须恢复完整的数值。这种使用格基归约的攻击方法称作格攻击,需要我们解决的问题就是如何将恢复密钥的问题归约到格上的最短向量问题

签名算法密钥恢复问题的转化方法

格和隐数问题

给定一个素数 p p p, 记 ⌊ s ⌋ p \lfloor s \rfloor _p sp s s s 除以 p p p的模数,则隐数问题表述如下:给定若干数量随机选取的整数 t i ∈ F p t_i \in F_p tiFp 和一个固定的未知整数 α \alpha α, 在二进制表示下已知 ⌊ α t i ⌋ p \lfloor \alpha t_i \rfloor _p αtip的最高 l l l 比特信息,要求恢复 α \alpha α的值,整数 x ∈ F p x \in F_p xFp的最高 l l l 比特信息记为 M S B l , p ( x ) MSB_{l,p}(x) MSBl,p(x).
定义1(格 (LATTICE)),设 R m R^m Rm m m m 维欧式空间,给定 n n n 个线性无关向量 b 1 , b 2 , . . . b n ∈ R m b_1,b_2,...b_n \in R^m b1,b2,...bnRm,则由这些向量生成的格 L L L定义为这 n n n格向量的所有整数线性组合组成的集合。
L = { ∑ i = 1 n x i b i ∣ x i ∈ Z } L = \{\sum_{i=1}^{n}x_i b_i | x_i \in Z\} L={i=1nxibixiZ}
n n n 个向量 { b 1 , b 2 , . . . b n ∈ R m } \{b_1,b_2,...b_n \in R^m\} {b1,b2,...bnRm}设为格 L L L的一组基。如果以这 n n n 个列向量构成 m × n m \times n m×n 矩阵 B,则格 L L L同样可定义为矩阵 B B B 生成:
L ( B ) = { B x ∣ x ∈ Z n } = { v ∈ R n ∣ ( v ) = ∑ i = 1 n x i b i ∣ x i ∈ Z L(B) = \{Bx|x\in Z^n\}=\{v\in R^n|(v)=\sum_{i=1}^{n}x_i b_i | x_i \in Z L(B)={BxxZn}={vRn(v)=i=1nxibixiZ
m = n m=n m=n时,格 L L L称为满格。
最近向量问题是格中一个基本问题,其定义如下:给定格 L L L和一个目标向量 u ∈ R n u\in R^n uRn u u u不在个 L L L中,找到一个向量 v ∈ L v\in L vL,使得 u u u v v v之间的欧式距离 ∣ ∣ u − v ∣ ∣ ||u-v|| ∣∣uv∣∣最小。

考虑隐数问题的一个实例:随机选取 t 1 , . . . t d t_1,...t_d t1,...td,并定义相应的最高 l l l 比特信息 u i = M S B l , p ( ⌊ α t i ⌋ p ) u_i=MSB_{l,p}(\lfloor \alpha t_i \rfloor _p) ui=MSBl,p(⌊αtip).此时,给定 t 1 , . . . t d t_1,...t_d t1,...td u 1 , . . . u d u_1,...u_d u1,...ud,以及 l l l p p p,我们的目标是获取隐藏数值 α \alpha α。有, u i − ⌊ α t i ⌋ p ≤ p / 2 l + 1 u_i-\lfloor \alpha t_i \rfloor _p \leq p/2^{l+1} uiαtipp/2l+1,这里包含了 d d d个不等式。此时,我们可以将这 d d d个不等式解释成是一个由 u i u_i ui构成的向量与另一个与 α \alpha α有关的向量之间的距离很小。引入一个由如下矩阵生成的格 L ( B ) L(B) L(B).
B = ( p 0 ⋯ 0 0 0 p ⋱ ⋮ ⋮ ⋮ ⋱ ⋱ 0 ⋮ 0 ⋯ 0 p 0 t 1 ⋯ ⋯ t d 1 / 2 l + 1 ) B = \begin{pmatrix} p & 0 & \cdots & 0 & 0 \\ 0 & p & \ddots & \vdots & \vdots \\ \vdots & \ddots & \ddots & 0 & \vdots \\ 0 & \cdots & 0 & p & 0\\ t_1 & \cdots & \cdots & t_d & 1/2^{l+1}\\ \end{pmatrix} B= p00t10p000ptd001/2l+1

构建一个属于格 L ( B ) L(B) L(B)的行向量 y = ( ⌊ α t 1 ⌋ p , . . . ⌊ α t d ⌋ p , α / 2 l + 1 ) y =(\lfloor \alpha t_1 \rfloor _p ,...\lfloor \alpha t_d \rfloor _p ,\alpha/2^{l+1}) y=(⌊αt1p,...αtdp,α/2l+1),显然,向量 y y y 与另一个属于格 L L L的行向量 u = ( u 1 , . . . u d , 0 ) u = (u_1,...u_d,0) u=(u1,...ud,0)之间的距离很近,即,满足
∣ ∣ y − u ∣ ∣ ∞ < p / 2 l + 1 ||y-u||_\infty < p/2^{l+1} ∣∣yu<p/2l+1.
向量 y y y 暴露了 α \alpha α的信息,将其称作隐藏向量。
此时,我们向最近向量问题靠拢。
m i n { ∣ ∣ u − w ∣ ∣ ; w ∈ L ( B ) } ≤ d + 1 p / 2 l + 1 min \{||u-w||; w\in L(B)\} \leq \sqrt{d+1}p/2^{l+1} min{∣∣uw∣∣;wL(B)}d+1 p/2l+1
然后应用上述最近向量问题的描述,我们需要求解一个向量 v ∈ L ( B ) v \in L(B) vL(B),使得
∣ ∣ u − v ∣ ∣ ≤ 2 ( d + 1 ) / 4 m i n { ∣ ∣ u − w ∣ ∣ ; w ∈ L ( B ) } ≤ d + 1 2 ( d + 1 ) / 4 p / 2 l + 1 ||u-v||\leq 2^{(d+1)/4} min \{||u-w||; w\in L(B)\} \leq \sqrt{d+1} 2^{(d+1)/4} p/2^{l+1} ∣∣uv∣∣2(d+1)/4min{∣∣uw∣∣;wL(B)}d+1 2(d+1)/4p/2l+1
进而,我们得到格向量 y − v y-v yv满足如下等式
∣ ∣ y − v ∣ ∣ ∞ ≤ ∣ ∣ y − u ∣ ∣ ∞ + ∣ ∣ u − v ∣ ∣ ≤ p ( 1 + d + 1 2 ( d + 1 ) / 4 ) 2 l + 1 ||y-v||_{\infty} \leq ||y-u||_{\infty}+||u-v||\leq \frac{p(1+\sqrt{d+1}2^{(d+1)/4})}{2^{l+1}} ∣∣yv∣∣yu+∣∣uv∣∣2l+1p(1+d+1 2(d+1)/4)

l l l已知的最高比特位数和 d d d 不同 t i t_i ti的个数足够大时,向量 y − v y-v yv很大概率是一个零向量。即我们通过解决最近向量问题得到的结果 v v v,在很大概率下就是我们所需要的隐藏向量 y y y

SM2签名算法密钥恢复问题的转化

以SM2签名算法为例,把密钥签名私钥的问题归约到隐数问题。假设已知随机数 k k k的最低 l l l比特信息,定义这部分信息为 l s b l ( k ) lsb_l(k) lsbl(k),则 k = 2 l b + l s b l ( k ) k=2^l b + lsb_l(k) k=2lb+lsbl(k),其中 b b b是一个不小于0的整数(随机数)。显然, b < n / 2 l b < n/2^l b<n/2l。将等式带入到公式 s = ( k + r ) ( 1 + d A ) − 1 − r m o d n s = (k+r) (1+d_A)^{-1}-r \mod n s=(k+r)(1+dA)1rmodn,得到下式:
b = ( s + r ) 2 − l d A − ( l s b l ( k ) − s ) 2 − l m o d n b = (s+r)2^{-l}d_A-(lsb_l(k)-s)2^{-l} \mod n b=(s+r)2ldA(lsbl(k)s)2lmodn
定义 t = ⌊ ( s + r ) 2 − l ⌋ n t = \lfloor (s+r)2^{-l}\rfloor_n t=⌊(s+r)2ln 以及 u = ⌊ ( l s b l ( k ) − s ) 2 − l ⌋ n u= \lfloor(lsb_l(k)-s)2^{-l}\rfloor_n u=⌊(lsbl(k)s)2ln,则等式简化为 b = d A t − u m o d n b=d_A t - u \mod n b=dAtumodn ∣ x ∣ n |x|_n xn表示将 x x x约减到 [ − n / 2 , n / 2 ) [-n/2,n/2) [n/2,n/2)范围内,约减的方法是不断将 x x x减去 n n n,直到 x x x小于 n / 2 n/2 n/2。此时,由于 b ≤ n / 2 l b\leq n/2^l bn/2l,得到如下不等式。
0 ≤ ⌊ d A t − u ⌋ n ≤ n / 2 l 0 \leq \lfloor d_A t - u \rfloor _n \leq n/2^l 0dAtunn/2l
进而得到
∣ d A t − u − n / 2 l + 1 ∣ n ≤ n / 2 l + 1 | d_A t - u - n/2^{l+1}|_n \leq n/2^{l+1} dAtun/2l+1nn/2l+1
v = 2 l + 1 u + n v=2^{l+1}u+n v=2l+1u+n, 则得到
∣ d A t − v / 2 l + 1 ∣ n ≤ n / 2 l + 1 | d_A t - v/2^{l+1}|_n \leq n/2^{l+1} dAtv/2l+1nn/2l+1
根据隐数问题的定义,在这种条件下, v / 2 l + 1 v/2^{l+1} v/2l+1 即表示 ⌊ d A t ⌋ n \lfloor d_A t \rfloor _n dAtn 的最高 l l l比特信息。现在给定 d d d组签名结果 ( r i , s i ) (r_i, s_i) (ri,si),计算每一组的 ( t i , v i ) (t_i,v_i) (ti,vi)。即,
t i = ⌊ ( s i + r i ) 2 − l ⌋ n t_i = \lfloor (s_i+r_i)2^{-l}\rfloor_n ti=⌊(si+ri)2ln
v i = 2 l + 1 ⌊ ( l s b l ( k ) − s ) 2 − l ⌋ n + n v_i = 2^{l+1}\lfloor(lsb_l(k)-s)2^{-l}\rfloor_n + n vi=2l+1⌊(lsbl(k)s)2ln+n
满足:
∣ d A t i − v i / 2 l + 1 ∣ n ≤ n / 2 l + 1 | d_A t_i - v_i/2^{l+1}|_n \leq n/2^{l+1} dAtivi/2l+1nn/2l+1
构建一个 d + 1 d+1 d+1维的格 L ( B ′ ) L(B') L(B),这个格由如下矩阵 B ′ B' B生成:

B ′ = ( n 0 ⋯ 0 0 0 n ⋱ ⋮ ⋮ ⋮ ⋱ ⋱ 0 ⋮ 0 ⋯ 0 n 0 t 1 ⋯ ⋯ t d 1 / 2 l + 1 ) B'= \begin{pmatrix} n & 0 & \cdots & 0 & 0 \\ 0 & n & \ddots & \vdots & \vdots \\ \vdots & \ddots & \ddots & 0 & \vdots \\ 0 & \cdots & 0 & n & 0\\ t_1 & \cdots & \cdots & t_d & 1/2^{l+1}\\ \end{pmatrix} B= n00t10n000ntd001/2l+1
隐藏向量 y = ( ⌊ d A t 1 ⌋ n , . . . ⌊ d A t d ⌋ n , d A / 2 l + 1 ) y = (\lfloor d_A t_1 \rfloor _n ,...\lfloor d_A t_d \rfloor _n ,d_A/2^{l+1}) y=(⌊dAt1n,...dAtdn,dA/2l+1) 与向量 v = ( v 1 / 2 l + 1 , v 2 / 2 l + 1 , . . . , v d / 2 l + 1 , 0 ) v = (v_1/2^{l+1},v_2/2^{l+1},...,v_d/2^{l+1},0) v=(v1/2l+1,v2/2l+1,...,vd/2l+1,0)之间的距离很接近。因此可按上一节介绍的最近向量问题求解隐藏向量。
与SM2类似,由于随机数 k k k可以表示为 k = 2 l b + l s b l ( k ) k = 2^lb + lsb_l(k) k=2lb+lsbl(k),则有:
b = s − 1 r 2 − l d A − ( l s b l ( k ) − s − 1 z ) 2 − l m o d n b = s^{-1} r 2^{-l}d_A-(lsb_l(k)-s^{-1}z)2^{-l} \mod n b=s1r2ldA(lsbl(k)s1z)2lmodn
t = s − 1 r 2 − l t=s^{-1}r2^{-l} t=s1r2l以及 u = ( l s b l ( k ) − s − 1 z ) 2 − l u = (lsb_l(k)-s^{-1}z)2^{-l} u=(lsbl(k)s1z)2l,后续推导同SM2类似,不做赘述。

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

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

相关文章

龙卷风收音机CRadio官网地址

https://cradio.live/ Welcome Oh yeah... 产品用途 龙卷风收音机是一款倾心制作的免费的电台收听软件&#xff0c;可添加收听全球任意电台&#xff01; 功能介绍 龙卷风收音机功能强大&#xff0c;可以收听电台、内置录音、定时录音、定时播放、定时关机、断线自动重连…

封装flutter webview页面

例如在flutter里面跳转百度页面 需要安装webview_flutter webview_page.dart import package:flutter/material.dart; import package:webview_flutter/webview_flutter.dart;class MyWebView extends StatefulWidget {const MyWebView({super.key, required this.webViewUrl,…

初学者如何入门深度学习:以手写数字字符识别为例看AI 的学习路径,一图胜千言!

文章大纲 深度神经网络机器学习,深度学习,数据发掘之间的关系理解深度神经网络最好的可视化工具深度学习基础概念能解决神马种类的问题?卷积池化以手写字符识别为例讲述深度学习的分类问题MNIST 数据集简介初学者入门 :生成式 AI -- generative-ai-for-beginners参考文献与…

「Verilog学习笔记」状态机-非重叠的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 根据题意 定义一个五位的中间变量lock 每次始终上升沿来临时 判断当前寄存器的低四位新数据是否等于10111 如果等于 则下一时刻lock应被清空 否则lock等于当前的lock的低四…

Android : GPS定位 获取当前位置—简单应用

示例图&#xff1a; MainActivity.java package com.example.mygpsapp;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Manif…

亚马逊产品如何在 TikTok 上推广?

对亚马逊卖家而言&#xff0c;TikTok是提升品牌社交媒体影响力的理想平台。该平台在过去一年中实现了飞速增长&#xff0c;使得营销变得既快捷又有趣&#xff0c;且高效。本文将详细阐述如何在TikTok推广亚马逊产品&#xff0c;并如何策划更强大的品牌营销活动。 各大品牌纷纷…

ES6中对Set、Map两种数据结构的理解

Set、Map两种数据结构的理解 前言什么是集合&#xff1f;什么又是字典&#xff1f;区别&#xff1f; 一、Set理解增删改查add()delete()has()clear() 遍历keys方法、values 方法、entries 方法forEach() 方法扩展运算符和 Set 结构相结合实现数组或字符串去重实现并集、交集、…

虚拟化CentOS7分区大小调整+磁盘扩容=新分区

一、适应场景 1、虚拟化环境ESXI6.7下的虚拟服务器&#xff0c;使用一段时间后&#xff0c;把空闲的存储空间腾出来&#xff0c;给新的分区使用。 2、Linux的版本为CentOS7 3、本例为部署minio存储业务做准备 4、虚拟化存储扩容 二、配置过程 调整分区大小&#xff0c;为min…

PM2 在线和离线部署uvicorn和fastapi项目过程

PM2介绍 PM2 is a daemon process manager that will help you manage and keep your application online 24/7 PM2是一个后台进程管理工具&#xff0c;能帮助管理应用和维持应用7*24小时运行。 PM2在线安装 npm install pm2 -gPM2离线安装(适用于内网) 参见 如何离线安装pm2…

进程(4)——进程终止【linux】

进程 &#xff08;4&#xff09;——进程终止【linux】 一. 进程结束情况i. 正常终止ii. 出错终止iii. 异常退出 二. 进程返回值&#xff08;针对正常和出错&#xff09;2.1. 进程的退出方式i. returnii. exitiii. _exit 2.2. 查看C语言中的对应返回值的对应出错2.3 使用errno2…

Golang开发之------ Beego框架

1.安装go&#xff08;配置环境变量&#xff09; 2.安装gorm&#xff08;Goland编辑器举例&#xff09;&#xff1a; go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 3.初始化项目&#xff08;首先需要在工作目录新建bin文件夹&#xff0c;pkg文件…

字符串相似度匹配算法_Jaccard算法优化

package day0321.day0330;import java.util.HashSet; import java.util.Set;public class JaccardSimilarity {public static double calculateJaccardSimilarity(String str1, String[] strArray) {// 将字符串视为字符的集合Set<Character> set1 new HashSet<>(…

Ubuntu 22.04 LTS 上 安装 Redis

Ubuntu 22.04 LTS 上的Redis安装指南 Redis是一种开源的内存数据存储&#xff0c;可以用作数据库、缓存和消息代理等。本文将会介绍两种不同的安装方式&#xff0c;包括从源代码编译安装以及通过apt包管理器安装。 一、从源代码编译安装Redis 首先&#xff0c;我们需要下载最…

万宾科技水环境综合治理监测系统的融合与应用

随着社会经济的快速发展&#xff0c;我国的水环境污染问题日益凸显&#xff0c;这不仅对生态环境造成了严重破坏&#xff0c;也严重威胁到人民群众的健康和生活质量。为了解决这一问题&#xff0c;城市生命线与水环境综合治理监测系统应运而生&#xff0c;二者的结合将为水环境…

C++修改类内存对齐大小

#pragma pack(push, 1) 告诉编译器以1字节对齐方式&#xff08;即没有填充字节&#xff09;存储数据结构。这意味着每个数据成员都紧挨着前一个数据成员&#xff0c;没有填充字节。 #pragma pack(pop) 则是对应的恢复编译器默认的对齐方式。

Maven下载与安装教程

一、下载 Maven 进入 Maven 官网&#xff1a;maven.apache.org/download.cgi 选择 .zip 文件下载&#xff0c;最新版本是 3.9.5 二、安装 Maven 将 .zip 文件解压到没有中文没有空格的路径下。例如下图&#xff0c;在创建一个repository的空文件夹在他的下面&#xff0c;用于…

科研学习|论文解读——Task complexity and difficulty in music information retrieval

摘要&#xff1a; 关于音乐信息检索&#xff08;MIR&#xff09;中任务复杂度和任务难度的研究很少&#xff0c;而文本检索领域的许多研究发现任务复杂度和任务难度对用户效率有显着影响。本研究旨在通过探索 i) 任务复杂度和任务难度之间的关系&#xff1b; ii) 影响任务难度的…

Oracle E-Business Suite软件 任意文件上传漏洞(CVE-2022-21587)

0x01 产品简介 Oracle E-Business Suite&#xff08;电子商务套件&#xff09;是美国甲骨文&#xff08;Oracle&#xff09;公司的一套全面集成式的全球业务管理软件。该软件提供了客户关系管理、服务管理、财务管理等功能。 0x02 漏洞概述 Oracle E-Business Suite 的 Oracle…

基于单片机设计的激光测距仪(采用XKC-Kl200模块)

一、前言 随着科技的不断进步和应用需求的增加&#xff0c;测距仪成为了许多领域必备的工具之一。传统的测距仪价格昂贵、体积庞大&#xff0c;使用起来不够方便。本项目采用STC89C52单片机作为主控芯片&#xff0c;结合XKC-KL200激光测距模块和LCD1602显示器&#xff0c;实现…

Java链式编程、什么是链式编程、链式编程怎么调用,链式编程的使用形式,Builder模式实现链式编程(保姆级教程)

Java链式编程 链式编程的特点是可以通过一个方法调用多个方法&#xff0c;将多个方法调用链接起来&#xff0c;形成一条“链式”&#xff0c;从而提高代码的可读性。 在链式编程中&#xff0c;每个方法的返回类型 应该是调用该方法的对象类型&#xff0c;这样才能够在调用完一…