密碼學專題 OpenSSL專題

OpenSSL總體架構?

  • 軟件包分為三個主要的功能部分:密碼算法庫 、 SSL協議庫及應用程序

  • MacOS,MS,OS/2及 VMS這幾個目錄,包含了在不同的 平臺編譯時的環境變量配置文件,在安裝編譯完成之后,這幾個目錄就沒有作用了。
  • bugs,certs,perl,shlib,times,tools 及 utils 目錄都是一些輔助的目錄 , 里面包含文件對于我們使用 OpenSSL進行工作并沒有很多的幫助,所以可以不作深究。但是編譯的時候還是需要的
  • Crypto目錄是 OpenSSL所有密碼算法和一些 PKI相關標準源碼存放的目錄,也是 OpenSSL 最 重 要 的 一 個 目 錄 。
  • SSL 目 錄 是 SSL 協 議 各 個 版 本 的 實 現 源 碼 存 放 的 目 錄 。
  • Doc目錄是 OpenSSL使用的說明文檔存放的目錄,這個目錄對于 OpenSSL使用者來說具有 “芝麻開門”的作用。
  • Apps目錄存放了OpenSSL所有應用程序的源代碼文件,也是研 究 OpenSSL API 的 很 好 的 例 子 。
  • Demos 目 錄 就 是 一 些 樂 意 奉 獻 的 人 寫 的 OpenSSL 應 用 的例子,在你開始使用 OpenSSL進行工作之前,可以看看這個目錄,或許會有所幫助。
  • Include 目 錄 是 使 用 OpenSSL 的 庫 進 行 編 程 的 時 候 可 能 需 要 使 用 到 的 一 些 頭 文 件 。
  • Test 目錄是 OpenSSL一些自身功能測試源程序所在的地方。

注意事項

  • 如果在 Windows平臺下將 OpenSSL編譯成功后,還會增加三個新的目錄:Inc32, Out32dl,Tmp32dl。
  • Inc32目錄和Include目錄相似,存放的是 Windows平臺下使用 OpenSSL進行編程需要包含的頭文件。
  • Out32dl則存放了 OpenSSL編譯成功后的可執行應用程序、鏈接庫 LIB文件和動態 DLL 文件。
  • Tmp32dl則是在編譯過程中存放 OBJ等 臨時文件的目錄。

OpenSSL算法目錄

  • Crypto 目錄包含了OpenSSL密碼算法庫的所有源代碼文件, 是 OpenSSL中最重要的目錄之一。
  • OpenSSL的密碼算法庫包含了 OpenSSL中所有密碼算法、密鑰管理和證書管理相關標準的實現
  • 在 Windows下編程后的庫文件名為libeay32.lib, 在 Linux 下 編 譯后生成的庫文件名為 libcrypto.a。 Crypto目錄下包含了眾多的子目錄,這些子目錄大多數以相關的算法或標準名稱的簡寫命名。
  • 當然,并非所有這 些目錄存放的源文件都是密碼算法和標準,有些是 OpenSSL本身的一些相關功能文件, 如 BIO,DSO 和 EVP 等?

  • 對稱加密算法8種,非對稱加密算法4種,信息摘要算法5種。?

?openssl文檔目錄

  • OpenSSL的文檔使用Perl文檔格式保存,為 “.pod”文件,對于 Windows平臺的用戶,閱讀這樣的文檔可能存在一些麻煩,可以使用Perl工具pod2text或者pod2html 指令將文檔轉換成txt文本格式或者html格式以方便閱讀。
  • doc文檔涉及到 應用程序說明文檔、密碼算法庫 API文檔及SSL協議庫API文檔
  • 應用程序說明文檔目錄 (Apps)包含了大部分OpenSSL應用程序的使用和參數說明,并有部分例子。
  • 密碼算法庫API文檔 (Crypto)則包含了部分OpenSSL密碼算法庫的API的使用說明,可惜不是很全面。
  • SSL協議庫 API文檔包含了 OpenSSL實現的SSL協議和 TLS協議的大部分 API使用說明,該部分由于變動比較緩慢,所以文檔相對全面一些。此外, 目前版本的 OpenSSL文檔目錄下還有一個 Howto子目錄,現在只有一個文件,內容是關于證書的一些問題,希望后續的版本能夠豐富這個 Howto目錄。
  • OpenSSL文檔目錄的根目錄下還有個綜述性質的文檔 ssleay.txt 和 openssl.txt, 也是值得一看的 。

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),實現 了證書簽發的整個流程和證書管理的大部分機制。

