Curve25519

Na criptografia, a Curve25519 é uma curva elíptica utilizada na criptografia de curvas elípticas (ECC) que oferece 128 bits de segurança (tamanho de chave de 256 bits) e é concebida para uso com o esquema de acordo de chaves Diffie-Hellman de curvas elípticas (ECDH), descrita e implementada pela primeira vez por Daniel J. Bernstein. É uma das curvas mais rápidas em ECC e não está coberta por nenhuma patente conhecida. A implementação de referência é um software de domínio público.

O artigo original da Curve25519 definiu-a como uma função Diffie-Hellman (DH). Desde então, Bernstein propôs que o nome Curve25519 fosse utilizado para a curva subjacente, e o nome X25519 para a função DH.

Propriedades matemáticas

A curva utilizada é , uma Curva de Montgomery, sobre o corpo primo definido pelo número primo pseudo-Mersenne (daí o valor numérico "25519" no nome), e utiliza o ponto base . Este ponto gera um subgrupo cíclico cuja ordem é o número primo . Este subgrupo possui um cofator de 8, o que significa que o número de elementos no subgrupo é 1/8 daquele do grupo da curva elíptica. A utilização de um subgrupo de ordem prima previne a montagem de um ataque através do Algoritmo de Pohlig-Hellman.

O protocolo utiliza um ponto elíptico comprimido (apenas coordenadas X), permitindo assim o uso eficiente da escada de Montgomery (Montgomery ladder) para ECDH, utilizando apenas coordenadas XZ.

A Curve25519 é construída de tal forma que evita muitas potenciais armadilhas de implementação.

A curva é birracionalmente equivalente a uma Curva de Edwards torcida utilizada no esquema de assinatura Ed25519.

História

Em 2005, a Curve25519 foi lançada pela primeira vez por Daniel J. Bernstein.

Em 2013, o interesse começou a aumentar de forma considerável quando se descobriu que a NSA tinha potencialmente implementado um backdoor no algoritmo Dual_EC_DRBG baseado na curva P-256. Embora não estivessem diretamente relacionados, aspectos suspeitos das constantes das curvas P do NIST levaram a preocupações de que a NSA tivesse escolhido valores que lhes concedessem uma vantagem na quebra da criptografia.

"Não confio mais nas constantes. Acredito que a NSA as manipulou por meio de suas relações com a indústria."

— Bruce Schneier, A NSA Está Quebrando a Maior Parte da Criptografia na Internet (2013)

Desde 2013, a Curve25519 tornou-se a alternativa de facto à P-256, sendo utilizada numa ampla variedade de aplicações. A partir de 2014, o OpenSSH adotou por padrão o ECDH baseado na Curve25519 e o GnuPG adicionou suporte para chaves Ed25519 para assinatura e criptografia. O uso da curva acabou por ser padronizado tanto para a troca de chaves quanto para assinatura em 2020.

Em 2017, o NIST anunciou que a Curve25519 e a Curve448 seriam adicionadas à Publicação Especial 800-186, que especifica as curvas elípticas aprovadas para uso pelo Governo Federal dos EUA. Ambas estão descritas na RFC 7748. Um rascunho de 2019 do "FIPS 186-5" denota a intenção de permitir o uso de Ed25519 para assinaturas digitais. A atualização de 2023 da Publicação Especial 800-186 permite a utilização da Curve25519.

Em fevereiro de 2017, a especificação do DNSSEC para o uso de Ed25519 e Ed448 foi publicada como RFC 8080, atribuindo-lhes os algoritmos números 15 e 16.

Em 2018, a especificação DKIM foi emendada de modo a permitir assinaturas com este algoritmo. Também em 2018, a RFC 8446 foi publicada como a nova norma do Transport Layer Security v1.3. Esta recomenda o suporte aos algoritmos X25519, Ed25519, X448 e Ed448.

Bibliotecas

Protocolos

Aplicações


