Fact-checked by Grok 2 weeks ago

Curve25519

Curve25519 is a Montgomery-form elliptic curve defined over the finite field \mathbb{F}_p with prime p = 2^{255} - 19, specified by the equation y^2 = x^3 + 486662x^2 + x, and optimized for secure, high-speed elliptic-curve Diffie-Hellman key exchange. Introduced by cryptographer Daniel J. Bernstein in 2006, it prioritizes computational efficiency through ladder-based scalar multiplication, enabling constant-time operations that mitigate side-channel attacks such as timing leaks. The curve's design avoids cofactor issues by selecting a base point of small order and a twist-secure form, providing approximately 128 bits of security against generic attacks while resisting advanced threats like the MOV reduction via deliberate field and parameter choices. Bernstein's implementation achieved unprecedented speeds—over 10 million cycles for a full on contemporary hardware—surpassing prior elliptic-curve proposals by leveraging field arithmetic tailored to 256-bit primes and Montgomery's projective coordinates for doubled efficiency in x-coordinate-only computations. Unlike NIST-standardized curves, which have faced scrutiny for opaque constant selection potentially vulnerable to unforeseen weaknesses, Curve25519 employs transparently chosen parameters derived from first-principles security criteria, including complete torsion subgroup exposure and resistance to exceptional attacks, as outlined in Bernstein's SafeCurves framework. This focus on verifiable safety and performance has driven its integration into production systems, though its non-standard status initially required protocol adaptations like the X25519 encoding for interoperability. The curve's defining characteristics include deliberate avoidance of endomorphism optimizations that could introduce implementation pitfalls, emphasis on across architectures, and freedom from encumbrances, positioning it as a robust alternative in an era of growing concerns over state-influenced standards. Over the subsequent decade, empirical benchmarks confirmed its superiority in real-world deployments, with scalar multiplications completing in under a million cycles on modern processors, underscoring its role in advancing practical post-quantum-resistant cryptography precursors.

Mathematical Foundation

Curve Equation and Parameters


Curve25519 is defined as the elliptic curve with equation v^2 = u^3 + 486662\, u^2 + u, where points (u, v) lie in the \mathbb{F}_p with prime p = 2^{255} - 19. The curve parameter A = 486662 in the standard form v^2 = u^3 + A u^2 + u (with implicit B = 1) was selected to optimize computational efficiency while maintaining security.

The field prime p = 2^{255} - 19 enables efficient , particularly for 64-bit processors, due to its proximity to a power of 2, facilitating fast reduction techniques. For the X25519 Diffie-Hellman function, the base point has u-coordinate u = 9. The full curve order is \#E(\mathbb{F}_p) = 8 \times (2^{252} + 27742317777372353535851937790883648493), where the cofactor is 8 and the prime-order subgroup is used in cryptographic operations to avoid small-subgroup attacks.

Montgomery Form and Birationally Equivalent Edwards Curve

Curve25519 is defined using the curve equation y^2 = x^3 + 486662 x^2 + x, which is a specific instance of the general form B y^2 = x^3 + A x^2 + x with parameters A = 486662 and B = 1, defined over the prime field \mathbb{F}_p where p = 2^{255} - 19. This form facilitates efficient computation of scalar multiples via the ladder, leveraging differential addition and doubling formulas that only require x-coordinates, thereby supporting high-speed Diffie-Hellman while enabling resistance to side-channel attacks through constant-time operations. The curve is birationally equivalent to a known as edwards25519, given by the equation -x^2 + y^2 = 1 + d x^2 y^2, where d = -\frac{121665}{121666} \pmod{p}, equivalent to the integer value 370957059031258130134318665695236795475621351106618330736939142508548416025 modulo p. This Edwards form supports complete, unified addition laws that are exceptionally fast and provably secure against various fault and side-channel attacks, making it suitable for schemes. The birational equivalence between the and twisted Edwards representations maps points while preserving the group law up to , excluding the points of order 2, via explicit birational transformations such as x = \frac{u+1}{u-1} \cdot \frac{1}{v} and y = \frac{v(u+1)}{u-1} (adjusted for the specific parameters), allowing the same underlying to underpin both X25519 for and Ed25519 for signatures without altering the security parameters. This duality enhances interoperability and efficiency in cryptographic protocols by enabling shared curve parameters across different algorithmic needs.

Prime Field and Coordinate Systems


Curve25519 operates over the prime field \mathbb{F}_p, where p = 2^{255} - 19. This 255-bit prime facilitates high-speed modular reduction, as field elements can be stored in five 64-bit (51-bit) limbs, with arithmetic leveraging the structure p \equiv 19 \pmod{2^{255}} for efficient carrying and borrowing in additions and multiplications.
The curve form v^2 = u^3 + 486662 u^2 + u enables x-coordinate-only , where points are identified by their u-coordinate (the affine x-value). Public keys in X25519 consist of 32-byte little-endian encodings of this u-coordinate. Computations employ projective coordinates (X : Z), with u = X / Z, allowing the Montgomery ladder to execute doublings and additions via multiplications and squarings without intermediate inversions, thus minimizing timing variations and enhancing resistance to side-channel attacks. Conversion to affine u-coordinates at the end requires a single inversion after ladder steps.

Design Principles and Security Rationale

Parameter Selection Process

The prime characteristic p = 2^{255} - 19 was selected for its proximity to a power of 2, enabling efficient modular reduction via comparisons and subtractions rather than full division, while providing approximately 128 bits of security against generic attacks such as Pollard's rho, which require about $2^{128} operations. This choice avoids extension fields, reducing and potential vulnerabilities associated with them. The curve equation y^2 = x^3 + 486662 x^2 + x over \mathbb{F}_p uses A = 486662, chosen such that (A - 2)/4 = 121665 is small to optimize the differential addition formulas in the for , enhancing without sacrificing . systematically searched for this value by incrementing candidates where (A - 2) is divisible by 4, verifying that the curve's group order factors as \#E(\mathbb{F}_p) = 8q with q = 2^{252} + 27742317777372353535851937790883648493 a 252-bit prime, and the twist's order similarly factors into a small cofactor times another large prime, ensuring resistance to twist attacks and small-subgroup confinement. This verifiable process contrasts with less transparent selections for other curves, allowing independent confirmation of smoothness and properties. The base point for X25519 uses x-coordinate 9, selected as a small of the prime-order of q, facilitating efficient starting points in the without introducing weaknesses. The cofactor h=8 introduces minor risks like invalid curve attacks, but these are mitigated by clamping of scalars to multiples of 8 and validation steps, prioritizing the curve's overall speed and over a cofactor of 1. These parameters collectively ensure conjectured 128-bit under the hardness of the decisional Diffie-Hellman problem on the , with no known subexponential attacks applicable due to the prime field and avoided special forms like supersingular curves. Independent verifications have confirmed the primality of p and q, as well as the order computations, supporting the design's rigor.

Resistance to Known Attacks

Curve25519 provides approximately 128 bits of security against the problem (ECDLP), as determined by Pollard's rho complexity, due to its prime order group of size roughly $2^{252} and the absence of known subexponential attacks such as or Frey-Rück reductions, stemming from deliberate parameter selection to minimize embedding degree and ensure a large prime-order on the . The 's form v^2 = u^3 + 486662 u^2 + u facilitates the ladder for , which executes in constant time when implemented without conditional branches dependent on secret data, thereby resisting timing attacks that exploit variable computation paths. This design choice, combined with differential addition formulas that avoid full projective coordinates, also mitigates cache-timing and simple side-channel attacks, provided the implementation avoids secret-dependent memory accesses or table lookups. To counter small subgroup attacks, such as those exploiting low-order points in the group (e.g., order-2, order-4, or order-8 elements present due to the cofactor 8), X25519 protocols the scalar by masking its bits—setting the lowest three bits to zero, the second-highest bit to one, and clearing the highest bit—to ensure multiples stay within the large prime-order , while public key validation rejects points of small order or on the . This prevents leakage of partial scalar bits via invalid curve or small confinement, as an attacker supplying a low-order point would yield a predictable response distinguishable from a uniform group element. Invalid curve attacks are thwarted by the rigid parameter generation process, which avoids curves vulnerable to anomalous or supersingular properties, and by the recommendation to verify public keys lie on the via or . The curve resists known fault injection attacks through the inherent checks in the ladder implementation, where injected faults during computation lead to detectable inconsistencies in the final output, though full requires explicit steps. No efficient pairing-based attacks apply, as the embedding exceeds practical bounds for 128-bit , and the absence of efficient endomorphisms or isogenies precludes advanced attacks like those on GLV curves. Overall, Curve25519's design prioritizes "nothing-up-my-sleeve" parameters—derived from small seeds like A = 486662 from $2^5 \cdot (2^{255} - 19) + 1—to eliminate backdoors and ensure transparency against algebraic attacks, with no cryptanalytic breakthroughs reported as of 2024 despite extensive scrutiny. Implementations remain the primary vulnerability vector, necessitating constant-time coding to preserve these resistances.

