密碼學(xué)課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  密碼學(xué)課程設(shè)計(jì)報(bào)告</b></p><p><b>  目錄</b></p><p>  1.Hash算法的實(shí)現(xiàn)—MD5算法 3</p><p><b>  1.1算法概述3</b></p><p>  1.2算法原理及設(shè)計(jì)思想3</p

2、><p>  1.3實(shí)現(xiàn)算法分析3</p><p>  1.4程序運(yùn)行結(jié)果4</p><p>  1.5密碼安全性分析4</p><p>  1.6設(shè)計(jì)實(shí)現(xiàn)中的問題及解決方法4</p><p>  2. AES算法的實(shí)現(xiàn)4</p><p>  2.1 算法概述4</p>&

3、lt;p>  2.2 算法原理及設(shè)計(jì)思想5</p><p>  2.3 程序主要代碼分析8</p><p>  2.4 程序運(yùn)行結(jié)果9</p><p>  2.5 安全性分析9</p><p>  2.6 設(shè)計(jì)實(shí)現(xiàn)中的問題及解決方法9</p><p>  3. RSA算法的實(shí)現(xiàn).9</p>

4、<p>  3.1 算法概述10</p><p>  3.2 算法原理及設(shè)計(jì)思想10</p><p>  3.3程序主要算法分析10</p><p>  3.4程序運(yùn)行結(jié)果11</p><p>  3.5安全性分析11</p><p>  3.6 設(shè)計(jì)實(shí)現(xiàn)中的問題及解決方法11</p&g

5、t;<p>  一、Hash算法的實(shí)現(xiàn)——MD5算法</p><p><b>  1.1 算法概述</b></p><p>  MD5算法是一種消息摘要算法,此算法以任意長(zhǎng)度的信息作為輸入進(jìn)行計(jì)算,產(chǎn)生一個(gè)128-bit(16-byte)的指紋或報(bào)文摘要。 兩個(gè)不同的message產(chǎn)生相同message digest的幾率相當(dāng)小,從一個(gè)給定的messag

6、e digest逆向產(chǎn)生原始message更是困難(不過據(jù)說我國(guó)的某個(gè)教授很善于從message digest構(gòu)造message),因此MD5算法適合用在數(shù)字簽名應(yīng)用中。MD5實(shí)現(xiàn)簡(jiǎn)單,在32位的機(jī)器上運(yùn)行速度也相當(dāng)快,當(dāng)然實(shí)際應(yīng)用也不僅僅局 限于數(shù)字簽名。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。</p><p>  1.2算法原理及設(shè)計(jì)思想</p><p&

7、gt;  MD5散列函數(shù)的處理過程分為如下幾步:</p><p>  (1)消息填充:對(duì)原始消息填充,使得其比特長(zhǎng)在模512下余448,即填充后消息的長(zhǎng)度為512的某一倍數(shù)減64.這一步是必需的,即使原始消息的長(zhǎng)度已經(jīng)滿足要求,仍需要填充。例如:消息的長(zhǎng)度正好為448bit,則需要填充512bit,使其長(zhǎng)度為960bit,因此填充的比特?cái)?shù)在1到512之間。填充方式是固定的:第一位為1,其他位為0,例如需要填充10

8、0bit,則填充一個(gè)1和后面附上99個(gè)0。</p><p>  (2)添加消息長(zhǎng)度:在第一步填充后,留有64個(gè)bit位,這64bit用來填充消息被填充前的長(zhǎng)度。如果消息長(zhǎng)度大于264,則以264取模。</p><p>  前兩步完成以后,消息的長(zhǎng)度為512的倍數(shù)(設(shè)倍數(shù)為L(zhǎng))??蓪⑾⒈硎境煞纸M長(zhǎng)為512的一系列分組Y0,Y1,…Yl-1。每一個(gè)512bit分組是16個(gè)(32bit)字,因

9、此消息中的總字?jǐn)?shù)為N=16L。</p><p>  (3)初始化MD緩沖區(qū):MD5算法使用128bit長(zhǎng)的緩沖區(qū)以存儲(chǔ)中間結(jié)果和最終Hash值。緩沖區(qū)可表示為4個(gè)32位長(zhǎng)的寄存器(A,B,C,D),將存儲(chǔ)器初始化為以下的32位整數(shù):A=67452301、B=EFCDAB、C=98BADCFE、D=10325476.每個(gè)寄存器都以little-endian方式存儲(chǔ)數(shù)據(jù),也就是最低有效字節(jié)存儲(chǔ)在低位地址字節(jié)位置,4個(gè)

