《Python工程應用-網(wǎng)絡信息安全》課件-chap3_第1頁
《Python工程應用-網(wǎng)絡信息安全》課件-chap3_第2頁
《Python工程應用-網(wǎng)絡信息安全》課件-chap3_第3頁
《Python工程應用-網(wǎng)絡信息安全》課件-chap3_第4頁
《Python工程應用-網(wǎng)絡信息安全》課件-chap3_第5頁
已閱讀5頁,還剩79頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

chap.3密碼學編程網(wǎng)絡信息安全

通常,密碼是信息安全的核心保護措施。無論是存儲器或信道中的數(shù)據(jù),都可以用密碼進行保護。密碼在早期僅對文字或數(shù)碼進行保護,隨著通信技術(shù)的發(fā)展,密碼也可以應用于語音、圖像、數(shù)據(jù)等。在現(xiàn)代信息安全領(lǐng)域,密碼學/技術(shù)進一步發(fā)展,衍生出一些新的保密應用。這些應用除了機密性保護之外,還可以對信息的完整性、不可否認性進行保護。密碼技術(shù)(Cryptography)包含了密碼學(Cryptography)和密碼分析學(Cryptanalysis)兩大分支,互為矛盾,對抗發(fā)展。本章內(nèi)容對密碼學的典型加密算法Python程序?qū)崿F(xiàn)進行介紹。3.1密碼學基礎(chǔ)3.1.1密碼學基礎(chǔ)定義

密碼學是研究如何隱密地傳遞信息的學科,是數(shù)學和計算機科學的分支。密碼學和信息論密切相關(guān),往往也是信息安全相關(guān)議題的核心。與信息隱藏不同,密碼學的首要目的是隱藏信息的涵義,并不隱藏信息的存在。當前,除了密碼學產(chǎn)生的通信領(lǐng)域,密碼學也已被應用在日常生活信息安全的方方面面了。2.要素一套完整的密碼學實現(xiàn)規(guī)則、實例方案,稱為密碼體制。密碼體制的設(shè)計圍繞著明文、密文、密鑰、加密、解密幾個要素展開,其相互關(guān)系可以用圖3-1密碼體制框圖概括描述。

明文:是指沒有進行變換,能夠直接代表原文含義的數(shù)據(jù),用m表示。全體明文m的集合構(gòu)成明文空間,記為M。密文:是指明文經(jīng)過變換后,隱藏了原文含義的數(shù)據(jù),用c表示。全體密文c的集合構(gòu)成密文空間,記為C。加密:是指將明文轉(zhuǎn)換成密文的實施過程。解密:是指將密文轉(zhuǎn)換成明文的實施過程。加密和解密互為反變換。隨著基于數(shù)學密碼技術(shù)的發(fā)展,加、解密方法一般用數(shù)學算法實現(xiàn),因此分別稱為加密算法和解密算法,其中加密算法記為E,解密算法記為D。

密鑰:是指控制加密和解密的關(guān)鍵要素,分為加密密鑰和解密密鑰。通常每個密碼體制的密鑰k都有加密密鑰ke和解密密鑰kd組成。全體密鑰的集合構(gòu)成密鑰空間,記為K。密鑰空間中不同密鑰的個數(shù)成為密鑰量是衡量密碼體制安全性的一個重要指標。因此,將解密過程通常可以形式化的表示為下式。3.發(fā)展密碼技術(shù)自古有之,回顧密碼學發(fā)展歷史,基本可以劃分為三個階段。第一個階段,是從古代到19世紀末,長達數(shù)千年。這個時期,由于生產(chǎn)力低下,產(chǎn)生的許多密碼體制都是可用紙筆或者簡單機械實現(xiàn)加解密的,所以稱這個時期產(chǎn)生出的密碼體制為“古典密碼體制”。古典密碼體制主要有兩大類:一類是單表代換體制,另一類是多表代換體制。用“手工作業(yè)”進行加解密,密碼分析亦是“手工作業(yè)”。這個階段所產(chǎn)生出來的所有密碼體制幾乎已全部被破譯了。第二個階段,是從20世紀初到20世紀50年代末。在這半個世紀期間,由于莫爾斯發(fā)明了電報,繼而電報通信建立起來了。為了適應電報通信,密碼設(shè)計者設(shè)計出了一些采用復雜的機械和電動機械設(shè)備實現(xiàn)加解密的體制。這個時期產(chǎn)生出的密碼體制為“近代密碼體制”。近代密碼體制主要是像轉(zhuǎn)輪機那樣的機械和電動機械設(shè)備。這些密碼體制基本上已被證明是不保密的,但是要想破譯它們往往需要很大的計算量。第三個階段,是從Shannon于1949年發(fā)表的劃時代論文《保密通訊系統(tǒng)理論》(CommunicationTheoryofSecrecySystem)開始的,這篇論文證明了密碼編碼需要堅實的數(shù)學基礎(chǔ)。在這一時期,微電子技術(shù)的發(fā)展使電子密碼走上了歷史舞臺,共同催生了“現(xiàn)代密碼體制”。特別是20世紀70年代中期,DES密碼算法的公開發(fā)表,以及公開密鑰思想的提出,更是促進了當代密碼學的蓬勃發(fā)展。到了20世紀80年代,大規(guī)模集成電路技術(shù)和計算機技術(shù)的迅速發(fā)展,現(xiàn)代密碼學得到了更加廣泛的應用。當前,隨著量子等新興技術(shù)的不斷出現(xiàn)與發(fā)展,密碼技術(shù)進入了一個全新的發(fā)展期。量子密碼術(shù)與傳統(tǒng)的密碼系統(tǒng)不同,它依賴于物理學作為安全模式的關(guān)鍵方面而不是數(shù)學,也預示著密碼新時代的到來。3.1.2密碼體制分類

