Conceptos básicos del funcionamiento del Bitcoin: Transacciones en la red Bitcoin — Clave Pública y Clave Privada

Como se ha comentado en entradas anteriores de este blog, la cadena de bloques de la red Bitcoin y de todas las criptomonedas, en último término no es más que un registro secuencial codificado de transacciones.

Por ello, podemos afirmar que la existencia de una moneda digital está íntimamente relacionada con las transacciones que se hacen de la misma y con cómo se generan y almacenan. Tanto es así que Sathosi Nakamoto, en su paper de 2008, mediante el que establecía las bases del Bitcoin decía:

“Definimos una moneda electrónica como una cadena de firmas digitales en la que cada dueño  transfiere la moneda al próximo al firmar digitalmente un hash de la transacción previa y la clave pública del próximo dueño y agregando estos al final de la moneda. Un beneficiario puede verificar las firmas para verificar la cadena de propiedad”. 


Por tanto, uno de los retos más importante que se afronta a la hora definir una moneda digital, es como establecer un mecanismo que permita realizar de forma segura las transacciones. Llegado a este punto cabe analizar cuáles deben ser los requisitos básicos que se deben requerir a la hora de realizar una transacción y que la misma sea confiable.

¿Qué es una transacción y que requisitos debe cumplir para ser confiable?

Una transacción es una operación en la que dos partes llegan a un acuerdo para intercambiar un bien, valor, o activo. Teniendo en cuenta esta definición y de modo análogo al esquema clásico de comunicación en el que se define como parte integrante del acto al emisión, al receptor, el medio y el mensaje, en una transacción podemos definir como partes intervinientes, el bien transferido, el dueño inicial del bien (o emisor), el dueño final del bien (o comprador) y el medio mediante el que se realiza la transacción.
Surgen así varios requisitos que tendremos que tener en cuenta para que una transacción sea confiable:
  • El primero de ellos, no es otro que asegurar  la posesión del bien que se quiere transferir, de forma que debe existir un mecanismo que nos permita verificar su posesión. 
  • El segundo sería acordar cómo vamos a identificar tanto al emisor, como al receptor, de forma que podamos hacer una transacción hacia la persona que va ser la nueva propietaria del bien. 
  • El tercero sería identificar el propio bien que se transfiere, que en el caso de la Red Bitcoin es la propia divisa digital. 
  • Por último, el cuarto aunque en este artículo no entremos a tratarlo, sería el medio sobre (o en el que) se realiza la transacción (que es la Red Bitcoin).

De estos cuatro requisitos vamos a centrarnos en los dos primeros, es decir, en la identificación del emisor y el receptor, y en cómo asegurar la posesión del bien.

Criptografía asimétrica. Clave pública y clave privada.

Una de las características de la red Bitcoin, es el uso de las propiedades asociadas a la criptografía asimétrica para posibilitar el desarrollo de las transacciones.  Es aquí donde entran en juego lo que se conocen como clave privada y clave pública (public key and private key). La clave pública y la clave privada son una pareja de claves asimétricas, que entre otras cosas aseguran las funciones de encriptación y desencriptación de los datos durante las transacciones.


Pero, ¿qué es la criptografía asimétrica y cómo funciona? Para empezar, debemos establecer la diferencia básica entre encriptación simétrica y encriptación asimétrica. Mientras que los algoritmos de encriptación simétrica utilizan la misma clave, o llave, para realizar las funciones de encriptación, los algoritmos de encriptación asimétrica usa dos claves diferentes (una conocida como clave pública y otra como clave privada), para realizar estas funciones. Es decir, un mensaje que se haya encriptado con una de las dos claves solo se podrá desencriptado con la otra y viceversa.

Dichas claves están matemáticamente relacionadas, y además cumplen la condición de que conocida la clave pública no se puede obtener la clave privada de forma sencilla (es decir usan funciones unidireccionales: – Su cálculo directo es viable, pero el cálculo de la función inversa tiene tal complejidad que resulta imposible). Por tanto, la regla básica de este Sistema de encriptación, es que la clave privada solo debe ser conocida por la persona que ha generado la pareja de claves, mientras que la clave pública pueda ser distribuida sin limitaciones. 


