PRF 偽隨機數函式

2021-08-31 01:42:27 字數 761 閱讀 6563

看到自己曾經寫過乙個隨機數的文章,當然內容沒什麼太有意思的東西。今天想著好像也沒什麼可寫的,那麼就寫個已經存在的prf吧。

隨機數在服務端應用挺廣泛的,經常會使用到,但是大體上都是呼叫系統函式。有一些的實現就不是很安全,比如那個簡單的以時間為種子的隨機數~~。

更安全的隨機數可以通過硬體來獲取,當然這得需要相應的硬體支援。其實,在tls規範中已經提供了一種不錯的偽隨機生成函式,具體內容可以參考 tls1.2。

當然,估計大家也不會看~。這裡直接拿過來。

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!!!

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...

隨機數生成 偽隨機數和真隨機數

c語言隨機數的生成,很隨機,又不隨機,比如像下面的程式 c語言生成隨機數的函式在stdlib.h庫中 include includeint main return 0 上面的 經過執行生成了 41 18467 6334 26500但是無論執行多好遍結果都是一樣的,隨機數並不隨機。這是因為rand 函...

隨機數 科普 真隨機數和偽隨機數

位元幣使用者很喜歡討論 非對稱加密 橢圓曲線 量子計算機 這類高深莫測的話題,然後再以一種非常莫名其妙的方式把幣弄丟,比如說 隨機 隨機很重要,對於位元幣這種密碼學電子貨幣來說,尤其重要。可惜社群內對於隨機的討論並不多,導致很多人缺乏正確的認識,因此,我們今天就和大家聊聊隨機。說到隨機,有兩個必須要...