第一篇:密碼學(xué)課程設(shè)計(jì)報(bào)告
密碼學(xué)課程設(shè)計(jì)報(bào)告
密碼學(xué) 課程設(shè)計(jì)報(bào)告
信息安全07-3班
2010年6月25日
密碼學(xué)課程設(shè)計(jì)報(bào)告
目錄
目錄................................................................................................................2 第1章 分組密碼算法DES..........................................................................3
1.1實(shí)驗(yàn)內(nèi)容.........................................................................................3 1.2分組密碼DES的基本原理.............................................................3 1.3關(guān)鍵算法解析.................................................................................5 1.4實(shí)驗(yàn)結(jié)果及分析.............................................................................5 1.5實(shí)驗(yàn)小結(jié).........................................................................................6 第2章 消息摘要算法MD5.........................................................................7
2.1實(shí)驗(yàn)內(nèi)容.........................................................................................7 2.2 MD5算法的基本原理.....................................................................7 2.3關(guān)鍵算法解析.................................................................................8 2.4實(shí)驗(yàn)結(jié)果及分析.............................................................................9 2.5實(shí)驗(yàn)小結(jié).......................................................................................10 第3章 公鑰密碼算法RSA........................................................................10
3.1實(shí)驗(yàn)內(nèi)容.......................................................................................10 3.2算法的基本原理...........................................................................10 3.3關(guān)鍵算法解析...............................................................................11 3.4實(shí)驗(yàn)結(jié)果及分析...........................................................................12 3.5實(shí)驗(yàn)小結(jié).......................................................................................13 第4章 橢圓曲線密碼算法.......................................................................14
4.1實(shí)驗(yàn)內(nèi)容.......................................................................................14 4.2橢圓曲線密碼體制概述...............................................................14 4.3橢圓曲線上運(yùn)算的實(shí)現(xiàn)...............................................................15 4.4ECC加解密算法.............................................................................17 4.5ECC加解密算法的實(shí)現(xiàn).................................................................18 4.6實(shí)驗(yàn)小結(jié).......................................................................................19 第5章 結(jié)束語...........................................................................................19
附件一:DES源代碼 附件二:MD5源代碼 附件三:RSA源代碼 附件四:ECC源代碼
密碼學(xué)課程設(shè)計(jì)報(bào)告
第1章 分組密碼算法DES 1.1實(shí)驗(yàn)內(nèi)容
通過實(shí)現(xiàn)DES算法,加深對(duì)DES算法的理解,同時(shí)學(xué)習(xí)組合密碼常用的代換、移位等運(yùn)算的實(shí)現(xiàn)。
1.2分組密碼DES的基本原理
1.2.1對(duì)稱加密算法
對(duì)稱加密算法有時(shí)又叫做傳統(tǒng)密碼算法,加密密鑰可以從解密密鑰中推導(dǎo)出來,解密密鑰也可以從加密密鑰中推導(dǎo)出來。在大多數(shù)的對(duì)稱算法中,加密密鑰和解密密鑰是相同的,因此也成為秘密密鑰算法或者單密鑰算法。它要求發(fā)送發(fā)和接收方在安全通信之前先商定一個(gè)密鑰。對(duì)稱算法的安全性依賴于密鑰,所以密鑰的保密性對(duì)通信至關(guān)重要。對(duì)稱加密算法主要有分組加密和流加密兩類。分組加密是指將明文分成固定商都的組,用同一密鑰分別對(duì)每一組加密,輸出固定長(zhǎng)度的密文,典型代表:DES、3DES、IDEA。
1.2.2DES的加密流程
DES加密算法是分組加密算法,明文以64位為單位分成塊。64位數(shù)據(jù)在64位密鑰的控制下,經(jīng)過初始變換后,進(jìn)行16輪加密迭代:64位數(shù)據(jù)被分成左右兩半部分,每部分32位,密鑰與右半部分相結(jié)合,然后再與左半部分相結(jié)合,結(jié)果作為新的右半部分;結(jié)合前的右半部分作為新的左半部分。這一系列步驟組成一輪。這種輪換要重復(fù)16次。最后一輪之后,再進(jìn)行初始置換的逆置換,就得到了64位的密文。
64位明文
初始置換IP16輪迭代運(yùn)算逆初始置換64位密文密碼學(xué)課程設(shè)計(jì)報(bào)告
DES的加密過程可分為加密處理,加密變換和子密鑰生成幾個(gè)部分組成。
1.加密處理過程
(1)初始變換。加密處理首先要對(duì)64位的明文按表1所示的初始換位表IP進(jìn)行變換。表中的數(shù)值表示輸入位被置換后的新位置。例如輸入的第58位,在輸出的時(shí)候被置換到第1位;輸入的是第7位,在輸出時(shí)被置換到第64位。
(2)加密處理。上述換位處理的輸出,中間要經(jīng)過16輪加密變換。初始換位的64位的輸出作為下一次的輸入,將64位分為左、右兩個(gè)32位,分別記為L(zhǎng)0和R0,從L0、R0到L16、R16,共進(jìn)行16輪加密變換。其中,經(jīng)過n輪處理后的點(diǎn)左右32位分別為L(zhǎng)n和Rn,則可做如下定義:
Ln=Rn-1 Rn=Ln-1
其中,kn是向第n輪輸入的48位的子密鑰,Ln-1和Rn-1分別是第n-1輪的輸出,f是Mangler函數(shù)。
(3)最后換位。進(jìn)行16輪的加密變換之后,將L16和R16合成64位的數(shù)據(jù),再按照表2所示的最后換位表進(jìn)行IP-1的換位,得到64位的密文,這就是DES算法加密的結(jié)果。
2.加密變換過程
通過重復(fù)某些位將32位的右半部分按照擴(kuò)展表3擴(kuò)展換位表擴(kuò)展為48位,而56位的密鑰先移位然后通過選擇其中的某些位減少至48位,48位的右半部分通過異或操作和48位的密鑰結(jié)合,并分成6位的8個(gè)分組,通過8個(gè)S-盒將這48位替代成新的32位數(shù)據(jù),再將其置換一次。這些S-盒輸入6位,輸出4位。
3.子密鑰生成過程
密碼學(xué)課程設(shè)計(jì)報(bào)告
鑰通常表示為64位的自然數(shù),首先通過壓縮換位PC-1去掉每個(gè)字節(jié)的第8位,用作奇偶校驗(yàn),因此,密鑰去掉第8、16、24??64位減至56位,所以實(shí)際密鑰長(zhǎng)度為56位,而每輪要生成48位的子密鑰。
4.解密處理過程
從密文到明文的解密過程可采用與加密完全相同的算法。不過解密要用加密的逆變換,就是把上面的最后換位表和初始換位表完全倒過來變換。這里不再贅述。
1.3關(guān)鍵算法解析
算法實(shí)現(xiàn)過程中主要用到了一下幾個(gè)函數(shù):
? int CharToNum(char c)//將字符轉(zhuǎn)化成數(shù)字。
? char* encrypt(char pw[],char key[],bool jiami);//加密函數(shù)
//參數(shù):char pw[]明文,char key[]密鑰,bool jiami標(biāo)志為(1表示加密,0表示解密)
? char* HexToStr(char ch[])//16進(jìn)制轉(zhuǎn)化成字符串
? bool IsNum(char c)//判斷一個(gè)字符是否是數(shù)字的形式 ? void LS(int n)
//密鑰左移函數(shù),參數(shù)n是左移多少位 ? char NumToHex(int x)
//轉(zhuǎn)化成16進(jìn)制
? char *StrToHex(char *ch)//字符串轉(zhuǎn)化為16進(jìn)制
1.4實(shí)驗(yàn)結(jié)果及分析
輸入任意長(zhǎng)度的字符串,計(jì)算出加密結(jié)果;對(duì)密文進(jìn)行解密,得到還原出的明文和輸入相同,驗(yàn)證了程序的正確性。
首先實(shí)現(xiàn)了DES的加解密功能,命令行形式運(yùn)行結(jié)果如圖所示:
密碼學(xué)課程設(shè)計(jì)報(bào)告
然后,我把它改成了圖形界面的形式,加入了程序的使用說明。改進(jìn)之后的效果如圖所示:
1.5實(shí)驗(yàn)小結(jié)
通過實(shí)現(xiàn)DES算法,加深了對(duì)分組密碼算法的理解,對(duì)DES的加解密流程也有了更加清晰的認(rèn)識(shí)。
DES算法是通過不斷的混亂和擴(kuò)散來實(shí)現(xiàn)其安全性的,所以加密算法比較復(fù)雜。在編程中,首先弄清楚加密的流程,然后知道每個(gè)函數(shù)的功能,就能夠?qū)崿F(xiàn)了??梢妶?jiān)固的理論基礎(chǔ)是實(shí)踐的前提。
這次實(shí)驗(yàn)中,我首先用VC++ console程序?qū)崿F(xiàn)了加解密的功能。為了美化界面,又使用MFC將程序改成了圖形界面的形式。動(dòng)手實(shí)踐的過程也是一個(gè)不斷積累經(jīng)驗(yàn)的過程,希望能在以后的實(shí)驗(yàn)中不斷的增強(qiáng)自己包括算法、應(yīng)用等各方面的編程能力。
密碼學(xué)課程設(shè)計(jì)報(bào)告
第2章 消息摘要算法MD5 2.1實(shí)驗(yàn)內(nèi)容
掌握消息摘要算法的基本原理,實(shí)現(xiàn)用MD5對(duì)任意消息長(zhǎng)度和文件進(jìn)行計(jì)算消息摘要。
2.2 MD5算法的基本原理
2.2.1MD5算法概述
MD5是由Ron Rivest 設(shè)計(jì)的單向散列函數(shù)。MD表示消息摘要(message digest),對(duì)于輸入的任意長(zhǎng)度消息,算法產(chǎn)生128位的散列值(或消息摘要)。由于MD5算法的散列值計(jì)算的快速性和很高的安全強(qiáng)度,使它成為目前比較流行的散列算法。
2.2.2MD5算法流程
MD5算法以任意長(zhǎng)度的信息作為輸入,其處理操作包括以下幾個(gè)步驟: 1)消息填充:對(duì)輸入信息進(jìn)行填充使信息的長(zhǎng)度(比特?cái)?shù))448模512同余(長(zhǎng)度=448mod512),填充的最高位為1,其余位為0。
2)添加消息長(zhǎng)度:將用64位表示的初始信息(填充前)的位長(zhǎng)度附加在步驟I的結(jié)果后(低位字節(jié)優(yōu)先)。如果初始長(zhǎng)度大于64,僅使用該長(zhǎng)度的低64位。這樣,該域所包含的長(zhǎng)度值為初始信息長(zhǎng)度模64的值。前兩步的結(jié)果將產(chǎn)生一個(gè)長(zhǎng)度為512整數(shù)倍比特的信息。經(jīng)擴(kuò)展的信息表示成512bit的分組序列Y0,Y1,?,YL?1,擴(kuò)展信息的長(zhǎng)度等于512?L。
3)初始化MD5的緩存:使用一個(gè)128bit的緩存來存放該散列算法的中間及最終結(jié)果。該緩存表示為4個(gè)32bit的寄存器(A,B,C,D),這些寄存器被初始化為如下32bit長(zhǎng)的整數(shù):A=67452301;B=EFCDAB84; C=48BADCFE;D=10325476。這些值以小數(shù)在前的格式存儲(chǔ),即字的低位字節(jié)放在低地址字節(jié)上。
4)以分組為單位進(jìn)行消息處理:算法的核心是包含4個(gè)“循環(huán)”的壓縮函數(shù)。4個(gè)循環(huán)有相似的結(jié)構(gòu),但每次循環(huán)使用不同的原始邏輯函數(shù),在說明中分別表示為F、G、H和I。每一循環(huán)都以當(dāng)前的I在處理的512bit分組(q)和128bit的緩存值A(chǔ)BCD為輸入,然后更新緩存的內(nèi)容。每個(gè)循環(huán)還使用一個(gè)64元素表T?0?64?的四分之一,該表通過正弦函數(shù)構(gòu)建。T的第i個(gè)元素(表示為T?i?)的值等于232?abs?sin?i??的整數(shù)部分值,其中i的單位是弧度。因?yàn)閍bs?sin?i??是0到1之間的數(shù),因此每個(gè)T的元素值均能用32bit表示。這個(gè)表提供了一個(gè)“隨機(jī)化”的32bit模式集,它將消除輸入數(shù)據(jù)的任何規(guī)律性。第四次循環(huán)的輸出加到第一次循環(huán)的輸入(CVq)上產(chǎn)生CVq?1。
Y密碼學(xué)課程設(shè)計(jì)報(bào)告
5)輸出:所有L個(gè)512bit的分組處理完成后,最后一個(gè)輸出即為產(chǎn)生的消息摘要。
2.3關(guān)鍵算法解析
關(guān)鍵步驟:對(duì)二進(jìn)制文件計(jì)算消息摘要 ? 讀取第一行,計(jì)算消息摘要;
? 每次讀取后將該行加到已經(jīng)計(jì)算的消息摘要之后,對(duì)這個(gè)整體再計(jì)算消息摘要;
? 重復(fù)該過程,直至將整個(gè)文件的內(nèi)容全部讀取完; ? 最后得到的消息摘要就是整個(gè)文件的消息摘要。
? 文件的操作:
? 打開文件:在fstream類中,有一個(gè)成員函數(shù)open(),就是用來打開文件的,其原型是: void open(const char* filename,int mode,int access);參數(shù): filename:要打開的文件名,mode:要打開文件的方式,access:打開文件的屬性。
? 關(guān)閉文件:打開的文件使用完成后一定要關(guān)閉,fstream提供了成員函數(shù)close()來完成此操作,如:file1.close();就把file1相連的文件關(guān)閉。
? 清除文件標(biāo)志:重復(fù)使用ifstream文件指針時(shí),應(yīng)該在文件關(guān)閉后,使
密碼學(xué)課程設(shè)計(jì)報(bào)告
用ifstream.clear(),否則可能會(huì)引起文件打開失敗的錯(cuò)誤。此外,讀到文件最后一行時(shí),如果想繼續(xù)讀取文件前面的數(shù)也應(yīng)該,采用clear()函數(shù)清除文件末尾標(biāo)志。? getline函數(shù)
getline是string類對(duì)象的成員函數(shù),屬于string IO 操作,用于讀取整行文本。函數(shù)原型:getline(cin,str);參數(shù):cin:輸入流,str:string對(duì)象
getline函數(shù)從輸入流的下一行讀取,并保存讀取的內(nèi)容到str中,但不包括換行符。和輸入操作符cin不同的是,getline要在輸入第二個(gè)字符串后用cout輸出str字符串顯示的是第一個(gè)字符串,之后繼續(xù)對(duì)getline操作,cout才顯示第二個(gè)字符串。
2.4實(shí)驗(yàn)結(jié)果及分析
主要功能:
1、對(duì)任意長(zhǎng)度的字符串計(jì)算消息摘要;
2、對(duì)任意格式的文件計(jì)算消息摘要。
對(duì)任意長(zhǎng)度的字符串計(jì)算消息摘要
對(duì)任意格式的文件計(jì)算消息摘要
密碼學(xué)課程設(shè)計(jì)報(bào)告
2.5實(shí)驗(yàn)小結(jié)
在此次實(shí)驗(yàn)中,掌握了消息摘要算法的基本原理,實(shí)現(xiàn)了用MD5對(duì)任意消息長(zhǎng)度和文件進(jìn)行計(jì)算消息摘要。
這次實(shí)驗(yàn)最大的收獲是學(xué)會(huì)了getline函數(shù)以及對(duì)二進(jìn)制文件的一些操作,總結(jié)了ofstream和ifstream的一些詳細(xì)用法,希望在以后需要用到文件I/O操作的時(shí)候可以熟練運(yùn)用。
第3章 公鑰密碼算法RSA 3.1實(shí)驗(yàn)內(nèi)容
編程實(shí)現(xiàn)RSA算法,加深對(duì)RSA算法以及公鑰密碼體制的理解。
3.2算法的基本原理
3.2.1RSA算法描述
RSA密碼是一種應(yīng)用廣泛的公鑰密碼,它的安全性基于大整數(shù)分解的困難性,RSA密碼既可用于加密,又可用于數(shù)字簽名。對(duì)RSA的加解密算法描述如下:
(1)密鑰的產(chǎn)生
? 獨(dú)立地選取兩大素?cái)?shù)p和q(各100~200位十進(jìn)制數(shù)字); ? 計(jì)算 n=p×q,其歐拉函數(shù)值?(n)=(p-1)(q-1); ? 隨機(jī)選一整數(shù)e,1?e(n),gcd(?(n), e)=1; ? 在模?(n)下,計(jì)算e的有逆元d=e-1 mod ?(n);
? 以n,e為公鑰。私鑰為d。(p, q)不再需要,可以銷毀。
(2)加密
將明文分組,各組對(duì)應(yīng)的十進(jìn)制數(shù)小于n,對(duì)每個(gè)明文分組m,做加密運(yùn)算:c=me
mod n。
(3)解密
對(duì)密文分組的解密運(yùn)算: m=cd mod n 3.2.2安全性分析
? RSA的安全性是基于分解大整數(shù)的困難性假定(尚未證明分解大整數(shù)是NP問題);
? 如果分解n=p×q,則立即獲得?(n)=(p-1)(q-1),從而能夠確定e的模?(n)乘法逆d;
? 由n直接求?(n)等價(jià)于分解n。
密碼學(xué)課程設(shè)計(jì)報(bào)告
3.2.3RSA的實(shí)現(xiàn)
1)大素?cái)?shù)的產(chǎn)生 ? 試除法 ? 費(fèi)馬法
? Rabin-Miller算法
(未通過檢測(cè)的整數(shù)一定是合數(shù),但并非所有通過檢測(cè)的整數(shù)都是素?cái)?shù),實(shí)用最廣泛,是一種概率算法)2)求乘法逆元:擴(kuò)展的歐幾里得算法
3)快速指數(shù)計(jì)算:(利用反復(fù)平方乘算法,每次乘法運(yùn)算后就取模)3.3關(guān)鍵算法解析
3.3.1主要函數(shù)說明
本算法的實(shí)現(xiàn)過程中主要用到以下函數(shù),在此進(jìn)行說明。1)素性測(cè)試:bool IsPrime(long e)函數(shù)
用戶輸入大素?cái)?shù)p和q,采用試除法進(jìn)行測(cè)試輸入的是否是素?cái)?shù),如果測(cè)試不通過則重新輸入。
2)歐幾里得算法:int Euclid(int a,int n)該函數(shù)用來求兩數(shù)的最大公約數(shù)。用戶根據(jù)提示選擇公鑰e輸入,調(diào)用函數(shù)int Euclid(int a,int n)求e和f(n)的最大公約數(shù),如果最大公約數(shù)是1,則e和f(n)互素,e可以作為公鑰,否則給出提示重新輸入。
3)擴(kuò)展的歐幾里得算法:double extenEuclid(double a,double n)該函數(shù)用來求e的模j(n)乘法逆d,d是私鑰。
4)快速指數(shù)計(jì)算:double quickindex1(double a,double m,double n)利用反復(fù)平方乘算法,每次乘法運(yùn)算后就取模。用于加解密運(yùn)算:c=me mod n,m=cd mod n。
3.3.2關(guān)鍵代碼分析
篇幅所限,僅在此敘述計(jì)算a^b mod n的算法和快速取模指數(shù)算法。該算法的基本原理和過程如下:
密碼學(xué)課程設(shè)計(jì)報(bào)告
該算法的具體代碼及分析如下:
3.4實(shí)驗(yàn)結(jié)果及分析
運(yùn)行程序,根據(jù)提示輸入明文字符串,程序先將明文轉(zhuǎn)換成ASCII碼形式。密鑰生成:根據(jù)提示輸入兩個(gè)素?cái)?shù)p和q,程序進(jìn)行素性測(cè)試,如果p和q不是素?cái)?shù),提示重新輸入。根據(jù)提示輸入公鑰e。這樣就產(chǎn)生出一對(duì)密鑰:公鑰(e,n)和私鑰(d,n),其中n=p*q。
加密部分:用公鑰將ASCII碼加密成密文并輸出到屏幕上。
解密部分:用私鑰將密文進(jìn)行解密計(jì)算,輸出解密后的ASCII碼形式的一串?dāng)?shù)字。最后將ASCII碼轉(zhuǎn)換成字符串。
程序運(yùn)行結(jié)果顯示,解密后得到的結(jié)果與輸入的明文相同,驗(yàn)證了程序的正確性。
密碼學(xué)課程設(shè)計(jì)報(bào)告
3.5實(shí)驗(yàn)小結(jié)
(1)這次實(shí)驗(yàn)中,用VC編碼成功的實(shí)現(xiàn)了RSA算法。本程序中使用到了一些算法,在實(shí)現(xiàn)過程中需要將多門課程的知識(shí)綜合運(yùn)用。
(2)通過動(dòng)手編碼,我對(duì)RSA的算法流程有了更深刻了理解。RSA算法比較簡(jiǎn)單,容易理解和實(shí)現(xiàn),所以RSA作為公鑰密碼應(yīng)用非常廣泛。但是由于進(jìn)行的都是大數(shù)計(jì)算,使得RSA最快的情況也比DES慢上好幾倍,無論是軟件還是硬件實(shí)現(xiàn)。速度一直是RSA的缺陷。一般來說只用于少量數(shù)據(jù)加密。
(3)程序?qū)崿F(xiàn)過程中總結(jié)了很多技巧,比如使用了vector,體會(huì)到C++編程中適時(shí)的使用STL是很方便的;而且平方乘算法中將十進(jìn)制轉(zhuǎn)換為二進(jìn)制的方法也很巧妙。
密碼學(xué)課程設(shè)計(jì)報(bào)告
第4章 橢圓曲線密碼算法
4.1實(shí)驗(yàn)內(nèi)容
編程實(shí)現(xiàn)橢圓曲線上的基本運(yùn)算,實(shí)現(xiàn)橢圓曲線上的加解密,加深對(duì)橢圓曲線算法以及公鑰密碼體制的理解。
4.2橢圓曲線密碼體制概述
4.2.1橢圓曲線簡(jiǎn)介簡(jiǎn)介
同RSA)一樣,ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學(xué))也屬于公開密鑰算法。橢圓曲線公鑰密碼所依賴的數(shù)學(xué)難題是定義在有限域的橢圓曲線上的離散對(duì)數(shù)問題。它是利用有限域上的橢圓曲線有限群代替基于離散對(duì)數(shù)問題密碼體制中的有限循環(huán)群所得到的一類密碼體制。
4.2.2橢圓曲線上的運(yùn)算規(guī)則
橢圓曲線命名的原因是因?yàn)樗怯扇畏匠堂枋龅模ㄌ澑駷?的特殊超橢圓曲線),它的計(jì)算類似于計(jì)算一個(gè)橢圓周長(zhǎng)的方程。橢圓曲線是指光滑的Weierstrass方程所確定的平面曲線。設(shè)方程為:
方程中的參數(shù)取自域F上。F可以使有理數(shù)域、實(shí)數(shù)域或有限域。如果,則稱橢圓曲線E定義在F上。在這個(gè)點(diǎn)集上按如下規(guī)則定義一個(gè)代數(shù)運(yùn)算,稱為加法,記為“+”(注:這里的“+”代表了很多種運(yùn)算,不只是普通代數(shù)意義上的+,它的操作對(duì)象可能是字符串,乘法標(biāo)量也可能是整數(shù),分?jǐn)?shù),有理數(shù))。設(shè)兩點(diǎn)為橢圓曲線上任意兩點(diǎn),密碼學(xué)課程設(shè)計(jì)報(bào)告
加法規(guī)則滿足正常的加法性質(zhì),比如交換律和結(jié)合律。4.2.3橢圓曲線密碼體制
橢圓曲線密碼體制是建立在求橢圓曲線離散對(duì)數(shù)(ECDLP)是困難問題的基礎(chǔ)上。橢圓曲線上P的階是指一個(gè)最小的正整數(shù)n,滿足。
橢圓曲線離散對(duì)數(shù)(ECDLP)是指:給定曲線E上階為n的點(diǎn)P,若是E上的另一個(gè)點(diǎn),找到一個(gè)整數(shù)m,使得
(如果m存在)。定義。在過去的10多年里,橢圓曲線離散對(duì)問題受到了眾多數(shù)學(xué)家的極大關(guān)注,目前還沒有發(fā)現(xiàn)它有哪些明顯的缺點(diǎn)。
4.3橢圓曲線上運(yùn)算的實(shí)現(xiàn)
4.3.1編碼過程
本程序使用JAVA在JDK1.6+ECLIPSE下實(shí)現(xiàn)。
在Calculate.Java中建立以下2個(gè)類:
密碼學(xué)課程設(shè)計(jì)報(bào)告
Point0類中定義了如下方法:
(1)方法jiafani(Point0)用于求解EC上一點(diǎn)P的加法逆(-P),返回該點(diǎn)。(2)方法jia(Point0,Point0)返回兩個(gè)數(shù)的相加得到的點(diǎn)。
(3)方法reverse_of_e(long e,long n)是用擴(kuò)展的歐幾里得算法求模擬。4.3.2關(guān)鍵算法解析:加法規(guī)則(1)R?P?P:???3x12?a?/?2y1?(2)R?P?Q:???y2?y1?/?x2?x1?(3)x3??2?x1?x2
y3???x1?x3??y1 4.3.3實(shí)驗(yàn)結(jié)果及分析
密碼學(xué)課程設(shè)計(jì)報(bào)告
4.4ECC加解密算法
密碼學(xué)課程設(shè)計(jì)報(bào)告
4.5ECC加解密算法的實(shí)現(xiàn)
4.5.1編碼過程
本程序使用JAVA在JDK1.6+ECLIPSE下實(shí)現(xiàn)。在ECC.java中建立以下2個(gè)類:
Point0類和Calculate中的一樣,主要實(shí)現(xiàn)橢圓曲線上的點(diǎn)的基本運(yùn)算。ECC的main函數(shù)中多了一些內(nèi)容,實(shí)現(xiàn)了密鑰產(chǎn)生、加密、解密的過程。
4.5.2實(shí)驗(yàn)結(jié)果及分析
按照提示輸入,經(jīng)過驗(yàn)證,Bob解密得到的明文和Alice加密前的一樣,驗(yàn)證了程序的正確性。
密碼學(xué)課程設(shè)計(jì)報(bào)告
4.6實(shí)驗(yàn)小結(jié)
通過編程實(shí)現(xiàn)橢圓曲線上的基本運(yùn)算,實(shí)現(xiàn)了橢圓曲線上的加解密,加深了對(duì)橢圓曲線算法以及公鑰密碼體制的理解。
和RSA相比較,橢圓曲線密碼體制可用短的多的密鑰獲得更高的安全性。它的密鑰短、簽名短,軟件實(shí)現(xiàn)規(guī)模小,具有廣泛的應(yīng)用前景。
以前的幾次實(shí)驗(yàn)都是使用VC完成的,而本次實(shí)驗(yàn)使用Java語言完成,感覺相比較來說Java語言更加簡(jiǎn)潔,方便使用,體會(huì)到了兩種語言的不同。動(dòng)手實(shí)踐的能力得到提高,感覺自己收獲很多。
第5章 結(jié)束語
密碼學(xué)課程設(shè)計(jì)給我留下了太多記憶深刻的東西,學(xué)到了很多課本上學(xué)不到的知識(shí)。感謝給予我?guī)椭睦蠋熀屯瑢W(xué)們,你們是我不斷進(jìn)步的最堅(jiān)定的支持。
首先,我能夠運(yùn)用密碼學(xué)、信息安全數(shù)學(xué)基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)等學(xué)科所學(xué)的知識(shí),并結(jié)合網(wǎng)絡(luò)、圖書館搜集的各種各樣的材料,進(jìn)行分析取舍、綜合運(yùn)用。通過親自編碼實(shí)踐,對(duì)各種密碼算法的具體實(shí)現(xiàn)流程,以及它們的優(yōu)缺點(diǎn)有了更深刻的認(rèn)識(shí)。編程能力也在積累中提高。
其次,這次課程設(shè)計(jì)使我有了一次通過理論聯(lián)系實(shí)際,來解決實(shí)際問題的經(jīng)歷,它培養(yǎng)了自己分析問題,解決問題的能力,以及上網(wǎng)檢索信息的能力。其實(shí)學(xué)到的知識(shí)其實(shí)是次要的,重要的是我們探索知識(shí)的過程,這個(gè)過程便是一個(gè)人自主學(xué)習(xí)能力的體現(xiàn),它將影響著我今后的發(fā)展。
最后,這次課程設(shè)計(jì)激發(fā)了我對(duì)密碼學(xué)的濃厚興趣。我認(rèn)識(shí)到一分耕耘、一分收獲,學(xué)習(xí)是一個(gè)不斷積累的過程,而人生也是如此。所以,心懷夢(mèng)想,腳踏實(shí)地,每一步都要小心翼翼又無比堅(jiān)定的走下去,就一定會(huì)有所收獲。
第二篇:密碼學(xué)課程設(shè)計(jì)報(bào)告
課 程 設(shè) 計(jì) 報(bào) 告
題目: 密碼學(xué)課程設(shè)計(jì)
課程名稱: 密碼學(xué)課程設(shè)計(jì)
專業(yè)班級(jí): 信安1904班
學(xué) 號(hào): U201912177
姓 名: 段帥杰
指導(dǎo)教師: 路松峰老師
報(bào)告日期: 2021/10/12
教師評(píng)語:
分?jǐn)?shù):
網(wǎng)絡(luò)空間安全學(xué)院
目錄
一、設(shè)計(jì)過程 1
1.1 SPN實(shí)現(xiàn) 1
1.2線性分析 2
1.3差分分析 3
1.4 SPN增強(qiáng) 4
1.5 RSA參數(shù)計(jì)算 5
1.6模重復(fù)平方 6
1.7中國(guó)剩余定理 7
1.8 PKCS7 8
1.9彩虹表 9
二、實(shí)驗(yàn)心得 10
三、對(duì)課程設(shè)計(jì)內(nèi)容和過程的建議 11
一、設(shè)計(jì)過程
1.1 SPN實(shí)現(xiàn)
(1)設(shè)計(jì)內(nèi)容
按照課本給出的的S盒和P盒以及密鑰編排方案來實(shí)現(xiàn)分組密碼SPN加解密。有兩個(gè)輸入,分別是32比特的密鑰和16比特的明文。要正確輸出密文和對(duì)明文最后一比特取反解密得到的明文。加密過程主要包括三個(gè)部分:代換,置換和輪密鑰異或。
(2)設(shè)計(jì)過程
算法所注意的問題:加密與解密主要在于密鑰編排順序不同,算法過程基本相同。最后一輪沒有經(jīng)過P盒。
解決這道題最直接的思路就是開數(shù)組及進(jìn)行運(yùn)算,但這樣顯然速度不夠快。后來摒棄這種做法,采用位運(yùn)算,速度快了不少而且這種做法方便快讀快寫的程序?qū)崿F(xiàn)。但還是有幾個(gè)數(shù)據(jù)點(diǎn)過不了oj,后面打了一個(gè)65536的表,將時(shí)間提高至1100ms左右。最后采用了快寫才將時(shí)間穩(wěn)定在700ms左右。
(3)小結(jié)
采用打表的方式程序速度確實(shí)有提高,但是程序很臃腫。程序中還有些算術(shù)運(yùn)算并沒有轉(zhuǎn)換為位運(yùn)算。
圖1-1 SPN實(shí)現(xiàn)oj結(jié)果圖示
1.2線性分析
(1)設(shè)計(jì)內(nèi)容
線性分析是一種已知明文的分析方法,基于S盒逼近,需要大量的明密文對(duì)。oj上給了8000對(duì)明密文對(duì)。并且只對(duì)最后一輪子密鑰進(jìn)行分析。在密鑰生成算法固定的情況下,獲得最后一輪子密鑰可以為分析別的密鑰提供可能。遍歷可能的密鑰空間并進(jìn)行計(jì)數(shù),結(jié)束后正確的密鑰計(jì)數(shù)值接近1/2±?,并且應(yīng)該在一定范圍內(nèi)對(duì)計(jì)數(shù)值較大的可能密鑰進(jìn)行驗(yàn)證。
(2)設(shè)計(jì)過程
首先使用書中給出的線性分析鏈,分析出第5輪第2、4部分的密鑰。再選擇新的偏差較大的線性分析鏈,在第2、4部分密鑰已知的基礎(chǔ)上分析出第1、3部分的密鑰。接著在已知起始密鑰低16位的基礎(chǔ)上,窮舉高16位密鑰對(duì)給出的8000個(gè)明密文對(duì)進(jìn)行驗(yàn)證。由于在加密過程中進(jìn)行了5輪的S代換和P置換,其實(shí)相同明文在不同密鑰下得到相同密文的概率極低,因此并沒有驗(yàn)證8000個(gè)明密文對(duì)是否對(duì)應(yīng),而僅驗(yàn)證了3個(gè)判斷密鑰是否合適。
程序有兩層主循環(huán),第一層主循環(huán)遍歷可能的第5輪第2、4部分密鑰,第二層在已知第5輪第2、4部分密鑰的基礎(chǔ)上生成并遍歷可能的第5輪第1、3部分密鑰,同時(shí)窮舉高16位密鑰并進(jìn)行驗(yàn)證。
(3)小結(jié)
為了提高速度,程序中同樣采用了打表。但是在oj上仍然差了300ms,最后是開啟了03優(yōu)化才能全部通過(開啟這個(gè)優(yōu)化通過oj,算不上很完美)。
#pragma GCC optimize(3,”O(jiān)fast“,”inline“)
圖1-2 線性分析oj結(jié)果圖示
1.3差分分析
(1)設(shè)計(jì)內(nèi)容
實(shí)驗(yàn)?zāi)康氖菍?shí)現(xiàn)對(duì)SPN網(wǎng)絡(luò)的差分密碼分析。差分密碼與線性密碼分析相似。主要區(qū)別在于它將兩個(gè)輸入的異或與其相對(duì)應(yīng)的兩個(gè)輸出的異或相比較,是一種選擇明文攻擊。差分攻擊的基礎(chǔ)是一個(gè)非均勻的輸出分布。和線性分析進(jìn)行類似的計(jì)數(shù)操作并在計(jì)數(shù)值一定范圍內(nèi)對(duì)密鑰進(jìn)行驗(yàn)證。
(2)設(shè)計(jì)過程
首先使用書中給出的差分鏈分析出第5輪第2、4部分的密鑰。再選擇新的差分鏈分析出第5輪第1、3部分密鑰,然后窮舉高16位密鑰情況,并驗(yàn)證密鑰正確性。
與線性分析不同的是,由于差分分析中可以找到一條第5輪僅包含第1、3部分且偏差很大的差分鏈,因此不需要在已知第5輪第2、4部分的基礎(chǔ)上進(jìn)行差分分析,也因此減小了部分時(shí)間開銷。
代碼實(shí)現(xiàn)流程為:快速讀入數(shù)據(jù)并存入數(shù)組中;根據(jù)已有的明密文對(duì)分別對(duì)第5輪第2、4部分和第1、3部分進(jìn)行差分分析,記錄每一種密鑰對(duì)應(yīng)的count值。在一定范圍內(nèi)遍歷第5輪第2、4部分和第1、3部分密鑰,窮舉高16位密鑰并驗(yàn)證正確性,得到正確密鑰后快速輸出密鑰。
(3)小結(jié)
程序提交oj的時(shí)候最后一個(gè)測(cè)試點(diǎn)偶爾會(huì)出現(xiàn)超時(shí)的情況。
圖1-3 差分分析oj結(jié)果圖示
1.4 SPN增強(qiáng)
(1)設(shè)計(jì)內(nèi)容
對(duì)原始SPN進(jìn)行改進(jìn),自定義密鑰長(zhǎng)度,分組長(zhǎng)度,S盒,P盒等信息,對(duì)輸入比特流進(jìn)行加密使輸出能夠通過oj的隨機(jī)數(shù)檢測(cè)標(biāo)準(zhǔn)。
(2)設(shè)計(jì)過程
相比于之前的SPN,做了些改動(dòng)。采用CBC模式,隨便設(shè)置一個(gè)初始向量,并且將密鑰增加到128位,SPN加密長(zhǎng)度增加到64位,使用自定義的P盒。這樣才通過了隨機(jī)性檢測(cè)。
(3)小結(jié)
這道題不像之前的題目卡時(shí)間那么難受,雖然安全性相比于最初的SPN有所提高,但是真正應(yīng)用的話,安全性還是不行。
圖1-4 SPN增強(qiáng)oj結(jié)果圖示
1.5 RSA參數(shù)計(jì)算
(1)設(shè)計(jì)內(nèi)容
實(shí)驗(yàn)?zāi)康氖亲约豪胓mp庫(kù)提供的大整數(shù)基本運(yùn)算來實(shí)現(xiàn)求逆和最大公因數(shù),輸出RSA參數(shù)d,并檢查RSA參數(shù)的合法性。
(2)設(shè)計(jì)過程
首先是利用vcpkg在主機(jī)vs2019上搭建好了運(yùn)行環(huán)境。實(shí)現(xiàn)了素性檢測(cè),gcd的求解以及求逆等過程。主要遇到的問題是在驗(yàn)證安全性上,判斷參數(shù)是否正確。首先e不能太小,主要為了提高計(jì)算的難度;p和q間隔不能太?。籶-1和q-1不能太光滑,即gcd(p-1,q-1)應(yīng)該比較小,經(jīng)過詢問和驗(yàn)證,這個(gè)值大概在20以內(nèi)。
(3)小結(jié)
這個(gè)實(shí)驗(yàn)主要熟悉了gmp庫(kù)提供的大整數(shù)相關(guān)的基本函數(shù)運(yùn)算。比較麻煩的是需要自己摸索測(cè)試方法,探索p和q的間隔,(p-1)和(q-1)的最大公因數(shù)大小等。在運(yùn)行速度上倒是沒遇到什么大問題。
圖1-5 RSA參數(shù)計(jì)算oj結(jié)果圖示
1.6模重復(fù)平方
(1)設(shè)計(jì)內(nèi)容
實(shí)驗(yàn)?zāi)康氖抢胓mp庫(kù)提供的加法,減法,乘法,模運(yùn)算等基本運(yùn)算來自己實(shí)現(xiàn)expmod(a,e,n)。
(2)設(shè)計(jì)過程
這道題逐步計(jì)算就行,需要注意的是遞歸或者普通的循環(huán)是行不通的。為了加快運(yùn)行速度,要盡量減少循環(huán)次數(shù)。
(3)小結(jié)
這道題主要還是gmp庫(kù)提供的函數(shù)的應(yīng)用。
圖1-6模重復(fù)平方 oj結(jié)果圖示
1.7中國(guó)剩余定理
(1)設(shè)計(jì)內(nèi)容
實(shí)驗(yàn)內(nèi)容:正確計(jì)算c^d(modpq)。利用1.5中的求逆運(yùn)算從加密密鑰e計(jì)算解密密鑰d。
利用1.6中實(shí)現(xiàn)的模冪運(yùn)算和中國(guó)剩余定理計(jì)算c^d(modpq)。
(2)設(shè)計(jì)過程
這道題主題要是與前面兩題的結(jié)合,使用p,q并運(yùn)用中國(guó)剩余定理解密。為了加快速度解決的問題:
1.避免重復(fù)計(jì)算,用變量將不會(huì)改變的值保存好,避免不必要的計(jì)算。
2.在求解模冪時(shí),將解密指數(shù)d模除以p-1和q-1,加速計(jì)算。
(3)小結(jié)
雖然經(jīng)過改進(jìn),運(yùn)行時(shí)間有所提高,但是最后一個(gè)測(cè)試點(diǎn)還是壓著邊過的。
圖1-7中國(guó)剩余定理oj結(jié)果圖示
1.8 PKCS7
(1)設(shè)計(jì)內(nèi)容
PKCS#7是PKI中用于消息加密的語法標(biāo)準(zhǔn)??梢杂糜诮o擁有公鑰的用戶發(fā)加密郵件、傳送加密文件等。實(shí)驗(yàn)?zāi)康氖墙忾_PKCS#7包裝,獲取明文消息。
(2)設(shè)計(jì)過程
這道題首先是查找PKCS#7的相關(guān)知識(shí),了解它的用途。算是對(duì)上學(xué)期所學(xué)知識(shí)的綜合應(yīng)用的一個(gè)實(shí)例。然后利用openssl庫(kù)提供相關(guān)的函數(shù)進(jìn)行解密。
(3)小結(jié)
這道題時(shí)間并不是問題。還是比較輕松的。
圖1-8 PKCS7 oj結(jié)果圖示
1.9彩虹表
(1)設(shè)計(jì)內(nèi)容
有一些鏈頭和鏈尾,每條鏈從鏈頭開始,依次調(diào)用了10000次SHA1和R函數(shù)得到鏈尾。
實(shí)驗(yàn)?zāi)康氖菑倪@些鏈中找到SHA1值對(duì)應(yīng)的口令。
(2)設(shè)計(jì)過程
在程序中定義了UnitSHA1函數(shù)來尋找SHA1,通過findstr函數(shù)判斷是否恰當(dāng)。為了加快運(yùn)行速度,程序中同樣采用了快讀快寫以及位運(yùn)算等。
(3)小結(jié)
這道題雖然時(shí)間限制提高至2000ms,但最后有幾個(gè)測(cè)試點(diǎn)還是開了03優(yōu)化才過的。
圖1-9 彩虹表oj結(jié)果圖示
二、實(shí)驗(yàn)心得
這次試驗(yàn)包含了SPN加解密及其分析,RSA參數(shù),模重復(fù)平方,中國(guó)剩余定理,PKCS7,彩虹表等九個(gè)實(shí)驗(yàn)的內(nèi)容。在實(shí)驗(yàn)過程中,要到了許許多多的問題。主要有以下幾點(diǎn):
? SPN的位運(yùn)算,最初因?yàn)閷?duì)位運(yùn)算不夠熟悉并沒有想著用位運(yùn)算來實(shí)現(xiàn)SPN的加解密,多走了很多彎路。
密碼分析問題,線性分析和差分分析否需要自己依據(jù)原理來找到最理想的鏈,而且需要先對(duì)概念原理有個(gè)清楚的認(rèn)知,這就迫使我再次回顧密碼學(xué)課本和網(wǎng)課上的知識(shí)點(diǎn)。
?運(yùn)行時(shí)間問題,為了縮短運(yùn)行時(shí)間,采取了很多辦法。比如打表,快讀快寫,在某些不改變的變量前面加const,在常用的變量前加register,算術(shù)運(yùn)算轉(zhuǎn)變?yōu)槲贿\(yùn)算等等。實(shí)在過不了的開啟了02,03優(yōu)化。
?第三方庫(kù)的安裝與鏈接,在采用了許多方法無果后,采用了vcpkg庫(kù)管理工具實(shí)現(xiàn)了gmp,gmssl,openssl等的安裝與鏈接,減少了許多配置的麻煩。
?密碼學(xué)課程知識(shí)的回顧,過了一個(gè)暑假,部分密碼學(xué)的細(xì)節(jié)知識(shí)有所遺忘,為了完成這次實(shí)驗(yàn),需要重新學(xué)習(xí)一遍。這種回顧知識(shí)的機(jī)會(huì)自高中結(jié)束以來很少有了。上學(xué)期主要進(jìn)行理論學(xué)習(xí),這次試驗(yàn)彌補(bǔ)了實(shí)踐的缺失。
總的來說,這次課設(shè)給我留下了深刻印象。自己寫的代碼不能正常運(yùn)時(shí)的焦慮感是做其他實(shí)驗(yàn)沒有的。大部分問題都要重新回顧之前的密碼學(xué)知識(shí)。通過網(wǎng)上搜索相關(guān)概念,詢問老師和同學(xué)解決。有些細(xì)節(jié)問題也會(huì)與同學(xué)交流討論。這次實(shí)驗(yàn)讓自己對(duì)密碼學(xué)的認(rèn)識(shí)和自己的編程能力上升了一個(gè)臺(tái)階。
三、對(duì)課程設(shè)計(jì)內(nèi)容和過程的建議
?希望能夠在完成人數(shù)適當(dāng)?shù)臅r(shí)候進(jìn)行一次講解,這樣可以讓沒有方向的同學(xué)知道如何著手,也可以讓已經(jīng)完成的同學(xué)進(jìn)行思路的比對(duì),有所改進(jìn)。小范圍討論和統(tǒng)一講解同樣重要。
?希望oj上的時(shí)間增加一點(diǎn),因?yàn)闀r(shí)間而卡在一道題上過不去的滋味并不好受。而且實(shí)驗(yàn)是在鍛煉我們的思考問題和實(shí)踐的能力。如果時(shí)間太少的話,就只能參考別人的思路來縮短運(yùn)行速度,同質(zhì)化嚴(yán)重。不利于學(xué)生獨(dú)立思考,寫出各種各樣的程序。我們寫的程序最終也不會(huì)進(jìn)行應(yīng)用,更重要的是鍛煉,糾結(jié)于幾百毫秒反而降低了學(xué)生的熱情。
?在課設(shè)結(jié)束后發(fā)出參考樣例方便有需要的同學(xué)進(jìn)行改進(jìn)。
希望實(shí)驗(yàn)課能越來越好,通過實(shí)驗(yàn)來吸引更多對(duì)密碼學(xué)有興趣的人。
第三篇:密碼學(xué)學(xué)習(xí)心得
“密碼學(xué)”學(xué)習(xí)心得
密碼可破!人類的智慧不可能造成這樣的密碼,使得人類本身的才智即使運(yùn)用得當(dāng)也無法破開它!
———愛倫·坡所
在我們的生活中有許多的秘密和隱私,我們不想讓其他人知道,更不想讓他們?nèi)V泛傳播或者使用。對(duì)于我們來說,這些私密是至關(guān)重要的,它記載了我們個(gè)人的重要信息,其他人不需要知道,也沒有必要知道。為了防止秘密泄露,我們當(dāng)然就會(huì)設(shè)置密碼,保護(hù)我們的信息安全。更有甚者去設(shè)置密保,以防密碼丟失后能夠及時(shí)找回。密碼”一詞對(duì)人們來說并不陌生,人們可以舉出許多有關(guān)使用密碼的例子。現(xiàn)代的密碼已經(jīng)比古代有了長(zhǎng)遠(yuǎn)的發(fā)展,并逐漸形成一門科學(xué),吸引著越來越多的人們?yōu)橹畩^斗。
一、密碼學(xué)的定義
密碼學(xué)是研究信息加密、解密和破密的科學(xué),含密碼編碼學(xué)和密碼分析學(xué)。密碼技術(shù)是信息安全的核心技術(shù)。隨著現(xiàn)代計(jì)算機(jī)技術(shù)的飛速發(fā)展,密碼技術(shù)正在不斷向更多其他領(lǐng)域滲透。它是集數(shù)學(xué)、計(jì)算機(jī)科學(xué)、電子與通信等諸多學(xué)科于一身的交叉學(xué)科。使用密碼技術(shù)不僅可以保證信息的機(jī)密性,而且可以保證信息的完整性和確證性,防止信息被篡改、偽造和假冒。目前密碼的核心課題主要是在結(jié)合具體的網(wǎng)絡(luò)環(huán)境、提高運(yùn)算效率的基礎(chǔ)上,針對(duì)各種主動(dòng)攻擊行為,研究各種可證安全體制。
密碼學(xué)的加密技術(shù)使得即使敏感信息被竊取,竊取者也無法獲取信息的內(nèi)容;認(rèn)證性可以實(shí)體身份的驗(yàn)證。以上思想是密碼技術(shù)在信息安全方面所起作用的具體表現(xiàn)。密碼學(xué)是保障信息安全的核心;密碼技術(shù)是保護(hù)信息安全的主要手段。本文主要講述了密碼的基本原理,設(shè)計(jì)思路,分析方法以及密碼學(xué)的最新研究進(jìn)展等內(nèi)容
密碼學(xué)主要包括兩個(gè)分支,即密碼編碼學(xué)和密碼分析學(xué)。密碼編碼學(xué)對(duì)信息進(jìn)行編碼以實(shí)現(xiàn)信息隱藏,其主要目的是尋求保護(hù)信息保密性和認(rèn)證性的方法;密碼分析學(xué)是研究分析破譯密碼的學(xué)科,其主要目的是研究加密消息的破譯和消息的偽造。密碼技術(shù)的基本思想是對(duì)消息做秘密變換,變換的算法即稱為密碼算法。密碼編碼學(xué)主要研究對(duì)信息進(jìn)行變換,以保護(hù)信息在傳遞過程中不被敵方竊取、解讀和利用的方法,而密碼分析學(xué)則于密碼編碼學(xué)相反,它主要研究如何分析和破譯密碼。這兩者之間既相互對(duì)立又相互促進(jìn)。密碼的基本思想是對(duì)機(jī)密信息進(jìn)行偽裝。
二、密碼學(xué)的發(fā)展歷程
密碼學(xué)的發(fā)展歷程大致經(jīng)歷了三個(gè)階段:古代加密方法、古典密碼和近代密碼。
1.古代加密方法(手工階段)
源于應(yīng)用的無窮需求總是推動(dòng)技術(shù)發(fā)明和進(jìn)步的直接動(dòng)力。存于石刻或史書中的記載表明,許多古代文明,包括埃及人、希伯來人、亞述人都在實(shí)踐中逐步發(fā)明了密碼系統(tǒng)。從某種意義上說,戰(zhàn)爭(zhēng)是科學(xué)技術(shù)進(jìn)步的催化劑。人類自從有了戰(zhàn)爭(zhēng),就面臨著通信安全的需求,密碼技術(shù)源遠(yuǎn)流長(zhǎng)。
古代加密方法大約起源于公元前440年出現(xiàn)在古希臘戰(zhàn)爭(zhēng)中的隱寫術(shù)。當(dāng)時(shí)為了安全傳送軍事情報(bào),奴隸主剃光奴隸的頭發(fā),將情報(bào)寫在奴隸的光頭上,待頭發(fā)長(zhǎng)長(zhǎng)后將奴隸送到另一個(gè)部落,再次剃光頭發(fā),原有的信息復(fù)現(xiàn)出來,從而實(shí)現(xiàn)這兩個(gè)部落之間的秘密通信。
我國(guó)古代也早有以藏頭詩、藏尾詩、漏格詩及繪畫等形式,將要表達(dá)的真正意思或“密語”隱藏在詩文或畫卷中特定位置的記載,一般人只注意詩或畫的表面意境,而不會(huì)去注意或很難發(fā)現(xiàn)隱藏其中的“話外之音”。
比如:我畫藍(lán)江水悠悠,愛晚亭楓葉愁。秋月溶溶照佛寺,香煙裊裊繞輕樓 2.古典密碼(機(jī)械階段)
古典密碼的加密方法一般是文字置換,使用手工或機(jī)械變換的方式實(shí)現(xiàn)。古典密碼系統(tǒng)已經(jīng)初步體現(xiàn)出近代密碼系統(tǒng)的雛形,它比古代加密方法復(fù)雜,其變化較小。古典密碼的代表密碼體制主要有:?jiǎn)伪泶婷艽a、多表代替密碼及轉(zhuǎn)輪密碼。3.近代密碼(計(jì)算機(jī)階段)
密碼形成一門新的學(xué)科是在20世紀(jì)70年代,這是受計(jì)算機(jī)科學(xué)蓬勃發(fā)展刺激和推動(dòng)的結(jié)果??焖匐娮佑?jì)算機(jī)和現(xiàn)代數(shù)學(xué)方法一方面為加密技術(shù)提供了新的概念和工具,另一方面也給破譯者提供了有力武器。計(jì)算機(jī)和電子學(xué)時(shí)代的到來給密碼設(shè)計(jì)者帶來了前所未有的自由,他們可以輕易地?cái)[脫原先用鉛筆和紙進(jìn)行手工設(shè)計(jì)時(shí)易犯的錯(cuò)誤,也不用再面對(duì)用電子機(jī)械方式實(shí)現(xiàn)的密碼機(jī)的高額費(fèi)用??傊?,利用電子計(jì)算機(jī)可以設(shè)計(jì)出更為復(fù)雜的密碼系統(tǒng)
20世紀(jì)中葉以前, 由于條件所限, 密碼技術(shù)的保密性基于加密算法的秘密, 因此稱之為古典密碼體制或受限的密碼算法。盡管古典密碼體制受到當(dāng)時(shí)歷史條件的限制, 沒有涉及非常高深或者復(fù)雜的理論, 但在其漫長(zhǎng)的發(fā)展演化過程中, 已經(jīng)充分表現(xiàn)出了現(xiàn)代密碼學(xué)的兩大基本思想一“ 代替” 和“換位” , 而且還將數(shù)學(xué)的方法引人到密碼分析和研究中。這為后來密碼學(xué)成為系統(tǒng)的學(xué)科以及相關(guān)學(xué)科的發(fā)展莫定了堅(jiān)實(shí)的基礎(chǔ)。
密碼學(xué)真正成為科學(xué)是在19世紀(jì)末和20世紀(jì)初期,由于軍事、數(shù)學(xué)、通訊等相關(guān)技術(shù)的發(fā)展,特別是兩次世界大戰(zhàn)中對(duì)軍事信息保密傳遞和破獲敵方信息的需求,密碼學(xué)得到了空前的發(fā)展,并廣泛的用于軍事情報(bào)部門的決策.小結(jié)
從以上密碼學(xué)的發(fā)展歷史可以看出,整個(gè)密碼學(xué)的發(fā)展過程是從簡(jiǎn)單到復(fù)雜,從不完美到完美,從具有單一功能到具有多種功能的過程。這是符合歷史發(fā)展規(guī)律和人類對(duì)客觀事物的認(rèn)識(shí)規(guī)律的。而且也可以看出密碼學(xué)的發(fā)展受到其它學(xué)科如數(shù)學(xué)、計(jì)算機(jī)科學(xué)的極大促動(dòng)。這說明,在科學(xué)的發(fā)展進(jìn)程中,各個(gè)學(xué)科互相推動(dòng),互相聯(lián)系,乃至互相滲透,其結(jié)果是不斷涌現(xiàn)出新的交叉學(xué)科,從而達(dá)到人類對(duì)事物更深的認(rèn)識(shí)。從密碼學(xué)的發(fā)展中還可以看出,任何一門學(xué)科如果具有廣泛的應(yīng)用基礎(chǔ),那么這個(gè)學(xué)科就能從中汲取發(fā)展動(dòng)力,就會(huì)有進(jìn)一步發(fā)展的基礎(chǔ)。
我們這個(gè)社會(huì)已進(jìn)入了信息時(shí)代,隨著數(shù)據(jù)庫(kù)技術(shù)和計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用的不斷深入,信息的安全傳輸也有著廣闊的應(yīng)用前景。雖然密碼可以追溯到古代,但密碼作為一門學(xué)科還非常年輕,還有著更進(jìn)一步的發(fā)展要求。
三、密碼學(xué)的基礎(chǔ)知識(shí)
密碼學(xué)(Cryptogra phy),現(xiàn)代準(zhǔn)確的術(shù)語為“密碼編制學(xué)”,簡(jiǎn)稱“編密學(xué)”,與之相對(duì)的專門研究如何破解密碼的學(xué)問稱之為“密碼分析學(xué)”。密碼學(xué)是主要研究通信安全和保密的學(xué)科,密碼編碼學(xué)主要研究對(duì)信息進(jìn)行變換,以保護(hù)信息在傳遞過程中不被敵方竊取、解讀和利用的方法,而密碼分析學(xué)則于密碼編碼學(xué)相反,它主要研究如何分析和破譯密碼。這兩者之間既相互對(duì)立又相互促進(jìn)。密碼的基本思想是對(duì)機(jī)密信息進(jìn)行偽裝。一個(gè)密碼系統(tǒng)完成如下偽裝:加密者對(duì)需要進(jìn)行偽裝機(jī)密信息(明文)進(jìn)行偽裝進(jìn)行變換(加密變換),得到另外一種看起來似乎與原有信息不相關(guān)的表示(密文),如果合法者(接收者)獲得了偽裝后的信息,那么他可以通過事先約定的密鑰,從得到的信息中分析得到原有的機(jī)密信息(解密變換),而如果不合法的用戶(密碼分析者)試圖從這種偽裝后信息中分析得到原有的機(jī)密信息,那么,要么這種分析過程根本是不可能的,要么代價(jià)過于巨大,以至于無法進(jìn)行。
在計(jì)算機(jī)出現(xiàn)以前,密碼學(xué)的算法主要是通過字符之間代替或易位實(shí)現(xiàn)的,我們稱這些密碼體制為古典密碼。其中包括:易位密碼、代替密碼(單表代替密碼、多表代替密碼等)。這些密碼算法大都十分簡(jiǎn)單,現(xiàn)在已經(jīng)很少在實(shí)際應(yīng)用中使用了。由于密碼學(xué)是涉及數(shù)學(xué)、通訊、計(jì)算機(jī)等相關(guān)學(xué)科的知識(shí),就我們現(xiàn)有的知識(shí)水平而言,只能初步研究古典密碼學(xué)的基本原理和方法。但是對(duì)古典密碼學(xué)的研究,對(duì)于理解、構(gòu)造和分析現(xiàn)代實(shí)用的密碼都是很有幫助。以下介紹我們所研究的古典密碼學(xué)。
小結(jié)
像絕大多數(shù)領(lǐng)域的科學(xué)知識(shí)一樣,密碼學(xué)在完整的科學(xué)體系建立起來之前,古典密碼學(xué)僅限于一些簡(jiǎn)單代替和置換算法,當(dāng)然,這代替和置換如果經(jīng)過了幾次算法的加密就會(huì)一樣復(fù)雜多變,而現(xiàn)代的算法經(jīng)過科學(xué)體系的整理與發(fā)展,更加的完善一些復(fù)雜算法的應(yīng)用和各種應(yīng)用協(xié)議的產(chǎn)生。而由于網(wǎng)絡(luò)的出現(xiàn)以及發(fā)展,未來的密碼學(xué)也必定向這個(gè)方向發(fā)展。例如網(wǎng)絡(luò)簽名,網(wǎng)上銀行的安全,個(gè)人郵件信息的保護(hù),都很迫切需要密碼學(xué)的支持,推動(dòng)密碼學(xué)的發(fā)展.四、密碼學(xué)的作用
現(xiàn)代密碼學(xué)研究信息從發(fā)端到收端的安全傳輸和安全存儲(chǔ),是研究“知己知彼”的一門科學(xué)。其核心是密碼編碼學(xué)和密碼分析學(xué)。前者致力于建立難以被敵方或?qū)κ止テ频陌踩艽a體制,即“知己”;后者則力圖破譯敵方或?qū)κ忠延械拿艽a體制,即“知彼”。人類有記載的通信密碼始于公元前400年。古希臘人是置換密碼的發(fā)明者。1881年世界上的第一個(gè)電話保密專利出現(xiàn)。電報(bào)、無線電的發(fā)明使密碼學(xué)成為通信領(lǐng)域中不可回避的研究課題。
1.用來加密保護(hù)信息
利用密碼變換將明文變換成只有合法者才能恢復(fù)的密文,這是密碼的最基本功能。信息的加密保護(hù)包括傳輸信息和存儲(chǔ)信息兩方面,后者解決起來難度更大。
2.采用數(shù)字證書來進(jìn)行身份鑒別
數(shù)字證書就是網(wǎng)絡(luò)通訊中標(biāo)志通訊各方身份信息的一系列數(shù)據(jù),是網(wǎng)絡(luò)正常運(yùn)行所必須的?,F(xiàn)在一般采用交互式詢問回答,在詢問和回答過程中采用密碼加密,特別是采用密碼技術(shù)的帶CPU的職能卡,安全性好,在電子商務(wù)系統(tǒng)中,所有參與活動(dòng)的實(shí)體都需要用數(shù)字證書來表明自己的身份,數(shù)字證書從某種角度上說就是“電子身份證”。3.數(shù)字指紋
在數(shù)字簽名中有重要作用的“報(bào)文摘要”算法,即生成報(bào)文“數(shù)字指紋”的方法,近年來備受關(guān)注,構(gòu)成了現(xiàn)代密碼學(xué)的一個(gè)重要側(cè)面。4.采用密碼技術(shù)對(duì)發(fā)送信息進(jìn)行驗(yàn)證
為防止傳輸和存儲(chǔ)的消息被有意或無意的篡改,采用密碼技術(shù)對(duì)消息進(jìn)行運(yùn)算生成消息的驗(yàn)證碼,附在消息之后發(fā)出或信息一起存儲(chǔ),對(duì)信息進(jìn)行驗(yàn)證,它在票房防偽中有重要作用。5.利用數(shù)字簽名來完成最終協(xié)議
在信息時(shí)代,電子數(shù)據(jù)的收發(fā)使我們過去所依賴的個(gè)人特征都將被數(shù)字代替,數(shù)字簽名的作用有兩點(diǎn),一是因?yàn)樽约旱暮灻y以否認(rèn),從而確定了文件已簽署這一事實(shí);二是因?yàn)楹灻灰追旅?,從而確定了文件時(shí)真的這一事實(shí)。
五、密碼學(xué)的前景
量子密碼學(xué)
量子密碼體系采用量子態(tài)作為信息載體,經(jīng)由量子通道在合法的用戶之間傳送密鑰。量子密碼的安全性由量子力學(xué)原理所保證。所謂絕對(duì)安全性是指:即使在竊聽者可能擁有極高的智商、可能采用最高明的竊聽措施、可能使用最先進(jìn)的測(cè)量手段,密鑰的傳送仍然是安全的。通常,竊聽者采用截獲密鑰的方法有兩類:一種方法是通過對(duì)攜帶信息的量子態(tài)進(jìn)行測(cè)量,從其測(cè)量的結(jié)果來提取密鑰的信息。但是,量子力學(xué)的基本原理告訴我們,對(duì)量子態(tài)的測(cè)量會(huì)引起波函數(shù)塌縮,本質(zhì)上改變量子態(tài)的性質(zhì),發(fā)送者和接受者通過信息校驗(yàn)就會(huì)發(fā)現(xiàn)他們的通訊被竊聽,因?yàn)檫@種竊聽方式必然會(huì)留下具有明顯量子測(cè)量特征的痕跡,合法用戶之間便因此終止正在進(jìn)行的通訊。第二種方法則是避開直接的量子測(cè)量,采用具有復(fù)制功能的裝置,先截獲和復(fù)制傳送信息的量子態(tài)。然后,竊聽者再將原來的量子態(tài)傳送給要接受密鑰的合法用戶,留下復(fù)制的量子態(tài)可供竊聽者測(cè)量分析,以竊取信息。這樣,竊聽原則上不會(huì)留下任何痕跡。但是,由量子相干性決定的量子不可克隆定理告訴人們,任何物理上允許的量子復(fù)制裝置都不可能克隆出與輸入態(tài)完全一樣的量子態(tài)來。這一重要的量子物理效應(yīng),確保了竊聽者不會(huì)完整地復(fù)制出傳送信息的量子態(tài)。因而,第二種竊聽方法也無法成功。量子密碼術(shù)原則上提供了不可破譯、不可竊聽和大容量的保密通訊體系。
現(xiàn)代密碼學(xué)與計(jì)算機(jī)技術(shù)、電子通信技術(shù)緊密相關(guān)。在這一階段,密碼理論蓬勃發(fā)展,密碼算法設(shè)計(jì)與分析互相促進(jìn),出現(xiàn)了大量的密碼算法和各種攻擊方法。而且如今“密碼學(xué)”不僅用于國(guó)家軍事安全上,而且更多的集中在實(shí)際生活中。如在生活中,為防止別人查閱你的文件,可將文件加密;為防止竊取你的錢
財(cái),可在銀行賬戶上設(shè)置密碼等。隨著科學(xué)技術(shù)的發(fā)展和信息保密的需求,密碼學(xué)的應(yīng)用將融人到人們的日常生活中?;诿艽a學(xué)有著堅(jiān)實(shí)的應(yīng)用基礎(chǔ),可以相信,密碼學(xué)一定能不斷地發(fā)展,不斷地完善,從而會(huì)給全人類提供更加安全的各種服務(wù),讓我們祝福這一天的到來吧!
隨著科學(xué)技術(shù)的迅猛發(fā)展,人們對(duì)信息安全和保密的重要性認(rèn)識(shí)不斷提高,在信息安全中起著舉足輕重作用的密碼學(xué)也就成為信息安全中不可或缺的重要部分。在今天,密碼學(xué)仍然是信息技術(shù)非常重要的組成部分,它還在多個(gè)方面發(fā)揮著重要作用。比如對(duì)于用戶的認(rèn)證,對(duì)于信息的認(rèn)證,信息的安全以及存儲(chǔ)的安全等,但這些對(duì)于密碼學(xué)而言,它需要同其他組件配合,比如管理軟件等。密碼學(xué)是和技術(shù)相關(guān)。作為一項(xiàng)技術(shù)本身有演進(jìn)的需要,同時(shí)還要適應(yīng)跟它相配合的技術(shù)組件發(fā)展的需要,要適應(yīng)用戶的新需求以及其他的新應(yīng)用。密碼學(xué)同信息技術(shù)所包括的組件一樣,一直在發(fā)展變化中,這就需要我們要不斷地發(fā)展密碼學(xué),使密碼學(xué)能夠適應(yīng)其他應(yīng)用的需求,同其他技術(shù)的進(jìn)步齊頭并進(jìn)。信息安全有著眾多基礎(chǔ)研究的領(lǐng)域,這些基礎(chǔ)研究構(gòu)成了密碼學(xué)的基礎(chǔ),也構(gòu)成了通信、安全軟件等系統(tǒng)的基礎(chǔ)。當(dāng)我們?cè)趯?shí)施一個(gè)工程項(xiàng)目的時(shí)候,不能僅靠一個(gè)細(xì)分領(lǐng)域技術(shù)就能把這個(gè)項(xiàng)目完成。
六、學(xué)習(xí)密碼學(xué)的感悟
1.密碼學(xué)家的人生價(jià)值
密碼學(xué)家,也許不為人知。但他們的工作卻在我們的生活中發(fā)揮 著巨大的作用。他們?cè)诂F(xiàn)代社會(huì)中有著不可替代的作用。有人認(rèn)為密碼學(xué)家就像一個(gè)黑客,但他們有著本質(zhì)的不同。黑客是盜取密碼保護(hù)的信息以獲取利益,而密碼學(xué)家從事的是基礎(chǔ)理論研究,是為了評(píng)估密碼算法的安全性,找到其漏洞,以設(shè)計(jì)出更安全的密碼算法。
我覺得,對(duì)于密碼學(xué)家來說,其實(shí)有兩重意義上的生命:一是生物意義上的生命,二是學(xué)術(shù)意義上的生命。兩種生命往往并不同步。有的人,生物意義上的生命還活著,學(xué)術(shù)意義上的生命已經(jīng)死了。這種情況在我們周圍越來越常見。目前充斥著大量名為成果,實(shí)為名利敲門磚的所謂學(xué)術(shù),沒有任何新意和創(chuàng)見,前腳邁出印刷廠,后腳就進(jìn)造紙廠,白耗費(fèi)了財(cái)力,還增加了環(huán)境污染。有的人,生物意義上的生命死了,學(xué)術(shù)意義上的生命還活著。我想,密碼學(xué)家就是這樣的一類人,他們的研究成果,大到保衛(wèi)國(guó)家,小到維護(hù)個(gè)人的利益,我想這是他們?nèi)松鷥r(jià)值的最好體現(xiàn)。
2.總結(jié)與體會(huì)
密碼學(xué)充滿了神秘性,讓我對(duì)她產(chǎn)生了濃厚的興趣和好奇。最近的這次人類戰(zhàn)爭(zhēng)中,即二戰(zhàn),認(rèn)識(shí)到密碼和情報(bào)是一件事情。而在當(dāng)代密碼學(xué)跟數(shù)學(xué),計(jì)算機(jī)只是一個(gè)大背景,因?yàn)樾畔?huì)以網(wǎng)絡(luò)為媒介,所以現(xiàn)代密碼學(xué)更多的是以數(shù)字化的信息而非紙質(zhì)為研究對(duì)象。所以密碼學(xué)歸根結(jié)底是數(shù)學(xué)問題,計(jì)算能力是數(shù)學(xué)的一個(gè)方面,高性能的計(jì)算機(jī)可以成為國(guó)力的象征,分析情報(bào)就是一方面。數(shù)學(xué)研究等一些自然基礎(chǔ)學(xué)科的研究才是國(guó)家實(shí)力的堅(jiān)定的基石,才是一個(gè)自然科學(xué)的學(xué)生的理想所在。數(shù)學(xué)研究很廣泛,而密碼學(xué)涉及很有限,大多與計(jì)算機(jī)學(xué)科相關(guān),如離散數(shù)學(xué)。從數(shù)學(xué)的分類包括:數(shù)論、近世代數(shù)、矩陣論、域論,以及其它結(jié)合較為緊密地理論:信息論、編碼論、量子學(xué)、混沌論。
密碼學(xué)還有許許多多這樣的問題。當(dāng)前,密碼學(xué)發(fā)展面臨著挑戰(zhàn)和機(jī)遇。計(jì)算機(jī)網(wǎng)絡(luò)通信技術(shù)的發(fā)展和信息時(shí)代的到來,給密碼學(xué)提供了前所未有的發(fā)展機(jī)遇。在密碼理論、密碼技術(shù)、密碼保障、密碼管理等方面進(jìn)行創(chuàng)造性思維,去開辟密碼學(xué)發(fā)展的新紀(jì)元才是我們的追求。
北京科技大學(xué)
班級(jí): 計(jì)1102
姓名:楊勇 學(xué)號(hào): 41155047
第四篇:密碼學(xué)技術(shù)讀書筆記
關(guān)于密碼學(xué)技術(shù)讀書筆記
一.密碼學(xué)的介紹
密碼學(xué)(在西歐語文中,源于希臘語kryptós“隱藏的”,和gráphein“書寫”)是研究如何隱密地傳遞信息的學(xué)科。在現(xiàn)代特別指對(duì)信息以及其傳輸?shù)臄?shù)學(xué)性研究,常被認(rèn)為是數(shù)學(xué)和計(jì)算機(jī)科學(xué)的分支,和信息論也密切相關(guān)。著名的密碼學(xué)者Ron Rivest解釋道:“密碼學(xué)是關(guān)于如何在敵人存在的環(huán)境中通訊”,自工程學(xué)的角度,這相當(dāng)于密碼學(xué)與純數(shù)學(xué)的異同。密碼學(xué)是信息安全等相關(guān)議題,如認(rèn)證、訪問控制的核心。密碼學(xué)的首要目的是隱藏信息的涵義,并不是隱藏信息的存在。密碼學(xué)也促進(jìn)了計(jì)算機(jī)科學(xué),特別是在于電腦與網(wǎng)絡(luò)安全所使用的技術(shù),如訪問控制與信息的機(jī)密性。密碼學(xué)已被應(yīng)用在日常生活:包括自動(dòng)柜員機(jī)的芯片卡、電腦使用者存取密碼、電子商務(wù)等等。
密碼是通信雙方按約定的法則進(jìn)行信息特殊變換的一種重要保密手段。依照這些法則,變明文為密文,稱為加密變換;變密文為明文,稱為脫密變換。密碼在早期僅對(duì)文字或數(shù)碼進(jìn)行加、脫密變換,隨著通信技術(shù)的發(fā)展,對(duì)語音、圖像、數(shù)據(jù)等都可實(shí)施加、脫密變換。二.密碼學(xué)的發(fā)展歷史
密碼學(xué)的發(fā)展歷程大致經(jīng)歷了三個(gè)階段:古代加密方法、古典密碼和近代密碼。1.古代加密方法(手工階段)
古代加密方法大約起源于公元前440年出現(xiàn)在古希臘戰(zhàn)爭(zhēng)中的隱寫術(shù)。當(dāng)時(shí)為了安全傳送軍事情報(bào),奴隸主剃光奴隸的頭發(fā),將情報(bào)寫在奴隸的光頭上,待頭發(fā)長(zhǎng)長(zhǎng)后將奴隸送到另一個(gè)部落,再次剃光頭發(fā),原有的信息復(fù)現(xiàn)出來,從而實(shí)現(xiàn)這兩個(gè)部落之間的秘密通信。
公元前400年,斯巴達(dá)人就發(fā)明了“塞塔式密碼”,即把長(zhǎng)條紙螺旋形地斜繞在一個(gè)多棱棒上,將文字沿棒的水平方向從左到右書寫,寫一個(gè)字旋轉(zhuǎn)一下,寫完一行再另起一行從左到右寫,直到寫完。解下來后,紙條上的文字消息雜亂無章、無法理解,這就是密文,但將它繞在另一個(gè)同等尺寸的棒子上后,就能看到原始的消息。這是最早的密碼技術(shù)。
我國(guó)古代也早有以藏頭詩、藏尾詩、漏格詩及繪畫等形式,將要表達(dá)的真正意思或“密語”隱藏在詩文或畫卷中特定位置的記載。2.古典密碼(機(jī)械階段)
古典密碼的加密方法一般是文字置換,使用手工或機(jī)械變換的方式實(shí)現(xiàn)。古典密碼系統(tǒng)已經(jīng)初步體現(xiàn)出近代密碼系統(tǒng)的雛形,它比古代加密方法復(fù)雜,其變化較小。古典密碼的代表密碼體制主要有:?jiǎn)伪泶婷艽a、多表代替密碼及轉(zhuǎn)輪密碼。3.近代密碼(計(jì)算機(jī)階段)
密碼形成一門新的學(xué)科是在20世紀(jì)70年代,這是受計(jì)算機(jī)科學(xué)蓬勃發(fā)展刺激和推動(dòng)的結(jié)果??焖匐娮佑?jì)算機(jī)和現(xiàn)代數(shù)學(xué)方法一方面為加密技術(shù)提供了新的概念和工具,另一方面也給破譯者提供了有力武器。
第五篇:現(xiàn)代密碼學(xué) 學(xué)習(xí)心得
密碼學(xué)(Cryptology)一詞源自希臘語“krypto's”及“l(fā)ogos”兩詞,意思為“隱藏”及“消息”。它是研究信息系統(tǒng)安全保密的科學(xué)。其目的為兩人在不安全的信道上進(jìn)行通信而不被破譯者理解他們通信的內(nèi)容。
從幾千年前到1949年,密碼學(xué)還沒有成為一門真正的科學(xué),而是一門藝術(shù)。密碼學(xué)專家常常是憑自己的直覺和信念來進(jìn)行密碼設(shè)計(jì),而對(duì)密碼的分析也多基于密碼分析者(即破譯者)的直覺和經(jīng)驗(yàn)來進(jìn)行的。1949年,美國(guó)數(shù)學(xué)家、信息論的創(chuàng)始人 Shannon, Claude Elwood 發(fā)表了《保密系統(tǒng)的信息理論》一文,它標(biāo)志著密碼學(xué)階段的開始。同時(shí)以這篇文章為標(biāo)志的信息論為對(duì)稱密鑰密碼系統(tǒng)建立了理論基礎(chǔ),從此密碼學(xué)成為一門科學(xué)。由于保密的需要,這時(shí)人們基本上看不到關(guān)于密碼學(xué)的文獻(xiàn)和資料,平常人們是接觸不到密碼的。1967年Kahn出版了一本叫做《破譯者》的小說,使人們知道了密碼學(xué)。20 世紀(jì)70年代初期,IBM發(fā)表了有關(guān)密碼學(xué)的幾篇技術(shù)報(bào)告,從而使更多的人了解了密碼學(xué)的存在。但科學(xué)理論的產(chǎn)生并沒有使密碼學(xué)失去藝術(shù)的一面,如今,密碼學(xué)仍是一門具有藝術(shù)性的科學(xué)。1976年,Diffie和 Hellman 發(fā)表了《密碼學(xué)的新方向》一文,他們首次證明了在發(fā)送端和接收端不需要傳輸密鑰的保密通信的可能性,從而開創(chuàng)了公鑰密碼學(xué)的新紀(jì)元。該文章也成了區(qū)分古典密碼和現(xiàn)代密碼的標(biāo)志。1977年,美國(guó)的數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)公布。這兩件事情導(dǎo)致了對(duì)密碼學(xué)的空前研究。從這時(shí)候起,開始對(duì)密碼在民用方面進(jìn)行研究,密碼才開始充分發(fā)揮它的商用價(jià)值和社會(huì)價(jià)值,人們才開始能夠接觸到密碼學(xué)。這種轉(zhuǎn)變也促使了密碼學(xué)的空前發(fā)展。
最早的加密技術(shù),當(dāng)屬凱撒加密法了。秘密金輪,就是加解密的硬件設(shè)備可以公用,可以大量生產(chǎn),以降低硬件加解密設(shè)備的生產(chǎn)與購(gòu)置成本。破譯和加密技術(shù)從來就是共存的,彼此牽制,彼此推進(jìn)。錯(cuò)綜復(fù)雜的加解密演算法都是為了能夠超越人力執(zhí)行能力而不斷演變的。Kerckhoffs原則、Shannon的完美安全性、DES算法、Rijndael算法……<
文章大致翻譯:
一、摘要:隨著遠(yuǎn)程通信的發(fā)展,特別是計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,密碼學(xué)面臨著兩大難題:⒈可靠密鑰的傳輸通道問題。⒉如何提供與手寫簽名等效的認(rèn)證體系。為了解決這些問題,文中提出了公鑰密碼算法和公鑰分配算法,并且把公鑰密碼算法經(jīng)過變換成為一個(gè)單向認(rèn)證算法,來解決有效認(rèn)證問題。此外還討論了密碼學(xué)中各種問題之間的相互關(guān)系,陷門問題,計(jì)算復(fù)雜性問題,最后回顧了密碼學(xué)發(fā)展的歷史。
二、常規(guī)密碼體系:這一部分主要介紹了密碼學(xué)的一些基本知識(shí),如密鑰、加密、解密,算法的無條件安全與計(jì)算性安全,三種攻擊法,即唯密文攻擊、已知明文攻擊、選擇明文攻擊。需要指出的是,本文給出了密碼學(xué)的一個(gè)定義:研究解決保密和認(rèn)證這兩類安全問題的“數(shù)學(xué)”方法的學(xué)科。還有一點(diǎn)需要指出的是,根據(jù)Shannon的理論:無條件安全的算法是存在的,但由于其密鑰過長(zhǎng)而不實(shí)用,這也是發(fā)展計(jì)算上安全的算法的原因。
三、公鑰密碼學(xué):公鑰密碼學(xué)主要包括兩部分:公鑰密碼算法和公鑰分配算法。公鑰密碼算法是指定義在有限信息空間{M}上的,基于算法{Ek }和{Dk }的可逆變換
Ek:{M}-> {M}
Dk:{M}-> {M}
滿足下列條件:
⑴對(duì)任給K∈{K},Ek是Dk的互逆變換
⑵對(duì)任意的K∈{K}和M∈{M},用Ek和Dk進(jìn)行加密和解密是
容易計(jì)算的⑶對(duì)幾乎所有的K∈{K},從Ek推出Dk在計(jì)算上是不可行的⑷對(duì)任意的K∈{K},從K計(jì)算Ek和Dk是可行的這里K是用以產(chǎn)生Ek和Dk的隨機(jī)數(shù)。性質(zhì)⑶保證了可公開Ek而不損害Dk的安全性,這樣才保證了公鑰密碼算法的安全性。
以加密二值n維向量為例,加密算法是乘一個(gè)n×n可逆矩陣,解密則乘其逆矩陣,所需運(yùn)算時(shí)間為n。此可逆矩陣可通過對(duì)單位矩陣做一系列的行和列的初等變換得到,而其逆矩陣是經(jīng)過逆序的行和列的逆變換得到。但是矩陣求逆只需要n的時(shí)間,密碼分析者用時(shí)與正常解密用時(shí)之比是n。雖然這個(gè)例子并不實(shí)用,但對(duì)解釋公鑰密碼算法是有用的。一個(gè)更實(shí)用的方法是利用機(jī)器語言的難懂性,把加密算法編譯成機(jī)器語言公布,而解密算法保密,分析者要理解機(jī)器語言的全部運(yùn)算過程是很困難的,所以要破解是困難的,當(dāng)然此算法必須足夠的復(fù)雜以免通過輸入和輸出對(duì)來破解。
公鑰分配算法是基于求對(duì)數(shù)再取模計(jì)算上的困難。令q是一個(gè)素?cái)?shù),在有限域GF(q)上任取q,計(jì)算Y= a*mod(q),其中a是GF(q)上的一個(gè)固定基元。則 X= log 【Y*mod(q)】。a
不難得出由X計(jì)算Y是較容易的,約需要計(jì)算2×log2q次乘法;然而從Y得出X是困難的,x
32因?yàn)樾鑡/2次運(yùn)算。這樣對(duì)每一個(gè)用戶,從[1,2,?,q-1]中隨機(jī)的選一個(gè)q,計(jì)算出Yi=a* mod q,并將Yi公布,Xi保密。那么當(dāng)用戶i和j通信時(shí),使用Kij=a
公共密鑰。此密鑰用戶i通過j公布的Yj 得到,即Kij= YjXiXiXj Xi*mod q作為他們的XiXj *mod q=(a)*mod q= aXjXi *mod q得到。用戶j的計(jì)算同理。對(duì)于第三方要獲得此密鑰就必須計(jì)算,而這在計(jì)算上是不可行的,從而達(dá)到了在公共信道上分配私鑰的效果。
四、單向認(rèn)證:現(xiàn)有的認(rèn)證體系只能保證不被第三方冒名頂替,但不能解決發(fā)送者和接收者之間的沖突,為此引入單向函數(shù)的概念,即對(duì)定義域中的任意x,f(x)是容易計(jì)算的,但對(duì)幾乎所有的值域中的y,求滿足y= f(x)的x在計(jì)算上是不可行的。例如已知多項(xiàng)式p(x)和x,求y =p(x)是容易的,但若已知y 求出x 是困難的。值得注意的是,這里的計(jì)算上不可逆與數(shù)學(xué)中的不可逆是完全不同的(數(shù)學(xué)上的不可逆可能是有多個(gè)原像)。
公鑰密碼算法可用來產(chǎn)生一個(gè)真正的單向認(rèn)證體系。當(dāng)用戶A要發(fā)信息M給用戶B時(shí),他用其保密的解密密鑰解密“M”并傳給B,B收到時(shí)用A公布的加密密鑰 “加密”此消息從而得到信息M。因?yàn)榻饷苊荑€是保密的,只有A發(fā)送的消息才具有這樣的性質(zhì),從而確認(rèn)此信息來源于A,也就建立了一個(gè)單向認(rèn)證體系。
Leslie Lamport 還提出另一種單向信息認(rèn)證方法,它是應(yīng)用在k維二值空間上的單向函數(shù)f到其自身的映射來實(shí)現(xiàn)的。若發(fā)送者發(fā)送N比特的信息m,他要產(chǎn)生2N個(gè)隨機(jī)k維二值向量x1,X1,x2,X2,??xn , Xn ,并保密,隨后把這些向量在f下的像y1,Y1,y2,Y2,??yn , Yn,發(fā)送給接收者。當(dāng)發(fā)送信息m=(m1,m2 ,?,mN)時(shí),m1=0發(fā)送x1,m1 =1發(fā)送X1,依次類推。接收者把收到的信息用f映射之,若為y1則 m1=0,Y1則m1 =1,如此下去便得到了m。由于函數(shù)f的單向性,接收者無法從y推出x,因此就無法改動(dòng)接收到的任何收據(jù)。當(dāng)然在N比較大時(shí)這種方法的額外開銷是很大的,為此有必要引入單向映射g,用來把N比特的信息映射成n比特(n約為50),但這里要求g有比一般的單向函數(shù)更強(qiáng)的性質(zhì)。
五、問題的相關(guān)性和陷門:
⒈一個(gè)對(duì)已知明文攻擊安全的密碼算法能產(chǎn)生一個(gè)單向函數(shù)。設(shè) :{P}->{K}是這樣的一個(gè)算法,取P=P0??紤]映射f:{K}->{C}定義為f(x)=Sx(P0),則f是一個(gè)單向函數(shù),因?yàn)橐蒮(x)得到x和已知明文攻擊是等價(jià)的(即已知P=P0和SK(P0)求不出K)。Evans還提出過另一種方法,他用的映射是
f(x)=Sx(X),這增加了破解的難度,但這個(gè)單向函數(shù)卻破壞了對(duì)已知明文攻擊安全的要求。⒉一個(gè)公鑰密碼算法可用來產(chǎn)生一個(gè)單向認(rèn)證體系。這一點(diǎn)在(四)中已經(jīng)討論過了。⒊一個(gè)陷門密碼算法可用來產(chǎn)生一個(gè)公鑰分配算法。所謂陷門密碼算法是指只有知道陷
門信息才能正確還原明文,不掌握陷門信息要破解出明文在計(jì)算上是不可行的。比如A要和B建立公共私鑰,A任選一個(gè)密鑰,用B公布的含有陷門信息的加密密鑰加密之,并將密文發(fā)送給B,B由保密的陷門信息解密得到此密鑰,于是A和B建立了公共的私鑰。不難發(fā)現(xiàn)公鑰密碼算法是一個(gè)陷門單向函數(shù)。
六、計(jì)算復(fù)雜度:現(xiàn)代密碼算法的安全性是基于計(jì)算上的不可行性,因此就有必要對(duì)計(jì)算復(fù)雜度進(jìn)行研究。在確定型圖靈機(jī)上可用多項(xiàng)式時(shí)間求解的問題定義為P類復(fù)雜度,在非確定型圖靈上可用多項(xiàng)式時(shí)間求解的問題定義為NP類復(fù)雜度,顯然NP包括P。Karp還定義了一個(gè)NP完全集,即如果NP完全集中的任何一個(gè)問題屬于P 類,則NP中的所有問題都屬于P。現(xiàn)在大多數(shù)的加密算法用的是NP完全集中的問題。關(guān)于密碼分析的難度有如下定理:一個(gè)加密和解密算法若是能在P時(shí)間內(nèi)完成的,那么密碼分析的難度不會(huì)大于NP時(shí)間。
七、歷史回顧:
密碼學(xué)的發(fā)展經(jīng)歷了早期的加密過程保密,到60年代對(duì)明文攻擊安全的算法,到現(xiàn)在算法公開的基于計(jì)算復(fù)雜度的算法,可見其發(fā)展趨勢(shì)是秘密性越來越弱的。并且隨著許多曾經(jīng)被證明為安全的算法被相繼攻破,密碼安全性的分析也經(jīng)歷了早期的純數(shù)學(xué)證明到后來的密碼分析攻擊,再到計(jì)算復(fù)雜度分析。這里還有一個(gè)有趣的現(xiàn)象就是密碼分析方法大多是由專業(yè)人事發(fā)現(xiàn)的,而密碼算法則主要是由非專業(yè)人員提出的。
對(duì)于這篇經(jīng)典之作,我的認(rèn)知顯得很是粗陋。要想真正讀通這篇巨作,恐怕自己還需要修煉些時(shí)日。但是,加密解密已經(jīng)滲入到如今這個(gè)電子化信息化的生活中來,又無時(shí)無刻不在感受著密碼學(xué)帶來的快感。
信息安全技術(shù)作為一門綜合學(xué)科,它涉及信息論、計(jì)算機(jī)科學(xué)和密碼學(xué)等多方面知識(shí),研究計(jì)算機(jī)系統(tǒng)和通信網(wǎng)絡(luò)內(nèi)信息的保護(hù)方法以實(shí)現(xiàn)系統(tǒng)內(nèi)信息的安全、保密、真實(shí)和完整。21世紀(jì)是信息時(shí)代,信息的傳遞在人們?nèi)粘I钪凶兊梅浅V匾?。如:電子商?wù),電子郵件,電子政務(wù),銀行證券等,無時(shí)無刻不在影響著人們的生活。這樣信息安全問題也就成了最重要的問題之一。在信息交換中,“安全”是相對(duì)的,而“不安全”是絕對(duì)的,隨著社會(huì)的發(fā)展和技術(shù)的進(jìn)步,信息安全標(biāo)準(zhǔn)不斷提升,因此信息安全問題永遠(yuǎn)是一個(gè)全新的問題。信息安全的核心是密碼技術(shù)。如今,計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境下信息的保密性、完整性、可用性和抗抵賴性,都需要采用密碼技術(shù)來解決。公鑰密碼在信息安全中擔(dān)負(fù)起密鑰協(xié)商、數(shù)字簽名、消息認(rèn)證等重要角色,已成為最核心的密碼。
Diffie和Hellman的經(jīng)典算法,影響直至今日,各種新興算法的形成、多次地被引用。
經(jīng)典猶在,密碼學(xué)新的開拓仍舊在繼續(xù),仍舊令人期待。