Performance Optimizations

The performance of Curve25519 derives from its curve form, which supports efficient x-coordinate-only arithmetic for Diffie-Hellman , obviating the need for y-coordinate recovery or decompression during . This model uses specialized differential addition and doubling formulas that are complete—free of exceptional cases requiring conditional branching—thus enabling straightforward, uniform computations. Scalar multiplication is performed via the Montgomery ladder, a fixed sequence of 255 doublings followed by 255 additions (or vice versa, depending on bit processing order), which avoids table lookups, precomputations, or irregular branching patterns that could introduce overhead or vulnerabilities. The algorithm's regularity facilitates constant-time implementations, balancing speed with resistance to side-channel attacks without relying on costly countermeasures like blinding. The prime \mathbb{F}_p with p = 2^{255} - 19 optimizes , as numbers slightly exceeding p can be reduced efficiently by subtracting multiples of 19 shifted by 255 bits, leveraging the prime's structure for low-overhead reductions in and squarings. ![{\displaystyle 2^{255}-19}][inline] Curve parameters, including the coefficient 486662, were selected to yield small integers in equations, minimizing costs while ensuring the curve's security properties. These design elements yielded record speeds upon introduction, with a full Diffie-Hellman exchange (two scalar multiplications) completing in 832,457 cycles on a 500 MHz or 640,838 cycles on a .

Historical Development

Initial Proposal by

proposed Curve25519 on February 9, 2006, through the paper "Curve25519: new Diffie-Hellman speed ," introducing an tailored for efficient, secure elliptic curve Diffie-Hellman (ECDH) . The curve employs Montgomery form, defined by the equation y^2 = x^3 + 486662x^2 + x, over the prime field \mathbb{F}_p with p = 2^{255} - 19. This choice of parameters supports 32-byte keys while targeting conjectured security beyond 128 bits against generic attacks, with the curve's order exceeding $2^{252}. The design prioritized performance, achieving record speeds such as 832,457 cycles for a full ECDH computation on a 1.20 GHz Pentium III processor—approximately twice as fast as contemporaneous high-security alternatives. Security features include resistance to timing attacks via constant-time operations and mitigation of small-subgroup attacks due to the prime group order $2^{252} + 27742317777372353535851937790883648493, eliminating the need for explicit key validation. Parameters were selected to withstand known elliptic curve vulnerabilities, including twist attacks and low embedding degree, ensuring no efficient general attacks. Implementation relied on an x-coordinate-only Montgomery ladder for , optimized in the qhasm assembly language generator to enforce uniform execution paths across platforms like x86, thereby enhancing side-channel resistance without conditional branches. This approach facilitated straightforward integration into cryptographic protocols while maintaining high throughput for authentication and encryption primitives.

Evolution to X25519 and Ed25519

The original Curve25519 proposal by in 2006 defined a Montgomery-form over the prime field modulo $2^{255} - 19, optimized for high-speed via a ladder algorithm that computes using only x-coordinates. This design emphasized constant-time operations to resist timing attacks and achieved record performance, such as 832457 cycles for a 256-bit on a 2.6 GHz 4. Initially, the term "Curve25519" encompassed both the curve parameters and the specific DH function, without formal separation. To clarify nomenclature and enable broader cryptographic applications, later distinguished the underlying as Curve25519 and the DH function as X25519, reflecting its exclusive use of x-coordinate arithmetic for . This evolution addressed the need for precise specifications, culminating in 7748 (published January 2016), which standardized X25519 as a 256-bit Diffie-Hellman function with explicit encoding rules, scalar clamping (e.g., masking the most significant bit and clearing lower bits for ), and test vectors to ensure . X25519's design retained the original curve's resistance to small-subgroup attacks by rejecting invalid inputs implicitly through the ladder, while prioritizing software efficiency over hardware-specific optimizations. Parallel to this refinement, and collaborators introduced Ed25519 in 2011 as a signature scheme on the birationally equivalent Edwards-form curve -x^2 + y^2 = 1 + d x^2 y^2 with d = -121665/121666, leveraging complete Edwards addition formulas for verifiable constant-time computations and misuse resistance. Ed25519 employed a deterministic variant of Schnorr signatures with SHA-512 hashing, achieving signing speeds up to 50,000 signatures per second on a 2.8 GHz Core i7, far surpassing contemporary ECDSA implementations. This addressed limitations of the form, which lacks efficient complete point addition for signatures, thus extending Curve25519's model—estimated at 128 bits against generic attacks—to digital signatures without introducing new vulnerabilities like those in randomized schemes. Formal standardization followed in 8032 (January 2017), specifying Ed25519's encoding, batch , and prehash options for larger messages. Both X25519 and Ed25519 have since seen widespread adoption in protocols like TLS 1.3 due to their audited implementations and provable properties.

Standardization and NIST Approval

The X25519 elliptic curve Diffie-Hellman key exchange, utilizing in Montgomery form, was standardized by the (IETF) in 7748, published on January 26, 2016, which specifies the curve parameters and protocol details for interoperability in protocols such as TLS. Complementing this, the Ed25519 , based on the birationally equivalent Edwards form of Curve25519, was defined in 8032, published on January 25, 2017, establishing deterministic signing procedures and verification methods for broad cryptographic applications. Subsequent IETF specifications, including 8031 (December 2016) for IKEv2 key agreement and 8734 (February 2020) for , further integrated Curve25519 variants into protocols like and secure messaging. NIST first signaled intent to approve Curve25519 in late 2017, announcing its inclusion alongside in forthcoming guidelines for domain parameters to address demands for high-performance, secure primitives beyond traditional NIST curves. This process advanced through drafts of Special Publication (SP) 800-186, culminating in the final release on February 3, 2023, which explicitly defines Curve25519 parameters (with prime field modulus $2^{255} - 19) and permits its use in approved key-establishment schemes via Montgomery ladder computations, emphasizing resistance to side-channel attacks. Concurrently, Information Processing Standard (FIPS) 186-5, also issued February 3, 2023, incorporates Ed25519 as an approved signature algorithm under Edwards-curve (EdDSA), specifying 256-bit security levels and requiring strict parameter validation. These approvals enable FIPS 140-validated modules to employ Curve25519 derivatives, bridging prior non-FIPS deployments in open protocols with federal compliance requirements, though legacy modules may still favor Weierstrass-form alternatives.

Algorithms and Key Exchange

X25519 Diffie-Hellman Protocol

X25519 defines an Elliptic Curve Diffie-Hellman (ECDH) key agreement protocol employing the Curve25519 elliptic curve, which operates over the finite field modulo the prime p = 2^{255} - 19. The function computes the x-coordinate of the result of scalar multiplication on the curve using a Montgomery ladder algorithm, enabling two parties to derive a shared 32-octet secret value over an insecure channel without transmitting private keys. This design prioritizes high-speed computation and resistance to timing attacks through constant-time operations, with the protocol standardized to support 128 bits of security against classical adversaries. In the protocol, each participant generates a uniformly random 32-octet private key scalar. This scalar undergoes clamping to fit the secure range: the three least significant bits are cleared (s{{grok:render&&&type=render_inline_citation&&&citation_id=0&&&citation_type=wikipedia}} \land= 248), the most significant bit is set to 1, and the second-most significant bit is cleared (s{{grok:render&&&type=render_inline_citation&&&citation_id=31&&&citation_type=wikipedia}} \land= 127; s{{grok:render&&&type=render_inline_citation&&&citation_id=31&&&citation_type=wikipedia}} \lor= 64). The public key is then derived by applying the to the clamped scalar and the fixed base point with u-coordinate 9, yielding a 32-octet x-coordinate value. The base point selection of u=9 corresponds to the smallest positive where the curve equation admits a point with even y-coordinate, facilitating efficient ladder computations without full point decompression. Parties exchange their 32-octet public keys. The is computed by each applying X25519 to their clamped scalar and the peer's public value, producing identical 32-octet x-coordinates due to the of multiplication. The X25519 accepts arbitrary 32-octet inputs for the point without validation or decoding, as the form and ladder ensure that invalid points do not leak scalar information or enable small-subgroup attacks. This contrasts with protocols on Weierstrass curves, where point validation is typically required to mitigate risks like invalid curve attacks. The resulting shared secret serves as raw material for key derivation functions, such as , in higher-level protocols, but must not be used directly for symmetric encryption due to potential malleability in the x-coordinate output. X25519 avoids coordinate recovery of the full point (), outputting only x to minimize side-channel exposure and simplify implementation. The protocol's specification in RFC 7748, published in January 2016, mandates these exact steps for and security.

