PKCS 如何成為對任意消息內容進行數字簽名、摘要、身份驗證或加密的語法
我真的對PKCS感到困惑。我看到了這個問題,但我沒有足夠的聲譽來發表評論,所以我要問一個新問題來澄清。
我試圖了解 PKCS 到底是什麼,以及 CMS 是什麼。我偶然發現了上述問題中提到的 RFC。
此語法用於對任意消息內容進行數字簽名、摘要、身份驗證或加密。
如何使用語法對內容進行數字簽名?!!我可以理解它是否聲明它是一種用於描述數字簽名內容的語法……但是簽名?如何使用語法進行簽名?
這一切都與我對 PKCS/CMS 和 x509 的混淆有關。我知道 x509 是一個標準,描述了應該構成證書的內容,這與 PKCS/CMS 有何不同?
編輯
CMS的維基百科條目也無濟於事。例如它說:
它
$$ CMS $$加密方案和協議可以使用它對任何形式的數字數據進行數字簽名、消化、認證或加密。
好的,CMS 是像 RSA 這樣的加密算法嗎?不!!那麼為什麼說它是一種用於數字簽名或加密東西的協議呢?
PKCS代表公鑰加密標準。該名稱是 RSA 實驗室的一部分,該實驗室設法創建和發布了很長的標準列表,包括:
- PKCS#1:具有各種加密方案和簽名生成方案的 RSA
- PKCS#5:基於密碼的加密或 PBE
- PKCS#7:加密消息語法或 CMS
- PKCS#8:用於儲存/描述和加密私鑰的方案
- PKCS#11:Cryptoki,一個用於 HSM 的基於 C 的 API
- PKCS#12:密鑰和信任儲存格式
PKCS 本身並不是一個方案。許多這些方案使用一種稱為 ASN.1 的語言來描述資料結構。它起源於電信行業。出於加密目的,可以使用 BER/DER 二進制編碼對這些資料結構進行編碼。
由於 RSA Labs 被似乎對擴展或維護標準沒有任何興趣的公司收購,這些標準中的大多數現在已被 RFC 取代,包括CMS,儘管您仍然看到許多提及 PKCS#7、PKCS7、 .pk7 和類似的。
顧名思義,CMS 是一種加密消息結構,在 ASN.1 中進行了描述。因此,它沒有描述創建簽名的方法,它只是描述瞭如何儲存簽名和簽名的內容。或者實際上,如何儲存加密的消息,可能在簽名之後。CMS 是一種所謂的容器格式,它描述了裡面的內容,有點像存檔或 zip 文件,但用於加密用途。
此外,它還描述瞭如何將 X.509 證書與可用於驗證它的消息一起儲存。驗證方可能沒有用於簽署文件的葉/使用者證書,但他們可能擁有可用於創建證書鏈的可信 CA 證書。X.509 證書使用同樣使用 ASN.1 定義的不同結構。由於證書基本上也是簽名文件,因此與 CMS 當然有許多相似之處。CMS 有時甚至用作證書的容器格式,類似於 PKCS#12。
所以不,CMS 不是算法,它是加密消息的容器格式。這些消息可以使用 RSA 加密或簽名,在這種情況下 CMS 將引用RSA 算法。您可以使用該命令
openssl asn1parse
或openssl -cmsout -print
查看結構是什麼以及其中儲存了什麼。-inform DER
如果輸入是二進製而不是文本 PEM 文件(頁眉、base 64 和頁腳),您可能必須使用。