Glosario / Referencia para desarrolladores
Firma SSL
- ¿Qué es una firma SSL?
- Firma SSL (SSL signature) es el nombre que BIP70 dio a los bytes que firman un mensaje PaymentRequest con la clave del certificado de un servidor web, y la denominación ya era impropia al escribirse.
Se especifica en el BIP-70.
En una firma SSL no interviene ningún protocolo SSL. Los bytes son una firma X.509 corriente sobre un mensaje serializado, hecha con la clave privada de un certificado de servidor TLS, y RFC 7568 prohibió formalmente el protocolo SSL 3.0 en junio de 2015. Quien lea documentación antigua de bitcoin debería entender la expresión como "firma de certificado" y seguir adelante.
Cómo funciona
Estado: la firma SSL murió junto con BIP70, el protocolo que la definía. Bitcoin Core incluyó BIP70 desde marzo de 2014 hasta que la versión 0.20.0 lo eliminó, y hoy ningún software mantenido produce ni verifica estas firmas. La expresión sobrevive en la referencia para desarrolladores de bitcoin.org, que es donde la mayoría de la gente la encuentra.
El algoritmo lo elegía un campo hermano, no lo anunciaba la propia firma. Una solicitud de pago declaraba su campo pki_type como none, x509+sha256 o x509+sha1. Ese valor indicaba el formato del certificado y la función hash, mientras que el algoritmo de firma venía dado por la clave que llevara el certificado del comerciante, en la práctica RSA. Un verificador reconstruía los bytes exactos que había firmado el comerciante, calculaba su hash con la función hash indicada y comparaba el resultado con la clave pública del primer certificado de la cadena de certificados adjunta.
Dos de las tres opciones envejecieron mal. El valor x509+sha1 ya era débil antes incluso de que se publicara BIP70, puesto que NIST había prohibido SHA-1 para generar firmas digitales después del 31 de diciembre de 2013. Para enero de 2020, unos investigadores demostraron una colisión de prefijo elegido contra SHA-1 por aproximadamente $45.000 de tiempo de GPU alquilado, que es precisamente el ataque que permite cambiar un documento firmado por otro. Desde entonces, NIST ha establecido el 31 de diciembre de 2030 como el momento en que SHA-1 sale por completo de sus algoritmos aprobados.
La cuestión de fondo es que esta firma y una firma de bitcoin responden a preguntas distintas. Cada nodo verifica una firma dentro de una transacción de bitcoin según las reglas de consenso, sobre la curva secp256k1, con ECDSA o, desde que Taproot se activó en el bloque 709.632 el 14 de noviembre de 2021, con Schnorr tal como lo especifica BIP340. Una firma SSL la verificaba una sola billetera contra un almacén de certificados mantenido por un proveedor. Una autoriza el movimiento de dinero y nadie puede anularla. La otra era una afirmación sobre quién lo pedía.
Dónde aparece
Las firmas de certificado no desaparecieron; solo desapareció el nombre del campo de BIP70. Su navegador sigue viendo cómo un servidor demuestra que posee la clave de su certificado durante la negociación inicial (handshake) de TLS, y esa es la versión honesta de lo que BIP70 intentaba tomar prestado.
La versión que merece atención cuando usted conserva bitcoin es la firma de código. El software de billetera y el firmware de las billeteras de hardware se firman con claves que controla el fabricante, y verificar esa firma antes de instalar es el paso que detecta una descarga manipulada. Los dispositivos Trezor y Ledger verifican las firmas del firmware en el propio dispositivo y rechazan, o señalan con avisos muy visibles, las compilaciones que no pueden autenticar. Esa es una firma que hace un trabajo real, a diferencia del campo de BIP70, porque protege las claves que guardan sus monedas y no el nombre impreso en una página de pago.
Firma SSL frente a firma digital
Una firma SSL no autorizaba nada en la blockchain. Una firma digital en una transacción de bitcoin desbloquea una salida concreta y la verifican de forma independiente miles de nodos; el campo de BIP70 lo verificaba un único programa cliente contra una lista de autoridades de certificación. Las consecuencias de perder la clave difieren igual de marcadamente. Una clave de certificado comprometida se revoca y se vuelve a emitir esa misma tarde. Una clave de bitcoin comprometida significa que las monedas ya han desaparecido.