信息安全系統(tǒng)工程ssl和openssl_第1頁(yè)
已閱讀1頁(yè),還剩80頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、一個(gè)簡(jiǎn)單的安全協(xié)議,1、協(xié)議概述2、協(xié)議過(guò)程,一個(gè)簡(jiǎn)單的安全協(xié)議,由于SSL協(xié)議的復(fù)雜性,為了更好地理解SSL,引入一個(gè)簡(jiǎn)單的安全協(xié)議,該協(xié)議適合于交互式應(yīng)用。該協(xié)議的主要目標(biāo):1、保證通信數(shù)據(jù)的機(jī)密性;2、保證通信數(shù)據(jù)的完整性;3、確保通信雙方身份的可靠性;4、不需為每個(gè)數(shù)據(jù)包都動(dòng)用昂貴的公開密鑰操作,具有較高的效率。,協(xié)議過(guò)程,基本步驟(假設(shè)通信雙方為Alice、Bob):1、握手(Handshake)Alice

2、和Bob使用他們的證書和私鑰來(lái)對(duì)對(duì)方進(jìn)行身份鑒別并交換共享密鑰(MS—Master secret)2、導(dǎo)出密鑰(Key derivation)Alice和Bob使用他們達(dá)成一致的共享密鑰(MS)導(dǎo)出一組用于保護(hù)將要傳輸?shù)臄?shù)據(jù)的密鑰(Session Key)3、數(shù)據(jù)傳輸(Data transfer)將要傳輸?shù)臄?shù)據(jù)分割成一系列的記錄,并對(duì)每條記錄加以保護(hù)4、關(guān)閉連接(Connection closure)使用特殊的、經(jīng)過(guò)保護(hù)的關(guān)

3、閉消息,安全地關(guān)閉連接,協(xié)議過(guò)程—握手,握手階段(Handshake),單向鑒別(結(jié)束后雙方獲得主密鑰MS),聲稱的身份(Bob),掌握Bob的私鑰才能解密,從而完成身份證明,Alice產(chǎn)生主密鑰MS,并用Bob公鑰加密(挑戰(zhàn)),協(xié)議過(guò)程—握手(續(xù)),握手階段(Handshake),雙向鑒別(結(jié)束后雙方獲得主密鑰MS),Alice產(chǎn)生主密鑰MS,并用Bob公鑰加密(挑戰(zhàn)),再用自己私鑰簽名(證明自己),協(xié)議過(guò)程—導(dǎo)出密鑰,使用同一個(gè)密鑰

4、來(lái)完成不同類型的加密操作是糟糕的思想本協(xié)議在每個(gè)傳輸方向上可以采用兩個(gè)會(huì)話密鑰,分別用于加密和消息鑒別(MAC):會(huì)話密鑰可通過(guò)密鑰導(dǎo)出函數(shù)(Key Derivation Function,KDF)由 MS 和 nonce 導(dǎo)出;KDF 一般基于 Hash 算法。一種最簡(jiǎn)單的 KDF 可能如下(由同一個(gè)主密鑰MS生成了四個(gè)不同的會(huì)話密鑰):Ecs=Hash(MS, nonce, ”ECS”) //”ECS”等是一個(gè)常

5、量Mcs=Hash(MS, nonce, ”MCS”) //E是加密密鑰,M是MAC密鑰Esc=Hash(MS, nonce, ”ESC”) //cs和sc是傳輸方向Msc=Hash(MS, nonce, ”MSC”),協(xié)議過(guò)程—數(shù)據(jù)傳輸,數(shù)據(jù)記錄為實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)撵`活性,必須對(duì)數(shù)據(jù)分塊(記錄)傳輸數(shù)據(jù)分塊后 MAC 如何處理,放最后嗎?解決方法:分塊后,每個(gè)記錄應(yīng)該自帶 MAC記錄大小定長(zhǎng),不經(jīng)濟(jì)理

6、想的應(yīng)是變長(zhǎng)記錄,每個(gè)記錄要加上長(zhǎng)度字段記錄格式長(zhǎng)度Mx + 數(shù)據(jù)D + MACMAC計(jì)算M=MAC(Mx,D),協(xié)議過(guò)程—數(shù)據(jù)傳輸(續(xù)),序號(hào)為對(duì)抗重放、刪除、重排攻擊,需要增加序號(hào)Sequence序號(hào)必須是 MAC 輸入的一部分可以放在記錄中在基于TCP的連接中,也可以使用隱含序號(hào)MAC的計(jì)算M=MAC(Mx, Sequence || D),協(xié)議過(guò)程—關(guān)閉連接,控制信息為防止攻擊者惡意切斷連接,需要有一種機(jī)制使

