前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RSA常见解题思路及技巧

RSA常见解题思路及技巧

作者头像
tinyfisher
发布2019-11-20 18:45:53
4.5K0
发布2019-11-20 18:45:53
举报
文章被收录于专栏:湛卢工作室

RSA算法介绍

1977年,麻省理工学院的 Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出了一种非对称加密算法,用他们三人的姓氏缩写命名为 RSA。RSA 既不是惟一,也不是最早的非对称加密算法。但它是使用最广泛,因而也是最重要的非对称加密算法。

RSA算法的可靠性由极大整数因数分解的难度决定。也就是说,对一个极大整数做因数分解越困难,RSA算法越可靠。如果有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极大降低。然而找到这样的算法的可能性是非常低的,如今只有短的RSA密钥才可能被强力方式破解,到2018年为止,还未有任何可靠的攻击RSA算法的方式。

RSA加密算法原理

在开始前可以根据这篇文章复习一下数论基础:

https://blog.sengxian.com/algorithms/mod-world

1、RSA加密解密涉及元素

· N:大整数N,我们称之为模数(modulus)

· p 和 q :大整数N的两个因子(factor)

· e 和 d:互为模反数的两个指数(exponent)

· c 和 m:分别是密文和明文

· phi:N的欧拉函数值,在求解d的时候常用

2、RSA算法密钥的产生

· 选取两个较大的互不相等的质数p和q,计算n = p * q

· 计算phi = (p-1) * (q-1)

· 选取任意e,使得e满足 1<e<phigcd(e , phi) = 1

· 计算e关于phi的模逆元d, 即d满足

· 加解密:

。其中m为明文,c为密文,{n,e}为公钥对,d为私钥,要求 0 <= m < n 。

3、RSA加密解密原理图

模拟场景:

假设A是秘密消息的发送者,B是秘密消息的接收者,则只有B知道私钥{d,n},所有人都可以知道公钥{e,n}。

加密操作:

如果A要发送需要保密的明文m给B,首先,要用B的公钥{e,n}计算,得到密文c,然后把c发送给B。

解密操作:

B收到密文c之后,根据自己的私钥{d,n}计算,得到的结果就是明文m。

常见解题思路

CTF中的RSA题目一般是将flag进行加密,给出密文c以及其他一些解题需要的信息,需要克服重重难关解密密文c,得到flag(即明文m),一般有下列题型:

1已知p、q、e,求d

求d脚本:get-d.py//rsatool.py(需gmpy模块)

例:

在一次RSA密钥对生成中,假设p=473398607161,q=4511911,e=17,求解d。

代码:

import gmpy2

p = gmpy2.mpz(473398607161)

q = gmpy2.mpz(4511491)

e = gmpy2.mpz(17)

phi = (p - 1) * (q - 1)

d = gmpy2.invert(e, phi)

print d

2已知p、q、e、密文c,求明文m

(1)求d脚本

(2)m=pow(c,d,n)

3已知n、e、密文c,求明文m

(1)分解n

a)yafu.com(https://sourceforge.net/projects/yafu/)

命令行运行 ./yafu-x64.exe,输入:factor(920139713) ,回车即可:

b) http://factordb.com

c) http://www.atool.org/quality_factor.php

(2)求d脚本

(3)m=pow(c,d,n)

例:http://ctf5.shiyanbar.com/crypto/RSAROLL.txt

题目给出了RSA加密之后的密文c、以及加密所用到的e、n的值,求解明文m。

分解n,得到p,q分别为18443,49891,后续脚本如下:

4已知public key,密文c,求明文m

(1)分解public key:

a) public.pem/public.pub文件

i. getn-e.py(RSA模块)

from Crypto.PublicKey import RSA

public = RSA.importKey(open('normal.pub').read())

n = long(public.n)

e = long(public.e)

print n

print e

ii. openssl:

pem/pub文件可以直接使用openssl提取,主要方法如

openssl rsautl -encrypt -in FLAG -inkey public.pem -pubin -out flag.enc openssl rsa -pubin -text -modulus -in warmup -in public.pem

或:

openssl rsa -inform PEM -in normal.pub -noout -modulus -text -pubin

n可以通过factorDB 或者yafu.exe分解得到p

b)public.pcap/public.ppc文件

i. pcap文件:

需要用wireshark等工具分析,根据流量包的通信信息,提取出所有解题需要用到的参数,然后进行解密;

ii. PPC文件:

这种模式是上述pcap文件的交互版,通常会给一个端口进行一些crypto的交互,参数会在交互中给出。

(2)github

a) https://github.com/pablocelayes/rsa-wiener-attack

b) https://github.com/D001UM3/CTF-RSA-tool

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 湛卢工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、RSA加密解密涉及元素
  • 2、RSA算法密钥的产生
  • 3、RSA加密解密原理图
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档