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


目录
打赏
0
1
1
0
19
分享
相关文章
【密码学】手摸手带你手算AES
本文带着大家手动计算了一下完整的简化版AES的整个流程,其实主要都参考了密码学与网络安全这本书,大部分的公式都是从这本书上来的,我是真的喜欢这个例子,麻雀虽小,五脏俱全,用来学习AES的入门感觉非常的合适,如果能够完整的自己手算下来这个例子,然后再去看完整版的AES算法,会简单非常多,主要就是规模扩大了一下,核心的流程还是上面这一套。最后,感谢能看到这里的读者,如果本文对大佬们理解AES有一点点的帮助,也不枉我手动敲了这么多的公式和矩阵了。
1124 0
【密码学】手摸手带你手算AES
【密码学】一文读懂BBS
之前聊过不少非密码学安全的伪随机数生成算法,这次呢,咱们来聊一个密码学安全的伪随机数生成器 「BBS」 ,这个是三位设计者的首字母: Blum、Blum 和 Shub。
【密码学】一文读懂BBS
【密码学】一文读懂HMAC
本文将来聊一聊基于哈希函数的消息认证码,在此之前,先来科普一下什么是 「消息认证码」 (MAC), 先来看一个简单的栗子
2076 0
【密码学】一文读懂HMAC
【密码学】一文读懂HKDF
我这又来水一篇文章,来聊一下HKDF(基于HMAC的密钥导出函数)。密钥派生函数是密钥管理的组成部分,他的目标是通过一些初始的数据派生出来密码学安全的随机密钥。
3411 1
【密码学】一文读懂HKDF
【密码学】一文读懂ChaCha20
好久没写新的加密算法的原理了, 这次所选取的加密算法结构比较简单, 一起来看一下吧。
9028 1
【密码学】一文读懂ChaCha20
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
adb 查看安卓手机 CPU 类型(armeabi、armeabi-v7a、arm64-v8a ...)
2240 0
ZeroShell防火墙存在远程命令执行漏洞(CVE-2019-12725)
zeroshell防火墙存在远程命令执行漏洞,攻击者可通过特定URL链接对目标进行攻击!!!
2081 1
【密码学】一文读懂线性反馈移位寄存器
在正式介绍线性反馈移位寄存器(LFSR)之前,先来看一个小故事,相传在遥远的古代,住着4个奇怪的人。
1848 0
【密码学】一文读懂线性反馈移位寄存器
【密码学】一文读懂CMAC
介于上一篇文章比较水,然后这个和上一篇也比较相似,CMAC是为了解决DAA当中安全性不足的问题而出现的,这个算法一共有三个密钥,K, K1, K2, 其中K1和K2可以由K导出,接下来就来一起看一下CMAC的具体过程吧,这一篇文章其实也不长。
4429 0
【密码学】一文读懂CMAC
【密码学】一文读懂SHAMIR门限方案
【密码学】一文读懂SHAMIR门限方案
1663 0
【密码学】一文读懂SHAMIR门限方案
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问