10、寄存器按如下存儲(chǔ):</p><p>  A=01234567,B=89ABCDEF,C=FEDCBA98,D=7654321</p><p>  (4)以分組為單位進(jìn)行消息處理:每個(gè)分組Ya都經(jīng)過一個(gè)壓縮函數(shù)HMD5處理,包括4輪處理過程,MD5算法是一種迭代型Hash函數(shù),壓縮函數(shù)HMD5是算法的核心。壓縮函數(shù)按如下方式工作:</p><p>  a.四個(gè)輪運(yùn)算的

11、結(jié)構(gòu)相同,但各輪使用不同的基本邏輯函數(shù),我們分別稱之為F、G、H和I;</p><p>  b.每輪的輸入時(shí)當(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相加,相加時(shí)將CVq看作4個(gè)32bit的字,每個(gè)字與第4

12、輪輸出的對(duì)應(yīng)的字按模232相加,相加的結(jié)果就是本輪壓縮函數(shù)的輸出。</p><p>  (5)輸出:消息的所有L個(gè)分組被處理完以后,最后一個(gè)HMD5的輸出即為產(chǎn)生的消息摘要(Hash值)。</p><p><b>  1.3實(shí)現(xiàn)算法分析</b></p><p>  (1)static unsigned char PADDING[64]</

13、p><p>  說明:用于bits填充的緩沖區(qū),要64個(gè)字節(jié),因?yàn)楫?dāng)欲加密的信息的bits數(shù)被512除其余數(shù)為448時(shí),需要填充的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>  說明:這幾個(gè)宏定義是md5算法規(guī)定的,就是對(duì)信息進(jìn)行md5加密都要做的運(yùn)算。 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)左移,移動(dòng)的位數(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:欲加密的信息,可以任意長(zhǎng)</p><p>  inputLe

18、n:指定input的長(zhǎng)度</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ù)說明:對(duì)512bits信息(即block緩沖區(qū))進(jìn)行一次處理,每次處理包括四輪。</p><p>  state[4]:md5結(jié)構(gòu)中的state[4],用于保存對(duì)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ū)的長(zhǎng)度,要求是4的整數(shù)倍</p><p>  (9)static void Decode(UINT4 *output, unsigned char *input,unsigned int len

22、)</p><p>  函數(shù)說明:與上面的函數(shù)正好相反,這一個(gè)把字符形式的緩沖區(qū)中的數(shù)據(jù)copy到4字節(jié)的整數(shù)中(即以整數(shù)形式保存)。</p><p>  output:保存轉(zhuǎn)換出的整數(shù)</p><p>  input:欲轉(zhuǎn)換的字符緩沖區(qū)</p><p>  len:輸入的字符緩沖區(qū)的長(zhǎng)度,要求是4的整數(shù)倍</p><p&

23、gt;<b>  1.4程序運(yùn)行結(jié)果</b></p><p>  (1)源代碼運(yùn)行結(jié)果:</p><p><b>  1.5安全性分析</b></p><p>  MD5算法中,輸出的每一位都是輸入的每一位的函數(shù),邏輯函數(shù)F、G、H、I的復(fù)雜迭代使得輸出對(duì)輸入的依賴非常小。但是,Berson已經(jīng)證明,對(duì)單輪的MD5算法,利

24、用差分密碼分析,可以在合理時(shí)間內(nèi)找出摘要相同的兩條報(bào)文。MD5算法抗密碼分析的能力較弱,對(duì)MD5的生日攻擊所需代價(jià)是需要試驗(yàn)2^64個(gè)消息。</p><p>  2004年8月17日,在美國(guó)加州圣巴巴拉召開的美密會(huì)(Crypto2004)上,中國(guó)的王小云、馮登國(guó)、來學(xué)嘉、于紅波4位學(xué)者宣布,利用差分分析只需1小時(shí)就可找出MD5的碰撞。</p><p>  1.6設(shè)計(jì)實(shí)現(xiàn)中的問題及解決方法&

