加密與解密
- 對稱密碼體制的保密性主要取決于密鑰的保密性,與算法的保密性無關(guān)
- 非對稱加密算法與對稱加密算法的區(qū)別:
(1)、用于消息解密的密鑰值與用于消息加密的密鑰值不同;
(2)、非對稱加密算法比對稱加密算法慢數(shù)千倍,但在保護通信安全方面,非對稱加密算法卻具有對稱密碼難以企及的優(yōu)勢。
對稱加密算法
又叫傳統(tǒng)密碼算法,也叫私鑰加密。在對稱加密體制中,存在的最重要的問題之一就是密鑰的分發(fā)問題,也就是如何將密鑰傳送給需要它們的用戶。
- 特點:
- 優(yōu)點:算法公開、計算量小、加密速度快、加密效率高。
- 缺點是:交易雙方都使用同樣密鑰,安全性得不到保證。此外,每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的惟一密鑰,這會使得發(fā)收信雙方所擁有的鑰匙數(shù)量呈幾何級數(shù)增長,密鑰管理成為用戶的負擔。
- 分類:
流加密算法和塊加密算法。 -
包括:
DES、3DES、TDEA、Blowfish、RC5、IDEA、AES、CAST、RC2、RC4。
對稱密鑰加密和解密過程
流加密算法
流加密算法在當今應(yīng)用不是很廣泛,比較著名的有RC4和A5算法。
流加密算法是將明文與一個密鑰流進行XOR(邏輯異或)運算生成密文。將密文與相同的密鑰流進行XOR運算即可還原成明文。流加密是以二進制的單個位為單位進行數(shù)據(jù)加密。流加密算法的關(guān)鍵在于密鑰流必須是隨機的,而且合法用戶可以很容易再生該密鑰流。流加密算法的密鑰流是通過使用一個隨機位發(fā)生器和一個短的密鑰來產(chǎn)生密鑰流,這個密鑰由用戶記住。
塊加密算法
塊加密算法是加密算法中應(yīng)用最廣泛的類型。塊加密算法每次是對固定大小(如64位、128位、256位等)的位塊進行加密。塊加密算法將明文分成m個塊,對每個塊進行相同的變換,從而產(chǎn)生m個密文塊。塊的大小可以是任意數(shù)目,但一般都是2的N次方。如果明文的大小不是塊大小的整數(shù)倍,解決這一問題的常見的方法對位不足的塊用0進行填充,從而使得明文長度是塊大小的整數(shù)倍。當然,這要求加密時能填充字符,解密時能夠檢測出填充字符。
非對稱加密算法
非對稱密碼體制將加密運算和解密運算分離,通信雙方無需事先交換密鑰就可以建立保密通信。并且該體制采用密鑰管理技術(shù),大大減少了多用戶通信所需的密鑰量,節(jié)省了系統(tǒng)資源。
- 特點:
- 優(yōu)點:保密性比較好,它消除了最終用戶交換密鑰的需要。
- 缺點:算法強度復(fù)雜、安全性依賴于算法與密鑰,由于其算法復(fù)雜,加密解密速度沒有對稱加密解密的速度快。
-
包括:
RSA、Elgamal、背包算法、Rabin、DH、ECC(橢圓曲線加密算法)、DSA。
非對稱加密和解密過程
摘要算法
消息摘要算法的主要特征是加密過程不需要密鑰,并且經(jīng)過加密的數(shù)據(jù)無法被解密,只有輸入相同的明文數(shù)據(jù)經(jīng)過相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密鑰的管理與分發(fā)問題,適合于分布式網(wǎng)絡(luò)相同上使用?,F(xiàn)在,消息摘要算法主要應(yīng)用在“數(shù)字簽名”領(lǐng)域,作為對明文的摘要算法。
- 特點:
- 單向性
- 抗弱碰撞
- 抗強碰撞
- 包括:
MD5、SHA-1、SHA-2、SHA-256、SHA-512等
MD5
Message Digest Algorithm 5,流行度極高,但目前被發(fā)現(xiàn)存在碰撞沖突風險; 任意長度輸出為128bit=16字節(jié)摘要
SHA1
SHA 指Security Hash Algorithm,由美國國家安全局NSA設(shè)計的安全散列算法系列; SHA1 輸出長度為160bit=20字節(jié)摘要
SHA256
繼SHA1 出現(xiàn)的算法(屬于SHA-2類),安全性較SHA1更高; SHA256 輸出長度為256bit=32字節(jié)摘要。
MAC(HMAC) 算法
MAC(Message Authentication Code,消息認證碼算法)是含有密鑰的散列函數(shù)算法,兼容了MD和SHA算法的特性,并在此基礎(chǔ)上加入了密鑰。因次,我們也常把MAC稱為HMAC(keyed-Hash Message Authentication Code)。
MAC算法主要集合了MD和SHA兩大系列消息摘要算法。MD系列的算法有HmacMD2、HmacMD4、HmacMD5三種算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512五種算法。
經(jīng)過MAC算法得到的摘要值也可以使用十六進制編碼表示,其摘要值長度與參與實現(xiàn)的摘要值長度相同。例如,HmacSHA1算法得到的摘要長度就是SHA1算法得到的摘要長度,都是160位二進制碼,換算成十六進制編碼為40位。
- HMAC和MAC在密碼學(xué)上的區(qū)別:
MAC是一個散列映射關(guān)系
HMAC是構(gòu)建MAC的一種方式
數(shù)字簽名
數(shù)字簽名的技術(shù)基礎(chǔ)是公鑰密碼技術(shù)。
數(shù)字簽名主要的功能是:
(1)、確認信息是由簽名者發(fā)送的;(身份認證)
(2)、確認信息自簽名后到收到為止,未被修改過;(完整性)
(3)、簽名者無法否認信息是由自己發(fā)送的。(不可抵賴性)數(shù)字簽名技術(shù):
將摘要信息用發(fā)送者的私鑰加密,與原文一起傳送給接收者。接收者只有用發(fā)送的公鑰才能解密被加密的摘要信息,然后用Hash函數(shù)對收到的原文產(chǎn)生一個摘要信息,與解密的摘要信息對比。如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數(shù)字簽名能夠驗證信息的完整性。一個數(shù)字簽名體制一般包含兩個組成部分:
簽名算法(signaturealgorithm)和驗證算法(verification algorithm)。簽名算法用于對消息產(chǎn)生數(shù)字簽名,它通常受一個簽名密鑰的控制,簽名算法或者簽名密鑰是保密的,由簽名者掌握;驗證算法用于對消息的數(shù)字簽名進行驗證,根據(jù)簽名是否有效驗證算法能夠給出該簽名為“真”或者“假”的結(jié)論。驗證算法通常也受一個驗證密鑰的控制,但驗證算法和驗證密鑰應(yīng)當是公開的,以便需要驗證簽名的人能夠方便的驗證-
數(shù)字簽名的實現(xiàn)方法:
無保密機制的RSA簽名過程
有保密機制的RSA簽名過程
數(shù)字證書
數(shù)字證書就是互聯(lián)網(wǎng)通訊中標志通訊各方身份信息的一串數(shù)字,提供了一種在Internet上驗證通信實體身份的方式,是由一個由權(quán)威機構(gòu)----CA 機構(gòu),又稱為證書授權(quán)(Certificate Authority)中心發(fā)行的,人們可以在網(wǎng)上用來識別對方的身份。數(shù)字證書是一個經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書授權(quán)中心的數(shù)字簽名,此外,數(shù)字證書只在特定的時間段內(nèi)有效。
- 數(shù)字證書工作原理:
數(shù)字證書采用公鑰體制,即利用一對互相匹配的密鑰進行加密、解密。每個用戶自己設(shè)定一把特定的僅為本人所知的私有密鑰(私鑰),用它進行解密和簽名;同時設(shè)定一把公共密鑰(公鑰)并由本人公開,為一組用戶所共享,用于加密和驗證簽名。當發(fā)送一份保密文件時,發(fā)送方使用接收方的公鑰對數(shù)據(jù)加密,而接收方則使用自己的私鑰解密,這樣信息就可以安全無誤地到達目的地了。通過數(shù)字的手段保證加密過程是一個不可逆過程,即只有用私有密鑰才能解密。在公開密鑰密碼體制中,常用的一種是RSA體制。其數(shù)學(xué)原理是將一個大數(shù)分解成兩個質(zhì)數(shù)的乘積,加密和解密用的是兩個不同的密鑰。即使已知明文、密文和加密密鑰(公開密鑰),想要推導(dǎo)出解密密鑰(私密密鑰),在計算上是不可能的。
- 數(shù)字證書從應(yīng)用角度分類:
(1)、服務(wù)器證書(SSL證書):被安裝于服務(wù)器設(shè)備上,用來證明服務(wù)器的身份和進行通信加密。服務(wù)器證書可以用來防止欺詐釣魚站點。在服務(wù)器上安裝服務(wù)器證書后,客戶端瀏覽器可以與服務(wù)器證書建立SSL連接,在SSL連接上傳輸?shù)娜魏螖?shù)據(jù)都會被加密。同時,瀏覽器會自動驗證服務(wù)器證書是否有效,驗證所訪問的站點是否是假冒站點,服務(wù)器證書保護的站點多被用來進行密碼登錄、訂單處理、網(wǎng)上銀行交易等。SSL證書主要用于服務(wù)器(應(yīng)用)的數(shù)據(jù)傳輸鏈路加密和身份認證,綁定網(wǎng)站域名,不同的產(chǎn)品對于不同價值的數(shù)據(jù)和要求不同的身份認證。
(2)、電子郵件證書:可以用來證明電子郵件發(fā)件人的真實性。它并不證明數(shù)字證書上面CN一項所標識的證書所有者姓名的真實性,它只證明郵件地址的真實性。收到具有有效電子簽名的電子郵件,我們除了能相信郵件確實由指定郵箱發(fā)出外,還可以確信該郵件從被發(fā)出后沒有被篡改過。另外,使用接收的郵件證書,我們還可以向接收方發(fā)送加密郵件。該加密郵件可以在非安全網(wǎng)絡(luò)傳輸,只有接收方的持有者才可能打開該郵件。
(3)、客戶端個人證書:主要被用來進行身份驗證和電子簽名。安全的客戶端證書被存儲于專用的usbkey中。存儲于key中的證書不能被導(dǎo)出或復(fù)制,且key使用時需要輸入key的保護密碼。使用該證書需要物理上獲得其存儲介質(zhì)usbkey,且需要知道key的保護密碼,這也被稱為雙因子認證。這種認證手段是目前internet最安全的身份認證手段之一。key的種類有多種,指紋識別、第三鍵確認,語音報讀,以及帶顯示屏的專用usbkey和普通usbkey等。
- 數(shù)字證書格式:目前普遍采用的是X.509V3國際標準,一個標準的X.509數(shù)字證書包含以下一些內(nèi)容:
(1)、證書的版本信息;
(2)、證書的序列號,每個證書都有一個唯一的證書序列號;
(3)、證書所使用的簽名算法;
(4)、證書的發(fā)行機構(gòu)名稱,命名規(guī)則一般采用X.500格式;
(5)、證書的有效期,現(xiàn)在通用的證書一般采用UTC時間格式,它的計時范圍為1950-2049;
(6)、證書所有人的名稱,命名規(guī)則一般采用X.500格式;
(7)、證書所有人的公開密鑰;
(8)、證書發(fā)行者對證書的簽名。
證書結(jié)構(gòu)
數(shù)字信封
數(shù)字信封(digital envelope)是將對稱密鑰通過非對稱加密(即有公鑰和私鑰兩個)的結(jié)果分發(fā)對稱密鑰的方法。
數(shù)字信封包含被加密的內(nèi)容和被加密的用于加密該內(nèi)容的密鑰。雖然經(jīng)常使用接收方的公鑰來加密“加密密鑰”,但這并不是必須的,也可以使用發(fā)送方和接收方預(yù)共享的對稱密鑰來加密。當接收方收到數(shù)字信封時,先用私鑰或預(yù)共享密鑰解密,得到“加密密鑰”,再用該密鑰解密密文,獲得原文。數(shù)字信封技術(shù)使用兩層加密體系。
數(shù)字信封是一種綜合利用了對稱加密技術(shù)和非對稱加密技術(shù)兩者的優(yōu)點進行信息安全傳輸?shù)囊环N技術(shù)。數(shù)字信封既發(fā)揮了對稱加密算法速度快、安全性好的優(yōu)點,又發(fā)揮了非對稱加密算法密鑰管理方便的優(yōu)點。
數(shù)字信封是公鑰密碼體制在實際中的一個應(yīng)用,是用加密技術(shù)來保證只有規(guī)定的特定收信人才能閱讀通信的內(nèi)容。