密碼體制劃分方法大致分為三種:換位與代替密碼體制、序列與分組密碼體制、對稱與非對稱密鑰密碼體制。除此之外,單向函數(shù)還可用來保護數(shù)據(jù)的完整性。換位與代替密碼體制

在對明文進行加密變換時,通??梢圆捎锰娲蛽Q位兩種方法。替代是將明文中的一個字母用密文字母表中其他字母替代。換位是對數(shù)據(jù)的位置進行的置換的方法。2.分組與序列密碼體制

分組密碼是對數(shù)據(jù)定長的塊上進行加解密操作。序列密碼的加密變換只改變一位明文,故它可以看成是塊長度為1的分組密碼。3.對稱與非對稱密鑰密碼體制對稱密碼體制(或單密鑰密碼密碼體制)的加密密鑰與解密密鑰相同。非對稱密碼體制(或雙密鑰密碼密碼體制)的加密密鑰與解密密鑰不相同。進一步,如果在一個雙密鑰密碼密碼體制中,加密密鑰ke計算解密密鑰kd是困難的,公開ke不會損害kd的安全性,則可以將加密密鑰ke公開,這樣的密碼體制稱為公鑰密碼體制。還有些學者,將單向散列函數(shù)(或稱為:單向函數(shù),One-wayfunction)歸為同對稱與非對稱密鑰密碼并列的密碼體制。單向函數(shù)是一種具有下述特點的單射函數(shù):對于每一個輸入,函數(shù)值都容易計算(多項式時間),但是給出一個隨機輸入的函數(shù)值,算出原始輸入?yún)s比較困難(無法在多項式時間內(nèi)使用確定性圖靈機計算)。由于單向函數(shù)的結(jié)果值,對于輸入非常敏感,即使輸入有微量變化,輸出都會有劇烈變化,因此被用于檢測數(shù)據(jù)的完整性是否遭到破壞。密碼體制還可以按照加密對象、軟硬件等進行劃分,在此不再贅述。3.2古典密碼編程3.2.1古典密碼思想

古典密碼編碼方法主要有兩種,即:置換和代換。把明文中的字符重新排列,字母本身不變,但其位置改變了,這樣編成的密碼稱為置換密碼。最簡單的置換密碼是把明文中的字母順序倒過來,然后截成固定長度的字母組作為密文。代換密碼則是將明文中的字符替代成其他字符。在進行代換時,可以采用一張代換表,稱為單表代換。單表代替的缺點就是,明文字符相同,則密文字符也相同,因此就無法隱藏明文的字符統(tǒng)計特性,因此安全性較差(字母統(tǒng)計特性如圖3-2)。為了克服這一確定,人們采用周期順次使用多張代換表的方法實現(xiàn)加密,這種方法就是多表代換。比較置換和代換密碼的特點可知,移位密碼位置變但形態(tài)不變,代替密碼形態(tài)變但位置不變。將代替密碼和移位密碼輪番使用,就可以發(fā)揮各自的長處,克服對方的缺點,這也是現(xiàn)代密碼可借鑒的設(shè)計思想。3.2.2移位密碼

移位密碼將明文中的字母順序被重新排列以形成密文。其中純文本中的每個字符都是水平寫入的,具有指定的字母寬度,而密文垂直寫入,可創(chuàng)建完全不同于明文的密文。例如:純文本helloworld的柱狀轉(zhuǎn)置技術(shù)如下圖3-3所示

