OpenSSL 詳細介紹
對稱加密算法
OpenSSL 一共提供了8 種對稱加密算法,其中7 種是分組加密算法,僅有的一種流加密算法是RC4。這7 種分組加密算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES 使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128 位,其它算法使用的則是64 位。事實上,DES 算法裏面不僅僅是常用的DES 算法,還支持三個密鑰和兩個密鑰3DES 算法。
雖然每種加密算法都定義了自己的接口函數,但是OpenSSL 還使用EVP 封裝了所有的對稱加密算法,使得各種對成加密算法能夠使用統一的API 接口EVP_Encrypt 和EVP_Decrypt 進行數據的加密和解密,大大提供了代碼的可重用性能。
非對稱加密算法
OpenSSL 一共實現了4 種非對稱加密算法,包括DH 算法、RSA 算法、DSA 算法和橢圓曲線算法(EC)。DH 算法一般用戶密鑰交換。RSA 算法既可以用於密鑰交換,也可以用於數字簽名,當然,如果你能夠忍受其緩慢的速度,那麼也可以用於數據加密。DSA 算法則一般只用於數字簽名。
跟對稱加密算法相似,OpenSSL 也使用EVP 技術對不同功能的非對稱加密算法進行封裝,提供了統一的API 接口。如果使用非對稱加密算法進行密鑰交換或者密鑰加密,則使用EVP_Seal 和EVP_Open 進行加密和解密;如果使用非對稱加密算法進行數字簽名,則使用EVP_Sign 和EVP_Verify 進行簽名和驗證。
信息摘要算法
OpenSSL 實現了5 種信息摘要算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA 算法事實上包括了SHA 和SHA1 兩種信息摘要算法,此外,OpenSSL 還實現了DSS 標準中規定的兩種信息摘要算法DSS 和DSS1。
OpenSSL 採用EVP_Digest 接口作爲信息摘要算法統一的EVP 接口,對所有信息摘要算法進行了封裝,提供了代碼的重用性。
密鑰和證書管理
密鑰和證書管理是PKI 的一個重要組成部分,OpenSSL 爲之提供了豐富的功能,支持多種標準。
首先,OpenSSL 實現了ASN.1 的證書和密鑰相關標準,提供了對證書、公鑰、私鑰、證書請求以及CRL 等數據對象的DER、PEM 和BASE64 的編解碼功能。OpenSSL 提供了產生各種公開密鑰對和對稱密鑰的方法、函數和應用程序,同時提供了對公鑰和私鑰的DER編解碼功能。並實現了私鑰的PKCS#12 和PKCS#8 的編解碼功能。OpenSSL 在標準中提供了對私鑰的加密保護功能,使得密鑰可以安全地進行存儲和分發。
在此基礎上,OpenSSL 實現了對證書的X.509 標準編解碼、PKCS#12 格式的編解碼以及PKCS#7 的編解碼功能。並提供了一種文本數據庫,支持證書的管理功能,包括證書密鑰產生、請求產生、證書籤發、吊銷和驗證等功能。
事實上,OpenSSL 提供的CA 應用程序就是一個小型的證書管理中心(CA),實現了證書籤發的整個流程和證書管理的大部分機制。
Engine 機制
Engine 機制的出現是在OpenSSL 的0.9.6 版的事情,開始的時候是將普通版本跟支持Engine 的版本分開的,到了OpenSSL 的0.9.7 版,Engine 機制集成到了OpenSSL 的內核中,成爲了OpenSSL 不可缺少的一部分。
Engine 機制目的是爲了使OpenSSL 能夠透明地使用第三方提供的軟件加密庫或者硬件加密設備進行加密。OpenSSL 的Engine 機制成功地達到了這個目的,這使得OpenSSL 已經不僅僅使一個加密庫,而是提供了一個通用地加密接口,能夠與絕大部分加密庫或者加密設備協調工作。當然,要使特定加密庫或加密設備更OpenSSL 協調工作,需要寫少量的接口代碼,但是這樣的工作量並不大,雖然還是需要一點密碼學的知識。Engine 機制的功能跟Windows 提供的CSP 功能目標是基本相同的。
BIO 機制
BIO 機制是OpenSSL 提供的一種高層
IO 接口,該接口封裝了幾乎所有類型的IO 接口,如內存訪問、文件訪問以及Socket 等。這使得代碼的重用性大幅度提高,OpenSSL 提供API 的複雜性也降低了很多。
OpenSSL 目錄及功能描述
目錄名 |
功能描述 |
Crypto |
存放OpenSSL 所有加密算法源碼文件和相關標註如X.509 源碼文件,是OpenSSL 中最重要的目錄,包含了OpenSSL 密碼算法庫的所有內容。 |
SSL |
存放OpenSSL 中SSL 協議各個版本和TLS 1.0 協議源碼文件,包含了OpenSSL 協議庫的所有內容。 |
Apps |
存放OpenSSL 中所有應用程序源碼文件,如CA、X509 等應用程序的源文件就存放在這裏。 |
Doc |
存放了OpenSSL 中所有的使用說明文檔,包含三個部分:應用程序說明文檔、加密算法庫API說明文檔以及SSL 協議API 說明文檔。 |
Demos |
存放了一些基於OpenSSL 的應用程序例子,這些例子一般都很簡單,演示怎麼使用OpenSSL其中的一個功能。 |
Include |
存放了使用OpenSSL 的庫時需要的頭文件。 |
Test |
存放了OpenSSL 自身功能測試程序的源碼文件 |
OpenSSL 算法目錄
openSSL 的算法目錄Crypto 目錄包含了OpenSSL 密碼算法庫的所有源代碼文件,是OpenSSL 中最重要的目錄之一。OpenSSL 的密碼算法庫包含了OpenSSL 中所有密碼算法、密鑰管理和證書管理相關標準的實現,在Windows 下編譯後的庫文件名爲libeay32.lib,在Linux 下編譯後生產的庫文件名爲libcrypto.a。Crypto 目錄下包含了衆多的子目錄,這些目錄大多數以相關的算法或標準名稱的簡寫命名。當然,並非所有這些目錄存放的源文件都是密碼算法和標準,有些是OpenSSL 本身的一些相關功能文件,如BIO、DSO 和EVP 等。
Crypto 子目錄列表
Aes |
對稱算法,美國新的對稱加密算法標準AES 算法源碼。 |
Bf |
對稱算法,Blowfish 對稱加密算法源碼。 |
Cast |
對稱算法,CAST 對稱加密算法源碼。 |
Des |
對稱算法,包括了DES 和3DES 對稱加密算法源碼。 |
Idea |
對稱算法,IDEA 對稱加密算法源碼。 |
Rc2 |
對稱算法,RC2 對稱加密算法源碼。 |
Rc4 |
對稱算法,RC4 對稱加密算法源碼 |
Rc5 |
對稱算法,RC5 對稱加密算法源碼。 |
Dh |
非對稱算法,DH 非對稱密鑰交換算法源碼。 |
Dsa |
非對稱算法,DSA 非對稱算法源碼,用於數字簽名。 |
Ec |
非對稱算法,EC 橢圓曲線算法源碼。 |
Rsa |
非對稱算法,RSA 非對稱加密算法源碼,既可以用於密鑰交換,也可以用於數字簽名。 |
Md2 |
信息摘要算法,MD2 信息摘要算法源碼。 |
Md5 |
信息摘要算法,MD5 信息摘要算法源碼。 |
Mdc2 |
信息摘要算法,MDC2 信息摘要算法源碼。 |
Sha |
信息摘要算法,SHA 信息摘要算法源碼,包括了SHA1 算法。 |
Ripemd |
信息摘要算法,RIPEMD-160 信息摘要算法源碼。 |
Comp |
數據壓縮算法數據壓縮算法的函數接口,目前沒有壓縮算法,只是定義了一些空的接口函數 |
Asn1 |
PKI 相關標準ASN.1 標準實現源碼,只實現了PKI 相關的部分,不是完全實現。包括DER 編解碼等功能。 |
Ocsp |
PKI 相關標準OCSP(在線證書服務協議)實現源碼。 |
Pem |
PKI 相關標準PEM 標準實現源碼,包括了PEM 的編解碼功能。 |
Pkcs7 |
PKI 相關標準PKCS#7 標準實現源碼。PKCS#7 是實現加密信息封裝的標準,包括了證書封裝的標準和加密數據的封裝標準。 |
Pkcs12 |
PKI 相關標準PKCS#12 標準實現源碼。包括了PKCS#12 文件的編解碼功能。PKCS#12是一種常用的證書和密鑰封裝格式。 |
X509 |
PKI 相關標準X.509 標準的實現源碼。包括了X.509 的編解碼功能,證書管理功能等。X509v3 PKI 相關標準X.509 第三版擴展功能的實現源碼。 |
Krb5 |
其它標準支持支持Kerberos 協議的一些接口函數和結構定義 |
Hmac |
其它標準支持HMAC 標準的支持結構和函數源源代碼。 |
Lhash |
其它標準支持動態HASH 表結構和函數源代碼 |
Bio |
自定義OpenSSL 自身定義的一種抽象IO 接口,封裝了各種平臺的幾乎所有IO 接口,如文件、內存、緩存、標準輸入輸出以及Socket 等等。 |
Bn |
自定義OpenSSL 實現大數管理的結構及其函數。 |
Buffer |
自定義OpenSSL 自定義的緩衝區結構體。 |
Conf |
自定義OpenSSL 自定義的管理配置結構和函數。 |
Dso |
自定義OpenSSL 自定義的加載動態庫的管理函數接口。如使用Engine 機制就用到了這些函數提供的功能。 |
Engine |
自定義OpenSSL 自定義的Engine 機制源代碼。Engine 機制運行OpenSSL 使用第三方提供的軟件密碼算法庫或者硬件加密設備進行數據加密等運算。相當於Windows 平臺的CSP 機制。 |
Err 自定義OpenSSL 自定義的錯誤信息處理機制。
Evp |
自定義OpenSSL 定義的一組高層算法封裝函數,包括了對稱加密算法封裝、非對稱加密算法封裝、簽名驗證算法封裝以及信息摘要算法封裝,類似 |
PKCS#11 提供的接口標準。
Objects |
自定義OpenSSL 管理各種數據對象的定義和函數。事實上,Objects 的OID 是根據ASN.1 的標準進行命名的,不完全是OpenSSL 自定義的結構。 |
Rand 自定義OpenSSL 的安全隨機數產生函數和管理函數。
Stack |
自定義定義了OpenSSL 中STACK 結構和相關管理函數。 |
Threads |
自定義OpenSSL 處理線程的一些機制。 |
Txt_db |
自定義OpenSSL 提供的文本證書庫的管理機制。 |
Ui |
自定義OpenSSL 定義的一下用戶接口交換函數。 |
Perlasm |
自定義編譯的時候需要用到的一些Perl 輔助配置文件。 |