-
-
基本認知
-
科學
-
密碼學是科學、有嚴格的規范,設計密碼學算法需要具備深厚的數學知識
-
-
公開
-
密碼學算法的實現原理是公開的,經過長時間的考驗
-
-
相對安全
-
計算機處理速度越來越快,某個密碼學算法的數學基礎可能受到挑戰,現階段安全密碼算法,未來可能就不安全了
-
-
攻擊方法多樣
-
大部分密碼學算法需要秘鑰,最簡單的破解方法就是獲取秘鑰(暴力破解、彩虹表等)
-
-
應用標准
-
未來正確使用密碼學算法,並依據標椎使用(比如:PKCS),可以不了解密碼學算法原理,但必須掌握應用標准
-
-
不比具備很強數學知識
-
很多密碼學算法並非計算機專家創建,而是數學家.(不妨礙我們使用密碼學算法)
-
-
解決特定問題
-
每種算法都有應用場景,解決特定的問題
-
-
-
目標
-
機密性
-
信息在存儲,運輸、處理過程中的安全保密,要求信息不會泄露給未經授權的人.對稱加密算法和公開秘鑰算法都能保護機密性
-
-
完整性
-
接受方接受到的信息就是發送方發送的原始信息,如數據被篡改,接受方有策略數據被篡改,那傳輸的數據就具備完整性.在密碼學中,主要使用消息驗證碼(MAC)算法保證完整性
-
-
不可抵賴性
-
在密碼學中,使用數字簽名技術避免抵賴
-
-
身份驗證
-
通信雙方(發送方、接收方)必須確保對端就是通信對象.在密碼學中,一般使用數字簽名確認身份
-
-
-
常用密碼庫
-
MIRACL
-
由Shamus軟件公司開發,包括了:RSA、AES、DSA、ECC和Diffie-Hellman秘鑰交換算法
-
-
CryptoAPI
-
微軟在Windows中的一個安全加密應用框架
-
密碼應用程序接口,密碼服務提供者模塊
-
-
OpenSSL
-
開放源代碼的軟件庫包,三個只要的功能部分:SSL協議庫、應用程序以及密碼算法庫
-
-
-
-
密碼學算法分類
-
類型
-
哈希算法(Hash)
-
國內:SM3
-
國際:MD5、SHA-1、SHA-2、SHA-3
-
說明:SM3的256位保密強度高於MD5
-
-
對稱加密算法
-
國內:SM1、SM4、ZUC
-
國際:DES、3DES、AES
-
說明:SM1的128位保密強度和性能與AES相當,SM4的128位已升級為國際標准
-
-
公開秘鑰算法
-
國內:SM2
-
國際:RSA、ECC
-
說明:SM2的256位基於ECC算法,安全性比RSA1024有明顯優勢
-
-
-
隨機數
-
類型
-
真正的隨機數生成器
-
硬件生成
-
效率高、隨機性、不可預測性、不可重現性
-
需要物理設備獲取
-
-
偽隨機數生成器
-
軟件生成
-
效率高、隨機性
-
通過算法獲取
-
-
密碼學偽隨機數生成器
-
軟件生成
-
效率高、隨機性、不可預測性
-
用於密碼學
-
-
-
工作原理
-
生成器內部維護一個狀態(internal state),其數值來源於外部,成為熵:動態時間、溫度、聲音變化等
-
偽隨機數內部狀態來源模擬的數值,稱為種子(seed)
-
-
可生成密碼學隨機數的算法
-
塊密碼算法CTR模式:對稱加密算法
-
摘要函數:單向性
-
流密碼算法:對稱加密算法
-
-
用途
-
密鑰
-
對稱加密算法、公開密鑰算法、MAC算法都會用到密鑰,密鑰本質上是一個隨機數
-
-
初始化向量(IV)
-
塊密碼算法中很多迭代模式會使用(IV)
-
-
nonce
-
塊密碼算法中的CTR模式、AEAD加密模式也會用到nonce
-
-
salt
-
基於口令的加密算法會用到,通過salt生成一個密鑰
-
-
-
-
Hash函數
-
加密基元
-
基於密碼學Hash算法產生的其他密碼算法:MAC消息驗證碼、偽隨機數生成器、基於口令的加密算法、數字簽名等等
-
-
Hash特性
-
摘要/散列/指紋=hash(消息)
-
相同的消息獲得相同摘要值、速度快、單向性(不可逆)、原始消息變化摘要值也會變化、不同摘要值不同
-
-
Hash算法用途
-
文件比較
-
身份校驗
-
-
Hash算法分類
-
MD5
-
算法:MD5、輸出值長度:128比特、輸入值最大長度:無限制、說明:實踐中已經產生碰撞,理論上不具備弱抗碰撞性
-
-
SHA-1
-
算法:SHA-1、輸出值長度:160比特、輸入值最大長度:2的64次方減一比特、說明:實踐中已經產生碰撞
-
-
SHA-2
-
算法:SHA-256、輸出值長度:256比特、輸入值最大長度:2的64次方減一比特、說明:安全使用
-
算法:SHA-512、輸出值長度:512比特、輸入值最大長度:2的128次方減一比特、說明:安全使用
-
算法:SHA-224、輸出值長度:224比特、輸入值最大長度:2的64次方減一比特、說明:安全使用
-
算法:SHA-384、輸出值長度:384比特、輸入值最大長度:2的128次方減一比特、說明:安全使用
-
-
SHA-3
-
算法:SHA3-256、輸出值長度:256比特、輸入值最大長度:2的64次方減一比特、說明:安全使用
-
算法:SHA3-512、輸出值長度:512比特、輸入值最大長度:2的128次方減一比特、說明:安全使用
-
算法:SHA3-224、輸出值長度:224比特、輸入值最大長度:2的64次方減一比特、說明:安全使用
-
算法:SHA3-384、輸出值長度:384比特、輸入值最大長度:2的128次方減一比特、說明:安全使用
-
-
-
-
對稱加密算法
-
原理
-
密文=E(明文、算法、秘鑰)
-
明文=D(密文、算法、秘鑰)
-
-
-
分類
-
塊密碼算法:DES、3DES、AES
-
流密碼算法:RC4
-
-
模式
-
ECB(Electronic Codebook)、特點:運算快速,支持並行處理,需要填充、說明:不推薦使用
-
CBC(Cipher Block Chaining)、特點:支持並行處理,需要填充、說明:推薦使用
-
CFB(Cipher Feedback)、特點:支持並行處理,不需要填充、說明:不推薦使用
-
OFB(Output Feedback)、特點:迭代運算使用流密碼模式,不需要填充、說明:不推薦使用
-
CTR(Counter)、特點:迭代運算使用流密碼模式,支持並行處理,不需要填充、說明:推薦使用
-
XTS(XEX-based tweaked-codebook)、特點:不需要填充、說明:用於本地硬盤存儲解決方案中
-
-
標准
-
填充標准:明文長度必須是分組長度的倍數,如不是倍數,則必須有填充機制
-
PKCS#7填充:可處理的分組長度是1到255個字節
-
AES算法使用標准,比如:AES-128-CBC-PKCS#7,其中秘鑰長度128,分組模式CBC,填充標准PKCS#7,AES算法默認分組128bit
-
-
-
消息驗證碼
-
Hash算法能夠完成密碼學目標之一的完整性校驗,但卻不能避免消息被篡改,為避免消息被篡改,需要用到消息驗證碼.消息驗證碼非常重要,一般結合加密算法一起使用
-
消息驗證碼的模型:MAC值 = mac(消息、密鑰)
-
MAC一般和原始消息一起傳輸,原始消息可以選擇加密,也可以選擇不加密,通信雙方會以相同的方式生成MAC值,然后進行比較
-
-
MAC算法種類:CBC-MAC算法和HMAC算法,http中使用最多的為HMAC算法.
-
CBC-MAC算法:CBC-MAC算法從塊密碼算法的CBC分組模式演變而來,簡單的說就是最后一個密鑰分組的值就是MAC值
-
HMAC算法:使用Hash算法作為加密基元,結合Hash算法有多種變種(HMAC-SHA-1、HMAC-SHA256、HMAC-SHA512)
-
-
-
對稱算法和MAC算法結合
-
-
結合對稱加密算法和MAC算法提供機密性額完整性的模式叫Authenticated Encryption(AE)加密模式,有三種:
-
E&M模式:消息分別進行加密運算和MAC運算,然后將兩個運算結果結合起來發送
-
MtE模式:先對消息進行MAC計算,然后將消息和MAC值組合,再進行加密,最終加密值發送出去(http使用)
-
EtM模式:先對消息進行加密得到密文,然后對密文再計算MAC值,最終將密文和MAC值組合在一起發送
-
-
保證數據加密和完整性的三種模式:
-
AEAD模式:在底層組合了加密算法和MAC算法,同事保證數據加密和完整性.
-
CCM模式:使用CBC-MAC算法保證完整性,使用AES算法CTR模式保證加密
-
-
-
-
公開密鑰算法
-
-
特點:
-
功能不一樣:對稱算法主要用於加密和解密,而公開秘鑰算法可以用於加密解密、秘鑰協商、數字簽名
-
運算速度很慢:相比對稱加密算法來說,公開秘鑰算法尤其是RSA算法運算非常慢
-
秘鑰是一對:對稱加密算法中,密鑰是一串數字,加密者和解密者使用同樣的密鑰.公開密鑰算法是一對,分別為公鑰和私鑰
-
-
標准:
-
RSA算法主要使用PKCS#I定義了兩種機制處理填充問題,從而保證同樣的明文、同樣的密鑰經過RSA加密,每次的密文都是不一樣的
-
兩種填充機制分別是RSAES-PKCSI-VI_5和RSAES-OAEP,目前推薦使用的填充標准是RSAES-OAEP,OpenSSL命令行默認使用的標准是RSAES-PKCSI-VI_5
-
-
-
秘鑰(安全性)
-
是什么?
-
對稱加密算法、MAC算法使用的密鑰就是一串數字
-
公開密鑰算法中的密鑰四一對,由多個部分組成,但是本質上也可以認為由多個數字組成
-
-
作用
-
名稱:對稱加密算法秘鑰、作用:加密解密、說明:秘鑰不能泄露
-
名稱:非對稱加密算法秘鑰、作用:加密解密、說明:公鑰可以公開,秘鑰不能泄露
-
名稱:MAC算法加密、作用:消息驗證、說明:秘鑰不能泄露
-
名稱:數字簽名算法秘鑰、作用:身份驗證、說明:公鑰可以公開,秘鑰不能泄露
-
名稱:會話秘鑰、作用:加密解密、說明:密鑰不能泄密,該密鑰一般配合對稱加密算法進行加密解密
-
名稱:基於口令的密鑰、作用:進行權限校驗,加密解密等、說明:口令不能泄密
-
-
生命周期
-
生成(偽隨機數生成器口令加密[PBE]算法、偽隨機數生成器)
-
存儲(靜態秘鑰[長期秘鑰]、動態秘鑰[會話秘鑰])
-
解密
-
傳輸(硬編碼在代碼中口頭、郵件)(秘鑰協商算法[不用存儲])
-
-
秘鑰協商算法
-
密鑰協商算法就是為解決密鑰分配、存儲、傳輸等問題,其也是公開秘鑰算法的一種
-
-
秘鑰協商算法種類
-
RSA秘鑰協商算法:
-
首先使用客戶端生成一個會話秘鑰,然后使用公鑰加密發哥服務器,服務器解密會話秘鑰.接下來服務端和客戶端使用對稱加密算法和會話秘鑰加解密數據.
-
-
DH秘鑰協商算法:
-
DH算法在進行密鑰協商的時候,通信雙方的任何一方無法獨自計算出會話密鑰,通信雙方各自保留一部分關鍵信息,再將另外一部分信息告訴對方,雙方有了全部信息告訴對方,雙方有了全部信息才能共同計算出相同的會話密鑰.
-
-
-
-
ECC
-
為了保證DH的密鑰對不被破解,提升安全性的主要手段就是增加密鑰對的長度,但是長度越長,性能越低.為了解決性能問題,就有了橢圓曲線密碼學(Elliptic Curv e Cryptography),簡稱ECC.
-
ECC是新一代公開秘鑰算法,主要優點就是安全性,極短的密鑰能夠提供很大的安全性,同時性能也很高.比如224比特的ECC密鑰和2048比特的RSA密鑰可以達到同樣的安全水平,由於ECC密鑰具有很短的長度,運算速度非常快.
-
在具體應用的時候,ECC可以結合其他公開密鑰算法形成更快、更安全的公開密鑰算法,比如結合DH密鑰協商算法組成ECDH密鑰協商算法,結合數學簽名DSA算法組成ECDSA數字簽名算法.
-
ECC本質上就是一個數學公式,任何人基於公式都可以設計出橢圓曲線.[盡量選擇性能更高、安全系數更高的命名曲線]
-
-
數字簽名
-
公開密鑰算法的另外一種用途就是數字簽名技術
-
解決方案:
-
RSA簽名算法
-
DSA簽名算法
-
-
數字簽名用途
-
防篡改:數據不會被修改,MAC算法也有這個特點
-
防抵賴:消息簽署者不能抵賴
-
防偽造:發送的消息不能夠偽造,MAC算法也有這個特點
-
-
數字簽名流程:
-
生成流程
-
發送者對消息計算摘要值
-
發送者用私鑰對摘要值進行簽名得到簽名值
-
發送者將原始消息和簽名值一同發給接受者
-
-
-
驗證流程
-
接收者接收到消息后,拆分出消息和消息簽名值A
-
接收者使用公鑰對消息進行運算得到摘要值B
-
接收者對摘要值B和簽名值A進行比較,如果相同表示簽名驗證成功,否則就會驗證失敗
-
-
-
-
-
-
密碼學算法應用場景
-
算法安全預測
-
摩爾定律
-
-
應用場景
-
Hash算法(信息摘要算法)
-
算法:MD5、SHA-1、SHA-2、SHA-3
-
性能:機密性、完整性
-
應用場景:
-
存儲賬號和口令(hash算法加salt)
-
生成信息摘要,校驗數據完整
-
-
-
對稱加密算法
-
算法:DES、3DES、AES、RC4
-
性能:機密性
-
應用場景:
-
對效率有要求的實時數據加密通信(使用VPN或者代理進行加密通信時)
-
大批量數據加密時
-
HTTP加密通訊時
-
-
-
公開秘鑰算法
-
算法:RSA、DSA、ECC
-
性能:機密性
-
應用場景:
-
秘鑰加密
-
數字簽名
-
單向加密
-
雙向加密
-
-
-
消息驗證碼(MAC)
-
算法:CBC-MAC、HMAC
-
性能:完整性
-
應用場景:
-
對機密性要求不高,只保障完整性和不被篡改時
-
-
-
數字簽名算法
-
算法:RSA數字簽名算法、DSA數字簽名算法、ECDSA數字簽名算法
-
性能:身份驗證、不可抵賴性
-
應用場景:
-
防篡改
-
防抵賴
-
防偽造
-
-
-
-
-
密碼學算法安全性和性能
-
秘鑰長度與算法安全
-
安全的關鍵要素是秘鑰的長度,理論上秘鑰越長就越安全,但是秘鑰越長性能就下降很多
-
-
密碼學算法性能
-
性能和安全是密碼學算法重要指標,在選擇時盡量選擇安全性高的算法,在此基礎上在選擇性能高的算法
-
-
-
總結
-
機密性
-
對稱算法
-
公開秘鑰算法
-
-
完整性
-
Hash函數算法
-
MAC:基於Hash函數算法、基於對稱算法(CBC)
-
數字簽名算法
-
-
身份驗證
-
HMAC
-
數字簽名算法
-
-
不可抵賴性
-
-