PRF(伪随机数函数)

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_(secret, label + seed)

说明
	+  代表连接
	A() 表示如下
         A(0) = seed
         A(i) = HMAC_hash(secret, A(i-1))
    hash指的是单向hash函数,如sha1,sha256等等。
    以sha256为例,一次HMAC产生的数据为32bytes。因此,如果想得到80bytes数据,
    需要i=3,这样会得到96bytes数据,将后16bytes丢弃即可。
    label必须是ASCII字符串,不包含结尾的'\0'。
    
      

enjoy!!!

你可能感兴趣的:(Algorithms)