首页 > 其他分享 >Crypto-day1

Crypto-day1

时间:2024-11-13 11:50:49浏览次数:3  
标签:libnum leak Crypto flag pow print day1 modn

day1

写的笔记只用于提供自己学习复盘和督促自己学习,资料应该基本都是风二西师傅的,在bilibili看到,在此提供师傅的一些链接

风二西师傅哔哩哔哩

rsa_f2x: 风二西关于rsa 原创题目系列 - Gitee.com

【CTF-加密】RSA之leak=d+p+q

【CTF-加密】RSA之leak=d+p+q_哔哩哔哩_bilibili

[3.RSA_2022收集/P01 题目/P32 l=d+p+q · 风二西/rsa_f2x - 码云 - 开源中国](https://gitee.com/fengerxi/rsa_f2x/tree/master/3.RSA_2022收集/P01 题目/P32 l=d+p+q)

import libnum
import uuid
flag = "flag{" + str(uuid.uuid4()) + "}"
m=libnum.s2n(flag)
p=libnum.generate_prime(512)
q=libnum.generate_prime(512)

e = 0x10001
n = p * q
c = pow(m, e, n)
d=libnum.invmod(e,(p-1)*(q-1))
leak = d+p+q
print(f'{e = }')
print(f'{c = }')
print(f'{n = }')
print(f'{leak = }')

l e a k = d + p + q leak = d+p+q leak=d+p+q
p h i = ( p − 1 ) ∗ ( q − 1 ) = n − ( p + q ) + 1 phi=(p-1)*(q-1)=n-(p+q)+1 phi=(p−1)∗(q−1)=n−(p+q)+1
d = l e a k − ( p + q ) d = leak-(p+q) d=leak−(p+q)
c d m o d n = m c^dmodn=m cdmodn=m
c l e a k ∗ c − ( p + q ) m o d n = m c^{leak}*c^{-(p+q)}modn=m cleak∗c−(p+q)modn=m

欧拉定理: a p h i ( n ) m o d n = 1 a^{phi(n)}modn=1 aphi(n)modn=1

问题: c ( p + q ) m o d n = ? c^{(p+q)}modn=? c(p+q)modn=?
c p h i ( n ) m o d n = 1 c^{phi(n)}modn=1 cphi(n)modn=1
c n − ( p + q ) + 1 m o d n = 1 c^{n-(p+q)+1}modn=1 cn−(p+q)+1modn=1
c n + 1 ∗ c − ( p + q ) m o d n = 1 c^{n+1}*c^{-(p+q)}modn=1 cn+1∗c−(p+q)modn=1

结论 c n + 1 m o d n = c ( p + q ) m o d n c^{n+1}modn = c^{(p+q)}modn cn+1modn=c(p+q)modn

回到式子 c l e a k ∗ c − ( p + q ) m o d n = m c^{leak}*c^{-(p+q)}modn=m cleak∗c−(p+q)modn=m

c l e a k ∗ c − ( n + 1 ) m o d n = m c^{leak}*c^{-(n+1)}modn=m cleak∗c−(n+1)modn=m

最终结果 c l e a k − ( n + 1 ) m o d n = m c^{leak-(n+1)}modn=m cleak−(n+1)modn=m

# exp:
e = 
c = 
n = 
leak = 
from Crypto.Util.number import *
# 原本的样子m = pow(c,d,n)
m=pow(c,leak-n-1,n)
flag = long_to_bytes(m)
print(flag)

【CTF-加密】RSA之 l e a k = p q m o d n + q p m o d n leak=p^qmodn+q^pmodn leak=pqmodn+qpmodn

【CTF-加密】RSA之leak=pq%n+qp%n_哔哩哔哩_bilibili

[3.RSA_2022收集/P01 题目/P33 pow(p, q, n) + pow(q, p, n) · 风二西/rsa_f2x - 码云 - 开源中国](https://gitee.com/fengerxi/rsa_f2x/tree/master/3.RSA_2022收集/P01 题目/P33 pow(p, q, n) + pow(q, p, n))

import libnum
import uuid
flag = "flag{" + str(uuid.uuid4()) + "}"
m=libnum.s2n(flag)
p=libnum.generate_prime(512)
q=libnum.generate_prime(512)

e = 0x10001
n = p * q
c = pow(m, e, n)
leak = (pow(p, q, n) + pow(q, p, n)) % n
print(f'{e = }')
print(f'{c = }')
print(f'{n = }')
print(f'{leak = }')

费马小定理:

a p m o d p = a m o d p a^pmodp=amodp apmodp=amodp

a p − 1 m o d p = 1 a^{p-1}modp=1 ap−1modp=1

模拟方法:

自己试着按照题目给的算法运行,去看有没有什么相等的数值,或者找出一些突破点

比如这个题中的 l e a k = ( p o w ( p , q , n ) + p o w ( q , p , n ) ) leak = (pow(p, q, n) + pow(q, p, n)) % n leak=(pow(p,q,n)+pow(q,p,n))

l e a k = p + q leak=p+q leak=p+q

l e a k 1 = ( p o w ( p , q , n ) = p , l e a k 2 = ( p o w ( q , p , n ) = q leak1 = (pow(p, q, n) = p,leak2 = (pow(q, p, n) = q leak1=(pow(p,q,n)=p,leak2=(pow(q,p,n)=q

结论:

l e a k = ( p o w ( p , q , n ) + p o w ( q , p , n ) ) leak = (pow(p, q, n) + pow(q, p, n)) % n leak=(pow(p,q,n)+pow(q,p,n))

l e a k 1 = ( p o w ( p , q , n ) = p , l e a k 2 = ( p o w ( q , p , n ) = q leak1 = (pow(p, q, n) = p,leak2 = (pow(q, p, n) = q leak1=(pow(p,q,n)=p,leak2=(pow(q,p,n)=q

# exp:
e = 
c = 
n = 
leak = 

from Crypto.Util.number import *
# leak=p+q
phi=n-leak+1
d = inverse(e,phi)
m=pow(c,d,n)
flag = long_to_bytes(m)
print(flag)

【CTF-加密】rsa_dp泄露新解析—e较大的情况

【CTF-加密】rsa_dp泄露新解析_哔哩哔哩_bilibili

[3.RSA_2022收集/P01 题目/P08 dp泄露 · 风二西/rsa_f2x - 码云 - 开源中国](https://gitee.com/fengerxi/rsa_f2x/tree/master/3.RSA_2022收集/P01 题目/P08 dp泄露)

import gmpy2
import libnum
import uuid

flag = "flag{" + str(uuid.uuid4()) + "}"
m = libnum.s2n(flag)
p = libnum.generate_prime(1024)
q = libnum.generate_prime(1024)
e = libnum.generate_prime(128)
n = p * q
phi = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi)

dp = d % (p - 1)
c = pow(m, e, n)
print("n=", n)
print("e=", e)
print("c=", c)
print("dp=", dp)

常规版本的e相对小,为65537,k会在1-65537内,采用的方法是爆破k

# exp:
for k in range(1, 65537):
    p = (dp * e - 1) // k + 1
    if n % p == 0:
        q = n // p
        break

这道题的exp:

# exp:
n= 
e= 
c= 
dp= 

import libnum
from Crypto.Util.number import *
p=libnum.gcd(pow(2,dp*e,n)-2,n)
q=n//p
phi=(p-1)*(q-1)
d=inverse(e,phi)
m=pow(c,d,n)
flag = long_to_bytes(m)
print(flag)

2024-11-09
晚安!

标签:libnum,leak,Crypto,flag,pow,print,day1,modn
From: https://blog.csdn.net/weixin_52428001/article/details/143651879

相关文章

  • 旺仔水饺-冲刺日志 Day1
    作业所属课程https://edu.cnblogs.com/campus/fzu/SE2024作业要求https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称旺仔水饺102201140黎曼102201138黄俊瑶102201127罗永辉102201130郑哲浩102202144傅钰102202147赖越1722090......
  • 20天精通Java,day1
    面向对象编程static(静态):修饰成员变量和成员方法。类变量和类方法:有static修饰,属于类,在计算机中只有一份,会被类的全部对象共享。既可以通过类名访问(推荐),也可以通过对象名访问。类变量应用场景:在开发中如果某个数据只需要一份,且希望能够被共享(访问,修改),则该数据可以被定义成类......
  • 密码学之MD5(Cryptography MD5)
      ......
  • 团队项目Scrum冲刺-day1
    一、各个成员在Alpha阶段认领的任务成员Alpha陈国金凌枫陈卓恒谭立业廖俊龙曾平凡曾俊涛薛秋昊二、明日各个成员的任务安排成员任务陈国金凌枫陈卓恒谭立业廖俊龙曾平凡曾俊涛薛秋昊三......
  • 【Azure Developer】在使用Azure Bot Service JavaScript的实例代码遇见Cannot find m
    问题描述从Github中下载了JavaScript的BotServiceEchoBot实例代码,本地执行,总是报错Cannotfindmodule'node:crypto' 错误信息Error:Cannotfindmodule'node:crypto'Requirestack:atFunction.Module._resolveFilename(internal/modules/cjs/loader.js:902:15)......
  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day10
    ###LAB19Innovus在线DRC检查这个章节的学习目标是学会使用数字IC后端设计实现PR工具innovus来检查drc。数字后端零基础入门系列|Innovus零基础LAB学习Day9数字后端零基础入门系列|Innovus零基础LAB学习Day8数字后端零基础入门系列|Innovus零基础LAB学习Day7首先......
  • 鸿蒙Next系统中的随机数生成:从Crypto Architecture Kit看加密原理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在当今数字化浪潮汹涌澎湃的时代,信息安......
  • DAY109代码审计-PHP模型开发篇&动态调试&反序列化&变量覆盖&TP框架&原生POP链
    知识点1、PHP审计-动态调试-变量覆盖2、PHP审计-动态调试-原生反序列化3、PHP审计-动态调试-框架反序列化PHP常见漏洞关键字SQL注入:selectinsertupdate deletemysql_querymysqli等文件上传:$_FILES,type="file",上传,move_uploaded_file()等XSS跨站:printprint_r......
  • Day1
    Markdown标题字体Hello,worldHello,worldHello,worldHello,world引用你好,我叫贝利亚分割线图片超链接[点击跳转][青海民族大学有序abcdefg表格X【-∞,1】1【1,+∞】f(x)增函数0减函数f(x)'+极大值_......
  • Day13 备战CCF-CSP练习
    Day13题目描述题目分析大模拟,用栈储存每一个多项式,最后根据导数的加法原则依次求导相加,注意取模。C++代码#pragmaGCCoptimize(3,"Ofast","inline")#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=100010,MOD=1e9+7;string......