Las firmas estrictas DER (Distinguished Encoding Rules o Reglas de codificación distinguidas), son un tipo de codificación que se usa para garantizar la idoneidad de una firma digital bajo cualquier ambiente, y son usadas en Bitcoin y las criptomonedas para asegurar la validez de las firmas digitales.
Bitcoin es, sin duda alguna, un software criptográfico altamente especializado y una demostración de esto podemos verla en las firmas estrictas DER, una implementación criptográfica dirigida a brindar mayores niveles de seguridad en el protocolo, especialmente en el sistema de firmas de Bitcoin.
Las firmas estrictas DER (Distinguished Encoding Rules o Reglas de codificación distinguidas), son un tipo de codificación segura que se usa para garantizar la idoneidad de una firma digital bajo cualquier ambiente. Es decir, no importa si tu wallet está en un ordenador, smartphone u otro dispositivo, la codificación de la misma será la misma y su resolución será determinista de principio a fin. Esto resulta vital para Bitcoin, pues garantiza que sus firmas digitales serán seguras bajo diversos criterios. Y para nosotros los usuarios, nos brinda la seguridad de que el sistema posee altos estándares de seguridad.
Ahora ¿Cuál es el origen de las firmas estrictas DER? ¿Cuándo comenzó su desarrollo? ¿Cómo funcionan y dónde se aplican? Esto y mucho más lo examinaremos a continuación.
El desarrollo de las firmas estrictas DER
Como ya sabrá, Bitcoin usa firmas digitales del tipo ECDSA para garantizar un alto nivel de seguridad en sus transacciones. El uso de ECDSA junto con la curva criptográfica secp265k1, es lo que blinda a Bitcoin en cuanto al acceso de sus tokens y nos da la seguridad de que nuestros fondos no pueden ser hackeados fácilmente.
Para que Bitcoin hiciera uso de estas funciones, inicialmente este fue desarrollado usando la librería de criptoseguridad OpenSSL, un conocido proyecto de software libre que de momento se mantiene como un líder indiscutible de criptografía en la industria. Sin embargo, OpenSSL se ha visto atravesado por una serie de escándalos de seguridad que poco a poco han ido mermando la confianza en el proyecto.
Por ejemplo, en 2009 durante el temprano nacimiento de Bitcoin, OpenSSL presentó una grave vulnerabilidad (CVE-2008-5077) que afectó a su implementación de firmas ECDSA, dejando vulnerable a proyectos como Bitcoin. Otro problema grave se presentó en 2014 (CVE-2014-0076), el cual también afectó a esta función. Como estos fallos muchos otros comenzaron a surgir del proyecto y ante los eventos, Gregory Maxwell expuso que era hora de abandonar OpenSSL y sus constantes problemas.
Esos pasos iniciales para migrar a otra implementación segura de criptografía fueron luego apoyados por Pieter Wuille, quien en 2015 presentó el BIP-66 (BIP – Bitcoin Improvements Proposals) llamado “Strict DER Signatures”. Nacía así la implementación DER que tomaría las riendas del desarrollo en Bitcoin, y que dejaba a un lado OpenSSL junto con sus problemas e irrespeto de estándares de seguridad.
De esta forma, el nuevo estándar de firma estricta DER de Bitcoin aplicaría a los OP_CODES o códigos de operación, OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG u OP_CHECKMULTISIGVERIFY, a la que se aplica la verificación ECDSA y por ello deben codificarse utilizando una firma estricta DER.
¿Cómo funcionan las firmas estrictas DER?
básicamente lo que hace la codificación DER es; garantizar que las verificaciones ECDSA sean correctas en todo momento. Para lograr esto, cada firma se verifica no solo en formación sino en la forma en cómo ha sido codificada.
En primer lugar, las firmas ECDSA pasan por una verificación DER, esta se encarga de revisar que la codificación de la firma sea correcta. Cada firma ECDSA debe ser cuidadosamente codificada (o escrita) en Bitcoin, y cualquier modificación en este sentido indica que la firma no es confiable.
En ese caso, el protocolo Bitcoin simplemente rechaza la firma y detiene la ejecución del Bitcoin Script asociado a dicha firma. Sin embargo, si la firma estrictamente DER es válida, pero la firma ECDSA no lo es, la ejecución del Bitcoin Script asociado terminará invalidando la firma al final de su ejecución cuando esta no pase la verificación del script.
En cualquiera de los dos casos antes descritos podemos tener la seguridad de que las firmas ECDSA harán su trabajo: seguro nuestros bitcoins y las operaciones que realizamos con ellos. Y en este caso muy puntual, las firmas estrictas DER nos ayudan a tener una nueva medida de seguridad para mantener dicho funcionamiento ante cualquier situación.
La selección o diseño utilizado por Bitcoin para su implementación DER respeta los estándares de la Unión Internacional de Telecomunicaciones (ITU – International Telecommunication Union), específicamente el estándar X.690 – 2015, lo que deja en clara la alta calidad de la implementación.
Describiendo su funcionamiento
Como sabemos una firma digital en Bitcoin forma parte de los scriptSigs y scriptWitnesses de las transacciones. Dicha firma en realidad consiste en una codificación DER de una firma ECDSA, a la cual se le agrega un byte de tipo sighash.
Para generar esta codificación se usa el siguiente procedimiento:
- Se genera el “Objeto compuesto” usando 1 byte de información y marcándolo con el código 0x30 . Este objeto compuesto es la tupla de los valores (R, S) de la firma ECDSA.
- Longitud de 1 byte del objeto compuesto.
- El valor R de la firma, consiste en:
- Un tipo “Entero” de 1 byte marcado con 0x02
- Longitud de 1 byte del entero
- bytes del valor R de longitud variable
- El valor S de la firma, que consiste en:
- Un tipo “Entero” de 1 byte marcado con 0x02
- Longitud de 1 byte del entero
- bytes de valor S de longitud variable
- El byte de tipo sighash
Como resultado de este esquema, las firmas DER son más cortas que sus contrapartes ECDSA, alcanzando un máximo de 73 bytes (aprox 73 caracteres). Esto es muy importante, pues las hace más sencillas de manejar, consumen menos ancho de banda al enviarse a la red reduciendo la sobrecarga de la red y aumentan la cantidad de transacciones que caben en un bloque, aumentando la escalabilidad de la red.
¿Por qué es importante contar con una buena codificación DER?
En primer lugar debemos recordar que ECDSA es un sistema de firma digital determinista, por lo que bajo cualquier criterio, este algoritmo debe devolvernos siempre la misma firma, bajo las mismas condiciones de generación. Esto es esencial para la seguridad y nos garantiza que dos firmas ECDSA nunca serán iguales. Lo mismo se repite en el caso de la codificación DER; es decir, solo hay una secuencia única de datos válidos que codifican ciertos valores para una firma ECDSA.
Sin embargo, hay algunas implementaciones con errores (como la de OpenSSL) que producen codificaciones incorrectas en algunos casos. Por lo tanto, los verificadores de firma ECDSA a menudo son un poco indulgentes en lo que aceptan. En Bitcoin, esto es inaceptable porque conlleva errores de verificación de firmas y rompe el consenso de la red. Ante tales problemas, los desarrolladores de Bitcoin decidieron crear su propia implementación DER ajustaron las necesidades específicas de Bitcoin impidiendo así que otras implementaciones puedan afectar su funcionamiento.