Ladder Implementation for Constant-Time Computation

The Montgomery ladder is the core algorithm employed for in the X25519 on Curve25519, enabling computation of the x-coordinate of k * P without revealing the scalar k through timing variations or other side-channel leaks. This method leverages the curve form y^2 = x^3 + 486662x^2 + x over the prime field \mathbb{F}_p where p = 2^{255} - 19, allowing operations solely on x-coordinates (u-coordinates in Montgomery notation) via projective representations (x/z) to defer inversions until the end. The ladder performs 255 doublings and up to 255 additions in a fixed sequence, processing scalar bits from most to least significant, which inherently resists simple (SPA) by maintaining a uniform ladder structure regardless of bit values. Constant-time execution is achieved by eliminating conditional branches dependent on secret data, such as scalar bits, through the use of a constant-time conditional swap (cswap) operation. In the cswap, values are selected via masking—e.g., for bits b, compute (1-b) * x + b * x—rather than if-statements or variable indexing, adding minimal overhead (approximately 6% of total cycles in reference implementations) while ensuring no data-dependent execution paths or timings. This counters timing attacks, including those exploiting or behavior, as verified in high-speed implementations achieving under 100,000 cycles on contemporary processors without input-dependent variations. The algorithm initializes with the input u-coordinate as x1 = u, x2 = , z2 = 0 (representing the point at infinity in projective form), and auxiliary x3 = u, z3 = . For each bit position t from 254 downto 0, it performs a cswap on (x3, z3) and (x2, z2) conditioned on the t-th bit of the scalar k (clamped to 254 bits with specific bit constraints for ); then computes intermediate values A = x2 + z2, B = x2 - z2, followed by AA = A², BB = B², E = AA - BB, and C = x1 * BB (with constant a24 = 121665/8 incorporated as D = (y² - x³)/u x z, but simplified in ladder steps). Updates proceed as x3 = (x1 * A + C * B)² - (x1 * A - C * B)² adjusted via E, z3 via similar, x2 = AA * BB, and z2 = E * (AA + a24 * E), ensuring all operations are field additions, subtractions, and multiplications modulo p. After the loop, the result is x2 * (z2)^{p-2} modulo p, computed via a fixed sequence of 254 squarings and 11 multiplications for inversion. Implementations optimize arithmetic using 64-bit limbs (16 limbs per ) with carry propagation designed for constant-time modular , avoiding secret-dependent shifts. The full process requires exactly 255 iterations independent of k, with each step executing 10-12 multiplications, yielding high performance (e.g., 3.4 × 10^5 cycles on at 2.4 GHz) while preserving security against by uniform operation counts. RFC 7748 mandates this ladder for interoperability, with reference code provided for validation, emphasizing cswap's role in preventing bit-specific shortcuts.

Key Generation and Validation Procedures

In X25519, private keys are generated from 32 octets of cryptographically secure random , interpreted as a little-endian and then clamped to ensure the scalar lies in the range suitable for Montgomery ladder on Curve25519. Clamping involves clearing the three least significant bits of the first octet (equivalent to AND with 248), clearing the most significant bit of the last octet (AND with 127), and setting the second-most significant bit of the last octet (OR with 64), yielding a scalar of the form $2^{254} + 8m for m < 2^{251}. This step multiplies the scalar by the curve's cofactor 8, mapping it to the prime-order subgroup and mitigating small-subgroup attacks without requiring public-key validation. Public keys are computed by applying the X25519 function—using a constant-time ladder—to the clamped private key scalar and the base point with u-coordinate 9: u = x(k \cdot (9, 1)), where (9, 1) is at infinity projected. The resulting 32-byte little-endian u-coordinate forms the public key, with its most significant bit masked to zero; implementations must accept non-canonical encodings reduced modulo p = 2^{255} - 19. No explicit public-key validation is performed in standard X25519 Diffie-Hellman usage, as invalid inputs (e.g., small-order points) produce the (u=0) in shared-secret computations, rendering attacks ineffective due to the ladder's design and clamping. Optional post-computation checks may verify that shared secrets are non-zero to detect such cases. For Ed25519 signatures on the isomorphic Edwards form of , private-key seeds are similarly 32 random octets, hashed via SHA-512 to produce a 64-octet digest h, from which the scalar s is derived by pruning the first 32 octets: clear bits 0–2, set bit 254 to 1, and clear bit 255. The public is then B, where B is the Edwards base point, encoded as the 32-byte little-endian y-coordinate with the most significant bit set to the of the x-coordinate. decoding during operations implicitly validates points by rejecting those failing curve equations, but generation assumes secure and does not include additional checks. These procedures prioritize constant-time operations to resist timing and side-channel attacks, with random sources required to be unpredictable and uniformly distributed. Implementations deviating from clamping risk exposure to invalid-curve or small-subgroup confinement, though Curve25519's twist security reduces such vulnerabilities compared to .

Implementations and Libraries

Reference Implementations

The original of Curve25519, released by in September 2005, is a compact C library consisting of approximately 16 KB of compiled code for x86 platforms such as and processors. This provides the core curve25519 function for computing a user's public key or from a 32-byte secret key via Montgomery ladder , emphasizing high speed and resistance to timing attacks through constant-time operations. It includes basic field arithmetic over the prime field modulo $2^{255} - 19 and supports integration by compiling with standard tools like at optimization level -O2, though early versions lack full platform optimizations and additional utilities like key clamping or expansion, which were planned for future releases. Bernstein's benchmark suite hosts verified reference and high-performance implementations of Curve25519 (under crypto_scalarmult/curve25519), including a portable variant for cross-platform verification and assembly-optimized code for architectures like AMD64. These implementations, also in the , achieve record-setting speeds—such as under 100,000 cycles for on contemporary hardware—and serve as a for auditing other libraries, with the portable code prioritizing simplicity and correctness over peak performance. Developers are directed to for testing interoperability and performance, ensuring outputs match the deterministic function defined in Bernstein's 2006 paper. For the birationally equivalent twisted Edwards form used in Ed25519 signatures, the in (crypto_sign/ed25519) includes a slow but portable reference (ref) alongside faster assembly variants like amd64-51-30k ( $2^{51}, 30 KB table) and amd64-64-24k ( $2^{64}, 24 KB table), all and selectable automatically in libraries like NaCl. This ref10 code, widely ported and audited, implements uniform Edwards ladder operations for signing and verification, providing a verifiable foundation for Curve25519-based systems while avoiding side-channel leaks through careful arithmetic. A supplementary slow implementation exists for educational purposes but lacks production hardening.

Integration in Major Cryptographic Suites

OpenSSL integrated support for X25519, enabling Diffie-Hellman key exchange over Curve25519, in version 1.1.0, released on August 25, 2016. This addition allows key generation via commands like openssl genpkey -algorithm x25519 and compatibility with RFC 7748 for elliptic curve operations. BoringSSL, Google's customized fork of OpenSSL used in Chrome, Android, and related projects, incorporates Curve25519 primitives directly in its API, supporting X25519 for secure key exchanges in TLS handshakes and other contexts. The libsodium library, a portable implementation of the NaCl , natively relies on Curve25519 for core functions like (crypto_scalarmult_curve25519) and building blocks, as part of its design since its initial stable release in 2013. This integration emphasizes simplicity and resistance to side-channel attacks through constant-time operations. NSS, Mozilla's cryptographic toolkit powering and other applications, added a formally verified Curve25519 implementation for 64-bit systems in version 3.33, enhancing operations while removing disable flags. , optimized for and devices, supports Curve25519 , , and blinding for side-channel resistance, introduced progressively around 2016 with ongoing performance enhancements.
LibraryInitial SupportKey Features Supported
BotanVersion 1.10+ (circa 2013)X25519 key agreement via dedicated headers
Bouncy CastleVersion 1.51+ (2014)Curve25519 elliptic operations and key handling in

Side-Channel Protections in Practice