7、得Alice能告訴Bob(或反之),她已完成數(shù)據(jù)傳送兩種方法1、傳送長(zhǎng)度為 0 的記錄2、在記錄中增加類型字段增加類型字段后的記錄格式長(zhǎng)度Mx + 序號(hào)Sequence + 類型Type + 數(shù)據(jù)D + MAC類型為 0:普通數(shù)據(jù)類型為 1:結(jié)束記錄類型為其他:報(bào)告錯(cuò)誤信息MAC的計(jì)算M=MAC(Mx, Sequence || Type || D),協(xié)議過(guò)程–完整圖示,Alice,Bob,協(xié)議小結(jié),該簡(jiǎn)單協(xié)議已經(jīng)包含

8、了SSL絕大多數(shù)的核心功能握手密鑰交換雙向鑒別保密傳輸遺漏的部分不完整,不包括具體實(shí)現(xiàn)細(xì)節(jié)數(shù)據(jù)結(jié)構(gòu)定義每一字段大小使用何種算法涉及到數(shù)據(jù)結(jié)構(gòu)表示、翻譯等問(wèn)題更重要的是缺少協(xié)商(negotiation)功能,二、SSL協(xié)議,1、SSL協(xié)議概述2、SSL的會(huì)話和連接3、SSL的握手協(xié)議4、SSL的Change Cipher Spec協(xié)議5、SSL的Alert協(xié)議6、SSL的記錄協(xié)議,1、SSL協(xié)議概述,SS

9、L:Secure Socket Layer (安全套接層)SSL是用于Internet上兩臺(tái)機(jī)器間提供安全通道的協(xié)議,主要有兩項(xiàng)功能:保護(hù)傳輸數(shù)據(jù)(機(jī)密性和完整性);識(shí)別通信機(jī)器(認(rèn)證性)。SSL協(xié)議的安全通道是透明的對(duì)傳輸?shù)臄?shù)據(jù)內(nèi)容上不加變更,僅作了加密;透明性使得幾乎所有基于TCP的協(xié)議稍加改動(dòng)就可以在SSL上運(yùn)行。,SSL的歷史,TLS:Transport Layer Security;TLSV1.0是一個(gè)Inter

10、net協(xié)議,完全建立在SSL V3的基礎(chǔ)上,又稱為SSLv3.1;RFC2246:The TLS Protocol Version 1.0Rfc3546:Transport Layer Security (TLS) Extensions,SSL在協(xié)議棧中的位置,在分層模型下,某層進(jìn)行了加密,則上層協(xié)議都將自動(dòng)被加密,網(wǎng)絡(luò)協(xié)議棧,TCP/IP協(xié)議報(bào)文封裝,在分層模型下,某層進(jìn)行了加密,則上層協(xié)議都將自動(dòng)被加密,,SSL的保護(hù)區(qū)域,S

11、SL協(xié)議的使用,用于Web的SSLhttps://secure.example.comhttps的端口:一般為 443;在SSL上構(gòu)建一切ftps-data(989), ftps(990)nntps (563)pop3s(995)telnets(992)目前SSL的主要應(yīng)用范圍是 http 協(xié)議。,,加密傳輸,,,WWW服務(wù)器,,,,HTTPs over SSL,,Internet,客戶瀏覽器(1, 2, …n),路由

12、器,路由器,路由器,,,攻擊者,實(shí)際的報(bào)文傳輸物理路徑,利用SSL構(gòu)建的端到端的邏輯安全通道,利用WireShark抓包分析,SSL的體系結(jié)構(gòu),SSL由 Handshake、Change Cipher Spec、Alert 和 Record 這四個(gè)子協(xié)議組成,2、SSL連接和會(huì)話,連接(Connection):指一次提供適當(dāng)類型服務(wù)的傳送。會(huì)話(Session):由握手協(xié)議創(chuàng)建;定義了一組可以被多個(gè)連接共用的密碼安全參數(shù)。

