PyCrypto密码学库源码解析(一)随机数和大素数生成

本文深入解析Python Crypto库的PyCrypto中用于生成随机数和符合RSA要求的大素数的Util.number模块。介绍了素数概念、素性检测(特别是Miller-Rabin算法)、随机数分类以及RSA算法对素数的要求。详细阐述了Number模块中的函数,如获取随机数、素性检测、获取素数和强素数的方法,以及代码实现中的关键细节。
摘要由CSDN通过智能技术生成

Python Crypto库源码解析(一) 随机数和大素数的生成

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

本系列文章(Python Crypto库源码解析)主要讲解Python的密码学工具库PyCrypto的源码中各个技术实现的原理和细节。
本系列文章的编写力图用最少的语言解释清楚要解释的事情,不涉及复杂的数学原理,旨在讲清楚在密码技术实现的过程中一些教科书上不会提到的一些细节问题。
使用的代码来自于pycrypto库,这个库包含了当前绝大多数主流的密码学算法(包括加解密、Hash、签名等),在如下网址可以获取更多信息: https://pythonhosted.org/pycrypto/


本文(随机数和大素数的生成 )主要说明该库中的Util.number模块,也就是主要负责生成随机数/符合RSA要求的素数的模块。


0.本文需要用到的背景知识

如果学习过密码学原理相关课程的朋友可以跳过这部分,为了方便没有经过专业密码学训练或者忘得差不多想快速回忆起来的朋友,在正文开始前,需要对一下知识进行简单的梳理。

0.1 素数的概念

素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数。

0.2 素性检测

素性检测是检验一个给定的整数是否为素数的测试。这样的测试通常并不能同时有效和快速检测出该数是否为素数。
例如实际应用中,通常会使用Monte Carlo方法来完成,Monte Carlo方法是基于随机数的计算方法的统称,具有多项式时间复杂度。其中具有代表性的是Solovay-Strassen算法(1974年)和Miller-Rabin算法。而Solovay-Strassen算法把合数误判为素数的概率为1/2,Miller-Rabin算法将合数误判为素数的概率是1/4。
印度科技学院的Agrawal,Kayal和Saxena提出了一个确定性算法AKS算法(2002年),该算法使用素数的充要条件检测,并证明算法可在多项式时间内完成。

0.3 Miller Rabin 算法

算法描述

Miller-Rabin( n n ):
n 1 写成 n1=2km n − 1 = 2 k ∗ m 的形式,其中m是一个奇数
随机选择整数 a a ,满足 1 a n 1
b=ammodn b = a m m o d n
if b

  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值