Curve25519's , central to X25519 , employs the Montgomery ladder algorithm, which executes a fixed pattern of doublings and additions regardless of the secret scalar, inherently mitigating simple timing and attacks when combined with constant-time arithmetic operations. This design choice, specified in RFC 7748, facilitates implementations that avoid data-dependent branches by using uniform iteration counts—exactly 255 steps for 255-bit scalars—and projective coordinates to prevent divisions or inversions that could leak information. Reference implementations, such as those provided by , further enforce constant-time behavior through conditional swaps that select between points without branching on secret data, verifiable via tools like valgrind's callgrind for cache timing. In software libraries, protections extend to field arithmetic layers, where multiplications and reductions modulo the prime $2^{255} - 19 use algorithms like Feistel network-based reductions that process limbs in fixed order, resisting differential power analysis (DPA) without explicit masking. For instance, libsodium's implementation achieves constant-time X25519 by integrating these primitives, with empirical tests showing no measurable timing variance across scalar inputs on processors as of 2014 benchmarks. However, not all deployments are immune; a 2021 analysis demonstrated that unprotected Ed25519 implementations in libraries like could leak key bits via convolutional neural network-trained models on power traces, recovering scalars after 100-500 traces under controlled conditions, underscoring the need for verified constant-time audits. Hardware realizations on FPGAs amplify these protections through dedicated logic for steps, often incorporating implementations or masking to counter higher-order DPA, with reported cycles of 1.2 million for X25519 on Virtex-7 devices in 2018, balancing security and throughput. For Ed25519 signatures, practical resistance relies on or signed comb methods for nonce-independent computations, but real-world vulnerabilities arise from non-constant-time or ; a 2020 study on Cortex-M4 confirmed that side-channel-resistant variants using these methods reduce signing latency by up to 52% compared to earlier works while maintaining DPA resilience via fixed-point . Despite the curve's facilitative design, empirical attacks highlight that ultimate security hinges on diligence, with ongoing research emphasizing of constant-time properties over reliance on design alone.

Protocols and Standards

RFC Specifications

RFC 7748, published in January 2016, provides the core specification for Curve25519 as part of the X25519 elliptic curve Diffie-Hellman key exchange function. The document defines Curve25519 over the prime field GF(p) where p = 2^{255} - 19, using the Montgomery curve equation y² = x³ + 486662 x² + x, with the base point having x-coordinate 9. It specifies 32-byte private keys, which are clamped by clearing the lowest three bits, setting the second-highest bit, and masking to 255 bits to ensure security properties. Public keys consist of the u-coordinate (x-coordinate in Montgomery form) after scalar multiplication, with decoding procedures that reject invalid points to prevent small-subgroup attacks. The scalar multiplication algorithm is designed for high performance on 64-bit processors, supporting interoperability without revealing full curve points. RFC 8031, published in December 2016, extends the specification by defining the use of Curve25519 for ephemeral key exchange within the Protocol version 2 (IKEv2). It integrates X25519 as a transform for Diffie-Hellman groups, specifying the exchange of 32-byte public keys and derivation of shared secrets matching RFC 7748 procedures. RFC 8410, published in August 2018, standardizes algorithm identifiers and encoding for X25519 in certificates and Certificate Revocation Lists (CRLs). It assigns the OID 1.3.101.1.1 for X25519, enabling its use in public key infrastructures while prohibiting misuse in signature contexts due to its key agreement purpose. These identifiers facilitate integration with existing PKI standards without altering the underlying Curve25519 parameters.

Adoption in TLS, SSH, and IPsec

X25519, the Diffie-Hellman key exchange using Curve25519, was specified in RFC 7748 in January 2016, enabling its integration into cryptographic protocols. In TLS, adoption accelerated with RFC 8446 standardizing TLS 1.3 in August 2018, which requires support for elliptic curve-based key exchanges and positions X25519 as a preferred option due to its efficiency and resistance to certain attacks. Implementations like include X25519 key shares by default in TLS 1.3 ClientHellos, contributing to its prevalence in modern web traffic where TLS 1.3 dominates. For SSH, Curve25519 key exchange via the curve25519-sha256 method gained traction in implementations prior to formal standardization, with 8731 defining its use in the SSH protocol in March 2020. versions from 6.5 onward supported related Ed25519 elements, but full curve25519-sha256 key agreement became widely available by version 7.0 in 2016, offering faster handshakes than legacy methods. By 2022, 9.0 introduced hybrid post-quantum extensions like sntrup761x25519-sha512, retaining X25519 as the classical baseline for compatibility and performance, while version 9.9 in 2024 added mlkem768x25519-sha256 as default in some configurations. In , particularly IKEv2, X25519 support emerged through implementation-specific extensions rather than core standards, as outlined in the 2016 draft-ietf-ipsecme-safecurves proposing Curve25519 for key agreement. Open-source stacks like strongSwan and Libreswan enable X25519 in IKEv2 proposals for / suites, allowing VPN deployments to leverage its speed over NIST curves. Adoption remains uneven without an , with a 2018 survey of endpoints showing dominance of secp256r1 but nascent Curve25519 use in forward-looking setups; related protocols like , which uses X25519 exclusively, have influenced IPsec-adjacent VPNs but do not conform to traditional .

Role in Messaging and VPN Protocols

Curve25519, through its associated X25519 Diffie-Hellman function, plays a central role in key agreement for end-to-end encrypted messaging protocols, providing efficient, high-security operations suitable for resource-constrained devices. The , widely adopted for , relies on X25519 for ephemeral Diffie-Hellman exchanges in the X3DH key agreement mechanism and the , enabling by deriving session keys from per-message ephemeral keys that are discarded after use. This design ensures that compromise of long-term keys does not retroactively expose prior messages, a property empirically validated through formal analyses of the protocol's security model. Applications incorporating the , such as , inherit this reliance on Curve25519 for initial and ongoing key exchanges, supporting over 2 billion users as of 2023. The Noise Protocol Framework further extends Curve25519's utility in messaging by standardizing patterns that use X25519 as the default Diffie-Hellman primitive, allowing flexible construction of authenticated protocols with properties like deniability and resistance to replay attacks. Protocols built on Noise, including variants used in libraries, leverage Curve25519's constant-time ladder implementation to mitigate side-channel vulnerabilities during key derivation, achieving sub-millisecond latencies on modern hardware for real-time chat applications. In VPN protocols, prominently features Curve25519 via X25519 for establishing secure peer-to-peer tunnels, using Noise-based handshakes to perform initial static and ephemeral Diffie-Hellman exchanges that authenticate endpoints and derive symmetric encryption keys. This approach, introduced in WireGuard's 2016 design, prioritizes simplicity and performance, with key exchanges completing in under 1 ms on typical endpoints, contributing to its adoption in production networks handling millions of connections. Unlike traditional VPNs relying on slower curves or , WireGuard's Curve25519 integration reduces computational overhead while maintaining 128-bit security against classical attacks, as confirmed by protocol specifications and independent audits.

Applications and Deployment

High-Profile Uses in Software and Networks

Curve25519, instantiated as X25519 for Diffie-Hellman , powers the core in , a layer-3 VPN integrated into the since version 5.6 in March 2020 and adopted by major providers including and ProtonVPN for its efficiency and minimal codebase of under 4,000 lines. relies on X25519 to establish session keys, combined with for symmetric encryption, enabling high-speed tunneling with resistance to common implementation flaws in older VPNs like . In secure messaging, the —deployed in Signal, (serving over 2 billion users as of 2023), and —uses X25519 within its X3DH initial key agreement and Double Ratchet for , ensuring where only recipients can decrypt messages. This adoption stems from Curve25519's constant-time ladder implementation, which mitigates timing attacks absent in some NIST curves. The anonymity network incorporates Curve25519 in its ntor circuit extension handshake for , replacing older Diffie-Hellman methods since Tor version 0.2.7.1alpha in 2014 to enhance performance and security against passive adversaries. Tor relays negotiate keys using Curve25519's form, supporting millions of daily users while maintaining unlinkability. X25519 is a mandatory-to-implement option in TLS 1.3 (RFC 8446, published August 2018), enabling ephemeral in ; major browsers including (since version 29 in 2014 for earlier support, fully in TLS 1.3) and prioritize it for its speed on resource-constrained devices, contributing to over 95% of connections using ECDHE by 2023. , the standard SSH implementation in systems, supports curve25519-sha256 for host since version 6.5 in January 2014, improving resistance to Logjam-style attacks. QUIC, underlying and used by services, similarly leverages X25519 for 0-RTT handshakes in over 50% of as of 2024.

Empirical Performance Data

