原文連結:http://blog.csdn.net/ddk3001/article/details/53997927
說明:本文内容是《CISSP Official Study Guide(第7版)》第6章(Cryptography and Symmetric Key Algorithms)和第7章(PKI and Cryptographic Applications)的學習總結。這兩章全面介紹了密碼學的知識,本文是概要總結,可作為地圖參考,對于其中的細節,請查閱相關書籍和資料。
1 密碼學基礎
1.1 密碼學的目标
目标 | 說明 | 技術 |
---|---|---|
機密性 | 保證資料未被洩露 | 秘密密鑰系統、公開密鑰系統 |
完整性 | 保證資料未被修改 | 秘密密鑰系統、公開密鑰系統。 保護消息:數字簽名 (第7章)。 保護檔案:Hash算法 (第21章)。 |
身份驗證 | 對使用者聲明的身份進行驗證。 A要确認正在通信的對方是B, 即,B要使A相信他是B。 | 挑戰/響應技術 |
不可否認 | 為接收者提供擔保, 保證消息确實來自發送者,而不是其他人。 A說消息來自B,B否認不了。 即,A要使B不能否則消息是他發送的。 | 公開密鑰系統:因為隻有自己持有私鑰。 不能使用秘密密鑰系統, 因為B可以說消息是A自己做的。 |
FIPS Federal Information Processing Standard 聯邦資訊處理标準
FIPS 140-2 密碼子產品的安全需求 :為密碼子產品定義了硬體和軟體需求
1.2 密碼學的數學原理
1、One-Way Function單向函數
公鑰密碼系統都是建立在單向函數的基礎上。
2、Nonce 随機數
在加密過程中添加Nonce,進而獲得更大強度。
例子:IV(初始化向量) 參見DES
3、零知識證明
零知識證明:在不向第三方揭示事實本身的情況下,向第三方證明你對事實的了解。
密碼學:使用公鑰加密系統,能提供零知識證明。
4、Split Knowledge 分割知識
分割知識:責任分離
例子:密鑰托管(key escrow)。
- 密鑰、數字簽名、數字證書可以存儲在托管資料庫中。
- 如果使用者密鑰丢失,可以從托管資料庫中提取密鑰。
- “M of N控制”要求:N個人中至少有M個人一起工作,才能完成這項工作。
5、工作函數
工作函數:從成本或時間方面來度量密碼系統的強度。
1.3 密碼算法(Cipher)
1、One-Time pad 一次性密碼本
主要障礙:很難生成、分發和保護冗長的密鑰
主要應用:保護極其敏感的通信,實際中隻用于短消息。
2、Running Key Cipher 滾動密鑰密碼
書籍密碼,用于生成一次性密碼本所需的密鑰
3、混淆(Confusion)和擴散(Diffusion)
密碼學算法依賴兩種基本操作來隐藏明文資訊:混淆和擴散
Confusion :明文與密鑰的關系十分複雜,攻擊者不能通過通過觀察明文和密文的關系來确定密鑰。
Diffusion :明文的改變導緻多種變化,這種變化會擴散到整個密文中。
密碼算法 :“替換”引入了混淆,“換位”引入了擴散。
1.4 現代密碼學
秘密密鑰系統 | 公開密鑰系統 |
---|---|
機密性 | 機密性、完整性、身份驗證、不可否認性 |
帶外交換密鑰 密鑰需要經常更新 剔除使用者困難 | 帶内交換公鑰 隻有使用者私鑰被破壞時,才需要重建密鑰 容易剔除使用者 |
速度快 用于批量資料加密 | 慢度速 用于少量資料加密(數字簽名、數字信封、數字證書) |
不可擴充:n(n-1)/2 每兩人之間都需要一個密鑰 | 可擴充:2n 每個人需要兩個密鑰(公鑰和私鑰) |
Hash算法
2 對稱密鑰加密
2.1 對稱加密算法
DES | Data Encryption Standard | 資料加密标準 |
AES | Advanced Encryption Standard | 進階加密标準 |
IDEA | International Data Encryption Algorithm | 國際資料加密算法 |
2.1.1 DES
1977年 美國政府釋出 用于政府通信
DES已經不再安全,2001年AES取代了DES
DES:分組長度64位,密鑰長度56位(另外有8位用作奇偶校驗或随意設定),16輪加密。
算法過程:http://wenku.baidu.com/view/ed21dc80b9d528ea81c7796b.html?re=view
操作模式Mode | 操作方法 | 特點 | |
---|---|---|---|
ECB | Electronic CodeBook 電子密碼本 | 把明文分為64位的分組, 使用密鑰對每個分組進行加密。 | 缺點:安全性差 隻用于交換少量資料 |
CBC | Cipher Block Chaining 加密分組連結 | 第一個分組使用IV(初始化向量)進行異或,然後進行加密。 之後的每個分組與前一個密文分組進行異或,然後進行加密。 IV需要發送給接收方,方法: 1、以明文方式放在完整密文之前。 2、用密鑰和ECB模式對IV進行加密。 | 缺點:如果某個分組出錯,會傳播到後面所有分組 (錯誤傳播)。 |
CFB | Cipher FeedBack 加密回報 | CFB是流加密形式的CBC, 差別是隻是對實時資料進行加密 | 缺點:錯誤傳播 |
OFB | Output FeedBack 輸出回報 | 與CBC幾乎相同, 差別是它使用種子值與明文進行異或。 IV用于建立種子值,通過對先前的種子值運作DES算法,可以派生出之後的種子值。 | 優點:不會傳播錯誤 |
CTR | CounTeR 計數器 | 流加密,類似于OFB, 但它不使用種子值,而使用計數器。 | 優點:不會傳播錯誤 适合并行計算 |
ECB | 缺點:安全性差 | |
分組加密 | 流加密 | |
CBC | CFB | 缺點:錯誤傳播 |
IV | IV | |
OFB | CTR | 優點:不會傳播錯誤 |
IV+種子值 | IV+計數器 |
2.1.2 3DES
2DES并不比DES更安全
3DES使用相同的而算法實作更安全的加密。
有四個版本:
- EEE3 、EDE3 密鑰長度56*3 = 168 // 3個密鑰
- EEE2 、EDE2 密鑰長度56*2 = 112 // 2個密鑰
2.1.3 各種算法比較
美國政府算法 | 分組長度 | 密鑰長度 | 特點和用途 |
---|---|---|---|
DES | 64 | 56 16輪加密 | 1977年釋出,用于美國政府通信 2001年AES取代了DES |
3DES | 64 | 168 | 與DES的算法相同 實作了更安全的加密 |
AES | 128 | 128 10輪加密 | 2001年開始使用 Rojndael擴充了AES |
Skipjack | 64 | 80 | 用于FIPS 185 (聯邦資訊處理标準) 因密鑰托管受美國政府控制,是以未被普遍接受。 |
專利算法 | 分組長度 | 密鑰長度 | 特點和用途 |
---|---|---|---|
IDEA | 64 | 128 | 瑞士開發人員的專利 在PGP中使用 |
RC2 | 64 | 128 | RSA公司 |
RC4 | 流式 | 128 | RSA公司 |
RC5 | 32/64/128 | 0 ~ 2048 | RSA公司 |
自由使用算法 | 分組長度 | 密鑰長度 | 特點和用途 |
---|---|---|---|
Blowfish | 64 | 32~448 | 比DES和IDEA更快。 在許多商業軟體和作業系統中使用,例如SSH |
Twofish | 128 | 256 | 是AES的另一個選擇 |
2.2對稱密鑰管理
(1)建立和分發
- 方法1:離線分發
- 方法2:公鑰加密
- 方法3:Diffie-Hellman算法
- 方法:是“離線分發”和“公鑰加密”的折中,它基于标準離散對數問題。
- 應用:S-RPC使用此算法交換密鑰
- 缺點:容易受到中間人攻擊
Diffie-Hellman算法 :
1、交換資料:A和B約定兩個大數,即p(質數)和g(整數),并且 1 < g < p
2、計算R和S
- a) A選擇一個随機的大整數r,計算:R = gr % p (r隻有A知道)
- b) B選擇一個随機的大整數s,計算:S = gs % p (s隻有B知道)
3、交換資料:A把R發送給B,B把S發送給A
4、計算密鑰
- a) A計算:K = Sr % p = gsr % p (r隻有A知道)
- b) B計算:K = Rs % p = gsr % p (s隻有B知道)
- c) K可作為通信用的私鑰
5、 分析:根據g、p、R、S,無法推斷出r和s?
(2)存儲和銷毀
(3)恢複和托管
- Fair Cryptosystems(公平加密系統):密鑰被分成多個部分,交給多方儲存。
- Escrowed Encryption Standard(托管加密标準):
- 方法為政府提供了解密密文的技術方法,用于FIPS 185 (聯邦資訊處理标準)。
- 這個标準是Skipjack的基礎。因密鑰托管受美國政府控制,是以Skipjack未被普遍接受。
2.3 密碼術的生命周期
選擇密碼系統時,要考慮在資訊的生命周期内,足以保證資訊的安全。
選擇時要考慮:
- 清單内容
- 加密算法
- 密鑰長度
- 使用的安全交易協定,例如:SSL、TLS
3 非對稱密鑰加密
算法 | 基于 | 特點 |
---|---|---|
RSA | 大質數的因式分解 | 1977年提出,是RSA公司的專利, 2000年時RSA向公開領域釋出了該算法。 |
Merkle-Hellman 背包算法 | 集合論中的超遞增集的因式分解 | 1984年被破解 |
El Gamal | 标準離散對數問題 | El Gamal擴充了Diffie-Hellman算法,用于支援公鑰密碼系統。可自由使用。 缺點:密文長度是明文長度的兩倍。 |
ECC | 橢圓曲線的離散對數問題 | 優點:使用相同密鑰長度時, 比RSA和El Gamal提供更大的加密強度。 |
下面三種密鑰長度提供相同的保護程度:
- RSA : 1088位。 Rivest、Shamir、Adleman
- DSA : 1024位。 Digital Signature Algorithm
- ECC : 160 位。 Elliptic Curve Cryptosystem
3.1 RSA
RSA算法已經成為許多知名安全基礎設定的安全骨幹,例如微軟、Nokia、Cisco。
參考:http://blog.csdn.net/sunmenggmail/article/details/11994013
RSA算法:計算公鑰和私鑰
1、選擇兩個大質數p和q,計算:
- a) N = p * q
- b) r = (p-1)(q-1)
2、選擇一個小于 r 的整數 e,求得 e 關于模 r 的模反元素d。(模反元素存在,當且僅當e與r互質)
3、将 p 和 q 的記錄銷毀。
4、(N,e)是公鑰,(N,d)是私鑰。
例子:計算公鑰和密鑰
1、假設p = 3、q = 11
- a) N = pq = 33
- b) r = (p-1)(q-1) = (3-1)(11-1) = 20
2、計算:
- a) 根據模反元素的計算公式,可以得出e·d ≡ 1 (mod 20),即e·d = 20n+1 (n為正整數);
- b) 假設n=1,則e·d = 21。e、d為正整數,并且e與r互質,則e = 3,d = 7。
- c) 到這裡,公鑰和密鑰已經确定。公鑰為(N, e) = (33, 3),密鑰為(N, d) = (33, 7)。
3.2 Merkle-Hellman背包算法
基于“集合論中的超遞增集”因式分解,
用的是:集合論中的超遞增集(super-increasing sets)
1984年被破解
3.3 El Gamal
El Gamal擴充了Diffie-Hellman算法,用于支援公鑰密碼系統。
El Gamal和Diffie-Hellman算法都是基于:标準離散對數問題
優點:該算法可自由使用
缺點:密文長度是明文長度的兩倍。
3.4 ECC
基于:橢圓曲線的離散對數問題
4 Hash函數
散列函數:輸出消息摘要(散列值)
消息摘要:可以确認消息未被修改過
雜湊演算法:
- SHA :SHA-1、SHA-2、SHA3
- MD :MD2、MD4、MD5
- HMAC
- HAVAL :對MD5做了修改。使用1024位的分組,産生128/160/192/224/256位的散列值。
4.1 SHA
SHA Secure Hash Algorithm 安全雜湊演算法
SHA是NIST開發的美國政府标準(FIPS 180)
SHA-1 512位分組 160位散列值 // 已證明此算法存在缺陷
SHA-2:
- SHA-256 : 512位分組、256位散列值
- SHA-224 : 512位分組、224位散列值
- SHA-512 : 1024位分組、512位散列值
- SHA-384 : 1024位分組、384位散列值
SHA-3: 2012年,使用Keccak算法
4.2 MD
MD Message Digest 消息摘要
1989年,由Rivest開發
MD2 : 128位散列值 // 已證明不安全
MD4 : 512位分組、128位散列 // 已證明不安全
MD5 : 512位分組、128位散列 // 已證明不安全
5 數字簽名
DSA 數字簽名算法
5.1 使用公鑰的DSA
“消息摘要”可用于數字簽名算法(系統)
數字簽名:證明某個消息來自一個特定使用者(不可否認),并保證消息未被修改過(完整性)。
數字簽名算法使用了:公鑰密碼系統(不可否認)、雜湊演算法(完整性)
數字簽名算法如下:
1、A執行操作:
- a) 使用雜湊演算法計算明文消息的消息摘要
- b) 使用A的私鑰對消息摘要進行加密,加密後的消息摘要就是“數字簽名”
2、A将明文消息和數字簽名一起發送給B
3、B收到消息後:
- a) 使用A的公鑰對數字簽名進行解密,進而确認這個消息這是A發送的。(不可否認)
- b) 計算明文的消息摘要,并與解密的消息摘要對比,進而确認明文内容未被修改。(完整性)
數字簽名提供:完整性、身份認證、不可否認
如果要保證機密性,需要執行:
1、A用B的公鑰對“明文消息+數字簽名”進行加密,然後發送給B
2、B執行:
- a) 用B的私鑰對消息進行解密 => 機密性
- b) 用A的公鑰解密數字簽名 => 身份認證、不可否認
- c) 比較消息摘要 => 完整性
5.2 使用密鑰的DSA
HMAC Hashed Message Authentication Code 散列消息身份驗證碼
簡單方法 :明文消息 + 未加密的消息摘要 //
複雜方法 :明文消息 + 私鑰加密消息摘要 // 完整性、不可否認
HMAC :消息明文 + 密鑰加密消息摘要 // 完整性
5.3 數字簽名标準
NIST FIPS 186-4指定了政府使用的數字簽名算法(DSA),稱為DSS(數字簽名标準)
- 雜湊演算法:SHA-2
- 加密算法:可以選擇如下
- DSA :FIPS 186-4
- RSA :ANSI X93.1
- EC DSA :ANSI X9.26 (橢圓曲線DSA)
另外兩種數字簽名算法:
- Schnorr
- Nybergrueppel
6 PKI(公鑰基礎架構)
6.1 PKI的基本概念
PKI的基本概念:
- 使用“公鑰和私鑰”證明身份:
- A生成公鑰和私鑰,把公鑰給B
- A用私鑰加密資訊發送B
- B用公鑰能解密消息,就能證明這個消息來自A。
- 怎麼保證“公鑰”确實是A生成?(詳見注冊和驗證)
- CA是中立機構,A和B都相信它
- CA確定A确實是他聲稱的身份,并用A提供的公鑰制成“數字證書”。
- A把CA确認過的數字證書(公鑰)提供給B,因為B信任CA,是以相信這個公鑰确實是A的。
CA | Certificate Authority | 證書授權機構 | CA為數字證書提供公證服務 |
RA | Register Authority | 注冊授權機構 | RA幫助CA驗證使用者的身份 |
Digital Certification | 數字證書 | 用于證明個人的身份,本質是用CA的私鑰加密了使用者的公鑰。 如果使用者确認數字證書是由CA釋出的,那就知道這個公鑰是合法的。 數字證書被内建在許多Web浏覽器、Email用戶端軟體中。 |
PKI是一個概念,使用一個中立機構來證明A提供公鑰的有效的。
6.2 數字證書
數字證書:用于證明個人的身份,其本質是個人公鑰。
如果使用者确認數字證書是由CA釋出的,那就知道這個公鑰是合法的。
數字證書包含特定的身份識别資訊,其标準是ITU-T X.509 。
- 注冊
- CA驗證使用者身份,使用者向CA提供公鑰
- CA建立一個數字證書,其中包含“使用者身份和使用者公鑰”的ITU-T X.509數字證書
- CA用其私鑰對證書進行數字簽名,提供給使用者
- 數字證書本質:用CA的私鑰加密了使用者的公鑰
- 驗證
- 用CA的公鑰解密數字證書,進而确認這來自CA。
- 檢查保證數字證書沒有在CRL(證書撤銷清單)中
- 确認證書中包含你信任的資料
- 撤銷
- CRL 證書撤銷清單 :清單驗證。有延遲,但仍然是最常用的方法。
- OCSP 聯機證書狀态協定 :實時驗證。無延遲。
7 密碼學的應用
7.1 便攜裝置
加密:
- Windows :BitLocker 和EFS(加密檔案系統)
- Mac OSX :FileVault
- TrueCrypt :開源軟體,可用于Linux、Windows、Mac
7.2 隐寫術和水印
Steganopgraphy 隐寫術 // 隐藏資訊
Watermarking 水印 // 保護知識産權
7.3 DRM
DRM Digital Rights Management 數字版權管理
- 電子書 :DRM最成功的應用
- 文檔
- 音樂
- 電影
- 視訊遊戲
7.4 Email
Email要求 | 保護方法 |
---|---|
機密性 | 加密 |
完整性 | 雜湊演算法 |
身份驗證、完整性 | 數字簽名 |
機密性、完整性、身份驗證、不可否認 | 加密 + 數字簽名 |
電子郵件标準:
(1)PGP Pretty Good Privacy
主要用于:基于Web的電子郵件系統
商業版本:RSA進行密鑰交換、 IDEA加解密、 MD5雜湊演算法
免費版本:DH進行密鑰交換、 CAST 128位加解密、 SHA-1雜湊演算法
(2)S/MIME Secure / Multipurpose Internet Mail Extensions
主要用于:桌面郵件應用程式
RSA加密算法、AES和3DES加密算法
7.5 Web應用
SSL : Secure Socket Layer
TLS : Transport Layer Secure
HTTPS : HTTP over SSL
(1)TLS
SSL已經發現有漏洞,現在已被TLS替換。
(2)SSL
Netscape開發,用于對C/S之間網站流量進行加密。
HTTPS使用TCP 443端口在C/S之間協商加密通信會話。
SSL的目的:為Web浏覽會話建立安全的通信通道。
方法是:
1、 使用者通路一個網站時,浏覽器檢索Web伺服器的數字證書,從中提取伺服器的“公鑰”。
2、 浏覽器建立一個随機的“對稱密鑰”,使用伺服器的“公鑰”來加密,然後發送給伺服器。
3、 伺服器用自己的“私鑰”進行解密,得到“對稱密鑰”,此後用這個對稱密鑰來交換資訊。
7.6 網絡連接配接
使用密碼學算法保護通信線路安全,即對通信線路進行加密。
線路加密的類型:
- 鍊路加密 :加密整個資料包,逐跳完全解密。
- 端到端加密 :隻加密資料包中的使用者資料,接收端解密。
(1)SSH ( Secure Shell )
SSH提供了端到端加密
SSH提供了常見網絡服務的加密方案:Telnet、FTP、Rlogin
兩個版本(SSH1和SSH2),SSH1現在被認為不安全。
(2)IPsec
IPsec為安全網絡通信提供了一個體系結構,它沒有規定所有實作細節,而是一個開放的子產品化架構。
IPsec用于在兩個實體(系統、路由器、網關)之間建立交換資訊的安全通道。
IPsec使用IP協定,通過公鑰密碼術提供:機密性、通路控制、不可否認、消息身份驗證。
主要用于VPN,通常與L2TP一起使用。
IPSec有兩個主要元件:
- AH(身份驗證首部):提供消息完整性、不可否認性、身份驗證。
- ESP(封裝安全負載):提供資料包内容的機密性和完整性。
IPSec提供了兩種操作模式:
- 傳輸模式:隻加密資料包的負載。用于peer間通信。
- 隧道模式:加密整個資料包(包括頭),用于網關間通信。
在運作時,通過建立SA(安全關聯)來建立IPSec會話。
如果要雙向通信,需要兩個SA(每個方向一個)。
如果要支援使用AH和ESP的雙向通信,需要四個SA。
(3)ISAKMP 網絡安全關聯和密鑰管理協定
IPSec依賴于SA的系統,這些SA通過使用ISAKMP進行管理。
ISAKMP通過協商、建立、修改和删除SA,為IPSec提供背景的安全支援服務。
(4)無線互聯
WEP : Wired Equivalent Privacy , WEP算法存在顯著缺陷
WPA : Wifi Protected Access , 改進了WEP加密
IEEE 802.1x : 常用的無線安全标準
應用層 | HTTP, FTP, LPD, SMTP, Telnet, TFTP, EDI, POP3, IMAP, SNMP, NNTP, S-RPC, SET |
表示層 | Encryption protocols and format types, such as ASCII, EBCDICM, TIFF, JPEG, MPEG, MIDI |
任務層 | NFS, SQL, RPC |
傳輸層 | SPX, SSL, TLS, TCP, UDP |
網絡層 | ICMP, RIP, OSPF, BGP, IGMP, IP, IPSec, IPX, NAT, SKIP |
鍊路層 | SLIP, PPP, ARP, RARP, L2F, L2TP, PPTP, FDDI, ISDN |
實體層 | EIA/TIA-232, EIA/TIA-449, X.21, HSSI, SONET, V.24, V.35 |
8 密碼學攻擊
攻擊方法:
1. 分析攻擊:關注算法本身的邏輯性
2. 實作攻擊:利用系統實作中的弱點
3. 統計攻擊:利用密碼系統的統計弱點,例如無法生成随機數和浮點錯誤
4. 暴力攻擊:彩虹表(預先計算機密碼散列值),應對方法是加鹽
5. 頻率分析和僅密文攻擊:隻有加密後的密文
6. 已知明文:有同一消息的明文和密文
7. 標明密文:攻擊者能夠解密密文的標明部分,使用這部分發現密鑰。
8. 標明明文:攻擊者能夠加密他們選擇的明文,進而分析加密算法的密文輸出。
9. 中間相遇攻擊:同時加密和解密,來發現密鑰對。
10. 中間人攻擊
11. 重播攻擊
12. 生日攻擊