¿Qué es el algoritmo de firma ECDSA?
ECDSA. El algoritmo de firma digital de curva elíptica es una modificación del algoritmo DSA que utiliza operaciones en puntos de curva elíptica en lugar de la exponenciación que utiliza el DSA (problema de logaritmo discreto). La principal ventaja de este esquema es que requiere números de tamaño más pequeño para proporcionar la misma seguridad que las dietas o la RSA. Existen dos tipos de curvas, dependiendo del campo finito en el que se definan, que pueden ser GF (P) o GF (2m).
El cifrado de la curva elíptica ya es uno de los más populares, es extremadamente seguro desde el punto de vista matemático y, en comparación con RSA, ECDSA utiliza claves más pequeñas y, en general, es una implementación más eficiente. ECDSA es actualmente el esquema utilizado por Bitcoin, Ethereum y la mayoría de los protocolos de cadenas de bloques.
Las curvas elípticas tienen ciertas características que las hacen especiales en el mundo de la criptografía. A diferencia del RSA que multiplica dos grandes números primos para obtener la clave pública, ECDSA utiliza una serie de operaciones aritméticas especiales en puntos de una curva elíptica. Para ello se utilizan dos tipos de operaciones especiales: la suma y la multiplicación de puntos en la curva. Primero, veamos cuál es la suma y la multiplicación y luego expliquemos cómo se calcula la clave pública.
Los primeros algoritmos de encriptación de clave pública se basaron en el factoraje de grandes números primos, como se describe en nuestro artículo sobre la base matemática del algoritmo RSA, pero ya no se consideran seguros cuando se utilizan claves cortas. La encriptación de la curva elíptica con los medios técnicos actuales genera claves «intratables» en inglés, que traducidas al español significan «difíciles de resolver» pero no imposibles, aunque con la tecnología actual llevaría miles de años.
Proceso de firma y verificación del algoritmo de firma ECDSA
Generación de claves
- Seleccione una curva elíptica E.
- Seleccione un punto P (perteneciente a E) de la orden n.
- Seleccione aleatoriamente un número d en el rango[1, n – 1].
Calcular Q = dP.
- d será la clave privada.
- Q será la clave pública.
Proceso de firma
- Seleccione un número k aleatorio.
- Calcular kP = (x1, y1).
- Calcular r = x1 mod n. Si r = 0, volver al primer paso. (En este paso x1 se trata como un número entero).
- Calcular (k-1) mod n.
- Calcular s = k-1 (H (m) + dr) mod n. Si s = 0, volver al primer paso (H (m) es el hash del mensaje a firmar, calculado con el algoritmo SHA-1).
La firma del mensaje m son los números r y s.
Proceso de verificación
Compruebe que r y s están dentro del rango[1, n – 1].
- Calcular w = s-1 mod n.
- Calcular u1 = H (m) w mod n.
- Calcular u2 = r – w mod n.
- Calcular u1P + u2Q = (x0, y0)
- Calcular v = x0 mod n
La firma verifica si y sólo si v = r
¿Por qué el protocolo Bitcoin utiliza el cifrado de curva elíptica?
Uno de los problemas más importantes que Satoshi Nakamoto tuvo que afrontar al crear el protocolo Bitcoin fue la distribución de claves públicas. Era importante poder utilizar claves públicas breves pero seguras que pudieran compartirse en códigos QR, imprimirse en dispositivos físicos y compartirse por teléfono si fuera necesario.
La principal ventaja de la encriptación de curva elíptica es la capacidad de crear claves más pequeñas, reduciendo así los requisitos de almacenamiento y transmisión. Una clave basada en el cifrado de curva elíptica puede proporcionar el mismo nivel de seguridad con una clave de 256 bits que un algoritmo RSA con una clave de 2048 bits.
El algoritmo ECDSA crea claves de 256 bits codificadas con el sistema de numeración posicional Base58 de Bitcoin, que proporciona claves de 44 dígitos sin incluir el número de versión ni los dígitos de control. Una clave RSA necesitaría 350 dígitos.
La razón principal del uso de la encriptación de curva elíptica era, por tanto, facilitar el manejo de las direcciones públicas del protocolo Bitcoin.
Aun así, Satoshi Nakamoto decidió que los 44 dígitos eran demasiados para un discurso público y decidió aplicar un proceso de funciones hash a la creación de claves públicas que explicaremos en otro artículo. La clave pública inicial de ECDSA termina al final de este proceso de 160 bits que, incluyendo datos de versión y dígitos de control, tiene de 27 a 34 dígitos. Por ejemplo, como esta dirección pública: 1DZEazabbJqtr2uciLFNxvgm1GBuS5kaej