密碼學專題 信息摘要和數字簽名指令

信息摘要

  • 區別于對稱加密和非對稱加密,信息摘要算數是一種不可逆的操作,無論輸入數據的大小輸出的數據長度是固定的
  • 信息摘要算數對輸入很敏感,即使數據變化很細微,輸出的結果會出現很大的差異
  • 從不同輸入得到相同的輸出的概率非常低,因此信息摘要算數用于驗證數據的完整性

數字簽名算法

  • 非對稱加密算法,實質是使用非對稱算法的私鑰對數據進行加密,使用公鑰對密文進行驗證
  • 數字簽名算法配合信息摘要算法的整體流程

  • ?OpenSSL目前支持的信息摘要算法包括SHA1、SHA、MD5、MD4、MD2、MDC2和RIPEMD160。OpenSSL對所有這些信息摘要算法都提供了單獨的同名指令,此外,還使用了統一的指令dgst集成了所有支持的信息摘要算法的操作
  • 因為信息摘要算法通常跟數字簽名一起使用,所以,在所有的信息摘要算法指令中,OpenSSL還支持使用RSA或者DSA密鑰對摘要信息進行數字簽名和驗證過程,也就是說,所有這些信息摘要指令都能夠完成上面介紹的數字簽名的流程和數字簽名驗證的流程,這對于實際的應用具有重大的意義。
  • 如表所示? 列出了OpenSSL支持的信息摘要指令。

  • ?dgst指令的格式和其他信息摘要算法指令的格式基本上是保持一致的,下面是使用sha1算法進行信息摘要操作的兩個指令:

  • ?如果你執行了上述兩條指令,會發現它們的輸出結果是一樣的,因為它們采用了相同的信息摘要算法SHA1。
  • 仔細比較還會發現,這兩個指令除了dgst多了一個選擇算法的選項外,其他選項也是一致的。
  • dgst指令跟其他單獨的信息摘要指令的不同之處還在于它支持使用DSA密鑰進行數字簽名和驗證操作。因為dgst和其他各種信息摘要算法的指令格式基本一致,所以在本章的介紹中,將以dgst指令為主線,在必要的時候給出其他信息摘要算法指令的說明。

dgst指令格式?

  • 其他信息摘要算法指令通用的格式

  • 上述指令中,dgst_cipher是OpenSSL支持的各種信息摘要算法的名稱,跟dgst指令中的dgst_cipher選項是基本一致的,但是在單獨指令中,不支持dss1指令的操作。我們如果要使用MD5信息摘要算法對一個文件進行信息摘要操作,則下面兩個指令是等價的:?

  • ?算法類型參數字段的數值不區分大小寫,sha等同于SHA
  • 從表還可以看出,摘要信息的位數一般都遠遠小于我們常用的公開密鑰算法的密鑰位數(1024),所以對摘要信息的簽名可以一次完成,與直接對原始文件簽名相比大大提高了簽名速度和驗證速度。

?指令選項說明

信息摘要算法選項

  • 對于dgst指令來說,可采用的信息摘要算法有8種,具體參數可以參考表。對于單獨的信息摘要算法來說,該選項是不存在的,因為其指令本身就已經限定了使用的信息摘要算法

輸出文件選項out

  • 輸出文件選項out指定了輸出信息的文件,輸出的信息包括摘要信息、驗證成功與否的信息及數字簽名信息等。輸出信息的格式根據使用的輸出格式選項的不一樣而不同。默認情況下使用的輸出文件是標準輸出設備,一般是當前指令行界面。

輸入文件選項files

  • 該選項一般放在各個選項的最后,直接輸入要進行信息摘要操作、數字簽名操作或者驗證簽名操作的文件即可。dgst指令和其他單獨的信息摘要指令在這里可以同時對多個文件進行信息摘要操作,但是對于數字簽名和簽名驗證操作則只能每次針對一個文件,否則就可能導致驗證失敗。需要注意的是,無論是進行信息摘要操作、數字簽名操作還是驗證簽名操作,這里輸入的都應該是原來的明文文件。在信息摘要操作和數字簽名操作中,該文件信息被用來作為信息摘要函數的輸入,得到的摘要信息被保存或者進一步經過私鑰簽名后保存;而在簽名驗證過程中,該文件信息也被作為信息摘要函數的輸入,其結果跟用公鑰解密的數字簽名信息進行對比,如果一致,則驗證通過,否則驗證就失敗。