25、lt;/p><p><b> ?。?)字符輸入問題</b></p><p>  因?yàn)閷?duì)于MD5的實(shí)現(xiàn)使用的是C語言而不是C++,所以在編寫程序的時(shí)候由于對(duì)C的不熟悉出現(xiàn)了關(guān)于字符輸入的問題。在最初的程序編寫時(shí),對(duì)字符輸入沒有使用scanf()函數(shù),而是使用了gets()函數(shù),但是后來發(fā)現(xiàn)gets()函數(shù)功能本身就不完善,容易出現(xiàn)溢出,所以后來就換成了更加穩(wěn)定和實(shí)用的sca

26、nf()函數(shù)。</p><p><b> ?。?)文件拖拽問題</b></p><p>  在設(shè)計(jì)的MD5程序中能夠?qū)崿F(xiàn)字符輸入加密和文件讀取加密兩種功能,在文件讀取中又分成了手動(dòng)輸入文件路徑和拖拽文件至對(duì)話框自動(dòng)獲取文件路徑兩種方式,可是文件拖拽中會(huì)產(chǎn)生雙引號(hào),無法獲取正確格式的文件路徑,后來在CSDN上看到了一篇博客中提到了去除拖拽文件時(shí)出現(xiàn)的雙引號(hào)的方法,后來被

27、我引用到程序里并做了一些改動(dòng),便實(shí)現(xiàn)了去除雙引號(hào),程序代碼如下:</p><p>  if (filename[0]==34)</p><p>  filename[strlen(filename)-1]=0,strcpy(filename,filename+1); //支持文件拖曳,但會(huì)多出雙引號(hào),這里是處理多余的雙引號(hào)</p><p>  二、AES算法的實(shí)現(xiàn)

28、</p><p><b>  2.1 算法概述</b></p><p>  AES加密算法即密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過五年的甄選流程,高級(jí)加密標(biāo)準(zhǔn)由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究

29、院 (NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。</p><p>  AES的基本要求是,采用對(duì)稱分組密碼體制,密鑰長(zhǎng)度的最少支持為128、192、256,分組長(zhǎng)度128位,AES加密數(shù)據(jù)塊大小最大是256bit,但是密鑰大小在理論上沒有上限。AES加密有很多輪的重復(fù)和變換。大致步驟如下:1、密鑰擴(kuò)展(KeyExpansion),2、初始輪(Init

30、ial Round),3、重復(fù)輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。</p><p>  2.2算法原理及設(shè)計(jì)思想</p><p><b>  1、加密原理</b></p><p>  AES具有

31、128bits的分組長(zhǎng)度,三種可選的密鑰長(zhǎng)度,即128比特、192比特、256比特。AES是一個(gè)迭代型密碼;輪數(shù)Nr依賴于密鑰長(zhǎng)度。如果密鑰長(zhǎng)度為128比特,則Nr=10;如果密鑰長(zhǎng)度為192比特,則Nr=12;如果密鑰長(zhǎng)度為256比特,則Nr=14。</p><p>  首先,AES的總體描述如下:</p><p>  1、給定一個(gè)明文x,將state初始化為x,并進(jìn)行AddRoundK

32、ey操作,將RoundKey與state進(jìn)行異或操作。</p><p>  2、對(duì)前Nr-1輪中的每一輪,用S盒對(duì)state進(jìn)行一次代換操作,稱為SubBytes;對(duì)state做一置換ShiftRows;再對(duì)State做一次MixColumns操作;然后進(jìn)行AddRoundKey操作。</p><p>  3、依次進(jìn)行SubBytes、ShiftRows和AddRoundKey操作。<

33、;/p><p>  4、將state定義為密文y。</p><p>  從上述總體描述中,我們可以看到AES與我們所熟知的SPN在許多方面均有相似之處。在這兩種密碼體制的每一輪中,都要進(jìn)行輪密鑰混合、代換和置換。這兩個(gè)密碼都包括白化過程,而AES更“大”一些,它還在每一輪中包括一個(gè)額外的線性變換MixColumns。</p><p><b>  2、解密原理&

34、lt;/b></p><p>  為了解密,只需將所有的操作逆序進(jìn)行,并逆序使用密鑰編排方案即可。另外,操作ShiftRows、SubBytes以及MixColumns均需要他們的逆操作來代替(操作AddRoundKey的逆操作就是它自己)。構(gòu)造一個(gè)AES的“等價(jià)逆密碼”在理論上是可能的,在這里我也是采用了這種方式。這個(gè)“等價(jià)逆密碼”能通過一系列的逆操作來實(shí)現(xiàn)AES的解密,這些逆操作將以與AES加密相同的順

35、序進(jìn)行,這樣做可以在一定程度上提高實(shí)現(xiàn)效率。</p><p>  在該程序中,工作模式采用了電碼本模式(ECB)。電碼本模式就是一個(gè)分組密碼的直接使用:給定一個(gè)128位的明文分組序列:x1x2……,每一個(gè)xi都用同一個(gè)密鑰K來加密,產(chǎn)生密文分組序列y1y2……。</p><p> ?。?)首先將明文以字節(jié)為單位進(jìn)行處理,以128位分組、128位的密鑰為例。先將明文按字節(jié)分成列組,將明文的前

