【密码学】一文读懂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()
    }
}


相关文章
|
7月前
|
算法 安全 关系型数据库
密码学系列之七:数字签名
密码学系列之七:数字签名
|
存储 算法 安全
【密码学】非对称加密算法 - ECDH
由于 ECC 密钥具有很短的长度,所以运算速度比较快。到目前为止,对于 ECC 进行逆操作还是很难的,数学上证明不可破解,ECC 算法的优势就是性能和安全性高。实际应用可以结合其他的公开密钥算法形成更快、更安全的公开密钥算法,比如结合 DH 密钥形成 ECDH 密钥协商算法,结合数字签名 DSA 算法组成 ECDSA 数字签名算法。ECDH算法常常用来进行密钥的协商,协商好密钥后,用来解决上面的密钥分配问题,将对称加密的密钥安全的传到对端设备。算法加密/解密数字签名密钥交换RSA✅✅✅❌。
3549 0
|
Rust 算法 安全
【密码学】一文读懂HMAC
本文将来聊一聊基于哈希函数的消息认证码,在此之前,先来科普一下什么是 「消息认证码」 (MAC), 先来看一个简单的栗子
1744 0
【密码学】一文读懂HMAC
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂XTEA加密
本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。
1292 0
【密码学】一文读懂XTEA加密
|
算法 安全 数据安全/隐私保护
常见几种加密算法的Python实现
常见几种加密算法的Python实现
186 0
|
并行计算 算法 搜索推荐
【密码学】 对称加密算法
在密码学中,加密算法按照实现方式可分为对称加密算法和非对称加密算法。对称加密算法指的是加密方和解密方使用相同的密钥进行加密和解密,即双方使用共同的密钥。在对称加密算法使用的过程中,数据发送方将明文数据通过密钥进行加密生成密文数据,将密文数据发送给接收方,接收方收到密文数据后,通过密钥进行解密,将其恢复成明文数据。这就要求接收方要首先知道密钥,这需要发送方先将密钥通过安全方式发给接收方,通常会使用非对称加密例如ECDH算法来传输密钥(非对称密钥会在下章讲解)。
366 0
【密码学】 对称加密算法
|
算法 网络安全 数据安全/隐私保护
白话解释 对称加密算法 VS 非对称加密算法
对称加密算法(Symmetric-key algorithm)和非对称加密算法(asymmetric key encryption algorithm)只不过就是密码学(encryption)中的两种解密算法罢了,什么是算法,你就可以理解成为是一种规则吧,这种规则可以将信息从一种形式转变成另一种形式,不懂没关系,继续往下看。
211 0
|
算法 数据安全/隐私保护
【密码学】一文读懂SHA-1
SHA-1(Secure Hash Algorithm 1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦资料处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
1243 1
【密码学】一文读懂SHA-1
|
数据安全/隐私保护
【密码学】一文读懂基于加密的随机数生成器
咱们接着来说小明的故事,上回说到,小明因为设计的日记本由于用了不安全的随机数生成器,成功的又让小红给看到了日记的内容,这时候,小明决定发奋图强,努力的补习了一下相关知识,这时候,小明刚学了加密的相关知识,然后小明心想,这能不能基于加密的相关知识来设计一个随机数生成器呢,这由于密钥在我手里面,然后我每次自增计数器,没有密钥,其他任何人也没办法拿到原始的计数器内容,这加密出来的东西,感觉随机度也挺高的,于是有了今天的这篇文章,基于加密的随机数生成器。
【密码学】一文读懂基于加密的随机数生成器
|
Rust 算法 安全
【密码学】一文读懂RSA
本文来聊聊RSA, 这是一个非对称密码,和之前所提到的AES与DES不同的是,这个加密方式有两个密钥,一个是公钥,一个是私钥,公钥用来加密,私钥用来解密。相比于对称密码,非对称密码大多基于某个数学难题,比如接下来要谈论的RSA即基于大整数分解的困难性来的,因此为了说明白这个加密算法,首先要先补充"一"点点数学知识。