明文字符串水平放置,密文以垂直格式創(chuàng)建:“holewdlolr”。接收方必須使用相同的表,才能將密文解密為明文。以下是實現(xiàn)代碼(transposition.py)。加密函數(shù)encryptMessage首先創(chuàng)建一個key個元素的空列表,每個元素用來存儲一列?;為了使得形成一個完整的方陣,需要使用函數(shù)對輸入的消息補齊長度,長度為行數(shù)乘列數(shù)(key)?;設(shè)置將當前列號作為指針?,順序讀取該列的明文(相鄰兩個字符相互間隔key個字符)內(nèi)容存儲到對應列中,具體過程如圖3-4所示。解密函數(shù)decryptMessage工作方式與encryptMessage函數(shù)類似,只是按照行數(shù)的跨度提取字符?,最后將解密明文分別填充到各行組成的列表中。3.2.3置換密碼

置換密碼利用置換表對明文進行置換,置換的方法可以采用加法、乘法、仿射、密鑰短語等。1.加法密碼加法密碼是用明文字母在字母表中后面第k個字母來代換,得到的就是密文字母。K=3時的加法密碼就是密碼學中廣為人知的凱撒密碼?!皭鹑雒艽a”是古羅馬愷撒大帝在西塞羅戰(zhàn)役時,用來保護重要軍情的加密系統(tǒng),記載于(《高盧戰(zhàn)記》)。作為一種最古老的對稱加密體制,它的加密原理是通過移動指定位數(shù)的字母,以此實現(xiàn)加密和解密。所有字母都在字母表上向后(或者向前),按照固定數(shù)字進行偏移后,通過替換形成密文。而進行偏移所按照的固定數(shù)字稱之為偏移量。例如,所有的字母A都被替換成了C,而B變成D,到了字母表后面,Y也被替換成A,Z被替換成B,則它的偏移量是2,若偏移量為3時,明密對照關(guān)系如圖3-5所示:由此可見,凱撒密碼加解密的密鑰就是偏移的位數(shù)。以下是加法密碼的實現(xiàn)代碼。

上述代碼encrypt為加密函數(shù),該函數(shù)首先將待加密的消息全部轉(zhuǎn)換為大寫字母?,然后進行處理;對于非字母的字符忽略不處理?;在進行移位時在原字母序號基礎(chǔ)上加上秘鑰值,然后以width為除數(shù)求余數(shù),以“A”的ASIIC碼為基址計算密文字符?。上述程序中,函數(shù)ord(c)的參數(shù)是長度為1的字符串(即:字符)。當參數(shù)為統(tǒng)一對象時(unicodeobject),返回能代表該字符的統(tǒng)一編碼,當參數(shù)為8比特的字符串時,返回該字節(jié)的值。例如,ord(‘a(chǎn)’)返回整形數(shù)值97,ord(u’\u2020’)返回8224。函數(shù)chr(i)返回一個字符,字符的ASCII碼等于參數(shù)中的整形數(shù)值。例如chr(97)返回字符’a’,該方法是ord()的反方法。參數(shù)必須是0-255的整形數(shù)值,否則會拋出valueError錯誤。解密函數(shù)decrypt操作與encrypt相反。通過對加法密碼的算法分析可知,加法密碼的密鑰空間僅為25。2.乘法密碼在使用凱撒密碼技術(shù)時,加密和解密符號涉及使用簡單的加法或減法,基本過程將值轉(zhuǎn)換為數(shù)字。如果使用乘法,也可用于轉(zhuǎn)換為密文。乘法密碼的加解密公式如下:注意:k-1不是k的倒數(shù),而是k模q的逆元。以密鑰為7為例,進行加密的密文對應關(guān)系如下圖3-6所示。

由于并不是每個整數(shù)都可以作為乘法密的密鑰,很多數(shù)字會破壞明密文的映射關(guān)系,乘法密碼的密碼空間大小是Φ(n),Φ(n)是歐拉函數(shù)(小于n且與n互素的數(shù)的個數(shù))。當n為26字母,則與26互素的數(shù)是1、3、5、7、9、11、15、17、19、21、23、25,共有12個,即Φ(n)=12。因此乘法密碼的密鑰空間為12(此外,k=1時加密變換為恒等變換)。

乘法密碼的解密密鑰不是原密鑰,而是前面所述的密鑰對于26的逆元。逆元是指對于同余方程滿足:ax≡1(modb),稱x為a關(guān)于模b的乘法逆元,計算逆元的常見方法有:擴展歐幾里得算法(見3.5.2節(jié)介紹)、費馬小定理/歐拉定理、遞推求逆元、等幾種。

以下是乘法密碼的實現(xiàn)代碼(MultiplicativeCipher.py)。decrypt函數(shù),在進行移位時在原字母序號基礎(chǔ)上乘秘鑰值,然后以width為除數(shù)求余數(shù),以“A”的ASIIC碼為基址計算密文字符?;進行解密的函數(shù)decrypt使用的秘鑰是key的模26逆元,通過inverseElement函數(shù)計算得出?。3.仿射密碼仿射密碼是乘法密碼和加法密碼算法的組合。以下是乘法密碼的實現(xiàn)代碼(AffineCipher.py)。由上述代碼可以看出,放射密碼就是加法密碼和乘法密碼的結(jié)合?,通過這樣的結(jié)合秘鑰空間擴展為12×26=312,但依然很有限。3.2.4維吉尼亞密碼

