密碼學專題 非對稱加密算法指令概述 DSA算法指令

DSA算法和DSA指令概述

  • DSA算法是美國國家標準的數字簽名算法,只具備數字簽名的功能不具備密鑰交換的功能
  • 生成DSA參數然后生成DSA密鑰,DSA參數決定了DSA密鑰的長度
  • 三個指令
  • 首先是dsaparam指令,該指令主要用來生成DSA密鑰參數,并提供了一些格式轉換、C代碼生成等其他類似于dhparam指令的功能。一組DSA參數可以用來生成多個不同的DSA密鑰,而不是僅僅對應于一個DSA密鑰。
  • gendsa指令用來從現有的DSA參數中生成DSA密鑰,使用相同的DSA參數可以生成不同的DSA密鑰,不過這需要rand選項指定的隨機數種子文件配合
  • 同樣,為了提供一些可能需要的DSA密鑰管理功能,如格式轉換、保護口令更改等,OpenSSL提供了dsa指令
  • 為什么生成DSA密鑰參數跟生成DSA密鑰區分開來呢?首先,因為要使用一個DSA密鑰,必須預先共享其參數p、q和g;其次,因為生成一組DSA密鑰參數所耗費的時間比較多,而一組DSA密鑰參數可以用來生成許多組DSA密鑰,所以分開來就可以避免每次生成一對DSA密鑰都要重新生成DSA密鑰參數,耗費大量的時間。
  • OpenSSL沒有提供類似rsautl指令的專門DSA算法使用指令,但是可以在dgst指令中使用DSA算法和密鑰進行數字簽名和驗證的操作。這基本上滿足了DSA算法使用的要求。

生成和管理 DSA密鑰參數

  • dsaparam 用于生成和管理DSA密鑰參數,其功能和參數類似dhparam,使用dsaparam 生成的密鑰參數不僅僅可以用于生成不同的DSA密鑰,還可以用于生成DH密鑰參數

  • ?(2)輸入和輸出格式選項inform和outform? ? inform和outform選項指定了輸入DSA密鑰參數和輸出DSA密鑰參數或者DSA密鑰的編碼格式,目前支持的格式有PEM和DER兩種,默認的是PEM格式。
  • (3)輸入和輸出文件選項in和out? ?in選項指定了輸入文件名,一般來說,如果使用了in選項,表示是從已有的DSA密鑰參數中生成新的DSA密鑰或者對密鑰參數進行格式轉換等管理操作。如果要生成新的DSA密鑰參數或者利用新生成的密鑰參數生成DSA密鑰,那么一般不需要使用in選項。
  • out選項指定了輸出文件名,輸出的信息可能是DSA密鑰參數、DSA密鑰和text選項給出的明文解析信息。輸出的DSA密鑰參數和DSA密鑰的編碼格式由outform選項指定。如果輸出的是DSA密鑰,那么其形式是DSA私鑰的形式,但是包含了DSA公鑰參數
  • (4)engine選項? 如果使用了有效的Engine設備并提供該選項,而且在生成DSA密鑰參數的過程中執行的操作或者函數在Engine中支持,比如大數操作、隨機數生成及信息摘要函數等,那么就會采用Engine設備而不是OpenSSL默認的算法庫的函數進行實際的操作和運算。同樣,engine_id是一個簡短的描述型字符串,由Engine接口決定。
  • (5)C語言代碼輸出選項某些時候,我們可能需要將DSA密鑰參數寫入到C語言的代碼中去,OpenSSL提供了從一組DSA密鑰參數轉換成代碼的方法,就是在dsaparam指令中使用C選項。下面是使用dsaparam指令的C選項生成的一段DSA密鑰參數的C語言代碼。

  • ?(6)直接生成DSA密鑰選項genkey? ? 雖然dsaparam指令通常用來生成DSA密鑰參數,但是如果你想直接生成一個DSA密鑰而不是DSA密鑰參數,那么可以使用genkey選項。該選項使得輸出到out選項指定的輸出文件的是一個PEM編碼或者DER編碼的DSA私鑰。但是,該私鑰是沒有進行加密的,如果要安全地存放,必須使用下面將要介紹的dsa指令進行加密保存。使用該選項后,輸出的雖然只是一個DSA私鑰,但是私鑰結構里面已經包含了DSA公鑰的參數,所以,如果要得到相應的DSA公鑰,那么只要從這個DSA私鑰里面提取相應的參數就可以了,dsa指令可以幫助你從一個DSA私鑰得到相應的DSA公鑰。
  • (7)DSA密鑰參數長度選項numbits? ? ? DSA密鑰參數決定了用其產生的DSA密鑰的長度,一般來說,512位的DSA密鑰只能提供很短期的安全性能,所以一般建議使用1024位的DSA密鑰。
  • (8)其他選項rand選項跟其他指令同名選項一樣,指定了一個隨機數種子文件,默認情況下指令也會從其他可能的途徑自動獲取。text選項告訴指令輸出DSA密鑰參數的明文解析
  • 使用了text選項的 DSA 密鑰參數輸出結果

  • noout選項告訴指令不用輸出DSA密鑰參數或者DSA密鑰到out選項指定的文件或者標準輸出設備中(通常是指令行界面)。一般來說,在你想測試和查看DSA密鑰參數的時候,為了避免還要到相應的目錄中去刪除一個無意義的文件的時候會使用這個選項。?

