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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、了SSL絕大多數(shù)的核心功能握手密鑰交換雙向鑒別保密傳輸遺漏的部分不完整,不包括具體實現(xiàn)細節(jié)數(shù)據(jù)結(jié)構(gòu)定義每一字段大小使用何種算法涉及到數(shù)據(jù)結(jié)構(gòu)表示、翻譯等問題更重要的是缺少協(xié)商(negotiation)功能,二、SSL協(xié)議,1、SSL協(xié)議概述2、SSL的會話和連接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上兩臺機器間提供安全通道的協(xié)議,主要有兩項功能:保護傳輸數(shù)據(jù)(機密性和完整性);識別通信機器(認證性)。SSL協(xié)議的安全通道是透明的對傳輸?shù)臄?shù)據(jù)內(nèi)容上不加變更,僅作了加密;透明性使得幾乎所有基于TCP的協(xié)議稍加改動就可以在SSL上運行。,SSL的歷史,TLS:Transport Layer Security;TLSV1.0是一個Inter

10、net協(xié)議,完全建立在SSL V3的基礎(chǔ)上,又稱為SSLv3.1;RFC2246:The TLS Protocol Version 1.0Rfc3546:Transport Layer Security (TLS) Extensions,SSL在協(xié)議棧中的位置,在分層模型下,某層進行了加密,則上層協(xié)議都將自動被加密,網(wǎng)絡(luò)協(xié)議棧,TCP/IP協(xié)議報文封裝,在分層模型下,某層進行了加密,則上層協(xié)議都將自動被加密,,SSL的保護區(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、器,路由器,路由器,,,攻擊者,實際的報文傳輸物理路徑,利用SSL構(gòu)建的端到端的邏輯安全通道,利用WireShark抓包分析,SSL的體系結(jié)構(gòu),SSL由 Handshake、Change Cipher Spec、Alert 和 Record 這四個子協(xié)議組成,2、SSL連接和會話,連接(Connection):指一次提供適當(dāng)類型服務(wù)的傳送。會話(Session):由握手協(xié)議創(chuàng)建;定義了一組可以被多個連接共用的密碼安全參數(shù)。

13、連接 vs 會話在任意一對的雙方之間,也許會有多個安全連接;理論上,雙方可以存在多個同時會話,但在實踐中并未用到這個特性。,會話狀態(tài)參數(shù),(48字節(jié)),會話狀態(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的長度Uint8 key_material; //對稱加密密鑰的長度Uint8 IV_size; //IV的長度(CBC模式使用)} CipherSpec;,連接狀態(tài)參數(shù),上述狀態(tài)中的各種密鑰,SSL使用兩個相互獨立的密鑰,即Server write key和client write key,分別用于同一連接的兩個方向上的加解密,對于MAC操作

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

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

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

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

20、)客戶和服務(wù)器都不被驗證,也成為完全匿名模式(SSL不鼓勵,甚至反對使用該模式)。,Hello消息中的Cipher Suite,包括一個密鑰交換算法和一個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中指定的密鑰交換算法的臨時公開密鑰:1)服務(wù)器沒有證書2)服務(wù)器有證書,但只用于簽名3)使用了For

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

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

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

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