13、連接 vs 會(huì)話在任意一對(duì)的雙方之間,也許會(huì)有多個(gè)安全連接;理論上,雙方可以存在多個(gè)同時(shí)會(huì)話,但在實(shí)踐中并未用到這個(gè)特性。,會(huì)話狀態(tài)參數(shù),(48字節(jié)),會(huì)話狀態(tài)中的Cipher spec,Enum {stream, block} CipherType;Enum {true, false} IsExportable;Enum {null, rc4, rc2, des, 3des, des40, idea, fortezza} B

14、ulkCipherAlgorithm;Enum {null, md5, sha} MACAlgorithm;Struct {BulkCipherAlgorithm Bulk_Cipher_Algorithm;MACAlgorithm MAC_Algorithm;CipherType Cipher_Type;IsExportable Is_Exportable;Uint8 hash_size;

15、 //MAC的長(zhǎng)度Uint8 key_material; //對(duì)稱加密密鑰的長(zhǎng)度Uint8 IV_size; //IV的長(zhǎng)度(CBC模式使用)} CipherSpec;,連接狀態(tài)參數(shù),上述狀態(tài)中的各種密鑰,SSL使用兩個(gè)相互獨(dú)立的密鑰,即Server write key和client write key,分別用于同一連接的兩個(gè)方向上的加解密,對(duì)于MAC操作

16、也一樣。各個(gè)密鑰的關(guān)系如下:,預(yù)備狀態(tài)和當(dāng)前狀態(tài),SSL中定義了預(yù)備狀態(tài)(pending state)和當(dāng)前狀態(tài)(current operating state):用這些狀態(tài)來(lái)協(xié)調(diào)客戶和服務(wù)器同時(shí)使用新的加密參數(shù)和密鑰。預(yù)備狀態(tài):包含本次握手過(guò)程中協(xié)商成功的各種算法和密鑰。當(dāng)前狀態(tài):包含記錄層正在使用的各種算法和密鑰。此外,客戶和服務(wù)器都有各自獨(dú)立的讀狀態(tài)和寫狀態(tài)讀狀態(tài):包含解密、解壓縮、MAC驗(yàn)證算法;解密密鑰。寫狀態(tài):

17、包含加密、壓縮、MAC生成算法;加密密鑰。,預(yù)備狀態(tài)和當(dāng)前狀態(tài)(續(xù)),以上二者結(jié)合,SSL的每一端都包含預(yù)備讀、預(yù)備寫、當(dāng)前讀、當(dāng)前寫4個(gè)邏輯狀態(tài)??蛻?服務(wù)器通過(guò)Change cipher spec 消息進(jìn)行狀態(tài)同步客戶/服務(wù)器收到change cipher spec后,會(huì)將預(yù)備讀狀態(tài)中的內(nèi)容復(fù)制到當(dāng)前讀狀態(tài);客戶/服務(wù)器發(fā)送change cipher spec后,會(huì)將預(yù)備寫狀態(tài)中的內(nèi)容復(fù)制到當(dāng)前寫狀態(tài)。,3、SSL握手協(xié)議,S

18、SL的握手協(xié)議層的功能是驗(yàn)證實(shí)體身份,協(xié)商密鑰交換算法、壓縮算法和加密算法,完成密鑰交換以及密鑰導(dǎo)出等??蛻艉头?wù)器的握手過(guò)程是指建立一個(gè)會(huì)話或恢復(fù)一個(gè)會(huì)話的過(guò)程。在這一過(guò)程中,客戶和服務(wù)器都建立新的會(huì)話的會(huì)話狀態(tài)或使用已經(jīng)存在的會(huì)話的會(huì)話狀態(tài),但每次握手都產(chǎn)生新的密鑰、MAC密鑰和IV,并將這些參數(shù)作為當(dāng)前連接狀態(tài)中的元素。,SSL握手協(xié)議消息,握手消息共有10種,除了Finished消息外,所有其他握手消息都以明文傳送。,建立一

19、個(gè)新會(huì)話的握手過(guò)程,建立一個(gè)新會(huì)話的握手過(guò)程(續(xù)),SSL握手協(xié)議本質(zhì)上是一個(gè)密鑰交換協(xié)議。密鑰交換最多用到5條消息:ServerCertificate、ServerKeyExchange、ClientCertificate、ClientKeyExchange和CertificateVerify。實(shí)際上,不同的握手過(guò)程蘊(yùn)含了SSL的3種驗(yàn)證模式:1)客戶和服務(wù)器都被驗(yàn)證;2)只驗(yàn)證服務(wù)器,不驗(yàn)證客戶,這是目前應(yīng)用最廣的模式;3

