随机数在服务端应用挺广泛的,经常会使用到,但是大体上都是调用系统函数。有一些的实现就不是很安全,比如那个简单的以时间为种子的随机数~~。
更安全的随机数可以通过硬件来获取,当然这得需要相应的硬件支持。其实,在TLS规范中已经提供了一种不错的伪随机生成函数,具体内容可以参考 tls1.2。
PRF算法在TLS协议中的运用
TLS 协议中:
(1)
当计算主密钥(master secret)时
sec 是 “master secret” + client_random + server_random
seed 是 pre_master_secret
输出是 master secret,48字节
(2)
当计算对称密钥(key material)时
sec 是 “key expansion” + server_random + client_random
seed 是 master secret
输出是key block,输出字节长度根据加密算法而定。
key block中的各个部分,就是实际加解密使用的key。
(3)
当计算finished时
sec 是 “client/server finished”
seed 是握手的hash值
输出是12字节的值。