优斗士网站建设引流推广多少钱一个
零、随机数应用
生成盐,用于基于口令的密码
生成密钥,用于加密和认证
生成一次性整数Nonce,防止重放攻击
生成初始化向量IV
构成
种子,真随机数生成器的种子来源于物理现象
内部状态,种子用来初始化内部状态
一、真随机数和伪随机数
1.区别
随机数在安全技术中通常被用于生成随机序列(eg. 秘钥),对于一个随机数的生成而言,是否真正的做到“随机”是最重要的。
真随机数通常来源于硬件随机数生成器,每次生成的随机数都是真正的随机数,但是因为物理因素,生成的时间较慢。比如STM32中提供的RNG硬件外设。
伪随机数通常来源于某个生成算法,每次生成的随机数虽然是随机的,但还是遵循生成算法的规则,优点是生成速度较快。比如C库中提供的rand函数,在相同的种子下,其生成的随机数序列相同,所以称之为伪随机数。
所以一般情况下,有一种比较巧妙的办法:将两者结合起来,先使用真随机数生成种子,然后使用伪随机数生成算法,这样既保证了生成速度,又保证了生成的序列是真正的随机数。
对应到 mbedtls 中,将产生真随机数的模块称为真随机数生成器(TRNG),将产生伪随机数的模块称为伪随机数发生器(PRNG)(也叫做确定性随机数生成器,DRBG),其中伪随机数所使用的种子称为熵源(熵池)。
2.伪随机数生成算法
NIST SP 800-90A规范中描述了三种产生伪随机数的算法:
Hash_DRBG:使用单向散列算法作为伪随机数生成的基础