Mastering Bitcoin
6. Claves, Direcciones, Carteras » Claves y Direcciones Avanzadas » Direcciones de Vanidad
Página 39 de 98
Claves y Direcciones Avanzadas
En las siguientes secciones veremos formas avanzadas de claves y direcciones, tales como claves privadas encriptadas, direcciones de scripts y multifirma, direcciones de vanidad y carteras de papel.
Claves Privadas Encriptadas (BIP0038)
Las claves privadas deben mantenerse en secreto. La necesidad de confidencialidad de las claves privadas es una perogrullada que es difícil de lograr en la práctica, porque entra en conflicto con el igualmente importante objetivo de disponibilidad. Mantener en privado la clave privada es mucho más difícil cuando se necesita almacenar copias de seguridad de la clave privada para evitar perderla.
Una clave privada almacenada en una cartera que se cifre con una contraseña puede ser segura, pero se deben hacer copias de respaldo. En ocasiones, los usuarios necesitan mover las claves de una cartera a otra —para actualizar o reemplazar el software de la cartera, por ejemplo. Las copias de seguridad de claves privadas también podrían guardarse en papel (ver Carteras de Papel) o en medios de almacenamiento externo, como una unidad flash USB. Pero ¿y si la propia copia de seguridad se pierde o es robada? Estos conflictos en los objetivos de seguridad llevaron a la introducción de un estándar compatible y práctico para el cifrado de claves privadas que puede ser entendido por muchas carteras y clientes bitcoin diferentes, estandarizada en la Propuesta de Mejora Bitcoin 38 o BIP0038 (ver Claves Privadas Encriptadas).
BIP0038 propone una norma común para el cifrado de claves privadas con una contraseña larga y codificado con Base58Check para que puedan almacenarse de forma segura en cualquier medio utilizado para la copia de seguridad, transportarse de forma segura entre carteras, o guardarse en situaciones donde la clave pueda estar expuesta. El estándar para el cifrado utiliza el Advanced Encryption Standard (AES), un estándar establecido por el Instituto Nacional de Estándares y Tecnología (NIST) y se utiliza ampliamente en las implementaciones de cifrado de datos comerciales y aplicaciones militares.
Un esquema de encriptación BIP0038 toma como entrada una clave privada bitcoin, generalmente codificada en el formato de importación Wallet (WIF), como una cadena Base58Check con un prefijo de «5». Además, el esquema de encriptación BIP0038 toma una frase de paso —contraseña larga— generalmente compuesta de varias palabras o una cadena compleja de caracteres alfanuméricos. El resultado del esquema de encriptación BIP0038 es una clave privada encriptada con codificación Base58Check que comienza con el prefijo 6P. Si ve una clave que comienza con 6P, significa que está encriptada y requiere una contraseña para convertir (descifrar) de nuevo en una clave privada con formato WIF (prefijo 5) para que se pueda utilizar en cualquier cartera. Muchas aplicaciones de cartera ahora reconocen las claves privadas cifradas-BIP0038 y se solicitará al usuario una contraseña para descifrar e importar la clave. Las aplicaciones de terceros, como el increíblemente útil Bit Address
(Pestaña Wallet Details), se puede utilizar para descifrar claves BIP0038.
El caso de uso más común para claves encriptadas en BIP0038 es para carteras de papel que se pueden utilizar como copia de seguridad de las claves privadas en un pedazo de papel. Siempre y cuando el usuario seleccione una frase fuerte como contraseña, una billetera de papel con claves privadas encriptada de BIP0038 es increíblemente segura y una gran manera de crear el almacenamiento bitcoin fuera de línea (también conocido como «almacenamiento en frío»).
Pruebe las claves encriptadas en Ejemplo de una clave privada encriptada BIP0038 usando bitaddress.org para ver cómo puede obtener la clave desencriptada ingresando la frase secreta.

