Home
Standard
ISO 21434
R155
R156
Cryptographic
Encrypt-Decrypt
Digest
MAC
Signature
Certificate
Random-Number
Key
Software
AUTOSAR
QNX
Linux
Secure Zone
SHE
HSM
Test
Functional test
Penetration test
Fuzz test
vulneravility scan
About
(+86) 13108958693
Mon-Fri: 17:00 - 22:00 Sat/Sun: 09:00 - 22:00
(+86) 13108958693
Mon-Fri: 17:00 - 22:00 Sat/Sun: 09:00 - 22:00
扫一扫加站长微信
您的鼓励是我最大的动力
微信打赏
2元
4元
10元
微信
支付宝
首页
标准&法规
ISO-21434
R155
R156
密码工具
对称密码
非对称密码
摘要函数
消息认证码
数字签名
数字证书
随机数
密钥
软件安全
AUTOSAR
QNX
Linux
硬件安全
SecureZone
HSM
TEE
攻击手段
Dos 攻击
中间人攻击
...
...
防御措施
最小权限原则
安全启动
安全升级
安全通信
安全诊断
安全日志
防火墙
安全测试
模糊测试
渗透测试
漏洞扫描
关于
扫一扫加站长微信
您的鼓励是我最大的动力
2元
4元
10元
微信
支付宝
PRNG
主页
密码工具
对称密码
对称密码介绍
DES
Triple DES
AES
Rabbit
RC4
异或
非对称密码
非对称密码介绍
RSA
SM2
ECC
摘要函数算法
摘要函数介绍
MD4
MD5
SHA
SM3
CRC
消息认证码
消息认证码介绍
CMAC
HMAC
数字签名
数字签名介绍
RSA-Signature
ECDSA
数字证书
数字证书介绍
X.509
X.509 证书解析
X.509 证书生成
X.509 证书验证
SSL
SSL 证书解析
...
...
...
CSR 生成
随机数
随机数介绍
> PRNG <
TRNG
密钥
密钥介绍
Diffie-Hellman 密钥交换
口令
伪随机数长度:
64bit
128bit
192bit
256bit
格式:
十六进制
二进制
生成 ↓
伪随机数生成器的结构
伪随机数生成器具有“内部状态”,并根据外部输入的“种子”来生成伪随机数列。
伪随机数生成器的内部状态
伪随机数生成器的
内部状态
,是指伪随机数生成器所管理的内存中的数值。当有人对伪随机数生成器发出“给我一个伪随机数”的请求时,伪随机数生成器会根据内存中 的数据(内部状态)进行计算,并将计算的结果作为伪随机数输出。随后,为了响应下一个伪随机数的方法和改变内部状态的方法组合起来,就是伪随机数生成的算法。
伪随机数生成器的种子
为了生成伪随机数,伪随机数生成器需要被称为
种子
的信息,伪随机数的种子时用来对伪随机数生成器的内部状态进行初始化的。
伪随机数的种子是一串随机的比特序列,根据种子就可以生成出专属于自己的伪随机数数列。伪随机数生成器是公开的,但种子是需要自己保密的,这就好像密码算法是公开的, 但密钥只能自己保密。由于种子不可以被攻击者知道,因此不可以使用容易被预测的值,例如不可以用当前时间作为种子。
伪随机数生成器的实现方法
单向散列函数法
使用单向散列函数(如SHA-1)可以编写出能够生成具备不可预测性的伪随机数列(即强伪随机数)的伪随机生成器。
这种伪随机数生成器的工作方式如下。
(1) 用伪随机数的种子初始化内部状态(计数器)。
(2) 用单向散列函数计算计数器的散列值。
(3) 将散列值作为伪随机数输出。
(4) 计数器的值加1。
(5) 根据需要的伪随机数数量重复(2)~(4)的步骤。
假设攻击者获得了这样的伪随机数生成器所生成的过去的伪随机数列,攻击者要预测下一个伪随机数,需要知道计数器的当前值。这里输出的伪随机数列实际上相当于单向散列函 数的散列值。也就是说,要想知道计数器的值,就需要破解单向散列函数的单向性,这是非常困难的,因此攻击者无法预测下一个伪随机数。总而言之,在这种伪随机数生成器中,
单向散列函数的单向性是支撑伪随机数生成器不可预测性的基础
。
密码法
我们可以使用密码来编写能够生成强伪随机数的伪随机数生成器。既可以使用AES等对称密码,也可以使用RSA等公钥密码。
这种伪随机数生成器的工作方式如下。
(1) 初始化内部状态(计数器)。
(2) 用密钥加密计数器的值。
(3) 将密文作为伪随机数输出。
(4) 计数器的值加1。
(5) 根据需要的伪随机数数量重复(2)~(4)的步骤。
同样假设攻击者获得了这样的伪随机数生成器所生成的过去的伪随机数列,攻击者要预测下一个伪随机数,需要知道计数器的当前值。然而,由于之前所输出的伪随机数列相当于密 文,因此要知道计数器的值,就需要破译密码,这是非常困难的,因此攻击者无法预测出下一个伪随机数。总而言之,在这种伪随机数生成器种,
密码的机密性是支撑伪随机数生 成器不可预测性的基础
。
ANSI X9.17
关于用密码实现伪随机数生成器的具体方法,在ANSI X9.17和ANSI X9.31的附录中进行了描述(以下简称“ANSI X9.17方法”),下面我们来介绍一下这种方法。
实现伪随机数生成器的步骤如下。
(1) 初始化内部状态。
(2) 将当前时间加密成掩码。
(3) 对内部状态和掩码求XOR。
(4) 将步骤(3)的结果进行加密。
(5) 将步骤(4)的结果作为伪随机数输出。
(5) 对步骤(4)的结果与掩码求XOR。
(5) 将步骤(6)的结果加密。
(5) 将步骤(7)的结果作为新的内部状态。
(5) 重放步骤(2)~(8)直到得到所需数量的伪随机数。
通过分析上述步骤,我们可以发现,在这种伪随机数生成器中,密码的使用保证了无法根据输出的伪随机数列来推测内部状态。换言之,伪随机数生成器的内部状态是通过密码进行保 护的。
+