[CryptoHack] Public-key Cryptography Partial Solutions

news2024/10/6 22:34:20

文章目录

  • Factoring
  • Monoprime
  • Manyprime
  • Salty

Factoring

So far we’ve been using the product of small primes for the modulus, but small primes aren’t much good for RSA as they can be factorised using modern1 methods2.

What is a “small prime”? There was an RSA Factoring Challenge 3 with cash prizes given to teams who could factorise RSA moduli. This gave insight to the public into how long various key sizes would remain safe. Computers get faster, algorithms get better, so in cryptography it’s always prudent to err on the side of caution.

These days, using primes that are at least 1024 bits long is recommended—multiplying two such 1024 primes gives you a modulus that is 2048 bits large. RSA with a 2048-bit modulus is called RSA-2048.

Some say that to really remain future-proof you should use RSA-4096 or even RSA-8192. However, there is a tradeoff here; it takes longer to generate large prime numbers, plus modular exponentiations are predictably slower with a large modulus.

Factorise the 150-bit number 510143758735509025530880200653196460532653147into its two constituent primes. Give the smaller one as your answer.

Resources:

  • How big an RSA key is considered secure today?
  • primefac-fork

方式1:质因数分解网站:http://factordb.com/
在这里插入图片描述

方式2:sage

# in SageMath
factor(510143758735509025530880200653196460532653147 )
# 19704762736204164635843 * 25889363174021185185929

相关视频:https://www.youtube.com/watch?v=SmJRKo4XL18&ab_channel=JohnHammond

这个视频内容是有关RSA整数分解的一道题,作用使用python的pwntools模块来维持一个http session 通过该session完成提交整数分解的结果。质因数分解用的是python primefac module。

总结:
现有的整数分解算法可以快速分解“小整数”。因此当RSA中模数N的位数比较小时,是不安全的。

Monoprime

Manyprime

题目描述
Using one prime factor was definitely a bad idea so I’ll try using over 30 instead.

If it’s taking forever to factorise, read up on factorisation algorithms and make sure you’re using one that’s optimised for this scenario.

Challenge files:

  • output.txt

Resources:

  • The Elliptic Curve Factorization Method

首先对N进行素因子分解

# in sagemath
n = 580642391898843192929563856870897799650883152718761762932292482252152591279871421569162037190419036435041797739880389529593674485555792234900969402019055601781662044515999210032698275981631376651117318677368742867687180140048715627160641771118040372573575479330830092989800730105573700557717146251860588802509310534792310748898504394966263819959963273509119791037525504422606634640173277598774814099540555569257179715908642917355365791447508751401889724095964924513196281345665480688029639999472649549163147599540142367575413885729653166517595719991872223011969856259344396899748662101941230745601719730556631637
e = 65537
ct = 320721490534624434149993723527322977960556510750628354856260732098109692581338409999983376131354918370047625150454728718467998870322344980985635149656977787964380651868131740312053755501594999166365821315043312308622388016666802478485476059625888033017198083472976011719998333985531756978678758897472845358167730221506573817798467100023754709109274265835201757369829744113233607359526441007577850111228850004361838028842815813724076511058179239339760639518034583306154826603816927757236549096339501503316601078891287408682099750164720032975016814187899399273719181407940397071512493967454225665490162619270814464
ecm.factor(n)

得到素分解之后,

  1. 计算N的Euler totient
  2. 求e的逆元,得到d
  3. 执行RSA解密算法
  4. 将数字转换为字符串,得到flag
from Crypto.Util import number
n = 580642391898843192929563856870897799650883152718761762932292482252152591279871421569162037190419036435041797739880389529593674485555792234900969402019055601781662044515999210032698275981631376651117318677368742867687180140048715627160641771118040372573575479330830092989800730105573700557717146251860588802509310534792310748898504394966263819959963273509119791037525504422606634640173277598774814099540555569257179715908642917355365791447508751401889724095964924513196281345665480688029639999472649549163147599540142367575413885729653166517595719991872223011969856259344396899748662101941230745601719730556631637
e = 65537
ct = 320721490534624434149993723527322977960556510750628354856260732098109692581338409999983376131354918370047625150454728718467998870322344980985635149656977787964380651868131740312053755501594999166365821315043312308622388016666802478485476059625888033017198083472976011719998333985531756978678758897472845358167730221506573817798467100023754709109274265835201757369829744113233607359526441007577850111228850004361838028842815813724076511058179239339760639518034583306154826603816927757236549096339501503316601078891287408682099750164720032975016814187899399273719181407940397071512493967454225665490162619270814464