數字簽名選項

  • dgst指令和其他單獨的信息摘要指令僅提供了一個跟簽名有關的選項sign,該選項的參數存儲了一個RSA或者DSA私鑰的文件。如果是RSA私鑰,那么說明將要使用的數字簽名算法是RSA算法,如果使用的是DSA私鑰,那么說明將要使用的算法是DSA數字簽名算法。DSA數字簽名算法只能在dgst指令中使用,并且要同時使用ds1作為算法選項參數。輸入私鑰的編碼格式由keyform選項指定,其格式可以是多種多樣的。

數字簽名驗證選項

  • dgst指令和其他單獨信息摘要指令提供了三個跟數字簽名驗證有關的選項signature、verify和prverify。signatrue指定了保存要進行驗證的簽名信息的文件,通常來說,為了正確驗證,應該是一個二進制編碼的文件,十六進制編碼的文件可能導致不能正確驗證。這需要在進行數字簽名的時候不使用hex選項。
  • verify選項跟prverify選項不能同時使用。使用verify選項表示將要輸入的用于驗證數字簽名的密鑰是一個公鑰;如果使用prverify選項,則表示將要輸入的文件保存的是一個私鑰,指令將從這個私鑰中讀取其公鑰參數進行數字簽名的驗證,之所以能夠這么做,是因為私鑰結構里面通常保存了所用公鑰參數。輸入密鑰的編碼格式由keyform選項決定。

輸入密鑰格式選項keyform

  • keyform選項告訴指令輸入用于簽名或者驗證的密鑰屬于什么編碼格式。目前來說,如果輸入的是私鑰(使用sign選項簽名或者prverify選項驗證的時候),支持的格式包括DER編碼格式、PEM編碼格式、PKCS#12編碼格式、Netscape編碼格式、舊版的ISSGC編碼格式及ENGINE密鑰格式。如果輸入的是公鑰(使用verify選項驗證的時候),則比私鑰少支持一種PKCS#12格式,這是因為PKCS#12格式一般用來封裝證書和私鑰,而不直接用于封裝公鑰。如果keyform指定的密鑰格式是ENGINE格式(-keyforme),那么輸入的密鑰文件的內容和意義需要根據具體Engine接口而定,可能只是一個特定的字符串ID,可能是一個公鑰,也可能是毫無用處的內容。

engine選項

  • engine選項指定了替代OpenSSL默認算法庫的Engine設備。對dgst指令和其他信息摘要算法指令來說,使用Engine選項可能會對幾個方面產生影響。首先是信息摘要算法,如果指定的Engine接口有效并且支持該選定的信息摘要算法,那么Engine設備里面的信息摘要算法就會被啟用。其次是數字簽名和驗證算法,如果指定Engine設備有效并且支持使用的數字簽名和驗證算法,那么Engine設備的數字簽名和驗證算法就會被啟用。第三個是隨機數產生及相關的操作,如果Engine設備支持隨機數產生和其他相關操作,那么這些Engine操作也會被啟用以替代OpenSSL本身的函數。

輸出格式選項

  • 為了看起來方便或者其他原因,可能需要對輸出的摘要信息和數字簽名信息做一些格式調整,比如將二進制格式轉換成十六進制等。OpenSSL提供了一些此類選項。hex選項可以將輸出的摘要信息或者簽名信息進行十六進制編碼后輸出,但是驗證的時候可能導致驗證失敗。c選項只有跟hex選項一起使用才有效,它在每個十六進制數據編碼之間增加一個分隔符“:”,這樣便于查看。默認的摘要信息和簽名信息是以二進制的形式輸出的,如果要顯式表示使用二進制輸出,可以使用binary選項。d選項使用后指令會將BIO讀取文件的操作信息打印出來,一般是為了調試的目的才會使用這個選項。

