【密码学】一文读懂RSA的随机数生成器

简介: 本文接着来聊一个比较轻松的内容,再来说一个随机数生成器,对于这个随机数生成器呢,这里和之前讲到过的BBS有一些类似,直接来看具体的内容蛤。

【密码学】一文读懂RSA的随机数生成器


%}LAL4H8}@USBB83LJ1]KT0.jpgRSA随机数生成器

本文接着来聊一个比较轻松的内容,再来说一个随机数生成器,对于这个随机数生成器呢,这里和之前讲到过的BBS有一些类似,直接来看具体的内容蛤。

这个随机数生成器的结构是真的简单,如果有实现好的大数运算的语言,基本上就只有一行核心的代码,相信各位读者看完我的代码实现之后,就会明白了。


算法过程

设p、q为两个k/2 bit长的素数,计算 ,随机选择一个b使得b满足 ,其中n和b是公开的,p和q是保密的。

在这里我们简单的来回顾一下rsa加密的过程,首选选取两个大素数p和q,然后计算 ,之后选取e满足 其中(n, e)作为公钥,这一块过程和RSA加密算法非常相似,因此呢,这个随机数生成器的名字就是这么来的。

好了,回忆完成RSA的加密算法,我们回过头开看随机数是怎样生成的,首先在 选择一个k比特长度的数字 作为种子。对于 定义如下的递推公式:

image.png

然后定义随机比特生成的函数:

image.png

其中:

image.png

这里,整个随机数生成器的过程就完成了,最后来一张简单的处理过程图吧。

image.gifRSA随机数生成器


代码实现

这里回归一下,因为算法比较简单,咱们还是用两种语言来实现

package rsa
import "math/big"
type RSAPRNG struct {
  p  big.Int
  q  big.Int
  b  big.Int
  s0 big.Int
  n  big.Int
}
func New(p, q, b, s0 big.Int) *RSAPRNG {
  n := new(big.Int)
  n.Mul(&p, &q)
  return &RSAPRNG{p, q, b, s0, *n}
}
func (r *RSAPRNG) PRNG() big.Int {
  r.s0.Exp(&r.s0, &r.b, &r.n)
  return r.s0
}

回归我的老本行语言,咱们再来rust来实现一下

use num_bigint::BigUint;
struct RSAPRNG {
    p: BigUint,
    q: BigUint,
    b: BigUint,
    s0: BigUint,
    n: BigUint,
}
impl RSAPRNG {
    pub fn new(p: &BigUint, q: &BigUint, b: &BigUint, s0: &BigUint) -> RSAPRNG {
        let n = p * q;
        RSAPRNG { p: p.clone(), q: q.clone(), b: b.clone(), s0: s0.clone(), n }
    }
    pub fn next(&mut self) -> BigUint {
        self.s0 = self.s0.modpow(&self.b, &self.n);
        self.s0.clone()
    }
}


相关文章
|
Rust 算法 安全
【密码学】一文读懂HMAC
本文将来聊一聊基于哈希函数的消息认证码,在此之前,先来科普一下什么是 「消息认证码」 (MAC), 先来看一个简单的栗子
1672 0
【密码学】一文读懂HMAC
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂XTEA加密
本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。
1268 0
【密码学】一文读懂XTEA加密
|
6月前
|
算法 安全 网络安全
一文搞懂常见的加密算法
一文搞懂常见的加密算法
814 0
|
算法 数据安全/隐私保护
【密码学】一文读懂SHA-1
SHA-1(Secure Hash Algorithm 1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦资料处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
1210 1
【密码学】一文读懂SHA-1
|
数据安全/隐私保护
【密码学】一文读懂基于加密的随机数生成器
咱们接着来说小明的故事,上回说到,小明因为设计的日记本由于用了不安全的随机数生成器,成功的又让小红给看到了日记的内容,这时候,小明决定发奋图强,努力的补习了一下相关知识,这时候,小明刚学了加密的相关知识,然后小明心想,这能不能基于加密的相关知识来设计一个随机数生成器呢,这由于密钥在我手里面,然后我每次自增计数器,没有密钥,其他任何人也没办法拿到原始的计数器内容,这加密出来的东西,感觉随机度也挺高的,于是有了今天的这篇文章,基于加密的随机数生成器。
【密码学】一文读懂基于加密的随机数生成器
|
算法 小程序
【密码学】一文读懂基于离散对数的随机数生成器
是的,我又来水文章了,本文带着大家来了解一个新的随机数生成器,基于离散对数的随机数生成器,之前已经带着大家了解过了两个类似的随机数生成器了,其中一个是BBS随机数生成器,另一个是基于RSA的随机数生成器,有兴趣的读者可以自行回顾一下之前的文章哈。
【密码学】一文读懂基于离散对数的随机数生成器
|
Rust 算法 安全
【密码学】一文读懂RSA
本文来聊聊RSA, 这是一个非对称密码,和之前所提到的AES与DES不同的是,这个加密方式有两个密钥,一个是公钥,一个是私钥,公钥用来加密,私钥用来解密。相比于对称密码,非对称密码大多基于某个数学难题,比如接下来要谈论的RSA即基于大整数分解的困难性来的,因此为了说明白这个加密算法,首先要先补充"一"点点数学知识。
|
Rust 算法 安全
【密码学】一文读懂随机数
本文简单的介绍了一下随机数的概念,然后给出了一个非密码学安全的随机数生成器--线性同余法,一定注意,这个方法不要用在密码学相关用途蛤。
【密码学】一文读懂随机数
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂AES
AES加密算法 本文将不会讲述过多有关AES的数学知识, 如果有兴趣的可以自行了解。
1741 0
【密码学】一文读懂AES
|
算法 Serverless 数据安全/隐私保护
【密码学】一文读懂基于散列函数的伪随机数生成器
上回说到,小明制作了一个特殊的日记本,在每次输入正确的密码之后,都会随机的生成下一个密码,但是呢,由于小明设计随机数算法选的不太好,这让小红给钻了空子,这时候小明心里别提多伤感了,这。。。这我的日记不就相当于直接公开了吗,这是要社死的节奏啊,不行不行,我要换一个新的方法,这时候,小明刚好学完了密码学当中的散列函数,心想,这我要是直接用散列函数的输出作为随机密码的生成,这不就成了,哈哈,这时候小明心里别提有多美了,于是乎,小明设计出了如下的随机数生成算法。
【密码学】一文读懂基于散列函数的伪随机数生成器