Empirical benchmarks confirm that X25519 key exchanges over exhibit superior speed compared to equivalent operations on NIST P-256, primarily due to efficient ladder implementations and field arithmetic optimizations tailored for 255-bit primes. In the original , a complete Diffie-Hellman computation required 832,457 cycles on a 1 GHz processor, outperforming prior high-security 256-bit Diffie-Hellman schemes by more than a factor of two while incorporating constant-time execution for side-channel resistance. Subsequent optimizations have significantly reduced these figures; for instance, the Sandy2x implementation achieves 159,128 cycles for computation on Intel Sandy Bridge processors, contrasted with 311,434 cycles for on NIST P-256 using 1.0.2 on the same hardware—a roughly twofold . On resource-constrained microcontrollers, Curve25519 s demonstrate even greater relative efficiency. A implementation on 8-bit, 16-bit, and 32-bit devices completes base-point in 3,589,850 cycles, approximately three times faster than comparable NIST P-256 operations. libraries like lib25519 further enhance performance, reporting 68,409 cycles for X25519 Diffie-Hellman on , outperforming OpenSSL's 103,325 cycles by about 34% for the same operation.
Platform/MicroarchitectureOperationCurve25519/X25519 CyclesNIST P-256 CyclesSpeedup FactorSource
(Intel)Shared Secret / Scalar Mult159,128311,434~2x
Microcontrollers (8/16/32-bit)Base-Point Scalar Mult3,589,850~10.8M (est.)~3x
(Intel)X25519 DH68,409 (lib25519)N/A1.5x vs OpenSSL X25519
These metrics highlight Curve25519's design emphasis on software-friendly arithmetic, yielding consistent advantages in both and environments, though actual throughput varies with optimization level and vectorization support.

Barriers to Wider Adoption

Despite its advantages in and , Curve25519 faces regulatory barriers in environments requiring FIPS , as NIST has not approved X25519 key agreement in updated SP 800-56A standards, limiting its use in federal systems and validated cryptographic modules. OpenSSL's FIPS provider, for instance, restricts X25519, reflecting broader hesitancy to integrate non-NIST primitives into pipelines despite public calls for inclusion. Implementation complexities further impede adoption, particularly the need for side-channel-resistant using Montgomery ladders, which demands rigorous constant-time coding to mitigate timing and power analysis attacks profiled via . is challenging due to integrated arithmetic operations and carry handling in field elements, increasing error risks in custom deployments. Public key validation is also critical to prevent invalid-curve or small-subgroup attacks, yet skipping it—sometimes for performance—exposes systems, as Curve25519's design assumes but does not enforce checks. Hardware acceleration lags behind NIST curves like P-256, which benefit from broad support in processors and , whereas Curve25519 often relies on software , reducing in resource-constrained or high-volume scenarios. The curve's cofactor of 8 introduces complications in protocols assuming prime-order groups, contrasting with NIST's design choices. Legacy protocol inertia persists, with older standards like SSL/TLS pre-1.3 and certain hardware tokens excluding Curve25519, necessitating hybrid support that complicates migrations. Updating entrenched systems remains difficult, mirroring broader cryptographic transition challenges. Slow integration into FIPS-validated libraries for related Ed25519 signatures underscores ecosystem-wide hurdles.

Security Analysis

Verifiable Security Proofs and Empirical Testing

Curve25519's security is grounded in the hardness of the elliptic curve discrete logarithm problem (ECDLP) over its Montgomery form y^2 = x^3 + 486662x^2 + x modulo the prime p = 2^{255} - 19, with parameters selected to provide approximately 128 bits of security against generic attacks such as Pollard's rho algorithm. The curve's group order n = 2^{252} + 27742317777372353535851937790883648493 is a 252-bit prime, yielding a security level of roughly 126 bits under standard ECDLP metrics (half the bit length of n), though it is conservatively rated at 128 bits due to the absence of exploitable weaknesses and margins against special attacks like the MOV reduction. Parameter choices employ "nothing-up-my-sleeve" construction to preclude hidden backdoors: the field prime derives transparently from $2^{255} minus a small constant, the curve coefficient A = 486662 from a verifiable arithmetic derivation, and the base point x-coordinate fixed at 9 as the smallest valid input yielding a large-prime-order point. This rigidity satisfies SafeCurves criteria for complete twist security, fast ladder computation, and resistance to exceptional attacks, distinguishing it from curves with opaque NIST parameters. Formal verification efforts provide proofs of implementation correctness rather than foundational ECDLP security, which remains an unproven assumption. For instance, a Coq formalization confirms the functional correctness of the X25519 key-exchange routine in the TweetNaCl library, verifying that it computes the correct shared secret under the curve's arithmetic without overflows or invalid points. Similarly, machine-checked proofs using Frama-C and Why3 validate high-speed assembly implementations of scalar multiplication on Curve25519, ensuring equivalence to a reference model and absence of algorithmic flaws exploitable by adversaries. These verifications target side-channel protections inherent to the Montgomery ladder, proving constant-time execution paths that resist timing and cache attacks in theory. Empirical testing reinforces theoretical claims through cryptanalytic scrutiny and deployment stress without observed breaks of the core ECDLP. No attacks have recovered logs on Curve25519 faster than O(\sqrt{n}) operations, aligning with expected 128-bit resistance; exhaustive searches and specialized algorithms like confirm no low-Hamming-weight subgroups or anomalous points. Side-channel evaluations, including machine learning-based on scalar multiplications, demonstrate only in non-constant-time implementations, but proper ladder-based ones withstand traces up to millions of measurements without key recovery. Widespread protocol integration since 2006, including in TLS via RFC 7748, has yielded no field exploits, with security audits of libraries like libsodium attributing robustness to the curve's design over implementation bugs. Ongoing benchmarks validate performance-security tradeoffs, showing scalar multiplications in under 100,000 cycles on modern hardware without compromising resistance.

Criticisms of Implementation Risks

Despite its design for resistance to certain attacks through the use of a curve and fixed-base via the algorithm, implementations of Curve25519 (as X25519) remain vulnerable to side-channel attacks if not executed in constant time. For instance, timing variations in can leak key information through or branch prediction side channels, as demonstrated in attacks on Libgcrypt's ECDH , which employed the but failed to fully mitigate microarchitectural leaks. Similarly, on embedded devices like the ATMega328P has exploited order-4 elements to recover secrets via simple , highlighting risks in resource-constrained environments where constant-time guarantees are harder to enforce. A notable vulnerability in Libgcrypt versions prior to 1.8.1 (fixed on August 29, 2017) allowed attackers to exploit side-channel information during Curve25519 operations, potentially disclosing private keys due to inadequate protections against timing and cache attacks. Machine learning-enhanced profiled side-channel attacks have further succeeded against specific scalar multiplication implementations, recovering keys from as few as hundreds of traces by analyzing power or electromagnetic emissions, underscoring that even ladder-based methods require rigorous verification of uniformity in execution paths. Critics note that while Bernstein's reference implementation emphasizes simplicity to reduce bugs, reliance on conditional selects or unblinded operations in derivative code can introduce data-dependent branches, as seen in non-constant-time variants of libgcrypt's Curve25519/Ed25519 code. Additional pitfalls include insufficient validation of inputs, enabling small or invalid attacks if peer public keys are not checked against the order, a amplified in high-speed protocols where optimizations might skip such verifications. Implementers must also guard against faults induced by glitches or errors in scalar clamping—clamping the private by clearing bits 0-2, setting bit 254, and masking bit 255—which, if mishandled, could lead to weak keys or degraded , though empirical audits show most mature libraries like libsodium enforce this correctly. Overall, these risks stem not from the curve's but from the causal chain of implementation choices, where deviations from constant-time or incomplete countermeasures propagate vulnerabilities in deployed systems.

Comparisons to NIST Curves and Alternatives

Curve25519 provides approximately 128 bits of security for elliptic curve Diffie-Hellman (ECDH) key exchange via the X25519 construction, matching the security level of the NIST-recommended P-256 curve, while offering superior performance in software implementations due to its Montgomery ladder formulation and field prime selection optimized for 64-bit arithmetic. Benchmarks on low-resource devices demonstrate that scalar multiplication on Curve25519 requires roughly half the cycles of P-256, with one study reporting 877,339 cycles for Curve25519 versus 1,718,398 for P-256. This efficiency stems from Curve25519's avoidance of complex point decompression and its resistance to timing attacks through clamped scalars and constant-time operations, contrasting with NIST curves' reliance on Weierstrass forms that demand more general elliptic curve arithmetic. Criticisms of NIST curves, including P-256, center on their parameter generation process, which used a verifiable but fixed hash-based published by NIST in , raising suspicions of potential influence by the (NSA) following revelations of NSA weakening in . Designer explicitly avoided NIST curves in Curve25519's design to prioritize , selecting parameters via first-principles criteria like large prime fields without endomorphisms that could facilitate attacks, and conducting exhaustive searches for safe . No cryptographic weaknesses have been demonstrated in NIST curves beyond those applicable to any 256-bit , yet their opacity—compared to Curve25519's open derivation—has led cryptographers to favor the latter for new protocols, despite hardware accelerators often optimizing P-256. NIST has since approved Curve25519 for federal use in validations as of 2017, acknowledging its equivalence while recommending validation against side-channel risks common to all curves. Among alternatives, Curve448 extends Curve25519's design to 224-bit security with similar performance advantages over NIST P-384, using a larger prime field for applications needing higher margins. Brainpool curves (e.g., brainpoolP256r1) offer independently generated parameters as a NIST alternative, verified by European standards bodies, but lack Curve25519's implementation simplicity and speed optimizations. Secp256k1, used in Bitcoin, provides comparable security but prioritizes verification efficiency over key exchange speed, with a Koblitz curve form vulnerable to certain twists absent in Curve25519. Empirical adoption data shows X25519 surpassing P-256 in modern protocols like TLS 1.3 due to its balance of security proofs and real-world efficiency, though legacy systems favor NIST curves for interoperability.

