图解密码技术学习笔记
主題:圖解密碼技術(shù)
簡介:密碼技術(shù)入門學(xué)習(xí)
參考:譯者分享
作者:ybb
時(shí)間:2021年12月15日
周自恒直播課學(xué)習(xí)筆記
4.分組密碼的模式
4.1 DES和AES作為對稱加密時(shí)使用的分組密碼只能加密固定長度的明文,如果需要加密任意長度的明文就需要對分組密碼進(jìn)行迭代,而分組密碼的迭代方法就稱為分組密碼的模式。分組密碼模式的選擇很重要,合適的模式才可以保證消息的機(jī)密性。
4.2.1分組密碼和流密碼
分組密碼:每次只能處理特定長度的一塊數(shù)據(jù)的一類密碼算法,每一塊就是一個待處理的分組,一個分組的bit數(shù)稱為分組長度。
流密碼:對數(shù)據(jù)流進(jìn)行連續(xù)處理的一類密碼算法,流密碼一般以1bit、8bit、32bit為單位進(jìn)行加密和解密。
注:分組密碼處理完一個分組就結(jié)束了,因此不需要通過內(nèi)部狀態(tài)來記錄加密的進(jìn)度;
流密碼是對一串?dāng)?shù)據(jù)流進(jìn)行連續(xù)處理,因此需要保持內(nèi)部狀態(tài)進(jìn)而記錄加密的進(jìn)度。
注:
流密碼:一次性密碼本
分組密碼:DES、3DES、AES
4.2.2模式
分組密碼的模式:迭代的方法;
4.2.3明文分組與密文分組
4.2.4主動攻擊者M(jìn)allory
4.3 ECB模式
在主動攻擊下,ECB模式可以在不破譯密文的情況下操作明文。
消息認(rèn)證碼:防篡改
4.4 CBC模式
在CBC模式下,首先將明文分組與前一個密文分組進(jìn)行異或運(yùn)算,然后再進(jìn)行加密。
注:鏈?zhǔn)较嚓P(guān),引入了誤碼傳播特性,容易發(fā)現(xiàn)篡改。
4.4.2 初始化向量
IV:每次加密時(shí)都會隨機(jī)產(chǎn)生一個不同的bit序列來作為初始化向量。
4.4.5 填充提示攻擊
攻擊者反復(fù)發(fā)送一段密文,每次發(fā)送時(shí)都對填充數(shù)據(jù)進(jìn)行改變,接受者在無法正確解密時(shí)會返回一個錯誤消息,攻擊者通過錯誤這一錯誤消息可以獲得一部分與明文相關(guān)的信息,
4.4.6對初始化向量進(jìn)行攻擊
4.4.7 CBC模式的應(yīng)用實(shí)例
4.5 CFB模式
密文反饋模式:在CFB模式中,前一個密文分組會被送到密碼算法的輸入端,所謂反饋,就是返回輸入端繼續(xù)使用。
4.5.3 CFB模式與流密碼
一次性密碼本:將明文和隨機(jī)bit序列進(jìn)行異或運(yùn)算生成密文;
CFB模式:將明文分組和密碼算法的輸出進(jìn)行異或運(yùn)算生成密文分組;
CFB模式中由密碼算法所生成的bit序列稱為key stream,在CFB模式中,密碼算法就相當(dāng)于用來生成密鑰流的偽隨機(jī)數(shù)生成器,而初始化向量就相當(dāng)于偽隨機(jī)數(shù)的種子。
注:key stream是通過加密操作產(chǎn)生的,因此CFB模式下的加密與解密時(shí)密碼算都執(zhí)行加密操作
4.5.4CFB模式的解密
4.4.5 對CFB模式的攻擊
4.6 OFB模式
OFB模式是輸出反饋模式,在OFB模式中,密碼算法的輸出會反饋到密碼算法的輸入中。
4.7 CTR模式
CTR模式通過將逐次累加的計(jì)數(shù)器進(jìn)行加密來生成密鑰流的流密碼。
流模式:OFB、CTR
OFB模式:加密的輸出作為輸入
CTR模式:計(jì)數(shù)器的值作為輸入
CTR模式的優(yōu)點(diǎn)能夠以任意順序處理分組,就意味著可以實(shí)現(xiàn)并行計(jì)算,在支持并行計(jì)算的系統(tǒng)中,處理速度很快。
CTR模式可以以任意順序?qū)Ψ纸M進(jìn)行加密和解密,因此在加密和解密時(shí)需要用到的計(jì)數(shù)器的值可以由nonce和分組序號直接計(jì)算出來。
CTR模式不存在誤碼傳播;
4.7.4 錯誤和機(jī)密性
如果CTR模式的密文分組中有一個比特被反轉(zhuǎn)了,則解密后明文分組中僅有與之對應(yīng)的比特會被反轉(zhuǎn),這一錯誤不會在前后傳播。
GCM模式:在CTR模式的基礎(chǔ)上增加認(rèn)證功能的模式稱為GCM模式,這一模式能夠在CTR模式生成密文的同時(shí)生成用于認(rèn)證的消息,從而判斷密文是否通過合法的加密生成,防止重放攻擊。
7.1
7.2.2單向散列函數(shù)
單向散列函數(shù)有一個輸入和一個輸出,其中輸入稱為消息,輸出稱為散列值。
7.2.3單向散列函數(shù)的性質(zhì)
根據(jù)任意長度的消息計(jì)算出固定長度的散列值;
能夠快速計(jì)算出散列值;
消息不同散列值不同(雪崩函數(shù));
具備單向性;
(單向散列、哈希、消息摘要、雜湊函數(shù))
7.3單向散列函數(shù)的應(yīng)用
檢測軟件是否被篡改;
基于password的加密;
構(gòu)造消息認(rèn)證碼;
數(shù)字簽名;
構(gòu)造偽隨機(jī)數(shù)生成器;
一次性password;
7.4單向散列函數(shù)的實(shí)例
暴力破解
原相攻擊:給出散列值找對應(yīng)的消息;
第二原相攻擊:散列值相同,消息不同;
7.9
使用單向散列函數(shù):完整性;
數(shù)字簽名和消息認(rèn)證碼:認(rèn)證;
8.消息認(rèn)證碼
請求是真正的請求,請求的內(nèi)容是真實(shí)的請求。
8.2消息認(rèn)證碼
定義:
MAC:完整性和認(rèn)證;
注:消息認(rèn)證碼是一種與密鑰相關(guān)聯(lián)的單向散列函數(shù)。
消息+哈希=散列值
消息+密鑰+MAC=MAC值
存在的問題:
如何保證收發(fā)端共享密鑰的安全傳遞。
8.3消息認(rèn)證碼的實(shí)例
銀行SWIFT;
IPSec;
SSL/TLS;
注:MAC用戶完整性校驗(yàn)和認(rèn)證。
8.4消息認(rèn)證碼的實(shí)現(xiàn)方法
- (補(bǔ)充對稱密碼和分組密碼的知識)
HMAC;
分組密碼;
流密碼;
8.5認(rèn)證
加密之后的密文采用MAC方式
8.7對消息認(rèn)證碼的攻擊
8.7.1重放攻擊
重復(fù)利用正確的MAC值。
防重放攻擊:序號、時(shí)間戳、nonce
8.7.2暴力破解
8.8消息認(rèn)證碼不能解決的問題
防止否認(rèn)(干了不承認(rèn)),因此需要有個值得信賴的官方。
9.數(shù)字簽名
9.3數(shù)字簽名
引入:消息認(rèn)證碼由于收發(fā)端共享密鑰,這就造成了收發(fā)端都可以算出正確的MAC值,對于第三方而言不能正確找出唯一。
9.3.3簽名的生成和驗(yàn)證
公鑰密碼:公鑰加密,私鑰解密;
數(shù)字簽名:私鑰簽名,公鑰驗(yàn)簽;
9.3.4公鑰密碼與數(shù)字簽名
9.4數(shù)字簽名的方法
直接對消息簽名;
對消息的散列值簽名;
注:對稱快,分對稱慢,對稱安全性不如非對稱,但是對稱快。
9.6數(shù)字簽名應(yīng)用實(shí)例
利用好明文信息簽名的安全信息公告;
軟件下載;
9.6.3公鑰證書
對公鑰施加數(shù)字簽名所得到的就是公鑰證書。
9.7實(shí)現(xiàn)數(shù)字簽名
通過RSA實(shí)現(xiàn)數(shù)字簽名;
DSA、ECDSA、RSA
9.9對數(shù)字簽名的攻擊
中間人兩面派攻擊;
對單向散列函數(shù)的攻擊;
潛在偽造;
暴力破解;
因數(shù)分解;
9.10數(shù)字簽名的作用和不足
- RSA
缺少對公鑰的認(rèn)證,來自權(quán)威機(jī)構(gòu)的數(shù)字證書出世。
注: 公鑰的數(shù)字簽名就是數(shù)字證書。
11.密鑰
11.2什么是密鑰
11.2.1密鑰就是一個巨大的數(shù)字
DES:56、112、168
AES:128、192、256
11.2.3密鑰價(jià)值和明文同等重要
11.2.3密碼算法和密鑰
信息的機(jī)密性不應(yīng)該依賴于密碼算法本身,而是依賴于保管密鑰。
11.2各種不同的密鑰
對稱加密密鑰
非對稱加密密鑰
消息認(rèn)證碼密鑰
數(shù)字簽名密鑰
用于確保機(jī)密性的密鑰(確保機(jī)密性);
用于認(rèn)證的密鑰(防止數(shù)據(jù)篡改);
11.3.4會話密鑰和主密鑰
會話密鑰:單詞會話有效
主密鑰:重復(fù)使用的長期密鑰
11.3.5加密內(nèi)容的密鑰和加密密鑰的密鑰
CEK:用于會話密鑰
KEK:用于主密鑰
11.4密鑰的管理
密鑰的生成、傳遞、更新、保存、廢除
11.4.1密鑰的生成
用完全隨機(jī)數(shù)生成秘鑰(不可預(yù)測)
用口令加鹽生成基于口令的密鑰
11.4.2密鑰的傳遞
迪菲赫爾曼密鑰交換(Diffie-Hellman)
11.4.3密鑰更新
途徑:用當(dāng)前密鑰的散列值做下一個密鑰。
注:后向安全指的是防止破譯過去的通信內(nèi)容
11.4.4密鑰保存
我們記不住有實(shí)用價(jià)值的密鑰,但是如果將密鑰保存下來又有可能會被竊取。
密鑰也要加密稱為KEY。
類似于認(rèn)證機(jī)構(gòu)的層級,密鑰加密密鑰保存也有權(quán)威機(jī)構(gòu)。
11.4.5密鑰廢除
11.5DH密鑰協(xié)商
11.5.1利用交換的公開信息生成共享的秘密數(shù)字,并用于對稱加密的密鑰。
注:應(yīng)用于IPsec
11.5.2DH密鑰協(xié)商步驟
- 自己梳理
11.6基于口令的密碼
11.6.1基于口令的密碼
11.6.2PBE加密和解密
鹽
口令
KEK
CEK
對稱加密
11.6.4鹽的作用
鹽是由偽隨機(jī)數(shù)生成器生成的隨機(jī)數(shù),配合口令,利用單向散列函數(shù)生成KEK。
其中鹽的作用用于防字典攻擊,增加破解的難度。
11.6.5口令的作用
11.6.6通過拉伸改良PBE
拉伸:將單向散列函數(shù)進(jìn)行多次迭代。
12.隨機(jī)數(shù)
12.3使用隨機(jī)數(shù)的密碼技術(shù)
隨機(jī)數(shù)的應(yīng)用場景
生成密鑰;
生成密鑰對;
生成初始化向量;
生成鹽;
12.4隨機(jī)數(shù)的性質(zhì)
12.4.2隨機(jī)數(shù)的性質(zhì)分類
完全隨機(jī)
不可預(yù)測
不可復(fù)現(xiàn)
隨機(jī)性:弱偽隨機(jī)數(shù)
不可預(yù)測性:攻擊者在知道過去生成的偽隨機(jī)數(shù)列的前提下,依然無法預(yù)測出下一個生成出來的偽隨機(jī)數(shù)。強(qiáng)偽隨機(jī)數(shù)(不可預(yù)測性是通過單向散列函數(shù)的單向性和密碼技術(shù)的機(jī)密性來保證偽隨機(jī)數(shù)生成器的不可預(yù)測性)
不可復(fù)現(xiàn)性:源于自然
12.5偽隨機(jī)數(shù)生成器
科學(xué)的方法
12.6.3單向散列函數(shù)法
12.6.4密碼法
12.7對偽隨機(jī)數(shù)生成器的攻擊
攻擊種子;
對隨機(jī)數(shù)池的攻擊;
c語言假的隨機(jī)數(shù)(不隨機(jī))
#include<stdio.h> #include<stdlib.h> #include<time.h>int main() {srand((unsigned)time(0));int a;a = rand()%10;printf("%d\n",a);return 0; }13.PGP
13.2什么是PGP
PGP:Pretty Good Privacy
13.2.4PGP的功能
對稱密碼:
PGP支持使用對稱密碼進(jìn)行加密和解密,對稱密碼可以單獨(dú)使用,也可以和公鑰密碼組合成混合密碼系統(tǒng),可以使用的對稱密碼算法包括AES、三重DES等。
公鑰密碼:
PGP支持生成公鑰密碼的密鑰對,以及用公鑰密碼進(jìn)行加密和解密,實(shí)際上并不是使用公鑰密碼直接對明文進(jìn)行加密,而是使用混合密碼系統(tǒng)進(jìn)行加密操作,可以使用的公鑰密碼算法包括RSA。
數(shù)字簽名:
PGP支持?jǐn)?shù)字簽名的生成和驗(yàn)證,可以將數(shù)字簽名附加到文件中,或者從文件中分離出數(shù)字簽名,可以使用的數(shù)字簽名的算法RSA、DSA、ECDSA。
單向散列函數(shù):
PGP可以使用單向散列函數(shù)計(jì)算和顯示消息的散列值,可以使用的單向散列函數(shù)算法包括SHA-1、SHA-256、SHA-384、SHA-512;
證書:
PGP可以生成OpenPGP中規(guī)定格式的證書,此外還可以頒發(fā)公鑰的作廢證明,并可以使用CRL對證書進(jìn)行校驗(yàn)。
壓縮:
PGP支持?jǐn)?shù)據(jù)的壓縮和解壓縮,壓縮采用ZIP格式。
文本數(shù)據(jù):
PGP可以將二進(jìn)制數(shù)據(jù)和文本數(shù)據(jù)相互轉(zhuǎn)換。
大文件的拆分和拼合:
在文件過大無法通過郵件發(fā)送的情況下,PGP可以將一個大文件拆分成多個文件,也可以將多個文件拼合成一個文件。
鑰匙串管理:
PGP可以管理所生成的密鑰對以及從外部獲取的公鑰,用于管理密鑰的文件稱為鑰匙串。
13.3生成密鑰對
13.4加密和解密
13.5生成和驗(yàn)證數(shù)字簽名
13.6生成數(shù)字簽名并加密以及解密并驗(yàn)證數(shù)字簽名
(加解密與數(shù)字簽名技術(shù)結(jié)合)
13.7信任網(wǎng)
信任網(wǎng):確認(rèn)公鑰合法性的方法。
證書:證書由認(rèn)證機(jī)構(gòu)對公鑰施加數(shù)字簽名,通過驗(yàn)證這個數(shù)字簽名確認(rèn)公鑰的合法性。
14.SSL和TLS
SSL和TLS是一種在Web服務(wù)器中廣泛使用的協(xié)議,當(dāng)進(jìn)行SSL/TLS通信時(shí),Web瀏覽器上就會顯示一個小鎖頭的圖標(biāo)(看左上方)。
-
HTTP與HTTPS
請求首部字段內(nèi)容實(shí)體
HTTP請求的組成:
方法 URI 協(xié)議版本
HTTP響應(yīng)的組成:
協(xié)議版本 狀態(tài)碼 狀態(tài)碼的原因短語
14.2.3用SSL/TLS承載HTTP
用SSL/TLS承載HTTP,對請求和響應(yīng)進(jìn)行加密。
14.2.4 SSL和TLS的工作
14.2.5 SSL/TLS也可以保護(hù)其他協(xié)議
SMTP、POP3
14.2.6 密碼套件
14.2.7 SSL與TLS的區(qū)別
TLS是SSL的升級版
- 14.3使用SSL/TLS進(jìn)行通信
14.3.1層次化的協(xié)議
TLS協(xié)議是由TLS記錄協(xié)議和TLS握手協(xié)議這兩層協(xié)議疊加而成的。
位于底層的TLS記錄協(xié)議負(fù)責(zé)進(jìn)行加密,位于上層的TLS握手協(xié)議負(fù)責(zé)除加密以外的其他操作(握手、密碼規(guī)格更換、警告、應(yīng)用數(shù)據(jù)協(xié)議)。
14.4對SSL/TLS的攻擊
14.4.1對各個密碼技術(shù)的攻擊
SSL/TLS是框架,可以隨時(shí)替換某種不安全的技術(shù)。
14.4.2OpenSSL的心臟出血漏洞
由于OpenSSL在TLS心跳擴(kuò)展功能中對于請求的數(shù)據(jù)大小沒有進(jìn)行檢查,從而導(dǎo)致誤將內(nèi)存中與該請求無關(guān)的信息返回給請求者,攻擊者通過訪問使用了包含該漏洞的OpenSSL的服務(wù)器,就可以在一定范圍內(nèi)竊取服務(wù)器上的信息。
14.4.3 SSL3.0的漏洞與POODLE攻擊
14.4.4 FREAK攻擊和密碼產(chǎn)品出口管制
14.4.5 對偽隨機(jī)數(shù)生成器的攻擊
14.4.6 利用CRL證書的時(shí)間差進(jìn)行攻擊
14.5 SSL/TLS用戶的注意事項(xiàng)
14.5.1即便對方擁有合法的證書,也不代表我們可以放心地發(fā)送信用卡號。
14.5.2 密碼通信之前的數(shù)據(jù)是不受保護(hù)的
14.5.3 密碼通信之后的數(shù)據(jù)是不受保護(hù)的
注:由于使用了SSL/TLS,因此信用卡號不會在通信過程中被第三方獲取。
總結(jié)
以上是生活随笔為你收集整理的图解密码技术学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android虚拟内置sd卡,安卓虚拟器
- 下一篇: 优秀logo,最基础的设计技巧(三)