36、四字節(jié)組成一列,接下來的4個(gè)字節(jié)組成第二列,后面的字節(jié)依次組成第三列和第四列,則組成了一個(gè)4乘4的矩陣。</p><p> ?。?)AES也是由基本的變換單位“輪”多次迭代而成的。AES的輪變換由四個(gè)不同的變換組成:</p><p><b>  1)字節(jié)代替變換</b></p><p>  非線性的字節(jié)替代,單獨(dú)處理每個(gè)字節(jié):</p>

37、;<p>  求該字節(jié)在有限域GF(28)上的乘法逆,"0"被映射為自身,即對(duì)于α∈GF(28),求β∈GF(28),</p><p>  使得α?β=β?α=1mod(x8+x4+x2+x+1)。</p><p>  對(duì)上一步求得的乘法逆作仿射變換</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個(gè)字節(jié),第2行循環(huán)

39、左移2個(gè)字節(jié),第3行循環(huán)左移3個(gè)字節(jié)。</p><p>  3)列混合變換(最后一輪中沒有)</p><p><b>  逐列混合,方法:</b></p><p><b>  矩陣表示形式:</b></p><p><b>  4)與子密鑰異或</b></p>&

40、lt;p>  只是簡(jiǎn)單的將密鑰按位異或到一個(gè)狀態(tài)上。每輪加密密鑰按順序取自擴(kuò)展密鑰,擴(kuò)展密鑰是由初始密鑰擴(kuò)展而成。</p><p><b>  密鑰擴(kuò)展:</b></p><p>  AES密鑰擴(kuò)展算法輸入值是4字(16字節(jié)),輸出值是一個(gè)44字(176字節(jié))的一維線性數(shù)組,為初始輪密鑰加階段和其他10輪中的每一輪提供4字的輪秘密鑰,輸入密鑰直接被復(fù)制到擴(kuò)展密鑰

41、數(shù)組的前四個(gè)字,然后每次用四個(gè)字填充擴(kuò)展密鑰數(shù)組余下的部分</p><p>  2.3程序主要代碼分析</p><p><b>  ES.vcproj</b></p><p>  這是使用應(yīng)用程序向?qū)傻?VC++ 項(xiàng)目的主項(xiàng)目文件。 </p><p>  它包含生成該文件的 Visual C++ 的版本信息,以及有關(guān)

42、使用應(yīng)用程序向?qū)нx擇的平臺(tái)、配置和項(xiàng)目功能的信息。</p><p><b>  AES.h</b></p><p>  這是應(yīng)用程序的主要頭文件。它包括其他項(xià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 子目錄中存儲(chǔ)的圖標(biāo)、位圖和光標(biāo)。此文件可以直接在 Microsoft Visual C++ 中進(jìn)行編輯。項(xiàng)目資源位于 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++ 中進(jìn)行編輯的資源。您應(yīng)該將不可由資源編輯器編輯的所有資源放在此文件中。</p>

45、;<p><b>  2.4程序運(yùn)行結(jié)果</b></p><p><b>  2.5 安全性分析</b></p><p><b> ?。?)暴力攻擊</b></p><p>  單就密鑰長(zhǎng)度來看,AES里面最少128位的密鑰絕對(duì)比DES的56位密鑰要安全的多</p><

