相比對稱加密,非對稱密鑰通常用于在信任程度不對等的系統(tǒng)之間,實現(xiàn)數(shù)字簽名驗簽或者加密傳遞敏感信息。

非對稱密鑰由一對公鑰和私鑰組成,他們在密碼學上互相關聯(lián),其中的公鑰可以被分發(fā)給任何人,而私鑰必須被安全的保護起來,只有受信任者可以使用。阿里云支持主流的非對稱密鑰算法并且提供足夠的安全強度,保證數(shù)據(jù)加密和數(shù)字簽名的安全性。

KMS支持對非對稱密鑰類型的用戶主密鑰生成證書簽名請求CSR(Certificate Signing Request)文件,證書申請者提交CSR給證書頒發(fā)機構后,證書頒發(fā)機構使用其CA私鑰為用戶簽發(fā)數(shù)字證書。簽發(fā)的數(shù)字證書可以用于安全電子郵件、安全終端保護、代碼簽名保護、可信網(wǎng)站服務、身份授權管理等。

非對稱密鑰的類型

KMS支持的非對稱密鑰算法類型如下:
算法 密鑰規(guī)格 說明 用途
RSA
  • RSA_2048
  • RSA_3072
RSA非對稱密碼
  • 數(shù)據(jù)的加解密運算
  • 數(shù)字簽名
ECC
  • EC_P256:NIST推薦的橢圓曲線P-256
  • EC_P256K:SECG橢圓曲線secp256k1
橢圓曲線密碼(Elliptic Curve Cryptography) 數(shù)字簽名
SM2 EC_SM2 標準GBT32918定義的橢圓曲線密碼
  • 數(shù)據(jù)的加解密運算
  • 數(shù)字簽名

數(shù)據(jù)加密

非對稱密鑰用于數(shù)據(jù)加密,通常適用于傳遞敏感信息,典型場景如下:
  1. 信息接收者將加密公鑰分發(fā)給信息傳送者。
  2. 信息傳送者使用公鑰對敏感信息進行加密保護。
  3. 信息傳送者將敏感信息的密文傳遞給信息接收者。
  4. 信息接收者使用私鑰將敏感信息的密文解密。

由于解密的私鑰只有信息接收者可以使用,因此可以確保敏感信息的明文在傳遞過程中不被惡意者截獲。這種敏感信息傳遞的方式,被廣泛用于各類密鑰交換場景。例如:在TLS中交換會話密鑰、在不同的密碼機之間導入導出加密密鑰。

更多信息,請參見非對稱數(shù)據(jù)加解密

數(shù)字簽名

非對稱密鑰更廣泛的用途是數(shù)字簽名,即使用私鑰對消息或者信息產(chǎn)生簽名。由于私鑰受到嚴格保護,只有受信者可以使用私鑰來產(chǎn)生簽名,使用公鑰驗證簽名可以實現(xiàn)以下目的:
  • 驗證數(shù)據(jù)的完整性(integrity):如果數(shù)據(jù)和簽名不匹配,數(shù)據(jù)可能受到了篡改。
  • 驗證消息的真實性(authenticity):如果消息和簽名不匹配,消息傳送者不是真實持有私鑰的用戶。
  • 為簽名提供不可抵賴性(non-repudiation):如果數(shù)據(jù)和簽名能夠匹配,簽名者不可以否認此簽名。
典型的簽名驗簽場景如下:
  1. 簽名者將驗簽公鑰分發(fā)給消息接收者。
  2. 簽名者使用簽名私鑰,對數(shù)據(jù)產(chǎn)生簽名。
  3. 簽名者將數(shù)據(jù)以及簽名傳遞給消息接收者。
  4. 消息接收者獲得數(shù)據(jù)和簽名后,使用公鑰針對數(shù)據(jù)驗證簽名的合法性。

數(shù)字簽名被廣泛用于數(shù)據(jù)防篡改、身份認證等相關技術領域。

  • 案例1:數(shù)字簽名用于對二進制代碼提供完整性保護,代碼執(zhí)行者可以驗證代碼未被篡改,以提供可信的執(zhí)行環(huán)境。
  • 案例2:數(shù)字證書系統(tǒng)中,證書機構(CA)對頒發(fā)的數(shù)字證書提供簽名,證明數(shù)字證書的主體信息、公私鑰信息、密鑰用途、有效期、簽發(fā)者等信息。證書私鑰持有者使用私鑰對消息進行簽名,消息接收者使用證書中包含的公鑰對消息簽名進行驗證,同時使用證書簽發(fā)者的公鑰,驗證證書本身的合法性。

更多信息,請參見非對稱數(shù)字簽名

密鑰版本

由于公私鑰使用場景的特殊性,KMS不支持對非對稱的用戶主密鑰進行自動輪轉(zhuǎn)。您可以調(diào)用CreateKeyVersion接口,在指定用戶主密鑰中創(chuàng)建新的密鑰版本,生成全新的一對公鑰和私鑰。如果您使用新的版本進行數(shù)字簽名或者數(shù)據(jù)加密,則需要重新分發(fā)新版本的公鑰。

除此之外,和對稱類型的用戶主密鑰不同,非對稱的用戶主密鑰沒有主版本(PrimaryKeyVersion)的概念,因此使用非對稱密碼運算的接口除需指定用戶主密鑰標志符(或別名)之外,還需指定密鑰版本。

公鑰運算的方式

大多數(shù)情況下,公鑰加密、公鑰驗簽的操作,都可以調(diào)用GetPublicKey接口獲取公鑰,之后分發(fā)給公鑰使用者。使用者在業(yè)務端通過OpenSSL、Java JCE等常用的密碼運算庫進行本地計算。

KMS也提供公鑰運算的接口AsymmetricEncryptAsymmetricVerify,滿足您的業(yè)務需求。和在業(yè)務端使用公鑰本地運算相比,調(diào)用KMS的公鑰運算接口可以幫助您更方便的記錄調(diào)用日志,或者通過訪問控制服務對公鑰的使用場景進行一些限制,滿足您的特定需求。

私鑰運算的方式

您僅能通過KMS提供的私鑰運算的接口AsymmetricDecryptAsymmetricSign,來使用私鑰進行數(shù)據(jù)解密或者數(shù)字簽名。