OpenSSL算法
兩臺主機之間怎樣進行安全的數據傳輸呢?安全
ssl/TLS 是什麼?爲何能夠實現數據的加密傳輸?bash
ssl/TLS是安全的套接字層,在應用層和傳輸層又虛擬了一個層,當http封裝完後傳輸給TCP層時候,調用SSL層來對數據進行加密服務器
什麼是openssl?併發
openssl 是SSL的開源的實現。它有三部分構成。ide
libcrypto:加密庫(不通訊時候能夠單純加密本地數據)工具
libssl (ssl/TLS的實現。基於會話的、實現身份認證、數據機密性和會話完整性的ssl/TLS庫)openssl 多用途的命令行工具編碼
***類型: 威脅保密性的***:竊聽、通訊量分析; 威脅完整性的***:更改、假裝、重放、否定 威脅可用性的***:拒絕服務(DoS) 解決方案: 技術(加密和解密)、 服務(用於抵禦***的服務,也便是爲了上述安全目標而特意設計的安全服務) 服務: 認證機制 、訪問控制機制
密鑰算法和協議加密
對稱加密spa
特性:
一、加密、解密使用同一個密鑰;
二、將原始數據分割成爲固定大小的塊,逐個進行加密; 注:能夠保證數據的機密性
缺陷:
一、密鑰過多;
二、密鑰分發困難;
算法:3DES,AES,Blowfish
公鑰加密 密鑰分爲公鑰與私鑰
特色:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然;
用途:數字簽名:主要在於讓接收方確認發送方的身份;
密鑰交換:發送方用對方公鑰加密一個對稱密鑰,併發送給對方;
數據加密
算法:RSA(主要用於密鑰交換,也可簽名,也能夠加密和解密數據), DSA(只能用於簽名), ELGamal
單向加密
特性:定長輸出、雪崩效應;提出數據指紋;只能加密,不能解密;
算法:md5: 128bits sha1 160bits sha224, sha256, sha384, sha512
你知道怎樣保證密鑰傳輸的安全性?密鑰交換: IKE
公鑰加密RSA(使用對方的公鑰加密) 缺點是:在網上傳輸了
Diffie-Hellman(密碼不在網上傳輸)
A和B傳輸數據如何保證數據機密性、完整性、身份驗證的呢? 以下圖
一、同理B收到數據後,用本身的私鑰解密,獲得對稱密鑰。
二、而後用對稱密碼解密整個數據,保證了數據的機密性。B用A的公鑰可以解密數據特徵碼,能夠驗證數據來自於A。
三、B再次用單向加密算法就算出數據特徵碼進行比對,若是同樣表示數據沒有改動,驗證了數據的完整性。
爲何要用到pki?
PKI: 公鑰基礎設施:能夠用來驗證數據來源的合法性
組成: 簽證機構:CA
註冊機構:RA
證書吊銷列表:CRL
證書存取庫:
SSL會話主要三步:
客戶端向服務器端索要並驗正證書;
雙方協商生成「會話密鑰」;
雙方採用「會話密鑰」進行加密通訊;
如圖:
client server
A-----------------------------------B
------->hello
hello <---------------
驗證證書,公鑰加密隨機數--------->
B計算全部的隨機密鑰,生成一個對稱密鑰
服務端握手結束通知
SSL Handshake Protocol:
第一階段:ClientHello:
支持的協議版本,好比tls 1.2;
客戶端生成一個隨機數,稍後用戶生成「會話密鑰」
支持的加密算法,好比AES、3DES、RSA;
支持的壓縮算法;
第二階段:ServerHello
確認使用的加密通訊協議版本,好比tls 1.2;
服務器端生成一個隨機數,稍後用於生成「會話密鑰」
確認使用的加密方法;
服務器證書;
第三階段:
驗正服務器證書,在確認無誤後取出其公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷列表)
發送如下信息給服務器端:一個隨機數;
編碼變動通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送;
客戶端握手結束通知;
第四階段:
收到客戶端發來的第三個隨機數pre-master-key後,計算生成本次會話全部到的「會話密鑰」;
向客戶端發送以下信息:
編碼變動通知,表示隨後的信息都將用雙方商定的加密方法和密鑰發送;
服務端握手結束通知;