签名方案由三个算法组成:密钥生成、Sign(sk, m) 和 Verify(pk, m, σ)。标准的安全目标是 EUF-CMA:攻击者即使看到了对其自选消息的签名,仍无法为任何新消息生成有效签名。更强的 SUF-CMA 还禁止为已签名的消息生成第二个签名,而 ECDSA 做不到这一点(参见延展性)。
签名不提供机密性,也不提供新鲜性(除非签名消息带有 nonce、时间戳或受众,否则有效的签名消息可以被重放),也不提供身份:签名把消息绑定到密钥,而要把密钥绑定到某个人或服务,还需要别的东西(证书、JWKS 端点、known_hosts、区块链地址)。
签名大小从 64 字节(Ed25519、原始格式的 P-256 ECDSA、BIP-340),到 256~512 字节(RSA),再到后量子方案的数千字节:ML-DSA 为 2,420~4,627 字节,SLH-DSA 为 7,856~49,856 字节。同一个签名在每种格式中的封装方式都不同:原始字节、DER、JWS、COSE_Sign1、CMS SignedData、OpenPGP 签名数据包、SSHSIG。
HMAC 等消息认证码同样能证明完整性,但使用的是共享密钥,因此每个验证者都有可能自己生成它;参见 HMAC 与数字签名。