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.[1] A implementação de referência é um software de domínio público.[2][3]

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.[4]

Propriedades matemáticas

editar

A curva utilizada é , uma Curva de Montgomery, sobre o corpo primo definido pelo número primo pseudo-Mersenne[5] (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.[6]

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.[7]

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

A curva é birracionalmente equivalente a uma Curva de Edwards torcida utilizada no esquema de assinatura Ed25519.[9][10][11]

História

editar

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

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.[12] Embora não estivessem diretamente relacionados,[13] aspetos suspeitos das constantes das curvas P do NIST[14] levaram a preocupações[15] de que a NSA tivesse escolhido valores que lhes concedessem uma vantagem na quebra da criptografia.[16][17]

"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.[18] A partir de 2014, o OpenSSH[19] adotou por padrão o ECDH baseado na Curve25519 e o GnuPG adicionou suporte para chaves Ed25519 para assinatura e criptografia.[20] O uso da curva acabou por ser padronizado tanto para a troca de chaves quanto para assinatura em 2020.[21][22]

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.[23] Ambas estão descritas na RFC 7748.[24] Um rascunho de 2019 do "FIPS 186-5" denota a intenção de permitir o uso de Ed25519[25] para assinaturas digitais. A atualização de 2023 da Publicação Especial 800-186 permite a utilização da Curve25519.[26]

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.[27]

Em 2018, a especificação DKIM foi emendada de modo a permitir assinaturas com este algoritmo.[28] 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.[29]

Bibliotecas

editar

Protocolos

editar

Aplicações

editar


Referências

editar
  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. a b 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  Parâmetro desconhecido |linkautor= ignorado (ajuda)
  7. Lange, Tanja. «EFD / Genus-1 large-characteristic / XZ coordinates for Montgomery curves». EFD / Explicit-Formulas Database. Consultado em 8 de fevereiro de 2016  Parâmetro desconhecido |linkautor1= ignorado (ajuda)
  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  Parâmetro desconhecido |linkautor1= ignorado (ajuda)
  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. a b 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  Parâmetro desconhecido |linkautor= ignorado (ajuda)
  31. a b c d e f g 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

editar

📚 Artikel Terkait di Wikipedia

História dos ambientes virtuais de aprendizagem

SumTotal Systems U.S. Department of Education Luker, Mark (1986). «An efficient, portable authoring language for microcomputers». Proceedings of the 1986

Mersenne Twister

Makoto Matsumoto; Takuji Nishimura; François Panneton; Pierre L'Ecuyer. «Efficient Jump Ahead for F2-Linear Random Number Generators» (PDF). Consultado em