1. 程式人生 > >SSL&TLS傳輸層加密協議實現圖解

SSL&TLS傳輸層加密協議實現圖解

http://xuding.blog.51cto.com/4890434/1732275

一、SSL&TLS

    1.SSLSecure Sockets Layer 加密套接字協議層

       1)SSL是為網路通訊提供安全及資料完整性的一種安全協議,在傳輸層對網路連線進行加密

Secure Socket Layer為Netscape網景公司1994所研發,用以保障在Internet上資料傳輸之安全,利用資料加密技術,可確保資料在網路上之傳輸過程中不會被擷取及竊聽。

       2)SSL協議可分為兩層:記錄協議、握手協議

SSL Record Protocol:建立在可靠的傳輸協議如TCP之上為高層協議提供資料封裝、壓縮、加密等基本功能

SSL Handshake Protocol:建立在SSL記錄協議之上用於在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。

         3)SSL版本:1.0v  2.0v  3.0v

              1.0版本未公佈,2.0版本才發出就被暴出大量漏洞

主流版為3.0。廣泛地用於Web瀏覽器與伺服器之間的身份認證和加密資料傳輸,但近期被爆出安全漏洞

     2.TLSTransport Layer Security,安全傳輸層協議

           1999年,IETF在仿照SSL釋出,為防止SSL一家獨大,基本和SSL協議相容

           (1)

版本:V1.0, V1.1, V1.2, V1.3

V1.3現在為草案支援橢圓曲線演算法,現在主流是V1.2

(2)分層設計:

1)最底層:基礎演算法原語的實現,aes, rsa, md5

2)向上一層:各種演算法的實現;

3)再向上一層:組合演算法實現的半成品;

4)用各種元件拼裝而成的各種成品密碼學協議軟體;

    3.SSLTLS實現網路安全性:http -->  SSL/TLS --> https

傳輸層協議TCP,UDP,SCTP不同主機上的程序間通訊通過socket(ip:port)

client ip:port <-- --> s

erverip:port

port:程序地址,程序向核心註冊使用某埠(獨佔)

套接字一般處於監聽模式:LISTEN(ip:port),佔用埠,發起請求是啟用服務

二、傳輸安全性實現:金鑰演算法協議

    1.網路傳輸安全性

           (1)安全的目標

保密性:confidentiality

完整性:integrity

可用性:availability

           (2)攻擊型別

威脅保密性的攻擊:竊聽、通訊量分析;

威脅完整性的攻擊:更改、偽裝、重放、否認

威脅可用性的攻擊:拒絕服務(DoS)

           (3)解決方案

技術層面:加密和解密

服務層面:用於抵禦攻擊的服務,也即是為了上述安全目標而特地設計的安全服務

    2.金鑰演算法

         (1)對稱加密:加密和解密使用同一個金鑰;

                  1)性:加密、解密使用同一個金鑰;將原始資料分割成為固定大小的塊,逐個進行加密;

                  2)缺陷:金鑰過多;金鑰分發困難;

                  3)種類:

               DESData Encryption Standard,資料加密標準;演算法的入口引數有三個:KeyDataMode

Key7個位元組共56,DES演算法的工作金鑰;

Data8個位元組64,是要被加密或被解密的資料;

ModeDES的工作方式,有兩種:加密或解密

               3DES:三輪加密的DES

               AESAdvanced Encryption Standard;  (128bits, 192bits, 256bits, 384bits)

BlowfishTwofishIDEARC6CAST5

         (2)公鑰加密:金鑰分為公鑰與私鑰

                  1)公鑰:從私鑰中提取產生;可公開給所有人;pubkey

       2)私鑰:通過工具建立,使用者自己留存,必須保證其私密性;secret key;

       3)特點:用公鑰加密的資料,只能使用與之配對兒的私鑰解密;反之亦然;

       4)用途:身份認證,數字簽名:主要在於讓接收方確認傳送方的身份;

金鑰交換:傳送方用對方公鑰加密一個對稱金鑰,併發送給對方;

資料(特徵碼)加密:其加密速度比對稱加密慢三個數量級,所以不能做全資料加密

        5)演算法:RSA, DSA, ELGamal

DSS: Digital Signature Standard

DSA:Digital Signature Algorithm

         (3)單向加密:即提出資料指紋;只能加密,不能解密

                  1)特性:定長輸出、雪崩效應;

       2)功能:完整性校驗

       3)演算法:md5:Message Digest 5, 128bits,訊息摘要演算法,版本號為五

sha1:Secure Hash Algorithm 1, 160bits,安全的Hash演算法

