上课笔记
哈希函数和随机数
哈希函数
长度
md5 32个字符长度 sha1 128 个字符长度 (常用)
要求:明文小改,hash大变
设计
迭代
- 消息填充为512倍数(最后几位是 消息长度mod 512)
- 等分
- 迭代
第一代 sha1 第二代 sha256 sha512 第三代 keccak
随机数
性质
- 随机性————不存在统计学偏差,完全杂乱的序列(弱随机)[线性同余法可以生成]
- 不可预测性———不能从过去的数列推测出下一个出现的数(强伪随机)
- 不可重现性———除非保存序列本身,否则不能重现相同序列(真随机)
1,2 是伪随机数,但是具有“图灵不可区分”,也就是以假乱真
满足下面的一定满足下面的,满足上面的不一定满足下面的
生成器
软件不可生成真随机数,必须有硬件参与(内部状态相同,所以可以产生相同随机数列) 而且软件生成的随机数在某一时刻必然重复,此为周期
可用鼠标位置,键盘输入间隔,热噪声产生不可重现的随机数(真随机数)
伪随机数生成器
种子 ->(内部状态=有限自动机=一种算法)伪随机数生成器 -> 伪随机数列 同一个种子(key),产生的随机数相同
线性同余法
假设A=3,C=0,M=7,种子等于6,结果: 4 5 1 3 2 6 4 5 1 3 2 6… 周期为6 谨慎选择A,C,M可以产生具有随机性的数列
java和C库都是线性同余法
算法公开,种子保密,知道上一个,就算得出下一个
单向hash函数法
密码法
ANSI X9.17 (美国的标准)
梅森算法
java
- Java.util.random
- Java.security.Secure.Random
攻击
攻击随机数使用环境
随机数池
随机数不是使用时产生的,提前产生放在池中,所以呀,要保护随机数池,一般也会选择攻击随机数池
标准
随机性能监测
- 《中华人民共和国密码行业标准》
- NIST SP800-22(2010-04)
- Tips:网上有软件
- 民政部关于随机数的标准
- MZ/T 093-2017 中国福利彩票系统彩票随机数检验规范