随机数在服务端应用挺广泛的,经常会使用到,但是大体上都是调用系统函数。有一些的实现就不是很安全,比如那个简单的以时间为种子的随机数~~。

    更安全的随机数可以通过硬件来获取,当然这得需要相应的硬件支持。其实,在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字节的值。