20、)客戶和服務(wù)器都不被驗(yàn)證,也成為完全匿名模式(SSL不鼓勵(lì),甚至反對(duì)使用該模式)。,Hello消息中的Cipher Suite,包括一個(gè)密鑰交換算法和一個(gè)CipherSpec。Data Encryption: AESRC2-40RC4-128DES DES 403DESIDEAFortezzaMessage Digest: MD5SHA,Key Exchange. RSA Fixed Diffie-Hellm

21、an Ephemeral Diffie-Hellman Anonymous Diffie-Hellman FortezzaData Compression: PKZipWinZip gzip StuffIt,Server key exchange 消息,服務(wù)器在3種情況下發(fā)送該消息,向客戶提供cipher suite中指定的密鑰交換算法的臨時(shí)公開密鑰:1)服務(wù)器沒(méi)有證書2)服務(wù)器有證書,但只用于簽名3)使用了For

22、tezza_dms密鑰交換算法服務(wù)器可以對(duì)發(fā)送的臨時(shí)公開密鑰進(jìn)行簽名。,Client key exchange 消息,根據(jù)密鑰交換算法的不同,該消息分為3類:1)RSA Encrypted Pre_master_secret:當(dāng)使用RSA密鑰交換算法時(shí),客戶產(chǎn)生48字節(jié)的Pre_master_secret,用服務(wù)器證書中的公鑰或Server key exchange中給出的臨時(shí)RSA公鑰加密,然后發(fā)送給服務(wù)器。2)Fortezza

23、密鑰交換消息:略。,Client key exchange 消息(續(xù)),3)Client Diffie-Hellman Public Value:當(dāng)使用D-H算法時(shí),客戶端通過(guò)該消息發(fā)送其公開密鑰(Public value)。當(dāng)使用D-H時(shí),雙方產(chǎn)生的秘密值被用作 pre-master-secret,因此在每次建立會(huì)話時(shí),對(duì)于使用固定D-H的場(chǎng)合,pre-master-secret總是相同。有鑒于此,SSL規(guī)定必須先通過(guò) pre-m

24、aster-secret生成 master-secret ,再通過(guò) master-secret 生成最終的會(huì)話密鑰。,Finished消息,Finished消息總是在ChangeCipherSpec消息之后立即發(fā)送,用于證實(shí)密鑰交換和驗(yàn)證過(guò)程的成功。該消息是第一個(gè)應(yīng)用剛剛協(xié)商成功的加密算法和密鑰加密的消息。如果客戶或服務(wù)器在驗(yàn)證Finished消息的正確性時(shí)沒(méi)有通過(guò),則終止當(dāng)前握手;如果都成功,就可以開始傳送保密數(shù)據(jù)。,Finish

25、ed消息(續(xù)),該消息的散列計(jì)算方法如下(以SHA為例):SHA_Hash=SHA( master_secret+pad2+SHA(handshake_messages+Sender+master_secret+pad1) )其中 Sender 是發(fā)送方標(biāo)識(shí)、pad1和pad2是兩個(gè)固定的常量、handshake_messages 是除Finished之外,從 Client Hello 開始的所有消息。,建立新會(huì)話時(shí)的密鑰導(dǎo)出

26、過(guò)程,建立新會(huì)話時(shí)的密鑰導(dǎo)出過(guò)程(續(xù)),Master_secret =MD5( pre_master_secret+SHA(‘A’+pre_master_secret+ClientHello.random+ServerHello.random) ) + MD5( pre_master_secret+SHA(‘BB’+pre_master_secret+ClientHello.random+ServerHello.random

27、) ) + MD5( pre_master_secret+SHA(‘CCC’+pre_master_secret+ClientHello.random+ServerHello.random) ),建立新會(huì)話時(shí)的密鑰導(dǎo)出過(guò)程(續(xù)),Keyblock =MD5( master_secret+SHA(‘A’+master_secret+ClientHello.random+ServerHello.random) ) + MD5

28、( master_secret+SHA(‘BB’+master_secret+ClientHello.random+ServerHello.random) ) + MD5( master_secret+SHA(‘CCC’+master_secret+ClientHello.random+ServerHello.random) )+[……] //直到產(chǎn)生足夠生成6個(gè)參數(shù)的位數(shù)為止最終從 keyblock 截取出 c

