openssl原始碼結構

來源:互聯網
上載者:User

openssl原始碼主要由eay庫、ssl庫、工具源碼、範例源碼以及測試源碼組成。


eay庫是基礎的庫函數,提供了很多功能。原始碼放在crypto目錄下。包括如下內容:


1) asn.1 DER編碼解碼(crypto/asn1目錄),它包含了基本asn1對象的編解碼以及數位憑證請求、數位憑證、CRL撤銷列表以及PKCS8等最基本的編解碼函數。這些函數主要通過宏來實現。


2) 抽象IO(BIO,crypto/bio目錄),本目錄下的函數對各種輸入輸出進行抽象,包括檔案、記憶體、標準輸入輸出、socket和SSL協議等。


3) 大數運算(crypto/bn目錄),本目錄下的檔案實現了各種大數運算。這些大數運算主要用於非對稱演算法中密鑰產生以及各種加解密操作。另外還為使用者提供了大量輔助函數,比如記憶體與大數之間的相互轉換。


4) 字元快取作業(crypto/buffer目錄)。


5) 設定檔讀取(crypto/conf目錄),openssl主要的設定檔為openssl.cnf。本目錄下的函數實現了對這種格式設定檔的讀取操作。


6) DSO(動態共用對象,crypto/dso目錄),本目錄下的檔案主要抽象了各種平台的動態庫載入函數,為使用者提供統一介面。


7) 硬體引擎(crypto/engine目錄),硬體引擎介面。使用者如果要寫自己的硬體引擎,必須實現它所規定的介面。


8) 錯誤處理(crypto/err目錄),當程式出現錯誤時,openssl能以堆棧的形式顯示各個錯誤。本目錄下只有基本的錯誤處理介面,具體的的錯誤資訊由各個模組提供。各個模組專門用於錯誤處理的檔案一般為*_err..c檔案。


9) 對稱演算法、非對稱演算法及摘要演算法封裝(crypto/evp目錄)。


10) HMAC(crypto/hmac目錄),實現了基於對稱演算法的MAC。


11) hash表(crypto/lhash目錄),實現了散列表資料結構。openssl中很多資料結構都是以散列表來存放的。比如配置資訊、ssl session和asn.1對象資訊等。


12) 數位憑證線上認證(crypto/ocsp目錄),實現了ocsp協議的編解碼以及認證有效性計算等功能。


13) PEM檔案格式處理(crypto/pem),用於產生和讀取各種PEM格式檔案,包括各種密鑰、數位憑證請求、數位憑證、PKCS7訊息和PKCS8訊息等。


14) pkcs7訊息文法(crypto/pkcs7目錄),主要實現了構造和解析PKCS7訊息;


15) pkcs12個人認證格式(crypto/pckcs12目錄),主要實現了pkcs12認證的構造和解析。


16) 隊列(crypto/pqueue目錄),實現了隊列資料結構,主要用於DTLS。


17) 隨機數(crypto/rand目錄),實現了偽隨機數產生,支援使用者自訂隨機數產生。


18) 堆棧(crypto/stack目錄),實現了堆棧資料結構。


19) 線程支援(crypto/threads),openssl支援多線程,但是使用者必須實現相關介面。


20) 文本資料庫(crypto/txt_db目錄)。


21) x509數位憑證(crypto/x509目錄和crypto/x509v3),包括數位憑證申請、數位憑證和CRL的構造、解析和簽名驗證等功能了;


22) 對稱演算法(crypto/aes、crypto/bf、crypto/cast、ccrypto/omp和crypto/des等目錄)。


23) 非對稱演算法(crypto/dh、crypto/dsa、crypto/ec和crypto/ecdh)。


24) 摘要演算法(crypto/md2、crypto/md4、crypto/md5和crypto/sha)以及金鑰交換/認證演算法(crypto/dh 和crypto/krb5)。


ssl庫所有原始碼在ssl目錄下,包括了sslv2、sslv3、tlsv1和DTLS的原始碼。各個版本基本上都有用戶端源碼(*_clnt.c)、服務源碼(*_srvr.c)、通用源碼(*_both.c)、底層包源碼(*_pkt.c)、方法源碼(*_meth.c)以及協議相關的各種密鑰計算源碼(*_enc.c)等,都很有規律。


工具源碼主要在crypto/apps目錄下,預設編譯時間只編譯成openssl(windows下為openssl.exe)可執行檔。該命令包含了各種命令工具。此目錄下的各個源碼可以單獨進行編譯。


範例源碼在demo目錄下,另外engines目錄給出了openssl支援的幾種硬體的engines源碼,也可以作為engine編寫參考。


測試源碼主要在test目錄下。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

SSL是Secure Socket Layer(安全套接層協議)的縮寫,目標是保證兩個應用間通訊的保密性和可靠性,可在伺服器端和使用者端同時實現支援。改協議能使使用者/伺服器應用之間的通訊不被攻擊者竊聽,並且始終對伺服器進行認證,還可選擇對使用者進行認證。 