隨機數文件選項

  • 在dgst或其他信息摘要指令操作的過程中,有時候需要用到隨機數,那么同樣需要一個隨機數種子文件,這可以通過rand選項指定。事實上,在所有指令的rand選項中,指定的隨機數文件可以不止一個,而可以是多個,文件之間根據應用系統的不同采用不同的符號進行連接。比如Windows系統可以使用“;”作為連接符號,OpenVMS系統采用“,”作為連接符號,而其他系統則采用“:”作為連接符號。例如下面是Windows系統中使用多個隨機數文件的形式:

  • 如果不使用rand選項,指令會從其他可用資源獲取隨機數種子。

使用信息摘要指令進行數字簽名和驗證

  • 執行數字簽名

?有個問題,通過私鑰推導公鑰的時候并不知道 對私鑰加密使用的對稱加密算法的種類是啥,僅僅輸入了對稱密鑰是如何解密的呢??

驗證數字簽名?

?

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

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

相關文章

dataframe 篩選_Spark.DataFrame與Spark.ML簡介

本文是PySpark銷量預測系列第一篇,后面會陸續通過實戰案例詳細介紹PySpark銷量預測流程,包含特征工程、特征篩選、超參搜索、預測算法。在零售銷量預測領域,銷售小票數據動輒上千萬條,這個量級在單機版上進行數據分析/挖掘是非常困…

密碼學專題 證書和CA指令 證書和CA功能概述

為什么需要證書 實現了公鑰和私鑰的相互驗證,但是任何人都可以生成很多的密鑰對,密鑰對并沒有關聯實體身份,因此誕生可數字證書前提是CA是所有用戶都信任的用戶需要將自己的信息和公鑰交給CA進行認證生成一個屬于自己并被其與用戶認可的數字…

python怎么接外活_java和Python兩門語言,哪個適合接活單干?

謝邀。 根據知乎規矩:不說需求就挑語言的行為就是耍流氓。 如果接的活傾向于OA系統、管理系統之類的,建議是java,畢竟框架模板都很成熟,也比較好找,快速開發什么的在晚上搜一下,改改樣式就可以了。這些項目…

密碼學專題 證書和CA指令 申請證書|建立CA|CA操作|使用證書|驗證證書

Req指令介紹 功能概述和指令格式 req指令一般來說應該是提供給證書申請用戶的工具,用來生成證書請求以便交給CA驗證和簽發證書。但是,OpenSSL的req指令的功能遠比這樣的要求強大得多,它不僅可以生成RSA密鑰、DSA密鑰,以及將它們…

python語言編寫一個生成九宮格圖片的代碼_python實現圖片九宮格分割

大家都知道在微信朋友圈或者微博以及QQ動態中,有很多“強迫癥患者”發圖片都愛發9張,而有些圖是一張圖片分成的九宮圖,對于這種操作,大家知道是怎么做到的嗎? 本文就是用Python做的一個九宮格圖片生成器,是…

密碼學專題 OpenSSL標準轉換指令

概述 繁多復雜的各種文件編碼格式、證書格式和密鑰格式等。事實上,并非OpenSSL開發者想要將數字世界弄得如此令人頭疼,只是由于各種原因,數字世界存在各種不同的標準,為了盡量兼容這些不同的標準,OpenSSL開發者才相應…

java pakage、import關鍵字

package介紹 常用的包 import 案例

python數組初始化_Python Numpy 數組的初始化和基本操作

Python 是一種高級的,動態的,多泛型的編程語言。Python代碼很多時候看起來就像是偽代碼一樣,因此你可以使用很少的幾行可讀性很高的代碼來實現一個非常強大的想法。 一.基礎: Numpy的主要數據類型是ndarray,即多維數組…