如前所述,單表代替的密碼使用一張表進行代替,安全性很差。人們提出采用多張表進行周期使用的方法。在多表代替密碼中,代替表的使用由密鑰來指示,維吉尼亞密碼就是這種方法的典型代表。維吉尼亞密碼與凱撒算法類似,只有一個主要區(qū)別,即:維吉尼亞密碼包含一個字符移位的表,而維吉尼亞密碼包含多個字母移位的表,全部的密碼表見下圖3-7所示。

上圖3-7中,橫排第一行為明文,左側(cè)第一列為密鑰字母,中間區(qū)域是密文,例如:依據(jù)圖中明密對照表,密鑰字母為d,明文字母為b時查表得密文字母為e??梢栽O(shè)定一個周期,循環(huán)使用維吉尼亞密碼表的不同列,就行成了多表加密。以下是維吉尼亞密碼的實現(xiàn)代碼(Vigenere.py)

上述函數(shù)translateMessage可以工作于加密(encrypt)和解密(decrypt)兩種模式。首先計算待處理(加45密或解密)字母在LETTERS表中的位置?(通過字符串函數(shù)find查找);加密時,根據(jù)密鑰k的每個字母在LETTERS表中的序號,得到移位數(shù),利用移位數(shù)執(zhí)行加法密碼?,最終對所有明文加密。解密方法,反之進行?。秘鑰將被循環(huán)使用,從而形成多表的密碼替代?。顯然,對于秘鑰“ASIMOV”,上述代碼會依次使用A、S、I、M、O、V對應的共6張表。

近代密碼學實際是古典密碼學多表替代方法的機械化,下圖3-8即為著名的恩尼格瑪機鍵盤與轉(zhuǎn)子結(jié)構(gòu)。該結(jié)構(gòu)由至少1個鍵盤、1個轉(zhuǎn)子和顯示器構(gòu)成。按下鍵盤中的字符按鈕將接通電源,電流經(jīng)導線和轉(zhuǎn)子上的連接線觸發(fā)顯示器顯示,形成明密映射。當鍵盤每按下一次,轉(zhuǎn)子會發(fā)生轉(zhuǎn)動,則明密映射關(guān)系也發(fā)生變化,就形成了多表密碼替代。由于實際的恩尼格碼機有多個轉(zhuǎn)子和反射器,因此形成1億億余種可能。3.3分組密碼編程3.3.1分組密碼基礎(chǔ)

1.分組密碼提出分組密碼(BlockCipher),又稱塊密碼,它是將明文消息編碼后的數(shù)字序列劃分成固定長度的分組,各分組作為一個整體在密鑰控制下變換成等長度的密文組。分組密碼算法的設(shè)計是由香農(nóng)(C.E.Shannon)提出的。為了確保分組密碼的安全性,香農(nóng)充分利用擴散(diffusion)和擾亂(confusion)的思想。所謂擴散的目的是讓明文中的單個數(shù)字影響密文中的多個數(shù)字,從而使明文的統(tǒng)計特征在密文中消失,相當于明文的統(tǒng)計結(jié)構(gòu)被擴散;而擾亂是指讓密鑰與密文的統(tǒng)計信息之間的關(guān)系變得復雜,從而增加通過統(tǒng)計方法進行攻擊的難度。由于分組密碼的思想與現(xiàn)代通信的分組交換不謀而合,因此具有很好的應用價值。在現(xiàn)代通信系統(tǒng)中廣泛應用的分組密碼包括:DES、IDEA、SAFER、Blowfish和Skipjack等。2.Feistel網(wǎng)絡

在設(shè)計安全的分組加密算法時,應最大限度地抵抗現(xiàn)有密碼分析,如:差分分析、線性分析等,還需要考慮密碼安全強度的穩(wěn)定性。此外,用軟件實現(xiàn)的分組加密要保證每個組的長度適合軟件編程(二進制2n),盡量避免位置換操作,以及盡可能地使用加法、乘法、移位等處理器提供的標準指令。從硬件實現(xiàn)的角度,加密和解密要在同一個器件上都可以實現(xiàn),即加密解密硬件實現(xiàn)的相似性?;谶@些考慮,大部分的分組密碼都是基于Feistel網(wǎng)絡這種經(jīng)典結(jié)構(gòu)。

Feistel網(wǎng)絡是由密碼學家Feistel提出的,具體結(jié)構(gòu)如圖3-9所示。

