深度解析openssl加密算法

OpenSSL提供的功能相當(dāng)強(qiáng)大和全面,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協(xié)議,并提供了豐富的應(yīng)用程序供測(cè)試或其它目的使用。

深度解析openssl加密算法

1.對(duì)稱加密算法

OpenSSL一共提供了8種對(duì)稱加密算法,其中7種是分組加密算法,僅有的一種流加密算法是RC4。這7種分組加密算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長(zhǎng)度是128位,其它算法使用的則是64位。事實(shí)上,DES算法里面不僅僅是常用的DES算法,還支持三個(gè)密鑰和兩個(gè)密鑰3DES算法。

2.非對(duì)稱加密算法

OpenSSL一共實(shí)現(xiàn)了4種非對(duì)稱加密算法,包括DH算法、RSA算法、DSA算法和橢圓曲線算法(EC)。

DH算法一般用戶密鑰交換。

RSA算法既可以用于密鑰交換,也可以用于數(shù)字簽名。

DSA算法則一般只用于數(shù)字簽名。

3.信息摘要算法

OpenSSL實(shí)現(xiàn)了5種信息摘要算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事實(shí)上包括了SHA和SHA1兩種信息摘要算法,此外,OpenSSL還實(shí)現(xiàn)了DSS標(biāo)準(zhǔn)中規(guī)定的兩種信息摘要算法DSS和DSS1。

4.密鑰和證書管理

密鑰和證書管理是PKI的一個(gè)重要組成部分,OpenSSL為之提供了豐富的功能,支持多種標(biāo)準(zhǔn)。

首先,OpenSSL實(shí)現(xiàn)了ASN.1的證書和密鑰相關(guān)標(biāo)準(zhǔn),提供了對(duì)證書、公鑰、私鑰、證書請(qǐng)求以及CRL等數(shù)據(jù)對(duì)象的DER、PEM和BASE64的編解碼功能。OpenSSL提供了產(chǎn)生各種公開(kāi)密鑰對(duì)和對(duì)稱密鑰的方法、函數(shù)和應(yīng)用程序,同時(shí)提供了對(duì)公鑰和私鑰的DER編解碼功能。并實(shí)現(xiàn)了私鑰的PKCS#12和PKCS#8的編解碼功能。OpenSSL在標(biāo)準(zhǔn)中提供了對(duì)私鑰的加密保護(hù)功能,使得密鑰可以安全地進(jìn)行存儲(chǔ)和分發(fā)。

在此基礎(chǔ)上,OpenSSL實(shí)現(xiàn)了對(duì)證書的X.509標(biāo)準(zhǔn)編解碼、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。并提供了一種文本數(shù)據(jù)庫(kù),支持證書的管理功能,包括證書密鑰產(chǎn)生、請(qǐng)求產(chǎn)生、證書簽發(fā)、吊銷和驗(yàn)證等功能。

OpenSSL提供的CA應(yīng)用程序就是一個(gè)小型的證書管理中心(CA),實(shí)現(xiàn)了證書簽發(fā)的整個(gè)流程和證書管理的大部分機(jī)制。

5.SSL和TLS協(xié)議

OpenSSL實(shí)現(xiàn)了SSL協(xié)議的SSLv2和SSLv3,支持了其中絕大部分算法協(xié)議。OpenSSL也實(shí)現(xiàn)了TLSv1.0,TLS是SSLv3的標(biāo)準(zhǔn)化版,雖然區(qū)別不大,但畢竟有很多細(xì)節(jié)不盡相同。