sha224, sha256, sha384, sha512

    3.金鑰交換協議:IKE(Internet Key Exchange)

           (1)公鑰加密

           (2)DH(Deffie-Hellman)演算法:密碼本身無需在網際網路上傳輸,但雙方能得到一致的密碼

擴充套件:ECDH(橢圓曲線DH)ECDH(臨時橢圓曲線DH)

實現方案簡介:

   1)AB生成兩個數字:p, gp大素數和g,可以明文可以傳輸

               2)AB各自自定義一個數字xy,進行階乘取模操作,將其結果傳遞給對方

A私下生成x--> p^x%g ==> B

B私下生成y--> p^y%g ==> A

    3)AB進行解密操作

A: (p^y%g)^x=p^yx%gB: (p^x%g)^y=p^xy%g

    4.PKI:Public Key Infrastructure公鑰基礎設施

          (1)PKI組成

簽證機構:CA

註冊機構:RA

證書吊銷列表:CRL

證書存取庫:CB,公共儲存證書位置

          (2)X.509v3:定義了證書的結構以及認證協議標準

版本號序列號簽名演算法ID發行者名稱有效期限主體名稱主體公鑰發行者的惟一標識

主體的惟一標識擴充套件發行者的簽名

三、SSL實現工作流程

   1.SSL會話實現主要步驟(三步)

            (1)客戶端向伺服器端索要並驗正證書;

            (2)雙方協商生成“會話金鑰”;

            (3)雙方採用“會話金鑰”進行加密通訊;

   2.SSLHandshake Protocol:SSL握手協議

第一階段:ClientHello:客戶端

    支援的協議版本,比如tls1.2;

    客戶端生成一個隨機數,稍後使用者生成“會話金鑰”

    支援的加密演算法,比如AES、3DES、RSA;

    支援的壓縮演算法;

第二階段:ServerHello伺服器端

    確認使用的加密通訊協議版本,比如tls1.2;

    伺服器端生成一個隨機數,稍後用於生成“會話金鑰”

    確認使用的加密方法;

    伺服器證書;

第三階段:

    驗正伺服器證書,在確認無誤後取出公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷列表)        

    傳送以下資訊給伺服器端:

一個隨機數;

編碼變更通知,表示隨後的資訊都將用雙方商定的加密方法和金鑰傳送;

客戶端握手結束通知;

第四階段:

    收到客戶端發來的第三個隨機數pre-master-key後,計算生成本次會話所有到的“會話金鑰”;

    向客戶端傳送如下資訊:

編碼變更通知,表示隨後的資訊都將用雙方商定的加密方法和金鑰傳送;

服務端握手結束通知;

Google圖示:public key client private key client---SSL握手協議

註釋:左側client;右側server。藍色虛線分割開各個階段

wKioL1aOOQGz5LUKAAG6Bwpk1wI998.png

SSL協議實現步驟總結:

      1.客戶端生成隨機數,建立會話前商定(如約定的加密演算法),伺服器端將自己生成的隨機數返回

      2.伺服器端將自己的證書發給客戶端,並且請求客戶端證書;

      3. 客戶端檢查伺服器端的證書(簽發者CA、證書有效期、證書內容、證書中名稱和通訊名稱一致、是否吊銷),若檢查沒問題,客戶端將會將自己的證書發給服務端

      4.伺服器端收到客戶端證書,檢查客戶端證書

      5.服務端將前面所有資訊用hash計算,用自己的公鑰簽名發給客戶端

      6.客戶端機密資料用對方公鑰加密後傳送給對方

      7.雙方可以開始進行基於對稱加密方式通訊

      8.客戶端請求斷開會話,伺服器端斷開會話

wKiom1aOOOCTj2jCAAKATwapJHk079.jpg

注意:

1)客戶端驗證是為了防止釣魚網站等,確認訪問的網站為自己所需確認站點

2)公鑰是私鑰的其中一部分,私鑰是私密的、個人的,公鑰是公開的部分;私鑰的長度長於公鑰

3)伺服器證書的主體名稱要和瀏覽器上的訪問的名稱一致,否則驗證無法通過;所以在網際網路上當做伺服器證書名稱必須與通過網際網路訪問伺服器時候的名稱完全一致,否則客戶端提醒操作有風險

4)資料加密過程

            -->單向加密演算法算出資料包的特徵碼

--->用自己的私鑰再次加密上述的特徵碼

--->使用雙方協定演算法對稱加密整個資料包(資料+二次加密的特徵碼)

--->最後再封裝一層對方公鑰加密的特徵碼

其中,最後一步也可以單獨進行一次特性進行傳送確認

經過四次加密能保證資料的完整性,資料的完整性,以及所有者的身份認證

wKiom1aOOOPyhhBJAAE7FuSbTew636.jpg