

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一、一個簡單的安全協議,1、協議概述2、協議過程,一個簡單的安全協議,由于SSL協議的復雜性,為了更好地理解SSL,引入一個簡單的安全協議,該協議適合于交互式應用。該協議的主要目標:1、保證通信數據的機密性;2、保證通信數據的完整性;3、確保通信雙方身份的可靠性;4、不需為每個數據包都動用昂貴的公開密鑰操作,具有較高的效率。,協議過程,基本步驟(假設通信雙方為Alice、Bob):1、握手(Handshake)Alice
2、和Bob使用他們的證書和私鑰來對對方進行身份鑒別并交換共享密鑰(MS—Master secret)2、導出密鑰(Key derivation)Alice和Bob使用他們達成一致的共享密鑰(MS)導出一組用于保護將要傳輸的數據的密鑰(Session Key)3、數據傳輸(Data transfer)將要傳輸的數據分割成一系列的記錄,并對每條記錄加以保護4、關閉連接(Connection closure)使用特殊的、經過保護的關
3、閉消息,安全地關閉連接,協議過程—握手,握手階段(Handshake),單向鑒別(結束后雙方獲得主密鑰MS),聲稱的身份(Bob),掌握Bob的私鑰才能解密,從而完成身份證明,Alice產生主密鑰MS,并用Bob公鑰加密(挑戰(zhàn)),協議過程—握手(續(xù)),握手階段(Handshake),雙向鑒別(結束后雙方獲得主密鑰MS),Alice產生主密鑰MS,并用Bob公鑰加密(挑戰(zhàn)),再用自己私鑰簽名(證明自己),協議過程—導出密鑰,使用同一個密鑰
4、來完成不同類型的加密操作是糟糕的思想本協議在每個傳輸方向上可以采用兩個會話密鑰,分別用于加密和消息鑒別(MAC):會話密鑰可通過密鑰導出函數(Key Derivation Function,KDF)由 MS 和 nonce 導出;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”),協議過程—數據傳輸,數據記錄為實現數據傳輸的靈活性,必須對數據分塊(記錄)傳輸數據分塊后 MAC 如何處理,放最后嗎?解決方法:分塊后,每個記錄應該自帶 MAC記錄大小定長,不經濟理
6、想的應是變長記錄,每個記錄要加上長度字段記錄格式長度Mx + 數據D + MACMAC計算M=MAC(Mx,D),協議過程—數據傳輸(續(xù)),序號為對抗重放、刪除、重排攻擊,需要增加序號Sequence序號必須是 MAC 輸入的一部分可以放在記錄中在基于TCP的連接中,也可以使用隱含序號MAC的計算M=MAC(Mx, Sequence || D),協議過程—關閉連接,控制信息為防止攻擊者惡意切斷連接,需要有一種機制使
7、得Alice能告訴Bob(或反之),她已完成數據傳送兩種方法1、傳送長度為 0 的記錄2、在記錄中增加類型字段增加類型字段后的記錄格式長度Mx + 序號Sequence + 類型Type + 數據D + MAC類型為 0:普通數據類型為 1:結束記錄類型為其他:報告錯誤信息MAC的計算M=MAC(Mx, Sequence || Type || D),協議過程–完整圖示,Alice,Bob,協議小結,該簡單協議已經包含
8、了SSL絕大多數的核心功能握手密鑰交換雙向鑒別保密傳輸遺漏的部分不完整,不包括具體實現細節(jié)數據結構定義每一字段大小使用何種算法涉及到數據結構表示、翻譯等問題更重要的是缺少協商(negotiation)功能,二、SSL協議,1、SSL協議概述2、SSL的會話和連接3、SSL的握手協議4、SSL的Change Cipher Spec協議5、SSL的Alert協議6、SSL的記錄協議,1、SSL協議概述,SS
9、L:Secure Socket Layer (安全套接層)SSL是用于Internet上兩臺機器間提供安全通道的協議,主要有兩項功能:保護傳輸數據(機密性和完整性);識別通信機器(認證性)。SSL協議的安全通道是透明的對傳輸的數據內容上不加變更,僅作了加密;透明性使得幾乎所有基于TCP的協議稍加改動就可以在SSL上運行。,SSL的歷史,TLS:Transport Layer Security;TLSV1.0是一個Inter
10、net協議,完全建立在SSL V3的基礎上,又稱為SSLv3.1;RFC2246:The TLS Protocol Version 1.0Rfc3546:Transport Layer Security (TLS) Extensions,SSL在協議棧中的位置,在分層模型下,某層進行了加密,則上層協議都將自動被加密,網絡協議棧,TCP/IP協議報文封裝,在分層模型下,某層進行了加密,則上層協議都將自動被加密,,SSL的保護區(qū)域,S
11、SL協議的使用,用于Web的SSLhttps://secure.example.comhttps的端口:一般為 443;在SSL上構建一切ftps-data(989), ftps(990)nntps (563)pop3s(995)telnets(992)目前SSL的主要應用范圍是 http 協議。,,加密傳輸,,,WWW服務器,,,,HTTPs over SSL,,Internet,客戶瀏覽器(1, 2, …n),路由
12、器,路由器,路由器,,,攻擊者,實際的報文傳輸物理路徑,利用SSL構建的端到端的邏輯安全通道,利用WireShark抓包分析,SSL的體系結構,SSL由 Handshake、Change Cipher Spec、Alert 和 Record 這四個子協議組成,2、SSL連接和會話,連接(Connection):指一次提供適當類型服務的傳送。會話(Session):由握手協議創(chuàng)建;定義了一組可以被多個連接共用的密碼安全參數。
13、連接 vs 會話在任意一對的雙方之間,也許會有多個安全連接;理論上,雙方可以存在多個同時會話,但在實踐中并未用到這個特性。,會話狀態(tài)參數,(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)參數,上述狀態(tài)中的各種密鑰,SSL使用兩個相互獨立的密鑰,即Server write key和client write key,分別用于同一連接的兩個方向上的加解密,對于MAC操作
16、也一樣。各個密鑰的關系如下:,預備狀態(tài)和當前狀態(tài),SSL中定義了預備狀態(tài)(pending state)和當前狀態(tài)(current operating state):用這些狀態(tài)來協調客戶和服務器同時使用新的加密參數和密鑰。預備狀態(tài):包含本次握手過程中協商成功的各種算法和密鑰。當前狀態(tài):包含記錄層正在使用的各種算法和密鑰。此外,客戶和服務器都有各自獨立的讀狀態(tài)和寫狀態(tài)讀狀態(tài):包含解密、解壓縮、MAC驗證算法;解密密鑰。寫狀態(tài):
17、包含加密、壓縮、MAC生成算法;加密密鑰。,預備狀態(tài)和當前狀態(tài)(續(xù)),以上二者結合,SSL的每一端都包含預備讀、預備寫、當前讀、當前寫4個邏輯狀態(tài)??蛻?服務器通過Change cipher spec 消息進行狀態(tài)同步客戶/服務器收到change cipher spec后,會將預備讀狀態(tài)中的內容復制到當前讀狀態(tài);客戶/服務器發(fā)送change cipher spec后,會將預備寫狀態(tài)中的內容復制到當前寫狀態(tài)。,3、SSL握手協議,S
18、SL的握手協議層的功能是驗證實體身份,協商密鑰交換算法、壓縮算法和加密算法,完成密鑰交換以及密鑰導出等??蛻艉头掌鞯奈帐诌^程是指建立一個會話或恢復一個會話的過程。在這一過程中,客戶和服務器都建立新的會話的會話狀態(tài)或使用已經存在的會話的會話狀態(tài),但每次握手都產生新的密鑰、MAC密鑰和IV,并將這些參數作為當前連接狀態(tài)中的元素。,SSL握手協議消息,握手消息共有10種,除了Finished消息外,所有其他握手消息都以明文傳送。,建立一
19、個新會話的握手過程,建立一個新會話的握手過程(續(xù)),SSL握手協議本質上是一個密鑰交換協議。密鑰交換最多用到5條消息:ServerCertificate、ServerKeyExchange、ClientCertificate、ClientKeyExchange和CertificateVerify。實際上,不同的握手過程蘊含了SSL的3種驗證模式:1)客戶和服務器都被驗證;2)只驗證服務器,不驗證客戶,這是目前應用最廣的模式;3
20、)客戶和服務器都不被驗證,也成為完全匿名模式(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 消息,服務器在3種情況下發(fā)送該消息,向客戶提供cipher suite中指定的密鑰交換算法的臨時公開密鑰:1)服務器沒有證書2)服務器有證書,但只用于簽名3)使用了For
22、tezza_dms密鑰交換算法服務器可以對發(fā)送的臨時公開密鑰進行簽名。,Client key exchange 消息,根據密鑰交換算法的不同,該消息分為3類:1)RSA Encrypted Pre_master_secret:當使用RSA密鑰交換算法時,客戶產生48字節(jié)的Pre_master_secret,用服務器證書中的公鑰或Server key exchange中給出的臨時RSA公鑰加密,然后發(fā)送給服務器。2)Fortezza
23、密鑰交換消息:略。,Client key exchange 消息(續(xù)),3)Client Diffie-Hellman Public Value:當使用D-H算法時,客戶端通過該消息發(fā)送其公開密鑰(Public value)。當使用D-H時,雙方產生的秘密值被用作 pre-master-secret,因此在每次建立會話時,對于使用固定D-H的場合,pre-master-secret總是相同。有鑒于此,SSL規(guī)定必須先通過 pre-m
24、aster-secret生成 master-secret ,再通過 master-secret 生成最終的會話密鑰。,Finished消息,Finished消息總是在ChangeCipherSpec消息之后立即發(fā)送,用于證實密鑰交換和驗證過程的成功。該消息是第一個應用剛剛協商成功的加密算法和密鑰加密的消息。如果客戶或服務器在驗證Finished消息的正確性時沒有通過,則終止當前握手;如果都成功,就可以開始傳送保密數據。,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 開始的所有消息。,建立新會話時的密鑰導出
26、過程,建立新會話時的密鑰導出過程(續(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) ),建立新會話時的密鑰導出過程(續(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) )+[……] //直到產生足夠生成6個參數的位數為止最終從 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ù)),當通過恢復一個會話建立連接時,這一新的連接繼承這個會話狀態(tài)下的壓縮算法、Cipher Spec 和master_secret。但該連接產生新的Cl
30、ientHello.random和ServerHello.random,二者和當前會話的master_secret用來生成該連接使用的新密鑰、MAC密鑰和IVs。,4、Change Cipher Spec協議,該協議只有一條消息:Change Cipher Spec消息,其作用是標志加密策略的改變??蛻艉头掌鞫及l(fā)送此消息,通知接受方,在該消息之后發(fā)送的消息將采用握手層剛剛協商成功的算法、密鑰進行壓縮、MAC計算和加密操作。Chan
31、ge cipher spec消息的接收方令記錄層將預備讀狀態(tài)復制到當前讀狀態(tài);該消息的發(fā)送方令記錄層將預備寫狀態(tài)復制到當前寫狀態(tài)。Change Cipher Spec消息只有1個字節(jié),值為1。,5、Alert協議,Alert協議包括若干個報警(alert)消息。報警消息的作用是,當握手過程或數據加密等操作出錯或發(fā)生異常時,報警或終止當前連接。根據錯誤的嚴重程度,報警消息分為“警告性”消息和“致命性”消息:致命性報警消息導致立即終
32、止當前連接,并將與這個連接相關的會話的Session_id作廢,以免這個會話被繼續(xù)用于建立新的連接。,Alert協議(續(xù)),SSL共有12 類報警消息,都是加密傳輸的。根據功能的不能,可以把它們分成兩類:close_notify消息和error alerts消息。Alert 消息的結構是:,Alert協議(續(xù)),Close_notify消息通知接收方,發(fā)送方不再在當前的連接上發(fā)送消息??蛻舳撕头掌鞫硕纪ㄟ^發(fā)送該消息結束當前連接
33、。如果一個連接不是通過發(fā)送close_notify終止的,則相關的會話不可恢復。Error_alerts消息檢測到錯誤的一方向對方發(fā)送Error alerts消息。一旦發(fā)送或接收致命error alerts消息,客戶和服務器立即終止當前連接,并忘掉該連接的密鑰、MAC密鑰以及與該連接相關的Session_id。共有11種error alerts消息(如unexpect_message、bad_record_mac等)。,一次真
34、實的連接,Client,Server,6、SSL記錄協議,記錄層協議的功能是:根據當前會話狀態(tài)指定的壓縮算法、CipherSpec,以及連接狀態(tài)中指定的客戶和服務器隨機數、加密密鑰、MAC密鑰、IVs、消息序號等,對當前連接中要傳送的高層數據進行壓縮和解壓縮、加解密、計算與校驗MAC等操作。記錄層協議要封裝的高層協議主要有4類:1)Change cipher spec 協議;2)Alert 協議;3)握手協議;4)應用層協議,
35、如HTTP、FTP和Telnet 等。,各種協議協同工作,記錄層協議的工作流程,發(fā)送方記錄層協議的工作流程如下,記錄層協議的工作流程(續(xù)),1)從應用層接受任意大小的數據塊,將數據塊分段成不超過214字節(jié)的明文記錄;2)用當前會話狀態(tài)中指定的壓縮算法將明文結構SSL Plaintext 變換為壓縮結構 SSL Compressed;3)用當前CipherSpec中指定的MAC算法對SSL Compressed計算MAC;4)用加密
36、算法加密壓縮數據和MAC,形成SSL Ciphertext。,記錄層協議的工作流程(續(xù)),,SSL記錄協議中MAC計算(HMAC),,SSL記錄協議中的加密,SSL記錄協議的封裝,7、SSL的安全(1),SSL提供了什么SSL提供了通道級別的安全:連接的兩端知道所傳輸的數據是保密的,而且沒有被篡改。幾乎總是要對服務器進行認證??蛇x的客戶端認證。針對異常情況的安全通知錯誤警示。關閉連接。所有這些依賴于某些對系統(tǒng)的假定假定已
37、經正確產生了密鑰數據并且該密鑰已被安全地保管。,SSL的安全(2),保護master_secret幾乎協議的所有安全都依賴于master_secret的保密;在內存中保護秘密。保護服務器的私有密鑰最常被違反的規(guī)則,很難保證做到;要求安全地存儲私有密鑰多數實現都對磁盤上的私鑰進行加密,而且提供口令保護;其他實現在受保護的硬件中存儲密鑰。上述兩種方案在啟動服務器時都要求管理員的介入,從而使得在系統(tǒng)崩潰或電力故障恢復時無法實現
38、無人看管的重新啟動。使用良好的隨機數生成器,三、OpenSSL,,OpenSSL是什么?,一套密碼學工具箱,實現了SSLv2/v3、TLSv1以及與SSL/TLS相關的若干密碼標準不僅僅是SSL加密算法庫Hash算法庫數字簽名算法庫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應用程序接口,底層函數加密/解密大整數運算、公開密鑰算法消息摘要
50、文件I/O、Sockets I/O、Memory I/OASN.1、PKCSEVP密碼算法封裝BIOI/O封裝SSLPEM,OpenSSL函數調用方法,直接調用相關函數如可以直接調用MD5、DES等算法實現的底層函數通過抽象接口類似于面向對象的多態(tài)EVPBIO,EVP系列,一系列封裝了openssl加密庫中所有加密算法的函數,通過這樣的統(tǒng)一的封裝,使得只需要在初始化參數的時候做很少的改變,就可以使用相同的代碼但
51、采用不同的加密算法進行數據的加密和解密。公開密碼算法EVP_Seal*...*,EVP_Open*...*數字簽名算法EVP_Sign*...*,EVP_Verify*...*對稱加密算法EVP_Encrypt*...*信息摘要算法EVP_Digest*...*信息編碼算法EVP_Encode*...*,EVP加密算法結構,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é)的一種應用程序接口,通過BIO可以和SSL、非加密的網絡連接、文件、內存等進行透明的訪問兩種不同類型的BIOsource/sink類型數據源/數據矢filter類型當數據流
55、過filter類型BIO的過程中,可能進行格式轉換改變內容,也可能不改變內容,而僅改變BIO的內部狀態(tài)BIO可組織成鏈的形式一個source/sink類型,多個filter類型對比網絡協議層、STREAMS機制通常通過一指向BIO結構的指針訪問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對,數據從其中一個BIO寫入,從另外一個BIO讀出BIO_s_fd
60、()是一個封裝了文件描述符的BIO接口,提供類似文件讀寫操作的功能BIO_s_file()封裝了標準的文件接口的BIO,包括標志的輸入輸出設備如stdin等BIO_s_mem()封裝了內存操作的BIO接口,包括了對內存的讀寫操作BIO_s_null()返回空的sink型BIO接口,寫入這種接口的所有數據讀被丟棄,讀的時候總是返回EOFBIO_s_socket()封裝了socket接口的BIO類型,BIO簡明指南(6)
61、filter類型BIO,BIO_f_base64()封裝了base64編碼方法的BIO,寫的時候進行編碼,讀的時候解碼BIO_f_buffer()封裝了緩沖區(qū)操作的BIO,寫入該接口的數據一般是準備傳入下一個BIO接口的,從該接口讀出的數據一般也是從另一個BIO傳過來的。BIO_f_cipher()封裝了加解密方法的BIO,寫的時候加密,讀的時候解密BIO_f_md()封裝了信息摘要方法的BIO,通過該接口讀寫的數據都是已
62、經經過摘要的。BIO_f_null()一個不作任何事情的BIO,對它的操作都簡單傳到下一個BIO去了,相當于不存在。BIO_f_ssl()封裝了openssl 的SSL協議的BIO類型,也就是為SSL協議增加了一些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);示例:假設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鏈,小結,1、一個簡單的安全協議2、SSL協議3、OpenSSL主要參考書:《安全協議》,卿斯?jié)h編著,清華大學出版社《密碼編碼學與網絡安全-原理與實踐》(第四版)htt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息安全系統(tǒng)工程isse
- 安全系統(tǒng)工程(英)
- 安全系統(tǒng)工程試題
- 安全系統(tǒng)工程課件
- 信息安全系統(tǒng)工程公鑰密碼體制
- 信息安全系統(tǒng)工程密碼學基礎和古典加密
- 安全系統(tǒng)工程總復習
- 安全系統(tǒng)工程課后答案
- 《安全系統(tǒng)工程》ppt課件
- 《安全系統(tǒng)工程》試卷答案
- 安全系統(tǒng)工程課程設計
- 安全系統(tǒng)工程課后題答案
- 安全系統(tǒng)工程試題庫
- 安全系統(tǒng)工程課程設計
- 《安全系統(tǒng)工程》試卷.考研的
- 安全工程安全系統(tǒng)工程課程設計
- 安全系統(tǒng)工程的回顧與展望
- 安全系統(tǒng)工程_張景林++崔國...
- 安全系統(tǒng)工程復習題附答案
- 2019江蘇大學安全系統(tǒng)工程考試大綱
評論
0/150
提交評論