金鑰和證書,純理論介紹篇

tomato_4發表於2024-09-05

先介紹金鑰的PKCS (Public Key Cryptography Standards)

是由 RSA 實驗室與其它安全系統開發商為促進公鑰密碼的發展而制訂的一系列標準,用於增強公鑰密碼系統的互操作性。

先寫上總結:
用於加密演算法實現的標準:PKCS#1、PKCS#5、PKCS#9 等,主要定義了加密、解密、簽名、驗籤等演算法及其實現方式。
用於金鑰傳輸和儲存的標準:PKCS#7、PKCS#8、PKCS#10、PKCS#12、PKCS#15 等,主要用於定義加密訊息的結構、私鑰和證書的儲存格式,以及安全資料的傳輸和交換方式。

用於金鑰協商和傳輸標準:PKCS#3

以下是PKCS釋出過的一些標準:

(1)PKCS#1:RSA加密標準。PKCS#1定義了RSA公鑰函式的基本格式標準,特別是數字簽名。它定義了數字簽名如何計算,包括待簽名資料和簽名本身的格式;它也定義          了PSA公/私鑰的語法。

     應用:加密資料、數字簽名、金鑰交換等。

(2)PKCS#2:涉及了RSA的訊息摘要加密,這已被併入PKCS#1中。

(3)PKCS#3:Diffie-Hellman金鑰協議標準。PKCS#3描述了一種實現Diffie- Hellman金鑰協議的方法。PKCS#3 主要涉及金鑰的協商(即傳輸)過程,而不是具體的加密演算法實現或金鑰的儲存的標準。它定義了 Diffie-Hellman 金鑰交換的具體方法,確保通訊雙方能夠安全地生成共享金鑰,以用於後續的加密通訊。
(4)PKCS#4:最初是規定RSA金鑰語法的,現已經被包含進PKCS#1中。
(5)PKCS#5:基於口令的加密標準。PKCS#5描述了使用由口令生成的金鑰來加密8位位組串併產生一個加密的8位位組串的方法。

     應用:PKCS#5可以用於加密私鑰,以便於金鑰的安全傳輸(這在PKCS#8中描述);透過使用者口令生成加密金鑰,用於加密檔案、資料等。
(6)PKCS#6:擴充套件證書語法標準。PKCS#6定義了提供附加實體資訊的X.509證書屬性擴充套件的語法(當PKCS#6第一次釋出時,X.509還不支援擴充套件。這些擴充套件因此被包括在X.509中)。
(7)PKCS#7:密碼訊息語法標準。PKCS#7為使用密碼演算法的資料規定了通用語法,比如數字簽名和數字信封。PKCS#7提供了許多格式選項,包括未加密或簽名的格式化訊息、已封裝(加密)訊息、已簽名訊息和既經過簽名又經過加密的訊息。

    用途:定義了加密訊息和數字簽名的結構,用於在資料傳輸過程中進行加密和簽名。
    應用:電子郵件加密(S/MIME)、安全檔案傳輸等。

(8)PKCS#8:私鑰資訊語法標準。PKCS#8定義了私鑰資訊語法和加密私鑰語法,其中私鑰加密使用了PKCS#5標準。

    用途:標準化私鑰的儲存格式,支援加密和未加密的私鑰儲存。
    應用:私鑰的安全儲存和匯入匯出。

(9)PKCS#9:可選屬性型別。PKCS#9定義了PKCS#6擴充套件證書、PKCS#7數字簽名訊息、PKCS#8私鑰資訊和PKCS#10證書籤名請求中要用到的可選屬性型別。已定義的證書屬性包括E-mail地址、無格式姓名、內容型別、訊息摘要、簽名時間、簽名副本(counter signature)、質詢口令字和擴充套件證書屬性。

