一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法
【專利摘要】本發(fā)明公開一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法,屬于信息安全領(lǐng)域,所述方法包括:A:初始化熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值,接收系統(tǒng)事件更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,是則執(zhí)行C,否則根據(jù)第一隨機(jī)數(shù)更新內(nèi)部隨機(jī)數(shù)狀態(tài)值和熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,是則執(zhí)行C,否則根據(jù)第二隨機(jī)數(shù)更新內(nèi)部隨機(jī)數(shù)狀態(tài)值和熵值,執(zhí)行B,B:判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,是則執(zhí)行C,否則調(diào)用系統(tǒng)函數(shù),更新內(nèi)部隨機(jī)數(shù)狀態(tài)值和熵值,返回B;C:根據(jù)待生成隨機(jī)數(shù)的長度和內(nèi)部隨機(jī)數(shù)狀態(tài)值,生成隨機(jī)數(shù)。采用本發(fā)明的技術(shù)方案,能夠?qū)崿F(xiàn)生成的隨機(jī)數(shù)隨機(jī)性更強(qiáng),更加能夠滿足對隨機(jī)數(shù)的安全強(qiáng)度要求。
【專利說明】一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)、通信技術(shù)和網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,信息在存儲、傳送、接收和處理過程中的安全問題已受到人們的廣泛關(guān)注。隨機(jī)數(shù)在信息安全系統(tǒng)中扮演著重要的角色,在基于計(jì)算機(jī)、網(wǎng)絡(luò)通信和交易中有著廣泛的應(yīng)用基礎(chǔ)。比如密鑰產(chǎn)生、初始化向量、時間戳、認(rèn)證挑戰(zhàn)碼、密鑰協(xié)商等,都要用到隨機(jī)數(shù)。
[0003]Openssl是一個強(qiáng)大的安全套接字層密碼庫,沒有太多限制的開放源代碼的軟件包,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測試或其他目的使用。
[0004]隨機(jī)數(shù)在計(jì)算機(jī)軟件、硬件、安全等領(lǐng)域有著廣泛的應(yīng)用,因此,產(chǎn)生高效優(yōu)質(zhì)(即隨機(jī)性高)的隨機(jī)數(shù)變得非常重要。
【發(fā)明內(nèi)容】
[0005]本發(fā)明為解決現(xiàn)有技術(shù)中存在的問題,提供了一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法。
[0006]本發(fā)明采用的技術(shù)方案是:一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法,包括:
[0007]步驟S1:隨機(jī)數(shù)生成器初始化熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0008]步驟S2:所述隨機(jī)數(shù)生成器接收系統(tǒng)事件,根據(jù)所述系統(tǒng)事件更新所述熵值和所述內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0009]步驟S3:所述隨機(jī)數(shù)生成器根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟S8,否則執(zhí)行步驟S4 ;
[0010]步驟S4:所述隨機(jī)數(shù)生成器根據(jù)第一隨機(jī)數(shù)更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值和所述熵值;
[0011]步驟S5:所述隨機(jī)數(shù)生成器根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟S8,否則執(zhí)行步驟S6 ;
[0012]步驟S6:所述隨機(jī)數(shù)生成器根據(jù)第二隨機(jī)數(shù)更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值和所述熵值;
[0013]步驟S7:所述隨機(jī)數(shù)生成器根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟S8,否則調(diào)用系統(tǒng)函數(shù),更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值和所述熵值,返回步驟S7;
[0014]步驟S8:所述隨機(jī)數(shù)生成器根據(jù)待生成隨機(jī)數(shù)的長度和所述內(nèi)部隨機(jī)數(shù)狀態(tài)值,生成隨機(jī)數(shù)。
[0015]所述步驟S2中,所述根據(jù)所述系統(tǒng)事件更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值,具體為:所述隨機(jī)數(shù)生成器根據(jù)所述系統(tǒng)事件,調(diào)用第一增加隨機(jī)數(shù)熵值的函數(shù),更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值。
[0016]所述步驟S4具體為:
[0017]步驟S4-1:所述隨機(jī)數(shù)生成器根據(jù)所述第一隨機(jī)數(shù)和所述存放增加隨機(jī)數(shù)的緩存區(qū),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將所述第一隨機(jī)數(shù)復(fù)制到所述存放增加隨機(jī)數(shù)的緩存區(qū)中;
[0018]步驟S4-2:所述隨機(jī)數(shù)生成器根據(jù)所述存放增加隨機(jī)數(shù)的緩存區(qū)中的數(shù)據(jù)和所述數(shù)據(jù)的長度,調(diào)用第二增加隨機(jī)數(shù)熵值的函數(shù),更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值。
[0019]所述步驟S6具體為:
[0020]步驟S6-1:所述隨機(jī)數(shù)生成器根據(jù)所述第二隨機(jī)數(shù)和所述存放增加隨機(jī)數(shù)的緩存區(qū),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將所述第二隨機(jī)數(shù)復(fù)制到所述存放增加隨機(jī)數(shù)的緩存區(qū)中;
[0021]步驟S6-2:所述隨機(jī)數(shù)生成器根據(jù)所述存放增加隨機(jī)數(shù)的緩存區(qū)中的數(shù)據(jù)和所述存放增加隨機(jī)數(shù)的緩存區(qū)中的數(shù)據(jù)的長度,調(diào)用第三增加隨機(jī)數(shù)熵值的函數(shù),更新所述熵值和所述內(nèi)部隨機(jī)數(shù)狀態(tài)值。
[0022]所述步驟S7中判斷為否時,具體為:所述隨機(jī)數(shù)生成器調(diào)用第四增加隨機(jī)數(shù)熵值的系統(tǒng)函數(shù),更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值。
[0023]所述根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,具體為:判斷更新后的所述熵值是否達(dá)到預(yù)設(shè)值,如果是,則達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,否則未達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求。
[0024]所述步驟S7判斷為是時,還包括:
[0025]步驟al:所述隨機(jī)數(shù)生成器根據(jù)存放種子文件名稱的緩存區(qū)的首地址和待生成的種子文件的長度,生成種子文件路徑,將所述種子文件路徑保存至所述種子文件名稱的緩存區(qū)中;
[0026]步驟a2:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址,生成預(yù)設(shè)長度的種子文件,根據(jù)所述種子文件更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值,執(zhí)行步驟S8。
[0027]所述步驟al具體為:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址和所述待生成的種子文件的長度,調(diào)用產(chǎn)生默認(rèn)種子文件路徑的函數(shù),生成種子文件路徑,將所述種子文件路徑保存至所述存放種子文件名稱的緩存區(qū)中。
[0028]所述步驟al與所述步驟a2之間還包括:判斷所述存放種子文件名稱的緩存區(qū)中的數(shù)據(jù)是否為空,如果是,則結(jié)束,否則執(zhí)行步驟a2。
[0029]所述步驟a2,具體為:
[0030]步驟a2_l:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址,調(diào)用生成種子文件的函數(shù),生成預(yù)設(shè)長度的種子文件;
[0031]步驟a2_2:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址和所述種子文件的長度,調(diào)用加載種子文件的函數(shù),更新內(nèi)部隨機(jī)數(shù)狀態(tài)值。
[0032]所述步驟S8,還包括:判斷是否成功生成隨機(jī)數(shù),如果是,則將所述隨機(jī)數(shù)保存,并將所述內(nèi)部隨機(jī)數(shù)狀態(tài)值置為初始值,結(jié)束,否則結(jié)束。
[0033]所述步驟S8,具體為:
[0034]步驟S8-1:所述隨機(jī)數(shù)根據(jù)待生成隨機(jī)數(shù)的長度和內(nèi)部隨機(jī)數(shù)狀態(tài)值,調(diào)用生成隨機(jī)數(shù)的函數(shù),生成隨機(jī)數(shù),將函數(shù)返回值賦值給存儲中間值;
[0035]步驟S8-2:判斷所述存儲中間值是否為預(yù)設(shè)值,如果是,則生成隨機(jī)數(shù)成功,結(jié)束,否則生成隨機(jī)數(shù)失敗,結(jié)束。
[0036]所述將所述內(nèi)部隨機(jī)數(shù)狀態(tài)值置為初始值,具體為:所述隨機(jī)數(shù)生成器調(diào)用擦除內(nèi)部隨機(jī)數(shù)狀態(tài)值的函數(shù),將所述內(nèi)部隨機(jī)數(shù)狀態(tài)值置為初始值。
[0037]本發(fā)明取得的有益效果是:采用本發(fā)明的技術(shù)方案,能夠?qū)崿F(xiàn)生產(chǎn)的隨機(jī)數(shù)隨機(jī)性更強(qiáng),更加能夠滿足對隨機(jī)數(shù)的安全強(qiáng)度要求。
【專利附圖】
【附圖說明】
[0038]為了更清楚的說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0039]圖1是本發(fā)明實(shí)施例1提供的一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法流程圖;
[0040]圖2是本發(fā)明實(shí)施例2提供的一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法流程圖。
【具體實(shí)施方式】
[0041]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0042]實(shí)施例1
[0043]本發(fā)明實(shí)施例1提供了一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法,如圖1所示,包括:本發(fā)明通過調(diào)用OpenSSL的隨機(jī)數(shù)生成的接口函數(shù),實(shí)現(xiàn)生成符合預(yù)設(shè)要求的隨機(jī)數(shù),具體操作如下:
[0044]步驟101:隨機(jī)數(shù)生成器初始化熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0045]步驟102:隨機(jī)數(shù)生成器接收系統(tǒng)事件,根據(jù)系統(tǒng)事件更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0046]優(yōu)選的,所述系統(tǒng)事件為windows系統(tǒng)事件,本實(shí)施例為鼠標(biāo)移動消息WM_M0USEM0VE ;
[0047]其中,根據(jù)系統(tǒng)事件更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值,具體為:調(diào)用第一增加隨機(jī)數(shù)熵值的函數(shù) intRAND_event (UINT iMsg, WPARAM wParam, LPARAM I Par am)函數(shù),其中,iMsg為鼠標(biāo)移動事件WM_M0USEM0VE,wParam和IParam為橫縱坐標(biāo)值;
[0048]步驟103:隨機(jī)數(shù)生成器根據(jù)熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟108,否則執(zhí)行步驟104 ;
[0049]具體為:判斷熵值是否達(dá)到預(yù)設(shè)值,是則達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,否則未達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,優(yōu)選的,預(yù)設(shè)值為32 ;
[0050]步驟104:隨機(jī)數(shù)生成器根據(jù)第一隨機(jī)數(shù)更新內(nèi)部隨機(jī)數(shù)狀態(tài)值和熵值;
[0051]本實(shí)施例中,所述步驟104,具體包括:
[0052]步驟104-1:隨機(jī)數(shù)生成器根據(jù)第一隨機(jī)數(shù)和存放增加隨機(jī)數(shù)的緩存區(qū),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將第一隨機(jī)數(shù)復(fù)制到存放增加隨機(jī)數(shù)的緩存區(qū)中;
[0053]步驟104-2:隨機(jī)數(shù)生成器根據(jù)存放增加隨機(jī)數(shù)的緩存區(qū)中的數(shù)據(jù)和該數(shù)據(jù)的長度,調(diào)用第二增加隨機(jī)數(shù)熵值的函數(shù),更新內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0054]步驟105:隨機(jī)數(shù)生成器根據(jù)熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟108,否則執(zhí)行步驟106 ;
[0055]步驟106:隨機(jī)數(shù)生成器根據(jù)第二隨機(jī)數(shù)更新內(nèi)部隨機(jī)數(shù)狀態(tài)值和熵值;
[0056]步驟107:隨機(jī)數(shù)生成器根據(jù)熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟108,否則調(diào)用系統(tǒng)函數(shù),更新內(nèi)部隨機(jī)數(shù)狀態(tài)值和熵值,返回步驟107 ;
[0057]本實(shí)施例中,步驟107判斷為是時還包括:
[0058]步驟al:隨機(jī)數(shù)生成器根據(jù)存放種子文件名稱的緩存區(qū)的首地址和待生成的種子文件的長度,生成種子文件路徑,將種子文件路徑保存至種子文件名稱的緩存區(qū)中;
[0059]步驟a2:隨機(jī)數(shù)生成器根據(jù)存放種子文件名稱的緩存區(qū)的首地址,生成預(yù)設(shè)長度的種子文件,根據(jù)種子文件更新內(nèi)部隨機(jī)數(shù)狀態(tài)值,執(zhí)行步驟108 ;
[0060]步驟108:隨機(jī)數(shù)生成器根據(jù)待生成隨機(jī)數(shù)的長度和內(nèi)部隨機(jī)數(shù)的狀態(tài)值,生成隨機(jī)數(shù),結(jié)束;
[0061]本步驟還包括:判斷是否成功生成隨機(jī)數(shù),如果是,則將隨機(jī)數(shù)保存,并將內(nèi)部隨機(jī)數(shù)狀態(tài)值置為初始值,結(jié)束,否則結(jié)束。
[0062]實(shí)施例2
[0063]本發(fā)明實(shí)施例2提供了一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法,如圖2所示,包括:本發(fā)明通過調(diào)用OpenSSL的隨機(jī)數(shù)生成的接口函數(shù),實(shí)現(xiàn)生成符合預(yù)設(shè)要求的隨機(jī)數(shù),具體操作如下:
[0064]步驟201:隨機(jī)數(shù)生成器初始化熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0065]本實(shí)施例中,具體為:將熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值均初始化為O ;
[0066]步驟202:隨機(jī)數(shù)生成器分配存放增加隨機(jī)數(shù)的緩沖區(qū)、存放生成的隨機(jī)數(shù)的緩沖區(qū)和存放種子文件名稱的緩沖區(qū);
[0067]本實(shí)施例中,隨機(jī)數(shù)生成器分配的緩存區(qū)包括存放增加隨機(jī)數(shù)的緩沖區(qū)(charbuf[20])、存放生成的隨機(jī)數(shù)的緩存區(qū)(char out[20])和存放種子文件名稱的緩存區(qū)(char filename [50]);
[0068]步驟203:隨機(jī)數(shù)生成器接收系統(tǒng)事件,根據(jù)系統(tǒng)事件調(diào)用第一增加隨機(jī)數(shù)熵值的函數(shù),更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0069]優(yōu)選的,熵值的初始值為0,內(nèi)部隨機(jī)數(shù)狀態(tài)值的初始值為O ;
[0070]本實(shí)施例中,第一增加隨機(jī)數(shù)熵值的函數(shù)為intRAND_event(nNT iMsg, WPARAMwParam, LPARAM I Par am)函數(shù),其中,參數(shù)iMsg為通過事件類型接收熵值,本實(shí)施例優(yōu)選的為Windows操作系統(tǒng)的鼠標(biāo)移動消息(WM_M0USEM0VE),參數(shù)wParam和IParam為該事件的兩個特性,本實(shí)施例為橫縱坐標(biāo)值0,即調(diào)用RAND_event (WM_M0USEM0VE, O, O)更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0071]步驟204:隨機(jī)數(shù)生成器根據(jù)更新后的熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,執(zhí)行步驟212,否則執(zhí)行步驟205 ;
[0072]本實(shí)施例中,根據(jù)更新后的熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,具體為:判斷更新后的熵值是否為預(yù)設(shè)值,如果是,則達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,否則未達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求;
[0073]優(yōu)選的,所述預(yù)設(shè)值為32 ;
[0074]步驟205:隨機(jī)數(shù)生成器根據(jù)存放增加隨機(jī)數(shù)的緩存區(qū)和第一隨機(jī)數(shù),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將第一隨機(jī)數(shù)復(fù)制到存放增加隨機(jī)數(shù)的緩沖區(qū)中;
[0075]本實(shí)施例中,第一隨機(jī)數(shù)可以為預(yù)設(shè)值,也可以為用戶輸入的數(shù)值或者是滿足隨機(jī)性的估算值;
[0076]其中,優(yōu)選的,預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù)為C語言標(biāo)準(zhǔn)庫函數(shù);
[0077]具體的,隨機(jī)數(shù)生成器通過調(diào)用C語言標(biāo)準(zhǔn)庫函數(shù)strcpy (buf,〃第一隨機(jī)數(shù)〃)將第一隨機(jī)數(shù)復(fù)制到存放增加隨機(jī)數(shù)的緩沖區(qū)中;
[0078]例如,第一隨機(jī)數(shù)為123456,則調(diào)用C語言標(biāo)準(zhǔn)庫函數(shù)strcpy (buf,〃123456〃),將第一隨機(jī)數(shù)123456復(fù)制到buf對應(yīng)的存儲區(qū)中,則buf中的數(shù)據(jù)為123456 ;
[0079]進(jìn)一步的,本步驟還可以為:等待接收用戶輸入的第一隨機(jī)數(shù),當(dāng)接收到用戶輸入的第一隨機(jī)數(shù)后,根據(jù)存放增加隨機(jī)數(shù)的緩存區(qū)和第一隨機(jī)數(shù),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將第一隨機(jī)數(shù)復(fù)制到存放增加隨機(jī)數(shù)的緩沖區(qū)中;
[0080]步驟206:隨機(jī)數(shù)生成器根據(jù)存放增加隨機(jī)數(shù)的緩沖區(qū)和存放增加隨機(jī)數(shù)的緩沖區(qū)的長度,調(diào)用第二增加隨機(jī)數(shù)熵值的函數(shù),更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0081]本實(shí)施例中,第二增加隨機(jī)數(shù)熵值的函數(shù)為void RAND_add(constvoid*buf, intnum),其中,buf為存放增加隨機(jī)數(shù)的緩沖區(qū)的首地址,num為存放增加隨機(jī)數(shù)的緩存區(qū)的長度即 RAND_add(buf, strlen(buf)););
[0082]優(yōu)選的,根據(jù)存放增加隨機(jī)數(shù)的緩沖區(qū)和存放增加隨機(jī)數(shù)的緩沖區(qū)的長度,應(yīng)用哈希算法,更新熵值;
[0083]步驟207:隨機(jī)數(shù)生成器根據(jù)更新后的熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,執(zhí)行步驟212,否則執(zhí)行步驟208 ;
[0084]本實(shí)施例中,根據(jù)更新后的熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,具體為:判斷更新后的熵值是否為預(yù)設(shè)值,如果是,則達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,否則未達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求;
[0085]優(yōu)選的,預(yù)設(shè)值為32 ;
[0086]步驟208:隨機(jī)數(shù)生成器根據(jù)存放增加隨機(jī)數(shù)的緩存區(qū)和第二隨機(jī)數(shù),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將第二隨機(jī)數(shù)復(fù)制到存放增加隨機(jī)數(shù)的緩沖區(qū)中;
[0087]本實(shí)施例中,第二隨機(jī)數(shù)可以為預(yù)設(shè)值,也可以為用戶輸入的數(shù)值或者是滿足隨機(jī)性的估算值;
[0088]其中,優(yōu)選的,預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù)為C語言標(biāo)準(zhǔn)庫函數(shù);
[0089]具體的,隨機(jī)數(shù)生成器通過調(diào)用C語言標(biāo)準(zhǔn)庫函數(shù)strcpy (buf,〃第二隨機(jī)數(shù)〃)將第二隨機(jī)數(shù)復(fù)制到存放增加隨機(jī)數(shù)的緩沖區(qū)中;
[0090]例如,第二隨機(jī)數(shù)為23424d,則調(diào)用C語言標(biāo)準(zhǔn)庫函數(shù)strcpy (buf, 〃23424d〃),將第二隨機(jī)數(shù)23424d復(fù)制到buf對應(yīng)的存儲區(qū)中;
[0091]步驟209:隨機(jī)數(shù)生成器根據(jù)存放增加隨機(jī)數(shù)的緩沖區(qū)和存放增加隨機(jī)數(shù)的緩沖區(qū)的長度,調(diào)用第三增加隨機(jī)數(shù)熵值的函數(shù),更新熵值和內(nèi)部隨機(jī)數(shù)的狀態(tài)值;
[0092]本實(shí)施例中,通過調(diào)用第三增加隨機(jī)數(shù)熵值的函數(shù)void RAND_seed(constvoid*buf, intnum),更新熵值和內(nèi)部隨機(jī)數(shù)的狀態(tài)值,其中,buf為存放增加隨機(jī)數(shù)的緩沖區(qū)的首地址,num為存放增加隨機(jī)數(shù)的緩沖區(qū)的長度;
[0093]例如,存放增加隨機(jī)數(shù)的緩沖區(qū)的長度為20,即調(diào)用RAND_seed (buf,20),更新內(nèi)部隨機(jī)數(shù)的狀態(tài)值;
[0094]步驟210:隨機(jī)數(shù)生成器根據(jù)更新后的熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟212,否則執(zhí)行步驟211 ;
[0095]本實(shí)施例中,根據(jù)更新后的熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,具體為:判斷更新后的熵值是否為預(yù)設(shè)值,如果是,則達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,否則未達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求;
[0096]優(yōu)選的,所述預(yù)設(shè)值為32 ;
[0097]步驟211:隨機(jī)數(shù)生成器調(diào)用系統(tǒng)函數(shù),更新內(nèi)部隨機(jī)數(shù)狀態(tài)值,返回執(zhí)行步驟210 ;
[0098]本實(shí)施例中,通過調(diào)用系統(tǒng)函數(shù),即第四增加隨機(jī)數(shù)熵值的函數(shù)RAND_poll O,更新內(nèi)部隨機(jī)數(shù)狀態(tài)值;
[0099]步驟212:隨機(jī)數(shù)生成器根據(jù)存放種子文件名稱的緩存區(qū)的首地址和待生成的種子文件的長度,調(diào)用產(chǎn)生默認(rèn)種子文件路徑的函數(shù),生成種子文件路徑,將種子文件路徑保存至存放種子文件名稱的緩存區(qū)中;
[0100]本實(shí)施例中,產(chǎn)生默認(rèn)種子文件路徑的函數(shù)為RAND_file_name (char*filename, size_t size),其中,filename為存放種子文件名稱的緩存區(qū)的首地址,size為待生成的種子文件的長度;
[0101]例如,待生成的種子文件的長度為50,即P = RANDJiIe_name (filename, 50),將函數(shù)返回值賦值給存放默認(rèn)種子文件路徑的首地址P ;
[0102]步驟213:隨機(jī)數(shù)生成器判斷存放種子文件名稱的緩存區(qū)中的數(shù)據(jù)是否為空,如果是,則結(jié)束;否則,執(zhí)行步驟214 ;
[0103]優(yōu)選的,如果存放默認(rèn)種子文件路徑的首地址中的數(shù)據(jù)為空,表明產(chǎn)生默認(rèn)種子文件失敗,如果存放默認(rèn)種子文件路徑的首地址中的數(shù)據(jù)不為空,表明產(chǎn)生默認(rèn)種子文件成功;
[0104]步驟214:隨機(jī)數(shù)生成器根據(jù)存放種子文件名稱的緩存區(qū)的首地址,調(diào)用生成種子文件的函數(shù),生成預(yù)設(shè)長度的種子文件;
[0105]優(yōu)選的,預(yù)設(shè)長度為1024字節(jié);
[0106]本實(shí)施例中,生成種子文件的函數(shù)為RAND_write_file (const char*file),其中,file為默認(rèn)種子文件路徑的首地址,本實(shí)施例中為存放默認(rèn)種子文件路徑的首地址(char*p),即調(diào)用RAND_write_file (*p),生成1024字節(jié)的種子文件;
[0107]步驟215:隨機(jī)數(shù)生成器根據(jù)默認(rèn)種子文件路徑的首地址和種子文件的長度,調(diào)用加載種子文件的函數(shù),根據(jù)種子文件更新內(nèi)部隨機(jī)數(shù)的狀態(tài)值;
[0108]本實(shí)施例中,加載種子文件的函數(shù)為:intRAND_load_file (const char*file, longbytes),其中,file為默認(rèn)種子文件路徑的首地址,本實(shí)施例中,為存放默認(rèn)種子文件路徑的首地址(char*p),bytes為需要加載的隨機(jī)數(shù)的長度,優(yōu)選的,需要加載的種子文件的長度為1024字節(jié),當(dāng)生成的種子文件的長度大于1024字節(jié)時,從生成的種子文件中截取1024字節(jié),作為需要加載的隨機(jī)數(shù)的長度,即調(diào)用RAND_load_file(*file,1024),根據(jù)1024字節(jié)長度的種子文件更新內(nèi)部隨機(jī)數(shù)的狀態(tài)值;
[0109]步驟216:隨機(jī)數(shù)生成器根據(jù)待生成隨機(jī)數(shù)的長度和內(nèi)部隨機(jī)數(shù)的狀態(tài)值,調(diào)用生成隨機(jī)數(shù)的函數(shù),生成隨機(jī)數(shù),將隨機(jī)數(shù)保存至存放生成的隨機(jī)數(shù)的緩沖區(qū)中,并將函數(shù)返回值賦值給存儲中間值;
[0110]本實(shí)施例中,生成隨機(jī)數(shù)的函數(shù)為intRAND_bytes (unsigned char*buf, intnum),其中,buf為存放生成的隨機(jī)數(shù)的緩沖區(qū),本實(shí)施例中,為存放生成的隨機(jī)數(shù)的緩存區(qū)(charout [20]), num為待生成隨機(jī)數(shù)的長度;
[0111]例如,待生成隨機(jī)數(shù)的長度為20,即調(diào)用ret = RAND_bytes (out, 20),將函數(shù)返回值賦值給存儲中間值ret ;
[0112]步驟217:隨機(jī)數(shù)生成器根據(jù)存儲中間值,判斷生成隨機(jī)數(shù)是否成功,如果是,則執(zhí)行步驟218,否則結(jié)束;
[0113]本實(shí)施例中,根據(jù)存儲中間值,判斷生成隨機(jī)數(shù)是否成功,具體為:判斷存儲中間值是否等于第一預(yù)設(shè)值,如果是,則生成隨機(jī)數(shù)成功,否則生成隨機(jī)數(shù)失??;
[0114]優(yōu)選的,第一預(yù)設(shè)值為I ;預(yù)先約定,當(dāng)存儲中間值retl為1,表明隨機(jī)數(shù)生成器生成隨機(jī)數(shù)成功,當(dāng)存儲中間值retl為0,表明隨機(jī)數(shù)生成器生成隨機(jī)數(shù)失?。?br>
[0115]步驟218:隨機(jī)數(shù)生成器調(diào)用擦除內(nèi)部隨機(jī)數(shù)狀態(tài)值的函數(shù),將內(nèi)部隨機(jī)數(shù)狀態(tài)置為初始值,結(jié)束;
[0116]本實(shí)施例中,隨機(jī)數(shù)生成器調(diào)用擦除內(nèi)部隨機(jī)數(shù)狀態(tài)的函數(shù)void RAND_cleanup (void),將內(nèi)部保存的隨機(jī)數(shù)狀態(tài)清除為初始值0,結(jié)束。
[0117]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種生成滿足安全強(qiáng)度要求的隨機(jī)數(shù)的方法,其特征在于,包括: 步驟S1:隨機(jī)數(shù)生成器初始化熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值; 步驟S2:所述隨機(jī)數(shù)生成器接收系統(tǒng)事件,根據(jù)所述系統(tǒng)事件更新所述熵值和所述內(nèi)部隨機(jī)數(shù)狀態(tài)值; 步驟S3:所述隨機(jī)數(shù)生成器根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟S8,否則執(zhí)行步驟S4 ; 步驟S4:所述隨機(jī)數(shù)生成器根據(jù)第一隨機(jī)數(shù)更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值和所述熵值;步驟S5:所述隨機(jī)數(shù)生成器根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟S8,否則執(zhí)行步驟S6 ; 步驟S6:所述隨機(jī)數(shù)生成器根據(jù)第二隨機(jī)數(shù)更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值和所述熵值;步驟S7:所述隨機(jī)數(shù)生成器根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,如果是,則執(zhí)行步驟S8,否則調(diào)用系統(tǒng)函數(shù),更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值和所述熵值,返回步驟S7 ; 步驟S8:所述隨機(jī)數(shù)生成器根據(jù)待生成隨機(jī)數(shù)的長度和所述內(nèi)部隨機(jī)數(shù)狀態(tài)值,生成隨機(jī)數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S2中,所述根據(jù)所述系統(tǒng)事件更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值,具體為:所述隨機(jī)數(shù)生成器根據(jù)所述系統(tǒng)事件,調(diào)用第一增加隨機(jī)數(shù)熵值的函數(shù),更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S4具體為: 步驟S4-1:所述隨機(jī)數(shù)生成器根據(jù)所述第一隨機(jī)數(shù)和所述存放增加隨機(jī)數(shù)的緩存區(qū),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將所述第一隨機(jī)數(shù)復(fù)制到所述存放增加隨機(jī)數(shù)的緩存區(qū)中; 步驟S4-2:所述隨機(jī)數(shù)生成器根據(jù)所述存放增加隨機(jī)數(shù)的緩存區(qū)中的數(shù)據(jù)和所述數(shù)據(jù)的長度,調(diào)用第二增加隨機(jī)數(shù)熵值的函數(shù),更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S6具體為: 步驟S6-1:所述隨機(jī)數(shù)生成器根據(jù)所述第二隨機(jī)數(shù)和所述存放增加隨機(jī)數(shù)的緩存區(qū),調(diào)用預(yù)設(shè)標(biāo)準(zhǔn)庫函數(shù),將所述第二隨機(jī)數(shù)復(fù)制到所述存放增加隨機(jī)數(shù)的緩存區(qū)中; 步驟S6-2:所述隨機(jī)數(shù)生成器根據(jù)所述存放增加隨機(jī)數(shù)的緩存區(qū)中的數(shù)據(jù)和所述存放增加隨機(jī)數(shù)的緩存區(qū)中的數(shù)據(jù)的長度,調(diào)用第三增加隨機(jī)數(shù)熵值的函數(shù),更新所述熵值和所述內(nèi)部隨機(jī)數(shù)狀態(tài)值。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S7中判斷為否時,具體為:所述隨機(jī)數(shù)生成器調(diào)用第四增加隨機(jī)數(shù)熵值的系統(tǒng)函數(shù),更新熵值和內(nèi)部隨機(jī)數(shù)狀態(tài)值。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)更新后的所述熵值,判斷是否達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,具體為:判斷更新后的所述熵值是否達(dá)到預(yù)設(shè)值,如果是,則達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求,否則未達(dá)到隨機(jī)數(shù)安全強(qiáng)度要求。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S7判斷為是時,還包括: 步驟al:所述隨機(jī)數(shù)生成器根據(jù)存放種子文件名稱的緩存區(qū)的首地址和待生成的種子文件的長度,生成種子文件路徑,將所述種子文件路徑保存至所述種子文件名稱的緩存區(qū)中; 步驟a2:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址,生成預(yù)設(shè)長度的種子文件,根據(jù)所述種子文件更新所述內(nèi)部隨機(jī)數(shù)狀態(tài)值,執(zhí)行步驟S8。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟al具體為:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址和所述待生成的種子文件的長度,調(diào)用產(chǎn)生默認(rèn)種子文件路徑的函數(shù),生成種子文件路徑,將所述種子文件路徑保存至所述存放種子文件名稱的緩存區(qū)中。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟al與所述步驟a2之間還包括:判斷所述存放種子文件名稱的緩存區(qū)中的數(shù)據(jù)是否為空,如果是,則結(jié)束,否則執(zhí)行步驟3-2 ο
10.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟a2,具體為: 步驟a2_l:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址,調(diào)用生成種子文件的函數(shù),生成預(yù)設(shè)長度的種子文件; 步驟a2_2:所述隨機(jī)數(shù)生成器根據(jù)所述存放種子文件名稱的緩存區(qū)的首地址和所述種子文件的長度,調(diào)用加載種子文件的函數(shù),更新內(nèi)部隨機(jī)數(shù)狀態(tài)值。
11.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S8,還包括:判斷是否成功生成隨機(jī)數(shù),如果是,則將所述隨機(jī)數(shù)保存,并將所述內(nèi)部隨機(jī)數(shù)狀態(tài)值置為初始值,結(jié)束,否則結(jié)束。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述步驟S8,具體為: 步驟S8-1:所述隨機(jī)數(shù)根據(jù)待生成隨機(jī)數(shù)的長度和內(nèi)部隨機(jī)數(shù)狀態(tài)值,調(diào)用生成隨機(jī)數(shù)的函數(shù),生成隨機(jī)數(shù),將函數(shù)返回值賦值給存儲中間值; 步驟S8-2:判斷所述存儲中間值是否為預(yù)設(shè)值,如果是,則生成隨機(jī)數(shù)成功,結(jié)束,否則生成隨機(jī)數(shù)失敗,結(jié)束。
13.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述將所述內(nèi)部隨機(jī)數(shù)狀態(tài)值置為初始值,具體為:所述隨機(jī)數(shù)生成器調(diào)用擦除內(nèi)部隨機(jī)數(shù)狀態(tài)值的函數(shù),將所述內(nèi)部隨機(jī)數(shù)狀態(tài)值置為初始值。
【文檔編號】G06F7/58GK104298485SQ201410553538
【公開日】2015年1月21日 申請日期:2014年10月17日 優(yōu)先權(quán)日:2014年10月17日
【發(fā)明者】陸舟, 于華章 申請人:飛天誠信科技股份有限公司