密碼學專題 OpenSSL中SSL相關指令

再談SSL和OpenSSL 由于SSL協議已經是密碼學和PKI技術中非常具體的一個應用協議,為了實現它,OpenSSL在密碼學基礎應用和PKI技術的基礎實現上做了大量的工作,才逐漸形成和奠定了OpenSSL在密碼學應用和PKI技術開發中的重要基礎軟件包地位。Open…

python企業發放的獎金_你公司的年終獎發了嗎?

沒發, 被裁了. 跨境電商行業, 2017.7 入職,2018.11.19 下午接到裁員通知.. 人事找我聊了下,叫我一個星期之內走,補償1個月工資.... 我想想有點不對勁.. 于是我百度了下,5分鐘之后,提出了我的方案: 1、按照勞動法應該補償1.5個月,并且提前1月通知 2、補償2.5個月. 我立馬走. 最后…

使用MetaMask實現轉賬交易時附帶Input Data數據

進入如下頁面,點擊View Assert in Explorer進入Etherscan網站,就可以看到本賬戶先前所有的交易信息。 字段分析 Txn Hash 是交易的HashMethod:交易的類型,一般是兩種,如果是Transfer指定的是合約部署;如…

Ubuntu安裝Google瀏覽器

下載谷歌瀏覽器 直接使用Ubuntu自帶的火狐瀏覽器進行下載 默認下載到/tmp臨時文件夾里面,考慮到權限問題,需要將其移動到 Downloads文件夾下面使用命令 sudo mv ./goo(Tab)~/Down(Tab)使用命令行的方式進行下載 wget https://dl.g…

普通類創建獲取session 方式_猿蛻變11——一文搞懂mybatis花式使用方式

看過之前的蛻變系列文章,相信你對mybatis有了初步的認識。但是這些還不夠,我們今天進一步來了解下mybatis的一些用法。猿蛻變同樣是一個原創系列文章,幫助你從一個普通的小白,開始掌握一些行業內通用的框架技術知識以及鍛煉你對系…

Ubuntu配置IPFS的環境

參考鏈接 Ubuntu上IPFS環境搭建 - 簡書 下載安裝包 下載地址:https://dist.ipfs.io/#go-ipfs頁面會自動根據你的操作系統提供適合的下載安裝包,所以需要在Ubuntu環境下點開上面那個鏈接,網頁自動識別當前的平臺并提供對應的版本&#xff0c…

composer升級_Composer-命令簡介

簡介Composer 是一個用于 PHP 依賴管理的工具。它實現了讓你聲明項目所依賴的庫,并幫你完成安裝/更新過程。以下命令來自 composer version 1.8.0。翻譯使用【百度翻譯】。通過在命令窗口執行:composer或者:composer list得到 composer 的全部…

Ubuntu搭建聯盟鏈,實現節點之間數據同步

安裝go環境 從參考鏈接選擇Linux版本的go的安裝包 使用命令 mv go(Tab補全)/usr/local 移動go安裝包到/usr/local目錄下使用命令解壓 sudo tar -xvzf go(Tab補全) 配置環境 sudo gedit ~/.profile export PATH$PATH:/usr/local/go/bin激活生效 sou…

關于python語言的編程模式、哪個說法正確_測驗1: Python基本語法元素 (第1周) 單選題+程序題...

第1章測驗,共10道單選題和2道編程題,限答1次 單選題 1.Guido van Rossum正式對外發布Python版本的年份是: A.2002 B.1998 C.2008 D.1991 正確答案: D Python成功了,所以早年的開發歷史也受到關注,以下是Gui…

火狐瀏覽器添加MetaMask錢包和本地開啟私有鏈開發

火狐瀏覽器添加MetaMask錢包 因為對其配置了代理工具,所以直接使用谷歌引擎搜索MetaMask錢包即可第一次使用,立即開始設置 點擊我同意,進行密碼的創建 牢記助記詞,助記詞及其關鍵,將其存儲在安全的地方 區塊鏈-開發 M…