29、lient write MAC secret、server write MAC secret、client write key、server write key、 client write IV 和 server write IV。,重用SSL會(huì)話的握手過(guò)程,重用SSL會(huì)話的握手過(guò)程(續(xù)),當(dāng)通過(guò)恢復(fù)一個(gè)會(huì)話建立連接時(shí),這一新的連接繼承這個(gè)會(huì)話狀態(tài)下的壓縮算法、Cipher Spec 和master_secret。但該連接產(chǎn)生新的Cl

30、ientHello.random和ServerHello.random,二者和當(dāng)前會(huì)話的master_secret用來(lái)生成該連接使用的新密鑰、MAC密鑰和IVs。,4、Change Cipher Spec協(xié)議,該協(xié)議只有一條消息:Change Cipher Spec消息,其作用是標(biāo)志加密策略的改變??蛻艉头?wù)器都發(fā)送此消息,通知接受方,在該消息之后發(fā)送的消息將采用握手層剛剛協(xié)商成功的算法、密鑰進(jìn)行壓縮、MAC計(jì)算和加密操作。Chan

31、ge cipher spec消息的接收方令記錄層將預(yù)備讀狀態(tài)復(fù)制到當(dāng)前讀狀態(tài);該消息的發(fā)送方令記錄層將預(yù)備寫狀態(tài)復(fù)制到當(dāng)前寫狀態(tài)。Change Cipher Spec消息只有1個(gè)字節(jié),值為1。,5、Alert協(xié)議,Alert協(xié)議包括若干個(gè)報(bào)警(alert)消息。報(bào)警消息的作用是,當(dāng)握手過(guò)程或數(shù)據(jù)加密等操作出錯(cuò)或發(fā)生異常時(shí),報(bào)警或終止當(dāng)前連接。根據(jù)錯(cuò)誤的嚴(yán)重程度,報(bào)警消息分為“警告性”消息和“致命性”消息:致命性報(bào)警消息導(dǎo)致立即終

32、止當(dāng)前連接,并將與這個(gè)連接相關(guān)的會(huì)話的Session_id作廢,以免這個(gè)會(huì)話被繼續(xù)用于建立新的連接。,Alert協(xié)議(續(xù)),SSL共有12 類報(bào)警消息,都是加密傳輸?shù)?。根?jù)功能的不能,可以把它們分成兩類:close_notify消息和error alerts消息。Alert 消息的結(jié)構(gòu)是:,Alert協(xié)議(續(xù)),Close_notify消息通知接收方,發(fā)送方不再在當(dāng)前的連接上發(fā)送消息。客戶端和服務(wù)器端都通過(guò)發(fā)送該消息結(jié)束當(dāng)前連接

33、。如果一個(gè)連接不是通過(guò)發(fā)送close_notify終止的,則相關(guān)的會(huì)話不可恢復(fù)。Error_alerts消息檢測(cè)到錯(cuò)誤的一方向?qū)Ψ桨l(fā)送Error alerts消息。一旦發(fā)送或接收致命error alerts消息,客戶和服務(wù)器立即終止當(dāng)前連接,并忘掉該連接的密鑰、MAC密鑰以及與該連接相關(guān)的Session_id。共有11種error alerts消息(如unexpect_message、bad_record_mac等)。,一次真

34、實(shí)的連接,Client,Server,6、SSL記錄協(xié)議,記錄層協(xié)議的功能是:根據(jù)當(dāng)前會(huì)話狀態(tài)指定的壓縮算法、CipherSpec,以及連接狀態(tài)中指定的客戶和服務(wù)器隨機(jī)數(shù)、加密密鑰、MAC密鑰、IVs、消息序號(hào)等,對(duì)當(dāng)前連接中要傳送的高層數(shù)據(jù)進(jìn)行壓縮和解壓縮、加解密、計(jì)算與校驗(yàn)MAC等操作。記錄層協(xié)議要封裝的高層協(xié)議主要有4類:1)Change cipher spec 協(xié)議;2)Alert 協(xié)議;3)握手協(xié)議;4)應(yīng)用層協(xié)議,

35、如HTTP、FTP和Telnet 等。,各種協(xié)議協(xié)同工作,記錄層協(xié)議的工作流程,發(fā)送方記錄層協(xié)議的工作流程如下,記錄層協(xié)議的工作流程(續(xù)),1)從應(yīng)用層接受任意大小的數(shù)據(jù)塊,將數(shù)據(jù)塊分段成不超過(guò)214字節(jié)的明文記錄;2)用當(dāng)前會(huì)話狀態(tài)中指定的壓縮算法將明文結(jié)構(gòu)SSL Plaintext 變換為壓縮結(jié)構(gòu) SSL Compressed;3)用當(dāng)前CipherSpec中指定的MAC算法對(duì)SSL Compressed計(jì)算MAC;4)用加密

