在linux下,我們經常可以看到一個叫做openssl-x.x.rpm的包,或許許多人猜想它和ssl有關,沒錯!但是遠不完全,openssl不但實現了ssl的一些接口,它所涵蓋的內容從底層對稱、非對稱加密算法的到建立在其上的PKCS(Public Key Infrastrature)的接口(包括X509證書、PKCS標准、ASN.1等)的實現是一應俱全,甚至還給了一個有關CA的例子。openssl這個包是由兩部分組成的:ssleay和openssl,它兩者的關系是,ssleay是一套接口庫,openssl是建立在這個庫接口之上的一個應用。時至今日,openssl也展到了0.95版,它的功能也越來越豐富。ssleay本身是一個跨平台的東西,主要是用標准C寫成的,支持Linux自不必說,其他大部分Unix和WINNT它都支持,對於做不同平台下有關信息安全的應用,ssleay自然是個不錯的選擇。現在我們就將openssl所完成的功能及其應用細細道來。
openssl包中的ssleay是整個包的核心,ssleay這個加密庫所涉及的范圍之廣、功能之齊全邏輯之合理、結構之復雜(這也能算優點?或許是仁者見仁、智者見智,復雜是說它包含的接口多,大約2000多個,而且功能上有重復,但是如果函數用熟了的話也會覺得方便),不能不讓人驚歎它的原作者Eric A. Young和Tim J. Hudson的厲害,呵呵。ssleay實現了常用的關於對稱加密的des、idea、rc2、rc4、rc5、blowfish、CAST;實現了非對稱算法中的RSA、DH、DSA。哈稀算法中的MD2、MD5、SHA、SHA-1、RIPEMD、MDC2。單從這些算法看來,已經可以用它來構建各種有關數據加密的應用了和PKCS接口了。更可貴的,它打破了美國的不允許強加密產品出口的限制。使用ssleay,我們完全可以替代微軟所提供的那套用來構件加密應用的低強度的加密庫,並且通過使用ssleay開發自己的應用,我們完全可以做到ssl的128甚至更高位數的數據加密。
ssleay將實現的加密算法有對稱、非對稱算法、哈稀算法。基本上常用的、標准的算法都包含在裡面了,如des,idea,md5,sha-1,rsa,dsa。同時,對同一算法的各個加密模式也基本上都同時予以實現,比如對des加密算法,它不但實現了塊加密模式的ECB(Electronic Codebook Mode)、CBC(Cipher Block Chaining Mode),還實現了流加密的CFB(Cipher Feedback Mode)、OFB(Output Feedback Mode)。這些算法基本上都是以獨立形式存在於openssl這個包所解開的源文件中,因此,如果我們在做自己的應用的時候如果,如果要用到有關加密、base64編碼、MD5等算法,完全可以將ssleay所提供的這一套方便摘取出來,直接利用這些現成的代碼來為我們自己的程序服務,其實這也是自由軟件思想所要推崇的一個方面,那就是代碼的重利用。
ssleay除過提供這些底層的有關加密算法的實現外,還實現了大部分PKCS(Public Key Cryptographic Standard)標准。PKCS是一套由RSA公司提出公開密鑰加密標准,主要作用是用來規范加密算法的處理,規范數字證書、數據封裝、數字簽名,以及個人私有信息保護的一些標准。ssleay對PKCS1(對RSA加密算法的描述)、PKCS3(Diffie-Hellmen Key Agreement)、PKCS5(基於口令進行加密的標准)、PKCS6(擴展證書語法標准)、PKCS7(加密信息表示的語法標准)、PKCS8(私鑰信息語法標准)、PKCS10(證書申請語法標准)、PKCS12(個人身份信息遷移語法標准)等。PKCS是用來構建PKI的。通過ssleay提供的PKCS的實現,我們可以方便的在有關PKI的應用裡做到標准數字證書的申請、簽發,個人信息(如證書、私鑰等)的安全又標准的存放,作到標准的、通用的數據加密、數據封撞、數據簽名信息格式。
從結構上看,ssleay是分為三層的,最底下為各種加密算法的實現,中間是加密算法的抽象接口,它對各種算法按對稱、非對稱、哈稀算法進行分類然後相應的給予一組簡單的接口。最上面是圍繞加密算法的PKCS的實現。ssleay不但實現了PKCS本身,還對采用ASN.1抽象描述PKCS提供了DER編碼的接口,讓這些抽象數據結構最終能夠變成在網絡上進行傳輸,在硬盤上能夠存儲的數據。
正如文章開始所說,ssleay也提供了對ssl的支持,它包含一組ssl的接口,允許我們使用它方便的建立起安全套接層,進行數據的安全傳輸。這裡再重復一遍,使用ssleay提供的這些接口,完全可以作到ssl連接中加密鑰匙的128位長度,只要你喜歡,192位都行。
在openssl的源程序編譯、安裝完之後,我們不但得到兩個有用的庫文件libcrypto.a和libssl.a,而且還包含一個使用這兩個庫所給的一個功能非常齊全的大的例子,也就是openssl可執行文件和其他的輔助文件,這個例子所完成的功能有鑰匙對的產生、證書的申請、證書的簽發、證書的吊銷、證書吊銷列表的處理、數據的加密、驗證等等。可以說,它本身就是一個CA的例子。唯一的缺點就是沒有有關這個程序使用方法的文檔,只能從程序打印出來的提示信息裡試著用。
上面所寫的只是一些總體介紹而已,事實上,openssl很復雜,如果相對程序有個透徹的了解,所要掌握的又有信息安全的知識也要比較豐富。從功能上講,openssl是我所見到的最全的一套接口,讓你覺得它是關於信息安全的一個集大成者,呵呵,有點吹噓了,只是為了形容一下而已。正因為ssleay有這麼強的功能並且開放源代碼,所以它被懷著各種各樣目的的人拿來用作自己的用途,openssl本身的license是Ssleay license和Openssl license的結合,而這兩種license實際上都是bsd類型的license.按照license裡面的說明,openssl可以被用做各種商業、非商業的用途,但是需要相應遵守一些協定,其實這都是為了保護自由軟件作者及其作品的權利。他人如果想要在ssleay上或openssl上做開發,就必須要遵守這兩個license。但是,現在吸自由軟件血的廠商還是大有人在,改頭換面、剽竊一番就成自己了。不過各位如果想要做和加密有關的東西,我的推薦仍然是--openssll.
- koun[bricks team] 供稿