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
editarA 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
editarEm 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
editarProtocolos
editar- OMEMO, uma extensão proposta para XMPP (Jabber)[44]
- Secure Shell (SSH)
- Signal Protocol
- Matrix
- Tox
- Zcash
- Transport Layer Security
- WireGuard
Aplicações
editar- Bitchat[45]
- Aplicação Android Conversations OMEMO
- Cryptocat[46]
- DNSCrypt[47]
- DNSCurve
- DNSSEC
- Dropbear[31][48]
- Facebook Messenger
- Gajim através de plugin[49]
- GNUnet[50]
- GnuPG
- Google Allo
- I2P[51]
- IPFS[52]
- iOS[53]
- Monero[54]
- OpenBSD e signifyUsado para assinar lançamentos e pacotes[55][56]}}
- OpenSSH[31]Troca de chaves exclusiva no OpenSSH 6.7 quando compilado sem.[57][58]}}
- Peerio[59]
- Proton Mail[60]
- PuTTY[61]
- Signal
- Silent Phone
- SmartFTP[31]
- SSHJ[31]
- SQRL[62]
- Threema Instant Messenger[63]
- TinySSH[31]
- TinyTERM[31]
- Tor[64]
- Viber[65]
- WhatsApp[66]
- Wire
- WireGuard
Referências
editar- ↑ Bernstein. «Irrelevant patents on elliptic-curve cryptography». cr.yp.to. Consultado em 8 de fevereiro de 2016
- ↑ 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.
- ↑ «X25519». Crypto++. 5 de março de 2019. Consultado em 3 de fevereiro de 2023
- ↑ «[Cfrg] 25519 naming». Consultado em 25 de fevereiro de 2016
- ↑ Nath, Kaushik; Sarkar, Palash (2018). «Efficient Arithmetic In (Pseudo-)Mersenne Prime Order Fields». Consultado em 10 de maio de 2025
- ↑ 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) - ↑ 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) - ↑ 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
- ↑ 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
- ↑ 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
- ↑ 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) - ↑ 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
- ↑ 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
- ↑ «SafeCurves: Introduction»
- ↑ Maxwell, Gregory (8 de setembro de 2013). «[tor-talk] NIST approved crypto in Tor?». Consultado em 20 de maio de 2015
- ↑ «SafeCurves: Rigidity». safecurves.cr.yp.to. Consultado em 20 de maio de 2015
- ↑ «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
- ↑ «Things that use Curve25519». Consultado em 23 de dezembro de 2015
- ↑ 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
- ↑ «GnuPG - What's new in 2.1». Agosto de 2021
- ↑ 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»
- ↑ B. Harris; L. Velvindron (fevereiro de 2020). «Ed25519 and Ed448 Public Key Algorithms for the Secure Shell (SSH) Protocol»
- ↑ «Transition Plans for Key Establishment Schemes». National Institute of Standards and Technology. 31 de outubro de 2017. Consultado em 4 de setembro de 2019
- ↑ RFC 7748. Disponível em rfc:7748.
- ↑ 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
- ↑ «Recommendations for Discrete Logarithm-Based Cryptography» (PDF)
- ↑ «Domain Name System Security (DNSSEC) Algorithm Numbers». Internet Assigned Numbers Authority. 5 de dezembro de 2024. Consultado em 27 de dezembro de 2024
- ↑ John Levine (setembro de 2018). «A New Cryptographic Signature Method for DomainKeys Identified Mail (DKIM)». IETF
- ↑ E Rescorla (setembro de 2018). «The Transport Layer Security (TLS) Protocol Version 1.3». IETF
- ↑ 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) - ↑ a b c d e f g SSH implementation comparison. «Comparison of key exchange methods». Consultado em 25 de fevereiro de 2016
- ↑ «Introduction». yp.to. Consultado em 11 de dezembro de 2014
- ↑ «nettle: curve25519.h File Reference». Fossies. Consultado em 19 de maio de 2015
- ↑ Limited, ARM. «PolarSSL 1.3.3 released - Tech Updates - mbed TLS (Previously PolarSSL)». tls.mbed.org. Consultado em 19 de maio de 2015
- ↑ «wolfSSL Embedded SSL/TLS Library | Products – wolfSSL». 4 de agosto de 2017
- ↑ «Botan: src/lib/pubkey/curve25519/curve25519.cpp Source File». botan.randombit.net
- ↑ Justinha. «TLS (Schannel SSP)». docs.microsoft.com. Consultado em 15 de setembro de 2017
- ↑ Denis, Frank. «Introduction · libsodium». libsodium.org
- ↑ «OpenSSL 1.1.0 Series Release Notes». OpenSSL Foundation. Consultado em 24 de junho de 2016
- ↑ «Add support for ECDHE with X25519. · openbsd/src@0ad90c3». GitHub
- ↑ «NSS 3.28 release notes». Consultado em 25 de julho de 2017
- ↑ «A pure-Rust implementation of group operations on ristretto255 and Curve25519». GitHub. Consultado em 14 de abril de 2021
- ↑ «Ed25519.java». GitHub. 13 de outubro de 2021
- ↑ Straub, Andreas (25 de outubro de 2015). «OMEMO Encryption». conversations.im
- ↑ «bitchat/BRING_THE_NOISE.md at 079f36664caf1d1deb0af56e596e3bffbc7dde1b · permissionlesstech/bitchat». GitHub. Consultado em 19 de julho de 2025
- ↑ «Cryptocat - Security». crypto.cat. Consultado em 24 de maio de 2016
- ↑ Frank Denis. «DNSCrypt version 2 protocol specification». GitHub. Consultado em 3 de março de 2016
- ↑ Matt Johnston. «Dropbear SSH - Changes». Consultado em 25 de fevereiro de 2016
- ↑ Bahtiar Gadimov; et al. «Gajim plugin for OMEMO Multi-End Message and Object Encryption». GitHub. Consultado em 1 de outubro de 2016
- ↑ «GNUnet 0.10.0». gnunet.org. Consultado em 11 de dezembro de 2014
- ↑ zzz (20 de setembro de 2014). «0.9.15 Release - Blog». Consultado em 20 de dezembro de 2014
- ↑ «go-ipfs_keystore.go at master». Github.com. 30 de março de 2022
- ↑ «Apple Platform Security». Apple Support
- ↑ «MRL-0003 - Monero is Not That Mysterious» (PDF). getmonero.com. Consultado em 5 de junho de 2018
- ↑ 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
- ↑ Murenin, Constantine A. (1 de maio de 2014). «OpenBSD 5.5 Released». Slashdot. Consultado em 27 de dezembro de 2014
- ↑ 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
- ↑ Murenin, Constantine A. (30 de abril de 2014). «OpenSSH No Longer Has To Depend On OpenSSL». Slashdot. Consultado em 26 de dezembro de 2014
- ↑ «How does Peerio implement end-to-end encryption?». Peerio. Consultado em 4 de novembro de 2015
- ↑ «Proton Mail now offers elliptic curve cryptography for advanced security and faster speeds». 25 de abril de 2019
- ↑ «PuTTY Change Log». www.chiark.greenend.org.uk
- ↑ Steve Gibson (dezembro de 2019). «SQRL Cryptography whitepaper» (PDF)
- ↑ «Threema Cryptography Whitepaper» (PDF)
- ↑ Roger Dingledine & Nick Mathewson. «Tor's Protocol Specifications - Blog». Consultado em 20 de dezembro de 2014
- ↑ «Viber Encryption Overview». Viber. 3 de maio de 2016. Consultado em 24 de setembro de 2016
- ↑ Nidhi Rastogi; James Hendler (24 de janeiro de 2017). «WhatsApp security and role of metadata in preserving privacy». arXiv:1701.06817
[cs.CR]