今天我要給你們分享的是互聯網通訊中用到的各類加密解密算法,在咱們介紹加解密知識前,首先咱們瞭解一下密碼學、密碼、加密、數字簽名、密鑰交換等相關術語的含義。git
密碼學是研究編制密碼和破譯密碼的技術科學。研究密碼變化的客觀規律,應用於編制密碼以保守通訊祕密的,稱爲編碼學;應用於破譯密碼以獲取通訊情報的,稱爲破譯學,總稱密碼學。算法
密碼是通訊雙方按約定的法則進行信息特殊變換的一種重要保密手段。依照這些法則,變明文爲密文,稱爲加密變換;變密文爲明文,稱爲脫密變換。密碼在早期僅對文字或數碼進行加、脫密變換,隨着通訊技術的發展,對語音、圖像、數據等均可實施加、脫密變換。安全
加密:加密是一種以密碼方式發送信息的方法。只有擁有正確密鑰的人才能解開這個信息的密碼。對於其餘人來講,這個信息看起來就像是一系列隨機的字母、數字和符號。若是你要發送不該該讓其餘人看的敏感信息時,加密是特別重要的。服務器
數字簽名:數字簽名是一種相似寫在紙上的普通的物理簽名,可是使用了公鑰加密領域的技術實現,用於鑑別數字信息的方法。一套數字簽名一般定義兩種互補的運算,一個用於簽名,另外一個用於驗證。網絡
密鑰交換:雙方使用密鑰交換算法肯定對稱密鑰,而後用這個密鑰進行加密和解密。這個密鑰交換協議/算法只能用於密鑰的交換, 而不能進行消息的加密和解密。數據結構
算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法表明着用系統的方法描述解決問題的策略機制。(百度百科)
算法在數學(算學)和計算機科學之中,爲任何良定義的具體計算步驟的一個序列[1],經常使用於計算、數據處理和自動推理。精確而言,算法是一個表示爲有限長[2]列表的有效方法。算法應包含清晰定義的指令[3]用於計算函數[4]。算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和初始輸入(可能爲空)開始,[5]通過一系列有限[6]而清晰定義的狀態最終產生輸出[7]並中止於一個終態。一個狀態到另外一個狀態的轉移不必定是肯定的。隨機化算法在內的一些算法,包含了一些隨機輸入。(維基百科)
架構
對稱加密:加密和解密使用同一個密碼
公鑰加密: [也可稱爲非對稱加密]
1)每一個密碼都成對兒出現,一個爲私鑰(secret key),一個爲公鑰(public key)
2)公鑰加密算法不多用來加密數據,速度太慢 比對稱加密算法加密數據的速度慢上3個數量級,1000倍左右
單向加密即散列加密:提取數據特徵碼,經常使用於數據完整性校驗
1)雪崩效應,輸入的微小改變,將會引發結果的巨大改變。不可逆,沒法根據特徵碼還原原來的數據
2) 定長輸出,不管原始數據是多大,結果大小都是相同的。輸入同樣,輸出必然相同
MAC:消息摘要碼,單向加密的延伸應用ide
對稱加密:函數
非對稱加密:工具
單向加密:
密鑰交換(IKE: Internet Key Exchange):
公鑰加密、私鑰解密;反之亦然,私鑰加密、公鑰解密
數字簽名:電子簽名私鑰用來加密,公鑰用來解密
數字證書:
* 證書格式:x50九、pkcs【x50九、pkcs12】 * x509格式: * 公鑰和有效期限; * 證書的合法擁有者;(主機名) * 證書的使用方式; * CA的信息; * CA的數字簽名;(CA簽名的校驗碼) * 誰給CA發證:自簽署證書
X.509:定義了證書的結構以及認證協議標準 版本號 序列號 簽名算法ID 發行者名稱 有效期限 主體名稱 主體公鑰 發行者唯一標識 主體的唯一標識 擴展 發行者簽名
PKI: Public Key Infrastructure 公鑰基礎設施
CA: Certificate Authority CA證書權威機構
自建CA並完成對服務器發證:
生成一對兒密鑰 生成自簽證書
命令:
#(umask 077; openssl genrsa -out private/cakey.pem 2048) 【生成CA私鑰】
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem 【生成自簽證書】(.pem)
生成一對兒密鑰 生成證書申請(.csr) 將申請發送給CA
命令:
#(umask 077; openssl genrsa -out httpd.key 2048) 生成密鑰
#openssl req -new -key httpd.key -out httpd.csr 生成證書申請 證書籤署請求(.csr)
簽署證書 傳送給客戶端
命令:
#openssl ca -in httpd.csr -out httpd.crt -days 365 簽署證書(.crt)
PKI: TLS/SSL: x509
第一種實現:互聯網著名的安全機制TLS/SSL使用的是x509證書
PKI: OpenGPG
第二種實現:這是PKI的另一種實現,它們實現證書的管理的機制不一樣,CA的信認關係傳遞機制略有不一樣。在Linux 上OpenGPG也是一種證書管理機制,或者PKI的實現架構。
SSL: Secure Socket Layer是由Netscape公司開發的一套Internet數據安全協議,當前版本爲3.0。
TLS: Transport Layer Security 是國際標準化組織開發的一個通用性協議,當前版本爲1.2。
SSL的握手過程爲:
(1) SSL客戶端經過Client Hello消息將它支持的SSL版本、加密算法、密鑰交換算法、MAC算法等信息發送給SSL服務器。
(2) SSL服務器肯定本次通訊採用的SSL版本和加密套件,並經過Server Hello消息通知給SSL客戶端。若是SSL服務器容許SSL客戶端在之後的通訊中重用本次會話,則SSL服務器會爲本次會話分配會話ID,並經過Server Hello消息發送給SSL客戶端。
(3) SSL服務器將攜帶本身公鑰信息的數字證書經過Certificate消息發送給SSL客戶端。
(4) SSL服務器發送Server Hello Done消息,通知SSL客戶端版本和加密套件協商結束,開始進行密鑰交換。
(5) SSL客戶端驗證SSL服務器的證書合法後,利用證書中的公鑰加密SSL客戶端隨機生成的premaster secret,並經過Client Key Exchange消息發送給SSL服務器。
(6) SSL客戶端發送Change Cipher Spec消息,通知SSL服務器後續報文將採用協商好的密鑰和加密套件進行加密和MAC計算。
(7) SSL客戶端計算已交互的握手消息(除Change Cipher Spec消息外全部已交互的消息)的Hash值,利用協商好的密鑰和加密套件處理Hash值(計算並添加MAC值、加密等),並經過Finished消息發送給SSL服務器。SSL服務器利用一樣的方法計算已交互的握手消息的Hash值,並與Finished消息的解密結果比較,若是兩者相同,且MAC值驗證成功,則證實密鑰和加密套件協商成功。
(8) 一樣地,SSL服務器發送Change Cipher Spec消息,通知SSL客戶端後續報文將採用協商好的密鑰和加密套件進行加密和MAC計算。
一、私密性
二、身份認證
三、完整性
openssl補充材料:
.pem格式:用於導出,導入證書時候的證書的格式,有證書開頭,結尾的格式
1、單向散列算法: 屬於摘要算法,不是一種加密算法,做用是把任意長的輸入消息串變化成固定長的輸出串的一種函數
2、對稱加密算法: 加密密鑰與解密密鑰相同
3、非對稱加密算法 :加密密鑰與解密密鑰不相同
補充:算法分類能夠根據算法設計原理、算法的具體應用和其餘一些特性進行分類。程序開發中用到的算法和咱們所提到的加密算法是不一樣的。
深度優先搜索 廣度優先搜索 啓發式搜索 遺傳算法
哈夫曼編碼 樹的遍歷 最短路徑算法 最小生成樹算法 最小樹形圖 網絡流算法 匹配算法 分團問題
數值分析 加密算法 排序算法 檢索算法 隨機化算法