46、;p><b> ?。?)統(tǒng)計(jì)攻擊</b></p><p>  已經(jīng)有很多的測(cè)試都無法對(duì)AES所產(chǎn)生的密文進(jìn)行統(tǒng)計(jì)攻擊</p><p> ?。?)差分攻擊與線性攻擊</p><p>  AES系統(tǒng)目前仍然沒有任何已知的差分攻擊或者線性攻擊存在。</p><p>  2.6設(shè)計(jì)實(shí)現(xiàn)中的問題及解決方法</p>

47、<p><b>  字符串輸入的問題</b></p><p>  程序起初設(shè)計(jì)的是能夠支持字符串的輸入,可是使用scanf()函數(shù)讀入字符串后會(huì)造成解密出現(xiàn)錯(cuò)誤,后來經(jīng)過查找資料和與同學(xué)的交流探討,覺得這個(gè)錯(cuò)誤應(yīng)該是由于scanf()函數(shù)對(duì)于不滿足數(shù)組定義長(zhǎng)度的字符串的填充方式引起的??墒墙?jīng)過一段時(shí)間的修改還是沒有解決問題,最后只好退而求次,將所要進(jìn)行AES操作的字符串定義在主

48、函數(shù)中,這樣修改后的程序就沒有出現(xiàn)解密的錯(cuò)誤。</p><p>  三、RSA算法的實(shí)現(xiàn)</p><p><b>  3.1算法概述</b></p><p>  RSA密碼體制是美國(guó)麻省理工學(xué)院(MIT)Rivest、Shami和Adleman于1978年提出來的,它是第一個(gè)理論上最為成功的公開密鑰密碼體制,它的安全性基于數(shù)論中的Euler定理

49、和計(jì)算復(fù)雜性理論中的下述論斷:求兩個(gè)大素?cái)?shù)的乘積是很容易計(jì)算的,但要分解兩個(gè)大素?cái)?shù)的乘積,求出它們的素?cái)?shù)因子卻是非常困難的,它屬于NP—完全類,是一種冪模運(yùn)算的加密體制。除了用于加密外,它還能用于數(shù)字簽字和身份認(rèn)證。下面將從各個(gè)方面來詳細(xì)對(duì)RSA公鑰體制進(jìn)行研究。</p><p>  3.2算法原理及設(shè)計(jì)思想</p><p><b>  (1)密鑰的產(chǎn)生</b><

50、;/p><p>  1)選取兩個(gè)保密的大素?cái)?shù)p和q;</p><p>  2)計(jì)算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)計(jì)算d,滿足d×e=1 modΦ(n),

51、即d是e在模Φ(n)下的乘法逆元,因e與Φ(n)互素,由模運(yùn)算可知,它的乘法逆元一定存在;</p><p>  5)以{e,n}為公開密鑰,{d,n}為私密鑰。</p><p><b>  (2)加密</b></p><p>  加密時(shí)首先將明文比特串分組,使得每個(gè)分組對(duì)應(yīng)的十進(jìn)制數(shù)小于n,即分組長(zhǎng)度小于log2n,然后對(duì)每個(gè)明文分組m,作加密

52、運(yùn)算:c=me mod n。</p><p><b>  (3)解密</b></p><p>  對(duì)密文分組的解密運(yùn)算為:m=cd mod n。</p><p><b>  (4)安全分析</b></p><p>  RSA的安全性依賴于大數(shù)分解,但是否等同于大數(shù)分解一直未能得到理論上的證明,因?yàn)闆]

53、有證明破解 RSA就一定需要作大數(shù)分解。假設(shè)存在一種無須分解大數(shù)的算法,那它肯定可以修改成為大數(shù)分解算法。目前, RSA 的一些變種算法已被證明等價(jià)于大數(shù)分解。不管怎樣,分解n是最顯然的攻擊方法?,F(xiàn)在,人們已能分解多個(gè)十進(jìn)制位的大素?cái)?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ù)說明:判斷一個(gè)數(shù)是否為為素?cái)?shù),