Feistel提出:利用乘積密碼可獲得簡單的代換密碼。乘積密碼指順序地執(zhí)行兩個或多個基本密碼系統(tǒng),使得最后的密碼強度高于每個基本密碼系統(tǒng)產(chǎn)生的結(jié)果。其思想實際上是Shannon提出的利用乘積密碼實現(xiàn)混淆和擴散思想的具體應用。

Feistel加密算法的輸入是分組長為2w的明文和一個密鑰k,將每組明文分成左右兩半L和R,在進行完n輪迭代后,左右兩半再合并到一起產(chǎn)生密文分組。第i輪迭代的前一輪輸出的函數(shù):Feistel解密過程本質(zhì)上和加密過程是一樣的,算法使用密文作為輸入,但使用子密鑰Ki的次序與加密過程相反。這一特征保證了解密和加密可采用同一算法。影響Feistel結(jié)構(gòu)安全的因素主要包括:分組大小、密鑰大小、輪數(shù)、子密鑰生成算法、輪函數(shù)。3.3.2DES算法編程Feistel結(jié)構(gòu)的最著名實例就是DES密碼。DES是1976年由美國國家標準(NBS)頒布,由IBM公司研制的一種算法。作為美國的商用加密標準算法DES(DataEncryptionStandard)得到了廣泛的支持和應用,極大地促進了分組密碼發(fā)展。DES以64位為分組(64位一組的明文從算法一端輸入,64位密文從另一端輸出),加密和解密用同一密鑰,有效密鑰長度為56位(密鑰通常表示為64位數(shù),但每個第8位用作奇偶校驗,可以忽略)。DES加密過程

DES在加密過程分為三個階段,具體描述如下(以輸入64bit明文為例):

第一階段,用一個初始置換IP重新排列明文分組的64比特數(shù)據(jù)(如圖3-10所示)。

圖3-10中數(shù)字為二進制數(shù)的腳標序號。第二階段:進行具有相同功能的16輪循環(huán)變換,每輪變換中都含置換和代換運算(如圖3-11所示,下圖相當于圖3-9中的一輪,具體操作過程將結(jié)合后續(xù)編程進行介紹)。第三階段:最后再經(jīng)過一個逆初始置換逆IP-1從而產(chǎn)生64比特密文。這里需要注意的是,無論是初始置換還是最終的逆初始置換,都不能增減DES的安全性。其設(shè)計的初衷并不被人所知,但是看起來其目的是將明文重新排列,使之適應8-bit寄存器。其映射規(guī)則如下:矩陣為8×8矩陣,自左至右,自上至下依次排位,矩陣中的某次位數(shù)目即為明文中該次位的比特值映射到buffer的偏移量。2.DES加解密實現(xiàn)下面按照DES的加密順序?qū)ES加密的程序進行介紹。

(1)初始置換IP與IP逆變換由于上述第一階段初始置換IP與第三階段IP逆變換效果相反,原理類似,因此這里一并進行介紹。代碼如下:擴充/置換實現(xiàn)的代碼如下:

上述expend函數(shù)通過查表方法,對內(nèi)容source進行擴展,可以看出有16個數(shù)重復出現(xiàn)2次。

②與子秘鑰進行混合等長的數(shù)據(jù)與子秘鑰數(shù)組作異或,代碼如下。上面代碼中,數(shù)據(jù)與子秘鑰按位作異或操作?。置換選擇的實現(xiàn)代碼如下:

上述代碼首先給出諸S盒的定義?;然后將輸入的數(shù)據(jù)分成8個6bit分組?;將每個分組的最高位和最低位組成二進制數(shù)作為x?;將2345組成二進制數(shù)作為y?,用x、y在S盒表中查出輸出值。上述代碼還調(diào)用了函數(shù)dataP完成P盒置換?,P盒的定義如圖3-15所示。圖中數(shù)字為二進制數(shù)的腳標序號。代碼如下:P盒置換與IP置換類似,也是進行了位置變換。④與左半部分混合與左半部分進行異或操作后交換輸出,與上面步驟3)操作類似,代碼略。3.DES子密鑰生成實現(xiàn)

在進行各輪循環(huán)時,使用的密鑰是不同的子密鑰,子密鑰生成首先將輸入DES的56-bit密鑰經(jīng)過一個置換運算(其置換規(guī)則與上文IP矩陣類似);然后將64-bit分成8組,每組8-bit,僅取每組前7-bit組成56-bit密鑰,則每個子密鑰是為48-bit;再進行如下圖3-16所示的移位操作,就生成了子密鑰。①密鑰置換PC-1

