RSA加解密算法数学基础及python实现

RSA加解密算法数学基础及python实现

步骤一
AliceBob 协商会话密钥。采用公钥密码体系,通过自选密码库实现密钥协商,session key 长度 1024 bits.
注:密钥协商所需公钥与私钥,采用两种方式生成:

1、密码库实现;RSA 体系至少为 2048 级,ECC 至少为 512 级,比较 12 的时空复杂度。

在对称密码体制中,密钥分发过程复杂,代价高;密钥量增大造成密钥管理困难;保密通信系统的开放性差;如果收发双方素不相识,或没有可靠的密钥传递渠道,则无法通信;当用对称密码算法实现数字签名时,由于通信双方拥有相同的密钥,使得接收方可以伪造数字签名,发送方可以抵赖发送过的消息。由于上述的一系列原因,使得对称密码体制难以在保证通信的安全性、可靠性。公钥密码是由 Diffie 和 Hellman 在 1976 年首次提出,每个用户都有一对选定的密钥,私钥保密,公钥可以公开。目前多采用混合体制:用对称体制加密数据,用公钥密码体制加密对称密码体制短期所需的一个密钥来进行分发,既保证了效率,又提高了安全性。

pycrypto库不是Python的内置模块,pycrypto模块是一个实现了各种算法和协议的加密模块的结合,提供了各种加密方式对应的多种加密算法的实现,包括单向加密、对称加密以及公钥加密和随机数操作。但在包导入过程中发现这个库已经停止更新了,如果直接导入这个库,在运行程序时可能会出现一些错误。这里有一个pycrypto库的衍生版本,PyCryptodome库,是一个强大的加密算法库,可以实现现代密码学中常见的一些加密、签名等算法,并在此基础上增加了一些协议。其上手简单,各个算法之间独立性较强,且结构封装一致,对于初学者阅读源码及快速上手是一个比较好的选择。PyCryptodome库主要模块包含有单向加密、对称加密、非对称加密和签名、流密码算法。该库里还增加了SecretShare协议。

下载并导入该库

pip install pycryptodome

但是这里要去本地库文件中进行一下名字的修改,首先找到该库的安装目录(鼠标停留在包名上会自动显示安装路径)
在这里插入图片描述
找到其中的crypto文件夹,将名字改为Crypto,之后编译环境中的包就显示成功导入可以使用。
下面是使用 pycryptodome 库生成 RSA 公私钥对:

from Crypto.PublicKey import RSA


def generate_key(bits):
    return RSA.generate(bits)


if __name__ == "__main__":
    key = generate_key(2048)

    # 生成私钥文件
    sk = key.export_key()
    with open('master-private.pem', 'wb') as f:
        f.write(sk)

    # 生成公钥文件
    pk = key.publickey().export_key()
    with open('master-public.pem', 'wb') as f:
        f.write(pk)

2、不采用密码库或大数库;
使用python实现RSA加密算法,先简单的对其进行说明:

①RSA密钥生成
选择两个随机的大素数pq,并计算n=pqφ(n)=(p-1)(q-1)
选择一个随机数e1<e<φ(n),满足gcd(e,φ(n))=1,并计算ed ≡ 1 (mod φ(n))
此时得出,公钥为(e, n),私钥为d
这里关于e的选择,理论计算是产生一系列的随机数,检验每一个是否和φ(n)互素,直到找到了一个这样的数为止。在实践中,为了提高RSA的加密速度,通常用的三个e值为3765537X.509中建议采用65537PEM建议采用3PKCS#1中建议采用365537

②RSA加密
加密公式为c≡ m^e(mod n)m明文需要满足0≤m<n的条件,所以在加密前要对明文比特串分组,然后对每一个分组进行加密,最后得到所有分组的密文,这些密文构成的序列即明文加密的结果。

③RSA解密
解密公式为m≡ c^d(mod n),每组的密文c要求同样需满足0≤c<n

这里选取小数据对上述的 RSA 算法进行说明:
产生密钥:Alice 选取素数 p = 2357 和 q = 2551,计算 n = pq = 6012707,𝜑(n) = (p −1)(q −1) = 6007800
Alice选取 e = 3674911,并运用欧几里德算法求出 d = 422191,使得 ed ≡ 1 (mod 𝜑(n))
Alice的公钥是 n = 6012707, e = 6374911 ,私钥 d = 422191
加密过程:加密信息为 m = 5234673,发送者 Bob 计算

c ≡ m^e (mod n)5234673^6374911 (mod 6012707
  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值