26、過程,建立新會話時的密鑰導(dǎo)出過程(續(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) ),建立新會話時的密鑰導(dǎo)出過程(續(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個參數(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會話的握手過程,重用SSL會話的握手過程(續(xù)),當(dāng)通過恢復(fù)一個會話建立連接時,這一新的連接繼承這個會話狀態(tài)下的壓縮算法、Cipher Spec 和master_secret。但該連接產(chǎn)生新的Cl

30、ientHello.random和ServerHello.random,二者和當(dāng)前會話的master_secret用來生成該連接使用的新密鑰、MAC密鑰和IVs。,4、Change Cipher Spec協(xié)議,該協(xié)議只有一條消息:Change Cipher Spec消息,其作用是標志加密策略的改變。客戶和服務(wù)器都發(fā)送此消息,通知接受方,在該消息之后發(fā)送的消息將采用握手層剛剛協(xié)商成功的算法、密鑰進行壓縮、MAC計算和加密操作。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個字節(jié),值為1。,5、Alert協(xié)議,Alert協(xié)議包括若干個報警(alert)消息。報警消息的作用是,當(dāng)握手過程或數(shù)據(jù)加密等操作出錯或發(fā)生異常時,報警或終止當(dāng)前連接。根據(jù)錯誤的嚴重程度,報警消息分為“警告性”消息和“致命性”消息:致命性報警消息導(dǎo)致立即終

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

33、。如果一個連接不是通過發(fā)送close_notify終止的,則相關(guān)的會話不可恢復(fù)。Error_alerts消息檢測到錯誤的一方向?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、實的連接,Client,Server,6、SSL記錄協(xié)議,記錄層協(xié)議的功能是:根據(jù)當(dāng)前會話狀態(tài)指定的壓縮算法、CipherSpec,以及連接狀態(tài)中指定的客戶和服務(wù)器隨機數(shù)、加密密鑰、MAC密鑰、IVs、消息序號等,對當(dāng)前連接中要傳送的高層數(shù)據(jù)進行壓縮和解壓縮、加解密、計算與校驗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ù)塊分段成不超過214字節(jié)的明文記錄;2)用當(dāng)前會話狀態(tài)中指定的壓縮算法將明文結(jié)構(gòu)SSL Plaintext 變換為壓縮結(jié)構(gòu) SSL Compressed;3)用當(dāng)前CipherSpec中指定的MAC算法對SSL Compressed計算MAC;4)用加密

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

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

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

39、編譯后的版本C語言包含文件如#include 兩個動態(tài)共享庫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標準命令(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標準命令(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標準命令(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標準命令(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標準命令(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ù)運算、公開密鑰算法消息摘要

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等算法實現(xiàn)的底層函數(shù)通過抽象接口類似于面向?qū)ο蟮亩鄳B(tài)EVPBIO,EVP系列,一系列封裝了openssl加密庫中所有加密算法的函數(shù),通過這樣的統(tǒng)一的封裝,使得只需要在初始化參數(shù)的時候做很少的改變,就可以使用相同的代碼但

51、采用不同的加密算法進行數(shù)據(jù)的加密和解密。公開密碼算法EVP_Seal*...*,EVP_Open*...*數(shù)字簽名算法EVP_Sign*...*,EVP_Verify*...*對稱加密算法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簡明指南(1),BIO在隱藏了不同類型I/O接口細節(jié)的一種應(yīng)用程序接口,通過BIO可以和SSL、非加密的網(wǎng)絡(luò)連接、文件、內(nèi)存等進行透明的訪問兩種不同類型的BIOsource/sink類型數(shù)據(jù)源/數(shù)據(jù)矢filter類型當(dāng)數(shù)據(jù)流

55、過filter類型BIO的過程中,可能進行格式轉(zhuǎn)換改變內(nèi)容,也可能不改變內(nèi)容,而僅改變BIO的內(nèi)部狀態(tài)BIO可組織成鏈的形式一個source/sink類型,多個filter類型對比網(wǎng)絡(luò)協(xié)議層、STREAMS機制通常通過一指向BIO結(jié)構(gòu)的指針訪問BIO接口,BIO簡明指南(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簡明指南(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簡明指南(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簡明指南(

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

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

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

62、經(jīng)經(jīng)過摘要的。BIO_f_null()一個不作任何事情的BIO,對它的操作都簡單傳到下一個BIO去了,相當(dāng)于不存在。BIO_f_ssl()封裝了openssl 的SSL協(xié)議的BIO類型,也就是為SSL協(xié)議增加了一些BIO操作方法。,BIO簡明指南(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簡明指南(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再運行BIO_push(md2, b64);BIO_push(md1, md2);就會形成一條md1-md2-b64-f的BIO鏈,小結(jié),1、一個簡單的安全協(xié)議2、SSL協(xié)議3、OpenSSL主要參考書:《安全協(xié)議》,卿斯?jié)h編著,清華大學(xué)出版社《密碼編碼學(xué)與網(wǎng)絡(luò)安全-原理與實踐》(第四版)htt

溫馨提示

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

評論

0/150

提交評論