Así, para enviar un mensaje a un tercero, lo única que tendríamos que hacer es solicitarle su clave pública para encriptarlo; una vez hecho esto, únicamente el destinatario podrá desencriptarlo mediante el uso de su clave privada. 

Como es fácilmente apreciable nuestra clave privada nos garantiza “confidencialidad y al mismo tiempo “posesión” del mensaje, ya que solamente nosotros podremos desencriptar dicho mensaje. Pero además nuestra clave pública sirve para localizarnos/identificarnos, es decir funciona como una dirección, y por tanto el emisor tiene la certeza de estar enviando el mensaje a la persona correcta.

¿Qué pasaría si el proceso lo realizamos a la inversa? Supongamos ahora que el mensaje se ha cifrado con la clave privada, cualquier persona que reciba dicho mensaje y tenga nuestra clave pública podrá desencriptarlo. Al igual que en el anterior caso, en este proceso inverso, la clave pública lo que hace es identificarnos, ya que solamente a través de esta clave se puede desencriptar un mensaje que nosotros hayamos cifrado con la clave privada. E igualmente, mientras se cumpla el requisito de que la clave privada solo la tenemos nosotros este proceso proporciona integridad y autentificación, ya que solamente la persona que tenga la clave privada pueda haber cifrado/enviado el mensaje.