56、返回值為布爾型,true即為素?cái)?shù),反之則不是素?cái)?shù)。</p><p>  (4)void switch_to_bit(Elemtype b, Elemtype bin[32])</p><p>  函數(shù)說明:將十進(jìn)制數(shù)據(jù)轉(zhuǎn)化為二進(jì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ù)說明:用擴(kuò)展的歐幾里得算法求乘法逆元。</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程序運(yùn)行結(jié)果</b></p><p>  1.源代碼運(yùn)行結(jié)果:</p><p><b>  3.5安全性分析</b></p><p>  目前國(guó)內(nèi)外對(duì)RSA算法實(shí)現(xiàn)的

60、研究大多是在運(yùn)算速度很高的計(jì)算機(jī)上,在硬件上也主要采用串行處理,為了提高速度,安全性就必然很差,相反,為提高安全強(qiáng)度,則運(yùn)算處理速度又會(huì)降低。在RSA算法中,最基本的算法主要包括模加、模乘、模逆和模冪運(yùn)算。大數(shù)運(yùn)算很費(fèi)時(shí)間,尤其是大整數(shù)的模逆和模冪運(yùn)算。</p><p>  RSA的安全性依賴于大數(shù)分解,但是否等同于大數(shù)分解一直未能得到理論上的證明,因?yàn)闆]有證明破解 RSA就一定需要作大數(shù)分解。假設(shè)存在一種無須分

61、解大數(shù)的算法,那它肯定可以修改成為大數(shù)分解算法。目前, RSA 的一些變種算法已被證明等價(jià)于大數(shù)分解。不管怎樣,分解n是最顯然的攻擊方法?,F(xiàn)在,人們已能分解多個(gè)十進(jìn)制位的大素?cái)?shù)。因此,模數(shù)n 必須選大一些,因具體適用情況而定。n的長(zhǎng)度應(yīng)該介于1024bit到2048bit之間。針對(duì)RSA最流行的攻擊一般是基于大數(shù)因數(shù)分解。</p><p>  RSA的選擇密文攻擊</p><p>  RS

62、A在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝( Blind),讓擁有私鑰的實(shí)體簽署。然后,經(jīng)過計(jì)算就可得到它所想要的信息。這個(gè)固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征--每個(gè)人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實(shí)體不對(duì)其他實(shí)體任意產(chǎn)生的信息解密,不對(duì)自己一無所知的信息簽名;另一條是決不對(duì)陌生人送來的隨機(jī)文檔簽名,簽名時(shí)首先使用One-Way HashFunc

63、tion 對(duì)文檔作HASH處理,或同時(shí)使用不同的簽名算法。</p><p>  RSA的公共模數(shù)攻擊</p><p>  若系統(tǒng)中共有一個(gè)模數(shù),只是不同的人擁有不同的e和d,系統(tǒng)將是危險(xiǎn)的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質(zhì),那么該信息無需私鑰就可得到恢復(fù)。</p><p>  3.6設(shè)計(jì)實(shí)現(xiàn)中的問題及解決方法</p><

64、;p> ?。?)素?cái)?shù)自動(dòng)生成的問題</p><p>  對(duì)于自動(dòng)生成素?cái)?shù),首先就想到了使用時(shí)間函數(shù)作為種子生成大素?cái)?shù),但是使用時(shí)間函數(shù)也不能生成真正的隨機(jī)數(shù),因?yàn)樵谕环昼妰?nèi),依靠時(shí)間函數(shù)生成的種子總會(huì)出現(xiàn)相同的情況,不過這種相同的情況可以忽略不計(jì)。</p><p> ?。?)大素?cái)?shù)與程序效率問題</p><p>  RSA算法本身就存在著效率方面的問題,主要

65、是因?yàn)榇笏財(cái)?shù)的生成、大數(shù)的運(yùn)算和分解造成的。在程序設(shè)計(jì)的開始階段,我使用了一些限制條件,主要是對(duì)于生成的種子數(shù)大小的限制來限制生成素?cái)?shù)的大小,但是這樣的話雖然會(huì)使程序的效率提高,但是不能生成真正意義上的大素?cái)?shù),所以最后為了能夠生成真正的大素?cái)?shù)還是取消掉了那些限制條件。</p><p> ?。?)整數(shù)越界的問題</p><p>  因?yàn)槌绦蛑袝?huì)生成的大素?cái)?shù),所以大素?cái)?shù)的乘積會(huì)超出int和lo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論