Al importar claves privadas, ¿se utilizará el formato comprimido o sin comprimir?

Estoy buscando implementar soporte para claves públicas comprimidas en Vanity Pool . Sin embargo, tengo mis dudas sobre la importación de soluciones a una dirección de vanidad deseada bajo ese formato. Por lo que puedo ver sobre la explicación de cómo funciona un formato de clave comprimida , parece que una clave privada puede asignarse a dos direcciones de Bitcoin diferentes.

¿Hay alguna forma de especificar en el cliente estándar qué formato se utilizará para importar, o se preferirá uno de los formatos todo el tiempo?

Respuestas (1)

Desde un punto de vista criptográfico, solo hay un tipo de claves privadas y un tipo de claves públicas. Una clave privada es un número entero en el rango de 1 a 115792089210356248762697446949407573529996955224135760342422259061068512044368, una clave pública es un punto en la curva elíptica secp256k1. No hay magia aquí.

El problema es que Bitcoin usa direcciones y las direcciones se derivan del hash de una clave pública. Como no puede tomar un hash del concepto matemático de un "punto", primero debe convertirse en una secuencia de bytes. Sigue el Bitcoin estándar, sin embargo, define dos formas de convertir una clave pública en una secuencia de bytes: una normal (que da como resultado 65 bytes) o una comprimida (que da como resultado 33 bytes). No hay razón para usar el normal, excepto, por supuesto, la compatibilidad. Como la secuencia de bytes resultante es diferente en ambas codificaciones, la dirección también será diferente. Si las monedas se enviaron a una dirección, la codificación de clave pública que coincida exactamente debe usarse para gastarlas.

Por lo tanto, para admitir ambos, debemos recordar para cada par de claves pública/privada si se utilizará la codificación normal o comprimida. Como señala, también necesitamos esta información al importar una clave privada. Para hacerlo, se amplió el "Formato de importación de billetera" para claves privadas (el formulario base58, que generalmente comienza con un '5'). Si la clave/dirección pública para una clave privada en particular se deriva de la codificación comprimida de la clave pública , la clave privada obtiene un byte 0x01 adicional al final, lo que da como resultado una forma base58 que comienza con 'K' o 'L '.

Entonces, para responder a su pregunta: al importar una clave privada en el cliente de referencia, usará la codificación normal para claves públicas si se usó el formato '5' para la clave privada, y la codificación comprimida si el 'K'/'L Se utilizó el formato '. No tiene sentido tratar de convertir uno a otro: el cliente debe usar la misma codificación que se usó al generar la dirección, o la dirección no coincidirá. Desafortunadamente, una gran cantidad de software aún no admite claves públicas comprimidas (lo cual es una pena, ya que ahorran espacio en la cadena de bloques).

Al volver a leer su pregunta, supongo que en realidad ya sabía la mayor parte de mi respuesta, pero tal vez sea útil para otros.