¿Qué hace que una clave pública o privada extendida?

Tenía la impresión de que una clave pública extendida estaba compuesta por la clave pública + código de cadena, y no estoy familiarizado con lo que comprende la clave privada extendida.

Sin embargo, este no parece ser el caso. Según pywallet :

The key consists of
            * 4 byte version bytes (network key)
            * 1 byte depth:
                - 0x00 for master nodes,
                - 0x01 for level-1 descendants, ....
            * 4 byte fingerprint of the parent's key (0x00000000 if master key)
            * 4 byte child number. This is the number i in x_i = x_{par}/i,
              with x_i the key being serialized. This is encoded in MSB order.
              (0x00000000 if master key)
            * 32 bytes: the chain code
            * 33 bytes: the public key or private key data
              (0x02 + X or 0x03 + X for public keys, 0x00 + k for private keys)
              (Note that this also supports 0x04 + X + Y uncompressed points,
              but this is totally non-standard and this library won't even
              generate such data.)

No es tan sencillo como publickey + chaincode. ¿Alguien puede deconstruir una clave extendida de principio a fin? De acuerdo con el increíble sitio web de iancoleman, la red también tiene un efecto en esto, lo que tampoco tiene sentido para mí, pero claramente (como se muestra arriba) es parte de esta fórmula.

Los bytes de red son una característica de seguridad humana, no afectan la derivación de claves. Son principalmente para identificar qué red debe verificar un programa, si se le da una clave extendida
Entonces, ¿solo la clave pública o privada + código de cadena afecta la derivación de clave? ¿El resto son solo identificadores? ¿Qué pasa con la clave pub/priv extendida en la raíz, antes del tipo de moneda? La billetera puede tener varias monedas debajo. ¿Deberían simplemente no incluirse esos datos?

Respuestas (1)

La clave pública extendida contiene un poco más de información que la clave pública y el código de cadena, pero la clave pública y el código de cadena son lo único que importa para la derivación de la clave. El resto son solo metadatos sobre las claves para billeteras y personas.

Los bytes de versión distinguen entre xpub, xpriv y otros tipos de claves. La huella dactilar identifica al padre para que una billetera pueda saber cuál es el padre de esta clave. El índice secundario le dice a una billetera cómo derivar esta clave nuevamente del padre.

No estoy familiarizado con lo que comprende la clave privada extendida.

La clave privada extendida es exactamente igual que la clave pública extendida, pero en lugar de 33 bytes de datos de clave pública, son 33 bytes de datos de clave privada.

la red también tiene un efecto en esto, lo que tampoco tiene sentido para mí, pero claramente (como se muestra arriba) es parte de esta fórmula.

La red determina los bytes de la versión. Estos bytes de versión están presentes en todo lo demás en Bitcoin y son solo para indicar al usuario para qué red se usa la clave. Esto es útil para identificar si una clave puede estar comprometida (porque, por ejemplo, se ha utilizado para probar software)

¿Alguien puede deconstruir una clave extendida de principio a fin?

Usemos xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnwcomo nuestro xpub.

Decodificación Base58 esto nos da

0488B21E013442193E8000000047FDACBD0F1097043B78C63C20C34EF4ED9A111D980047AD16282C7AE6236141035A784662A4A20A65BF6AAB9AE98A6C068A81C52E4B032C0FB5400C706CFCCC56B8B9C580

0488B21Eson los bytes de versión definidos por BIP 32.

01significa que esta clave como en la profundidad uno

3442193Ees la huella dactilar de la clave principal

80000000significa que la clave es el índice 0h (clave reforzada 0'th)

47FDACBD0F1097043B78C63C20C34EF4ED9A111D980047AD16282C7AE6236141es el código de cadena

035A784662A4A20A65BF6AAB9AE98A6C068A81C52E4B032C0FB5400C706CFCCC56es la clave pública

B8B9C580es la suma de comprobación de codificación de comprobación base58.