(10)PKCS#10:證書請求語法標準。PKCS#10定義了證書請求的語法。證書請求包含了一個唯一識別名、公鑰和可選的一組屬性,它們一起被請求證書的實體簽名(證書管理協議中的PKIX證書請求訊息就是一個PKCS#10)。

     用途:定義了證書申請請求的結構,用於請求證書頒發機構(CA)生成證書。
     應用:生成 CSR 請求以申請數字證書。

(11)PKCS#11:密碼令牌介面標準。PKCS#11或“Cryptoki”為擁有密碼資訊(如加密金鑰和證書)和執行密碼學函式的單使用者裝置定義了一個應用程式介面(API)。智慧卡就是實現Cryptoki的典型裝置。注意:Cryptoki定義了密碼函式介面,但並未指明裝置具體如何實現這些函式。而且Cryptoki只說明瞭密碼介面,並未定義對裝置來說可能有用的其他介面,如訪問裝置的檔案系統介面。

(12)PKCS#12:個人資訊交換語法標準。PKCS#12定義了個人身份資訊(包括私鑰、證書、各種秘密和擴充套件欄位)的格式。PKCS#12有助於傳輸證書及對應的私鑰,於是使用者可以在不同裝置間移動他們的個人身份資訊。

     用途:用於打包和加密儲存私鑰、公鑰證書及鏈式證書,便於安全傳輸和跨平臺匯入。
     應用:生成 .pfx 或 .p12 檔案,用於客戶端認證、證書匯入等。

(13)PKCS#13:橢圓曲線密碼標準。PKCS#13標準當前正在完善之中。它包括橢圓曲線引數的生成和驗證、金鑰生成和驗證、數字簽名和公鑰加密,還有金鑰協定,以及引數、金鑰和方案標識的ASN.1語法。

(14)PKCS#14:偽隨機數產生標準。PKCS#14標準當前正在完善之中。為什麼隨機數生成也需要建立自己的標準呢?PKI中用到的許多基本的密碼學函式,如金鑰生成和Diffie-Hellman共享金鑰協商,都需要使用隨機數。然而,如果“隨機數”不是隨機的,而是取自一個可預測的取值集合,那麼密碼學函式就不再是絕對安全了,因為它的取值被限於一個縮小了的值域中。因此,安全偽隨機數的生成對於PKI的安全極為關鍵。

(15)PKCS#15:密碼令牌資訊語法標準。PKCS#15透過定義令牌上儲存的密碼物件的通用格式來增進密碼令牌的互操作性。在實現PKCS#15的裝置上儲存的資料對於使用該裝置的所有應用程式來說都是一樣的,儘管實際上在內部實現時可能所用的格式不同。PKCS#15的實現扮演了翻譯家的角色,它在卡的內部格式與應用程式支援的資料格式間進行轉換。

    用途:定義瞭如何在智慧卡上安全儲存加密資訊,如金鑰和證書。
    應用:智慧卡的金鑰和證書管理。

X509

X.509是常見通用的證書格式。所有的證書都符合為Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標準。X.509是國際電信聯盟-電信(ITU-T)部分標準和國際標準化組織(ISO)的證書格式標準。作為ITU-ISO目錄服務系列標準的一部分,X.509是定義了公鑰證書結構的基本標準。1988年首次釋出,1993年和1996年兩次修訂。當前使用的版本是X.509 V3,它加入了擴充套件欄位支援,這極大地增進了證書的靈活性。X.509 V3證書包括一組按預定義順序排列的強制欄位,還有可選擴充套件欄位,即使在強制欄位中,X.509證書也允許很大的靈活性,因為它為大多數字段提供了多種編碼方案.

金鑰的檔案格式編碼格式說明

編碼格式:二進位制 或 ASCII(即base64編碼)

