In
cryptography
Cryptography, or cryptology (from grc, , translit=kryptós "hidden, secret"; and ''graphein'', "to write", or ''-logia'', "study", respectively), is the practice and study of techniques for secure communication in the presence of adve ...
, Curve25519 is an
elliptic curve used in
elliptic-curve cryptography (ECC) offering 128
bits of security (256-bit
key size) and designed for use with the
elliptic curve Diffie–Hellman (ECDH) key agreement scheme. It is one of the fastest curves in ECC, and is not covered by any known patents.
The
reference implementation is
public domain software.
The original Curve25519 paper defined it as a
Diffie–Hellman (DH) function.
Daniel J. Bernstein
Daniel Julius Bernstein (sometimes known as djb; born October 29, 1971) is an American German mathematician, cryptologist, and computer scientist. He is a visiting professor at CASA at Ruhr University Bochum, as well as a research professor of ...
has since proposed that the name Curve25519 be used for the underlying curve, and the name X25519 for the DH function.
Mathematical properties
The curve used is
, a
Montgomery curve In mathematics the Montgomery curve is a form of elliptic curve introduced by Peter L. Montgomery in 1987, different from the usual Weierstrass form. It is used for certain computations, and in particular in different cryptography applications.
De ...
, over the
prime field defined by the
prime number , and it uses the base point
. This point generates a cyclic subgroup whose
order
Order, ORDER or Orders may refer to:
* Categorization, the process in which ideas and objects are recognized, differentiated, and understood
* Heterarchy, a system of organization wherein the elements have the potential to be ranked a number of d ...
is the prime
, this subgroup has a co-factor of
, meaning the number of elements in the subgroup is
that of the elliptic curve group. Using a prime order subgroup prevents mounting a
Pohlig–Hellman algorithm attack.
The protocol uses compressed elliptic point (only ''X'' coordinates), so it allows efficient use of the
Montgomery ladder
Elliptic curve scalar multiplication is the operation of successively adding a point along an elliptic curve to itself repeatedly. It is used in elliptic curve cryptography (ECC) as a means of producing a one-way function.
The literature presents ...
for
ECDH, using only ''XZ'' coordinates.
Curve25519 is constructed such that it avoids many potential implementation pitfalls. By design, it is immune to timing attacks and it accepts any 32-byte string as a valid public key and does not require validating that a given point belongs to the curve, or is generated by the base point.
The curve is
birationally equivalent to a
twisted Edwards curve used in the
Ed25519 signature scheme.
History
In 2005, Curve25519 was first released by
Daniel J. Bernstein
Daniel Julius Bernstein (sometimes known as djb; born October 29, 1971) is an American German mathematician, cryptologist, and computer scientist. He is a visiting professor at CASA at Ruhr University Bochum, as well as a research professor of ...
.
In 2013, interest began to increase considerably when it was discovered that the
NSA had potentially implemented a
backdoor into the P-256 curve based
Dual_EC_DRBG algorithm. While not directly related, suspicious aspects of the NIST's P curve constants led to concerns that the NSA had chosen values that gave them an advantage in breaking the encryption.
Since 2013, Curve25519 has become the ''
de facto'' alternative to P-256, being used in a wide variety of applications. Starting in 2014,
OpenSSH defaults to Curve25519-based
ECDH and
GnuPG adds support for
Ed25519 keys for signing and encryption. Behavior for general SSH protocol is still being standardized as of 2018.
In 2017, NIST announced that Curve25519 and
Curve448 would be added to Special Publication 800-186, which specifies approved elliptic curves for use by the US Federal Government. Both are described in RFC 7748. A 2019 draft of "FIPS 186-5" notes the intention to allow usage of
Ed25519 for digital signatures. A 2019 draft of Special Publication 800-186 notes the intention to allow usage of Curve25519.
In 2018,
DKIM specification was amended so as to allow signatures with this algorithm.
Also in 2018, RFC 8446 was published as the new
Transport Layer Security v1.3 standard. It recommends support for
X25519,
Ed25519,
X448, and
Ed448 algorithms.
Libraries
*
Libgcrypt
* libssh
*
libssh2 (since version 1.9.0)
*
NaCl
*
GnuTLS
*
mbed TLS (formerly PolarSSL)
*
wolfSSL
*
Botan
*
Schannel
*
Libsodium
*
OpenSSL
OpenSSL is a software library for applications that provide secure communications over computer networks against eavesdropping or need to identify the party at the other end. It is widely used by Internet servers, including the majority of HTT ...
since version 1.1.0
*
LibreSSL
* NaCl for Tcl — a port to the Tcl language.
*
NSS since version 3.28
*
Crypto++
Crypto++ (also known as CryptoPP, libcrypto++, and libcryptopp) is a free and open-source C++ class library of cryptographic algorithms and schemes written by Wei Dai. Crypto++ has been widely used in academia, student projects, open-source, and ...
*
curve25519-dalek
In mathematics, a curve (also called a curved line in older texts) is an object similar to a line, but that does not have to be straight.
Intuitively, a curve may be thought of as the trace left by a moving point. This is the definition that a ...
*
Bouncy Castle
Bounce or The Bounce may refer to:
* Deflection (physics), the event where an object collides with and bounces against a plane surface
Books
* Mr. Bounce, a character from the Mr. Men series of children's books
Broadcasting, film and TV
* ' ...
Protocols
*
OMEMO, a proposed extension for
XMPP (Jabber)
*
Secure Shell
*
Signal Protocol
*
Matrix (protocol)
*
Tox
*
Zcash
*
Transport Layer Security
*
Wireguard
Applications
*
Conversations Android application
*
Cryptocat
*
DNSCrypt
*
DNSCurve
*
Dropbear
*
Facebook Messenger
*
Gajim via plugin
*
GNUnet
*
GnuPG
*
Google Allo
*
I2P
*
IPFS
*
iOS
*
Monero
*
OpenBSD
OpenBSD is a security-focused, free and open-source, Unix-like operating system based on the Berkeley Software Distribution (BSD). Theo de Raadt created OpenBSD in 1995 by forking NetBSD 1.0. According to the website, the OpenBSD project em ...
*
OpenSSH
*
Peerio
*
Proton Mail
*
PuTTY
Putty is a material with high plasticity, similar in texture to clay or dough, typically used in domestic construction and repair as a sealant or filler. Although some types of putty (typically those using linseed oil) slowly polymerise and be ...
*
Signal
*
Silent Phone
*
SmartFTP
SmartFTP is a network file transfer program for Microsoft Windows that supports file transfer via FTP, FTPS, SFTP, WebDAV, Amazon S3, Google Drive, Microsoft OneDrive, Box, Google Cloud Storage and Backblaze B2 protocols. It supports SSL/TLS ...
* SSHJ
*
SQRL
*
Threema Instant Messenger
* TinySSH
* TinyTERM
*
Tor
*
Viber
*
WhatsApp
*
Wire
*
WireGuard
Notes
References
External links
*
{{Cryptography public-key
Elliptic curves