Un esquema de firma consta de tres algoritmos: generación de claves, Sign(sk, m) y Verify(pk, m, σ). El objetivo de seguridad estándar es EUF-CMA: tras ver firmas de mensajes elegidos por él, un atacante sigue sin poder producir una firma válida de ningún mensaje nuevo. La noción más fuerte SUF-CMA también prohíbe producir una segunda firma de un mensaje ya firmado, algo que ECDSA no ofrece (véase maleabilidad).
Una firma no proporciona confidencialidad, frescura (un mensaje firmado válido puede repetirse salvo que lleve un nonce, una marca de tiempo o una audiencia) ni identidad: vincula un mensaje a una clave, y otra cosa (un certificado, un endpoint JWKS, known_hosts, una dirección de blockchain) debe vincular la clave a una persona o un servicio.
Los tamaños van desde 64 bytes (Ed25519, ECDSA P-256 en bruto, BIP-340), pasando por 256–512 bytes (RSA), hasta kilobytes en los esquemas poscuánticos: 2420–4627 bytes en ML-DSA y 7856–49.856 en SLH-DSA. Cada formato envuelve la misma firma de forma distinta: bytes en bruto, DER, JWS, COSE_Sign1, SignedData de CMS, paquetes de firma de OpenPGP, SSHSIG.
Un código de autenticación de mensajes como HMAC también demuestra la integridad, pero con una clave compartida, así que cualquier verificador podría haberlo generado; consulta HMAC frente a firma digital.