Formato de billetera Blockchain.info

Me di cuenta de que la versión de Wallet de BCI se ha actualizado a la versión 2 en los últimos tiempos (y también emplea extensión de clave, entre otras características de seguridad).

Me he referido a la página de soporte de billetera de BCI y dice que los datos de la billetera de la versión 2 tienen el siguiente formato:

{
"version" : "2.0",
"pbkdf2_iterations" : 10000,
"payload" : "ENCRYPTED VERSION 1 PAYLOAD (SEE BELOW)"
}

¿Qué pasa con el siguiente objeto JSON (al que se puede acceder a través de la URL del formato https://blockchain.info/wallet/ INSERT_GUID_HERE ?format=json&resend_code=false )? ¿A qué versión corresponde?

Para ser claros, la diferencia es que faltan mis datos JSON :

  • la variable pbkdf2_iterations
  • la versión (=2) variable

Para los datos en cuestión, aquí está el objeto JSON (editado) que se toma del enlace mencionado anteriormente (reemplazando GUID con el GUID real):

{"initial_error":"For Improved security add an email address to your account.","auth_type":0,"real_auth_type":0,"symbol_local":{"symbol":"$","code":"USD","symbolAppearsAfter":false,"name":"U.S. dollar","local":true,"conversion":442752.14734791},"clientTimeDiff":26055161055,"war_checksum":"c8c296cf351e7691","language":"en","symbol_btc":{"symbol":"mBTC","code":"MBC","symbolAppearsAfter":true,"name":"MilliBit (mBTC)","local":false,"conversion":100000.00000000},"extra_seed":"89e4807b343acfed576c474a675da1daac3ddb76691d05963a9e0a76533ca7ad4cd12ff058b40a1dd2f57a40759bb484a3708c3545ccfd995913964f148d405f","payload":"PAYLOAD DATA","guid":"GUID","serverTime":1423127480609,"payload_checksum":"8f8e16d79e7528e9725bef006a9752894e5d344d0324ba4ac6f6e4d804e02971","sync_pubkeys":false}

Compare esto con los datos JSON actuales ( para una billetera creada para este propósito https://blockchain.info/wallet/1d39195b-d918-4b7b-acae-d47db3324454?format=json&resend_code=false

{"initial_error":"For Improved security add an email address to your account.","extra_seed":"92a5d897af5c491e9e36dfad95f72b616553b23e02777859729c49b934ebbe1a575aa31a8ce0ba9978b9901caae649dd112d1759da5e48117379fbab0a91b083","auth_type":0,"real_auth_type":0,"payload":"{\"pbkdf2_iterations\":5000,\"version\":2,\"payload\":\"RyUtA4LJw69ly2ADu+zZLfoQ447o0gKhwXUAtzdbKpWOtvwjzHM8VY+zXU1z\/FklZJK\/in7XpWzz+zKnw3kHw0oSkLf1FaYVNR4zivUTRuXUaj5g\/Yq6DPhxpHyjEJGtXriqPP\/X713FePGBW5QolJplgIY15Q4GLNdPbanxfEI9LGuvO87tIXxUWY597MtqNzQQH67P+zCMw4q+kgS4wzchI\/D\/cQHRYH2gNSjMiv9rZbUPM7NKVR6IYJPokyoslHBBpN\/9qyCFNUHy1l\/SdPeNXRa\/UnBSsXu7Sf8TZuLL1REvYfoyFm3JOE3Fk3iJWbjN\/mgzDOFuF9sMXiqL5r7+guMm05da3bVvyLYOSMK7ZXRFKnDle53ga5FUhy+GUYcnHTSbXU3qTmDzr4Y4J1EE\/CDm7ceNXs9kl9OLy5bVU6MyezVvRR7hIDrBQLsA5kQMtZz6KTE7L5AaZ6aoigP94iP06SB8ZDOlcjVX\/nkDGS2Ajk2bPu5LiZwxglEgzEUpRrd3rglWp14n3X7EhF8w3PUgNeZTO2znOVwYNi568u+ORE3iOgOOkWLYTjV0QWOAdUn2OCR95lUna5MJbD19v5B0Jhn18grhJM\/2k34R\/F\/U2qhhRm6\/qVajAMSW7OTQzRdx0pyYXAHkbXjEUW1q0GyvEru9eg\/gkzc8j6PTZCp1avxevyqctddkgie4MM2saL09sH2rbrWfyV2Ihw==\"}","symbol_local":{"symbol":"$","code":"USD","symbolAppearsAfter":false,"name":"U.S. dollar","local":true,"conversion":443419.65235899},"guid":"1d39195b-d918-4b7b-acae-d47db3324454","payload_checksum":"030de1efb09ee9485eaf009095b02b5ec8536432fa3ccc5588e8831b9c9983ea","war_checksum":"c8c296cf351e7691","language":"en","symbol_btc":{"symbol":"BTC","code":"BTC","symbolAppearsAfter":true,"name":"Bitcoin","local":false,"conversion":100000000.00000000},"sync_pubkeys":false}

Respuestas (1)

Principalmente detallé los diversos esquemas de cifrado utilizados en las billeteras de la versión 1 aquí: https://bitcointalk.org/index.php?topic=1012475.msg11105755#msg11105755

Por cierto, ya no es trivial crear una billetera de este tipo, ahora que la versión predeterminada es la versión 2. Es fácil convertir una billetera de la versión 1 en la versión 2: simplemente cambie el recuento de iteraciones en la configuración de seguridad.

(editado para incluir el contenido al que se hace referencia aquí, previa solicitud)

Esa es una billetera cifrada versión 1 (a lo que el código se refiere como versión 0 IIRC). Se han utilizado varios esquemas de cifrado diferentes para esta versión de billetera; la única forma de diferenciarlos es probarlos todos y ver cuál funciona.

Los esquemas tienen algunos atributos compartidos: la carga útil se almacena codificada en base 64, los primeros 16 bytes se usan como la sal de KDF y el IV del modo de cifrado (y el resto es el texto cifrado), la contraseña está codificada en UTF-8 (es no normalizado), y el KDF es PBKDF2-SHA1. Las diferencias de esquema, en el orden más reciente a más antiguo, son:

  • el recuento de iteraciones de KDF es 10, el cifrado es AES-256 en modo CBC con relleno ISO 10126 (igual que las carteras de la versión 2, pero con un recuento de iteraciones codificado)
  • igual que el anterior, pero el recuento de iteraciones es 1
  • el recuento de iteraciones es 1, el cifrado es AES-256 en modo OFB con relleno ISO 7816-4

Asimismo, el cifrado de segunda contraseña ha pasado por una serie de esquemas; Creo que son paralelos a los anteriores, pero no estoy seguro y no tengo los detalles disponibles.

La segunda contraseña también se almacena con hash dentro del archivo de la billetera, y tengo los detalles de los diversos esquemas de hash (nuevamente, la contraseña está codificada en UTF-8, de la más reciente a la más antigua):

  • el salt es el campo sharedKey (la cadena literal, no los bytes UUID subyacentes), el hash es PBKDF1-SHA256 con un recuento de iteraciones de 10 (igual que las carteras de la versión 2, pero con un recuento de iteraciones codificado)
  • igual que el anterior, pero el recuento de iteraciones es 1
  • el hash es SHA256 (contraseña) (sin sal)
@ChristopherGurnee ¡FANTÁSTICA respuesta! ¿Puede dar alguna idea (más) de por qué la utilidad DecryptWallet.html quedó obsoleta ?
Lo siento, no tengo más idea de por qué. Sin embargo, agregué un comentario para señalar a las personas otra alternativa de esa utilidad.