檔案格式:

  • PEM:(Privacy Enhanced Mail)以 Base64 編碼的文字檔案,通常包含

         -----BEGIN CERTIFICATE-----
       (Base64 編碼的證書資料)
    -----END CERTIFICATE-----

    -----BEGIN PRIVATE KEY-----
    (Base64 編碼的私鑰資料)
    -----END PRIVATE KEY----- 這樣的標記。

  • DER:(Distinguished Encoding Rules)二進位制編碼的檔案,通常更緊湊,但不如 PEM 格式直觀。
  • PKCS#8:用於儲存私鑰,支援加密的私鑰儲存。
  • PKCS#10: 證書請求標準(.p10),.p10是證書請求檔案,與.csr檔案類似
  • PKCS#12:用於儲存證書鏈和對應的私鑰,通常包含加密保護。

副檔名,用於指示檔案的型別或使用目的,有助於作業系統或應用程式識別檔案型別,但它並不能決定檔案的內容或格式。

  • .key:常用於儲存私鑰,內容可以是 PEM 格式或 DER 格式。
  • .pem:通常是 PEM 編碼的檔案,可以儲存公鑰、私鑰或證書。
  • .crt / .cer:常用於儲存 X.509 證書,內容可以是 PEM 或 DER 格式。
  • .p12 / .pfx:使用 PKCS#12 容器格式,通常包含公鑰、私鑰和證書。
  • .der:二進位制編碼的證書或金鑰檔案。

1. Linux 平臺
主要使用的證書格式:PEM
PEM(Privacy Enhanced Mail)格式:這是 Linux 平臺上最常用的證書格式,廣泛應用於 Apache、Nginx 等 Web 伺服器,以及 OpenSSL 等工具。

副檔名:通常為 .pem、.crt、.cer、.key。
內容:可以包含證書、公鑰、私鑰、證書鏈等內容

常用場景:Web 伺服器:如 Apache 和 Nginx 使用 .crt 和 .key 檔案來載入證書和私鑰。

     OpenSSL 工具:PEM 格式的證書常用於 OpenSSL 進行各種加密操作。
例子:Apache/Nginx 的 SSL 配置通常會指向 PEM 格式的證書和私鑰檔案

檔案型別和用途:
.crt / .cer:儲存單個證書,可以是 PEM 或 DER 編碼,Linux 上通常使用 PEM 編碼。
.key:儲存私鑰,通常是 PEM 編碼。
.pem:可以包含證書、私鑰、證書鏈等,通常用於綜合儲存。

