PyCrypto密码学库源码解析(三)PublicKey模块概览

密码技术实践——Python Crypto库源码解析(三)PublicKey模块概览

* 版权声明 *
引用请注明出处,转载请联系: h0.1c@foxmail.com


本文将探究Crypto.PublicKey模块,这个模块包括了公钥加密算法RSA、签名算法DSA和ElGamal算法的参数构造、加解密、签名验签的实现。
包含的主要内容有:

  • RSA算法加密、解密、签名、验签的实现方法
  • DSA算法及其参数要求
  • DSA算法签名、验签的实现方法
  • Crypto.PublicKey的模块结构


1 PublicKey模块文件列表

  • _ init _ .py
  • _DSA.py (legacy of DSA)
  • _RSA.py (legacy of RSA)
  • _slowmath.py
  • DSA.py
  • ElGamal.py
  • pubkey.py
  • RSA.py

    从这个文件结构可以大致了解,PublicKey模块主要包含以下几种算法:

  • RSA,包括加解密、签名和验证
  • DSA, 签名和验证
  • ElGamal, 包括加解密、签名和验证

,而slowmath是用于计算算法中的数学问题的。

RSA算法在本系列第一篇文章中已经描述,点击连接可以跳转,这里不再赘述。
而DSA算法,作为一个以RSA和ElGamal为基础的数字签名算法,被美国NIST作为DSS (Digital Signature Standard, 数字签名标准),其问题复杂性是基于整数有限域离散对数问题,这一点和ElGamal一样。

2 PublicKey.pubkey

pubkey中定义了一个类:

class pubkey

内部基本是虚函数,例如

 def encrypt(self, plaintext, K)
 def decrypt(self, ciphertext)
 def sign(self, M, K)
 def verify (self, M, signature)
 def validate (self, M, signature)

等,都留待不同算法分别继承并且实现,可以见得,PublicKey.RSA中的class _RSAobj、PublicKey.DSA中的class _DSAobj、PublicKey.ElGamal中的class ElGamalobj都是由pubkey继承而来,并且分别在内部实现了自身的各种算法。

3 PublicKey.RSA / PublicKey._RSA

先来说PublicKey._RSA这个legacy模块,这个模块中的内容很简单,除了上一篇文章中提到的参数生成模块generate_py(点这里跳转到该函数解析)之外,还有一个同样继承自pubkey的类class RSAobj,很明显,这个类已经被弃用了。

PublicKey.RSA中,就是上文提到的class _RSAobj和上一篇文章提到的class RSAImplementation。RSAImplementation主要负责导入密钥和生成密钥,而_RSAobj主要负责实现算法的各项功能(加密、签名等)。

但是实际上仔细查看_RSAobj,其实际上并没有直接实现算法的功能,以加密为例:

 def encrypt(self, plaintext, K):
       #中间一大段全是说明,没有代码
        return pubkey.pubkey.encrypt(self, plaintext, K)

问题又回到pubkey类关于功能的实现了,查看pubkey对应的部分:

def<
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值