密码学复习题

流量分析

一、有流量数据文件123.pcapng记录了本地机器访问10.3.40.20的web服务的相关报文和访问期间浏览器SSLKEY日志文件key.log。

1. 所访问的https web服务的,服务器域名是什么?

9a2e481edbd044198bafcb0b866fdf3e.png48b18bcf954a4cb4bc76f39b77626fbd.png

0d573d15eeab473ab4b29bdee029887f.png

2.通信双方使用什么TLS套件进行通信?解释套件中使用了哪些密码学算法及算法的作用?

d73ebc6f417d43bca56c6b9b23feb697.png

3.通信双方传递了某一秘密信息,对该信息进行破解?

addac106e99d47399e2d8abb0840a698.png

39dc966881ba4057a2a758924f1b3529.png

注册码破解

二、某软件公司发布了其研发团队开发的程序clock.exe,该程序需要合法的注册码激活后方可使用。张三通过对clock.exe的数据包逆向分析,发现该程序校验注册码的大致逻辑如下:

1.将注册码分为两部分,前四个字符为第一部分message,剩下的字符为第二部分signature;

2.利用打包于clock.exe中的公钥文件public_key.pem(已解析得到)对signature和message的MD5值作签名验证,如若验证成功则激活软件。

张三通过分析编写出了正确的注册码校验python函数:

import rsa

import base64


def verify_registration_code(registration_code):

    message = registration_code[:4]

    signature = base64.b64decode(registration_code[4:])

    public_key = rsa.PublicKey.load_pkcs1(open(PUBLIC_KEY_FILE, 'rb').read())
   

    try:

        rsa.verify(message.encode(), signature, public_key)

        return True

    except rsa.pkcs1.VerificationError:

        return False

请根据如上逻辑和public_key.pem公钥文件,利用python编写一段生成clock.exe合法验证码的代码。请写明答题思路并记录过程(截图)。

获取n和e

import rsa

# 加载公钥
public_key = rsa.PublicKey.load_pkcs1(open('public_key.pem').read().encode())

# 获取n和e的值
n = public_key.n
e = public_key.e

# 输出n和e的值
print("n:", n)
print("e:", e)

4d8c6b719b5046548c9e72fbf8e7fb42.png

网站用解出n解出和p和q

factordb.com

574e0acf936a4696af1f346e69e9f059.png

使用p,q,e算出d

4c50615d6e1e47c0826ba349926d6f4b.png

import rsa

def calculate_d(p, q, e):
    # 计算phi(n)
    phi_n = (p - 1) * (q - 1)

    # 使用欧几里得扩展算法计算d
    d = rsa.common.inverse(e, phi_n)

    return d

# 知道的参数
p = 436923383565743374298000250129973346427945296845627
q = 3024355106840859446030848187743574466020673260691623060399
e = 65537

# 计算d
d = calculate_d(p, q, e)

print("d:", d)

用n,e,d,p,q制作私钥

import rsa

# 创建一个新的密钥对
n=1321411466385243615006840994926043033176613177565376352971033317350340707411782228724443787775751066800025173
e=65537
d=1210213452482949971160422512434974975011469492711427711524160610900836126583272862911922490758294996204655561
p=436923383565743374298000250129973346427945296845627
q=3024355106840859446030848187743574466020673260691623060399

private_key = rsa.PrivateKey(n,e,d,p,q)

# 将私钥保存到文件
with open('private_key.pem', 'wb') as file:
    file.write(private_key.save_pkcs1())

 

观察校验代码知道是注册码格式是4个字符进行MD5hash之后签名,用私钥构造注册码

import rsa
import base64

message = "abcd"
privkey = rsa.PrivateKey.load_pkcs1(open("private_key.pem").read())
signature = rsa.sign(message.encode(), privkey, "MD5")
print(message+base64.b64encode(signature).decode())


e4e01f19be334e57ba10e1cb3d4c90d3.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值