生成DSA密鑰

  • ?(1)gendsa指令格式? ? DSA密鑰是在DSA密鑰參數的基礎上產生的,一對DSA密鑰可以包含三個部分:DSA密鑰參數(p、q和g)、DSA私鑰和DSA公鑰。DSA密鑰參數是公開的,甚至可以為一組網絡用戶所共享,即這組網絡用戶使用相同的DSA密鑰參數產生各自的DSA密鑰對。內部使用隨機數控制不同的用戶密鑰不是完全一樣的
  • dsaparam指令為我們生成了DSA密鑰參數,緊接著我們就要使用OpenSSL提供的gendsa指令生成真正要使用的DSA密鑰對。雖然說是密鑰對,但是gendsa指令只輸出DSA私鑰,這是因為DSA私鑰里面已經包含了DSA公鑰的所有參數,所以如果需要使用相應的DSA公鑰,那么可以通過DSA私鑰來獲得。dsa指令提供了從DSA私鑰輸出相應DSA公鑰的功能。
  • gendsa指令的格式如下:

  • (2)輸出文件選項out? ?out選項指定了保存生成的DSA密鑰的文件,如果沒有使用out選項,那么DSA密鑰將會輸出到標準輸出設備,一般就是當前指令行界面
  • 輸出密鑰的編碼格式OpenSSL沒有提供可以選擇的余地,只能是PEM編碼
  • (3)輸出DSA私鑰保護口令passout? ? 如果輸出的DSA私鑰是保存在文件里面,那么對私鑰進行加密保護就顯得非常必要。跟其他密鑰保護的方式一樣,OpenSSL提供了基于口令的加密保護方式。passout指定了獲取加密口令的源和方法,口令可以從指令參數、文件、環境變量等獲得。pasout選項只有在指定了DSA私鑰使用加密選項之后才會有效,否則該選項將被簡單忽略。
  • (4)密鑰加密算法選項對DSA私鑰進行保護的重要性我們已經反復強調多次,現在就不用說為什么了。加密算法選項指定了使用什么對稱加密算法來對DSA私鑰進行加密,可選的算法有6種:DES、DES3、IDEA、128位AES、192位AES和256位AES。這些算法使用的加密密鑰和初始變量都經過特定的算法從提供的口令中獲取。如果使用了上述加密算法選項之一但卻沒有使用pasout選項指定加密口令,那么指令會在指令行界面提示用戶輸入口令。如果沒有使用上述任意一種加密算法,那么對DSA密鑰將不會進行加密,這當然很危險!
  • (5)engine選項engine選項似乎緊緊跟隨每一個OpenSSL指令,在這里也不例外。在gendsa指令里使用engine選項指定有效的Engine之后,受影響最顯著的地方就是加密密鑰的算法,也就是說,如果加密的密鑰算法在指定的Engine接口中支持,那么指令就會調用Engine設備對DSA密鑰進行加密。其次,產生隨機數的操作也可能會在Engine設備中進行,只要Engine接口支持這些相應的操作。?
  • (6)DSA密鑰參數選項該選項指定用于生成DSA密鑰的DSA密鑰參數文件,DSA密鑰的長度就取決于文件里面的DSA密鑰參數。遺憾的是對于該文件的格式你沒有選擇,只有輸入PEM編碼的DSA密鑰參數才能夠正確運行gendsa指令。如果你擁有的是一個DER編碼的DSA密鑰參數,那么請使用dsaparam指令先將其轉換成PEM編碼的DSA密鑰參數。
  • (7)隨機數選項生成DSA密鑰的過程同樣需要隨機數的參與,既然有隨機數參與,我們就需要隨機數種子文件,rand選項一直就充當這樣的功能。當然,如果你不提供該文件,那么指令也會想辦法從其他可能的途徑獲取隨機數種子。在使用了Engine的情況下,甚至硬件設備有可能自己能夠支持產生隨機數種子的操作。

