數位簽名
數位簽章可用來驗證資料是否遭到他人竄改。它可提供已簽署資料的真實性和完整性,但不提供其密碼。這不是對稱式,意味著使用一組金鑰 (公開金鑰和私密金鑰)。
簽名包含下列屬性:
- 真實性:除非有私密金鑰,否則無法建立
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 位元金鑰)
範例應用實例
請參閱「我想為資料加上數位簽署」一節。
可兌換性
簽署配置就十分簡單,如果攻擊者可以為已簽署的訊息建立不同的有效簽名,雖然這在大多數情況下都不是問題,但有時候,程式設計師會間接假設有效的簽名是不重複項目,這可能會導致非預期的結果。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2023-12-01 (世界標準時間)。
[null,null,["上次更新時間:2023-12-01 (世界標準時間)。"],[[["Digital signatures ensure data integrity and authenticity by verifying that data hasn't been tampered with."],["They use a pair of keys (public and private) for asymmetric signing and verification, allowing for secure distribution of the public key."],["Tink provides two primitives for digital signatures: `PublicKeySign` for signing and `PublicKeyVerify` for verifying."],["ECDSA_P256 is generally recommended, with ED25519 offering better performance and RSA_SSA_PKCS1_3072_SHA256_F4 providing the fastest verification."],["Digital signatures in Tink guarantee a minimum of 112-bit security and support data of any length."]]],[]]