Problema: los documentos a firmar pueden ser muy grandes
https://cryptobook.nakov.com/digital-signatures/rsa-signatures
Cifrando el hash de un mensaje con nuestra clave privada, aseguramos que ese mensaje lo hemos enviado nosotros y cualquier puede verificarlo
Firma digital de un mensaje = cifrado del hash de un mensaje con mi clave privada
Solución: cifrar solo el hash del mensaje
En firma digital se cifra el hash del mensaje con nuestra clave privada
doc que quiere firmar(alice_pub, alice_priv)firma = cifrado_RSA(hash_SHA256(doc), alice_priv))(doc, firma)(doc_recibido, firma)alice_pubhash_doc_recibido = hash_SHA256(doc)firma_descifrada = descifrado_RSA(firma, alice_pub)hash_doc_recibido === firma_descifrada
Todo este proceso se estandariza con PKCS#7

Las firmas pueden ir (1) archivos separados; (2) firmas dentro de documento; (3) documento dentro de firma
#######################
# Alice genera un par de claves
# el archivo alice_priv.pem incluye las dos, pública y privada
openssl genrsa -out alice_priv.pem 2048
# Alice puede extraer la clave pública para distribuirla al mundo
openssl rsa -in alice_priv.pem -outform PEM -pubout -out alice_pub.pem
#######################
# Alice firma archivo.txt
openssl dgst -sha256 -sign alice_priv.pem -out archivo.sig archivo.txt
# Alice envía a Bob: archivo.sig y archivo.txt
########################
# Bob verifica. Necesita alice_pub.pem, archivo.sig y archivo.txt
# (Veremos en otras sesiones cómo obtiene alice_pub.pem)
openssl dgst -sha256 -verify alice_pub.pem -signature archivo.sig archivo.txt

(archivo anterior, hasheado y cifrado con clave privada de Debian)
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEE35ucSeqpKYQyWJ122ofoDWKUvpsFAmBfrDUACgkQ2ofoDWKU
vpsNrRAAh+bSjSbiIXcugkI9faItOdKnwM+JaqGFRrDVK68Qbc/Y5Nv4Z8KmhL/a
7nlzOrwA7dyEWFuwRiyLpoZOnlNLTXLWr8/7UJhJGt//2vJFpoHmBcXKnRFeZHfE
4XXhAq7XA/naPoTHfbuEAFVqZlnWhewBtsvwL3cn/FwyvsujCxEK9LtXl6L7ziK5
Am6LcIB6TJe3shMeUSRmvhF+d/dZ1LTYKwmm4SkCLsp0Z52dg8eRUpbq2uyQpkHM
TdtC0kE4a2u7GmDZD+VIggslfHS2tm3vE9RLfWcobjoF51bvowrPGFGm9tg+ANFt
We+sUDNv+cAUrTq9dfwoDBJueR4IRxAZoEKyl4V4mxtRsawG6w0Uzz66qrq7ROUn
isBz3sGBcNerI6uOUfP/U1mMmDMsjbaVSQCUsM9Pzpt8Y39vHgzMVwTGOkfzgUZJ
Qcf+cqyGDSpin2DjcPlUAKKtGdnnWDPVPskrgSTxzQmV8n+VgEiGRW1y46i5sh4t
dc4ETsKoz2H1JFVJY/t3kAthHCAkW/hhDX4mBM8ZPSdfNZiXNNOZGu673VwLI/bN
pN8+FgezKfD8iZHWZxHk++91Kj8sZVToVI3m8rL5nKvhEKLFNS7XDq2bmKKbtF0t
kKw8HI5Tzv55YG0P4oToeLpE6ajxxZVrCAGJvD6lMiyfftOYU2A=
=KWqY
-----END PGP SIGNATURE-----
CMS Advanced Electronic Signatures
The *AdES collection, información técnica de implementación
Formatos de Firma, portal de administración electrónica del Gobierno de España


En Acrobat: All Tools -> Use a certificate -> marca donde quieres que "se vea" la firma
Fíjate en el ejemplo:
https://administracionelectronica.gob.es/ctt/verPestanaGeneral.htm?idIniciativa=tsa
https://freetsa.org/index_es.php
Firma electrónica aceptada por la administración como equivalente a la firma manuscrita
¡No tiene por qué ser la mejor!
Caso DNI-e en España: mínima implantación por problemas de usabilidad
Se exige personarse presencialmente en una agencia de certificación
Además del contenido del documento, es necesario asegurar cuándo se ha realizado la firma digital, y las condiciones en las que se ha hecho:
Veremos más detalles técnicos en el tema de certificados
Observa: una firma digital valida el documento completo, no las páginas separadas
Aún así, es posible mostrar una "prueba de firma digital" en todas las páginas
La administración solo admite firmas/sellos electrónicos cualificados
En Europa, asimilables a firma manuscrita o sello de entidad
ojo: firmas no cualificadas podrían tener también efectos jurídicos
The ROCA factorization attack could potentially allow a remote attacker to reverse-calculate a private encryption key just by having a target’s public key
Algunas tarjetas utilizaban una implementación no segura
Se tuvieron que retirar todas y no aceptar firma electrónica durante ese periodo
Del anuncio de la vulnerabilidad (https://crocs.fi.muni.cz/public/papers/rsa_ccs17):
The time complexity and cost for the selected key lengths (Intel E5-2650 v3@3GHz Q2/2014):
Hasta ahora hemos visto cómo ofrecer confidencialidad. La firma digital nos permite ofrecer el resto de servicios, pero para poder hacer firma digital tenemos que conocer qué son las funciones de hash
Ejemplos de valores de hash: - el primero "resume" un texto "Fox" en otro más largo: la función de hash siempre tiene la misma longitud, incluso si el texto es corto: SHA-256 siempre dará un resumen de 256 bits sea como sea el texto de entrada. - Los demás son variaciones del mismo texto de entrada. Fíjate: pequeñas variaciones dan un hash diferente a simple vista ¿Qué tenemos que cambiar en "The red fox jumps over the blue dog" para que tenga el mismo hash? Es decir, para que el hash no detecte el cambio. Ya que el texto es mayor de 256 bits, sabemos seguro que habrá otro texto que tendrá el mismo resumen. Pero lo único que podemos hacer es probar cambios uno y otro hasta tener suerte!