?管理DSA密鑰

  • 考慮到用戶后期對先前生成的DSA密鑰的要求的變化,提供dsa指令
  • dsa指令格式

  • (2)輸入和輸出格式選項inform和outform? ? ?inform和outform選項分別指定了輸入DSA密鑰和輸出DSA密鑰的編碼格式,目前支持的格式包括PEM編碼和DER編碼兩種。
  • (3)輸入和輸出密鑰類型選項pubin和pubout默認情況下,輸入和輸出的密鑰都應該是DSA私鑰,但是,有時候我們可能需要從一個輸入的DSA私鑰里面獲取一個相應的DSA公鑰發送給簽名驗證方,那么就可以選擇pubout選項來輸出一個DSA公鑰。在某些情況下,我們甚至可能輸入一個DSA公鑰,對它的信息進行解釋或者進行格式轉換。因為DSA公鑰不需要加密,所以如果使用了pubin或者pubout選項,相應的passin和passout選項指定的口令也會被忽略,輸出的公鑰不會被加密
  • (4)輸入和輸出文件選項in和out? ? in指定了輸入DSA密鑰的保存文件,默認情況下輸入的文件應該保存一個PEM編碼或者DER編碼的DSA私鑰。如果使用了pubin選項,則指令認為輸入文件保存的是一個沒有加密的DSA公鑰。密鑰的編碼格式默認是PEM,如果是DER格式,則需要使用inform選項指定。
  • out選項指定了輸出DSA密鑰的保存文件,如果輸入的是DSA私鑰,默認情況下輸出的也是DSA私鑰,但是如果使用了pubout選項,則輸出的將是一個DSA公鑰。如果輸入是一個DSA公鑰,那么輸出也是一個DSA公鑰。輸出公鑰的時候不會對密鑰進行加密操作。默認情況下輸出的密鑰編碼格式是PEM,如果需要輸出密鑰編碼格式為DER的密鑰,那么可以使用outform選項指定。
  • 如果使用了text和modulus選項,還會在out指定的文件中輸入明文解析信息。使用了noout選項將不會輸出編碼密鑰數據。
  • (5)輸入和輸出口令選項passin和passout? ? ? pasin選項指定了解密DSA私鑰需要的口令的方式和源,口令可以從多種渠道獲取。如果輸入了DSA私鑰而沒有使用pasin選項,那么指令會從指令行界面提示輸入解密密鑰數據需要的口令。如果使用了pubin選項,那么passin選項會被忽略。pasout選項指定加密輸出的DSA私鑰需要的口令的方式和源。如果選擇了加密算法但是沒有使用pasout選項,那么指令會從指令行界面提示用戶輸入保護密鑰的口令。如果輸入的是DSA公鑰(使用pubin選項)或者輸出的是DSA公鑰(使用pubout選項),那么pasout選項就會被忽略。
  • (6)加密算法選項dsa指令提供了更加豐富的密鑰加密算法,理論上,所有OpenSSL支持的對稱加密算法都可以在這里用于加密DSA私鑰。使用的方式是直接輸入該對稱加密算法的合法名稱。
  • (7)engine選項? ?engine選項指定使用Engine設備中支持的對稱加密算法替代OpenSSL算法庫中的加密算法對DSA私鑰進行加密或者解密。例如,如果Engine設備支持DES3算法,而且你指定了使用DES3算法對DSA密鑰進行加密,那么指令就會調用Engine設備中相應的DES3算法對DSA私鑰進行加密。
  • (8)解析信息輸出選項使用text選項會輸出DSA密鑰各項參數的明文解析信息,包括DSA密鑰的三個基本參數、公鑰參數和私鑰參數。使用modulus選項會輸出DSA公鑰的參數信息。而使用noout選項則指令不會輸出編碼的密鑰數據。

應用實例?

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

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

相關文章

每天定時打開某個網頁_Python科普帖定時通知

0 復習上一關我們學習了selenium,它有可視模式與靜默模式這兩種瀏覽器的設置方法,二者各有優勢。然后學習了使用.get(URL)獲取數據,以及解析與提取數據的方法。在這個過程中,我們操作對象的轉換過程:除了上面的方法&am…

java 構造器

概念 案例1 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;private String name;public Person() {this.age 18;}public Person(int age, String name) {this.age …

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

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

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 的全部…