ECDSA. Elliptic Curve Digital Signature Algorithm es una variante del algoritmo DSA que emplea operaciones sobre puntos de curvas elípticas en lugar de las exponenciaciones que usa DSA (problema del logaritmo discreto). La principal ventaja de este esquema es que requiere números de tamaños menores para brindar la misma seguridad que DSA o RSA. Existen dos tipos de curvas dependiendo del campo finito en el que se definan, que pueden ser GF(P) o GF(2m).
Proceso de firma y verificación
- Generación de llaves
- Seleccione una curva elíptica E.
- Seleccione un punto P (que pertenezca a E) de orden n.
- Seleccione aleatoriamente un número d en el intervalo [1, n - 1].
- Calcule Q = dP.
- d será la llave privada.
- Q será la llave pública.
- Proceso de firma
- Seleccione un número k de forma aleatoria.
- Calcule kP = (x1,y1).
- Calcule r = x1 mod n. Si r = 0 regresa al primer paso. (En este paso x1 es tratado como un entero).
- Calcule (k-1) mod n.
- Calcule s = k-1(H(m) + dr) mod n. Si s = 0 regrese 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
- Verifique que r y s estén dentro del rango [1,n - 1].
- Calcule w = s-1 mod n.
- Calcule u1 = H(m)w mod n.
- Calcule u2 = r·w mod n.
- Calcule u1P + u2Q = (x0,y0)
- Calcule v = x0 mod n
- La firma verifica si y solo si v = r