The following is a simplified description of EdDSA, ignoring details of encoding integers and curve points as bit strings; the full details are in the papers and RFC.[4][2][1]
AnEdDSA signature scheme is a choice:[4]: 1–2 [2]: 5–6 [1]: 5–7
ofcryptographic hash function with-bit outputs, where so that elements of and curve points in can be represented by strings of bits.
These parameters are common to all users of the EdDSA signature scheme. The security of the EdDSA signature scheme depends critically on the choices of parameters, except for the arbitrary choice of base point—for example,Pollard's rho algorithm for logarithms is expected to take approximately curve additions before it can compute a discrete logarithm,[5] so must be large enough for this to be infeasible, and is typically taken to exceed2200.[6]The choice of is limited by the choice of, since byHasse's theorem, cannot differ from by more than. The hash function is normally modelled as arandom oracle in formal analyses of EdDSA's security.
Within an EdDSA signature scheme,
Public key
An EdDSA public key is a curve point, encoded in bits.
Signature verification
An EdDSA signature on a message by public key is the pair, encoded in bits, of a curve point and an integer satisfying the following verification equation, where denotesconcatenation:
Private key
An EdDSA private key is a-bit string which should be chosen uniformly at random. The corresponding public key is, where is the least significant bits of interpreted as an integer inlittle-endian.
Signing
The signature on a message is deterministically computed as where for, and This satisfies the verification equation
The original team has optimized Ed25519 for thex86-64Nehalem/Westmere processor family. Verification can be performed in batches of 64 signatures for even greater throughput. Ed25519 is intended to provide attack resistance comparable to quality 128-bitsymmetric ciphers.[9]
Public keys are 256 bits long and signatures are 512 bits long.[10]
Ed25519 is designed to avoid implementations that use branch conditions or array indices that depend on secret data,[2]: 2 [1]: 40 in order to mitigateside-channel attacks.
As with other discrete-log-based signature schemes, EdDSA uses a secret value called anonce unique to each signature. In the signature schemesDSA andECDSA, this nonce is traditionally generated randomly for each signature—and if the random number generator is ever broken and predictable when making a signature, the signature can leak the private key, as happened with theSony PlayStation 3 firmware update signing key.[11][12][13][14]
In contrast, EdDSA chooses the nonce deterministically as the hash of a part of the private key and the message. Thus, once a private key is generated, EdDSA has no further need for a random number generator in order to make signatures, and there is no danger that a broken random number generator used to make a signature will reveal the private key.[2]: 8
Standardization and implementation inconsistencies
Note that there are two standardization efforts for EdDSA, one from IETF, an informationalRFC8032 and one from NIST as part of FIPS 186-5.[15] The differences between the standards have been analyzed,[16][17] and test vectors are available.[18]
Notable uses of Ed25519 includeOpenSSH,[19]GnuPG[20] and various alternatives, and thesignify tool byOpenBSD.[21] Usage of Ed25519 (and Ed448) in the SSH protocol has been standardized.[22] In 2023 the final version of theFIPS 186-5 standard included deterministic Ed25519 as an approved signature scheme.[15]
Ed448 is the EdDSA signature scheme defined inRFC8032 using the hash functionSHAKE256 and the elliptic curveedwards448, an (untwisted)Edwards curve related toCurve448 inRFC7748.Ed448 has also been approved in the final version of the FIPS 186-5 standard.[15]