密碼學都會涉及到隨機數,因為許多密碼系統的安全性依賴於隨機數的生成。
序列密碼的保密性完全取決於金鑰的隨機性。如果金鑰是真正的隨機數,那麼這種體制理論上就是不可破譯的。但這種方式所需要的金鑰量大的驚人,實際中是不可行的。
目前一般採用偽隨機序列來代替隨機序列,也就是金鑰存在的一定的迴圈週期。這樣迴圈週期的長短就成了保密的關鍵,如果週期足夠長,就會有比較好的保密性。一般週期小於10^10的序列很少被採用。
下面這段程式,完整地闡述了計算機隨機數產生的過程。
#include
static
unsigned
int rand_seed;
unsigned
int random(void)
void random_start(void)
main()
主函式中首先呼叫了random_start函式,裡面的一句movedata(0x0040,0x006c,fp_seg(temp),fp_off(temp),4);是程式的重點。movedata用 法:
void movedata(int segsrc, int offsrc, int segdest,int offdest, unsigned numbytes);
何謂偽隨機數生成器(prng)?假定要生成介於1~10之間的隨機數,每個數出現的概率是一樣的。理想情況下,應生成0~1之間的乙個值,不考慮以前值,這個範圍中每個值出現的概率是一樣的,然後再將該值乘以10。
由任何偽隨機數生成器返回的數目都會受到0到n之間整數數目的限制。因為常見情況下,偽隨機數生成器生成0到n之間的乙個整數,返回的整數再除以n。可以得到的數字總是處於0到1之間。對生成器隨後的呼叫採用第一次執行產生的整數,並將它傳給乙個函式,以生成0到n之間的乙個新整數,然後將新整數除以n返回。
偽隨機數生成器將作為「種子」的數當做初始整數傳給函式,由偽隨機數生成器返回的每乙個值完全由他前乙個返回的值決定。因此最初的種子決定了整個隨機數序列。如果知道用於計算任何乙個值的那個整數,那麼可以算出從這個生成器返回的下乙個值。
偽隨機數生成器是乙個生成完全可預料的數列(稱為流)的確定性程式。乙個編寫的很好的prng可以建立乙個接近真隨機數序列的數列。而好的prng特徵如,可以以相同機率在乙個範圍內生成任何數字,可以生成帶任何統計分布的流,生成的數字流不具備可辨別的膜模。
基於密碼演算法的隨機數產生器:
使用軟體方法的隨機數產生器
乙個常用的隨機數產生器是屬於線性擬合生成器一類的。這類生成器相當普遍,他們採用很具體的數學公式:第n+1個數是通過第n個數經過一定線性變換再通過模c把它限制在0~c之間。(注意,a、b、c通常都是質數,模c是質數是為了更好地散射分布)
硬體方法生成,不討論
偽隨機數的評價標準:
可以通過所有隨機性統計檢驗
不可**
不能可靠地重複產生
密碼學原理 偽隨機數的產生
大量的基於密碼學的網路安全演算法和協議都使用二進位制隨機數 對隨機數序列產生提出的兩個要求 隨機性和不可 性。tpng為真隨機數發生器,prng為偽隨機數發生器,prf為偽隨機函式。真隨機數發生器把乙個很隨機的源作為輸入,這個源稱為熵源,熵源是從計算機的物理環境抽取的,可能包括鍵盤敲擊時間模式,磁碟...
密碼學 基本概念
密碼學的目的是通過將資訊編碼使其不可讀,從而達到安全性。1 明文和密文 明文資訊是知道這種語言的任何人都能理解的,該資訊不進行任何編碼,是傳送人 接受人和任何訪問資訊的人都能理解的資訊。明文資訊用某種模式編碼之後,得到密文資訊。2 替換方法 2.1凱撒加密法 第乙個替換加密例項,把明文訊息中的每個字...
密碼學基本概念
以密碼學為基礎的資訊保安的五個主要方面,機密性,可用性,完整性,認證性,不可否認性 指保密資訊不會透露給非授權使用者或實體,確保儲存的資訊或傳輸的資訊僅能被授權使用者獲取到,而非授權使用者獲取到也無法知曉資訊內容 使用密碼演算法進行加密 指資訊在生成,傳輸,儲存和使用過程中發生的人為或非人為的非授權...