一種快速生成大素?cái)?shù)的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及涉及密碼學(xué)領(lǐng)域,尤其涉及一種快速生成大素?cái)?shù)的方法和裝置。
【背景技術(shù)】
[0002]在密碼實(shí)現(xiàn)過程中,特別是公開密鑰密碼的實(shí)現(xiàn)過程中,需要嵌入式系統(tǒng)生成大素?cái)?shù)供加密等過程使用,例如,RSA加密過程中的密鑰參數(shù)需要使用嵌入式系統(tǒng)生成的大素?cái)?shù)。
[0003]現(xiàn)有技術(shù)中,大素?cái)?shù)的生成過程包括:首先生成長度足夠的隨機(jī)數(shù);然后判斷該隨機(jī)數(shù)是否為素?cái)?shù);當(dāng)確定該隨機(jī)數(shù)不為素?cái)?shù)時(shí),則重新生成一組新隨機(jī)數(shù)或?qū)Ξ?dāng)前隨機(jī)數(shù)進(jìn)行適度變換,然后再次判斷新隨機(jī)數(shù)是否為素?cái)?shù),直到生成一個(gè)符合要求的隨機(jī)數(shù)。
[0004]在上述生成大素?cái)?shù)的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題:由于目前廣泛使用的素性判斷方法本身的運(yùn)算時(shí)間較長,而大多數(shù)情況下需要尋找數(shù)百甚至上千次隨機(jī)數(shù)后才能找到大素?cái)?shù),即需要使用數(shù)百甚至上千次的素性判斷方法,從而導(dǎo)致生成大素?cái)?shù)的時(shí)間較長。
【發(fā)明內(nèi)容】
[0005]為此,需要提供一種快速生成大素?cái)?shù)的技術(shù)方案,用以解決現(xiàn)有大素?cái)?shù)生成方法運(yùn)算時(shí)間較長、效率低下等問題。
[0006]為實(shí)現(xiàn)上述目的,發(fā)明人提供了一種快速生成大素?cái)?shù)的方法,包括以下步驟:
[0007]根據(jù)用戶輸入的位數(shù)生成相應(yīng)長度的隨機(jī)數(shù),所述隨機(jī)數(shù)的位數(shù)與所述用戶輸入的位數(shù)相同;
[0008]選取若干個(gè)小素?cái)?shù)并計(jì)算它們的乘積,得到乘積值,所述乘積值的位數(shù)小于等于隨機(jī)數(shù)的位數(shù)的一半;
[0009]將所述隨機(jī)數(shù)的當(dāng)前值對乘積值取模,得到余數(shù),并將所述隨機(jī)數(shù)與余數(shù)相減得到第一更新值;
[0010]取任一整數(shù),所述整數(shù)的位數(shù)小于乘積值的位數(shù),且所述整數(shù)與乘積值互質(zhì);
[0011 ]將所述第一更新值與所述整數(shù)相加,得到第二更新值;
[0012]檢測第二更新值是否為素?cái)?shù),若是則存儲或輸出所述第二更新值;否則,將第二更新值賦值為當(dāng)前第二更新值與所述乘積值的和,并繼續(xù)執(zhí)行步驟“檢測第二更新值是否為素?cái)?shù)”。
[0013]進(jìn)一步地,所述若干個(gè)小素?cái)?shù)從小素?cái)?shù)列表中選取,所述小素?cái)?shù)列表包括了2至379共計(jì)75個(gè)相鄰的小素?cái)?shù)。
[0014]進(jìn)一步地,所述根據(jù)用戶輸入的位數(shù)生成相應(yīng)長度的隨機(jī)數(shù)之后,還包括:
[0015]如果所述隨機(jī)數(shù)的最高位不為I,則將所述最高位置為I。
[0016]進(jìn)一步地,所述乘積值的位數(shù)為隨機(jī)數(shù)位數(shù)的一半。
[0017]進(jìn)一步地,所述整數(shù)的值為I。
[0018]發(fā)明人還提供了一種快速生成大素?cái)?shù)的裝置,所述裝置包括隨機(jī)數(shù)生成模塊、選取模塊、小素?cái)?shù)計(jì)算模塊、取模模塊、更新模塊、檢測模塊和處理模塊,所述更新模塊包括第一更新模塊和第二更新模塊;所述選取模塊包括小素?cái)?shù)選取模塊和整數(shù)選取模塊;
[0019]所述隨機(jī)數(shù)生成模塊用于根據(jù)用戶輸入的位數(shù)生成相應(yīng)長度的隨機(jī)數(shù),所述隨機(jī)數(shù)的位數(shù)與所述用戶輸入的位數(shù)相同;
[0020]所述小素?cái)?shù)選取模塊用于選取若干個(gè)小素?cái)?shù),所述小素?cái)?shù)計(jì)算模塊用于計(jì)算所選取的小素?cái)?shù)的乘積,得到乘積值,所述乘積值的位數(shù)小于等于隨機(jī)數(shù)的位數(shù)的一半;
[0021]所述取模模塊用于將所述隨機(jī)數(shù)的當(dāng)前值對乘積值取模,得到余數(shù),所述第一更新模塊用于將所述隨機(jī)數(shù)與余數(shù)相減得到第一更新值;
[0022]所述整數(shù)選取模塊用于選取任一整數(shù),所述整數(shù)的位數(shù)小于乘積值的位數(shù),且所述整數(shù)與乘積值互質(zhì);
[0023]所述第二更新模塊用于將所述第一更新值與所述整數(shù)相加,得到第二更新值;
[0024]所述檢測模塊用于檢測第二更新值是否為素?cái)?shù),若是則處理模塊用于存儲或輸出所述第二更新值;否則,所述第二更新模塊還用于將第二更新值賦值為當(dāng)前第二更新值與所述乘積值的和,檢測模塊還用于繼續(xù)執(zhí)行步驟“檢測第二更新值是否為素?cái)?shù)”。
[0025]進(jìn)一步地,所述小素?cái)?shù)選取模塊選取若干個(gè)小素?cái)?shù)從小素?cái)?shù)列表中選取,所述小素?cái)?shù)列表包括了 2至379共計(jì)75個(gè)相鄰的小素?cái)?shù)。
[0026]進(jìn)一步地,所述裝置還包括置位模塊,所述置位模塊用于在用戶輸入的位數(shù)生成相應(yīng)長度的隨機(jī)數(shù)的最高位不為I之后,則將所述最高位置為I。
[0027]進(jìn)一步地,所述乘積值的位數(shù)為隨機(jī)數(shù)位數(shù)的一半。
[0028]進(jìn)一步地,所述整數(shù)的值為I。
[0029]上述方案所述的一種快速生成大素?cái)?shù)的方法和裝置,所述方法包括以下步驟:首先根據(jù)用戶輸入的位數(shù)生成相應(yīng)長度的隨機(jī)數(shù),所述隨機(jī)數(shù)的位數(shù)與所述用戶輸入的位數(shù)相同;選取若干個(gè)小素?cái)?shù)并計(jì)算它們的乘積,得到乘積值,所述乘積值的位數(shù)小于等于隨機(jī)數(shù)的位數(shù)的一半;而后將所述隨機(jī)數(shù)的當(dāng)前值對乘積值取模,得到余數(shù),并將所述隨機(jī)數(shù)與余數(shù)相減得到第一更新值;而后取任一整數(shù),所述整數(shù)的位數(shù)小于乘積值的位數(shù),且所述整數(shù)與乘積值互質(zhì);而后將所述第一更新值與所述整數(shù)相加,得到第二更新值;而后檢測第二更新值是否為素?cái)?shù),若是則存儲或輸出所述第二更新值;否則,將第二更新值賦值為當(dāng)前第二更新值與所述乘積值的和,并繼續(xù)執(zhí)行步驟“檢測第二更新值是否為素?cái)?shù)”。在本發(fā)明實(shí)施例提供的技術(shù)方案中,先將生成的隨機(jī)數(shù)經(jīng)過取模、減法、加法等運(yùn)算后得到第二更新值,由于第二更新值與若干小素?cái)?shù)的乘積值互質(zhì),因而第二更新值也與若干小素?cái)?shù)互質(zhì),從而大大減少了第二更新值為合數(shù)的可能性,即第二更新值一定位于不被若干小素?cái)?shù)整除的數(shù)值范圍內(nèi),從而減少素性檢測的次數(shù),節(jié)省大素?cái)?shù)的生成時(shí)間,解決了現(xiàn)有技術(shù)中由于素性判斷次數(shù)較多而導(dǎo)致的生成大素?cái)?shù)的時(shí)間較長的問題。
【附圖說明】
[0030]圖1為本發(fā)明一實(shí)施方式涉及的快速生成大素?cái)?shù)的方法的流程圖;
[0031]圖2為本發(fā)明另一實(shí)施方式涉及的快速生成大素?cái)?shù)的方法的流程圖;
[0032]圖3為本發(fā)明另一實(shí)施方式涉及的快速生成大素?cái)?shù)的方法的統(tǒng)計(jì)分布圖;
[0033]圖4為本發(fā)明一實(shí)施方式涉及的快速生成大素?cái)?shù)的裝置的示意圖。
[0034]附圖標(biāo)記:
[0035]101、隨機(jī)數(shù)生成模塊;
[0036]112、小素?cái)?shù)選取模塊;122、整數(shù)選取模塊;
[0037]103、小素?cái)?shù)計(jì)算模塊;
[0038]104、取模模塊;
[0039]115、第一更新模塊;125、第二更新模塊;
[0040]106、檢測模塊;
[0041]107、處理模塊。
【具體實(shí)施方式】
[0042]為詳細(xì)說明技術(shù)方案的技術(shù)內(nèi)容、構(gòu)造特征、所實(shí)現(xiàn)目的及效果,以下結(jié)合具體實(shí)施例并配合附圖詳予說明。
[0043]請參閱圖1,為本發(fā)明一實(shí)施方式涉及的快速生成大素?cái)?shù)的方法的流程圖。所述方法可以用于尋找大素?cái)?shù),具體包括如下步驟:
[0044]首先進(jìn)入步驟SlOl根據(jù)用戶輸入的位數(shù)生成相應(yīng)長度的隨機(jī)數(shù),所述隨機(jī)數(shù)的位數(shù)與所述用戶輸入的位數(shù)相同。為了確保該生成的隨機(jī)數(shù)足夠大,如果所生成的隨機(jī)數(shù)的最高位不為I,可以將該隨機(jī)數(shù)的最高位設(shè)置為1(這里的隨機(jī)數(shù)是基于二進(jìn)制表示)。在某些實(shí)施例中,為了確保該生成的隨機(jī)數(shù)為奇數(shù),以便于縮小隨機(jī)數(shù)的范圍,便于素?cái)?shù)的生成,也可以將隨機(jī)數(shù)的最低位設(shè)置為I;還可以對隨機(jī)數(shù)進(jìn)行其他設(shè)置,以便于素?cái)?shù)的生成,在此不再一一贅述。目前實(shí)際應(yīng)用中RSA算法的密鑰長度通常為1024位或2048位,對應(yīng)需要計(jì)算的大素?cái)?shù)分別為512位或1024位,因而在本實(shí)施方式中,用戶輸入的位數(shù)為512位或1024位。
[0045]而后進(jìn)入步驟S102選取若干個(gè)小素?cái)?shù)并計(jì)算它們的乘積,得到乘積值。優(yōu)選的,所述乘積值的位數(shù)小于等于隨機(jī)數(shù)的位數(shù)的一半。在本實(shí)施方式中,所述若干個(gè)小素?cái)?shù)從小素?cái)?shù)列表中選取,所述小素?cái)?shù)列表包括了 2至379共計(jì)75個(gè)相鄰的小素?cái)?shù)。小素?cái)?shù)列表包含了2、3、5、7...、0x016F、0x0175、0x017B等75個(gè)小素?cái)?shù),用十進(jìn)制表示的話即是從2至379共計(jì)75個(gè)小素?cái)?shù),用十六進(jìn)制表示,即共Ox 0002至0x017B共計(jì)75個(gè)小素?cái)?shù)。選取η個(gè)小素?cái)?shù)的個(gè)數(shù)η由需要得到的小素?cái)?shù)的乘積值決定,為了得到最佳效果小素?cái)?shù)從素?cái)?shù)表中從小到大依次選取。例如從小到大依次選取26個(gè)小素?cái)?shù),