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