Documentos de Académico
Documentos de Profesional
Documentos de Cultura
De este modo, a los bancos y gobiernos les resultaba imposible localizar a los usuarios, ya que se
identificaban únicamente con una cadena alfanumérica.
Lamentablemente, este método adolecía de centralización, ya que el banco tenía que emitir un
permiso para utilizar las claves, y, tras innumerables intentos de salvar la brecha, la empresa
quebró.
De hecho, Adam Back creó Hashcash, basado en la prueba de trabajo (PoW), con el fin de limitar el
spam de correo electrónico y los ataques DoS.
¿Cómo lo hizo? Dificultando la vida de los spammers, cuyo objetivo es enviar un gran número
correos electrónicos con muy poco coste por mensaje.
Gracias a su nuevo sistema, sin embargo, el destinatario podía verificar si el remitente había
realmente el PoW y utilizar los resultados para filtrar los correos electrónicos más fácilmente.
Al año siguiente, 1998, Wei Dai publicó el primer artículo en el que describía su idea de
criptomoneda, la b-money. Fue la primera criptomoneda anónima y distribuida.
El primero se utilizaba para mantener una base de datos sincronizada, donde se registraba la
información relacionada con el medio de intercambio. Cada participante de la red tenía una copia
exacta de la misma. Esto es la descentralización.
El segundo se utilizó para contar la cantidad de money-b que se poseía. En 2004 Hal Finney creó
el RPoW, Reusable Proof of Work, basado en Hashcash. Permitía el intercambio de tokens y
garantizaba que cada token sólo pudiera gastarse una vez. Se llamó RPoW porque, además de
PoW, utilizaba criptografía asimétrica RSA11 para firmar las transacciones; de ahí el nombre de
RPoW.
No obstante, este proyecto adolecía de centralización, ya que las comprobaciones necesarias para
evitar el doble gasto eran realizadas por un servidor centralizado.
Ahora es el turno de Nick Szabo, que en 2005 publicó Bit Gold, basado en RPoW.
Bit Gold proponía un sistema descentralizado en el que los usuarios, gracias a su par de claves,
podían firmar las transacciones, utilizando la firma digital.
Aunque Bit Gold nunca ha visto la luz, es considerado por muchos como el precursor de Bitcoin.
Introdujo conceptos como la tolerancia a fallos bizantina, el sellado de tiempo y la resolución de
puzles criptográficos por parte de los usuarios. A diferencia de Bitcoin, esta moneda no habría
tenido una oferta, es decir, un número máximo de monedas en circulación.
Parece que Satoshi Nakamoto había reunido todas las buenas características de los trabajos
descritos anteriormente y creó lo que todos conocemos como blockchain y Bitcoin.
Centralización
Todas las operaciones son procesadas por un único nodo, es decir, un único ordenador.
Cada individuo depende del libro mayor centralizado.
Los datos se almacenan en una base de datos propietaria centralizada, por lo que tenemos
que confiar en la entidad con la que estamos interactuando, con respecto a la integridad y
validez de los datos.
Descentralizado
Distribuido
Está políticamente descentralizada, no hay una entidad superior encargada del control. La
arquitectura también está descentralizada, ya que no hay ningún punto de fallo. Esto significa que
si un nodo se vuelve inalcanzable, el sistema sigue funcionando.
Ahora que estamos más familiarizados con los conceptos de distribución, descentralización y
centralización, vamos a intentar entender qué es una red P2P.
Napster era un programa que permitía el intercambio de música a través de la arquitectura P2P.
Podemos definir la red P2P como resistente y descentralizada. No hay nodos "especiales" y todos
tienen los mismos derechos.
Por lo tanto, podemos decir que el sistema P2P, o más bien la arquitectura P2P, es una
arquitectura igualitaria.
¿Qué es un protocolo?
Un protocolo es un conjunto de reglas que definen el modo de comunicación entre dos o más
entidades.
Criptografía
La palabra criptografía viene del griego y significa escritura secreta.
Puede utilizarse para cifrar mensajes, ocultando así su significado, o para
verificar que un mensaje no ha sido manipulado y que ha sido enviado por el remitente deseado.
remitente deseado.
Por el momento, en la cadena de bloques de Bitcoin los mensajes se transmiten sin codificar, por
lo que no hay ningún tipo de cifrado. En cambio, la firma digital (Algoritmo de Firma Digital de
Curva Elíptica ECDSA) se utiliza para verificar que el mensaje, es decir, la transacción, fue
realmente realizada por el propietario de las claves.
Cifrado: es el proceso por el cual ciframos el mensaje aplicando una función matemática
que hace que el mensaje sea incomprensible.
Desencriptación: proceso inverso a la encriptación.
Texto claro: elemento que no ha sido cifrado.
Función Hash: algoritmo matemático que a partir de una longitud arbitraria devuelve un
tamaño fijo.
Resumen: resultado obtenido de una función hash criptográfica.
Clave: elemento fundamental para la criptografía.
Utilizando los personajes clásicos Alice y Bob, y una tercera persona, Peter, trataremos de
identificar qué problemas resuelve la criptografía.
Recuerda que cualquier cambio en el mensaje provoca una distorsión del compendio.
Simétrica. También llamada criptografía de clave privada, utiliza la misma clave para el
cifrado y el descifrado. El problema más conocido es la distribución de la clave.
Asimétrica. También llamada criptografía de clave pública, tiene dos claves diferentes
(pública y privada), unidas por propiedades algebraicas. La clave pública del destinatario
es utilizada por el emisor para cifrar el mensaje, mientras que el emisor utiliza su clave
privada para descifrarlo.
La clave privada no puede derivarse de la clave pública. Así podemos distribuirla con
seguridad.
Univocidad en la derivación de la clave pública a partir de la clave privada.
Para estos ejemplos utilizaremos OpenSSL13 y ECDSA14 el algoritmo utilizado por Bitcoin para
firmas digitales.
Abrimos dos terminales, en uno creamos la carpeta bob y en el otro la carpeta alice.
/Users/barno/Documents/bob
/Users/barno/Documents/alice
openssl version
OpenSSL 1.0.2r 26 Feb 2019
Por lo tanto, si la verificación realizada por Alice tiene éxito, significa que tiene la copia original del
mensaje.
¿Cómo se lleva a cabo dicha verificación?
El remitente (Bob) envía tanto el mensaje sin cifrar, como el compendio obtenido con la clave
privada sobre el mensaje a enviar y su clave pública. El receptor (Alice) descifra el mensaje con la
clave pública del emisor (Bob) y verifica que es el mismo que el no cifrado, obteniendo así la
integridad y el no rechazo.
Resultado:
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIH8evY2vqJXiHGCGnERz5wVrosQt9bfVg0UDd/k/z608oAcGBSuBBAAK
oUQDQgAEpwu6bl+f0ZWgKS0XBWXd8TvFCfPLjFFENJR4EmeOGAcNg5zKC5HJVJGX
80nFi8lq6Rr3SFD3wU1HeG/lDW04Yw== -----END EC PRIVATE KEY-----
Ahora tanto la clave pública como la privada están a nuestra disposición; por lo tanto, podemos
firmar el mensaje.
openssl dgst -sha256 -sign private.pem testo_segreto.txt > signature.bin
Alice tiene todo lo que necesita para comprobar si el mensaje ha sido alterado durante la
transmisión. Vayamos a la carpeta de Alice y lancemos el comando
openssl dgst -sha256 -verify public.pem -signature signature.bin
testo_segreto.txt
Obtenemos un mensaje positivo, lo que significa que el mensaje no ha sido modificado durante la
transmisión. Sólo tenemos que hacer una contra-comprobación, modificando el archivo.
El escenario es el mismo que el anterior, excepto que Bob quiere enviar un mensaje a Alice
encriptándolo.
Para este ejemplo utilizaremos RSA, otro tipo de algoritmo.
Estos son los pasos que vamos a realizar:
Un par de claves privadas y públicas para Alice.
Alice envía la clave pública a Bob.
Bob utiliza la clave pública de Alice para cifrar el mensaje.
Bob envía el mensaje cifrado a Alice.
Alice lo descifra gracias a su clave privada.
Ahora Bob es capaz de encriptar el mensaje y hacerlo ilegible, usando la clave pública que acaba
de recibir.
Vayamos a la carpeta de Bob y escribamos el mensaje.
cd ../bob
vi messaggio.txt
Entonces:
cat messaggio_decrittato.txt
Recapitulando:
- Hemos creado un par de claves privadas y públicas.
- Alice ha enviado a Bob su clave pública.
- Bob ha utilizado la clave pública de Alice para cifrar el mensaje.
- Bob envió el mensaje cifrado a Alice.
- Alice lo descifra con su clave privada.
El tema de la criptografía es muy amplio y va más allá del alcance de este libro.
En los próximos capítulos veremos cómo se utiliza la criptografía en el blockchain