En criptografía de clave pública, el algoritmo de firma digital de curva de Edwards (EdDSA) es un esquema de firma digital que utiliza una variante de la firma de Schnorr basada en curvas de Edwards torcidas. Está diseñado para ser más rápido que los esquemas de firma digital existentes sin sacrificar la seguridad. Fue desarrollado por un equipo que incluía a Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe y Bo-Yin Yang.[1] La implementación de referencia es el software de dominio público.[2]
Resumen
La siguiente es una descripción simplificada de EdDSA, ignorando los detalles de codificación de números enteros y puntos de curva como cadenas de bits; los detalles completos están en los documentos y RFC.[1]
Un esquema de firma EdDSA es una elección:
- de campo finito
sobre potencia prima impar
;
- de curva elíptica
sobre
cuyo grupo
de -los puntos racionales tienen orden
, dónde
es un primo grande y
se llama el cofactor;
- de punto base
Con orden
; y
- de la función hash criptográfica
con salidas de
bits, donde
para que elementos de
y puntos de curva en
pueda ser representado por cadenas de
bits
Estos parámetros son comunes a todos los usuarios del esquema de firma EdDSA. La seguridad del esquema de firma EdDSA depende de manera crítica de las elecciones de parámetros, excepto por la elección arbitraria del punto base; por ejemplo, se espera que el algoritmo rho de Pollard para logaritmos tome aproximadamente
adiciones de curvas antes de que pueda calcular un logaritmo discreto, por lo que
debe ser lo suficientemente grande para que esto no sea factible y, por lo general, se considera que supera los 2200.[3] La elección de
está limitada por la elección de
, ya que por el teorema de Hasse,
no puede diferir de
por más de
. la función hash
normalmente se modela como un oráculo aleatorio en los análisis formales de la seguridad de EdDSA. En la variante HashEdDSA, una función hash adicional resistente a colisiones
se necesita
Dentro de un esquema de firma EdDSA,
- Clave pública
- Una clave pública EdDSA es un punto de curva
, codificado en
bits
- Firma
- Una firma EdDSA en un mensaje
por clave pública
es el par
, codificado en
bits, de un punto de curva
y un entero
satisfaciendo la siguiente ecuación de verificación.
denota concatenación.
- Clave privada
- Una clave privada EdDSA es una cadena de
bits
que debe elegirse uniformemente al azar. La clave pública correspondiente es
, donde
es el menos significativo
pedazos de
interpretado como un número entero en little-endian. La firma en un mensaje
es
dónde
por
, y![{\displaystyle S\equiv r+H(R\parallel A\parallel M)s{\pmod {\ell }}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c6ea40f04690fd347453d7a975fa1203e554fbd5)
Ed25519
Ed25519 es el esquema de firma EdDSA que utiliza SHA-512 (SHA-2) y Curve25519[1] donde
![{\displaystyle q=2^{255}-19,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/efb5112630883ccb8eddbdc762c54696bc78abc3)
es la curva torcida de Edwards
y ![{\displaystyle c=3}](https://wikimedia.org/api/rest_v1/media/math/render/svg/da6c3ad0b12414cdd2dad18f1ebd555f89ae5ece)
es el único punto en
cuyo
coordenada es
y de quien
coordenada es positiva. "positivo" se define en términos de codificación de bits:
- Las coordenadas "positivas" son coordenadas pares (se borra el bit menos significativo)
- Las coordenadas "negativas" son coordenadas impares (se establece el bit menos significativo)
es SHA-512, con
.
La curva
es biracionalmente equivalente a la curva de Montgomery conocida como Curve25519. La equivalencia es[1][4]
Rendimiento
El equipo original ha optimizado Ed25519 para la familia de procesadores x86-64 Nehalem/Westmere . La verificación se puede realizar en lotes de 64 firmas para un rendimiento aún mayor. Ed25519 está destinado a proporcionar una resistencia a los ataques comparable a los cifrados simétricos de 128 bits.[5] Las claves públicas tienen una longitud de 256 bits y las firmas tienen una longitud de 512 bits.[6]
Codificación segura
Como características de seguridad, Ed25519 no utiliza operaciones de rama ni pasos de indexación de matriz que dependan de datos secretos, a fin de derrotar muchos ataques de canal lateral.
Al igual que otros esquemas de firma basados en registros discretos, EdDSA utiliza un valor secreto llamado nonce único para cada firma. En los esquemas de firma DSA y ECDSA, este nonce se genera tradicionalmente de forma aleatoria para cada firma, y si el generador de números aleatorios alguna vez se rompe y es predecible al realizar una firma, la firma puede filtrar la clave privada, como sucedió con el firmware de Sony PlayStation 3. actualizar la clave de firma.[7][8][9] Por el contrario, EdDSA elige el nonce de manera determinista como el hash de una parte de la clave privada y el mensaje. Por lo tanto, una vez que se genera una clave privada, EdDSA ya no necesita un generador de números aleatorios para hacer firmas, y no hay peligro de que un generador de números aleatorios roto que se usa para hacer una firma revele la clave privada.
Inconsistencias de estandarización e implementación
Tenga en cuenta que hay dos esfuerzos de estandarización para EdDSA, uno de IETF informativo, y uno de NIST como parte de FIPS 186-5 (2019).[10] Se han analizado las diferencias entre los estándares,[11][12] y los vectores de prueba están disponibles.[13]
Software
Los usos notables de Ed25519 incluyen OpenSSH,[14] GnuPG[15] y varias alternativas, y la herramienta signify de OpenBSD.[16] Se ha estandarizado el uso de Ed25519 (y Ed448) en el protocolo SSH. En 2019, una versión preliminar del estándar FIPS 186-5 incluía el Ed25519 determinista como esquema de firma aprobado.[10]
Ed448
Ed448 es el esquema de firma EdDSA que utiliza SHAKE256 y Curve448 definido en la RFC 8032. También ha sido aprobado en el borrador del estándar FIPS 186-5.[10]
Referencias
- ↑ a b c d Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Bo-Yin Yang (2012). «High-speed high-security signatures». Journal of Cryptographic Engineering 2 (2): 77-89. doi:10.1007/s13389-012-0027-1.
- ↑ «Software». 11 de junio de 2015. Consultado el 7 de octubre de 2016. «The Ed25519 software is in the public domain.»
- ↑ Daniel J. Bernstein. «ECDLP Security: Rho». SafeCurves: choosing safe curves for elliptic-curve cryptography. Consultado el 16 de noviembre de 2016.
- ↑ Bernstein, Daniel J.; Lange, Tanja (2007). «Faster Addition and Doubling on Elliptic Curves». En Kurosawa, Kaoru, ed. Advances in Cryptology – ASIACRYPT 2007 (en inglés) (Springer) 4833: 29-50. ISBN 978-3-540-76900-2. doi:10.1007/978-3-540-76900-2_3. Consultado el 30 de diciembre de 2022.
- ↑ Daniel J. Bernstein (22 de enero de 2017). «Ed25519: high-speed high-security signatures». Consultado el 27 de septiembre de 2019. «This system has a 2^128 security target; breaking it has similar difficulty to breaking NIST P-256, RSA with ~3000-bit keys, strong 128-bit block ciphers, etc.»
- ↑ Daniel J. Bernstein (22 de enero de 2017). «Ed25519: high-speed high-security signatures». Consultado el 1 de junio de 2020. «Signatures fit into 64 bytes. […] Public keys consume only 32 bytes.»
- ↑ Johnston, Casey (30 de diciembre de 2010). «PS3 hacked through poor cryptography implementation». Ars Technica. Consultado el 15 de noviembre de 2016.
- ↑ fail0verflow (29 de diciembre de 2010). Chaos Communication Congress.
- ↑ «27th Chaos Communication Congress: Console Hacking 2010: PS3 Epic Fail». Consultado el 4 de agosto de 2019.
- ↑ a b c «FIPS 186-5 (Draft): Digital Signature Standard (DSS)». NIST. October 2019. doi:10.6028/NIST.FIPS.186-5-draft. Consultado el 11 de julio de 2022.
- ↑ Konstantinos Chalkias, Francois Garillot and Valeria Nikolaenko (1 de octubre de 2020). Security Standardisation Research Conference (SSR 2020).
- ↑ Jacqueline Brendel, Cas Cremers, Dennis Jackson, and Mang Zhao (3 de julio de 2020). IEEE Symposium on Security and Privacy (S&P 2021).
- ↑ «ed25519-speccheck». Consultado el 15 de febrero de 2021.
- ↑ «Changes since OpenSSH 6.4». 3 de enero de 2014. Consultado el 7 de octubre de 2016.
- ↑ «What's new in GnuPG 2.1». 14 de julio de 2016. Consultado el 7 de octubre de 2016.
- ↑ «Things that use Ed25519». 6 de octubre de 2016. Consultado el 7 de octubre de 2016.
- ↑ «eBACS: ECRYPT Benchmarking of Cryptographic Systems: SUPERCOP». 10 de septiembre de 2016. Consultado el 7 de octubre de 2016.
- ↑ «python/ed25519.py: the main subroutines». 6 de julio de 2011. Consultado el 7 de octubre de 2016.
- ↑ «Software: Alternate implementations». 11 de junio de 2015. Consultado el 7 de octubre de 2016.
- ↑ Frank Denis (29 de junio de 2016). «libsodium/ChangeLog». Consultado el 7 de octubre de 2016.
- ↑ «wolfSSL Embedded SSL Library (formerly CyaSSL)». Consultado el 7 de octubre de 2016.
- ↑ «Heuristic Algorithms and Distributed Computing». Èvrističeskie Algoritmy I Raspredelennye Vyčisleniâ (en ruso): 55-56. 2015. ISSN 2311-8563. Archivado desde el original el 20 de octubre de 2016. Consultado el 7 de octubre de 2016.
- ↑ Frank Denis. «Minisign: A dead simple tool to sign files and verify signatures.». Consultado el 7 de octubre de 2016.
- ↑
- ↑ «Virgil Security Crypto Library for C: Library: Foundation». Consultado el 4 de agosto de 2019.
- ↑ «System security for watchOS». Consultado el 7 de junio de 2021.
- ↑ Matt Johnston (14 de noviembre de 2013). «DROPBEAR_2013.61test». Archivado desde el original el 5 de agosto de 2019. Consultado el 19 de octubre de 2022.
- ↑ «OpenSSL CHANGES». 31 de julio de 2019. Archivado desde el original el 18 de mayo de 2018. Consultado el 19 de octubre de 2022.