El cliente estándar de Bitcoin en la versión 0.6 aparentemente introduce claves comprimidas.
¿Qué son? ¿Hay algún inconveniente en usarlos? ¿Alguna incompatibilidad con software antiguo? ¿Reducciones en la fuerza criptográfica?
Una clave comprimida es solo una forma de almacenar una clave pública en menos bytes (33 en lugar de 65). No hay problemas de compatibilidad o seguridad porque son precisamente las mismas claves, solo que se almacenan de una manera diferente. El software original de Bitcoin no usaba claves comprimidas solo porque su uso estaba mal documentado en OpenSSL. No tienen ninguna desventaja aparte de que se necesita un poco de cálculo adicional antes de que puedan usarse para validar una firma.
Si piensa en una clave pública como un punto en algún lugar a lo largo de una letra U gigante, una clave sin comprimir son las coordenadas x e y del punto. Una clave comprimida es qué tan alto en la U está el punto junto con un solo bit que indica si está en el lado izquierdo o derecho. Como puede visualizar, ambos codifican exactamente lo mismo, pero la forma comprimida requiere la mitad de espacio más un bit. (Por supuesto, en realidad son puntos en la curva elíptica secp256k1 , pero el concepto es el mismo).
Formato (claves privadas):
caso 1:
Obtenido de la lista de correo de desarrolladores de Bitcoin:
Hash()
corresponde, la cita es correcta. No sé qué función se usa, así que tal vez, por ejemplo,Hash(x) = SHA256(SHA256(x))
Puede ayudar separar los campos.
04 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa 385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1 03 [podría ser 02] 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa [el valor descartado se puede calcular a partir del valor anterior]
Hay más detalles omitidos arriba. El 03 puede ser 02 porque el valor descartado tiene que derivarse del valor preservado y se necesita un poco más de información. Eso se debe a que hay dos raíces [más y menos] al sacar una raíz cuadrada.
una buena explicación está disponible en ¿Cómo puedo probar si una dirección de bitcoin está comprimida o no?
Más específicamente, una clave pública en Bitcoin es un par de números enteros (x,y). Para las claves públicas sin comprimir, estos enteros se codifican como enteros big-endian sin firmar de 256 bits, se concatenan y luego se anteponen con un solo byte 0x04. El resultado tiene una longitud de 65 bytes.
Para claves públicas comprimidas, solo se codifica la coordenada x (como arriba, como int big-endian sin firmar de 256 bits). Resulta que la coordenada y solo puede ser uno de dos valores, uno par y otro impar. En lugar de anteponer un solo byte 0x04, se antepone un solo byte 0x02 o 0x03 según el valor de y (0x02 para par, 0x03 para impar). El resultado tiene una longitud de 33 bytes.
tilo
david schwartz
wallet.dat
archivo con una versión anterior del software. Eso es un descanso permitido. (Aún podría extraer manualmente el caso, descomprimirlo y ponerlo en la forma anterior si fuera necesario. Pero ese tipo de compatibilidad no es compatible. No puede regresar con un archivo de billetera más nuevo a menos que traduzca los datos. )david schwartz
wallet.dat
. Las claves comprimidas aún no se admiten en ningún otro lugar porque sería un cambio que rompería el protocolo.tilo
ellos
pieter wuille
Daniel H.
Avanzado
david schwartz
Qqwy
david schwartz