Tecnología blockchain (I): sistema criptográfico

La tecnología de cadena de bloques o blockchain, bautizada como “máquina de la confianza” o trust machine, podría estar llamada a desempeñar un papel significativo en el funcionamiento de la economía, con un alcance aún por vislumbrarse. Esta tecnología permite albergar bases de datos públicas con acceso libre y anónimo de usuarios, registrando el historial de todas las transacciones, y manteniendo la integridad y confianza en los datos, sin una autoridad central que los valide.

De momento, su utilización más conocida son las criptomonedas como bitcoin, muchas veces vehículo de transacciones ilegales, lo que confiere una connotación negativa a la tecnología subyacente. Sin embargo, tiene un gran potencial para otro tipo de actividades como los registros de propiedad inmobiliaria, la propiedad de bienes de lujo o de obras de arte. Blockchain surge del desarrollo de la criptografía y está sustentada en técnicas de matemática avanzada. A lo largo de una serie de entradas describiremos su funcionamiento para proporcionar al menos una idea intuitiva de su potencial y limitaciones.

En esta primera entrega se describe el procedimiento utilizado para poder registrarse en el sistema de forma anónima, es decir, sin aportar identificación personal alguna, así como a la manera de generar las transacciones que se quieren registrar. En un posterior artículo se tratará del método establecido para validar las transacciones y su posterior incorporación en la cadena de bloques de forma que se asegure su integridad. La entrega final hará referencia al bitcoin y su evolución reciente.

Primero conviene repasar algunos antecedentes sobre la criptografía, que es una disciplina antigua, como demuestra el bien conocido cifrado de César, utilizado durante varios siglos, que consistía en sustituir cada letra por otra situada un número determinado de posiciones más adelante en el alfabeto. Desde entonces se han propuesto numerosos sistemas de cifrado prácticamente imposibles de desentrañar, pero cuya principal debilidad no residía en el cifrado en sí, sino en el hecho de que la clave debía ser conocida tanto por el emisor como por el receptor, corriendo el peligro de ser interceptada.

En la década de los 70, con el desarrollo de la computación, nacen los sistemas de clave asimétrica, que utilizan dos claves: una pública para encriptar y otra privada para desencriptar el mensaje, de forma que conociendo solo la clave pública no es posible descifrar el mensaje; solamente puede hacerlo quien dispone asimismo de la clave privada. Además, las claves son invertibles, de forma que un mensaje cifrado con la clave privada debe descifrarse con la clave publica.

Para poder llevar a cabo los cálculos necesarios, los mensajes son transformados en cadenas numéricas mediante la aplicación procedimientos ya estandarizados como puede ser el Código ASCII, y se someten a encriptación mediante una operación computacionalmente sencilla pero difícilmente invertible. Aquí entra en juego la aritmética modular. En efecto, una clave de encriptación que consistiera en elevar a una potencia, aunque fuera con un exponente muy elevado, sería fácil de descifrar mediante el cálculo del logaritmo inverso. Sin embargo, si la encriptación se lleva a cabo en modulo (n), el descifrado implicaría el cálculo del logaritmo inverso discreto, operación para la que no existe algoritmo de cálculo y que queda fuera del alcance de los sistemas actuales de computación cuando los valores del módulo y el exponente son muy elevados.

Este es el procedimiento del sistema  RSA, el sistema de clave pública más utilizado. Dicho sistema, en un encriptado de clave pública (n, e), transforma un mensaje m en M mediante el cálculo de M me (mod n), es decir, calculando el resto de dividir me por n. Para el desencriptado debe recurrirse a la teoría de los números primos, que, para determinados valores del módulo, permite determinar un parámetro d que deshace el encriptado, transformando el mensaje cifrado M en el mensaje original m mediante la operación mMd (mod n) que puede expresarse también como m ≡ (me)d (mod n). Esta fórmula pone de manifiesto que los parámetros e y d son intercambiables en modulo n. Es decir, puede encriptarse con e y desencriptarse con d, o viceversa, pero solamente quien conoce ambos puede actuar en los dos sentidos.

El funcionamiento del sistema requiere que el módulo de n, de conocimiento público, sea producto de dos números primos, lo que de alguna forma es un punto débil, porque si se obtienen los dos factores primos del módulo es posible calcular los parámetros utilizados al encriptar y desencriptar. Sin embargo, cuando se manejan módulos de 100 o 200 cifras la factorización requeriría millones de años con la capacidad de computación actual. En cualquier caso, los avances en la computación requerirán módulos cada vez mayores para evitar la factorización, lo que al mismo tiempo dificultará el encriptado.

En el caso del bitcoin se utiliza la criptografía de curva elíptica, que requiere claves más reducidas para el mismo nivel de seguridad. Su fundamento matemático es más complicado, está basado en la teoría de grupos y la aritmética modular, haciendo uso de propiedades de las curvas elípticas. En último término, la idea subyacente es la misma que en el caso anterior: establecer un sistema de encriptación computacionalmente asequible cuyo desencriptado solo sea posible si se dispone de una llave apropiada. Vuelve a aparecer aquí nuevamente la aritmética modular, lo que me lleva a un comentario personal, porque en mis ya lejanos años universitarios me preguntaba qué utilidad tendría el saber que 15 y 50 eran congruentes módulo 7 porque dejan el mismo resto (1) al dividir cualquiera de esos números por 7. En sus propios términos, 50 ≡ 15 (mod 7). La criptografía moderna me ha dado la respuesta.

La criptografía de clave pública permite identificar digitalmente al emisor de un mensaje. Un emisor que envía un mensaje encriptado con su clave privada a la que acompaña de su clave pública, está dando prueba de que el mensaje debe atribuirse a quien ostenta la clave pública, porque solo con ella puede descifrarse el mensaje enviado. La clave pública servirá para definir la identidad del emisor y no podrá ser utilizada por terceros para generar mensajes válidos, porque desconocen la clave privada.

Generar los elementos de una clave pública puede hacerse de manera aleatoria, sin necesidad de una autoridad de control, si se tiene en cuenta que una clave puede tener 256 bits, por lo que la probabilidad de generar aleatoriamente claves coincidentes resulta despreciable (1/2256). Basta pensar en la conocida leyenda del rey de la India, que se comprometió a llenar un tablero de ajedrez con granos de trigo doblando el número de granos en cada casilla. Solamente para llenar la casilla 64 hubiera necesitado 264 granos, más o menos la cosecha mundial de 500 años.

Como consecuencia la participación en un sistema blockchain puede tener lugar de forma totalmente anónima. No se requiere una autoridad central para registrarse como usuario del sistema y el registro se hace directamente sin aportar identificación alguna, porque el sistema genera aleatoriamente las correspondientes claves pública y privada –que satisfacen las condiciones exigidas–.

Establecida una identidad (clave pública) puede empezarse a operar en el sistema generando transacciones. A tal efecto deberá transmitirse la siguiente información: la dirección de origen (clave pública del emisor), dirección del beneficiario (clave pública del beneficiario) y la transacción a realizar encriptada con la clave privada del emisor –que representa la firma de la operación porque solo su clave pública permite desencriptarla–. Adicionalmente debe proporcionar un vínculo a la transacción anterior con su clave pública, y que servirá para confirmar que dispone de los recursos necesarios para la transacción que propone.

En una posterior entrega se describirá el proceso de validación de las transacciones, que puede ofrecer diferentes modalidades. En nuestro caso nos referiremos concretamente al caso del bitcoin, cuya validación es computacionalmente muy exigente y supone un considerable gasto de energía. Trataremos también de la incorporación de las transacciones a una cadena de bloques asegurando su integridad.