雖然已經(jīng)有眾多的軟件實(shí)現(xiàn)了OpenSSL的功能,但是OpenSSL里面實(shí)現(xiàn)的SSL協(xié)議能夠?qū)SL協(xié)議有一個(gè)更加清楚的認(rèn)識(shí),因?yàn)橹辽俅嬖趦牲c(diǎn):一是OpenSSL實(shí)現(xiàn)的SSL協(xié)議是開(kāi)放源代碼的,可以追究SSL協(xié)議實(shí)現(xiàn)的每一個(gè)細(xì)節(jié);二是OpenSSL實(shí)現(xiàn)的SSL協(xié)議是純粹的SSL協(xié)議,沒(méi)有跟其它協(xié)議(如HTTP)協(xié)議結(jié)合在一起,澄清了SSL協(xié)議的本來(lái)面目。

6.應(yīng)用程序

OpenSSL的應(yīng)用程序已經(jīng)成為了OpenSSL重要的一個(gè)組成部分,其重要性恐怕是OpenSSL的開(kāi)發(fā)者開(kāi)始沒(méi)有想到的。現(xiàn)在OpenSSL的應(yīng)用中,很多都是基于OpenSSL的應(yīng)用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的應(yīng)用程序?qū)崿F(xiàn)的。OpenSSL的應(yīng)用程序是基于OpenSSL的密碼算法庫(kù)和SSL協(xié)議庫(kù)寫成的,所以也是一些非常好的OpenSSL的API使用范例。

OpenSSL的應(yīng)用程序提供了相對(duì)全面的功能,在相當(dāng)多的人看來(lái),OpenSSL已經(jīng)為自己做好了一切,不需要再做更多的開(kāi)發(fā)工作了,所以,他們也把這些應(yīng)用程序成為OpenSSL的指令。OpenSSL的應(yīng)用程序主要包括密鑰生成、證書管理、格式轉(zhuǎn)換、數(shù)據(jù)加密和簽名、SSL測(cè)試以及其它輔助配置功能。

7.Engine機(jī)制

Engine機(jī)制的出現(xiàn)是在OpenSSL的0.9.6版的事情,開(kāi)始的時(shí)候是將普通版本跟支持Engine的版本分開(kāi)的,到了OpenSSL的0.9.7版,Engine機(jī)制集成到了OpenSSL的內(nèi)核中,成為了OpenSSL不可缺少的一部分。 Engine機(jī)制目的是為了使OpenSSL能夠透明地使用第三方提供的軟件加密庫(kù)或者硬件加密設(shè)備進(jìn)行加密。OpenSSL的Engine機(jī)制成功地達(dá)到了這個(gè)目的,這使得OpenSSL已經(jīng)不僅僅使一個(gè)加密庫(kù),而是提供了一個(gè)通用地加密接口,能夠與絕大部分加密庫(kù)或者加密設(shè)備協(xié)調(diào)工作。當(dāng)然,要使特定加密庫(kù)或加密設(shè)備更OpenSSL協(xié)調(diào)工作,需要寫少量的接口代碼,但是這樣的工作量并不大,雖然還是需要一點(diǎn)密碼學(xué)的知識(shí)。Engine機(jī)制的功能跟Windows提供的CSP功能目標(biāo)是基本相同的。目前,OpenSSL的0.9.7版本支持的內(nèi)嵌第三方加密設(shè)備有8種,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬件加密設(shè)備?,F(xiàn)在還出現(xiàn)了支持PKCS#11接口的Engine接口,支持微軟CryptoAPI的接口也有人進(jìn)行開(kāi)發(fā)。當(dāng)然,所有上述Engine接口支持不一定很全面,比如,可能支持其中一兩種公開(kāi)密鑰算法。

8.輔助功能

BIO機(jī)制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內(nèi)存訪問(wèn)、文件訪問(wèn)以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復(fù)雜性也降低了很多。

OpenSSL對(duì)于隨機(jī)數(shù)的生成和管理也提供了一整套的解決方法和支持API函數(shù)。隨機(jī)數(shù)的好壞是決定一個(gè)密鑰是否安全的重要前提。

OpenSSL還提供了其它的一些輔助功能,如從口令生成密鑰的API,證書簽發(fā)和管理中的配置文件機(jī)制等等。