asn演算法
為一個基於密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼演算法、常用的密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。
1.對稱加密演算法
OpenSSL一共提供了8種對稱加密演算法,其中7種是分組加密演算法,僅有的一種流加密演算法是RC4。這7種分組加密演算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它演算法使用的則是64位。事實上,DES演算法裡面不僅僅是常用的DES演算法,還支持三個密鑰和兩個密鑰3DES演算法。
2.非對稱加密演算法
OpenSSL一共實現了4種非對稱加密演算法,包括DH演算法、RSA演算法、DSA演算法和橢圓曲線演算法(EC)。DH演算法一般用戶密鑰交換。RSA演算法既可以用於密鑰交換,也可以用於數字簽名,當然,如果你能夠忍受其緩慢的速度,那麼也可以用於數據加密。DSA演算法則一般只用於數字簽名。
3.信息摘要演算法
OpenSSL實現了5種信息摘要演算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA演算法事實上包括了SHA和SHA1兩種信息摘要演算法,此外,OpenSSL還實現了DSS標准中規定的兩種信息摘要演算法DSS和DSS1。
4.密鑰和證書管理
密鑰和證書管理是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),實現了證書簽發的整個流程和證書管理的大部分機制。
5.SSL和TLS協議
OpenSSL實現了SSL協議的SSLv2和SSLv3,支持了其中絕大部分演算法協議。OpenSSL也實現了TLSv1.0,TLS是SSLv3的標准化版,雖然區別不大,但畢竟有很多細節不盡相同。
雖然已經有眾多的軟體實現了OpenSSL的功能,但是OpenSSL裡面實現的SSL協議能夠讓我們對SSL協議有一個更加清楚的認識,因為至少存在兩點:一是OpenSSL實現的SSL協議是開放源代碼的,我們可以追究SSL協議實現的每一個細節;二是OpenSSL實現的SSL協議是純粹的SSL協議,沒有跟其它協議(如HTTP)協議結合在一起,澄清了SSL協議的本來面目。
6.應用程序
OpenSSL的應用程序已經成為了OpenSSL重要的一個組成部分,其重要性恐怕是OpenSSL的開發者開始沒有想到的。現在OpenSSL的應用中,很多都是基於OpenSSL的應用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的應用程序實現的。OpenSSL的應用程序是基於OpenSSL的密碼演算法庫和SSL協議庫寫成的,所以也是一些非常好的OpenSSL的API使用範例,讀懂所有這些範例,你對OpenSSL的API使用了解就比較全面了,當然,這也是一項鍛煉你的意志力的工作。
OpenSSL的應用程序提供了相對全面的功能,在相當多的人看來,OpenSSL已經為自己做好了一切,不需要再做更多的開發工作了,所以,他們也把這些應用程序成為OpenSSL的指令。OpenSSL的應用程序主要包括密鑰生成、證書管理、格式轉換、數據加密和簽名、SSL測試以及其它輔助配置功能。
7.Engine機制 Engine機制的出現是在OpenSSL的0.9.6版的事情,開始的時候是將普通版本跟支持Engine的版本分開的,到了OpenSSL的0.9.7版,Engine機制集成到了OpenSSL的內核中,成為了OpenSSL不可缺少的一部分。 Engine機制目的是為了使OpenSSL能夠透明地使用第三方提供的軟體加密庫或者硬體加密設備進行加密。OpenSSL的Engine機製成功地達到了這個目的,這使得OpenSSL已經不僅僅使一個加密庫,而是提供了一個通用地加密介面,能夠與絕大部分加密庫或者加密設備協調工作。當然,要使特定加密庫或加密設備更OpenSSL協調工作,需要寫少量的介面代碼,但是這樣的工作量並不大,雖然還是需要一點密碼學的知識。Engine機制的功能跟Windows提供的CSP功能目標是基本相同的。目前,OpenSSL的0.9.7版本支持的內嵌第三方加密設備有8種,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬體加密設備。現在還出現了支持PKCS#11介面的Engine介面,支持微軟CryptoAPI的介面也有人進行開發。當然,所有上述Engine介面支持不一定很全面,比如,可能支持其中一兩種公開密鑰演算法。
8.輔助功能
BIO機制是OpenSSL提供的一種高層IO介面,該介面封裝了幾乎所有類型的IO介面,如內存訪問、文件訪問以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復雜性也降低了很多。
OpenSSL對於隨機數的生成和管理也提供了一整套的解決方法和支持API函數。隨機數的好壞是決定一個密鑰是否安全的重要前提。
OpenSSL還提供了其它的一些輔助功能,如從口令生成密鑰的API,證書簽發和管理中的配置文件機制等等。如果你有足夠的耐心,將會在深入使用OpenSSL的過程慢慢發現很多這樣的小功能,讓你不斷有新的驚喜。
B. 理解RSA演算法
如果公鑰加密的信息只有私鑰解得開,只要私鑰不泄露,通信就是安全的.
歐拉函數 ,在數論中,對正整數n,歐拉函數φ(n)是小於或等於n的正整數中與n互質的數的數目.例如:φ(8) = 4,因為1,3,5,7均與8互質.
通式:
如果n=1,則 φ(1) = 1 。因為1與任何數(包括自身)都構成互質關系。
如果n是質數,則 φ(n)=n-1 。因為質數與小於它的每一個數,都構成互質關系。比如5與1、2、3、4都構成互質關系。
如果n是質數的某一個次方,即 n = p^k (p為質數,k為大於等於1的整數),則
如果n可以分解成兩個互質的整數之積
n = p1 × p2 則 φ(n) = φ(p1p2) = φ(p1)φ(p2)
如果兩個正整數a和n互質,則n的歐拉函數 φ(n) 可以讓下面的等式成立:
如果兩個正整數a和n互質,那麼一定可以找到整數b,使得 ab-1 被n整除,或者說ab被n除的余數是1。
這時,b就叫做a的"模反元素"。
比如,3和11互質,那麼3的模反元素就是4,因為 (3 × 4)-1 可以被11整除。顯然,模反元素不止一個, 4加減11的整數倍都是3的模反元素 {...,-18,-7,4,15,26,...},即如果b是a的模反元素,則 b+kn 都是a的模反元素。
比如,老張和老王是兩名地下工作者,老張要向老王傳達一個機密的文件.這時老張想到了RSA演算法.
(1) 隨機選擇兩個不相等的質數p,q.
這時,老張選擇了61和53.
(2) 計算p和q的乘積n.
n的長度就是密鑰長度。3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。實際應用中,RSA密鑰一般是1024位,重要場合則為2048位。
(3) 計算n的歐拉函數φ(n).
根據上面所介紹的歐拉定理第四種情況:
(4) 隨機選擇一個整數e,條件是1< e < φ(n),且e與φ(n) 互質.
這時,老張從1-3120之間,隨機選擇了17.(實際應用中,常常選擇65537).
(5) 計算e對於φ(n)的模反元素d
所謂"模反元素"就是指有一個整數d,可以使得ed被φ(n)除的余數為1。
這個公式等價於
於是,找到模反元素d,實質上就是對下面這個二元一次方程求解。
那麼,已知e = 17,φ(n) = 3120 ,求x的值
這個方程可以用"擴展歐幾里得演算法"求解,此處省略具體過程。總之,老張算出一組整數解為 (x,y)=(2753,15),即 d=2753。
(6) 將n和e封裝成公鑰,n和d封裝成私鑰
n=3233,e=17,d=2753,所以公鑰就是 (3233,17),私鑰就是(3233, 2753),即公鑰為( n,e ),私鑰為( n,d )。
實際應用中,公鑰和私鑰的數據都採用 ASN.1 格式表達。
老張進行了這些計算後,整理了下上面所提到的數字:
這六個數字之中,公鑰用到了兩個(n和e),其餘四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等於私鑰泄漏。
老張想,有沒有可能在已知n和e的情況下,也就是知道公鑰的情況下,推導出d?
結論:如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。可是,大整數的因數分解,是一件非常困難的事情.
有了公鑰和密鑰,就能進行加密和解密了。
1.加密要用公鑰 (n,e)
假設老張要向老王發送加密信息m,他就要用老王的公鑰 (n,e) 對m進行加密。這里需要注意,m必須是整數(字元串可以取ascii值或unicode值),且m必須小於n。
所謂"加密",就是算出下式的c:
老王的公鑰是 (3233, 17),老張的m假設是65,那麼可以算出下面的等式:
於是,c等於2790,老張就把2790發給了老王。
2.解密要用私鑰(n,d)
老王拿到老張發來的2790以後,就用自己的私鑰(3233, 2753) 進行解密。可以證明,下面的等式一定成立:(證明過程略,有興趣可以看阮一峰的博客)
也就是說,c的d次方除以n的余數為m。現在,c等於2790,私鑰是(3233, 2753),那麼,老王算出
因此,老王知道了老張加密前的原文就是65。
我們可以看到,如果不知道d,就沒有辦法從c求出m。而前面已經說過,要知道d就必須分解n,這是極難做到的,所以RSA演算法保證了通信安全。
你可能會問,公鑰(n,e) 只能加密小於n的整數m,那麼如果要加密大於n的整數,該怎麼辦?有兩種解決方法:一種是把長信息分割成若干段短消息,每段分別加密;另一種是先選擇一種"對稱性加密演算法"(比如DES),用這種演算法的密鑰加密信息,再用RSA公鑰加密DES密鑰。
C. 計算機網路-4-6-互聯網的路由選擇協議
路由選擇協議的核心是 路由演算法 。即 需要一種演算法來獲取路表中的各項 ,一個比較好的路由選擇演算法應該有以下特點[BELL86]:
一個實際的路由選擇演算法,應該盡可能的接近於理想的演算法,在不同的應用條件下,可以對上面提出的六個方面有不同的側重。
倘若從路由演算法能否隨網路的通信量或拓撲自適應的進行調整變化來劃分,則只有兩大類: 靜態路由選擇策略 和 動態路由選擇策略 。靜態路由選擇策略也叫做 非自適應路由選擇 ,其特點是簡單和開銷較小,但不能即使適應網路狀態的變化。對於很簡單的小網路,完全可以採用靜態路由選擇,用人工配置每一條路由。動態路由選擇也叫做 自適應路由選擇 ,其特點是能夠較好的適應網路狀態的變化,但實現起來較為復雜,開銷也比較大,因此動態路由選擇適用於較復雜的大網路。
互聯網採用的路由選擇協議主要是自適應的(動態的),分布式路由選擇協議。由於以下兩種原因,互聯網採用分層次的路由選擇協議:
為此,可以把整個互聯網劃分為許多較小的 自治系統AS(autonomous system) ,自治系統AS是在單一技術管理下的一組路由器,而這些路由器使用一種自治系統內部的路由選擇協議和共同的度量,一個AS對其他AS表現的出是 一個單一的和一致的路由選擇策略 。
在目前的互聯網中,一個大的ISP就是一個自治系統。這樣,互聯網就把路由選擇協議劃分為兩大類:
自治系統之間的路由選擇協議也叫做 域間路由選擇(interdomain routing) ,而在自治系統內部的路由選擇叫做 域內路由選擇(intradomain routing) 。如圖4-31
RIP(routing information protocol)是內部網關協議IGP中最先得到廣泛使用的協議[RFC1058],也叫 路由信息協議 ,RIP是一種分布式的 基於距離向量的路由選擇協議 。最大的優點就是簡單。
RIP協議要求網路中的每一個路由器都要維護從它自己到其他每一個目的網路的距離記錄(因此這是一組距離,叫做距離向量),RIP將距離定義如下:
從一路由器到直接連接的網路的距離為1,從路由器到非之間的網路的距離定義為所經過的路由器數+1。
RIP協議的距離也稱之為 跳數 ,但是一條跳數最多隻能包含15個路由器,因此,當距離=16時,就相當於不可達。因此RIP只能適用於小型互聯網。
注意的是,到直接連接的網路也定義為0(採用這種定義的理由是:路由器在和直接連接在該網路上的主機進行通信並不需要經過另外的路由器,既然經過每一個路由器都要將距離增加1,那麼不經過路由器就不需要+1,就是0)。
RIP不能在兩個網路之間同時使用多條路由。RIP選擇一條具有最少路由器的路由(最短路由),哪怕還存在另一條高速低延時的但是路由器較多的路由。
路由器在剛開始工作的時候,其內部路由表是空的。然後路由器就可以和直接相連的幾個網路的距離(這些距離為1),接著,每個路由器和與自己相連的路由器不斷交換路由表信息,經過若干次更新後,所有的路由器最終就可以知道本自治系統中任何一個網路地址和最短下一跳路由器的地址。
路由器最主要的信息是:到某個網路的距離(最短距離),以及下一跳的地址,路由表更新的原則是找出到每個網路的 最短距離 ,這種演算法又稱之為 距離向量演算法 。
對 每一個相鄰的路由器 發送過來的RIP報文,進行以下步驟:
演算法描述:其實就是求一個路由器到另一個路由器的最短距離。
例題:
已知路由器R6有表4-9(a)所表示的路由表,現在收到相鄰路由器路由表R4發過來的路由更新信息,如圖4-9(b)所示。試更新路由器R6的路由表。
解:首先把R4發過來的路由表中的距離都+1:
把這個表和R6的路由表進行比較:
RIP協議讓每一個自治系統中的所有路由都和自己的相鄰路由器定期交換路由表信息,並不斷更新路由表,使得每從 每一個路由器到每一個目的網路的路由都是最短距離(也就是跳數最小)。
現在比較新的RIP協議報文格式是1998年提出的RIP2。
RIP協議使用運輸層的用戶數據報(UDP埠為520)進行傳輸。
RIP報文由首部和路由部分組成。
RIP首部佔4個位元組,其中的命令欄位指出報文的意義。
RIP2報文中的路由部分有若幹路由信息組成,每個路由信息需要用20位元組。 地址標識符(又稱地址列別) 欄位用來標識所用的地址協議。如果採用IP地址就為2。 路由標記填入自治系統號ASN(Autonomous System Number) ,這是考慮使用RIP有可能收到本自治系統以外的路由選擇信息,再後面指出某個 網路地址 , 下一跳路由器地址 以及 到此網路的距離 ,一個RIP報文最多可以包含25個路由,因而RIP報文的最大長度是4+20x25=504位元組。如果超過,則必然再使用以惡搞RIP報文來傳送。
RIP還具有簡單的鑒別功能,若使用鑒別功能,則將原來寫入第一個路由信息(20位元組)的位置用作鑒別,這時應該將地址標識符置為全1(0xFFFF),而路由標記寫入鑒別類別,剩下的16位元組作為鑒別數據,在鑒別數據之後才能寫入路由信息,但這時只能寫入24個路由信息。
RIP存在的一個問題是 當網路出現故障的時候,要經過比較長的時間才能將信息傳送到所有的路由器 ,RIP協議的這一特點是: 好消息傳播的很快,而壞消息傳播的很慢 ,網路出現故障的傳播時間往往需要經過較長時間,這是RIP協議的一個主要缺點。
為了使壞消息傳播的更快些,可以採用多種措施,例如,讓路由器記錄收到某特定路由信息的介面,而不是讓同一個路由信息再通過此介面反方向傳送。
總之,RIP協議最大的優點是 實現簡單,開銷較小 ,但RIP協議缺點也很明顯,首先 限制了網路規模,因為路由器最大的跳數是15跳,一般中大型網路規模RIP協議就不適用了 。其次就是 路由器之間交換的路由信息是路由器中完整的路由表,因而隨著網路規模變大,開銷也就增加 。最後就是 好消息傳播的很快,壞消息傳播的很慢 。
D. 網路安全-哈希演算法和數字簽名
常見 HASH 演算法:
HASH 演算法主要應用:
1)文件校驗
我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
MD5 Hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5 checksum的命令。
2)數字簽名
Hash 演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
3)鑒權協議
如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。
數字簽名簽署和驗證數據的步驟如圖所示:
PKCS1 和 PKCS7 標准格式的簽名:
1. PKCS1簽名:即裸簽名,簽名值中只有簽名信息。
2. PKCS7簽名:簽名中可以帶有其他的附加信息,例如簽名證書信息、簽名原文信息、時間戳信息等。
PKCS7 的 attached 和 detached 方式的數字簽名:
1. attached 方式是將簽名內容和原文放在一起,按 PKCS7 的格式打包。PKCS7的結構中有一段可以放明文,但明文必需進行ASN.1編碼。在進行數字簽名驗證的同時,提取明文。這里的明文實際上是真正內容的摘要。
2. detached 方式打包的 PKCS7格式包中不包含明文信息。因此在驗證的時候,還需要傳遞明文才能驗證成功。同理,這里的明文實際上是真正內容的摘要。
E. 2021-01-30 AES加密演算法筆記(一)
密鑰
明文
密文
明文和秘文不等長沒法執行異或運算
分組加密是:將明文分成多個等長的block模塊,對每個模塊分別加解密
最後一個明文block模塊長度不足時,需要填充
hash函數
GCM工作模式就是 CTR模式加上GMAC完整性校驗
GCM = CTR + GMAC
異或
每個參與方都有一對密鑰
公鑰是對外知道的
知道公鑰就是知道(k,n) -> k就是一個隨機數 n是兩個質數p,q的乘積
->v
->v = (p-1)*(q-1),k 計算k對於v的模反元素d
->(d,n)
難在n是一個大數,分解質因數n得到p,q會比較困難
安全性來源於對一個大數做因式分解特別困難。
ASN.1
解碼查看
迫於美國政府壓力,server端把私鑰給了美國政府
美國政府作為中間人攔截客戶端發的消息,公鑰發的消息。
然後就用拿到的私鑰解密,所有信息都可以看到。
F. ios支付寶怎麼把私鑰轉換成pkcs8 格式
用途:
pkcs8格式的私鑰轉換工具。它處理在PKCS#8格式中的私鑰文件。它可以用多樣的PKCS#5 (v1.5 and v2.0)和 PKCS#12演算法來處理沒有解密的PKCS#8 PrivateKeyInfo格式和EncryptedPrivateKeyInfo格式。
用法:
[cpp] view plain
openssl pkcs8 [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename]
[-passout arg] [-topk8] [-noiter] [-nocrypt] [-nooct] [-embed] [-nsdb] [-v2 alg] [-v1 alg] [-engine id]
選項說明:
-inform PEM|DER::輸入文件格式,DER或者PEM格式。DER格式採用ASN1的DER標准格式。一般用的多的都是PEM格式,就是base64編碼格式。
-outform DER|PEM:輸出文件格式,DER或者PEM格式。
-in filename:輸入的密鑰文件,默認為標准輸入。如果密鑰被加密,會提示輸入一個密鑰口令。
-passin arg:輸入文件口令保護來源。
-out filename:輸出文件,默認為標准輸出。如果任何加密操作已經執行,會提示輸入一個密鑰值。輸出的文件名字不能和輸入的文件名一樣。
-passout arg:輸出文件口令保護來源。
-topk8:通常的是輸入一個pkcs8文件和傳統的格式私鑰文件將會被寫出。設置了此選項後,位置轉換過來:輸入一個傳統格式的私鑰文件,輸出一個PKCS#8格式的文件。
-noiter:MAC保護計算次數為1。
-nocrypt:PKCS#8密鑰產生或輸入一般用一個適當地密鑰來加密PKCS#8 EncryptedPrivateKeyInfo結構。設置了此選項後,一個不加密的PrivateKeyInfo結構將會被輸出。這個選項一直不加密私鑰文件,在絕對必要的時候才能夠使用。某些軟體例如一些JAVA代碼簽名軟體使用不加密的私鑰文件。
-nooct:這個選項產生的RSA私鑰文件是一個壞的格式,一些軟體將會使用。特別的是,私鑰文件必須附上一個八位組字元串,但是一些軟體僅僅包含本身的結構體沒有使八位組字元串所環繞。不採用八位組表示私鑰。
-embed:這個選項產生的RSA私鑰文件是一個壞的格式。在私鑰結構體中採用嵌入式DSA參數格式。在這個表單中,八位組字元串包含了ASN1 SEQUENCE中的兩種結構:一個SEQUENCE包含了密鑰參數,一個ASN1 INTEGER包含私鑰值。
-nsdb:這個選項產生的RSA私鑰文件是一個壞的格式並兼容了Netscape私鑰文件資料庫。採用NetscapeDB的DSA格式。
-v2 alg:採用PKCS#5 v2.0,並指定加密演算法,默認的是PKCS#8私鑰文件被叫做B<pbeWithMD5AndDES-CBC>(該演算法用56位元組的DES加密但是在PKCS#5 v1.5中有更加強壯的加密演算法)的加密演算法用口令進行加密。用B<-v2>選項,PKCS#5 v2.0相關的演算法將會被使用,可以是des3(168位元組)和rc2(128位元組),推薦des3。
-v1 alg:採用PKCS#5 v1.5或pkcs12,並指定加密演算法。可採用的演算法見下面。
-engine id:指定硬體引擎。
注意:
加密了的PEM編碼PKCS#8文件表單用下面的頭部和尾部:
-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----
未加密的表單用:
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
跟傳統的SSLeay演算法相比,用PKCS#5 v2.0系列的演算法加密私鑰,有更高的安全性以及迭代次數。於是附加的安全性是經過深思熟慮的。
默認的加密演算法僅僅是56位元組的,是因為它是PKCS#8所支持的最好的方法。
有一些軟體使用PKCS#12基於密鑰的加密演算法來加密PKCS#8格式的私鑰:它們會自動的處理但是沒有選項來操作。
在PKCS#8格式中,有可能的是輸出DER編碼格式的經過加密的私鑰文件,是因為加密的詳細說明包含在DER等級中,相反的是傳統的格式包含在PEM鄧麗中。
PKCS#5 v1.5和 PKCS#12 演算法:
各種各樣的演算法可以被選項-v1所使用。包含PKCS#5 v1.5和 PKCS#12 演算法。詳細描述如下:
B<PBE-MD2-DES PBE-MD5-DES>:這兩個演算法包含在PKCS#5 v1.5中。它們僅僅提供56位元組的保護,加密演算法用DES。
B<PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES>:它們在傳統的PKCS#5 v1.5中沒有被提到,但是它們用同樣地密鑰引出演算法,被一些軟體所支持。在PKCS#5 v2.0中所提到。它們使用64位元組的RC2以及56位元組的DES。
B<PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40>:它們是PKCS#12基於密鑰的加密演算法,它們允許使用高強度的加密演算法,例如3des或128位的RC2。
實例:
用3des演算法將傳統的私鑰文件轉換為PKCS#5 v2.0:
[cpp] view plain
openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
用PKCS#5 1.5兼容的DES演算法將私鑰文件轉換為pkcs8文件:
[html] view plain
openssl pkcs8 -in ocspserverkey.pem -topk8 -out ocspkcs8key.pem
用PKCS#12兼容的3DES演算法將私鑰文件轉換為pkcs8文件:
[html] view plain
openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
讀取一個DER格式加密了的PKCS#8格式的私鑰:
[cpp] view plain
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
轉換一個PKCS#8格式的私鑰到傳統的私鑰:
[cpp] view plain
openssl pkcs8 -in pk8.pem -out key.pem
pkcs8中的私鑰以明文存放:
[html] view plain
openssl pkcs8 -in ocspserverkey.pem -topk8 -nocrypt -out ocspkcs8key.pem
標准:
PKCS#5 v2.0的測試向量的實現是以通告的形式用高強度的迭代次數演算法3DES、DES和RC2來加密的。很多人要確認能夠解密產生的私鑰。
PKCS#8格式的DSA私鑰文件沒有備注文件中的:在PKCS#11 v2.01中的11.9節被隱藏了的。OpenSSL的默認DSA PKCS#8私鑰格式隱藏在這個標准中。
BUGs:
必須有一個選項列印使用的加密演算法的其他詳細細節,例如迭代次數。
PKCS#8用3DES和PKCS#5 v2.0必須是默認的私鑰文件:目前為了命令的兼容性。