SSL 和TLS 協議

  • 雖然已經有眾多的軟件實現了SSL的功能,但是OpenSSL里面實現的SSL協議能夠讓我們對SSL協議有一個更加清楚的認識,因為至少存在兩點:一是OpenSSL實現的SSL協議是開放源代碼的,我們可以研究SSL協議實現的每一個細節;二是OpenSSL實現的SSL協議是純粹的SSL協議,沒有跟其他協議(如HTTP)協議結合在一起。由于SSL協議現在經常跟HTTP協議在一起應用形成HTTPS協議,所以很多人誤認為SSL協議就是為了保護Web安全性的,這實在是一個很大的解!
  • OpenSSL實現了SSL協議的SSLv2和SSLv3,支持了其中絕大部分的算法協議。OpenSSL也實現了TLSv1.0,TLS是SSLv3的標準化版,雖然區別不大,但畢竟有很多細節不盡相同。OpenSSL除了提供使用SSL協議和TLS協議的API接口函數之外,還提供了兩個不錯的應用程序S_Client和S_Server。S_Client用來模擬SSL客戶端,可以用來測試SSL服務器,比如IIS和帶mod_ssl的Apache等;而S_Server模擬了一個SSL服務器,可以用來測試SSL客戶端,比如IE和Netscape等。事實上,由于是開放源代碼的,S_Client和S_Server程序的源代碼還是很好的OpenSSL的SSL接口API使用例子

應用程序

  • 現在OpenSSL的應用中,很多都是基于OpenSSL的應用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的應用程序實現的。OpenSSL的應用程序是基于OpenSSL的密碼算法庫和SSL協議庫寫成的,所以也是一些非常好的OpenSSL的API使用范例,
  • OpenSSL的應用程序主要包括密鑰生成、證書管理、格式轉換、數據加密和簽名、SSL測試,以及其他輔助配置功能。表4.4是OpenSSL-0.9.7版本的指令列表。在表4.4中,根據指令的性質,對指令進行了歸類,這些歸類不一定科學。
  • 這些類型包括:對稱密鑰指令、非對稱密鑰指令、信息摘要和簽名指令、證書簽發和管理指令、標準轉換指令、SSL測試指令及其他指令。

?

Engine機制

  • Engine機制的目的是為了使OpenSSL能夠透明地使用第三方提供的軟件加密庫或者硬件加密設備進行加密。?

  • 目前,OpenSSL的0.9.7版本支持的內嵌第三方加密設備有8種,包括:CryptoSwift,nCipher,Atala,Nuron,UBSEC,Aep,SureWare及IBM4758CCA的硬件加密設備。現在還出現了支持PKCS#11接口的Engine接口,支持微軟CryptoAPI的接口也有人進行開發。當然,所有上述Engine接口支持不一定很全面

?BIO機制

  • BIO機制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內存訪問、文件訪問及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供的API的復雜性也降低了很多。前面介紹的EVP封裝也提高了OpenSSL代碼的可重用性。

OpenSSL的應用

  • penSSL的應用一般可以分為兩種不同的方式:基于OpenSSL指令的應用和基于OpenSSL加密庫和協議庫的應用。前者更容易一些,而后者需要做的工作更多一些。當然,這些應用不一定是截然分開的,你當然可以兩種都用一點,比如使用SSL協議的API,但是證書可以使用OpenSSL的指令簽發。

參考鏈接

  • GitHub - openssl/openssl: TLS/SSL and crypto library
  • openssl/openssl - Sourcegraph

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446321.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 華氏溫度轉換為攝氏溫度

題目 小明要到美國旅游,可是那里的溫度是以華氏度為單位記錄的。 它需要一個程序將華氏溫度(80度)轉換為攝氏度,并以華氏度和攝氏度為單位分別顯示該溫度。 公式:華氏溫度(攝氏溫度-32)/1.8 M…

hs控什么意思_凡爾賽文學 到底是什么?

點擊藍字關注我們XIE XIE NI DE XI HUAN|| 動漫 情頭 耽美 閨蜜 男女頭 句子控 壁紙 ||左句 凡爾賽文學野象:老是有人提知不知道凡爾賽文學,說實話我不太清楚網絡時下流行的梗,也沒有興趣參與,我還是比較喜歡歐洲古典文學和后現…

密碼學專題 openssl編譯和安裝

Configure 腳本文件 使得OpenSSL可以適應多種不同的系統平臺和多達幾十種不同的編譯器。Configure指令還可以使OpenSSL在編譯的時候具備組件的選擇功能,比如可以選擇支持或者不支持某種算法或者協議等,這使得OpenSSL具有很大的靈活性,比如在…

Python學習12 文件的讀寫

目標 文件的打開和關閉 mode缺省情況下表示只讀r 文件的路徑 前面加個r’,代表其中的轉義字符不起作用 文件的打開方式 案例:實現文件拷貝的功能 將某一文件夾下的某一文件 保存在當前文件 所在目錄。 import os #讀取文件1 path./file.txt fileopen(path,…

密碼學專題 openssl的基本概念

配置文件 配置文件是OpenSSL的一個基礎結構組件,OpenSSL使用一組稱為OpenSSLCONF的函數來讀取OpenSSL配置文件的信息。OpenSSL提供的主配置文件是opensl.cnf,它集成了OpenSSL所要使用的配置文件選項的大部分內容。此外,OpenSSL還提供了其他一…

該工程中的宏被禁止_建筑勞務分包都能承擔什么工程

