Mastering Bitcoin

Mastering Bitcoin


6. Claves, Direcciones, Carteras » Direcciones Bitcoin » Formatos de Claves » Claves públicas comprimidas

Página 34 de 98

Claves públicas comprimidas

Las claves públicas comprimidas fueron introducidas a bitcoin para reducir el tamaño de las transacciones y conservar espacio en disco en los nodos que almacenan la base de datos de la cadena de bloques bitcoin. La mayoría de las transacciones incluye la clave pública requerida para validar las credenciales del propietario y gastar los bitcoins. Cada clave pública requiere 520 bits (prefijo \+ x \+ y), que al ser multiplicados por varios cientos de transacciones por bloque, o decenas de miles de transacciones por día, suman una cantidad significativa de datos a la cadena de bloques. Como vimos en la sección Claves Públicas, una clave pública es un punto (x,y) sobre una curva elíptica.

Ya que la curva expresa una función matemática, un punto sobre la curva representa una solución a una ecuación, y por ende, si conocemos la coordenada x podemos calcular la coordenada y resolviendo la ecuación:

y2 mod p = (x3 + 7) mod p

Esto nos permite almacenar solamente la coordenada y del punto de clave pública, omitiendo la coordenada y lo que reduce el tamaño de la clave y el espacio requerido para almacenarla en 256 bits. ¡Una reducción en tamaño de casi el 50% por transacción representa muchos datos ahorrados con el transcurrir del tiempo!

Mientras que las claves públicas descomprimidas llevan el prefijo 04, las claves públicas comprimidas empiezan con el prefijo 02 o 03. Veamos por qué hay dos prefijos posibles: ya que el lado izquierdo de la ecuación es y2 la solución para y es una raíz cuadrada, la cual puede tener un valor positivo o negativo. Visualmente esto significa que la coordenada y resultante puede encontrarse por encima o por debajo del eje x. En el gráfico de la curva elíptica Una curva elíptica se puede observar que la curva es simétrica, lo cual significa que es reflejada como un espejo por el eje x. Entonces, a pesar de poder omitir la coordenada y debemos almacenar el signo de y (positivo o negativo), o, en otras palabras, debemos recordar si estaba por encima o por debajo del eje x, ya que cada una de esas opciones representa un distinto punto y distinta clave pública. Cuando calculamos la curva elíptica en aritmética binaria sobre el cuerpo finito de orden primo p, la coordenada y es o bien par o impar, lo cual corresponde al signo positivo o negativo explicado anteriormente. Por ende, para distinguir entre los dos posibles valores de y almacenamos una clave pública comprimida con el prefijo 02 si y es par, y 03 si es impar, permitiendo al software deducir correctamente la coordenada y a partir de la coordenada x y descomprimir la clave pública obteniendo las coordenadas completas del punto. La compresión de clave pública es ilustrada en Compresión de clave pública.

Figura 7. Compresión de clave pública

Aquí está la misma clave pública generada anteriormente, mostrada como una clave pública comprimida almacenada en 264 bits (66 dígitos hexadecimales) con el prefijo 03 indicando que la coordenada y es impar:

K = 03F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A

Esta clave pública comprimida corresponde a la misma clave privada, lo que significa que es generada a partir de la misma clave privada. Sin embargo se ve distinta de la clave pública descomprimida. Más importante aun, si convertimos esta clave pública comprimida a una dirección bitcoin usando la función de hash doble (RIPEMD160(SHA256(K))) producirá una dirección bitcoin diferente. Esto puede resultar confuso, ya que significa que una misma clave privada puede producir una clave pública expresada en dos formatos distintos (comprimida y descomprimida) que producen dos direcciones bitcoin diferentes. Sin embargo, la clave privada es idéntica para ambas direcciones bitcoin.

Las claves públicas comprimidas se están convirtiendo gradualmente en la opción por defecto en todos los clientes bitcoin, lo cual está teniendo un impacto significativo sobre la reducción del tamaño de transacciones y por ende la cadena de bloques. Sin embargo, no todos los clientes soportan claves públicas comprimidas aún. Los clientes más recientes que soportan claves públicas comprimidas tiene que tener en cuenta transacciones de clientes más antiguos que no soportan claves públicas comprimidas. Esto es especialmente importante cuando una aplicación de cartera importa claves privadas de otra aplicación de cartera bitcoin, ya que la nueva cartera necesita escanear la cadena de bloques para encontrar transacciones correspondientes a estas claves importadas. ¿Qué direcciones bitcoin debe buscar la cartera bitcoin? ¿Las direcciones bitcoin producidas por claves públicas descomprimidas, o las direcciones bitcoin producidas por claves públicas comprimidas? Ambas son direcciones bitcoin válidas, y la clave privada puede firmar por ellas, ¡pero son direcciones distintas!

Para resolver este problema el Formato de Importación de Cartera (WIF) usado al exportar claves privadas de una cartera es implementado en forma diferente en carteras más recientes, indicando de esta forma que dichas claves privadas han sido usadas para producir claves públicas comprimidas y por ende direcciones bitcoin comprimidas. Esto permite a la cartera a la que se importa distinguir entre claves privadas originadas en carteras recientes o antiguas y buscar transacciones en la cadena de bloques que posean direcciones correspondientes a las claves públicas comprimidas o descomprimidas, respectivamente. Veamos cómo esto funciona en mayor detalle en la siguiente sección.

Ir a la siguiente página

Report Page