36、算法加密壓縮數(shù)據(jù)和MAC,形成SSL Ciphertext。,記錄層協(xié)議的工作流程(續(xù)),,SSL記錄協(xié)議中MAC計(jì)算(HMAC),,SSL記錄協(xié)議中的加密,SSL記錄協(xié)議的封裝,7、SSL的安全(1),SSL提供了什么SSL提供了通道級(jí)別的安全:連接的兩端知道所傳輸?shù)臄?shù)據(jù)是保密的,而且沒(méi)有被篡改。幾乎總是要對(duì)服務(wù)器進(jìn)行認(rèn)證??蛇x的客戶端認(rèn)證。針對(duì)異常情況的安全通知錯(cuò)誤警示。關(guān)閉連接。所有這些依賴于某些對(duì)系統(tǒng)的假定假定已

37、經(jīng)正確產(chǎn)生了密鑰數(shù)據(jù)并且該密鑰已被安全地保管。,SSL的安全(2),保護(hù)master_secret幾乎協(xié)議的所有安全都依賴于master_secret的保密;在內(nèi)存中保護(hù)秘密。保護(hù)服務(wù)器的私有密鑰最常被違反的規(guī)則,很難保證做到;要求安全地存儲(chǔ)私有密鑰多數(shù)實(shí)現(xiàn)都對(duì)磁盤上的私鑰進(jìn)行加密,而且提供口令保護(hù);其他實(shí)現(xiàn)在受保護(hù)的硬件中存儲(chǔ)密鑰。上述兩種方案在啟動(dòng)服務(wù)器時(shí)都要求管理員的介入,從而使得在系統(tǒng)崩潰或電力故障恢復(fù)時(shí)無(wú)法實(shí)現(xiàn)

38、無(wú)人看管的重新啟動(dòng)。使用良好的隨機(jī)數(shù)生成器,三、OpenSSL,,OpenSSL是什么?,一套密碼學(xué)工具箱,實(shí)現(xiàn)了SSLv2/v3、TLSv1以及與SSL/TLS相關(guān)的若干密碼標(biāo)準(zhǔn)不僅僅是SSL加密算法庫(kù)Hash算法庫(kù)數(shù)字簽名算法庫(kù)X.509證書處理庫(kù)CA工具庫(kù)SSL處理庫(kù)EVP算法封裝庫(kù)BIO抽象I/O封裝庫(kù)openssl工具包,OpenSSL包括些什么?,源代碼形如 openssl-0.9.7b.tar.gz

39、編譯后的版本C語(yǔ)言包含文件如#include 兩個(gè)動(dòng)態(tài)共享庫(kù)Win32下libeay32.dllssleay32.dllLinux/Unix/FreeBSD下libcrypto.solibssl.so可執(zhí)行文件openssl[.exe],OpenSSL命令行工具,The openssl program is a command line tool for using the various cryptograph

40、y functions of OpenSSL's crypto library from the shell. It can be used forCreation of RSA, DH and DSA key parametersCreation of X.509 certificates, CSRs and CRLsCalculation of Message DigestsEncryption and Decryp

41、tion with CiphersSSL/TLS Client and Server TestsHandling of S/MIME signed or encrypted mail,OpenSSL標(biāo)準(zhǔn)命令(1),Asn1parse - Parse an ASN.1 sequence. Ca - Certificate Authority (CA) Management. Ciphers - Cipher Suite Descr

42、iption Determination. Crl - Certificate Revocation List (CRL) Management. Crl2pkcs7 - CRL to PKCS#7 Conversion. Dgst - Message Digest Calculation. Dh - Diffie-Hellman Parameter Management. Obsoleted by dhparam. Dsa

43、- DSA Data Management.,OpenSSL標(biāo)準(zhǔn)命令(2),Dsaparam - DSA Parameter Generation. Enc - Encoding with Ciphers. Errstr - Error Number to Error String Conversion. Dhparam - Generation and Management of Diffie-Hellman Parameter

44、s. Gendh - Generation of Diffie-Hellman Parameters. Obsoleted by dhparam. Gendsa - Generation of DSA Parameters. Genrsa - Generation of RSA Parameters.,OpenSSL標(biāo)準(zhǔn)命令(3),Ocsp - Online Certificate Status Protocol utility.

