數位簽名

數位簽章可用來驗證資料是否遭到他人竄改。它可提供已簽署資料的真實性和完整性,但不提供其密碼。這不是對稱式,意味著使用一組金鑰 (公開金鑰和私密金鑰)。

簽名包含下列屬性:

  • 真實性:除非有私密金鑰,否則無法建立 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 位元金鑰)

範例應用實例

請參閱「我想為資料加上數位簽署」一節。

可兌換性

簽署配置就十分簡單,如果攻擊者可以為已簽署的訊息建立不同的有效簽名,雖然這在大多數情況下都不是問題,但有時候,程式設計師會間接假設有效的簽名是不重複項目,這可能會導致非預期的結果。