為了生成48-bit子密鑰,需要進行子置換,其輸入數(shù)據(jù)為旋轉(zhuǎn)后得到的密鑰舍去其中8-bit(8、16、24、32、40、48、56、64位),而后再用一個6×8的矩陣進行置換,代碼如下:②循環(huán)左移

56-bit密鑰首先將會分成兩部分,這兩部分將會各自循環(huán)移位。其移位規(guī)則為:在第1、2、9、16輪時,兩個子部密鑰向左循環(huán)移位1-bit,在其它輪時,兩個子部密鑰向左循環(huán)移位2-bit??梢园l(fā)現(xiàn),16輪過后,兩個子部密鑰正好旋轉(zhuǎn)了28-bit,即旋轉(zhuǎn)一周。

代碼如下。

上述代碼中,根據(jù)輪次i獲得為當前輪次移位數(shù)ls?;每次循環(huán)時將最左側(cè)(0位)位數(shù)值記錄下來?;?左移一位;?把最左側(cè)一位補到右側(cè),每完成一次移位操作就可以得到一個子密鑰。③密鑰置換PC-2子密鑰的置換PC-2實現(xiàn)代碼如下。DES加解密算法相同,解密子密鑰使用順序與加密相反。此外,直接對各數(shù)據(jù)獨立進行DES加密的模式稱為:ECB(電子電報密碼本ElectronicCodeBook),其缺點是:可能遭受對明文的主動攻擊,信息塊可被替換、重排、刪除、重放。為了抵御這種密碼本攻擊,DES通過初始化向(IV))和分組密碼塊之間的相互鏈接,實現(xiàn)的多種改進,其中:CBC(密碼分組鏈接CipherBlockChaining,前分組加密結(jié)果作為輸入與后一分組進行混合,如圖3-17所示)、安全性好于ECB、適合于傳輸長度大于64位的報文,還可以進行用戶鑒別,是大多系統(tǒng)的標準如SSL、IPSec;CFB(密碼反饋方式CipherFeedBack)它特別適于用戶數(shù)據(jù)格式的需要,能隱蔽明文數(shù)據(jù)圖樣,也能檢測出對手對于密文的篡改;OFB(輸出反饋方式OutFeedBack)用于高速同步系統(tǒng)。對于這些DES的工作模式,將不作具體介紹。3.4序列密碼3.4.1序列密碼原理

序列一般指二進制數(shù)據(jù)流,而序列密碼是針對二進制數(shù)據(jù)流的加密。序列密碼的加密變換只改變一位明文,故它可以看成是塊長度為1的分組密碼。序列密碼是各國軍事和外交等領(lǐng)域使用的主要密碼體制,其主要問題是如何生成密鑰流周期長、復雜度高、隨機性特性足夠好,從而使之盡可能地接近一次一密的密碼體制。序列密碼的工作流程如圖3-18所示。其過程是,一方面將種子密鑰k導入密鑰序列生成器,生成出密鑰流,與明文流mi進行加密,生成出密文流,然后在公開信道中傳輸;另一方面通過安全信道將種子密鑰k傳給接收方,接收方亦將種子密鑰k導入密鑰序列生成器(注意要與發(fā)送方嚴格同步),生成出密鑰流,與密文流進行解密,恢復出明文流mi。

對于二進制的明文流,E和D操作,一般是異或操作。序列密碼的關(guān)鍵在于獲得良好的偽隨機序列。這個序列應該盡量滿足以下條件:(1)0、1分布均勻(2)0、1游程分布平衡(3)所有異相自相關(guān)函數(shù)值相等(4)序列的周期足夠大,如大于1050;(5)序列易于高速生成;(6)序列的不可預測性充分大。目前通信用的偽隨機序列密鑰流,都是由偽隨機序列發(fā)生器的硬件設(shè)備產(chǎn)生。發(fā)生器一般包括驅(qū)動部分和非線性組合部分,其中驅(qū)動部分用一個或多個長周期線性反饋移位寄存器構(gòu)成,它將控制生成器的周期和統(tǒng)計特性;非線性組合部分對驅(qū)動器各輸出序列進行非線性組合,控制和提高生成器輸出序列的統(tǒng)計特性、線性復雜度和不可預測性等。3.4.2序列密碼編程本節(jié)介紹序列密碼編程技術(shù),分為加密和序列生成部分。

1.序列密碼程序設(shè)計以下是序列密碼的編程(Stream.py)。

上述代碼生成一個與消息等長的隨機序列?;序列與消息按位異或?;接收端將密文與隨機序列再次異或就可以恢復出明文(注意收發(fā)雙發(fā)進行異或操作一定要保證嚴格的同步)?。2.偽隨機序列生成