來源:找法網建筑工程的承包單位,也就是總承包單位可以將部分建造工程分包給具有資質的施工單位,這是法律所允許的,但是禁止將建造工程進行轉包。一、建筑勞務分包都能承擔什么工程建筑勞務分包能承擔什么工程要看分包單位的資質&a…

python實驗練習-類的多繼承

題目 1、概述: 完成學生,組長,教師的設計與實現。 2、具體實現內容: 學生: 姓名, 年齡, 學號 吃飯, 睡覺, 學習 組長: 姓名, 年齡, 學…

matlab用辛普森公式求積分_積分近似計算之辛普森公式

對于積分區間[a, b],若則成立辛普森公式辛普森公式可看作是改良的梯形公式。梯形公式是以直線逼近實際曲線,而辛普森公式則以二次曲線(即拋物線)逼近。以二次曲線逼近實際曲線根據辛普森公式可得各積分小區間內的積分值如下式所示:其中于是&a…

密碼學專題 文件編碼格式

OpenSSL中雖然使用PEM作為基本的文件編碼格式,但是,由于不同的對象其封裝的標準格式不太一樣,所以經常會導致讀者產生迷惑。此外,OpenSSL也支持DER編碼和過時的Netscape編碼格式(NET)OpenSSL的編碼是基于ASN.1標準的,A…

python實驗練習-圖書管理系統(使用文件來實現)

題目 功能描述: 圖書管理系統項目功能描述: (1)創建txt文本文檔,包含如下: ① books.txt:保存有一些書籍名稱; ② users.txt:用于保存用戶相關的信息; ③ us…

echarts 折線圖 設置y軸最小刻度_【硬貨】vue全家桶+Echarts+百度地圖,搭建數據可視化系統...

作者丨夙言來源丨前端大牛愛好者(Web-2017)https://segmentfault.com/a/1190000018993981本文章篇幅略長,內容有點多,大佬可根據目錄選擇性查閱,新人可一步步來閱讀。1、 前言1.1 業務場景突然接到產品說要做一個數據監控的系統。有線圖、柱狀…

密碼學專題 文本數據庫

應用概述 文本數據庫是跟OpenSSL的CA應用程序緊密結合在一起的,它以文本的方式記錄CA已經簽發的證書的狀態和摘要信息。這些狀態信息可以用于跟證書庫相關的一些操作,比如使用ca指令生成CRL主要就是讀取這個文本數據庫的信息作為參考。文本數據庫就是普…

Python學習13 異常處理機制

概括 常見的異常 異常處理機制 可以多個異常放在元組里面 一旦產生異常,try后面的語句不會繼續執行,會做異常處理 異常使用場景1 close應該放在finally中 異常使用場景2 finally關鍵字 會執行except后面的,報錯

java 布隆過濾器_牛逼哄哄的布隆過濾器,到底有什么用?

Java技術棧www.javastack.cn打開網站看更多優質文章作者:CodeBear的園子www.cnblogs.com/CodeBear/p/10911177.html本文是站在小白的角度去討論布隆過濾器,如果你是科班出身,或者比較聰明,又或者真正想完全搞懂布隆過濾器的可以移…

密碼學專題 序列號文件

序列號文件是ca指令簽發證書的時候的依據文件之一,它從該文件讀取當前簽發的證書的序列號并將序列號文件中的序列號加1,這樣,就可以確保證書的序論號是遞增的,不會重復。序列號文件也是一個文本文件,里面僅僅簡單包含了…

Java web后端6 java Bean EL表達式

EL表達式和JSTL概述 java Bean規范 java中成員變量使用類Integer private Integer count; java Bean的創建 創建java Bean: BookTest.java package com.example.elandjstl.bean;public class BookTest {//java中成員變量使用類Integerprivate Integer count;private Boolean…

python根須系統斜杠_深入淺出Python中的os模塊

「Author:Runsen」當初學Python的時候,把一些標準庫和第三方開源庫學的七零八落,不成系統,正好趁這個機會來系統的整理一下,先從Python常用的標準庫os開始吧。osOS模塊簡單的來說它是一個Python的系統編程的操作模塊&a…

密碼學專題 隨機數文件

無論使用OpenSSL的指令還是其API,隨機數文件都是會經常碰到的一個概念。大部分密碼算法的安全性都跟隨機數的好壞相關,所以一個成功的密碼學應用軟件,對隨機數的處理是不能隨便的。OpenSSL雖然沒有提供很完美的隨機數生成程序,但是…

Java web后端7JSTL

概括 下載jstl的jar包 官網&#xff1a;https://mvnrepository.com/ 網址1&#xff1a;https://search.maven.org/ 在pomxml中插入依賴&#xff1a; <dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1…

python輸入程序_python程序的輸入輸出(acm的幾個小程序)

#!/usr/bin/env python#codingutf-8 a[]for x inraw_input().split(): a.append(int(x))print sum(a) 下面的代碼只有一行&#xff0c;&#xff0c;可惜不是我想出來的&#xff01;&#xff01;&#xff01;&#xff01;&#xff1a; print sum(int(x) for x in raw_input().sp…