2. Windows 平臺
主要使用的證書格式:PFX(PKCS#12)
PFX(Personal Information Exchange)格式:在 Windows 平臺上,PFX(或 .p12)格式最常用。它可以包含證書、公鑰、私鑰和證書鏈,並且通常是加密保護的。

編碼形式:二進位制編碼。
副檔名:.pfx 或 .p12。
內容:PFX 檔案可以包含完整的證書鏈、公鑰和私鑰,通常需要密碼來匯入或匯出。

檔案型別和用途:
.pfx / .p12:儲存證書、私鑰和證書鏈,適合 Windows 系統的完整證書包。
.cer / .crt:通常是 DER 編碼的證書檔案,適用於 Windows 系統中單獨的證書匯入。
.der:純二進位制格式的證書檔案,適合 Windows 系統。

各種名詞、檔案的解釋說明:

P10檔案,是指PKCS#10 證書籤名請求(Certificate Signing Request,CSR)檔案。它是一個包含公鑰以及相關資訊的請求檔案,通常用於申請數字證書。
P10 檔案包含以下內容:
  • 公鑰:申請者的公鑰,未來的證書將基於此公鑰生成。
  • 可選的相關資訊:如申請者的身份資訊,包括組織名稱、域名、電子郵件等。
  • 數字簽名:由申請者的私鑰生成的數字簽名,用於驗證 CSR 的完整性和真實性。

 CSR檔案,Certificate Signing Request(證書籤名請求)檔案。用途:用於向證書頒發機構(CA)申請數字證書。CSR 檔案包含申請者的公鑰和申請者的身份資訊,並使用私鑰對這些資訊進行簽名。
  內容:

  • 公鑰:申請者的公鑰。
  • 申請者資訊:組織名稱、部門、國家、州/省、市等。
  • 簽名:由申請者的私鑰生成,用於證明請求的合法性。
CSR檔案和 P10檔案本質上是相同的,P10檔案是 CSR檔案的標準化格式。它們都用於申請數字證書幷包含申請者的公鑰和身份資訊;
P10檔案是 CSR檔案的具體實現格式。
換句話說,CSR檔案和P10檔案是同一種檔案的不同稱謂,P10指的是檔案遵循 PKCS#10標準的格式,而CSR是其常用的名稱。
CSR檔案和 P10檔案通常都是以 .csr 或 .p10 作為副檔名,但它們實際上是相同型別的檔案。

.key 檔案:是一個通用的金鑰檔案格式,可以用於多種加密演算法,廣泛應用於全球範圍內的各種加密場景。
.sm2 檔案:專門用於儲存 SM2 演算法的金鑰,主要在中國國家標準相關的領域和場景中使用。
兩者的主要區別在於所使用的加密演算法和應用場景。

SM3withSM2 的工作原理
當你使用 SM3withSM2 進行數字簽名時,流程如下:
1、雜湊計算(SM3):首先,對需要簽名的訊息(資料)使用 SM3 雜湊演算法生成一個固定長度(256位)的雜湊值。
2、數字簽名(SM2):然後,使用 SM2 私鑰對這個雜湊值進行簽名,生成數字簽名。
3、驗證簽名:接收方使用 SM2 公鑰驗證數字簽名是否有效,驗證透過則說明訊息未被篡改。

數字證書和金鑰的區別:
1. 數字證書的組成
一個數字證書包含以下主要部分:
公鑰:這是證書的核心部分,用於加密資料或驗證簽名。證書持有者的公鑰通常儲存在證書中。
證書主體資訊:包括證書持有者的身份資訊,如組織名稱、個人姓名、電子郵件地址、所在國家等。這些資訊用於識別證書的持有者。
頒發機構資訊:頒發證書的認證機構(CA, Certificate Authority)的名稱和資訊。這表明誰對證書內容的真實性負責。
有效期:證書的生效日期和失效日期,指明證書的有效時間範圍。
證書序列號:由 CA 分配的一個唯一編號,用於識別和管理證書。
簽名演算法:用於簽署證書的加密演算法資訊,通常包括簽名演算法本身和與之相關的引數。
CA 的數字簽名:由頒發機構的私鑰生成的簽名,用於驗證證書的真實性和完整性。這個簽名確保證書內容未被篡改,且確實是由 CA 頒發的。

2. 數字證書 vs 公鑰
公鑰:公鑰是非對稱加密演算法中的一部分,用於加密資料或驗證數字簽名。它本身並沒有與特定身份資訊直接關聯。
數字證書:數字證書將公鑰與證書持有者的身份資訊繫結在一起,並透過 CA 的簽名來驗證其真實性。換句話說,數字證書不僅提供了公鑰,還透過第三方機構(CA)的信任鏈證明了公鑰的所有者是誰。

3. 證書的作用
身份驗證:數字證書透過繫結公鑰和身份資訊來驗證持有者的身份。瀏覽器透過驗證伺服器提供的證書來確認伺服器的身份,從而建立安全的 SSL/TLS 連線。
資料加密:在 SSL/TLS 協議中,證書中的公鑰用於加密會話金鑰,從而確保資料在傳輸過程中保持機密性。
數字簽名:證書持有者可以使用其對應的私鑰對資料進行簽名,接收方可以使用證書中的公鑰來驗證簽名,確保資料的完整性和來源的真實性。

4. 總結
數字證書確實包含公鑰,但它不僅僅是公鑰。它是一個更為複雜的結構,包含公鑰以及與公鑰相關的身份資訊,並由 CA 的簽名來保證其真實性。數字證書在各種加密通訊和身份驗證系統中起著至關重要的作用,是現代網路安全的重要基礎之一。

相關文章