Signature numérique
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
La primitive de signature numérique vous permet de vérifier que personne n'a falsifié vos données. Elle garantit l'authenticité et l'intégrité des données signées, mais pas leur confidentialité. Elle est asymétrique, ce qui signifie qu'elle utilise une paire de clés (clé publique et clé privée).
La primitive de signature numérique présente les propriétés suivantes:
- Authenticité: à moins de disposer de la clé privée, il est impossible de créer une signature pour laquelle
PublicKeyVerify.Verify(signature, message)
renvoie une validation.
- Asymétrie: la création de la signature repose sur une clé différente de celle utilisée pour la validation. Cela vous permet, pour valider les signatures, de distribuer la clé publique aux tiers qui ne peuvent pas créer de signatures eux-mêmes.
Si vous n'avez pas besoin d'asymétrie, envisagez d'utiliser la primitive MAC plus simple et plus efficace à la place.
La fonctionnalité des signatures numériques est représentée dans Tink sous la forme d'une paire de primitives:
- PublicKeySign pour signer des données
- PublicKeyVerify pour valider la signature
Choisir un type de clé
Nous vous recommandons d'utiliser ECDSA_P256 pour la plupart des cas d'utilisation, mais il existe de nombreuses options. En règle générale, les éléments suivants sont valables:
- ECDSA_P256 est l'option la plus utilisée et constitue une valeur par défaut raisonnable. Notez toutefois que les signatures ECDSA sont malleables.
- ED25519 crée des signatures déterministes et offre de meilleures performances que ECDSA_P256.
- RSA_SSA_PKCS1_3072_SHA256_F4 crée des signatures déterministes et offre les meilleures performances de validation (mais la signature est beaucoup plus lente que ECDSA_P256 ou ED25519).
Garanties de sécurité minimales
- La longueur des données à signer peut être arbitraire.
- Niveau de sécurité de 128 bits contre les attaques par message choisi adaptatif pour les schémas basés sur les courbes elliptiques
- Niveau de sécurité de 112 bits contre les attaques par message choisi adaptatif pour les schémas basés sur RSA (permet les clés de 2 048 bits)
Malléabilité
Un schéma de signature est malléable si un pirate informatique peut créer une signature valide différente pour un message déjà signé. Bien que cela ne pose pas de problème dans la plupart des cas, dans certains cas, les programmeurs supposent implicitement que les signatures valides sont uniques, ce qui peut entraîner des résultats inattendus.
Exemple d'utilisation
Consultez Signer numériquement des données.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/25 (UTC).
[null,null,["Dernière mise à jour le 2025/07/25 (UTC)."],[[["\u003cp\u003eDigital signatures ensure data integrity and authenticity by verifying that data hasn't been tampered with.\u003c/p\u003e\n"],["\u003cp\u003eThey use a pair of keys (public and private) for asymmetric signing and verification, allowing for secure distribution of the public key.\u003c/p\u003e\n"],["\u003cp\u003eTink provides two primitives for digital signatures: \u003ccode\u003ePublicKeySign\u003c/code\u003e for signing and \u003ccode\u003ePublicKeyVerify\u003c/code\u003e for verifying.\u003c/p\u003e\n"],["\u003cp\u003eECDSA_P256 is generally recommended, with ED25519 offering better performance and RSA_SSA_PKCS1_3072_SHA256_F4 providing the fastest verification.\u003c/p\u003e\n"],["\u003cp\u003eDigital signatures in Tink guarantee a minimum of 112-bit security and support data of any length.\u003c/p\u003e\n"]]],["Digital signatures ensure data authenticity and integrity using asymmetric key pairs (public and private). `PublicKeySign` signs data, while `PublicKeyVerify` checks signatures. Key options include the widely used ECDSA_P256, faster ED25519, and high-verification-performance RSA_SSA_PKCS1_3072_SHA256_F4. Signatures offer 128-bit security (elliptic curves) or 112-bit security (RSA). ECDSA signatures are malleable, allowing attackers to forge valid signatures. If asymmetry is not needed consider using MAC.\n"],null,["# Digital Signature\n\nThe Digital Signature primitive lets you verify that no one has tampered with\nyour data. It provides authenticity and integrity, but not secrecy, of the\nsigned data. It is asymmetric, meaning it uses a pair of keys (public key and\nprivate key).\n\nThe Digital Signature primitive has the following properties:\n\n- **Authenticity** : It is impossible to create a signature for which `PublicKeyVerify.Verify(signature, message)` validates, unless you have the private key.\n- **Asymmetric**: Creating the signature uses a different key than verifying it. This lets you distribute the public key to verify signatures to parties that can't create signatures themselves.\n\nIf you don't need asymmetry, consider using the simpler and more efficient\n[MAC](/tink/mac) primitive instead.\n\nThe functionality of digital signatures is represented in Tink as a pair of\nprimitives:\n\n- *PublicKeySign* for signing data\n- *PublicKeyVerify* for verifying the signature\n\n### Choose a key type\n\nWe recommend using **ECDSA_P256** for most use cases, but there are a variety of\noptions. In general, the following holds true:\n\n- ECDSA_P256 is the most widely used option and a reasonable default. Note though that ECDSA signatures are [malleable](#malleable).\n- ED25519 creates deterministic signatures and provides better performance than ECDSA_P256.\n- RSA_SSA_PKCS1_3072_SHA256_F4 creates deterministic signatures and provides the best verification performance (but signing is much slower than ECDSA_P256 or ED25519).\n\n### Minimal security guarantees\n\n- Data to be signed can have arbitrary length\n- 128-bit security level against adaptive chosen-message attacks for elliptic curve based schemes\n- 112-bit security level against adaptive chosen-message attacks for RSA based schemes (allows 2048-bit keys)\n\n### Malleability\n\nA signature scheme is malleable if an attacker can create a different valid\nsignature for an already signed message. While this is not a problem for most\nscenarios, in some cases programmers implicitly assume that valid signatures are\nunique, and this can lead to unexpected results.\n\n### Example use case\n\nSee I want to [digitally sign data](/tink/digitally-sign-data)."]]