版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 密碼學(xué)課程設(shè)計報告</b></p><p><b> 目錄</b></p><p> 1.Hash算法的實現(xiàn)—MD5算法 3</p><p><b> 1.1算法概述3</b></p><p> 1.2算法原理及設(shè)計思想3</p
2、><p> 1.3實現(xiàn)算法分析3</p><p> 1.4程序運行結(jié)果4</p><p> 1.5密碼安全性分析4</p><p> 1.6設(shè)計實現(xiàn)中的問題及解決方法4</p><p> 2. AES算法的實現(xiàn)4</p><p> 2.1 算法概述4</p>&
3、lt;p> 2.2 算法原理及設(shè)計思想5</p><p> 2.3 程序主要代碼分析8</p><p> 2.4 程序運行結(jié)果9</p><p> 2.5 安全性分析9</p><p> 2.6 設(shè)計實現(xiàn)中的問題及解決方法9</p><p> 3. RSA算法的實現(xiàn).9</p>
4、<p> 3.1 算法概述10</p><p> 3.2 算法原理及設(shè)計思想10</p><p> 3.3程序主要算法分析10</p><p> 3.4程序運行結(jié)果11</p><p> 3.5安全性分析11</p><p> 3.6 設(shè)計實現(xiàn)中的問題及解決方法11</p&g
5、t;<p> 一、Hash算法的實現(xiàn)——MD5算法</p><p><b> 1.1 算法概述</b></p><p> MD5算法是一種消息摘要算法,此算法以任意長度的信息作為輸入進行計算,產(chǎn)生一個128-bit(16-byte)的指紋或報文摘要。 兩個不同的message產(chǎn)生相同message digest的幾率相當(dāng)小,從一個給定的messag
6、e digest逆向產(chǎn)生原始message更是困難(不過據(jù)說我國的某個教授很善于從message digest構(gòu)造message),因此MD5算法適合用在數(shù)字簽名應(yīng)用中。MD5實現(xiàn)簡單,在32位的機器上運行速度也相當(dāng)快,當(dāng)然實際應(yīng)用也不僅僅局 限于數(shù)字簽名。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。</p><p> 1.2算法原理及設(shè)計思想</p><p&
7、gt; MD5散列函數(shù)的處理過程分為如下幾步:</p><p> (1)消息填充:對原始消息填充,使得其比特長在模512下余448,即填充后消息的長度為512的某一倍數(shù)減64.這一步是必需的,即使原始消息的長度已經(jīng)滿足要求,仍需要填充。例如:消息的長度正好為448bit,則需要填充512bit,使其長度為960bit,因此填充的比特數(shù)在1到512之間。填充方式是固定的:第一位為1,其他位為0,例如需要填充10
8、0bit,則填充一個1和后面附上99個0。</p><p> (2)添加消息長度:在第一步填充后,留有64個bit位,這64bit用來填充消息被填充前的長度。如果消息長度大于264,則以264取模。</p><p> 前兩步完成以后,消息的長度為512的倍數(shù)(設(shè)倍數(shù)為L)。可將消息表示成分組長為512的一系列分組Y0,Y1,…Yl-1。每一個512bit分組是16個(32bit)字,因
9、此消息中的總字數(shù)為N=16L。</p><p> (3)初始化MD緩沖區(qū):MD5算法使用128bit長的緩沖區(qū)以存儲中間結(jié)果和最終Hash值。緩沖區(qū)可表示為4個32位長的寄存器(A,B,C,D),將存儲器初始化為以下的32位整數(shù):A=67452301、B=EFCDAB、C=98BADCFE、D=10325476.每個寄存器都以little-endian方式存儲數(shù)據(jù),也就是最低有效字節(jié)存儲在低位地址字節(jié)位置,4個
10、寄存器按如下存儲:</p><p> A=01234567,B=89ABCDEF,C=FEDCBA98,D=7654321</p><p> (4)以分組為單位進行消息處理:每個分組Ya都經(jīng)過一個壓縮函數(shù)HMD5處理,包括4輪處理過程,MD5算法是一種迭代型Hash函數(shù),壓縮函數(shù)HMD5是算法的核心。壓縮函數(shù)按如下方式工作:</p><p> a.四個輪運算的
11、結(jié)構(gòu)相同,但各輪使用不同的基本邏輯函數(shù),我們分別稱之為F、G、H和I;</p><p> b.每輪的輸入時當(dāng)前要處理的512位的分組Yq和128位緩沖區(qū)的當(dāng)前值A(chǔ)、B、C、D的內(nèi)容,輸出仍然放在緩沖區(qū)中產(chǎn)生新的A、B、C、D;</p><p> c.每輪的處理過程還需要使用常數(shù)表T中元素的1/4.第4輪的輸出再與第1輪的輸入CVq相加,相加時將CVq看作4個32bit的字,每個字與第4
12、輪輸出的對應(yīng)的字按模232相加,相加的結(jié)果就是本輪壓縮函數(shù)的輸出。</p><p> (5)輸出:消息的所有L個分組被處理完以后,最后一個HMD5的輸出即為產(chǎn)生的消息摘要(Hash值)。</p><p><b> 1.3實現(xiàn)算法分析</b></p><p> (1)static unsigned char PADDING[64]</
13、p><p> 說明:用于bits填充的緩沖區(qū),要64個字節(jié),因為當(dāng)欲加密的信息的bits數(shù)被512除其余數(shù)為448時,需要填充的bits的最大值為512=64*8 。</p><p> (2)#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))</p><p> #define G(x, y, z) (((
14、x) & (z)) | ((y) & (~z)))</p><p> #define H(x, y, z) ((x) ^ (y) ^ (z))</p><p> #define I(x, y, z) ((y) ^ ((x) | (~z)))</p><p> 說明:這幾個宏定義是md5算法規(guī)定的,就是對信息進行md5加密都要做的運算。 F, G
15、, H and I 是基本的MD5算法。</p><p> (3)#define FF(a, b, c, d, x, s, ac)</p><p> #define GG(a, b, c, d, x, s, ac)</p><p> #define HH(a, b, c, d, x, s, ac)</p><p> #define I
16、I(a, b, c, d, x, s, ac)</p><p> 說明:四輪處理中每一輪的16步都是循環(huán)左移,移動的位數(shù)用s表示。</p><p> (4)void MD5Init (MD5_CTX *context)</p><p> 函數(shù)說明:初始化md5的結(jié)構(gòu)。</p><p> (5)void MD5Update(MD5_CT
17、X *context,unsigned char * input, unsigned int inputLen)</p><p> 函數(shù)說明:將與加密的信息傳遞給md5結(jié)構(gòu),可以多次調(diào)用。</p><p> context:初始化過了的md5結(jié)構(gòu)</p><p> input:欲加密的信息,可以任意長</p><p> inputLe
18、n:指定input的長度</p><p> (6)void MD5Final (unsigned char digest[16],MD5_CTX *context)</p><p> 函數(shù)說明:獲取加密 的最終結(jié)果。</p><p> digest:保存最終的加密串</p><p> context:你前面初始化并填入了信息的md5結(jié)
19、構(gòu)</p><p> (7)static void MD5Transform (UINT4 state[4], unsigned char block[64])</p><p> 函數(shù)說明:對512bits信息(即block緩沖區(qū))進行一次處理,每次處理包括四輪。</p><p> state[4]:md5結(jié)構(gòu)中的state[4],用于保存對512bits信息
20、加密的中間結(jié)果或者最終結(jié)果</p><p> block[64]:欲加密的512bits信息</p><p> (8)static void Encode(unsigned char *output, UINT4 *input,unsigned int len)</p><p> 函數(shù)說明:將4字節(jié)的整數(shù)copy到字符形式的緩沖區(qū)中。</p>
21、<p> output:用于輸出的字符緩沖區(qū)</p><p> input:欲轉(zhuǎn)換的四字節(jié)的整數(shù)形式的數(shù)組</p><p> len:output緩沖區(qū)的長度,要求是4的整數(shù)倍</p><p> (9)static void Decode(UINT4 *output, unsigned char *input,unsigned int len
22、)</p><p> 函數(shù)說明:與上面的函數(shù)正好相反,這一個把字符形式的緩沖區(qū)中的數(shù)據(jù)copy到4字節(jié)的整數(shù)中(即以整數(shù)形式保存)。</p><p> output:保存轉(zhuǎn)換出的整數(shù)</p><p> input:欲轉(zhuǎn)換的字符緩沖區(qū)</p><p> len:輸入的字符緩沖區(qū)的長度,要求是4的整數(shù)倍</p><p&
23、gt;<b> 1.4程序運行結(jié)果</b></p><p> ?。?)源代碼運行結(jié)果:</p><p><b> 1.5安全性分析</b></p><p> MD5算法中,輸出的每一位都是輸入的每一位的函數(shù),邏輯函數(shù)F、G、H、I的復(fù)雜迭代使得輸出對輸入的依賴非常小。但是,Berson已經(jīng)證明,對單輪的MD5算法,利
24、用差分密碼分析,可以在合理時間內(nèi)找出摘要相同的兩條報文。MD5算法抗密碼分析的能力較弱,對MD5的生日攻擊所需代價是需要試驗2^64個消息。</p><p> 2004年8月17日,在美國加州圣巴巴拉召開的美密會(Crypto2004)上,中國的王小云、馮登國、來學(xué)嘉、于紅波4位學(xué)者宣布,利用差分分析只需1小時就可找出MD5的碰撞。</p><p> 1.6設(shè)計實現(xiàn)中的問題及解決方法&
25、lt;/p><p><b> ?。?)字符輸入問題</b></p><p> 因為對于MD5的實現(xiàn)使用的是C語言而不是C++,所以在編寫程序的時候由于對C的不熟悉出現(xiàn)了關(guān)于字符輸入的問題。在最初的程序編寫時,對字符輸入沒有使用scanf()函數(shù),而是使用了gets()函數(shù),但是后來發(fā)現(xiàn)gets()函數(shù)功能本身就不完善,容易出現(xiàn)溢出,所以后來就換成了更加穩(wěn)定和實用的sca
26、nf()函數(shù)。</p><p><b> ?。?)文件拖拽問題</b></p><p> 在設(shè)計的MD5程序中能夠?qū)崿F(xiàn)字符輸入加密和文件讀取加密兩種功能,在文件讀取中又分成了手動輸入文件路徑和拖拽文件至對話框自動獲取文件路徑兩種方式,可是文件拖拽中會產(chǎn)生雙引號,無法獲取正確格式的文件路徑,后來在CSDN上看到了一篇博客中提到了去除拖拽文件時出現(xiàn)的雙引號的方法,后來被
27、我引用到程序里并做了一些改動,便實現(xiàn)了去除雙引號,程序代碼如下:</p><p> if (filename[0]==34)</p><p> filename[strlen(filename)-1]=0,strcpy(filename,filename+1); //支持文件拖曳,但會多出雙引號,這里是處理多余的雙引號</p><p> 二、AES算法的實現(xiàn)
28、</p><p><b> 2.1 算法概述</b></p><p> AES加密算法即密碼學(xué)中的高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過五年的甄選流程,高級加密標(biāo)準(zhǔn)由美國國家標(biāo)準(zhǔn)與技術(shù)研究
29、院 (NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。</p><p> AES的基本要求是,采用對稱分組密碼體制,密鑰長度的最少支持為128、192、256,分組長度128位,AES加密數(shù)據(jù)塊大小最大是256bit,但是密鑰大小在理論上沒有上限。AES加密有很多輪的重復(fù)和變換。大致步驟如下:1、密鑰擴展(KeyExpansion),2、初始輪(Init
30、ial Round),3、重復(fù)輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。</p><p> 2.2算法原理及設(shè)計思想</p><p><b> 1、加密原理</b></p><p> AES具有
31、128bits的分組長度,三種可選的密鑰長度,即128比特、192比特、256比特。AES是一個迭代型密碼;輪數(shù)Nr依賴于密鑰長度。如果密鑰長度為128比特,則Nr=10;如果密鑰長度為192比特,則Nr=12;如果密鑰長度為256比特,則Nr=14。</p><p> 首先,AES的總體描述如下:</p><p> 1、給定一個明文x,將state初始化為x,并進行AddRoundK
32、ey操作,將RoundKey與state進行異或操作。</p><p> 2、對前Nr-1輪中的每一輪,用S盒對state進行一次代換操作,稱為SubBytes;對state做一置換ShiftRows;再對State做一次MixColumns操作;然后進行AddRoundKey操作。</p><p> 3、依次進行SubBytes、ShiftRows和AddRoundKey操作。<
33、;/p><p> 4、將state定義為密文y。</p><p> 從上述總體描述中,我們可以看到AES與我們所熟知的SPN在許多方面均有相似之處。在這兩種密碼體制的每一輪中,都要進行輪密鑰混合、代換和置換。這兩個密碼都包括白化過程,而AES更“大”一些,它還在每一輪中包括一個額外的線性變換MixColumns。</p><p><b> 2、解密原理&
34、lt;/b></p><p> 為了解密,只需將所有的操作逆序進行,并逆序使用密鑰編排方案即可。另外,操作ShiftRows、SubBytes以及MixColumns均需要他們的逆操作來代替(操作AddRoundKey的逆操作就是它自己)。構(gòu)造一個AES的“等價逆密碼”在理論上是可能的,在這里我也是采用了這種方式。這個“等價逆密碼”能通過一系列的逆操作來實現(xiàn)AES的解密,這些逆操作將以與AES加密相同的順
35、序進行,這樣做可以在一定程度上提高實現(xiàn)效率。</p><p> 在該程序中,工作模式采用了電碼本模式(ECB)。電碼本模式就是一個分組密碼的直接使用:給定一個128位的明文分組序列:x1x2……,每一個xi都用同一個密鑰K來加密,產(chǎn)生密文分組序列y1y2……。</p><p> ?。?)首先將明文以字節(jié)為單位進行處理,以128位分組、128位的密鑰為例。先將明文按字節(jié)分成列組,將明文的前
36、四字節(jié)組成一列,接下來的4個字節(jié)組成第二列,后面的字節(jié)依次組成第三列和第四列,則組成了一個4乘4的矩陣。</p><p> ?。?)AES也是由基本的變換單位“輪”多次迭代而成的。AES的輪變換由四個不同的變換組成:</p><p><b> 1)字節(jié)代替變換</b></p><p> 非線性的字節(jié)替代,單獨處理每個字節(jié):</p>
37、;<p> 求該字節(jié)在有限域GF(28)上的乘法逆,"0"被映射為自身,即對于α∈GF(28),求β∈GF(28),</p><p> 使得α?β=β?α=1mod(x8+x4+x2+x+1)。</p><p> 對上一步求得的乘法逆作仿射變換</p><p> yi=xi + x(i+4)mod8 + x(i+6)mod8
38、 + x(i+7)mod8 + ci</p><p> (其中ci是6310即011000112的第i位)</p><p><b> 2) 行移位變換</b></p><p> 行移位變換完成基于行的循環(huán)位移操作,變換方法:</p><p> 即行移位變換作用于行上,第0行不變,第1行循環(huán)左移1個字節(jié),第2行循環(huán)
39、左移2個字節(jié),第3行循環(huán)左移3個字節(jié)。</p><p> 3)列混合變換(最后一輪中沒有)</p><p><b> 逐列混合,方法:</b></p><p><b> 矩陣表示形式:</b></p><p><b> 4)與子密鑰異或</b></p>&
40、lt;p> 只是簡單的將密鑰按位異或到一個狀態(tài)上。每輪加密密鑰按順序取自擴展密鑰,擴展密鑰是由初始密鑰擴展而成。</p><p><b> 密鑰擴展:</b></p><p> AES密鑰擴展算法輸入值是4字(16字節(jié)),輸出值是一個44字(176字節(jié))的一維線性數(shù)組,為初始輪密鑰加階段和其他10輪中的每一輪提供4字的輪秘密鑰,輸入密鑰直接被復(fù)制到擴展密鑰
41、數(shù)組的前四個字,然后每次用四個字填充擴展密鑰數(shù)組余下的部分</p><p> 2.3程序主要代碼分析</p><p><b> ES.vcproj</b></p><p> 這是使用應(yīng)用程序向?qū)傻?VC++ 項目的主項目文件。 </p><p> 它包含生成該文件的 Visual C++ 的版本信息,以及有關(guān)
42、使用應(yīng)用程序向?qū)нx擇的平臺、配置和項目功能的信息。</p><p><b> AES.h</b></p><p> 這是應(yīng)用程序的主要頭文件。它包括其他項目特定的頭文件(包括 Resource.h),并聲明 CAESApp 應(yīng)用程序類。</p><p><b> AES.cpp</b></p><
43、p> 這是包含應(yīng)用程序類 CAESApp 的主要應(yīng)用程序源文件。</p><p><b> AES.rc</b></p><p> 這是程序使用的所有 Microsoft Windows 資源的列表。它包括 RES 子目錄中存儲的圖標(biāo)、位圖和光標(biāo)。此文件可以直接在 Microsoft Visual C++ 中進行編輯。項目資源位于 2052 中。</
44、p><p> res\AES.ico</p><p> 這是用作應(yīng)用程序圖標(biāo)的圖標(biāo)文件。此圖標(biāo)包括在主要資源文件 AES.rc 中。</p><p> res\AES.rc2</p><p> 此文件包含不在 Microsoft Visual C++ 中進行編輯的資源。您應(yīng)該將不可由資源編輯器編輯的所有資源放在此文件中。</p>
45、;<p><b> 2.4程序運行結(jié)果</b></p><p><b> 2.5 安全性分析</b></p><p><b> ?。?)暴力攻擊</b></p><p> 單就密鑰長度來看,AES里面最少128位的密鑰絕對比DES的56位密鑰要安全的多</p><
46、;p><b> ?。?)統(tǒng)計攻擊</b></p><p> 已經(jīng)有很多的測試都無法對AES所產(chǎn)生的密文進行統(tǒng)計攻擊</p><p> ?。?)差分攻擊與線性攻擊</p><p> AES系統(tǒng)目前仍然沒有任何已知的差分攻擊或者線性攻擊存在。</p><p> 2.6設(shè)計實現(xiàn)中的問題及解決方法</p>
47、<p><b> 字符串輸入的問題</b></p><p> 程序起初設(shè)計的是能夠支持字符串的輸入,可是使用scanf()函數(shù)讀入字符串后會造成解密出現(xiàn)錯誤,后來經(jīng)過查找資料和與同學(xué)的交流探討,覺得這個錯誤應(yīng)該是由于scanf()函數(shù)對于不滿足數(shù)組定義長度的字符串的填充方式引起的??墒墙?jīng)過一段時間的修改還是沒有解決問題,最后只好退而求次,將所要進行AES操作的字符串定義在主
48、函數(shù)中,這樣修改后的程序就沒有出現(xiàn)解密的錯誤。</p><p> 三、RSA算法的實現(xiàn)</p><p><b> 3.1算法概述</b></p><p> RSA密碼體制是美國麻省理工學(xué)院(MIT)Rivest、Shami和Adleman于1978年提出來的,它是第一個理論上最為成功的公開密鑰密碼體制,它的安全性基于數(shù)論中的Euler定理
49、和計算復(fù)雜性理論中的下述論斷:求兩個大素數(shù)的乘積是很容易計算的,但要分解兩個大素數(shù)的乘積,求出它們的素數(shù)因子卻是非常困難的,它屬于NP—完全類,是一種冪模運算的加密體制。除了用于加密外,它還能用于數(shù)字簽字和身份認證。下面將從各個方面來詳細對RSA公鑰體制進行研究。</p><p> 3.2算法原理及設(shè)計思想</p><p><b> (1)密鑰的產(chǎn)生</b><
50、;/p><p> 1)選取兩個保密的大素數(shù)p和q;</p><p> 2)計算n=p×q,Φ(n)=(p-1)(q-1),其中Φ(n)是n的歐拉函數(shù)值;</p><p> 3)選一整數(shù)e,滿足1<e<Φ(n), 且gcd(Φ(n),e)=1;</p><p> 4)計算d,滿足d×e=1 modΦ(n),
51、即d是e在模Φ(n)下的乘法逆元,因e與Φ(n)互素,由模運算可知,它的乘法逆元一定存在;</p><p> 5)以{e,n}為公開密鑰,{d,n}為私密鑰。</p><p><b> (2)加密</b></p><p> 加密時首先將明文比特串分組,使得每個分組對應(yīng)的十進制數(shù)小于n,即分組長度小于log2n,然后對每個明文分組m,作加密
52、運算:c=me mod n。</p><p><b> (3)解密</b></p><p> 對密文分組的解密運算為:m=cd mod n。</p><p><b> (4)安全分析</b></p><p> RSA的安全性依賴于大數(shù)分解,但是否等同于大數(shù)分解一直未能得到理論上的證明,因為沒
53、有證明破解 RSA就一定需要作大數(shù)分解。假設(shè)存在一種無須分解大數(shù)的算法,那它肯定可以修改成為大數(shù)分解算法。目前, RSA 的一些變種算法已被證明等價于大數(shù)分解。不管怎樣,分解n是最顯然的攻擊方法?,F(xiàn)在,人們已能分解多個十進制位的大素數(shù)。因此,模數(shù)n 必須選大一些,因具體適用情況而定。</p><p> 3.3程序主要代碼分析</p><p> (1) struct PU {</p
54、><p> Elemtype e;</p><p> Elemtype n;</p><p><b> }</b></p><p><b> 說明:公鑰</b></p><p> (2)struct PR {</p><p> Elemtype
55、 d;</p><p> Elemtype n;</p><p><b> }</b></p><p><b> 說明:私鑰</b></p><p> (3)bool test_prime(Elemtype m)</p><p> 函數(shù)說明:判斷一個數(shù)是否為為素數(shù),
56、返回值為布爾型,true即為素數(shù),反之則不是素數(shù)。</p><p> (4)void switch_to_bit(Elemtype b, Elemtype bin[32])</p><p> 函數(shù)說明:將十進制數(shù)據(jù)轉(zhuǎn)化為二進制數(shù)組。</p><p> (5)Elemtype gcd(Elemtype a, Elemtype b)</p><
57、p> 函數(shù)說明:求最大公約數(shù)。</p><p> (6)Elemtype extend_euclid(Elemtype m, Elemtype bin)</p><p> 函數(shù)說明:用擴展的歐幾里得算法求乘法逆元。</p><p> (7)Elemtype modular_multiplication(Elemtype a, Elemtype b, E
58、lemtype n)</p><p> 函數(shù)說明:快速模冪算法。</p><p> (8)void produce_key()</p><p> 函數(shù)說明:產(chǎn)生密鑰。</p><p> (9)void encrypt()</p><p> 函數(shù)說明:加密函數(shù)。</p><p> (1
59、0)void decrypt()</p><p> 函數(shù)說明:解密函數(shù)。</p><p><b> 3.4程序運行結(jié)果</b></p><p> 1.源代碼運行結(jié)果:</p><p><b> 3.5安全性分析</b></p><p> 目前國內(nèi)外對RSA算法實現(xiàn)的
60、研究大多是在運算速度很高的計算機上,在硬件上也主要采用串行處理,為了提高速度,安全性就必然很差,相反,為提高安全強度,則運算處理速度又會降低。在RSA算法中,最基本的算法主要包括模加、模乘、模逆和模冪運算。大數(shù)運算很費時間,尤其是大整數(shù)的模逆和模冪運算。</p><p> RSA的安全性依賴于大數(shù)分解,但是否等同于大數(shù)分解一直未能得到理論上的證明,因為沒有證明破解 RSA就一定需要作大數(shù)分解。假設(shè)存在一種無須分
61、解大數(shù)的算法,那它肯定可以修改成為大數(shù)分解算法。目前, RSA 的一些變種算法已被證明等價于大數(shù)分解。不管怎樣,分解n是最顯然的攻擊方法?,F(xiàn)在,人們已能分解多個十進制位的大素數(shù)。因此,模數(shù)n 必須選大一些,因具體適用情況而定。n的長度應(yīng)該介于1024bit到2048bit之間。針對RSA最流行的攻擊一般是基于大數(shù)因數(shù)分解。</p><p> RSA的選擇密文攻擊</p><p> RS
62、A在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝( Blind),讓擁有私鑰的實體簽署。然后,經(jīng)過計算就可得到它所想要的信息。這個固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征--每個人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實體不對其他實體任意產(chǎn)生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way HashFunc
63、tion 對文檔作HASH處理,或同時使用不同的簽名算法。</p><p> RSA的公共模數(shù)攻擊</p><p> 若系統(tǒng)中共有一個模數(shù),只是不同的人擁有不同的e和d,系統(tǒng)將是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質(zhì),那么該信息無需私鑰就可得到恢復(fù)。</p><p> 3.6設(shè)計實現(xiàn)中的問題及解決方法</p><
64、;p> ?。?)素數(shù)自動生成的問題</p><p> 對于自動生成素數(shù),首先就想到了使用時間函數(shù)作為種子生成大素數(shù),但是使用時間函數(shù)也不能生成真正的隨機數(shù),因為在同一分鐘內(nèi),依靠時間函數(shù)生成的種子總會出現(xiàn)相同的情況,不過這種相同的情況可以忽略不計。</p><p> (2)大素數(shù)與程序效率問題</p><p> RSA算法本身就存在著效率方面的問題,主要
65、是因為大素數(shù)的生成、大數(shù)的運算和分解造成的。在程序設(shè)計的開始階段,我使用了一些限制條件,主要是對于生成的種子數(shù)大小的限制來限制生成素數(shù)的大小,但是這樣的話雖然會使程序的效率提高,但是不能生成真正意義上的大素數(shù),所以最后為了能夠生成真正的大素數(shù)還是取消掉了那些限制條件。</p><p> ?。?)整數(shù)越界的問題</p><p> 因為程序中會生成的大素數(shù),所以大素數(shù)的乘積會超出int和lo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 密碼學(xué)課程設(shè)計報告
- 密碼學(xué)課程設(shè)計報告
- 應(yīng)用密碼學(xué)課程設(shè)計報告
- 密碼學(xué)課程設(shè)計
- 密碼學(xué)課程設(shè)計—網(wǎng)頁加密技術(shù)
- 密碼學(xué)課程設(shè)計-- 簡單的保密通信系統(tǒng)
- 應(yīng)用密碼學(xué)課程設(shè)計-rsa加密解密的設(shè)計與實現(xiàn)
- 密碼學(xué)實驗報告
- 密碼學(xué)實驗報告
- 《應(yīng)用密碼學(xué)》課程教學(xué)大綱
- 密碼學(xué)實驗----
- 密碼學(xué)答案
- 數(shù)字簽名系統(tǒng)-現(xiàn)代密碼學(xué)課程設(shè)計任務(wù)書
- 古典密碼學(xué)之希爾密碼
- aes密碼學(xué)課程設(shè)計(c語言實現(xiàn))--aes加密解密軟件的實現(xiàn)
- 現(xiàn)代密碼學(xué)論文
- 現(xiàn)代密碼學(xué)基礎(chǔ)課程教學(xué)大綱
- 天津大學(xué)密碼學(xué)課程教學(xué)大綱
- 密碼學(xué)復(fù)習(xí)題
- 《密碼學(xué)》教學(xué)大綱
評論
0/150
提交評論