45、 Passwd - Generation of hashed passwords. Pkcs7 - PKCS#7 Data Management. Rand - Generate pseudo-random bytes. Req - X.509 Certificate Signing Request (CSR) Management. Rsa - RSA Data Management. Rsautl - RSA utili

46、ty for signing, verification, encryption, and decryption.,OpenSSL標(biāo)準(zhǔn)命令(4),s_client - This implements a generic SSL/TLS client which can establish a transparent connection to a remote server speaking SSL/TLS. It's int

47、ended for testing purposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the OpenSSL ssl library.,OpenSSL標(biāo)準(zhǔn)命令(5),s_server - This implements a generic SSL/TLS

48、server which accepts connections from remote clients speaking SSL/TLS. It's intended for testing purposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the

49、 OpenSSL ssl library. It provides both an own command line oriented protocol for testing SSL functions and a simple HTTP response facility to emulate an SSL/TLS-aware webserver.,OpenSSL應(yīng)用程序接口,底層函數(shù)加密/解密大整數(shù)運(yùn)算、公開密鑰算法消息摘要

50、文件I/O、Sockets I/O、Memory I/OASN.1、PKCSEVP密碼算法封裝BIOI/O封裝SSLPEM,OpenSSL函數(shù)調(diào)用方法,直接調(diào)用相關(guān)函數(shù)如可以直接調(diào)用MD5、DES等算法實(shí)現(xiàn)的底層函數(shù)通過(guò)抽象接口類似于面向?qū)ο蟮亩鄳B(tài)EVPBIO,EVP系列,一系列封裝了openssl加密庫(kù)中所有加密算法的函數(shù),通過(guò)這樣的統(tǒng)一的封裝,使得只需要在初始化參數(shù)的時(shí)候做很少的改變,就可以使用相同的代碼但

51、采用不同的加密算法進(jìn)行數(shù)據(jù)的加密和解密。公開密碼算法EVP_Seal*...*,EVP_Open*...*數(shù)字簽名算法EVP_Sign*...*,EVP_Verify*...*對(duì)稱加密算法EVP_Encrypt*...*信息摘要算法EVP_Digest*...*信息編碼算法EVP_Encode*...*,EVP加密算法結(jié)構(gòu),typedef struct evp_cipher_st{int nid;int blo

52、ck_size;int key_len;int iv_len;unsigned long flags;int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc);int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigne

53、d char *in, unsigned int inl);int (*cleanup)(EVP_CIPHER_CTX *);int ctx_size;int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *);int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *);int (*ctrl)(EVP_CIPHER_

54、CTX *, int type, int arg, void *ptr); /* Miscellaneous operations */void *app_data;} EVP_CIPHER;,BIO簡(jiǎn)明指南(1),BIO在隱藏了不同類型I/O接口細(xì)節(jié)的一種應(yīng)用程序接口,通過(guò)BIO可以和SSL、非加密的網(wǎng)絡(luò)連接、文件、內(nèi)存等進(jìn)行透明的訪問(wèn)兩種不同類型的BIOsource/sink類型數(shù)據(jù)源/數(shù)據(jù)矢filter類型當(dāng)數(shù)據(jù)流

55、過(guò)filter類型BIO的過(guò)程中,可能進(jìn)行格式轉(zhuǎn)換改變內(nèi)容,也可能不改變內(nèi)容,而僅改變BIO的內(nèi)部狀態(tài)BIO可組織成鏈的形式一個(gè)source/sink類型,多個(gè)filter類型對(duì)比網(wǎng)絡(luò)協(xié)議層、STREAMS機(jī)制通常通過(guò)一指向BIO結(jié)構(gòu)的指針訪問(wèn)BIO接口,BIO簡(jiǎn)明指南(2),BIO的創(chuàng)建BIO* BIO_new(BIO_METHOD *type);int BIO_set(BIO* bio,BIO_METHOD *type

56、);示例:BIO* mem = BIO_new(BIO_s_mem());BIO的釋放int BIO_free(BIO* bio);void BIO_vfree(BIO* bio);void BIO_free_all(BIO* bio);,BIO簡(jiǎn)明指南(3),typedef struct bio_method_st{int type;const char *name;int (*bwrite)(BIO *, con

57、st char *, int);int (*bread)(BIO *, char *, int);int (*bputs)(BIO *, const char *);int (*bgets)(BIO *, char *, int);long (*ctrl)(BIO *, int, long, void *);int (*create)(BIO *);int (*destroy)(BIO *);long (*callback

58、_ctrl)(BIO *, int, bio_info_cb *);} BIO_METHOD;,BIO簡(jiǎn)明指南(4),static BIO_METHOD mem_method={BIO_TYPE_MEM,"memory buffer",mem_write,mem_read,mem_puts,mem_gets,mem_ctrl,mem_new,mem_free,NULL,};,BIO簡(jiǎn)明指南(

59、5) source/sink類型BIO,BIO_s_accept()是一個(gè)封裝了類似TCP/IP socket Accept規(guī)則的接口,并且使TCP/IP操作對(duì)于BIO接口是透明的BIO_s_connect()是一個(gè)封裝了類似TCP/IP socket Connect規(guī)則的接口,并且使TCP/IP操作對(duì)于BIO接口是透明的BIO_s_bio()封裝了一個(gè)BIO對(duì),數(shù)據(jù)從其中一個(gè)BIO寫入,從另外一個(gè)BIO讀出BIO_s_fd