Referências

  1. ↑ Bernstein. «Irrelevant patents on elliptic-curve cryptography». cr.yp.to. Consultado em 8 de fevereiro de 2016
  2. ↑ Daniel J. Bernstein. «A state-of-the-art Diffie-Hellman function». My curve25519 library computes the Curve25519 function at very high speed. The library is in the public domain.
  3. ↑ «X25519». Crypto++. 5 de março de 2019. Consultado em 3 de fevereiro de 2023
  4. ↑ «[Cfrg] 25519 naming». Consultado em 25 de fevereiro de 2016
  5. ↑ Nath, Kaushik; Sarkar, Palash (2018). «Efficient Arithmetic In (Pseudo-)Mersenne Prime Order Fields». Consultado em 10 de maio de 2025
  6. 1 2 Bernstein, Daniel J. (2006). «Curve25519: New Diffie-Hellman Speed Records» (PDF). Public Key Cryptography. Nova Iorque: Springer. pp. 207–228. ISBN 978-3-540-33851-2. doi:10.1007/11745853_14
  7. ↑ Lange, Tanja. «EFD / Genus-1 large-characteristic / XZ coordinates for Montgomery curves». EFD / Explicit-Formulas Database. Consultado em 8 de fevereiro de 2016
  8. ↑ Bernstein, Daniel J.; Lange, Tanja (22 de janeiro de 2017). «SafeCurves: Introduction». SafeCurves: choosing safe curves for elliptic-curve cryptography. Consultado em 8 de fevereiro de 2016
  9. ↑ Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (22 de janeiro de 2017). «Ed25519: high-speed high-security signatures». Consultado em 9 de novembro de 2019
  10. ↑ Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (26 de setembro de 2011). «High-speed high-security signatures» (PDF). Consultado em 9 de novembro de 2019
  11. ↑ Bernstein, Daniel J.; Lange, Tanja (2007). «Faster addition and doubling on elliptic curves». Advances in Cryptology – ASIACRYPT 2007. Berlim: Springer. ISBN 978-3-540-76899-9. doi:10.1007/978-3-540-76900-2_3
  12. ↑ Kelsey, John (maio de 2014). «Dual EC in X9.82 and SP 800-90» (PDF). National Institute of Standards in Technology. Consultado em 2 de dezembro de 2018
  13. ↑ Green, Matthew (14 de janeiro de 2015). «A Few Thoughts on Cryptographic Engineering: The Many Flaws of Dual_EC_DRBG». blog.cryptographyengineering.com. Consultado em 20 de maio de 2015
  14. ↑ «SafeCurves: Introduction»
  15. ↑ Maxwell, Gregory (8 de setembro de 2013). «[tor-talk] NIST approved crypto in Tor?». Consultado em 20 de maio de 2015
  16. ↑ «SafeCurves: Rigidity». safecurves.cr.yp.to. Consultado em 20 de maio de 2015
  17. ↑ «The NSA Is Breaking Most Encryption on the Internet - Schneier on Security». www.schneier.com. 5 de setembro de 2013. Consultado em 20 de maio de 2015
  18. ↑ «Things that use Curve25519». Consultado em 23 de dezembro de 2015
  19. 1 2 Adamantiadis, Aris (3 de novembro de 2013). «OpenSSH introduces curve25519-sha256@libssh.org key exchange !». libssh.org. Consultado em 27 de dezembro de 2014
  20. ↑ «GnuPG - What's new in 2.1». Agosto de 2021
  21. ↑ A. Adamantiadis; libssh; S. Josefsson; SJD AB; M. Baushke; Juniper Networks, Inc. (fevereiro de 2020). «Secure Shell (SSH) Key Exchange Method Using Curve25519 and Curve448»
  22. ↑ B. Harris; L. Velvindron (fevereiro de 2020). «Ed25519 and Ed448 Public Key Algorithms for the Secure Shell (SSH) Protocol»
  23. ↑ «Transition Plans for Key Establishment Schemes». National Institute of Standards and Technology. 31 de outubro de 2017. Consultado em 4 de setembro de 2019
  24. ↑ RFC 7748. Disponível em rfc:7748.
  25. ↑ Regenscheid, Andrew (31 de outubro de 2019). «FIPS PUB 186-5». National Institute of Standards and Technology. doi:10.6028/NIST.FIPS.186-5-draft
  26. ↑ «Recommendations for Discrete Logarithm-Based Cryptography» (PDF)
  27. ↑ «Domain Name System Security (DNSSEC) Algorithm Numbers». Internet Assigned Numbers Authority. 5 de dezembro de 2024. Consultado em 27 de dezembro de 2024
  28. ↑ John Levine (setembro de 2018). «A New Cryptographic Signature Method for DomainKeys Identified Mail (DKIM)». IETF
  29. ↑ E Rescorla (setembro de 2018). «The Transport Layer Security (TLS) Protocol Version 1.3». IETF
  30. ↑ Werner Koch (15 de abril de 2016). «Libgcrypt 1.7.0 release announcement». Consultado em 22 de abril de 2016
  31. 1 2 3 4 5 6 7 SSH implementation comparison. «Comparison of key exchange methods». Consultado em 25 de fevereiro de 2016
  32. ↑ «Introduction». yp.to. Consultado em 11 de dezembro de 2014
  33. ↑ «nettle: curve25519.h File Reference». Fossies. Consultado em 19 de maio de 2015
  34. ↑ Limited, ARM. «PolarSSL 1.3.3 released - Tech Updates - mbed TLS (Previously PolarSSL)». tls.mbed.org. Consultado em 19 de maio de 2015
  35. ↑ «wolfSSL Embedded SSL/TLS Library | Products – wolfSSL». 4 de agosto de 2017
  36. ↑ «Botan: src/lib/pubkey/curve25519/curve25519.cpp Source File». botan.randombit.net
  37. ↑ Justinha. «TLS (Schannel SSP)». docs.microsoft.com. Consultado em 15 de setembro de 2017
  38. ↑ Denis, Frank. «Introduction · libsodium». libsodium.org
  39. ↑ «OpenSSL 1.1.0 Series Release Notes». OpenSSL Foundation. Consultado em 24 de junho de 2016
  40. ↑ «Add support for ECDHE with X25519. · openbsd/src@0ad90c3». GitHub
  41. ↑ «NSS 3.28 release notes». Consultado em 25 de julho de 2017
  42. ↑ «A pure-Rust implementation of group operations on ristretto255 and Curve25519». GitHub. Consultado em 14 de abril de 2021
  43. ↑ «Ed25519.java». GitHub. 13 de outubro de 2021
  44. ↑ Straub, Andreas (25 de outubro de 2015). «OMEMO Encryption». conversations.im
  45. ↑ «bitchat/BRING_THE_NOISE.md at 079f36664caf1d1deb0af56e596e3bffbc7dde1b · permissionlesstech/bitchat». GitHub. Consultado em 19 de julho de 2025
  46. ↑ «Cryptocat - Security». crypto.cat. Consultado em 24 de maio de 2016
  47. ↑ Frank Denis. «DNSCrypt version 2 protocol specification». GitHub. Consultado em 3 de março de 2016
  48. ↑ Matt Johnston. «Dropbear SSH - Changes». Consultado em 25 de fevereiro de 2016
  49. ↑ Bahtiar Gadimov; et al. «Gajim plugin for OMEMO Multi-End Message and Object Encryption». GitHub. Consultado em 1 de outubro de 2016
  50. ↑ «GNUnet 0.10.0». gnunet.org. Consultado em 11 de dezembro de 2014
  51. ↑ zzz (20 de setembro de 2014). «0.9.15 Release - Blog». Consultado em 20 de dezembro de 2014
  52. ↑ «go-ipfs_keystore.go at master». Github.com. 30 de março de 2022
  53. ↑ «Apple Platform Security». Apple Support
  54. ↑ «MRL-0003 - Monero is Not That Mysterious» (PDF). getmonero.com. Consultado em 5 de junho de 2018
  55. ↑ Murenin, Constantine A. (19 de janeiro de 2014). «OpenBSD Moving Towards Signed Packages — Based On D. J. Bernstein Crypto». Slashdot. Consultado em 27 de dezembro de 2014
  56. ↑ Murenin, Constantine A. (1 de maio de 2014). «OpenBSD 5.5 Released». Slashdot. Consultado em 27 de dezembro de 2014
  57. ↑ Friedl, Markus (29 de abril de 2014). «ssh/kex.c#kexalgs». BSD Cross Reference, OpenBSD src/usr.bin/. Consultado em 27 de dezembro de 2014
  58. ↑ Murenin, Constantine A. (30 de abril de 2014). «OpenSSH No Longer Has To Depend On OpenSSL». Slashdot. Consultado em 26 de dezembro de 2014
  59. ↑ «How does Peerio implement end-to-end encryption?». Peerio. Consultado em 4 de novembro de 2015
  60. ↑ «Proton Mail now offers elliptic curve cryptography for advanced security and faster speeds». 25 de abril de 2019
  61. ↑ «PuTTY Change Log». www.chiark.greenend.org.uk
  62. ↑ Steve Gibson (dezembro de 2019). «SQRL Cryptography whitepaper» (PDF)
  63. ↑ «Threema Cryptography Whitepaper» (PDF)
  64. ↑ Roger Dingledine & Nick Mathewson. «Tor's Protocol Specifications - Blog». Consultado em 20 de dezembro de 2014
  65. ↑ «Viber Encryption Overview». Viber. 3 de maio de 2016. Consultado em 24 de setembro de 2016
  66. ↑ Nidhi Rastogi; James Hendler (24 de janeiro de 2017). «WhatsApp security and role of metadata in preserving privacy». arXiv:1701.06817Acessível livremente [cs.CR]

Ligações externas