Skip to content

Mastering Ethereum (Capítulo 4)

Published: at 15:00

⚠️ ¡Advertencia! El siguiente artículo es un resumen sobre Mastering Ethereum, en consecuencia, me tomé la libertad de quitar las partes que no me parecieron relevantes y profundizar en lo que sí. Si tenés alguna sugerencia o corrección, no dudes en contactarme.

Criptografía

Para profundizar en la criptografía aplicada a Ethreum primero tenemos que pensar un poco que representa el concepto general: La criptografía es una práctica que consiste en proteger información mediante el uso de algoritmos codificados, hashes y firmas. Es una forma de probar el conocimiento de un secreto o probar la autenticidad de ciertos documentos sin revelar el secreto en sí.

Por lo tanto, vemos algunas cosas que se repiten, queremos probar algo, ya sea propiedad o conocimiento de cierta información, pero no queremos revelar determinado secreto, ahora profundicemos en su uso en Ethreum.

Criptografía asimétrica

La criptografía asimétrica, un sistema criptográfico que se caracteriza por utilizar dos claves, una clave pública y otra privada, para el envío de mensajes o datos informáticos. Las dos claves están conectadas entre sí y tienen roles complementarios, al ser la clave pública la responsable del cifrado y la clave privada la del descifrado.

En el ejemplo, Alice quiere enviar un mensaje a Bob, Alice cifra el mensaje con la clave pública de Bob y Bob lo descifra con su clave privada. Criptografía asimétrica

NOTA: No hay encriptación en el protocolo de Ethreum de momento, todos los mensajes son públicos intencionalmente para que puedan ser leídos por todos.

Relacionados con la criptografía hay diferentes elementos, vamos a hacer un repaso superficial por todos para tener un panorama general: hashes, claves privadas, claves públicas, direcciones, firma digital.

Firma digital

A diferencia de la encriptacion, la firma digital usa la clave privada para firmar un mensaje y la clave pública para verificar la firma.

En el ejemplo, Alice firma un mensaje con su clave privada y Bob verifica la firma con la clave pública de Alice. Firma Digital

La firma digital se utilizan para demostrar la propiedad de una dirección sin exponer su clave privada. En el caso de Ethreum tiene una doble funcionalidad:

La criptología suele tener una función en su fundamento que es muy fácil de realizar, pero muy difícil de invertir. En muchos casos, esta función es la multiplicación de números primos. Esto es muy fácil de hacer, mientras que es muy difícil “encontrar los factores primos de un número”.

Las curvas elípticas son el marco de una función diferente. Si tenés una curva (y2 = x3 + ax + b) y definís una función en esta curva que es fácil de realizar (x1,y1) , (x2,y2) -> (x,y) pero muy difícil de invertir (x,y) -> (x1,y1), (x2,y2).

Por ejemplo vamos a generar un mensaje y lo firmarlo con una clave privada particular Firma digital - Ejemplo 1

En este paso lo verifico con la pública y la verificación es exitosa Firma digital - Ejemplo 2

Vemos que en este caso, falla la verificacion, tanto si modifico el mensaje como la clave pública Pero no me crean hagan la prueba Firma digital - Ejemplo 3

Hash functions

Una función criptográfica hash- usualmente conocida como “hash”- es un algoritmo matemático que transforma cualquier bloque arbitrario de datos en una nueva serie de caracteres con una longitud fija. Independientemente de la longitud de los datos de entrada, el valor hash de salida tendrá siempre la misma longitud.

El siguiente es un ejemplo de ejecutar el hash de “hola mundo” Hash 1 podemos ver si le cambiamos solo un carácter como el hash cambia completamente Hash 2

Determinismo: Un mensaje de entrada dado siempre produce la misma salida de hash. Verificabilidad: Calcular el hash de un mensaje es eficiente (complejidad lineal). No correlación: Un pequeño cambio en el mensaje (por ejemplo, un cambio de 1 bit) debería cambiar la salida del hash de manera tan extensa que no pueda correlacionarse con el hash del mensaje original. Irreversibilidad: Calcular el mensaje a partir de su hash es impracticable, equivalente a una búsqueda de fuerza bruta a través de todos los mensajes posibles. Protección contra colisiones: Debería ser impracticable calcular dos mensajes diferentes que produzcan la misma salida de hash.

La resistencia a las colisiones de hash es particularmente importante para evitar la falsificación de firmas digitales en Ethereum. Por lo tanto, las funciones de hash funcionan básicamente como huellas digitales de los datos.

La combinación de estas propiedades hace que las funciones de hash criptográficas sean útiles para una amplia gama de aplicaciones de seguridad, incluyendo:

Claves privadas

Una clave privada es un número elegido de forma aleatoria, pero tenemos que asegurarnos que hubo suficiente entropía en la generación del número para que este sea realmente aleatorio. Para lograr eso, se usan diferentes técnicas como por ejemplo solicitándole que mueva el mouse algunos segundos y usando eso como semilla para la generación.

Tener control de la clave privada representa propiedad sobre la cuenta, por lo tanto, debe permanecer secreta todo el tiempo y a su vez debe estar respaldad en un ligar seguro porque perderla implica no tener acceso a la cuenta ni a los fondos que ella contiene. De todo esto se deriva la frase: “not your keys, not your coins”

Clave pública

La clave pública se deriva una clave pública utilizando operaciones matemáticas en una curva elíptica. La clave pública resultante es un punto en la curva elíptica y se representa como un par de coordenadas (x, y).

Direcciones

Una dirección representa identidad en la blockchain. Por lo tanto, es un identificador único que puede pertenecer a una EOA o a un smart contract.

El proceso de generación de una dirección es el siguiente, tomamos la clave pública, la pasamos por el algoritmo de hash Keccak-256 y nos quedamos con los últimos 20 bytes menos significativos del resultado. Luego le agregamos el prefijo 0x para indicar que está encodadeado en hexadecimal.

IMAGE ALT TEXT

Con eso finalizamos la parte basica de criptografia, mi intencion es mapear los conceptos generales no profundizar en su funcionamiento o implementacion, de todas formas recomiendo jugar un rato con el sitio Ethereum Developer - Sandbox el cual provee una forma de ver como funcionan las cosas sin tener que ponerse a bajarlo a implementacion de codigo.

Referencias

1.Antonopoulos, A. M., & Wood, G. (2018). “Mastering Ethereum: Building Smart Contracts and DApps.” O’Reilly Media

2.Ethereum Developer - Elliptic Curve Cryptography (YouTube)

3.Elliptic Curve Cryptography Explained (YouTube)

4.Ethereum Developer - Sandbox

5.Reddit - ELI5: What exactly are elliptic curves and why are they important?

6.Ethereum.org - Decentralized Identity