編解碼算法
1. Hex 編碼
將二進制數(shù)據(jù)按16進制轉(zhuǎn)換為字符串,1字節(jié)=2個字符,編碼后體積為2倍。
2. Base64
由MIME規(guī)范定義的編碼算法,其將3個字節(jié)(24位)編碼為4個字符。 字符集包括64個,可表示6二進制位的數(shù)據(jù),因此一個字符對應(yīng)一組6bit的數(shù)據(jù)。 編碼后體積約為4/3倍,針對不足位數(shù)用=補齊。
協(xié)議
SSL
- 概念
安全套接字層(SSL, Secure Sockets Layer)是一種協(xié)議,支持服務(wù)通過網(wǎng)絡(luò)進行通信而不損害安全性。它在客戶端和服務(wù)器之間創(chuàng)建一個安全連接。然后通過該連接安全地發(fā)送任意數(shù)據(jù)量。 - 用途
主要用在Web領(lǐng)域,它是利用數(shù)據(jù)的加密技術(shù)保障數(shù)據(jù)在互聯(lián)網(wǎng)上安全傳輸?shù)模_保其傳輸過程中不至于被竊聽或截聽,甚至是即使在被竊聽或截聽的情況下數(shù)據(jù)也不會被破譯。對于Web,SSL已被廣泛地運用,保證Web瀏覽器與Web瀏覽器之間數(shù)據(jù)加密傳輸與身份認證等。 - 必要條件
安全套接字是用于服務(wù)器之上的一個加密系統(tǒng),它可以確保在客戶機與服務(wù)器之間傳輸?shù)臄?shù)據(jù)仍然是安全與隱秘的。要使服務(wù)器和客戶機使用SSL進行安全的通信,服務(wù)器必須有兩樣?xùn)|西:密鑰對(Key pair)和證書(Certificate)。
工作過程
SSL使用安全握手來初始化客戶機與服務(wù)器之間的安全連接。在握手期間,客戶機和服務(wù)器對它們將要為此會話使用的密鑰及加密方法達成一致??蛻魴C使用服務(wù)器證書驗證服務(wù)器。握手之后,SSL被用來加密和解密HTTPS(組合SSL和HTTP的一個獨特協(xié)議)請求和服務(wù)器響應(yīng)中的所有信息,包括:
(1)、客戶機正在請求的URL;
(2)、提交的表單的內(nèi)容;
(3)、訪問授權(quán)信息(比如用戶名和密碼);
(4)、所有在客戶機與服務(wù)器之間發(fā)送的數(shù)據(jù)。

