Blockchain.info Wallet-Format

Mir ist aufgefallen, dass die Wallet-Version von BCI in letzter Zeit auf Version 2 aktualisiert wurde (und neben anderen Sicherheitsfunktionen auch Key-Stretching verwendet).

Ich habe auf die Wallet-Support-Seite von BCI verwiesen und dort steht, dass die Wallet-Daten der Version 2 das folgende Format haben:

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

Was ist mit dem folgenden JSON-Objekt (auf das über eine URL im Format https://blockchain.info/wallet/ INSERT_GUID_HERE ?format=json&resend_code=false zugegriffen werden kann )? Welcher Version entspricht das?

Um es klar zu sagen, der Unterschied besteht darin, dass meine JSON-Daten fehlen :

  • die pbkdf2_iterations- Variable
  • die Versionsvariable (=2).

Für die fraglichen Daten ist hier das (bearbeitete) JSON-Objekt, das dem oben genannten Link entnommen ist (wobei die GUID durch die tatsächliche GUID ersetzt wird):

{"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}

Vergleichen Sie dies mit aktuellen JSON-Daten ( für ein zu diesem Zweck erstelltes Wallet 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}

Antworten (1)

Ich habe die verschiedenen Verschlüsselungsschemata, die in Wallets der Version 1 verwendet werden, hier größtenteils detailliert beschrieben: https://bitcointalk.org/index.php?topic=1012475.msg11105755#msg11105755

Übrigens ist es nicht mehr trivial, ein solches Wallet zu erstellen, da der Standard jetzt Version 2 ist. Es ist einfach, ein Wallet der Version 1 in Version 2 umzuwandeln: Ändern Sie einfach die Anzahl der Iterationen unter den Sicherheitseinstellungen.

(bearbeitet, um den referenzierten Inhalt hier aufzunehmen, auf Anfrage)

Das ist eine verschlüsselte Brieftasche der Version 1 (was der Code als Version 0 IIRC bezeichnet). Für diese Wallet-Version wurden mehrere verschiedene Verschlüsselungsschemata verwendet – die einzige Möglichkeit, sie zu unterscheiden, besteht darin, sie alle auszuprobieren und zu sehen, welches funktioniert.

Die Schemata haben einige gemeinsame Attribute: Die Nutzdaten werden Base-64-codiert gespeichert, die ersten 16 Bytes werden sowohl als Salt des KDF als auch als IV des Verschlüsselungsmodus verwendet (und der Rest ist der Chiffretext), das Passwort ist UTF-8-codiert (es ist nicht normalisiert), und das KDF ist PBKDF2-SHA1. Die Schemaunterschiede in der Reihenfolge vom neuesten zum ältesten sind:

  • die KDF-Iterationszahl ist 10, die Verschlüsselung ist AES-256 im CBC-Modus mit ISO 10126-Padding (wie Wallets der Version 2, aber mit einer fest codierten Iterationszahl)
  • wie oben, aber die Anzahl der Iterationen ist 1
  • die Iterationszahl ist 1, die Verschlüsselung ist AES-256 im OFB-Modus mit ISO 7816-4-Padding

Ebenso hat die Verschlüsselung mit dem zweiten Passwort eine Reihe von Schemata durchlaufen; Ich denke, sie ähneln den oben genannten, aber ich bin mir nicht sicher und habe die Details nicht ohne Weiteres zur Verfügung.

Das zweite Passwort wird ebenfalls gehasht in der Brieftaschendatei gespeichert, und ich habe die Details der verschiedenen Hash-Schemata (wiederum ist das Passwort UTF-8-codiert, vom neuesten zum ältesten):

  • das Salt ist das SharedKey-Feld (die wörtliche Zeichenfolge, nicht die zugrunde liegenden UUID-Bytes), der Hash ist PBKDF1-SHA256 mit einer Iterationszahl von 10 (wie Wallets der Version 2, aber mit einer fest codierten Iterationszahl)
  • wie oben, aber die Anzahl der Iterationen ist 1
  • Der Hash ist SHA256 (Passwort) (ungesalt)
@ChristopherGurnee FANTASTISCHE Antwort! Können Sie einen (weiteren) Einblick geben, warum das Dienstprogramm DecryptWallet.html veraltet ist ?
Entschuldigung, ich habe keine Ahnung mehr, warum. Ich habe jedoch einen Kommentar hinzugefügt, um Einzelpersonen auf eine andere Alternative dieses Dienstprogramms hinzuweisen.