Tabla 10. Ejemplo de una clave privada encriptada BIP0038
Direcciones de Pago-a-Hash-de-Script (P2SH) y Multi-Firma
Como sabemos, tradicionalmente las direcciones de Bitcoin empiezan con el número «1» y se derivan de la clave pública, que se deriva de la clave privada. Aunque cualquier persona puede enviar a una dirección bitcoin «1», los bitcoin solo pueden gastarse mediante la presentación de la correspondiente firma de clave privada y hash de clave pública.
Las direcciones Bitcoin que empiezan con el número «3» son direcciones pago-a-script-hash (P2SH, pay-to-script-hash), a veces erróneamente llamadas multifirma o direcciones multi-sig. Designan al beneficiario de una transacción bitcoin como el hash de un script, en lugar del propietario de una clave pública. La función se introdujo en enero de 2012 como Propuesta de Mejora Bitcoin 16 o BIP0016 (ver propuestas de mejora de bitcoin) y está siendo ampliamente adoptado, ya que proporciona la oportunidad de agregar funcionalidad a la dirección en sí misma. A diferencia de las transacciones que «envían» fondos para las direcciones tradicionales «1» de bitcoin, también conocidas como pago-a-clave-pública-hash (P2PKH, pay-to-public-key-hash), los fondos enviados a las direcciones de «3» requieren algo más que la presentación de un hash de clave pública, y una clave privada de firma como prueba de propiedad. Los requisitos se designan en el momento en que se crea la dirección, dentro del script, y todas las entradas a esta dirección serán bloqueadas con los mismos requisitos.
Una dirección hash pay-to-script se crea a partir de un script de transacción, que define quién puede gastar una salida de transacción (para más detalles, consulte Pago a Hash de Script). La codificación de una dirección hash de pay-to-script implica usar la misma función doble-hash que se utilizó durante la creación de una dirección bitcoin, solo que ahora se aplica al script en lugar de a la clave pública:
hash de script = RIPEMD160(SHA256(script))
El «hash del script» resultante está codificado con Base58Check con un prefijo de versión de valor 5, lo que resulta en una dirección codificada que comienza con un 3. Un ejemplo de una dirección P2SH es 3F6i6kwkevjR7AsAd4te2YB2zZyASEm1HM, que se puede derivar mediante los comandos del Explorador de Bitcoin («comando script-encode (bx)») script-encode, sha256, («Bitcoin Explorer», «comando ripemd160») ripemd160 y («comando base58check-encode (bx)») base58check-encode (ver apartado sobre Libbitcoin) como sigue:
$ echo dup hash160 [ 89abcdefabbaabbaabbaabbaabbaabbaabbaabba ] equalverify checksig > script
$ bx script-encode < script | bx sha256 | bx ripemd160 | bx base58check-encode --version 5
3F6i6kwkevjR7AsAd4te2YB2zZyASEm1HM
P2SH no es necesariamente lo mismo que una transacción multifirma estándar. Una dirección P2SH representa la mayor parte de las veces un script multifirma, pero también sería posible representar un script que codifique otros tipos de transacciones.
Direcciones multifirma y P2SH
Actualmente, la aplicación más común de la función P2SH es el script de dirección multifirma. Como su nombre indica, el script subyacente requiere más de una firma para demostrar la propiedad y por lo tanto poder gastar los fondos. La multifirma de bitcoin se distingue porque está diseñada para requerir M firmas (también conocido como el «umbral») de un total de N claves, conocido como un multifirma M-de-N, donde M es igual o inferior a N. Por ejemplo, Bob, el dueño de la cafetería del capítulo 3 podría utilizar una dirección multifirma que requiera de 1-de-2 firmas, una de las claves de su propiedad y la otra clave perteneciente a su cónyuge, garantizando que cualquiera de los dos pueda firmar para gastar una salida de transacción que se encuentre bloqueada en esta dirección. Esto sería similar a una «cuenta conjunta» tal como se aplica en la banca tradicional, donde cualquiera de los cónyuges puede transferir con una sola firma. O Gopesh, el diseñador web pagado por Bob para crear un sitio web, podría tener una dirección multifirma 2-de-3 para su negocio que garantice que no se pueden gastar los fondos a menos que dos de los socios firmen la transacción.
Exploraremos cómo crear transacciones que gastan fondos de direcciones P2SH (y multifirma) en el capítulo de transacciones.
Direcciones de Vanidad
Las direcciones de vanidad son direcciones bitcoin válidas que contienen mensajes legibles. Por ejemplo:
1LoveBPzzD72PUXLzCkYAtGFYmK5vYNR33
Es una dirección válida que contiene las letras que forman la palabra «Love» con las primeras cuatro letras en Base-58. Las direcciones de vanidad requieren generar y comprobar miles de millones de claves privadas candidatas, hasta que de una se derive una dirección bitcoin con el patrón deseado. Aunque hay algunas optimizaciones en el algoritmo de generación de la vanidad, el proceso implica esencialmente que escoge una clave privada al azar, derivando la clave pública, derivando la dirección bitcoin, y comprobando si coincide con el patrón de vanidad deseado, repitiendo miles de millones de veces hasta encontrar una coincidencia.
Una vez que se encuentra una dirección de vanidad que coincida con el patrón deseado, la clave privada de la que se deriva puede ser utilizada por el propietario para gastar bitcoins exactamente de la misma manera que cualquier otra dirección. Las direcciones de vanidad no son menos o más seguras que cualquier otra dirección. Dependen de la misma criptografía de curva elíptica (ECC) y Secure Hash Algorithm (SHA) de cualquier otra dirección. No es más fácil encontrar la clave privada de una dirección que comienza con un patrón de vanidad de lo que sería cualquier otra dirección.
En el capítulo 3, presentamos a Eugenia, directora de caridad para niños que funciona en las Filipinas. Digamos que Eugenia está organizando una unidad de recaudación de fondos en bitcoin y que quiere utilizar una dirección bitcoin de vanidad para dar a conocer la recaudación de fondos. Eugenia creará una dirección de vanidad que comience por «1Kids» con ese propósito. Vamos a ver cómo se crea esta dirección de vanidad y lo que significa para la seguridad de la obra benéfica de Eugenia.