密碼學原理 偽隨機數的產生

2021-10-09 22:53:14 字數 1256 閱讀 8820

大量的基於密碼學的網路安全演算法和協議都使用二進位制隨機數:

對隨機數序列產生提出的兩個要求:隨機性和不可**性。

tpng為真隨機數發生器,prng為偽隨機數發生器,prf為偽隨機函式。

真隨機數發生器把乙個很隨機的源作為輸入,這個源稱為熵源,熵源是從計算機的物理環境抽取的,可能包括鍵盤敲擊時間模式,磁碟的電活動,滑鼠移動,系統時間的瞬時值等。源或源的組合作為演算法的輸入,產生隨機的二元輸出,也許僅僅是把模擬訊號源轉換為二元輸出。

prng取乙個固定值作為種子,作為輸入,用乙個確定性的演算法產生位輸出序列,不限長位流。輸入位流僅僅由輸入值決定,所以知道演算法和種子的攻擊者可以重現整個位流。不限長位流同樣用於對稱流密碼的輸入。

prf用於會產生固定長度的偽隨機位串,對稱加密金鑰和時變值就是種子。通常prf的輸入為種子和上下文相關的特定值(如id)。

當prng或者prf用於密碼學應用時,基本要求就是不知道種子的攻擊者不能決定偽隨機數。對prng和prf輸出保密性的要求,就是要求隨機性、不可**性和種子特定性。

隨機性:對prng來說就是要生成的位流儘管是確定性的,但是顯示是隨機的。沒有 單個的測試可以判斷乙個prng生成的資料具有隨機性,只能進行一系列測試,根據nist sp800-22規定,這些測試應該滿足:

下列有三種測試:

不可**性:隨機數字流具有兩種不可**性

用於隨機性測試的測試集也提供不可**性測試。

種子的要求:作為種子必須是安全的,prng是確定性演算法,如果攻擊者能推導出種子,那麼就能決定輸出。

一種產生prng的方式如圖,種子由trng產生。

trng可以產生真隨機數,但是並沒有直接用trng,而是用peng,這是為什麼呢?

在流密碼中,傳送者需要生成與明文等長的金鑰流,並把金鑰流和密文安全傳送給接收者,這是不現實的。如果是用prng的話,傳送者只需要設法將金鑰安全的傳送給接收者即可。

在prf中,也希望用trng產生種子,然後用prf的輸出作為金鑰。trng可能會產生不平衡的二元序列,prf具有使trng的輸出更隨機化的效果,消除不平衡性。

此外,用於產生真隨機數的機制在速率上可能跟不上需要。

線性同餘發生器

bbs發生器

使用分組密碼的偽隨機數產生

ansi x9.17偽隨機數發生器

密碼學常見基本概念 隨機數,偽隨機數產生器

密碼學都會涉及到隨機數,因為許多密碼系統的安全性依賴於隨機數的生成。序列密碼的保密性完全取決於金鑰的隨機性。如果金鑰是真正的隨機數,那麼這種體制理論上就是不可破譯的。但這種方式所需要的金鑰量大的驚人,實際中是不可行的。目前一般採用偽隨機序列來代替隨機序列,也就是金鑰存在的一定的迴圈週期。這樣迴圈週期...

MATLAB產生偽隨機數

p haltonset d 構造乙個d 維點集p,這是haltonset具有預設屬性設定的。輸入引數d是p的維數。p haltonset d,name,value 集特性的p使用乙個或多個名稱值對引數。將每個屬性名稱括在引號中。例如,haltonset 5,leap 3 從第一點 第四點 第七點 第...

rand srand產生偽隨機數方法總結

標準庫 被包含於 提供兩個生成偽隨機數的函式。函式一 int rand void 整數型 取隨機數 從srand 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數 函式二 void srand unsigned seed 置隨機數種子 引數seed是rand 的...