网络安全原理实验 3——RSA 签名实现

【原理】

RSA 加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。

RSA 签名的过程如下:

(1)A 生成一对密钥(公钥和私钥),私钥不公开,A 自己保留。公钥为公开的,任何人可以获取。

(2)A 用自己的私钥对消息加签,形成签名,并将加签的消息和消息本身一起传递给 B。

(3)B 收到消息后,在获取 A 的公钥进行验签,如果验签出来的内容与消息本身一致,证明消息是 A 回复的。

在这个过程中,只有 2 次传递过程,第一次是 A 传递加签的消息和消息本身给 B,第二次是 B 获取 A 的公钥,即使都被敌方截获,也没有危险性,因为只有 A 的私钥才能对消息进行签名,即使知道了消息内容,也无法伪造带签名的回复给 B,防止了消息内容的篡改。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def func(m, e, n):
temp = 1
while e > 0:
while temp < n and e >= 1:
temp = temp * m
e = e - 1
temp = temp % n
return temp


def main():
n = 55
d = 3 # d为私公钥13
e = 27 # e为私钥
m = int(input("请输入待签名的消息:\n")) # 将输入转换为整数
ms = func(m, e, n)
print("签名后的消息:", ms)
vms = func(ms, d, n)
print("验证签名后的消息:", vms)
if vms == m:
print("签名验证成功!")
return 0


if __name__ == "__main__":
main()

实验截图

image-20240410104552422