# 通过sage对N进行分解得到
factors = [9282105380008121879,
           9303850685953812323,
           9389357739583927789,
           10336650220878499841,
           10638241655447339831,
           11282698189561966721,
           11328768673634243077,
           11403460639036243901,
           11473665579512371723,
           11492065299277279799,
           11530534813954192171,
           11665347949879312361,
           12132158321859677597,
           12834461276877415051,
           12955403765595949597,
           12973972336777979701,
           13099895578757581201,
           13572286589428162097,
           14100640260554622013,
           14178869592193599187,
           14278240802299816541,
           14523070016044624039,
           14963354250199553339,
           15364597561881860737,
           15669758663523555763,
           15824122791679574573,
           15998365463074268941,
           16656402470578844539,
           16898740504023346457,
           17138336856793050757,
           17174065872156629921,
           17281246625998849649]
phi_n = 1
for i in factors:
    phi_n *= i-1
d = number.inverse(e, phi_n)  # get private key
pt = number.long_to_bytes(pow(ct, d, n)).decode()
print(pt)

在线的sagemath: https://sagecell.sagemath.org/
sage lesson: https://github.com/fredstro/sage-lesson-nt
sage 官方教程https://doc.sagemath.org/html/en/index.html
博客教程1:https://cocalc.com/share/public_paths/embed/ee63291fa9aadeb8d5830f5c518cddb466501a70
博客教程2: https://blog.devgenius.io/sagemath-doing-math-in-python-8c34765254f7

Salty

题目描述:
Smallest exponent should be fastest, right?
Challenge files:

  • salty.py
  • output.txt

由于公钥 e = 1 e=1 e=1,因此无论 ϕ ( n ) \phi(n) ϕ(n)的值为多少,私钥 d d d始终为1。

#!/usr/bin/env python3
from Crypto.Util import number
n = 110581795715958566206600392161360212579669637391437097703685154237017351570464767725324182051199901920318211290404777259728923614917211291562555864753005179326101890427669819834642007924406862482343614488768256951616086287044725034412802176312273081322195866046098595306261781788276570920467840172004530873767                                                                  
e = 1
ct = 44981230718212183604274785925793145442655465025264554046028251311164494127485
d = 1

pt = pow(ct, d, n)
flag = number.long_to_bytes(pt).decode()
print(flag)

这道题告诉我们,RSA的公钥采用 e = 1 e=1 e=1不安全。


  1. https://en.wikipedia.org/wiki/Lenstra_elliptic-curve_factorization ↩︎

  2. https://en.wikipedia.org/wiki/General_number_field_sieve ↩︎

  3. https://en.wikipedia.org/wiki/RSA_Factoring_Challenge ↩︎

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

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

相关文章

汽车毫米波雷达的规定和标准(四)

01 — 虚警漏警问题 工信部无2021【181】号文件中,是这样定义的“虚警”:虚警是指在规定的条件下,实际目标不存在而雷达探测判为有目标的事件。虚警与虚假信号相关,下图中产生的虚警现象是由于干扰信号的功率超过检测门限导致。…

ResearchRabbit.ai: 学术论文摘要研究工具

【产品介绍】 ResearchRabbit是一个帮助研究人员发现、跟踪和分享学术论文的平台。可以根据你的兴趣和收藏提供个性化的推荐和摘要,并且可以让你可视化论文和作者之间的网络关系。 Researchrabbit.ai是一个基于人工智能的文献搜索和管理工具,它可以帮助你…

Speechify: 在线文本转语音(TTS)网站

【产品介绍】 Speechify是一个基于人工智能技术的在线文本转语音(TTS)网站,可以让用户把任何文本转换成自然流畅的语音,从而提高阅读效率和理解能力。 Speechify有多种平台的应用,包括Chrome扩展、iOS应用、Android应用…

Prompting Learning在CV领域的进展

始于NLP prompt介绍 简单来讲,Prompt就是对原来的输入文本进行一定的处理,使得在不改变预训练模型参数的情况下,相应任务的性能变高。例如,原输入文本为:I received the offer from ETH. ,对于文本分类&a…

Unity3D介绍和VR领域的使用说明

目录 Unity3D介绍 Unity3D 是否能用在VR游戏开发? Unity3D 跟虚幻引擎比,优缺点? Unity3D 可以开发微信游戏小程序吗? Unity3D可以自学吗? Unity3D视频分享图 Unity3D介绍 Unity3D是一种跨平台游戏引擎&#xff…

会声会影2023帧率在哪里设置 会声会影2023怎么改帧率

对于帧率的概念,可能大家会比较陌生。在会声会影编辑视频时,我们一般会选择与素材相同的参数设置。因此,很少会去单独设置视频帧率。本文会给大家介绍一下帧率的概念,以及会声会影帧率在哪里设置,会声会影2023怎么改帧…

数智财资,智慧金融 用友联合工行青海分行举办主题论坛圆满落幕

