




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、密碼學(xué)與網(wǎng)絡(luò)安全課程實(shí)驗(yàn)利用Matlab語言實(shí)現(xiàn)DES加密算法姓名:ZA 學(xué)號:XXXXX一、 實(shí)驗(yàn)?zāi)康?) 牢固掌握DES密碼算法2) 通過編程實(shí)現(xiàn)DES算法,深入掌握現(xiàn)代密碼算法實(shí)現(xiàn)的基本方法3) 驗(yàn)證DES算法中各個模塊在實(shí)現(xiàn)混淆和彌散中的作用二、 實(shí)驗(yàn)內(nèi)容要求1) DES算法實(shí)現(xiàn):利用Matlab語言實(shí)現(xiàn)DES密碼算法,輸入64比特明文和56比特密鑰,加密得到64比特的密文;2) DES弱密鑰驗(yàn)證:觀察弱密鑰兩次加密的結(jié)果,與非弱密鑰兩次加密的結(jié)果進(jìn)行比較;3) DES算法初步應(yīng)用:嘗試加密一個字符串,字符串的長度大于8個字節(jié);4) DES彌散特性分析:試輸出每一輪加密得到的比特序列,
2、并比較當(dāng)初始明文1個比特發(fā)生變化時,每一輪加密輸出的哪些比特發(fā)生變化。三、 實(shí)驗(yàn)方案與步驟3.1 DES算法實(shí)現(xiàn)a) 算法實(shí)現(xiàn)方案Matlab(矩陣實(shí)驗(yàn)室)是一款工程計(jì)算用的軟件,功能十分強(qiáng)大。Matlab的計(jì)算基于矩陣,而DES算法用矩陣描述是十分簡潔方便的。因此,選用Matlab作為算法實(shí)現(xiàn)語言,基于一系列的矩陣變換、運(yùn)算來實(shí)現(xiàn)DES算法的加密。b) 主要功能實(shí)現(xiàn)流程及代碼解析1) 加密程序圖1 DES基本結(jié)構(gòu)DES算法的結(jié)構(gòu)非常簡單,是一個16次的迭代。核心是函數(shù)中一系列變換。根據(jù)算法框圖,程序步驟主要分為三大部分:1) 輸入明文和密鑰進(jìn)行字符轉(zhuǎn)換2) 產(chǎn)生16輪密鑰矩陣3) 16輪迭代
3、%demo5.mclc, clear all;%-第一步 輸入明文和密鑰-%M='0123456789ABCDEF'% K='0123456789ABCDEF'%MB=; for i=1:16 Mi=M(i); MBi='0000',dec2bin(hex2dec(Mi); MBi=MBi(end-3:end); MBi=str2num(MBi(1),str2num(MBi(2),str2num(MBi(3),str2num(MBi(4); MB=MB,MBi; endM=MB;% 轉(zhuǎn)化為64位二進(jìn)制明文KB=; for i=1:16 Ki=K(
4、i); KBi='0000',dec2bin(hex2dec(Ki); KBi=KBi(end-3:end); KBi=str2num(KBi(1),str2num(KBi(2),str2num(KBi(3),str2num(KBi(4); KB=KB,KBi; endK=KB;% 轉(zhuǎn)化為64位二進(jìn)制密鑰 %-第三步 產(chǎn)生密鑰-%PC_1=57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,
5、14,6,61,53,45,37,29,21,13,5,28,20,12,4;%PC_1置換矩陣 56位KEY0=K(PC_1);% 初始矩陣變換 64 to 56%循環(huán)移位>>>>>shift_array=-1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1; C(1,:)=KEY0(1:28);%C0D(1,:)=KEY0(29:56);%D0for i=2:17C(i,:)=circshift(C(i-1,:)',shift_array(i-1)' %前28位循環(huán)移位%circshift是右移 移動負(fù)數(shù)位表示左移D(i,:)=ci
6、rcshift(D(i-1,:)',shift_array(i-1)' %后28位循環(huán)移位endPC2=14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32;Ki=zeros(16,48);%循環(huán)移位>>>>>KEY_MAT=C,D;%17*56KEY_MAT=KEY_MAT(2:17,:);%16*56PC_2=14,17,11,2
7、4,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32; for i=1:16Ki(i,:)=KEY_MAT(i,PC_2);endKEY=Ki;%-第四步 Feistel結(jié)構(gòu)-%IP=58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17
8、 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7;%IP初始置換矩陣 M=M(IP);%初始置換 m0_L=M(1:32); %輸入的左半部分明文 m0_R=M(33:64);% 輸入的右半部分明文 L,R=fchange(m0_L,m0_R,1,KEY); mi=L,R; mi2_hex(1,:)=mi%進(jìn)入16輪迭代> for i=2:16 L,R=fchange(L,R,i,KEY); mi=L,R; mi2_hex(i,:)=mi end IP_1=40 8 48 16 56 24
9、64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25;%IP_1初始逆置換矩陣m16=R,L;% 最后一步進(jìn)行交換C=m16(IP_1); %IP逆置換m_hex=m_2_hex(C)% 轉(zhuǎn)化為16進(jìn)制 輸出密文%fchange.mfunction Li,Ri = fchange(Li_1,Ri_1,m,KEY)%第i輪
10、f函數(shù)的實(shí)現(xiàn) 輸入Ri-1 表示第i-1輪的右半部分密文 輸出第i輪的密文 Ri_1_ex=trm32_to_48(Ri_1);% 第一步 右半明文進(jìn)行32to48擴(kuò)展 OK Ri_1_ex2=reshape(Ri_1_ex',1,48); %將擴(kuò)展的48位變?yōu)橄蛄?OK f=bitxor(KEY(m,:),Ri_1_ex2); %與第i輪密鑰按位異或 f1=reshape(f,6,8)' %變?yōu)榫仃?8個6位二進(jìn)制數(shù) 8*6 %經(jīng)過S1盒 s=S_box(1); x=2*f1(1,1)+f1(1,6); %S盒縱坐標(biāo) y=8*f1(1,2)+4*f1(1,3)+2*f1(1,
11、4)+f1(1,5); %S盒橫坐標(biāo) f2=s(x+1,y+1); %取S盒中某一數(shù) f2_bin='0000',dec2bin(f2);% % 字符串處理 f2_bin=f2_bin(end-3:end); f2_1=str2num(f2_bin(1),str2num(f2_bin(2),str2num(f2_bin(3),str2num(f2_bin(4);%省略s2s8盒 Ri_1_P=P_exchange(f2S); %轉(zhuǎn)化為向量并置換運(yùn)算P Ri=bitxor(Li_1,Ri_1_P); %Li_1與f函數(shù)后的Ri_1進(jìn)行按位異或 Li=Ri_1; %交換位置end程
12、序見demo5.m。2) 解密程序DES算法設(shè)計(jì)巧妙也體現(xiàn)在其解密過程非常簡單,結(jié)構(gòu)和加密算法完全一樣,只需要將16輪加密所用的密鑰完全倒過來。對密鑰矩陣16X64的行倒序排列,得到倒過來后的密鑰矩陣。其余部分與解密程序保持一致即可。解密時,輸入密文和密鑰,得到明文。 程序見demo5_inv.m。c) 加密64比特明文,對密文進(jìn)行解密得到明文,觀察是否與初始明文一致加密。這里用Matlab 中的GUI界面編寫了加解密的交互程序。交互程序見desecb.m。在程序demo5.m中輸入64比特明文及64比特密鑰:M='0123456789ABCDEF'K='0123456
13、789ABCDEF'運(yùn)行:m_hex = 56CC09E7CFDC4CEF圖2 DES_demo GUI界面解密:在程序demo5_inv.m中輸入64比特密文及64比特密鑰:M='56CC09E7CFDC4CEF'K='0123456789ABCDEF'運(yùn)行: m_hex =0123456789ABCDEF將密文解密后與初始明文一致。為了證明程序?qū)ES算法的正確實(shí)現(xiàn),用密碼學(xué)習(xí)軟件Cryptool進(jìn)行了驗(yàn)證。加密結(jié)果與本程序一致。圖3 CrypTool加密結(jié)果3.2 DES弱密鑰驗(yàn)證a) 用選定的弱密鑰進(jìn)行兩次加密,觀察得到的結(jié)果用已知四個弱密鑰中的
14、一個FFFFFFFFFFFFFFFF,對'0123456789ABCDEF'進(jìn)行加密:M='0123456789ABCDEF'K='FFFFFFFFFFFFFFFF'm_hex =6DCE0DC9006556A3再次加密:M='6DCE0DC9006556A3'K='FFFFFFFFFFFFFFFF'm_hex = 0123456789ABCDEF可以看出,兩次加密后密文和第一次的初始明文一樣,相當(dāng)于是加密后再解密。驗(yàn)證了弱密鑰。b) 用選定的非弱密鑰進(jìn)行兩次加密,觀察得到的結(jié)果用已知四個半弱密鑰中的一個01FE0
15、1FE01FE01FE和對'0123456789ABCDEF'進(jìn)行加密: M='0123456789ABCDEF' K='01FE01FE01FE01FE'm_hex =8A76C7A4F16D47ED再用與01FE01FE01FE01FE對應(yīng)的半弱密鑰FE01FE01FE01FE01FE01加密:M='8A76C7A4F16D47ED'K='FE01FE01FE01FE01'm_hex =0123456789ABCDEF可以看出,一對半弱密鑰能夠互相加解密。3.3 DES算法初步應(yīng)用a) 任意選定一個長度大于8個
16、字符的字符串,設(shè)計(jì)一種方法對這個字符串進(jìn)行加密用電碼本模式ECB直接對明文分成以64位一組的塊,這里用密文分組鏈接模式CBC來實(shí)現(xiàn)。 算法步驟:1) 對任意長(m bit)明文分成N組,每組64bit2) 初始向量IV與第一組明文異或3) 第i-1組密文與第i組明文異或作為DES的輸入明文4) 迭代N-1次5) 得到N*64bit密文,截取為 m bit算法框圖為:圖4 DES_CBC模式基本結(jié)構(gòu)程序編寫主要實(shí)現(xiàn)對任意長明文分組,以及對DES外圍結(jié)構(gòu)的改變。主要代碼如下:M='0123456789ABCDEF0123456789ABCD0123456789ABCDEF012345678
17、9ABCD'% 任意長明文K='0123456789ABCDEF'%密鑰IV='11223344AABBCCDD' %初始向量%*明文分組»»a=ceil(length(M)/16); %向上取整 MB=M; for i=1:16*a-length(M) MB=MB '0' endMi=;for j=1:a Mi(j,:)=MB(16*j-15):16*j); endM=bitxor(M,IV); %算法核心是先按位異或再輸入DES程序見mydes.m,demo5_CBC.m。運(yùn)行,得密文:C_CBC =21BC605
18、D513B38E8D8EF6671D93179070D7E6266C1FA5A5210099C143D26與明文等長(60*4bit)。b) 分析你所設(shè)計(jì)的這種方法有什么優(yōu)點(diǎn)和/或缺點(diǎn)CBC算法的優(yōu)點(diǎn)很明顯能有效地避免ECB對明文統(tǒng)計(jì)特征的泄漏,因?yàn)橥幻魑膲K輸入DES中的實(shí)際明文是不一樣的。CBC算法的缺點(diǎn)也是很明顯的,由于其算法結(jié)構(gòu)的限制,CBC不能實(shí)現(xiàn)并行運(yùn)算,且誤差傳遞效應(yīng)比ECB差,一個密文塊損壞,會引起兩個明文塊損壞。3.4 DES彌散特性分析a) 選擇任意64比特明文m,選擇任意56比特密鑰k進(jìn)行加密,并輸出每一輪加密的64比特序列選定明文和密鑰,依次輸出每一輪加密輸出的密文:明
19、文:M='0123456789ABCDEF'密鑰:K='0123456789ABCDEF'每一輪的加密結(jié)果如下表所示:輪數(shù)密文輪數(shù)密文1F0AAF0AA5E1CEC6325E1CEC6382E13C49382E13C49499542F94499542F90DD64AFB50DD64AFB7036043B67036043BF1470BC27F1470BC2394C8F458394C8F45348DC7469348DC746F37100C610F37100C63C22A9CB113C22A9CB0A37C369120A37C3695C725FFB135C725FFB
20、F4748AD614F4748AD6CC6C340E15CC6C340EBA88F69916BA88F699FB21FB9C 表1 16輪加密結(jié)果b) 隨機(jī)改變m中的一個比特,用上述密鑰k進(jìn)行加密,并輸出每一輪加密的64比特序列,與上一步的結(jié)果進(jìn)行比較,你發(fā)現(xiàn)了什么?將明文:M='0123456789ABCDEF'中第四位二進(jìn)制改為1, 則明文變?yōu)椋篗='1123456789ABCDEF', 用相同的密鑰加密,用紅字標(biāo)注出前6輪密文中與之前對應(yīng)相等的位數(shù),結(jié)果為:輪數(shù)密文輪數(shù)密文1F0AAF0AA5E1DEC6325E1DEC63A3E52C893A3E52C8
21、9ECE9D0E24ECE9D0E269DD75C5569DD75C5ABC7850D6ABC7850D0DC7CB6170DC7CB61A75AF6488A75AF64855F4CFF9955F4CFF92689AB42102689AB4249F546141149F546142DFDC287122DFDC287A924514013A924514098AB62F91498AB62F9D4C4149D15D4C4149DC833086F16C833086FAAE41685 表3 明文改變1bit后的16輪加密結(jié)果首先定性的可以明顯看出:第一輪密文有1bit不相等: 即第二輪密文有7bit 不相等: 即 即 即 即 即 即為了說明彌散特性,對改變后的16輪密文與之前產(chǎn)生密文進(jìn)行定量分析(相等位數(shù)檢查程序見bitcheck.m):輪數(shù)相等位數(shù)輪數(shù)相等位數(shù)1632573424315306347358329311022112412301325143415311625 表4 明文改變1bit前后的16輪加密結(jié)果中相等比特位數(shù)由上表可以看出,隨著輪數(shù)增加,初始明文1bit的改變對于密文的彌散效應(yīng)越好。理論上,任意兩個64位二進(jìn)制序列相等時在相等位數(shù)為32時概率最大(每一位取0,1是等概率的), 因此在第四
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工入股投資合同范本
- 個人合作合同范例
- FLASH外包合同范本
- 不是贈與合同范本
- 勞動合同范本 文
- 咨詢方案合同范例
- 推動城市安全韌性提升的實(shí)施策略
- 品牌電梯訂購合同范本
- 臺前租房合同范本
- 公司理財(cái)合同范本
- 社保人事專員績效考核表
- 河北省自然科學(xué)基金資助項(xiàng)目申請書模板
- 上海世博會對上海城市競爭力影響的評估模型
- 四年級奧數(shù)-容斥問題
- 常用標(biāo)準(zhǔn)波導(dǎo)和法蘭尺寸
- 河南書法家協(xié)會入會申請表
- 鄉(xiāng)村獸醫(yī)登記申請表(共1頁)
- 旋挖樁主要施工方法及技術(shù)措施(全護(hù)筒)
- GB∕T 12810-2021 實(shí)驗(yàn)室玻璃儀器 玻璃量器的容量校準(zhǔn)和使用方法
- Q∕GDW 13155.1-2018 變電站時間同步系統(tǒng)采購標(biāo)準(zhǔn) 第1部分:通用技術(shù)規(guī)范
- 春天,走近青駝詳解
評論
0/150
提交評論