🔐 Cripto App

Firmas digitales (RSA)

Firmar es "cifrar con la llave privada"; verificar es "descifrar con la llave pública" y comparar contra el hash del mensaje.

Calculando…

Tip: primero firma un mensaje en modo "Firmar" con d=2753, n=3233 (par de ejemplo). Copia el número de firma que te da, y pégalo en modo "Verificar" con e=17, n=3233, usando el mismo mensaje exacto. Si cambias una sola letra del mensaje, la verificación debería fallar.

¿Por qué funciona esto matemáticamente?

Firmar es aplicar la operación inversa de cifrar: en vez de cifrar con la llave pública (e) y descifrar con la privada (d), aquí se "cifra" el hash del mensaje con la llave privada (d) — algo que solo el dueño de esa llave puede hacer — y cualquiera puede "descifrarlo" con la llave pública (e) para comprobar que efectivamente vino de ese dueño.

s = H(m)^d mod n   ·   verificar: s^e mod n =? H(m)

Como (m^e)^d ≡ m (mod n) para cualquier m (por el teorema de Euler, ver la nota de RSA), lo mismo aplica en el otro sentido: (H(m)^d)^e ≡ H(m) (mod n). Se firma el hash del mensaje, no el mensaje completo, por dos razones: es mucho más corto (eficiencia) y evita ciertos ataques algebraicos que existen si se firma el mensaje directamente.

En el mundo real: las firmas digitales dan no repudio — el firmante no puede negar haber firmado, porque solo él tiene la llave privada. Esto es la base de la validez legal de documentos firmados electrónicamente y de la verificación de certificados digitales (siguiente tema).