SSL及其繼任者傳輸層安全(TransportLayer Security, TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLS與SSL在傳輸層對網(wǎng)絡(luò)連接進行加密。SSL用以保障在Internet上數(shù)據(jù)傳輸之安全,利用數(shù)據(jù)加密(Encryption)技術(shù),可確保數(shù)據(jù)在網(wǎng)絡(luò)上傳輸過程中不會被截取及竊聽。
SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持,如圖1。SSL協(xié)議可分為兩層:(1)、SSL記錄協(xié)議(SSLRecord Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持;(2)、SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實際的數(shù)據(jù)傳輸開始前,通訊雙方進行身份認證、協(xié)商加密算法、交換加密密鑰等。
功能
(1)、SSL實際上是一種調(diào)和各種加密算法的策略,能調(diào)用各種加密算法的功能模塊,對傳輸?shù)恼鎸崝?shù)據(jù)進行加密,防止傳輸?shù)臄?shù)據(jù)被黑客截取,即使被截取,由于數(shù)據(jù)是被加密過的,所以也能保證數(shù)據(jù)在一定的時間內(nèi)很難被破譯,但是不能保證100%的安全,這是任何安全策略都不能做到的;
(2)、SSL還能提供保護數(shù)據(jù)完整性策略,確保在傳輸中數(shù)據(jù)不被非法篡改,主要采用相關(guān)摘要算法來實現(xiàn);
(3)、SSL還具備認證功能,主要是可以認證客戶端的合法性(相對于服務(wù)器而言)和服務(wù)器的合法性(相對于客戶端),這種認證非常重要,很多的攻擊都是黑客偽裝成合法的對等方來攻擊的,如中間人攻擊技術(shù)。
(4)、SSL也支持數(shù)據(jù)傳輸前被壓縮功能,數(shù)據(jù)壓縮的目的是減少網(wǎng)絡(luò)傳輸負載。
TLS
安全傳輸層協(xié)議(TLS)用于在兩個通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。
該協(xié)議由兩層組成: TLS 記錄協(xié)議(TLS Record)和 TLS 握手協(xié)議。
TLS握手過程
- 當客戶端連接到支持TLS協(xié)議的服務(wù)器要求創(chuàng)建安全連接并列出了受支持的密碼組合(加密密碼算法和加密哈希函數(shù)),握手開始。
- 服務(wù)器從該列表中決定加密和散列函數(shù),并通知客戶端。
- 服務(wù)器發(fā)回其數(shù)字證書,此證書通常包含服務(wù)器的名稱、受信任的證書頒發(fā)機構(gòu)(CA)和服務(wù)器的公鑰。
- 客戶端確認其頒發(fā)的證書的有效性。
- 為了生成會話密鑰用于安全連接,客戶端使用服務(wù)器的公鑰加密隨機生成的密鑰,并將其發(fā)送到服務(wù)器,只有服務(wù)器才能使用自己的私鑰解密。
- 利用隨機數(shù),雙方生成用于加密和解密的對稱密鑰。這就是TLS協(xié)議的握手,握手完畢后的連接是安全的,直到連接(被)關(guān)閉。如果上述任何一個步驟失敗,TLS握手過程就會失敗,并且斷開所有的連接。
開源庫
OpenSSL
在計算機網(wǎng)絡(luò)上,OpenSSL是一個開放源代碼的軟件庫包,應(yīng)用程序可以使用這個包來進行安全通信,避免竊聽,同時確認另一端連線者的身份。這個包廣泛被應(yīng)用在互聯(lián)網(wǎng)的網(wǎng)頁服務(wù)器上。
其主要庫是以C語言所寫成,實現(xiàn)了基本的加密功能,實現(xiàn)了SSL與TLS協(xié)議。OpenSSL可以運行在OpenVMS、 Microsoft Windows以及絕大多數(shù)類Unix操作系統(tǒng)上。
OpenSSL包含3個部分:密碼算法庫、SSL協(xié)議庫、應(yīng)用程序。
源代碼組成
(1)、工具源碼庫,主要存放在/apps文件夾下,如果默認編譯,則只編譯成openssl(windows環(huán)境下編譯成openssl.exe)可執(zhí)行文件。其包含各種豐富的命令工具,并且各個源碼可單獨進行編譯;
(2)、范例源碼在/demos目錄下;
(3)、測試源碼主要在/test下;
(4)、SSL庫所有源代碼都在/ssl文件目錄下,包括SSL系列源碼。各系列的版本基本都有客戶端函數(shù)源碼(_clnt.c)、服務(wù)端函數(shù)源碼(_srvr.c)、還有通用函數(shù)源碼(_both.c)以及底層包源碼(_pkt.c)、方法函數(shù)源碼(_meth.c)等協(xié)議相關(guān)的各種密鑰計算函數(shù)源碼(_enc.c);
(5)、crypto源代碼庫是OpenSSL庫最基礎(chǔ)的代碼庫,包括如下內(nèi)容:
A、對稱算法與非對稱算法以及摘要算法封裝crypto/evp目錄下;
B、crypto/hmac目錄,實現(xiàn)基于對稱算法的MAC;
C、對稱算法(crypto/aes、crypto/omp、crypto/bf、crypto/des和crypto/cast等目錄);
D、非對稱算法(crypto/dh、crypto/ec、crypto/ecdh和crypto/dsa);
E、密鑰交換/認證算法(crypto/dh和crypto/krb5)以及摘要算法(crypto/md2、crypto/md4、crypto/md5和crypto/sha);
F、隊列(crypto/pqueue目錄),實現(xiàn)隊列數(shù)據(jù)結(jié)構(gòu),用于DTLS;
G、隨機數(shù)(crypto/rand目錄),實現(xiàn)偽隨機數(shù)生成,同時支持用戶自定義隨機數(shù)生成;
H、x509數(shù)字證書(crypto/x509v3和crypto/x509),包含數(shù)字證書申請、數(shù)字證書以及CRL的構(gòu)造、解析和簽名驗證等功能;
I、asn.1 DER編碼解碼(crypto/asn1目錄),包含基本asn1對象的編解碼及數(shù)字證書請求、數(shù)字證書和CRL撤銷列表及PKCS8等基本的編解碼函數(shù)。這些函數(shù)是通過宏來實現(xiàn)的;
J、抽象IO接口(BIO, crypto/bio),其目錄下的函數(shù)對各種輸入輸出進行抽象封裝,包括內(nèi)存、文件、socket、標準輸入輸出和SSL協(xié)議;
K、hash表(crypto/lhash目錄),實現(xiàn)了散列表的數(shù)據(jù)結(jié)構(gòu)。OpenSSL中很多數(shù)據(jù)結(jié)構(gòu)都是以散列表來存放的;
M、數(shù)字證書在線認證(crypto/ocsp目錄),實現(xiàn)了ocsp協(xié)議的編解碼以及證書有效性計算等功能;
N、堆棧(crypto/stack目錄),實現(xiàn)了堆棧數(shù)據(jù)結(jié)構(gòu);
O、pkcs7消息語法(crypto/pkcs7目錄),主要實現(xiàn)了構(gòu)造和解析PKCS7消息;
P、文件數(shù)據(jù)庫(crypto/txt_db目錄);
Q、DSO(動態(tài)共享對象,crypto/dso目錄),本目錄下的文件主要抽象了各種平臺的動態(tài)庫加載函數(shù),為用戶提供統(tǒng)一接口;
R、硬件引擎(crypto/engine目錄),硬件引擎接口。用戶如果要寫自己的硬件引擎,必須實現(xiàn)它所規(guī)定的接口;
S、PEM文件格式處理(crypto/pem),用于生成和讀取各種PEM格式文件,包括各種密鑰、數(shù)字證書請求、數(shù)字證書、PKCS7消息和PKCS8消息等;
T、pkcsl2個人證書格式(crypto/pckcsl2目錄),主要功能為實現(xiàn)證書的構(gòu)造和解析功能;
U、線程支持功能(crypto/threads),OpenSSL支持多線程,但是用戶必須實現(xiàn)相關(guān)接口;
V、錯誤處理功能(crypto/err目錄),當程序出現(xiàn)錯誤時,OpenSSL能以堆棧的形式顯示各個錯誤。本目錄下只有基本的錯誤處理接口,具體的錯誤信息由各個模塊提供;
W、大數(shù)運算功能(crypto/bn目錄),本目錄下的文件實現(xiàn)了各種大數(shù)運算。這些大數(shù)運算主要用于非對稱算法中密鑰生成以及各種加解密操作。另外還為用戶提供了大量輔助函數(shù),比如內(nèi)存與大數(shù)之間的相互轉(zhuǎn)換;
X、字符緩存操作功能(crypto/buffer目錄),為字符操作提供內(nèi)存緩沖區(qū);
Y、配置文件讀取(crypto/conf目錄),OpenSSL主要配置文件為OpenSSL.cnf。本目錄下的函數(shù)實現(xiàn)了對這種格式配置文件的讀取操作。
SSL協(xié)議的實現(xiàn)源代碼位于OpenSSL的ssl目錄下。SSL的所有實現(xiàn)中,都有客戶端實現(xiàn)(_clnt.c)、服務(wù)端實現(xiàn)(_srvr.c)、加密實現(xiàn)(_enc.c)、記錄協(xié)議實現(xiàn)(_pkt.c)、METHOD方法(_meth.c)、客戶端服務(wù)端都用到的握手方法實現(xiàn)(_both.c),以及對外提供的函數(shù)實現(xiàn)(_lib.c)等。ssl.h文件,可以看到SSL的主要數(shù)據(jù)結(jié)構(gòu)。包括SSL_CTX、SSL和SSL_SESSION。SSL_CTX主要功能為SSL握手階段的環(huán)境準備、準備SSL握手階段所需的證書、私有密鑰、版本及其它選項。SSL的主要功能為準備SSL握手階段與傳送數(shù)據(jù)信息。SSL_SESSION數(shù)據(jù)結(jié)構(gòu)則為了保存主密鑰、會話ID、讀寫各種密鑰等。SSL_CTX數(shù)據(jù)結(jié)構(gòu)初始化在最先,緊接著是初始化SSL數(shù)據(jù)結(jié)構(gòu)。
SSL記錄層的實現(xiàn)
首先對明文數(shù)據(jù)進行分片,每片有固定大小,其次將每個分片單獨壓縮,而不是放在一起進行壓縮,然后對每一個壓縮包進行MAC計算,并產(chǎn)生一個MAC值,之后對這個壓縮包進行加密,最后將這個加密后的密文與MAC值放在一起用協(xié)議頭進行封裝,如圖2。