OpenSSL整個軟體包大概可以分成三個主要的功能部分:密碼演算法庫、SSL協議庫以及應用程式。OpenSSL的目錄結構自然也是圍繞這三個功能部分進行規劃的。 

密碼編譯演算法:對稱式加密 非對稱式加密 資訊摘要演算法 密鑰和協議管理 SSL和TSL協議 

對稱演算法使用一個密鑰。給定一個明文和一個密鑰,加密產生密文,其長度和明文大致相同。解密時,使用密鑰與加密金鑰相同。 


對稱演算法主要有四種加密模式: 


(1) 電子密碼本模式 Electronic Code Book(ECB) 


這種模式是最早採用和最簡單的模式,它將加密的資料分成若干組,每組的大小跟加密金鑰長度相同,然後每組都用相同的密鑰進行加密。 


其缺點是:電子編碼薄模式用一個祕密金鑰加密訊息的所有塊,如果原訊息中重複明文塊,則加密訊息中的相應密文塊也會重複,因此,電子編碼薄模式適於加密小訊息。 


(2)加密塊鏈模式 Cipher Block Chaining(CBC) 


CBC模式的加密首先也是將明文分成固定長度的塊,然後將前面一個加密塊輸出的密文與下一個要加密的明文塊進行異或操作,將計算結果再用密鑰進行加密得到密文。第一明文塊加密的時候,因為前面沒有加密的密文,所以需要一個初始化向量。跟ECB方式不一樣,通過串連關係,使得密文跟明文不再是一一對應的關係,破解起來更困難,而且克服了只要簡單調換密文塊可能達到目的的攻擊。 


(3)加密反饋模式 Cipher Feedback Mode(CFB) 


面向字元的應用程式的加密要使用流加密法,可以使用加密反饋模式。在此模式下,資料用更小的單元加密,如可以是8位,這個長度小於定義的塊長(通常是64位)。其加密步驟是: 


a) 使用64位的初始化向量。初始化向量放在移位寄存器中,在第一步加密,產生相應的64位初始化密文; b) 始化向量最左邊的8位與明文前8位進行異或運算,產生密文第一部分(假設為c),然後將c傳輸到接收方; 


c) 向量的位(即初始化向量所在的移位寄存器內容)左移8位,使移位寄存器最右邊的8位為不可預測的資料,在其中填入c的內容; d) 第1-3步,直到加密所有的明文單元。 


解密過程相反 


4)輸出反饋模式 Output Feedback Mode(OFB) 


輸出反饋模式與CFB相似,惟一差別是,CFB中密文填入加密過程下一階段,而在OFB中,初始化向量加密過程的輸入填入加密過程下一階段。 


摘要演算法是一種能產生特殊輸出格式的演算法,這種演算法的特點是:無論使用者輸入什麼長度的未經處理資料,經過計算後輸出的密文都是固定長度的,這種演算法的原理是根據一定的運算規則對原資料進行某種形式的提取,這種提取就是摘要,被摘要的資料內容與原資料有密切聯絡,只要原資料稍有改變,輸出的“摘要”便完全不同,因此,基於這種原理的演算法便能對資料完整性提供較為健全的保障。但是,由於輸出的密文是提取原資料經過處理的定長值,所以它已經不能還原為原資料,即訊息摘要演算法是無法復原的,理論上無法通過反向運算取得原資料內容,因此它通常只能被用來做資料完整性驗證。 


如今常用的“訊息摘要”演算法經曆了多年驗證發展而保留下來的演算法已經不多,這其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等。 


常用的摘要演算法主要有MD5和SHA1。D5的輸出結果為16位元組,sha1的輸出結果為20位元組。 


在公開金鑰密碼系統中,加密和解密使用的是不同的密鑰,這兩個密鑰之間存在著相互依存關係:即用其中任一個祕密金鑰加密的資訊只能用另一個密鑰進行解密。這使得通訊雙方無需事先交換密鑰就可進行保密通訊。其中加密金鑰和演算法是對外公開的,人人都可以通過這個祕密金鑰加密檔案然後發給收信者,這個加密金鑰又稱為公開金鑰;而收信者收到加密檔案後,它可以使用他的解密密鑰解密,這個密鑰是由他自己私人掌管的,並不需要分發,因此又成稱為私密金鑰 


應用程式:主要包括密鑰產生、認證管理、格式轉換、資料加密和簽名、SSL測試以及其它輔助配置功能。 

Engine機制目的是為了使OpenSSL能夠透明地使用第三方提供的軟體加密庫或者硬體加密裝置進行加密。 

BIO機制是OpenSSL提供的一種高層IO介面,該介面封裝了幾乎所有類型的IO介面,如記憶體訪問、檔案訪問以及Socket等。這使得代碼的重用性大幅度提高, 

OpenSSL對於隨機數的產生和管理也提供了一整套的解決方案和支援API函數。隨機數的好壞是決定一個密鑰是否安全的重要前提

轉自:http://hi.baidu.com/zeficie/blog/item/3a22440efdf5b8fe36d12235.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.