RSA数字签名?原来这么好理解!!!

前言

​ 数字签名就是附加在数据单元上的一些数据。而这些数据可以用来确认数据单元的来源(即确认是谁发给你的数据),并且可保护数据单元的完整性(即确保不被其他人对所传数据进行伪造,篡改)。

​ 数字签名算法是依靠公钥加密技术实现的。在公钥体制内,每一个使用者都拥有一对儿公钥和私钥。公钥可以公开发布,而私钥是保存在自己手里。数字签名算法就是依靠用私钥签名,公钥验证签名的方式来保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖行为发生。

​ 本文将通过讲解RSA数字签名的实现方式,向各位读者说明数字签名在现实生活中的重要性。

RSA数字签名详解

一个引人深思的小故事

​ 某天,Bob和Alice在网络上发生了以下对话。

​ Bob: Alice,在吗?我是Bob,我现在有急事,快借我5W,打到XXX账户里

​ Alice:好的,你稍等,我马上给你转过去,记得还我。

​ Bob:当然,没问题,我过几天会还你的。

​ 过几天后…

​ Alice:Bob,还记得几天前你问我借5W吗?我想,你该还钱了。

​ Bob:我没问你借过啊,那是黑客干的事。

​ 我们假设上述对话信息均是通过公钥加密的。那么在这里我们引出了一个很重要的问题,那就是发送信息方Bob在事后可以否认自己曾经发送过的报文。为什么他能够否认自己的行为,把锅甩给黑客呢,这就要引人另一个概念:中间人攻击。

在这里插入图片描述

​ 根据上图所示,公钥密码体制无法抵御中间人攻击,尽管没有出现中间人攻击,Bob想通过使用这套说辞来抵赖,是存在现实的合理性的。

RSA数字签名原理

在这里插入图片描述

上图的步骤我们可以用文字做如下表述:

1. 使用单向散列函数生成Message的消息摘要Digest1
2. 将Digest使用发送者的私钥d签名得到Signature
3. 将Message和Signature合并发送给接收者
4. 接收者收到报文后将Message和Signature分离
5. 使用单向散列函数生成Message的消息摘要Digest2
6. Signature用公钥解密得到Digest1
7. Digest1与Digest2进行比较,若一致,则合法。若不一致,则非法

RSA签名

​ signature = h(m)d mod n

​ h是单项散列函数, m是message

RSA验证签名

​ h(m) == (signature)e mod n

2018 Backdoor Awesome mix1

接下来我们来做一道包含RSA数字签名知识点的CTF题来巩固自己刚才所学的知识

server.py如下:

#!/usr/bin/python3

from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5 as RSAsign
from Crypto.Hash import SHA
import sys
import binascii

def pad(data):
	asn1 = b'3021300906052b0e03021a05000414'
	ans = asn1 + data.encode('ascii')
	n = len(ans)
	return int((b'0001'+b"ff"*(1024//8-n//2-3)+b'00'+ans),16)

flag = b"CTF{cryp70_5ur3_15_w13rd}"

def verify(s,m,n,e):
    if pow(s,e,n) == pad(m):
        return True
    else:
        return False

key = RSA.generate(1024)

message = "super important information for admin only"

h = SHA.new(message.encode("ascii"))

signer = RSAsign.new(key)

signature = signer.sign(h)
s = int(binascii.hexlify(signature),16)

print("Welcome to admin's music portal.")
print("To verify that you are the owner of this service")
print("send the public key which will verify the following signature :")

print("Message:", message)
print("Signature:", signature)

#sys.stdout.flush()

n = eval(input("Enter n:"))
e = eval(input("Enter e:"))
sys.stdout.flush()
try:
	input_key = RSA.construct((n,e))
except ValueError:
	print('Value Error')
	
if verify(s,h.hexdigest(),n,e):
    print(flag)
else:
    print(b"Music is only for admin's eyes.")

sys.stdout.flush()

例题分析

​ 这道题我们需要输入n和e使得pow(s,e,n) == pad(m)相等才能获取flag。服务端向我们提供了Message,Signature和Pad函数的实现方式,为了更好的理清思路,我将通过一张示意图来说明。

在这里插入图片描述

例题破解思路

​ 我们的突破口其实就是在verify函数那里。其中p(m)已知,signature已知,只要寻找满足式子:(signature)e mod n = pad(m) 成立的e和n即可。我们令e=1,那么式子将变成(signature) mod n = pad(m),我们表示为余数形式可得:signature = kn + pad(m) =>signature - pad(m) = kn。我们令k=1,则n = signature - pad(m)。如此,我们就找到了满足上式成立的e,n值。

exp

from pwn import *
from Crypto.Hash import SHA
import binascii

context.log_level = 'debug'
p = process('../home/awesome_mix1.py')
info = p.recv()
info_l = info.decode("ascii").split("\n")
message = info_l[3][9:]
signature = eval(info_l[4][11:])

def pad(data):
	asn1 = b'3021300906052b0e03021a05000414'
	ans = asn1 + data.encode('ascii')
	n = len(ans)
	return int((b'0001'+b"ff"*(1024//8-n//2-3)+b'00'+ans),16)

h = SHA.new(message.encode("ascii"))
m = h.hexdigest()
s = int(binascii.hexlify(signature),16)
e = 1
n = s - pad(m)
p.sendline(str(n).encode("ascii"))
p.sendline(b'1')

print(p.recvall())

p.close()

参考资料

https://blog.csdn.net/HD243608836/article/details/107823405

https://developer.aliyun.com/article/522293

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 使用卷积神经网络伪造RSA数字签名的优势是,可以在较短的时间内生成大量的伪造签名。相较于传统的暴力破解方法,卷积神经网络具有更高的效率和准确性,可以快速地生成高质量的伪造签名,从而对RSA数字签名的安全性构成一定的挑战。然而,这种方法也需要具有大量合法签名数据的支持和大量的计算资源。同时,使用伪造签名进行欺骗和攻击是非法行为,不应被鼓励或支持。 ### 回答2: 卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的神经网络模型。相比传统的神经网络,CNN在图像和语音等领域表现出了很高的性能,并且在许多分类和识别任务上也取得了显著的优势。 使用卷积神经网络伪造RSA数字签名的优势主要体现在以下几个方面: 1. 高效处理图像特征:CNN在处理图像方面表现出色,能够快速且准确地提取特征。RSA数字签名是基于数学原理的密码学算法,通过对图像中的特征进行提取和分析,可以伪造与原始签名相似度很高的签名。 2. 学习复杂的特征表示:CNN具有多层结构,每一层都能够自动学习不同抽象层次的特征表示。这种特性使得CNN能够学习并理解数字签名的细节和规律,从而更好地伪造签名。 3. 数据增强和样本生成:CNN在训练过程中可以进行数据增强和样本生成,从而扩大训练数据集,提高模型的泛化能力。对于伪造RSA数字签名这一任务来说,通过使用卷积神经网络可以利用已有的真实签名数据,生成更多的伪造签名样本,提高伪造签名的准确度和逼真度。 4. 增强安全性测试:使用卷积神经网络伪造RSA数字签名还可以用于增强安全性测试。通过设计并训练一个合理的卷积神经网络,可以模拟和识别伪造签名的特征和模式,从而提高对数字签名的检测和防护能力。 总结来说,使用卷积神经网络伪造RSA数字签名的优势主要体现在其高效处理图像特征、学习复杂特征表示、数据增强和样本生成以及增强安全性测试的能力上。这些优势使得卷积神经网络成为一种强大的工具,可以伪造并测试数字签名的安全性,从而提高密码学算法的研究和发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘉·沐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值