SSL協(xié)議握手層實現(xiàn)
(1)、client端向server端發(fā)送的第一個開始信息是hello單詞以及SSL的版本號、client端支持的加密算法、一個client端自動生成的偽隨機號等,向server端表示一個新會話連接的開始。
(2)、server端根據(jù)client端發(fā)過來的信息判斷是否接受這個新的會話,不需要就斷開連接,client會繼續(xù)發(fā)送hello建立會話,直到server接收這個會話連接或到自己放棄這個會話連接。如果server答應(yīng)這個會話建立,則server在回應(yīng)對方信息時將含有未來數(shù)據(jù)加密所必須的任何數(shù)據(jù),如版本號、支持的加密算法、一個服務(wù)器端自動生成的偽隨機數(shù)等;
(3)、client端會依據(jù)收到的來自server端的數(shù)據(jù)產(chǎn)生主key,并使用server端的public key加密這個主key后,將加密過的key傳給server,因為只有server有public key的另一把private key,所以只有真正的server能解密;
(4)、server解密成功后,返回給client一個用主key認證的數(shù)據(jù),以此數(shù)據(jù)讓client端認證自己;
(5)、如果是雙認證模式,還要采取方式對另一邊也進行認證;
(6)、最后雙方都要發(fā)送done或over信息表示握手結(jié)束,如圖3。





