Un schéma de signature se compose de trois algorithmes : la génération de clés, Sign(sk, m) et Verify(pk, m, σ). L’objectif de sécurité standard est EUF-CMA : même après avoir vu des signatures de messages de son choix, un attaquant ne peut toujours pas produire de signature valide pour un nouveau message. La notion plus forte SUF-CMA interdit en outre de produire une seconde signature d’un message déjà signé, ce qu’ECDSA ne garantit pas (voir malléabilité).
Une signature n’apporte ni confidentialité, ni fraîcheur (un message signé valide peut être rejoué s’il ne contient pas de nonce, d’horodatage ou d’audience), ni identité : elle lie un message à une clé, et autre chose (un certificat, un point de terminaison JWKS, known_hosts, une adresse de blockchain) doit lier la clé à une personne ou à un service.
Les tailles vont de 64 octets (Ed25519, ECDSA P-256 brut, BIP-340) à plusieurs kilo-octets pour les schémas post-quantiques (de 2420 à 4627 octets pour ML-DSA, de 7856 à 49 856 pour SLH-DSA), en passant par 256 à 512 octets pour RSA. Chaque format enveloppe différemment la même signature : octets bruts, DER, JWS, COSE_Sign1, SignedData de CMS, paquets de signature OpenPGP, SSHSIG.
Un code d’authentification de message comme HMAC prouve lui aussi l’intégrité, mais avec une clé partagée, si bien que chaque vérificateur aurait pu le produire ; voir HMAC vs signatures numériques.