序列密碼的關(guān)鍵在于偽隨機序列的生成。偽隨機序列又稱為偽噪聲序列。二進制偽隨機序列在信號同步、擴頻通信和多址通信等領(lǐng)域得到了廣泛的應用。例如,在擴頻通信中,使用偽噪聲序列作為擴頻信號,可使得擴頻后的信號具有很寬的頻譜,因此具有頻率譜密度很小的特性。通常加密采用的是M序列。所謂M序列是最長線性移位寄存器序列的簡稱。下面是軟件實現(xiàn)代碼(M.py)。

上述代碼利用函數(shù)real_calculate_prbs生成偽隨機序列,其中value是二進制表示的生成序列的位數(shù),expression表示從value中揀去的數(shù);該函數(shù)將value轉(zhuǎn)化為列表,作為初始種子?;采用將揀去的兩位相加對2求模的方法得到新的一位二進制數(shù),插入序列的最前面,如此反復,指導序列達到value要求的長度?。隨機數(shù)生成的方法還有很多,在此不做一一介紹。3.5公鑰密碼編程3.5.1公鑰密碼思想公鑰密碼將加、解密分開,采用兩個不同密鑰,其中一個密鑰公開,稱為公鑰,另一個密鑰為用戶私有,稱為私鑰。公私鑰之間相互關(guān)聯(lián),但從公鑰求私鑰在計算上不可能的。公鑰加密的提出具有很多對稱密碼體制所有具有的特點,具體可以概括為:

(1)密鑰分發(fā)簡單,存儲量小;

(2)不僅能加密,還能完成數(shù)字簽名、密鑰協(xié)商等;

(3)適用于網(wǎng)絡,實現(xiàn)不相識用戶間保密安全通信。

上述這些特點也是公鑰密碼的優(yōu)勢所在,并使得密碼應用發(fā)生革命性變化,為密碼學的發(fā)展開辟了新56方向。然而公鑰密碼的設(shè)計需要更復雜的數(shù)理基礎(chǔ),對設(shè)計的要求更加嚴格,需要至少滿足以下要求:

(1)密鑰對的產(chǎn)生在計算上容易;(2)加解密計算在計算上容易;

(3)由公鑰求私鑰在計算上不可行;

(4)由密文和接收者的公鑰恢復明文在計算上不可行。基于上述要求,密碼學家一般是圍繞著一個具有單向性的數(shù)學難題而設(shè)計,常見的此類數(shù)學難題有大整數(shù)因子分解、多項式求解、橢圓曲線、離散對數(shù)等,因篇幅所限無法對這些密碼算法進行一一介紹,下面主要介紹RSA算法及其編程實現(xiàn)。3.5.2RSA算法編程1.RSA算法基礎(chǔ)RSA算法是1978年由R.Rivest,A.Shamir和L.Adleman提出的一種用數(shù)論構(gòu)造的、也是迄今為止理論上最為成熟和完善的公鑰密碼體制,該體制已得到廣泛的應用。它是建立在大數(shù)分解困難問題上的,既可用于加密,也可用于數(shù)字簽名。所謂大數(shù)分解困難問題就是:若已知兩個大素數(shù)p和q,求n=pq只需一次乘法,但若已知n,求p和q,則是一個要攻克的難題。

RSA的算法核心利用了歐拉公式的下面性質(zhì)(推導略):關(guān)鍵就是是找到找到n、e、d,三者關(guān)系是:d為e的模φ(n)逆元。如果三個數(shù)足夠大,就極難由其中部分猜到另外部分,這就是RSA的安全基礎(chǔ)和加解密基本思想?;谏鲜鲇嬎?,RSA的公鑰與私鑰的生成,Python可以采用以下兩種方法實現(xiàn)。方法一:采用RSA的算法數(shù)值逐步計算實現(xiàn)(RSA_Key_Generator_no_module.py)。

這種方法嚴格按照上述五步步驟,從素數(shù)選取直至生成公鑰和私鑰對,具體代碼設(shè)計如下。第一步,產(chǎn)生一個大素數(shù):素數(shù)是RSA的基礎(chǔ),為了取得足夠的安全性,所選的素數(shù)應該足夠大。目前找到素數(shù)的方法主要是采用篩選的方法,包括:埃氏篩法、歐拉篩法等,下面代碼采用拉賓米勒方法獲得素數(shù)。安裝后,生成pubkey和privkey的代碼如下。

上述代碼利用rsa模塊生成指定長度的(公鑰,私鑰)元組。注意,生成較長密鑰的時間可能較長。通常,生成的公鑰和私鑰需要以文件的方式保存起來,下面代碼展示的公鑰、私鑰的文件保存與裝入的實現(xiàn)。公鑰與私鑰的文件存儲格式為:.pem格式,如下圖3-22所示。