2023年5月10日,用友网络联合中国工商银行青海省分行于青海西宁举办的“数智财资,智慧金融——工行财资云助力企业构建一流财资体系”主题论坛圆满落幕。金融机构领导,行业财资专家,各企业领导、财务负责人齐聚一堂,分享…

apple pencil一定要买吗?平价好用的电容笔合集

这些年来,iPad已经成为了很多人的首选。而iPad的使用者,更看重的是它的功能,很多人都会选择电容笔搭配来做笔记。实际上,Apple Pencil还有许多其他版本,如果只是为了记笔记,那么你不需要买一支价格不菲的苹…

图片转为base64格式的优缺点分析

1. 优点 (1)网页中使用base64格式的图片时,不用再请求服务器调用图片资源,减少了服务器访问次数。 (2)base64编码的字符串,更适合不同平台、不同语言的传输; (3&#…

【源码解析】SpringBoot接口参数校验原理

使用示例 入门 web接口 RestController public class HelloController {PostMapping("/t1")public void t1(Validated RequestBody Request request) {System.out.println(11);} }实体类 Data public class Request {NotEmpty(message "title不为空")…

Qwik 1.0 发布,全栈式 Web 框架

Qwik 是一个全栈式 Web 框架,Qwik 基于 React、Angular 和 Vue 等其他 Web 框架的概念,但以 JavaScript 流等更新的方法脱颖而出,允许以高性能向用户交付复杂的 Web 应用程序。 随着 Web 应用程序变得越来越大,它们的启动性能会下…

百度文心一言在国产模型中倒数?我看懵了

最近几天,我们公众号的社群在纷纷转发一张名为SuperClue 评测的截图。科大讯飞甚至在官号进行了宣传: 由于讯飞星火大模型刚发布,笔者玩的少,它是不是真的是国产最强这个笔者不敢下结论。 各个大模型的研究测试传送门 阿里通义千问…

揭开Facebook数据抓取的面纱,深入了解其运作机制

在互联网时代,数据是一切的基础。而社交媒体作为数据存储与传输的重要渠道,其数据价值不言而喻。 那么,Facebook数据抓取是如何进行的呢? 1.API接口 首先,我们需要了解一些基本的概念。Facebook的API(Ap…

微服务#2 Feign 和 Gateway

一. Feign Feign远程调用 Feign的使用步骤 引入依赖 <!--feign客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 添加Ena…

数组和指针

文章目录 指针和数组指针为什么要有指针如何理解编址指针的内存布局指针解引用如何将数值存储到指定的内存地址栈随机化 数组数组的内存布局&a[0] VS &a步长问题 指针和数组无关C为何要这样设计 指针数组和数组指针数组元素个数是否是数组类型的一部分?是地址的强制转…

国赛推荐方向!Prompt工程设计大赛

近期&#xff0c;大型语言模型&#xff08; LLM&#xff0c;Large Language Model &#xff09;的魅力&#xff0c;让大家惊艳于 AI 的天花板还能继续抬升。具备“涌现能力”的 LLM &#xff0c;许多能力都将被解锁&#xff0c;带来意想不到的精彩礼物。对于用户来说&#xff0…

maven学习总结

生命周期 每个生命周期的各个环节都是由各种插件完成&#xff01;&#xff01;&#xff01;Maven有三个相互独立的生命周期&#xff08;Maven的这三个生命周期不能看成一个整体&#xff09;&#xff01;&#xff01;&#xff01; 我们在开发中描述的项目的生命周期&#xff0…

Java之阻塞队列和消息队列

目录 一.上节复习 1.什么是单列模式 2.饿汉模式 3.懒汉模式 二.阻塞队列 1.什么是阻塞队列 三.消息队列 1.什么是消息队列 2.消息队列的作用 1.解耦 2.削峰填谷 3.异步 四.JDK中的阻塞队列 1.常见的阻塞队列 2.向阻塞队列中放入元素---put() 3.向阻塞队列中拿出元…

python url拼接的方法

Python的 url是一个常用的文件链接&#xff0c;一个文件包含多个 url&#xff0c;在很多网站中&#xff0c;我们都需要拼接多个 url。 在网上我们经常可以看到关于 Python拼接的方法介绍&#xff0c;但是很多都是非常不完整的&#xff0c;今天我们就来了解一下&#xff0c;比较…

晨控CK-FR208-EIP与欧姆龙PLC工业Ethernet/IP协议通讯指南

CK-FR208-EIP 是一款支持标准工业 Ethernet/IP 协议的多通道工业 RFID 读写器&#xff0c;读卡器 工作频率为 13.56MHZ&#xff0c;支持对 I-CODE 2、I-CODE SLI 等符合 ISO15693 国际标准协议格式标签的读写。 读卡器同时支持标准工业通讯协议 Ethernet/IP&#xff0c;方便用…