60、()是一個(gè)封裝了文件描述符的BIO接口,提供類似文件讀寫操作的功能BIO_s_file()封裝了標(biāo)準(zhǔn)的文件接口的BIO,包括標(biāo)志的輸入輸出設(shè)備如stdin等BIO_s_mem()封裝了內(nèi)存操作的BIO接口,包括了對(duì)內(nèi)存的讀寫操作BIO_s_null()返回空的sink型BIO接口,寫入這種接口的所有數(shù)據(jù)讀被丟棄,讀的時(shí)候總是返回EOFBIO_s_socket()封裝了socket接口的BIO類型,BIO簡(jiǎn)明指南(6)

61、filter類型BIO,BIO_f_base64()封裝了base64編碼方法的BIO,寫的時(shí)候進(jìn)行編碼,讀的時(shí)候解碼BIO_f_buffer()封裝了緩沖區(qū)操作的BIO,寫入該接口的數(shù)據(jù)一般是準(zhǔn)備傳入下一個(gè)BIO接口的,從該接口讀出的數(shù)據(jù)一般也是從另一個(gè)BIO傳過(guò)來(lái)的。BIO_f_cipher()封裝了加解密方法的BIO,寫的時(shí)候加密,讀的時(shí)候解密BIO_f_md()封裝了信息摘要方法的BIO,通過(guò)該接口讀寫的數(shù)據(jù)都是已

62、經(jīng)經(jīng)過(guò)摘要的。BIO_f_null()一個(gè)不作任何事情的BIO,對(duì)它的操作都簡(jiǎn)單傳到下一個(gè)BIO去了,相當(dāng)于不存在。BIO_f_ssl()封裝了openssl 的SSL協(xié)議的BIO類型,也就是為SSL協(xié)議增加了一些BIO操作方法。,BIO簡(jiǎn)明指南(7) BIO基本操作,int BIO_read(BIO *b, void *data, int len);int BIO_gets(BIO *bp, char *buf, int s

63、ize);int BIO_write(BIO *b, const void *data, int len);int BIO_puts(BIO *bp,const char *buf);long BIO_ctrl(BIO *b, int cmd, long larg, void *parg);int BIO_reset(BIO *b);int BIO_seek(BIO *b, int ofs);int BIO_tell(BIO

64、 *b);int BIO_flush(BIO *b);int BIO_eof(BIO *b);int BIO_set_close(BIO *b,long flag);int BIO_get_close(BIO *b);,BIO簡(jiǎn)明指南(8) BIO鏈操作,BIO* BIO_push(BIO *b,BIO *append);BIO* BIO_pop(BIO *b);示例:假設(shè)md1、md2是digest類型的BIO,b64是

65、Base64類型的BIO,而f是file類型的BIOBIO_push(b64, f);將形成一條鏈b64-f再運(yùn)行BIO_push(md2, b64);BIO_push(md1, md2);就會(huì)形成一條md1-md2-b64-f的BIO鏈,小結(jié),1、一個(gè)簡(jiǎn)單的安全協(xié)議2、SSL協(xié)議3、OpenSSL主要參考書:《安全協(xié)議》,卿斯?jié)h編著,清華大學(xué)出版社《密碼編碼學(xué)與網(wǎng)絡(luò)安全-原理與實(shí)踐》(第四版)htt

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論