在讀取.pem格式文件后,需要使用rsa.PrivateKey.load_pkcs1、rsa.PublicKey.load_pkcs1將私鑰與公鑰裝入才能進行使用。裝入后的密鑰格式(與rsa.newkeys產(chǎn)生時的格式相同),形如:b'i\xcd\xbeV!\x1f\xdf\xe2a\xd5\xae\x8a\xa7!\xb4\xb3T\x12\x8d\xfaX\xbbWwg\xcc\xdd\x94\xa2\r*\x80\xabu\xec|\xa6\xacO\xa0d\xb0\'8J\x01\xd2\x9au"k\x99\xab>\xd8\xf7\x1d7\xd4\xc9P\xe4T\xce’上述密鑰是以字節(jié)為格式單元的表示。

(1)RSA加密模式公鑰密碼體制利用公鑰加密,私鑰解密稱為加密模式。公鑰可以從公開渠道獲取,因此就免去了一對一的密鑰分發(fā)問題。經(jīng)過公鑰加密的明文,只有被擁有對應私鑰的用戶解密,因此確保了數(shù)據(jù)安全。

RSA的加密代碼如下(使用方法一自行生成的公鑰和私鑰)。求解過程中,采用了Python的快速冪模算法,其核心思想在于:將大數(shù)的冪運算拆解成了相對應的乘法運算,利用下式:(2)RSA認證模式公鑰密碼體制利用私鑰加密,公鑰解密稱為認證模式。因為只有擁有私鑰的用戶,才能加密出聲明身份對應公鑰(數(shù)字證書中包含,由CA頒發(fā))可以解密的密文,從而進行身份驗證。

RSA的簽名代碼如下(采用方法二RSA模塊提供的函數(shù)工具)RSA的驗證代碼如下。raw_data為簽名前的數(shù)據(jù),sign為經(jīng)過私鑰簽名(加密)的輸出值。可見,認證模式與加密模式相比,只是使用的公鑰、私鑰的順序不一樣。3.5.3DH算法編程DH算法基礎(chǔ)

現(xiàn)代密碼,秘密全部寓于密鑰,密鑰分發(fā)就成為一個問題。雖然,公鑰密碼體制一定程度上解決了該問題,但是在現(xiàn)代信息系統(tǒng)中,對稱密碼還占據(jù)著很大的應用領(lǐng)域,如何進行對稱密鑰分發(fā)的難題依然無法回避。進一步,由于任何密鑰都有使用期限,因此密鑰的定期(或不定期)更換是密鑰管理的一個基本任務。為了盡可能地減少人的參與,密鑰的分配需要盡可能地自動進行。

1976年,W.Diffie和M.E.Hellman于提出,讓A和B兩個陌生人之間建立共享秘密密鑰的公開密鑰算62法,稱為Diffie-Hellman算法(簡稱DH算法)。DH算法利用了原根的性質(zhì),即:

利用該性質(zhì),用戶雙發(fā)可以在不公開自己秘密的情況下,與對方交換混合,就可以得到相同的計算值,作為后續(xù)對稱加密時的密鑰,也就是完成了密鑰協(xié)商,具體如下圖3-23所示。在DH密鑰交換算法中,選擇的單向函數(shù)是模指數(shù)運算。由于它的逆過程是離散對數(shù)問題,根據(jù)公鑰密碼的理論可知,具有很高的安全性。2.DH算法編程工作順序①Alice選一個素數(shù)p;②找到這個素數(shù)的原根,從眾多個中選擇其中一個g;③選一個小于上面選定素數(shù)p的隨機整數(shù)(私鑰)a,并計算gamodp得到公鑰A,形成公鑰私鑰對,并將g、p、A通過公開信道發(fā)送給對方Bob;④Bob接收到g、p、A后,選定一個小于p的素數(shù)作為自己的私鑰b,一方面計算gbmodp得到公鑰B,將B發(fā)送給Alice,另一方面通過計算Abmodp得到會話密鑰K;⑤Alice收到B后,通過計算Bamodp亦可得到會話密鑰K。

DH代碼如下。使用函數(shù)prime_num隨機找一個大于n的素數(shù)。

上述代碼給出了一種不同于前面的素數(shù)尋找方法。首先創(chuàng)建一個放置素數(shù)的空列表list?;然后通過除以已知素數(shù)(list中存儲)的方法,依次找出2到10?n內(nèi)的所有素數(shù)?;對list進行隨機排序,找出第一個素數(shù)作為輸出?。下面代碼找到素數(shù)的原根。計算會話密鑰K的函數(shù)代碼如下。它的目的是使得兩個用戶安全地交換一個密鑰以便用于以后的報文加密,這個算法本身限于密鑰交換的用途,許多商用產(chǎn)品都使用這種密鑰交換技術(shù)。3.6單向函數(shù)編程3.6.1單向函數(shù)算法基礎(chǔ)

溫馨提示

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

最新文檔

評論

0/150

提交評論