今天看《白帽子講WEB安全》一書,看到筆者談到Linux如何實現真隨機數生成,感覺非常有用,記錄下來
#include<iostream> using namespace std; #include<unistd.h> #include<fcntl.h> #include<cmath> int main() { int randoms=open("/dev/random",O_RDONLY); int randomn; read(randoms,&randomn,sizeof(randomn)); close(randoms); randomn=abs(randomn); cout<<randomn<<endl; return 0; }
直接通過Linux的隨機數設備生成,基本貼近物理方法生成,屬於可靠手段,比使用時間作為種子生成隨機數要可靠的多
通常我們認為依據系統時鍾產生的隨機數是可靠的,實際上,時間是不斷增長的,只要攻擊者知道了時間基數,便可以預測出時間種子產生的隨機數。所以書中提到的這種通過物理設備產生的隨機數,缺乏規律性,更為可靠。物理生成隨機數的方法還有依據:電壓波動、硬盤磁頭讀\寫的尋道時間、空中電磁波噪聲等。