References

  1. [1]
    Curve25519: high-speed elliptic-curve cryptography
    Curve25519 is a state-of-the-art Diffie-Hellman function suitable for a wide variety of applications. Given a user's 32-byte secret key, Curve25519 computes ...
  2. [2]
    [PDF] Curve25519: new Diffie-Hellman speed records
    Feb 9, 2006 · This paper introduces and analyzes Curve25519, a state-of-the-art elliptic-curve-. Diffie-Hellman function suitable for a wide variety of ...
  3. [3]
    SafeCurves: Introduction
    Curve25519. True✓. y^2 = x^3+486662x^2+x modulo p = 2^255 - 19 2006 ... SafeCurves: choosing safe curves for elliptic-curve cryptography. https ...Base points · Fields · Twist security · Equations
  4. [4]
    Irrelevant patents on elliptic-curve cryptography
    Popular rumor states that elliptic-curve cryptography is a patent minefield. However, I'm not aware of any patents that apply to Curve25519.
  5. [5]
    [PDF] The first 10 years of Curve25519 Daniel J. Bernstein University of ...
    Mar 9, 2016 · Abstract: “This paper explains the design and implementation of a high-security elliptic-curve-. Diffie-Hellman function.
  6. [6]
    RFC 7748 - Elliptic Curves for Security - IETF Datatracker
    Curve25519 The X25519 function can be used in an Elliptic Curve Diffie ... [curve25519] Bernstein, D., "Curve25519: new Diffie-Hellman speed records ...
  7. [7]
    [PDF] Montgomery curves and the Montgomery ladder
    Mar 30, 2017 · Abstract. The Montgomery ladder is a remarkably simple method of computing scalar multiples of points on a broad class of elliptic curves.
  8. [8]
    [PDF] Twisted Edwards Curves - Cryptology ePrint Archive
    Mar 13, 2008 · every elliptic curve in Montgomery form; shows how to cover even more ... Curve25519 is a particular elliptic curve over Fp where p = 2255 − 19.
  9. [9]
    [PDF] High-speed high-security signatures - Ed25519
    Jul 5, 2011 · This encoding immediately determines y, and it determines x via the equation x = ±p(y2 − 1)/(dy2 + 1). EdDSA keys and signatures. An EdDSA ...<|separator|>
  10. [10]
    RFC 7748: Elliptic Curves for Security
    This curve is birationally equivalent to a twisted Edwards curve -x^2 + y^2 ... Curve25519 The X25519 function can be used in an Elliptic Curve Diffie ...
  11. [11]
    elliptic curves - Curve25519 Specification
    Apr 7, 2020 · So basically the curve was found by incrementing the A value, restricting to the values where (A-2)/4 is an integer, until it generates a curve ...Is the curve25519 algorithm a special(implementation) one of ECDH?Curve25519 vs "Million Dollar Curve" - Cryptography Stack ExchangeMore results from crypto.stackexchange.comMissing: process | Show results with:process
  12. [12]
    RFC 8031 - Curve25519 and Curve448 for the - IETF Datatracker
    In contrast, the process used to pick Curve25519 and Curve448 is fully documented and rigid enough so that independent verification can and has been done.
  13. [13]
    [PDF] Implementing Curve25519/X25519: A Tutorial on Elliptic Curve ...
    In the case of Curve25519 this is the field of integers modulo the prime p = 2255 − 19, as defined in Section 2.5.
  14. [14]
    [PDF] Safe curves for elliptic-curve cryptography
    Aug 9, 2024 · We emphasize that the SafeCurves criteria reject curves that are known to have faster ECDLP attacks, and proactively reject many further curves ...<|separator|>
  15. [15]
    [PDF] A Microarchitectural Side Channel Attack on Several Real-World ...
    Rejecting Known Bad Points. To protect against small sub- group attacks against Curve25519 and related curves that have a small set of low-order elements ...
  16. [16]
    [PDF] Fast, Small, and Area-Time Efficient Architectures for Key-Exchange ...
    In comparison to NIST-P256, Curve25519 is smaller and faster and even more secure against known side-channel attacks including timing and cache attacks.
  17. [17]
    Curve25519 Attacks and Security - Cryptography Stack Exchange
    Jul 17, 2020 · Small subgroup attacks: Pohlig Hellman and Lim Lee attacks are useless against Curve25519 mostly because of the chosen parameters. Pollard ...Trying out the small subgroup attack on a group of non-prime order ...Curve25519 Key Validation - Cryptography Stack ExchangeMore results from crypto.stackexchange.com
  18. [18]
    [PDF] Prime, Order Please! Revisiting Small Subgroup and Invalid Curve ...
    Revisiting Small Subgroup and Invalid Curve Attacks on. Protocols using ... Curve25519: How do I validate Curve25519 public keys? 2006. url: https://cr ...
  19. [19]
    What's the Curve25519 clamping all about? - Neil Madden
    May 28, 2020 · For Curve25519, h = 8, and multiplying by 8 is the same as a binary left-shift by 3 bits. If you take a secret scalar value between 2^251 and 2 ...<|control11|><|separator|>
  20. [20]
    [PDF] Reverse-engineering side-channel countermeasures of ECC ...
    Through various test suites, ECTester observes the behavior of the target implementa- tion against known attacks but also non-standard inputs and elliptic curve ...
  21. [21]
    [PDF] Decompose and conquer: ZVP attacks on GLV curves
    The secp256k1 curve is resistant to EPA and RPA attacks, and the Curve25519 is resistant to all ZVP attacks with all formulas from. EFD. The tools and ...
  22. [22]
    [PDF] Elliptic and Hyperelliptic Curves: a Practical Security Analysis
    the contributions of this work is to optimize parameter selection in a variety of scenarios to ... Curve25519: New Diffie-Hellman speed records. In M. Yung, Y.
  23. [23]
    [PDF] Drive-by Key-Extraction Cache Attacks from Portable Code
    Jan 31, 2018 · Curve25519 was specifically designed to increase resistance to side channel attacks and other com- mon implementation issues. Scalar-By ...
  24. [24]
    [PDF] Curve25519: new Diffie-Hellman speed records
    Nov 15, 2005 · Curve25519: new Diffie-Hellman speed records. Daniel J. Bernstein ? djb@cr.yp.to. Abstract. This paper explains the design and implementation ...
  25. [25]
    [PDF] High-speed high-security signatures - Ed25519
    Date: 2011.09.26. Page 2. 2. Bernstein, Duif, Lange, Schwabe, Yang ... earlier in Schnorr's original paper [72, Section 2]. Practical use of Schnorr's ...
  26. [26]
    RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA)
    RFC 8032 EdDSA: Ed25519 and Ed448 January 2017 ; 5.1.1. Modular Arithmetic ; 5.1.2. Encoding ...
  27. [27]
    Could a C25519/ED25519 cryptographic module be FIPS certified?
    Aug 21, 2017 · NIST claimed in late 2017 that the upcoming draft of NIST SP 800-186 would include Curve25519 and Curve448 as approved curves, and the ...
  28. [28]
    [PDF] NIST.SP.800-186.pdf
    Each elliptic curve specified in this recommendation is allowed for specific NIST approved cryptographic functions. The allowed usages for each curve are ...
  29. [29]
    [PDF] Public Comments on SP 800-131A Rev. 3 (ipd)
    Oct 21, 2024 · Given the widespread deployment and superior properties, it would make a lot of sense for NIST to approve Curve25519 and Curve448 for key.
  30. [30]
  31. [31]
    Implementation comparison: crypto_scalarmult/curve25519
    Operation, crypto_scalarmult. Primitive, curve25519. Description, Curve25519 scalar multiplication. Designers, Daniel J. Bernstein.
  32. [32]
    [PDF] Curve25519: new Diffie-Hellman speed records - IACR
    Curve25519: new Diffie-Hellman speed records. Daniel J. Bernstein * djb@cr.yp.to. Abstract. This paper explains the design and implementation of a high ...
  33. [33]
    Software - Ed25519
    Ed25519 software is in SUPERCOP, with assembly and C implementations, and a slow Python implementation. It is in the public domain.
  34. [34]
    orlp/ed25519 - GitHub
    This is a portable implementation of Ed25519 based on the SUPERCOP "ref10" implementation. Additionally there is key exchanging and scalar addition included.
  35. [35]
    curve25519 by openSSL - Cryptography Stack Exchange
    Jun 25, 2019 · Use the genpkey command: openssl genpkey -algorithm x25519 or, for edwards25519: openssl genpkey -algorithm ed25519. This requires a recent OpenSSL version.Why does OpenSSL show 253 bits? - Cryptography Stack ExchangeWith OpenSSL and ECDHE, how to show the actual curve being ...More results from crypto.stackexchange.comMissing: integration | Show results with:integration
  36. [36]
    Point*scalar multiplication - Libsodium
    Sep 12, 2023 · Sodium provides an API to multiply a point on the Curve25519 curve. This can be used as a building block to construct key exchange mechanisms.
  37. [37]
    Ed25519 to Curve25519 - Libsodium documentation - GitBook
    Oct 4, 2025 · Ed25519 keys can be converted to X25519 keys, so that the same key pair can be used both for authenticated encryption ( crypto_box ) and for ...
  38. [38]
    NSS 3.33 release notes — Firefox Source Docs documentation
    TLS compression is no longer supported. · This version of NSS uses a formally verified implementation of Curve25519 on 64-bit systems. · The compile time flag ...
  39. [39]
    Progressive Performance in wolfSSL with Curve25519 and Ed25519
    Oct 17, 2016 · The wolfSSL embedded SSL/TLS library and wolfCrypt cryptography library have support for two high-performance algorithms for key agreement (Curve25519) and ...
  40. [40]
    src/lib/pubkey/x25519/curve25519.h File Reference - Botan
    curve25519.h File Reference. Public Key Algorithms » X25519. Public Header. More... #include <botan/x25519.h>. Go to the source code of this file.Missing: support | Show results with:support
  41. [41]
    Curve25519 (Bouncy Castle Library 1.81 API Specification)
    Create a cache-safe lookup table for the specified sequence of points. protected ECPoint · createRawPoint(ECFieldElement x, ECFieldElement y). protected ECPoint ...
  42. [42]
    [PDF] The Provable Security of Ed25519: Theory and Practice
    Jul 1, 2020 · The Ed25519 signature scheme was introduced in 2011 by Bernstein, Duif, Lange, Schwabe, and Yang in the paper “High-speed high-security ...
  43. [43]
    [PDF] Systematic Side-channel Analysis of Curve25519 with Machine ...
    Jul 12, 2021 · This paper uses machine learning, specifically convolutional neural networks, to perform side-channel analysis on Curve25519, using power ...Missing: protections | Show results with:protections
  44. [44]
    Curve25519 and Curve448 with Side-Channel Protection
    In this work, we demonstrate that both curves can indeed be efficiently and securely mapped to hardware structures of modern FPGAs.
  45. [45]
    [PDF] Efficient and Side-Channel Resistant Ed25519 on ARM Cortex-M4
    Jun 10, 2024 · Our fastest implementation performs Ed25519 Keygen in 200,000 cycles, Sign in 240,000 cycles, and Verify in 720,000 cycles on the ARM Cortex-M4.
  46. [46]
    RFC 8410 - Algorithm Identifiers for Ed25519, Ed448, X25519, and ...
    Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure · RFC - Proposed Standard August 2018. View ...
  47. [47]
    A Detailed Look at RFC 8446 (a.k.a. TLS 1.3) - The Cloudflare Blog
    Aug 10, 2018 · Chrome's implementation of TLS 1.3, for example, sends an X25519 keyshare in the first message to the server.
  48. [48]
    RFC 8731 - Secure Shell (SSH) Key Exchange Method Using ...
    This document describes the specification for using Curve25519 and Curve448 key exchange methods in the Secure Shell (SSH) protocol.
  49. [49]
    Specifications - OpenSSH
    SSH protocol version 2 Extension RFCs ; RFC8709 (e) · 6.5-, Ed25519 and Ed448 Public Key Algorithms ( ssh-ed25519 only) ; RFC8731 · 7.4-, Key Exchange Method ...
  50. [50]
    Post-Quantum Cryptography - OpenSSH
    OpenSSH versions 9.0 and greater support sntrup761x25519-sha512 and versions 9.9 and greater support mlkem768x25519-sha256. If your server is already ...
  51. [51]
    Release Notes - OpenSSH
    OpenSSH is a 100% complete SSH protocol 2.0 implementation and includes sftp client and server support. OpenSSH also includes transitional support for the ...
  52. [52]
    Curve25519 and Curve448 for IKEv2 Key Agreement
    ... Curve25519 and Curve448, as well as the X25519 and X448 functions for performing key agreement (Diffie-Hellman) operations with these curves. The curves and ...
  53. [53]
    IKEv2 Cipher Suites - strongSwan
    The keywords listed below can be used with the ike and esp directives in ipsec.conf or the proposals settings in swanctl.conf to define cipher suites.Missing: adoption | Show results with:adoption
  54. [54]
    [PDF] In search of CurveSwap: Measuring elliptic curve implementations in ...
    Our survey of elliptic curve support for TLS, IPsec, and SSH gives a snapshot of elliptic curve deployments in. 2017. The NIST-standardized curve secp256r1 is ...
  55. [55]
    Signal >> Specifications >> The Double Ratchet Algorithm
    Sep 26, 2025 · The Double Ratchet algorithm is used by two parties to exchange encrypted messages based on a shared secret key.
  56. [56]
    Specifications >> The XEdDSA and VXEdDSA Signature Schemes
    Oct 20, 2016 · This document describes how to create and verify EdDSA-compatible signatures using public key and private key formats initially defined for the X25519 and X448 ...
  57. [57]
    The Noise Protocol Framework
    Jul 11, 2018 · Enables higher-level protocols that encapsulate Noise messages to use an efficient standard length field of 16 bits.
  58. [58]
    [PDF] Noise Explorer: Fully Automated Modeling and Verification for ...
    Aug 23, 2018 · This work represents the first comprehensive formal analysis of the Noise Protocol Framework. However, substantial tangential work has occured ...
  59. [59]
    WireGuard support and deployment - IANIX
    ... WireGuard VPN by Jason A. Donenfeld. Under the hood, WireGuard uses Noise Protocol, X25519, ChaCha20-Poly1305, BLAKE2 and SipHash. Official WireGuard Software.
  60. [60]
    WireGuard Key Rotation With Pro Custodibus
    Sep 29, 2021 · Each peer in a WireGuard VPN (Virtual Private Network) has a unique X25519 (aka Curve25519) key pair. This key pair is used to identify the ...
  61. [61]
  62. [62]
  63. [63]
    Preliminaries - Tor Specifications
    We also use the Curve25519 group and the Ed25519 signature format in several places. For Diffie-Hellman, unless otherwise specified, we use a generator (g) ...
  64. [64]
    Tor: lib/crypt_ops/crypto_curve25519.c File Reference
    Tor uses Curve25519 as the basis of its "ntor" circuit extension handshake, and in related code. The functions in this module are used to find the most suitable ...
  65. [65]
  66. [66]
    Things that use Curve25519 - IANIX
    Oct 2, 2025 · Here's a list of protocols and software that use or support the superfast, super secure Curve25519 ECDH function from Dan Bernstein.
  67. [67]
    [PDF] Sandy2x: New Curve25519 Speed Records - Tung Chou
    Sep 30, 2015 · [11] Daniel J. Bernstein, Curve25519: new Diffie-Hellman speed records, in PKC 2006 (2006), 207–228. Cita- tions in this document ...
  68. [68]
    High-speed Curve25519 on 8-bit, 16-bit, and 32-bit microcontrollers
    May 31, 2015 · Curve25519 is already in use in various applications today and was originally proposed by Bernstein in 2006 [5]. Bernstein uses the Montgomery ...
  69. [69]
    Speed - lib25519
    The table reports cycle counts from lib25519 and, for comparison, OpenSSL and s2n-bignum. For comparability to OpenSSL's speed-testing utility, the OpenSSL ...Missing: performance | Show results with:performance
  70. [70]
    NIST Proposes to Update SP 800-56A and Revise SP 800-56C | NIST
    Jul 29, 2025 · Contrary to requests in several of the public comments, NIST does not propose to approve the X25519 and X448 key exchange schemes, regarding new ...Missing: FIPS | Show results with:FIPS
  71. [71]
    [PDF] Public Comments on the Decision Proposal for the SP 800-56 Series
    Sep 15, 2025 · NIST's decision to exclude X25519 and X448 from the updated standard is a mis-step in the trust placed in the FIPS program. While the focus on ...Missing: Curve25519 | Show results with:Curve25519
  72. [72]
    X25519/X448 in FIPS mode. #22054 - GitHub
    Signatures using ED25519/ED448 are now allowed. Key Agreement using X25519/X448 is not allowed currently.. This seems to be the exact opposite of what we have ...
  73. [73]
    Systematic Side-Channel Analysis of Curve25519 with Machine ...
    Oct 16, 2020 · Systematic Side-Channel Analysis of Curve25519 with Machine Learning ... timing attacks. Leaking information from the corresponding value ...
  74. [74]
    [PDF] Verifying Curve25519 Software - Peter Schwabe
    Apr 28, 2014 · In Sec. 6 we will explain why integrated multiplication and handling of carry bits also constitutes a major obstacle for formal verification.
  75. [75]
    Why not validate Curve25519 public keys could be harmful
    Sep 11, 2015 · Curve25519 suggests blacklisting the known bad public keys, but a better solution is to check the shared value and to raise exception if it is zero.Missing: systems | Show results with:systems
  76. [76]
    A Deep Dive into X25519 - CoinEx Smart Chain - Medium
    Sep 4, 2019 · Curve25519 is a Montgomery curve built by Bernstein in 2006, in which 25519 indicates that the characteristic of the bottom prime number field on which the ...Missing: systems | Show results with:systems
  77. [77]
    Why are NIST curves still used? - Cryptography Stack Exchange
    Aug 11, 2021 · Meanwhile the more modern Curve25519 is considered to be safer and less prone to implementation errors than P-256, but it isn't supported by Web ...Curve25519 vs "Million Dollar Curve" - Cryptography Stack Exchangeelliptic curves - Why is Curve25519 mostly used for key exchange?More results from crypto.stackexchange.comMissing: empirical | Show results with:empirical
  78. [78]
    [PDF] Requirements for Elliptic Curves for High-Assurance Applications
    The NIST curves provide a standard that is sup ported by most applications. Other curves like. Brainpool and Curve25519 are often implemented in addition.
  79. [79]
    NIST P-256 or Curve25519 : r/cryptography - Reddit
    May 16, 2022 · Curve25519 is a fine, modern choice. If you plan on doing anything else, Curve25519's cofactor of 8 can create complications that don't exist with prime order ...What's the best crypto settings for GPG? - RedditAre the NIST ECC curves (NIST-P224, 256, etc) widely thought to be ...More results from www.reddit.comMissing: empirical performance
  80. [80]
    More secure curve than Curve25519
    Apr 13, 2015 · Curve25519 has not (yet) percolated into all or even most well-established protocols. For instance, there is no support for Curve25519 in SSL/ ...ECDSA vs ECDH vs Ed25519 vs Curve25519GnuPG now uses ECC 25519 as default on new key generationMore results from security.stackexchange.comMissing: systems | Show results with:systems
  81. [81]
    Conventional cryptography is under threat. Upgrade to post ...
    Mar 17, 2025 · History shows that updating or removing outdated cryptographic algorithms from live systems is extremely difficult. For example, although the ...
  82. [82]
    ed25519 adoption -- challenges - Cryptography Stack Exchange
    Mar 8, 2018 · If ed25519 is that attractive that it seems to be, can someone explain why adoption has been slow and if there are, if any, challenges with ...Why are my Curve25519 points so different than standard? [closed]elliptic curves - Should Diffie-Hellman on Curve25519 be validated?More results from crypto.stackexchange.com
  83. [83]
    Does Curve25519 only provide 112 bit security?
    Aug 27, 2015 · Now, for Curve25519, the curve order has a prime factor circa 2252; by the above standard metric, this yields a security of 126 bits. This is ...Is Curve25519-java secure? - Cryptography Stack ExchangeCurve25519 vs "Million Dollar Curve" - Cryptography Stack ExchangeMore results from crypto.stackexchange.comMissing: verifiable proofs
  84. [84]
    [PDF] A Coq proof of the correctness of X25519 in TweetNaCl
    This specification is kept in terms of a sequence of finite-field ... The specification of X25519 in RFC 7748 is formalized by the function RFC in Coq.
  85. [85]
    [PDF] Verifying Curve25519 Software - Peter Schwabe
    Aug 24, 2014 · ABSTRACT. This paper presents results on formal verification of high- speed cryptographic software. We consider speed-record-.
  86. [86]
    Verifying Curve25519 Software - ACM Digital Library
    This paper presents results on formal verification of high-speed cryptographic software. We consider speed-record-setting hand-optimized assembly software ...
  87. [87]
    CVE-2017-0379 : Libgcrypt before 1.8.1 does not ... - CVE Details
    Aug 29, 2017 · Libgcrypt before 1.8.1 does not properly consider Curve25519 side-channel attacks, which makes it easier for attackers to discover a secret ...
  88. [88]
    The Curve25519/Ed25519 code in *libgcrypt* is not a full constant ...
    Oct 25, 2019 · The Curve25519/Ed25519 code in libgcrypt is not a full constant-time implementation and it greatly decreased the inherent security provided ...Missing: pitfalls | Show results with:pitfalls
  89. [89]
    When using Curve25519, why does the private key always have a ...
    Nov 20, 2013 · This way, the loop always has the same amount of iterations, and no timing information can accidentally be leaked by the variable iteration ...Missing: pitfalls constant
  90. [90]
    ECDH security vs. type of elliptic curve - Cryptography Stack Exchange
    Mar 27, 2023 · Thus, X25519 and P256 provide about 128-bit security, P384 provides 192-bit security, X448 provides 224-bit security, and P521 provides ...Why are NIST curves still used? - Cryptography Stack ExchangeIs it safe to implement elliptic curve Diffie Hellman with secp256k1More results from crypto.stackexchange.com
  91. [91]
    [PDF] Comparison of different 256-bit Elliptic Curves for Low-Resource ...
    Curve25519 showed to be the most performant curve. It needs. 877339 cycles for a random point scalar multiplication while NIST P256 needs 1718398 cycles and ...Missing: empirical | Show results with:empirical
  92. [92]
    X25519 Key Exchange: Fast & Secure Guide - Online Hash Crack
    Curve25519's parameters were chosen for security and performance. The prime field 2²⁵⁵ - 19 allows for efficient modular arithmetic, while the curve's structure ...<|separator|>
  93. [93]
    Everyone Loves Curves! But Which Elliptic Curve is the Most Popular?
    Jan 23, 2018 · X25519 has 40% lower computational complexity than P-256. Virtual machines should prefer it to P-256. The lower complexity also means that it ...Missing: benchmarks | Show results with:benchmarks
  94. [94]
    Should we trust the NIST-recommended ECC parameters?
    Sep 9, 2013 · But given that we have alternatives from the likes of Dan Bernstein (Curve25519), I see no compelling reason to use NIST's curves even if you ...elliptic curves - Difference between X25519 vs. Ed25519Why are NIST curves still used? - Cryptography Stack ExchangeMore results from crypto.stackexchange.com
  95. [95]
    [PDF] Security dangers of the NIST curves
    Jun 8, 2013 · ▶ We avoid curves where there are better attacks ▶ Side note: maybe this is excessively paranoid ▶ e.g. can use curves with endomorphisms ( ...
  96. [96]
  97. [97]
    NIST curves like P-256 is generally not considered trustworthy ...
    Apr 25, 2019 · NIST curves like P-256 is generally not considered trustworthy, which is why the general consensus is to use Ed25519 for any elliptic curve ...Missing: empirical data
  98. [98]
    Curve25519 and Curve448 to be approved by NIST for FIPS 140 use
    Nov 2, 2017 · As a 448-bit curve it provides 224-bits of (roughly) equivalent symmetric security, considerably more than Curve25519's ~128-bits. But 128-bits ...Optimal Secure Curves For ECC as of 2025? : r/crypto - RedditWhat's the best crypto settings for GPG? - RedditMore results from www.reddit.com
  99. [99]
    Comparison of Cryptographic Algorithms - GpgFrontend
    Why: Curve25519 is highly efficient, secure, and compact, making it a great choice for modern cryptographic applications. When to Use: Use Curve25519 in ...Missing: major | Show results with:major
  100. [100]
    Curve25519 vs "Million Dollar Curve" - Cryptography Stack Exchange
    Jan 2, 2016 · However, most of these curves parameters generation processes contain unjustified choices, specific constants or specific hash algorithms.elliptic curves - All Curve25519 Parameters with ExplanationIs the curve25519 algorithm a special(implementation) one of ECDH?More results from crypto.stackexchange.com
  101. [101]
    Guidance for Choosing an Elliptic Curve Signature Algorithm in 2022
    May 19, 2022 · A cartoon wild canid on the Internet provides general guidance on elliptic curve cryptography parameter choices.Missing: process | Show results with:process