數位簽章可用來驗證資料是否遭到他人竄改。它可提供已簽署資料的真實性和完整性,但不提供其密碼。這不是對稱式,意味著使用一組金鑰 (公開金鑰和私密金鑰)。
簽名包含下列屬性:
- 真實性:除非有私密金鑰,否則無法建立
PublicKeyVerify.Verify(signature, message)
驗證的簽名。 - 非對稱式:簽署使用的金鑰與驗證金鑰不同。這麼做可讓您將公開金鑰提供給無法自行建立簽名的各方驗證簽名。
如果您不需要非對稱性,請考慮改用更簡單且更有效率的 MAC。
數位簽章的功能會在 Tink 中顯示為一組原始物件:
- 用於簽署資料的 PublicKeySign
- PublicKeyVerify 用於驗證簽名
選擇金鑰類型
大部分用途都建議使用 ECDSA_P256,不過還有許多選擇。一般來說,情況如下:
- ECDSA_P256 是最廣泛使用的選項,也是合理的預設值。請注意,ECDSA 簽名可有效。
- ED25519 會建立確定性簽章,且效能比 ECDSA_P256 更好。
- RSA_SSA_PKCS1_3072_SHA256_F4 會建立確定性簽章,並提供最佳驗證效能 (但簽署速度比 ECDSA_P256 或 ED25519 慢上許多)。
最低安全保證
- 要簽署的資料長度可以任意長度
- 128 位元安全等級,可防範針對橢圓曲線型配置的自動調整選擇訊息攻擊
- 針對 RSA 型配置的自動調整式選擇訊息攻擊,112 位元安全等級 (允許 2048 位元金鑰)
範例應用實例
請參閱「我想為資料加上數位簽署」一節。
可兌換性
簽署配置就十分簡單,如果攻擊者可以為已簽署的訊息建立不同的有效簽名,雖然這在大多數情況下都不是問題,但有時候,程式設計師會間接假設有效的簽名是不重複項目,這可能會導致非預期的結果。