




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、讓SSL/TLS協(xié)議流行起來:深度解讀SSL/TLS實現(xiàn)一 前言SSL/TLS協(xié)議是網(wǎng)絡安全通信的重要基石,本系列將簡單介紹SSL/TLS協(xié)議,主要關注SSL/TLS協(xié)議的安全性,特別是SSL規(guī)范的正確實現(xiàn)。 本系列的文章大體分為3個部分:SSL/TLS協(xié)議的基本流程典型的針對SSL/TLS協(xié)議的攻擊SSL/TLS協(xié)議的安全加固措施本文對SSL/TLS協(xié)議概況做基本介紹,包括SSL/TLS協(xié)議的版本變遷,協(xié)議的詳細流程以及流行的SSL/TLS協(xié)議實現(xiàn)。文章的主要內(nèi)容翻譯自波鴻魯爾大學Christopher Meyer的文章20 Years of SSL/TLS Research An Anal
2、ysis of the Internets Security Foundation,同時也根據(jù)作者自己的理解增加了部分內(nèi)容,以使對SSL/TLS協(xié)議的介紹更為完整。二 什么是SSL/TLS?SSL全稱是Secure Sockets Layer,安全套接字層,它是由網(wǎng)景公司(Netscape)設計的主要用于Web的安全傳輸協(xié)議,目的是為網(wǎng)絡通信提供機密性、認證性及數(shù)據(jù)完整性保障。如今,SSL已經(jīng)成為互聯(lián)網(wǎng)保密通信的工業(yè)標準。SSL最初的幾個版本(SSL 1.0、SSL2.0、SSL 3.0)由網(wǎng)景公司設計和維護,從3.1版本開始,SSL協(xié)議由因特網(wǎng)工程任務小組(IETF)正式接管,并更名為TLS
3、(Transport Layer Security),發(fā)展至今已有TLS 1.0、TLS1.1、TLS1.2這幾個版本。如TLS名字所說,SSL/TLS協(xié)議僅保障傳輸層安全。同時,由于協(xié)議自身特性(數(shù)字證書機制),SSL/TLS不能被用于保護多跳(multi-hop)端到端通信,而只能保護點到點通信。SSL/TLS協(xié)議能夠提供的安全目標主要包括如下幾個:認證性借助數(shù)字證書認證服務器端和客戶端身份,防止身份偽造機密性借助加密防止第三方竊聽完整性借助消息認證碼(MAC)保障數(shù)據(jù)完整性,防止消息篡改重放保護通過使用隱式序列號防止重放攻擊為了實現(xiàn)這些安全目標,SSL/TLS協(xié)議被設計為一個兩階段協(xié)議,
4、分為握手階段和應用階段:握手階段也稱協(xié)商階段,在這一階段,客戶端和服務器端會認證對方身份(依賴于PKI體系,利用數(shù)字證書進行身份認證),并協(xié)商通信中使用的安全參數(shù)、密碼套件以及MasterSecret。后續(xù)通信使用的所有密鑰都是通過MasterSecret生成。在握手階段完成后,進入應用階段。在應用階段通信雙方使用握手階段協(xié)商好的密鑰進行安全通信。SSL/TLS協(xié)議有一個高度模塊化的架構,分為很多子協(xié)議,如下圖所示:Handshake協(xié)議:包括協(xié)商安全參數(shù)和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換;ChangeCipherSpec 協(xié)議:一條消息表明握手協(xié)議已經(jīng)完成;Alert
5、 協(xié)議:對握手協(xié)議中一些異常的錯誤提醒,分為fatal和warning兩個級別,fatal類型的錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接仍可繼續(xù),只是會給出錯誤警告;Record 協(xié)議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等。三 協(xié)議流程詳解本節(jié)對SSL/TLS協(xié)議的流程進行詳細介紹。一個典型的TLS 1.0協(xié)議交互流程如下圖所示:每一個SSL/TLS鏈接都是從握手開始的,握手過程包含一個消息序列,用以協(xié)商安全參數(shù)、密碼套件,進行身份認證以及密鑰交換。握手過程中的消息必須嚴格按照預先定義的順序發(fā)生,否則就會帶來潛在的安全威脅。今年頂級安全會議CCS 有文章提
6、出了建立綜合狀態(tài)機來檢查SSL鏈接中消息序列3.1 握手過程中的消息序列ClientHello:ClientHello通常是握手過程中的第一條消息,用于告知服務器客戶端所支持的密碼套件種類、最高SSL/TLS協(xié)議版本以及壓縮算法。ClientHello中還包含一個隨機數(shù),這個隨機數(shù)由4個字節(jié)的當前GMT UNIX時間以及28個隨機選擇的字節(jié)組成,共32字節(jié)。該隨機數(shù)會在密鑰生成過程中被使用。另外,ClientHello中還可能包含客戶端支持的TLS擴展。(TLS擴展可以被用來豐富TLS協(xié)議的功能或者增強協(xié)議的安全性)ServerHello:服務器接受到ClientHello后,會返回Serve
7、rHello。服務器從客戶端在ClientHello中提供的密碼套件、SSL/TLS版本、壓縮算法列表里選擇它所支持的項,并把它的選擇包含在ServerHello中告知客戶端。接下來SSL協(xié)議的建立就基于服務器選擇的密碼套件類型、SSL/TLS協(xié)議版本以及壓縮算法。ServerHello中同樣會包含一個隨機數(shù),同樣4+28 字節(jié)類型,由服務器生成。Certificate:客戶端和服務器都可以發(fā)送證書消息來證明自己的身份,但是通??蛻舳俗C書不被使用。 服務器一般在ServerHello后會接一條Certificate消息,Certificate消息中會包含一條證書鏈,從服務器證書開始,到Cert
8、ificate authority(CA)或者最新的自簽名證書結束。下圖形象地描述了證書鏈:SSL中使用的證書通常是X.509類型證書,X.509證書的內(nèi)容如下表所示:在用的X.509證書包含Version 1和Version 3兩種版本,其中v1版本的證書存在安全隱患,同時不支持TLS擴展,被逐漸棄用。現(xiàn)在大多數(shù)在用的SSL證書都是V3版本。同時證書會附帶與協(xié)商好的密鑰交換算法對應的密鑰。密鑰交換算法以及它們所要求的密鑰類型如下表所示。ServerKeyExchange:該消息僅當以下密鑰交換算法被使用時由服務器發(fā)出:RSA_EXPORT(僅當服務器的公鑰大于512bit時)、DHE_DSS
9、、DHE_DSS_EXPORT、DHE_RSA、DHE_RSA_EXPORT、DH_anon 使用其它密鑰交換算法時,服務器不能發(fā)送此消息。ServerkeyExchange消息會攜帶這些密鑰交換算法所需要的額外參數(shù),以在后續(xù)步驟中協(xié)商PreMasterSecret。這些參數(shù)需要被簽過名。CertificateRequest:這個消息通常在要求認證客戶端身份時才會有。消息中包含了證書類型以及可接受的CA列表。ServerHelloDone:服務器發(fā)送這條消息表明服務器部分的密鑰交換信息已經(jīng)發(fā)送完了,等待客戶端的消息以繼續(xù)接下來的步驟。這條消息只用作提醒,不包含數(shù)據(jù)域。ClientKeyExch
10、ange:這條消息包含的數(shù)據(jù)與所選用的密鑰交換算法有關。如果選擇的密鑰交換算法是RSA,那么消息包含的參數(shù)為用服務器RSA公鑰(包含在之前證書中的或者是ServerKeyExchange中的)加密過的PreMasterSecret,它有48個字節(jié),前2個字節(jié)表示客戶端支持的最高協(xié)議版本,后46個字節(jié)是隨機選擇的。如果選擇的密鑰交換算法是DH或者DHE,則可能有兩種情況:隱式DH公開值:包含在Certificate消息里;顯示DH公開值:公開值是本消息的一部分。CertificateVerify:這條消息用來證明客戶端擁有之前提交的客戶端證書的私鑰。Finished:表明握手階段結束。這是第一條
11、用協(xié)商的算法和密鑰保護的消息。因為是用協(xié)商好的密鑰加密的消息,它可以用來確認已經(jīng)協(xié)商好的密鑰。同時Finished消息包含一個verify_data域,可以用來校驗之前發(fā)送和接收的信息。Verify_data域是一個PRF函數(shù)的輸出(pseudo-random function)。這個偽隨機函數(shù)的輸入為:(1)兩個hash值:一個SHA-1,一個MD5,對之前握手過程中交換的所有消息做哈希;(2)the MasterSecret,由預備主密鑰生成;(3)finished_label,如果客戶端發(fā)送的則是”client finished”,服務器發(fā)送的則是”server finished”。關于
12、這個PRF的細節(jié)在3.3節(jié)中會具體描述。 此外,F(xiàn)inished 消息不能夠在ChangeCipherSpec前發(fā)送。3.2 不同密鑰交換算法對應的握手過程不同的密鑰交換算法對應的握手過程中的消息序列是不同的,相應的實現(xiàn)方式也不同,本節(jié)介紹幾個常見密鑰交換算法對應的握手過程。TLS-RSA:在這個場景下,PreMasterSecret是由客戶端指定的,并用RSA公鑰加密發(fā)送給服務器。服務器不影響PReMasterSecret的生成。TLS-DH:基于DH的密鑰交換也被稱為靜態(tài)Diffie-Hellman。在這種場景下,可能是雙方各自提交一個證書包含DH公開值,或者服務器端提交證書包含DH公開值
13、,客戶端在每次會話中選擇一個值。協(xié)商好的DH值被用作PreMasterSecret。顯然證書中的參數(shù)是固定的,那么每次鏈接的PreMasterSecret也是相同的。TLS-DH不能提供前向安全性。TLS-DHE:基于DHE的TLS握手中會有ServerKeyExchange消息。握手過程中交換參數(shù)的認證通過數(shù)字簽名來實現(xiàn),支持的簽名算法包括RSA和DSS。DH參數(shù)會有它的數(shù)字簽名一起被包含在ServerKeyExchange中被發(fā)送出去。客戶端在ClientKeyExchange中返回它的公開DH參數(shù),但沒有簽名保護。同樣協(xié)商出來的DH密鑰被用作PreMasterSecret。3.3 密鑰生
14、成Pseudo-random Function(PRF):偽隨機函數(shù)是SSL協(xié)議中的一個重要組成部分,它被用來秘密擴展以及生成密鑰。在3.1節(jié)講解Finished消息時已經(jīng)簡單提及PRF,在這里我們詳細討論PRF的工作原理。SSL/TLS協(xié)議中的PRF如下圖所示:這個PRF基于兩個hash函數(shù):MD5和SHA-1,它有3個輸入,一個Secret(比如PreMasterSecret),一個標志符(比如”client finished”, “server finished”),還有一個種子值(比如客戶端隨機數(shù)+服務器端隨機數(shù))。Secret在使用時被分為長度相同的兩半:S1和S2,分別作為P_MD
15、5和P_SHA-1的輸入。PRF的輸出按如下方式處理得到:PRF( secret , label , seed ) = P_MD5( S1 , label + seed ) XOR P_SHA1(S2 , label + seed ) ;P_MD5和P_SHA-1都是擴展函數(shù),用來擴展秘密值以用于密鑰生成,它們的計算方式如下:P hash ( secret , seed ) = HMAC hash(secret , A( 1 ) + seed ) +HMAC hash(secret , A( 2 ) + seed ) +HMAC hash(secret , A( 3 ) + seed ) +
16、. . .其中A(0) = seed, A(i) = HMAC hash( secret, A( i 1) )這個秘密擴展會一直進行直到得到足夠多的擴展數(shù)據(jù)。 Key Derivation:主密鑰(MasterSecret)是利用上述PRF從預備主密鑰(PreMasterSecret)生成的。每個MasterSecret為48字節(jié),生成方式如下:mastersecret = PRF( pre mastersecret , ” mastersecret ” , ClientHello.random + ServerHello.random)得到MasterSecret后,它會被進一步處理最后生成
17、4個不同的密鑰和2個初始向量(IV)。處理過程如下:keyblock = PRF( SecurityParameters.mastersecret , ”key expansion ” , SecurityParameters.server random +SecurityParameters.client random ) ;處理過程一直持續(xù)到足夠多的輸出被生成,然后把輸出分為4個key和2個IV:client_write_MAC_secret,server_write_MAC_secret, client_wriete_key, server_write_key, client_write
18、_IV, server_write_IV.下圖完整闡述了SSL/TLS協(xié)議中的密鑰生成過程。四 從SSL到TLS本節(jié)介紹SSL/TLS協(xié)議的版本變遷,不同版本的區(qū)別以及安全特性等。SSL 1.0由于從來沒有被公開過,并且存在嚴重安全漏洞,我們就不討論了。SSL 2.0:SSL 2.0于1995年4月被發(fā)布。SSL 2.0中主要存在的問題如下:MAC不能覆蓋填充長度域,攻擊者可能利用這點破壞消息完整性;缺乏握手認證,攻擊者可以篡改密碼套件列表,誘騙通信雙方使用較弱的密碼套件;使用較弱的或有問題的密碼算法(如MD5,RC4等),或者使用不安全的分組模式(如CBC模式);對于不同的密碼學基元使用相同
19、的密鑰,違背基本安全常識。由于以上安全問題,RFC 6176已經(jīng)明確提出避免使用SSL 2.0,但是現(xiàn)實生活中還有少量客戶端和服務器支持SSL 2.0.SSL 3.0:SSL 3.0引入了一些新的特性和機制解決了很多之前版本存在的漏洞。此外,SSL 3.0中引入了ChangeCipherSpec子協(xié)議。SSL 3.0向后兼容SSL 2.0,相對于SSL 2.0,它的主要改變包括以下幾點:支持更多的密碼套件(支持更多的密碼算法如DSS,SHA-1)在握手階段支持密鑰協(xié)商(DH和FORTEZZA)支持密碼學參數(shù)的重協(xié)商增加了消息壓縮選項MAC能夠覆蓋填充長度域了,同時MAC可以使用MD5或者SHA
20、-1不同的密碼學基元使用不同的keyAlert子協(xié)議能對任何錯誤給出兩種提示:Warning和Fatal中止鏈接的時候會用一個close_notify警告通知通信雙方支持證書鏈,而非單個證書通過Finished消息認證所有發(fā)送和接收的消息加密了的PreMasterSecret包含當前使用的協(xié)議版本,防止協(xié)議回滾TLS 1.0:TLS 1.0和SSL 3.0差別非常小。實際上,TLS 1.0是SSL 3.1,在IETF接手后改名為TLS。TLS 1.0版本是目前使用最廣泛的SSL/TLS協(xié)議版本。TLS 1.0不再支持使用FORTEZZA的密碼套件。TLS 1.0中MAC被替換成HMAC。之前提
21、到ChangeCipherSpec消息必須在Finished消息前發(fā)送,在TLS 1.0中,如果消息序列不符合這個要求,會產(chǎn)生FATAL警告并終止鏈接。TLS 1.1:這個版本相比之前改動也很小。最重要的改動是預防了針對CBC分組模式的一些攻擊。現(xiàn)在的填充錯誤變的和非法MAC錯誤不可區(qū)分了,防止攻擊者利用可區(qū)分錯誤響應建立解密預言機對密文進行攻擊。在每次加密過程中,使用CBC分組模式時,都需要顯示給出IV,而不用再密鑰生成時使用PRF生成IV。此外,TLS 1.1禁止為適應之前出口限制而使用弱化的密碼套件。TLS 1.2:這是最新的版本,部署的還比較少。這個版本禁用了PRF中的MD5和SHA-
22、1,而用一個可配置的hash函數(shù)取代了它們,這樣的修改簡化了計算過程。修改后的PRF風格如下:此外,TLS 1.2的一個重要變化是支持認證加密模式(支持GCM等)。但是由于一些AEAD(Authenticated Encryption with Associated Data)密碼算法要求IV為隱式的,所以IV又恢復到由MasterSecret生成,即TLS 1.0以前的風格。TLS 1.2支持使用GCM、CCM的新密碼套件。同時SSL 2.0被宣布放棄,不再向后兼容SSL 2.0.下圖五 SSL/TLS的流行實現(xiàn)本節(jié)簡單介紹一下流行的SSL/TLS實現(xiàn)庫,SSL協(xié)議非常復雜,由開發(fā)者自己實現(xiàn)
23、常常會出錯,開發(fā)者在具體實現(xiàn)SSL協(xié)議時通常會依賴于這些密碼學庫。5.1 常見的SSL/TLS 實現(xiàn)OpenSSL:這是非常流行的開源SSL/TLS實現(xiàn)。OpenSSLim完全用C語言實現(xiàn),支持SSL 2.0/3.0,TLS 1.0/1.1/1.2以及DTLS 1.0。OpenSSL 近年來出現(xiàn)了很多的安全漏洞,比如2014年曝出的著名的Heartbleed漏洞等。JSSE:這是使用Java實現(xiàn)的,支持SSL 3.0,TLS 1.0/1.1/1.2.Bouncy Castle:它不僅僅支持SSL/TLS,它是一個完整的密碼學庫,支持各種密碼學算法和協(xié)議。不過它僅僅支持TLS 1.0版本。Android平臺主要使用這個密碼學庫。GnuTLS:這是另一個用C語言實現(xiàn)的庫,支持SSL 3.0,TLS 1.0/1.1/1.2以及DTLS 1.0。主要在Unix世界被使用。同時以各種安全漏洞多而聞名。NSS:這是最初由網(wǎng)景公司(Netscape)開發(fā)的庫,支持SSL 2.0/3.0,TLS 1.0/1.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025建筑工地吊車租賃合同示范文本
- 2025合同條款中的格式條款和霸王條款
- 內(nèi)科體液調(diào)節(jié)護理
- 皮疹的護理診斷
- 2025年遼寧省本溪市中考二模地理與生物試題
- 2025年風濕免疫理論知識試題
- 醫(yī)學倫理與器官移植核心議題
- 小學生流感傳染病防控教育
- 傳染性肝炎防治與管理
- 小兒碘缺乏癥的臨床護理
- 【語文】第23課《“蛟龍”探海》課件 2024-2025學年統(tǒng)編版語文七年級下冊
- 大部分分校:地域文化形考任務一-國開(CQ)-國開期末復習資料
- 2024年江蘇省南通市中考地理試題(含答案)
- 跨文化商務交際智慧樹知到期末考試答案章節(jié)答案2024年西安工業(yè)大學
- MOOC 財務報表分析-華中科技大學 中國大學慕課答案
- 輸送帶生產(chǎn)所參考的國際標準
- 對氨基苯酚物質(zhì)安全數(shù)據(jù)表(MSDS)
- PPP跟蹤審計方案
- “珠江專科醫(yī)療聯(lián)盟”推進學科發(fā)展的實踐與創(chuàng)新PPT課件
- XX公司粗苯泄漏著火事故演練方案定
- 上海健康醫(yī)學院?;招S栣屃x
評論
0/150
提交評論