PRF(伪随机数函数)
序
看到自己曾经写过一个随机数的文章,当然内容没什么太有意思的东西。今天想着好像也没什么可写的,那么就写个已经存在的PRF吧。
随机数在服务端应用挺广泛的,经常会使用到,但是大体上都是调用系统函数。有一些的实现就不是很安全,比如那个简单的以时间为种子的随机数~~。
更安全的随机数可以通过硬件来获取,当然这得需要相应的硬件支持。其实,在TLS规范中已经提供了一种不错的伪随机生成函数,具体内容可以参考 tls1.2。
当然,估计大家也不会看~。这里直接拿过来。
PRF
P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +HMAC_hash(secret, A(2) + seed) +HMAC_hash(secret, A(3) + seed) + ...PRF(secret, label, seed) = P_<hash>(secret, label + seed)说明+ 代表连接A() 表示如下A(0) = seedA(i) = HMAC_hash(secret, A(i-1))hash指的是单向hash函数,如sha1,sha256等等。以sha256为例,一次HMAC产生的数据为32bytes。因此,如果想得到80bytes数据,需要i=3,这样会得到96bytes数据,将后16bytes丢弃即可。label必须是ASCII字符串,不包含结尾的'\0'。
enjoy!!!