RSA攻击:Smooth攻击
目录
前言:缘起
P-1光滑攻击
P+1光滑攻击
前缀知识
Lucas-Subsquence(卢卡斯序列)
编码实现与理解
小试牛刀
[NCTF 2019]childRSA
引用
前言:缘起
Smooth攻击(光滑攻击),在最近刷题的时候总是能偶尔蹦跶到我的脑子里面。不是天天遇见它,而是其背后的原理总是让人头痛。所以,为了解决心头大患,只好尽自己所能搜罗网上资料理解Smooth攻击背后的数学原理。特此来记录这几天克服中的重重险阻时,迸发的灵感。
光滑攻击有两种:p-1光滑攻击,p+1光滑攻击。其中p-1光滑攻击是容易理解的,理解他并非什么难事。网上也不缺少它的证明,但是p+1光滑攻击则恰恰相反。首先,它违反人类感觉上的认知(编码上),所以阅读代码解析时困难,其次理论知识需要一定储备,所以学习上成本较大。因此,本文会对前者做出证明和记录,对后者给出部分性质证明以及一些个人的理解。
下面就进入正文啦~
P-1光滑攻击
P-1光滑攻击的底层原理,比较符合我们的小学认知。我们先给出一些定义以及结论。
定义1:一个数n可以被分解为若干小质数的乘积,则称其为光滑数。
定义2:若一个光滑数最大的小质数因子 <= B, 则称其为 B-光滑数。
即 n = 。
特此说明,定义2中的表达式解释中应当满足这条关系:。
从上面的两个定义中,我们不难可以得出一个事实。如果光滑数N的小质数因子互不相同,那么有 。也就是说,。
正是因为B-光滑数的这一特性,加上给出的条件是p-1为光滑数,我们可以很自然的联想到使用费马小定理来配合求解。
以为下为p-1光滑数的证明:
通过上述证明,我们明确了因此P的可计算性,一旦N,P,Q知其二,那么RSA就得以破解。剩下的计算过程想必大家都了如指掌,就不展开说了。
上脚本
# 采用Python语言编写imoprt gmpy2def Pollards_p_1(N):a = 2 # 为了快速计算以及满足费马小定理条件n = 2 # 从1开始没必要while(True):a = pow(a, n, N) # 递推计算a^B!p = gmpy2.gcd(a - 1, N) # 尝试计算pif p != 1 and p != n: # 满足要求则返回return pn += 1
P+1光滑攻击
在这种攻击方式下,底层的数学原理并非那么被人熟知或者被我们频繁使用。因此,我需要较大篇幅的导入一些前缀知识。如果你嫌弃篇幅过长的话,可以根据目录索引至代码部分的理解。
前缀知识
Lucas-Subsquence(卢卡斯序列)
这个名字有些令人陌生,确实它不如它的“好兄弟”,Fiboncci,那般有名气。现在,我们直接给出卢卡斯序列的样子(在密码学应用中),,于是,我们可以使用特征根将其求解。先将原式子变换为 ,得到两个根为。因此,等于。带入n = 1时,由待定系数法可知,λ = 1。
接下来,我们需要找到卢卡斯序列的最小循环节。令s = 。
注意:两个多项式出去首位两项,其他的偶数都是p的配属二次项系数决定了p已知存在。
编码实现与理解
当然有了一些潦草的前缀知识之后,我们并不能马上解出答案。因为这需要我们对RSA原过程做出一些变换,以及扩展一些数学知识。
引理1:对于卢卡斯序列,成立。
引理可以通过通项式子证明,其次因为m,n位置可以到对调,所以我们不让m>n吧,这样序列就不有负下标。
根据前缀知识,我们了解到,S(N)一定是数列的一个循环周期,但不一定是最小周期。但是这已经够了。
def lucas(c, d, N):x = c # a1y = (c**2 - 2) % N # a2for bit in bin(d)[3:]: # 快速乘(从高到低位)--我个人理解if bit == '1':x = (x*y - c) % N # 下标对应a_{x+y},其次保证a_{2k-1}=a_{k}a_{k-1}-a_{0}成立y = (y**2 - 2) % N # 使得y翻倍--正常的快速幂流程else:y = (x*y - c) % N # 保证a_{2k-1}=a_{k}a_{k-1}-a_{0}成立x = (x**2 - 2) % N # a_{k} 翻倍return x #返回a_{ed}
关于编码层面上采用快速乘的想法。源于引理1,由其可知,, ,且。所以计算小标ed时,我们可以把d拆分为2进制数,依次用来完成快速乘。
小试牛刀
[NCTF 2019]childRSA
获取附件之后,我们可以看到以下代码段。
我们,容易分析出P、Q是自定义素数生成器生成的。因此,我们的重点核心来到解析素数生成器的原理。
通过 n *= choice(primes) 知道,这一通过小素数累积得到的,并且这些小素数互不相同。除此之外,我们发现最后的返回值为 n + 1,也就是说 p = n + 1,即 p - 1 是一个光滑数。因此,我们可以选择p-1光滑攻击。
def Pollards_p_1(N):a = 2 # 为了快速计算以及满足费马小定理条件n = 2 # 从1开始没必要while(True):a = pow(a, n, N)p = gmpy2.gcd(a - 1, N)if p != 1 and p != n:return pn += 1p = Pollards_p_1(n)
由上诉代码段破解得到:
p = 178449493212694205742332078583256205058672290603652616240227340638730811945224947826121772642204629335108873832781921390308501763661154638696935732709724016546955977529088135995838497476350749621442719690722226913635772410880516639651363626821442456779009699333452616953193799328647446968707045304702547915799734431818800374360377292309248361548868909066895474518333089446581763425755389837072166970684877011663234978631869703859541876049132713490090720408351108387971577438951727337962368478059295446047962510687695047494480605473377173021467764495541590394732685140829152761532035790187269724703444386838656193674253139# 因此
q = n // p
phi = (p - 1) * (q - 1)
import primefac
e = 0x10001
d = primefac.modinv(e, phi)
c = 26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108
m = pow(c, d, n)
print(long_to_bytes(m))
从而我们获取flag:NCTF{Th3r3_ar3_1ns3cure_RSA_m0duli_7hat_at_f1rst_gl4nce_appe4r_t0_be_s3cur3}
引用
1.Cryptosystem on lucas - hash_hash
2.Wiki
相关文章:
RSA攻击:Smooth攻击
目录 前言:缘起 P-1光滑攻击 P1光滑攻击 前缀知识 Lucas-Subsquence(卢卡斯序列) 编码实现与理解 小试牛刀 [NCTF 2019]childRSA 引用 前言:缘起 Smooth攻击(光滑攻击),在最近刷题的时候总是能偶尔蹦跶到我的脑子里面。不是天天遇见它&am…...
什么是位域和位段?如何定义和使用位域?
位域(Bit Fields)是C语言中一种用于在数据结构中以位为单位对数据进行精确控制的技术。它们允许程序员将一个整数字段分割成多个更小的部分,每个部分可以存储不同的信息。位域通常在对内存节省要求高、数据压缩或硬件寄存器描述等情况下使用。…...
网络攻防备课笔记
从“踩点”到“创建后门”的攻击流程 踩点:攻击者在实施攻击前对目标进行初步的探索和调查的过程,包括收集目标的IP地址、开放的端口、服务版本、可能的漏洞等信息。 扫描:使用工具如Nmap、Masscan等对目标进行端口扫描,找出开放…...
Apache Solr9.3 快速上手
Apache Solr 简介 Solr是Apache的顶级开源项目,使用java开发 ,基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对Lucene的性能进行了优化。 安装 下载 : 下载地址解压 : tar -zxv…...
按关键字搜索淘宝商品API接口获取商品销量、优惠价、商品标题等参数示例
关键词搜索商品接口的作用是提供搜索功能,让用户根据关键词在电商平台上搜索商品,并根据搜索条件和偏好获取相关的商品列表和推荐结果,提高用户购物体验和准确度。对于电商平台而言,这个接口也能帮助用户发现更多商品、提升销量和…...
【外汇天眼】价格波动的节奏感:优化止盈方法!
止盈,依然是一种经验,而不是一种技术。它涉及到价格波动的灵活应对,以确保我们不会错失潜在的盈利,同时也不会让盈利被逆市波动所侵蚀。以下是关于如何有效实施止盈策略的一些建议: 首先,我们要明确&#…...
VMvare虚拟机安装国产麒麟V10桌面操作系统
一、系统下载 进入银河麒麟官网:https://www.kylinos.cn/ 选择桌面操作系统,然后进入操作系统版本选择页面,选择银河麒麟桌面操作系统V10 选择后,进入系统介绍页面,然后点击申请试用 点击后进入申请页面…...
Golang--channel+waitGroup控制并发量
文章目录 channelwaitGroup控制并发量前言示例 channelwaitGroup控制并发量 前言 golang的goroutine非常轻量级,同时启动数万协程都没问题。如果不对并发量进行控制,比如同时产生数百万的协程,会压垮服务器通过控制channel缓冲区的大小&…...
前端【响应式图片处理】之 【picture标签】
目录 🌟前言🌟目前最常见的解决方案🌟新的解决方案<picture>🌟<picture>的工作原理🌟<picture> 兼容性解决方案🌟写在最后 🌟前言 哈喽小伙伴们,前端开发过程中经…...
js实现链式调用,查询和处理数据
实现一个 query 方法,实现对数据的链式查询和处理 要求如下 query 传入参数为原始数据(数组格式,每个元素都是对象) 通过进行链式调用对数据执行操作,支持的方法有where(predicate): 根据参数的条件进行筛选࿰…...
阿里云 腾讯云 配置二级域名并解析指向非80端口操作指南
目标:主域名 imps.com 已完成配置,新增配置 kpi.imps.com 等二级域名并指向 8083 端口。 (此操作需要主域名已经通过备案3天后,最好指向的IP地址网站也通过了备案申请,否则会提示域名没有备案。) 操作流程…...
菜单子节点的写法
菜单子节点的写法 1.测试数据2.实现代码3.获取父ID层级 1.测试数据 1.表结构SQL CREATE TABLE test (id int DEFAULT NULL,u_id int DEFAULT NULL,p_u_id int DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci;2.数据SQL INSERT INTO test (i…...
系统架构设计:9 论软件系统架构评估及其应用
目录 一 架构评估的意义 1 性能 2 可用性 3 安全性 4 可修改性 5 易用性...
javaee SpringMVC中json的使用
jsp <%--Created by IntelliJ IDEA.User: 呆萌老师:QQ:2398779723Date: 2019/12/6Time: 15:55To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <%St…...
【系统架构】软件架构的演化和维护
导读:本文整理关于软件架构的演化和维护知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑,基于大量项目实践经验基础上,不断加深理论体系的理解,从而能够创造新解决系统相关问题。 目录 1、软件架构演化和定义 …...
一盏茶的功夫帮你彻底搞懂JavaScript异步编程从回调地狱到async/await
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 1. 引言 📘 2. 使用方法 📘 3. 实现原理 📘 4. 写到最后…...
前后端分离计算机毕设项目之基于SpringBoot的无人智慧超市管理系统的设计与实现《内含源码+文档+部署教程》
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…...
从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位
目录 1. 纯文本输入框 2. 存在默认值的文本输入 3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 1. 纯文本输入框 driver.find_element(By.XPATH,/html/body/div[2]/td[2]/input).send_keys(测试名称) 2. 存在默认值的文本输入 注意: 1. 这种存…...
MyCat-web安装文档:安装Zookeeper、安装Mycat-web
安装Zookeeper A. 上传安装包 zookeeper-3.4.6.tar.gzB. 解压 #解压到当前目录,之后会生成一个安装后的目录 tar -zxvf zookeeper-3.4.6.tar.gz#加上-c 代表解压到指定目录 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/C. 在安装目录下,创建数据…...
Ajax跨域访问,访问成功但一直走error不走success的的问题解决
Ajax跨域访问,访问成功但一直走error不走success的的问题解决 通过搜索各种资料,终于解决啦,废话不多说了,还是老规矩直接上代码: 我这里用了jsonp,有想了解的点击 : jsonp 前端代码: $.ajax({type:post…...
水星 Mercury MIPC251C-4 网络摄像头 ONVIF 与 PTZ 云台控制
概况 最近在 什么值得买 上发现一款水星的网络摄像头, 除了支持云台/夜视功能之外, 还标明支持 onvif 协议. 所以想着买来接入到 HomeAssistat 作为监控使用.可到手之后发现事情并没有那么简单, 记录如下. 接入 HomeAssistant 按照 HA 的文档 ONVIF Camera 接入无非就是配置文件…...
Reactor 模式网络服务器【I/O多路复用】(C++实现)
前导:本文是 I/O 多路复用的升级和实践,如果想实现一个类似的服务器的话,需要事先学习 epoll 服务器的编写。 友情链接: 高级 I/O【Linux】 I/O 多路复用【Linux/网络】(C实现 epoll、select 和 epoll 服务器&#x…...
2019年[海淀区赛 第2题] 阶乘
题目描述 n的阶乘定义为n!n*(n -1)* (n - 2)* ...* 1。n的双阶乘定义为n!!n*(n -2)* (n -4)* ...* 2或n!!n(n - 2)*(n - 4)* ...* 1取决于n的奇偶性,但是阶乘的增长速度太快了,所以我们现在只想知道n!和n!!末尾的的个数 输入格式 一个正整数n ÿ…...
CMM—软件企业走向世界的通行证
正当我国计算机软件行业2000年实现产值235亿元,为自己九十年代年均30%的增长沾沾自喜的时候,从邻国印度传来捷报:1999-2000年度,印度软件产业实现产值56.5亿美元,其中出口40.5亿美元,占目前印度出口总额的1…...
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到MATLAB,结果如下所示: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps…...
华为云云耀云服务器L实例评测|RabbitMQ的Docker版本安装 + 延迟插件安装 QQ邮箱和阿里云短信验证码的主题模式发送
前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍RabbitMQ的Docker版本安装和配置,延迟插件的安装;结合QQ邮箱和阿里云短信验证码…...
解决Linux安装AppImage文件chrome-sandbox出错问题
问题产生 在Linux版Another Redis Desktop Manager的时候,打开无反应,使用命令行运行,出现了下面的报错信息: linux: FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured co…...
Axios、SASS学习笔记
目录 前言 一、Axios基础认识 1、简介 2、相关文档 3、基本配置 4、基础快捷使用 二、Axios封装 1、公共配置文件 2、细化每个接口的配置 3、使用并发送请求 三、SASS 1、简介 2、相关文档 3、使用前奏 4、使用变量 5、嵌套规则 6、父级选择器标识 & 前言…...
开发工作中常用到的免费API分享
企业行政许可:通过公司名称/公司ID/注册号或社会统一信用代码获取企业行政许可信息,企业行政许可信息包括许可文件名称、决定许可机关、许可内容、决定日期/有效期自、截止日期/有效期至、数据来源等。企业作品著作权:通过公司名称/公司ID/注…...
外汇天眼:三大方法提高容错率——成功投资者的秘密策略!
容错率是什么? 虽然A股市场投资体验不佳,但相较于中概股市场的波动,A股投资者仍有幸福感。以中概股的代表,金龙指数ETF为例,仅一年多时间内从85.90元下跌至20.47元,跌幅高达76%。 然而,有一位…...
景安网络网站建设/免费网站推广网站破解版
2019独角兽企业重金招聘Python工程师标准>>> 一、 基本介绍 Celery是一个专注于实时处理和任务调度的分布式任务队列。所谓任务就是消息,消息中的有效载荷中包含要执行任务需要的全部数据。 使用Celery常见场景: Web应用。当用户触发的一个操…...
wordpress评论审核项/站长工具亚洲高清
Linux系统中cp(copy)命令是用来复制文件或者目录的。man cp可以获得cp的详细描述命令格式:cp [OPTION]... [-T] SOURCE DEST //cp [选项]…[-T]源目的cp [OPTION]... SOURCE... DIRECTORY // cp [选项]…源…目录cp [OPTION]... -t DIRECTORY SOURCE... // …...
做服务型党员网站/广州seo公司推荐
1、下载mysql到/usr/local/src/cd /usr/local/src/ wget http://distfiles.macports.org/cmake/cmake-2.8.12.tar.gz wget http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/mysql-5.6.35.tar.gz2、编译安装cmake编译安装 mysql(最新版本都需要 cmake 编译安装&…...
衡水网站建立要多少钱/掉发脱发严重是什么原因
转载自:点击打开链接https://www.2cto.com/kf/201710/692967.htmlAndroid Studio 3.0 升级编译错误分析,今天Google推送了Android Studio 3.0的升级。升级完了以后,AS要求将gradle tools升级到3.0.0 classpath com.android.tools.build:gradl…...
福州b2c网站建设/seo免费外链工具
本文转自:http://blog.csdn.net/michael_ouyang/article/details/70755892 续上一篇的文章:微信小程序之商品属性分类 —— 微信小程序实战商城系列(4) 自从认识某人后,我收获了两个成功。登录成功、付款成功…...
门户网站的建设/合肥最新消息今天
电视猫的新版本是越来越难用了,不知道有没有老的版本可以使用,这里小编就给大家提供一款去升级版本,不提示升级的哦,而且还是比较老的版本,非常爽,需要的朋友可以下载用用。电视猫去升级版版功能海量视频 免…...