Algunos de los algoritmos usados en la encriptación asimétrica son:
  • Factorización: descomponer un número grande en sus factores primos (RSA)
  • Logaritmo discreto: obtener el exponente al que ha sido elevado una base para dar un resultado 
  • Mochila tramposa: obtener los sumandos que han dado origen a una suma
  • ECDSA. Clave elíptica. Un definición algo más detallado de este algoritmo que es el usado por Bitcoin puede encontrase en el siguiente enlace (http://libroblockchain.com/ecdsa/)


¿Cómo funcionan la clave pública y clave privada en el proceso de transacciones de la red Bitcoin?

Uno de los pilares de la tecnología Blockchain y del propio Bitcoin, es el uso de técnicas criptográficas. A parte de las funciones Hash, Bitcoin emplea otros algoritmos de clave pública (o de criptografía asimétrica) como SHA-256 para acreditar la posesión y el traspaso de las divisas digitales.

Volvamos ahora la definición de moneda digital y por tanto del bitcoin realizada por Sathosi Nakamoto. La siguiente imagen esquematiza el proceso de transacciones para una moneda digital incluido en dicha definición:


Como se ve en el diagrama anterior, en una transacción el emisor firma con su clave privada, un mensaje que está compuesto por:
  • La clave pública del receptor, y 
  • Las transacciones anteriores que a su vez incluían la clave pública del emisor.

(Este último elemento no es otra cosa que el bien que se transmite)

De esta forma mediante el proceso de firma con la clave privada, el emisor está garantizando la posesión del bien, ya que sólo él puede desencriptar un mensaje (o transacción) anterior que incluya su clave pública.

Pero además, al incluir la clave pública del receptor en la nueva transacción, se garantiza, que solamente el receptor a futuro pueda hacer uso del bien transferido. Es decir, en un mismo acto está acreditando su posesión y transfiriendo la misma.

¿Qué son y cómo se obtienen la clave privada y la clave pública en Bitcoin? 

Para responder a esta pregunta lo más sencillo es acudir a la wiki de la propia red Bitcoin:

“Una clave privada en el contexto de Bitcoin es un número secreto que permite gastar los bitcoins. Cada dirección Bitcoin tiene asociada una clave privada, almacenada en el archivo monedero de la persona poseedora del saldo. La clave privada está relacionada matemáticamente con la dirección Bitcoin, de tal modo que la dirección Bitcoin se deriva de la clave privada siguiendo unas reglas fijas, mientras que la operación inversa, deducir una clave privada a partir de la dirección Bitcoin, es imposible…

En Bitcoin, una clave privada es un número de 256 bits, que puede representarse de diversas maneras. A continuación se muestra una clave privada en notación hexadecimal (256 bits, 32 bytes, en formato hexadecimal es una secuencia de 64 caracteres de entre los rangos 0-9 y A-F).

E9 87 3D 79 C6 D8 7D C0 FB 6A 57 78 63 33 89 F4 45 32 13 30 3D A6 1F 20 BD 67 FC 23 3A A3 32 62
…"

Es decir, inicialmente cualquier numero de 256 bits, 32 bytes puede ser una clave privada. Por lo tanto una forma sencilla de obtener una clave privada sería aplicar la función SHA256 a una cadena de datos.

Sin embargo, este no es el único formato en el que nos podemos encontrar una clave privada. Existe un formato más compacto conocido como formato de importación de monederos que es “ligeramente más fácil de usar que el anterior”. En relación a este formato podemos encontrar la siguiente descripción en la wiki de bitcoin:

"Cuando se quieren representar las claves privadas en Bitcoin, se puede utilizar un formato más compacto conocido como formato de importación de monedero, que presenta varias ventajas. El formato de importación de monedero es más corto, e incorpora dígitos de control para detectar errores, lo cual permite evitar y corregir fallos de transcripción, que serían imposibles de detectar en el formato hexadecimal. El formato de importación de monedero es la notación más habitual para las claves privadas Bitcoin. Las claves privadas asociadas a claves públicas no comprimidas constan de 51 caracteres que comienzan siempre por el número 5. Las claves privadas asociadas a claves públicas comprimidas constan de 52 caracteres y comienzan por una L o K mayúscula. A continuación se muestra la misma clave privada de antes en formato de importación de monedero:

5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hWXMssSzNydYXYB9KF

Cuando se importa una clave privada, esta corresponde siempre exactamente a una dirección Bitcoin. Cualquier herramienta que lleve a cabo la conversión ha de ser capaz de mostrar la dirección Bitcoin correspondiente. Las reglas matemáticas de conversión son complicadas y es mejor dejar el cálculo en manos de un ordenador, pero todo programa que sepa manejar claves privadas y direcciones Bitcoin deducirá exactamente la misma dirección Bitcoin a partir de una clave privada dada.

La dirección Bitcoin que corresponde la clave privada que hemos usado de ejemplo es: 1CC3X2gu58d6wXUWMffpuzN9JAfTUWu4Kj”

Fuente:  https://es.bitcoin.it/wiki/Clave_privada

Teniendo en cuenta que incluso en este formato la clave privada es difícil de recordar/manejar, normalmente cuando utilizamos un monedero para Bitcoin, e uno de los primeros pasos al instalarlo, es el de escoger y guardar una seed o semilla, que es un conjunto de palabras aleatorias, que se utilizará para generar tu clave privada.

En relación a la clave pública, y al igual que la clave privada, esta es una secuencia de letras y números, si bien tanto la clave publica como las direcciones Bitcoin (que se deducen de la clave pública) sigue un patrón determinado que empieza por el carácter “1” (El cual es el indicador que se trata de una dirección Bitcoin y no de otro tipo de criptomoneda).

Con todo este tenemos que el proceso lógico para obtener una tanto la clave pública, como la clave privada, y por último la dirección es:


Resumiendo, las claves privadas y publicas, nos permiten identificarnos, acreditan la posesión de los activos, y nos permiten transferirlos. Es decir, tomando la frase de Andreas M. Antonopoulos: 

“Son tus claves, son tus bitcoins. No son tus claves, no son tus bitcoins”. 

Enlaces de Interés

En los siguientes enlaces podrás obtener más información sobre las claves públicas y privadas y los procesos sobre los que se asienta su funcionamiento dentro de la red Bicoin:





Comentarios

Entradas populares de este blog

Aproximación Práctica a Bitcoin: COINBASE (I)

Aproximación práctica a Bitcoin: ¿Qué es Bitcoin?