數位簽章基本類型可讓您驗證資料是否遭到竄改。簽署資料可確保真實性和完整性,但無法保密。這項技術屬於非對稱式,也就是使用一對金鑰 (公開金鑰和私密金鑰)。
數位簽章基本體具有下列屬性:
- 真實性:除非您擁有
私密金鑰
PublicKeyVerify.Verify(signature, message),否則無法建立通過驗證的簽章。 - 非對稱式:建立簽章時使用的金鑰與驗證簽章時不同。這樣一來,您就能將公開金鑰發布給無法自行建立簽章的各方,以驗證簽章。
如果不需要非對稱性,請考慮改用更簡單且有效率的 MAC 基本類型。
Tink 中的數位簽章功能是以一對基本體表示:
- PublicKeySign,用於簽署資料
- 用於驗證簽章的 PublicKeyVerify
如果私密金鑰位於訊息無法輕易傳送到的位置 (例如 HSM 或 KMS),請參閱「Prehash 和 SignPrehash」,瞭解如何將簽署作業分成僅限公開金鑰的雜湊步驟,以及僅限私密金鑰的簽署步驟。
選擇車鑰類型
我們建議在多數情況下使用 ML_DSA_44 或 ECDSA_P256,但您也可以選擇其他選項。一般來說,下列情況成立:
- ML-DSA-44 具有量子安全防護功能。我們正積極導入這項功能,目前建議在支援的程式設計語言中使用。
對於下列非後量子演算法,您可能在不久的將來就必須變更金鑰類型。
- ECDSA_P256 是最廣泛使用的選項,也是合理的預設值。請注意,ECDSA 簽章是可延展的。
- ED25519 會建立確定性簽章,且效能優於 ECDSA_P256。
- RSA_SSA_PKCS1_3072_SHA256_F4 會建立決定性簽章,並提供最佳驗證效能 (但簽署速度遠慢於 ECDSA_P256 或 ED25519)。
最低安全保障
- 待簽署的資料長度不限
- 針對以橢圓曲線為基礎的架構,提供 128 位元安全等級,防範自適性所選訊息攻擊
- 針對以 RSA 為基礎的架構,提供 112 位元安全等級,防範自適性所選訊息攻擊 (允許 2048 位元金鑰)
延展性
如果攻擊者可以為已簽署的訊息建立不同的有效簽章,簽章機制就會遭到竄改。在大多數情況下,這不會造成問題,但在某些情況下,程式設計師會隱含地假設有效簽章是獨一無二的,這可能會導致非預期的結果。
用途範例
請參閱「我想以數位方式簽署資料」。