Récupération réussie du portefeuille papier Bitcoin 2014 (somme de contrôle invalide)
Portefeuille papier Bitcoin
Remarque : Lorsque j'ai publié ce rapport de récupération sur le subreddit, il a été supprimé par les administrateurs pour des raisons inconnues.
---- TL;DR
Le client a acheté des BTC en 2014 et les a stockés sur ce qu'on appelle "portefeuille en papier". Ils avaient toujours l’adresse du BTC (que l’on pouvait encore voir sur la blockchain, inchangée depuis 2014), et le portefeuille papier avec la clé privée. Malheureusement, la clé privée a été extraite comme "invalide" (c'est-à-dire une mauvaise somme de contrôle) chaque fois que le client a tenté d'accéder au portefeuille, au cours des 10 dernières années.
Le client nous a fourni la photo du portefeuille papier montrant la clé privée et un code QR partiel. Le client a généré et imprimé le portefeuille papier en utilisant l'un des "Générateur de portefeuille papier BTC" sites Web qui étaient populaires à l'époque pour générer "Portefeuilles papier BTC".
(certaines parties de la photo de la clé privée ont été expurgées pour des raisons de confidentialité)
Nous avons pu trouver le problème avec la clé privée imprimée et récupérer le BTC.
---- Version longue:
Lisez d'abord le TL;DR.
Cette photo était la seule version de la clé privée dont disposait le client. Ce n'est pas très net, mais suffisant pour lire tous les caractères. Et il contenait un code QR partiel.
La clé privée se trouve dans ce qu'on appelle "avec femme" format (Wallet Import Format), codé en base58, avec 51 caractères. Le "avec femme" Le format utilisé pour les clés privées BTC est essentiellement une clé privée BTC brute, avec 4 octets de somme de contrôle double SHA256 ajoutés à la fin et codés en base58.
Le code QR partiel aurait pu être utile pour comprendre ce qui n'allait pas avec la clé privée. Mais nous n’avons trouvé aucun outil gratuit ou open source capable d’extraire facilement des données utilisables à partir d’un code QR partiel. Nous avons donc décidé que pour l’instant, ce serait trop d’efforts d’essayer d’utiliser les informations de l’image partielle du code QR.
En regardant la clé privée, la plupart des caractères (y compris ceux que nous avons expurgés) étaient absolument sans ambiguïté.
Le premier caractère douteux, à droite du premier X, ressemble à une goutte circulaire, mais il ne peut s'agir que d'un "e"comme les autres candidats minuscules ("o", "s" et "un") apparaissent plus tard et sont clairement distincts.
Le personnage suivant, juste avant le suivant "X"ressemble à une barre verticale, il pourrait donc s'agir d'un "je" (L minuscule), un "je" (i majuscule), un "je" ou un "1" (chiffre). Minuscules "L" et majuscule "je" ne sont pas autorisés dans bip38. Le chiffre "1" a toujours une partie qui dépasse en haut à gauche, nous avons donc décidé que ce n'était pas le cas "1".
La dernière possibilité est "je"mais bizarrement il n'y a pas d'espace visible sous le point du "je". Mais si vous regardez plus loin, vous voyez un personnage qui est clairement un "j" (J minuscule), et lui non plus n'a pas d'espace visible sous le point. Nous étions donc presque sûrs que notre "je" était en fait un "je".
Le prochain personnage intéressant, à droite du deuxième "X"ressemble à "7" mais avec une barre verticale, au lieu de la barre normalement diagonale du "7". Mais il n’existe aucun autre caractère base58 qui lui ressemble, nous avons donc pensé que cette police avait un "stylisé" forme du glyphe "7". Ce "7" Le caractère apparaît à 3 endroits dans la chaîne, comme vous pouvez le voir.
La résultante "avec femme" La chaîne que nous avons obtenue était incorrecte (somme de contrôle incorrecte) et c'était une chaîne que notre client avait déjà testée. Et même en ignorant la somme de contrôle invalide, la clé privée n’a pas conduit au compte où se trouvaient les BTC.
Nous avons donc décidé de faire une recherche bruteforce, en supposant que jusqu'à 3 caractères dans le "avec femme" la chaîne était complètement incorrecte.
Nous avions besoin du code pour vérifier qu'un "avec femme" la somme de contrôle de la chaîne était valide, et pour générer l'adresse BTC correspondante (que nous avions dans "avec femme" format également, c'est-à-dire une adresse BTC héritée). En fait, il existe deux formats pour le "avec femme" Adresse BTC : l'une est appelée "clé publique (non compressée), et l'autre comme "clé publique (compressée)", et à partir de l'adresse BTC dont nous disposions, il n'était pas possible de savoir quel format il utilisait - sans connaître la clé privée. Nous avons donc dû générer les deux adresses (non compressées et compressées) pour chaque clé privée, afin de vérifier si l'une d'elles correspondait à notre adresse BTC connue.
Comme nous n'avions pas le code pour calculer les clés publiques BTC à partir du "avec femme" clé privée, nous avons demandé à ChatGPT de nous aider :
- ChatGPT, pouvez-vous écrire une fonction python qui convertit une clé privée Bitcoin en adresse publique Bitcoin ?
- Bien sûr, voici une fonction Python qui convertit une clé privée Bitcoin en l'adresse publique Bitcoin correspondante : ...
Tout le code que nous avons obtenu de ChatGPT était faux (par exemple, il a oublié d'appeler la fonction de courbe elliptique ! ! ), et nous l'avons dit à l'IA :
- Merci d'avoir détecté cette erreur ! Maintenant, le code devrait fonctionner correctement [no, it still had bugs ! ]. Je m'excuse pour les erreurs dans le code. En tant qu'IA, je vise la précision, mais il arrive parfois que des erreurs se glissent. J’apprécie votre patience et votre compréhension.
ChatGPT nous a fait gagner du temps, mais nous avons quand même dû passer plusieurs heures à déboguer, corriger et optimiser le code de ChatGPT, et à tester son bon fonctionnement à l'aide de certains cas de test.
Nous avons ensuite lancé la recherche bruteforce de 3 mauvais caractères n'importe où dans le "avec femme" chaîne (ce qui a été estimé à prendre quelques jours sans GPU).
Pendant que la recherche bruteforce était en cours, nous pensions qu'en fait, le seul personnage vraiment discutable était cet étrange "7" avec la barre verticale. Nous avons donc modifié la recherche bruteforce pour tester uniquement tous les caractères base58 possibles aux 3 positions où ces caractères étranges "7" des caractères apparaissent.
Après quelques secondes, nous avons atteint notre clé publique BTC ! Nous avons donc trouvé la bonne clé privée : le personnage ressemblant à un "7" était en fait un "T"avec la partie droite de la barre horizontale manquante.
L'explication probable est donc que les données de police pour le "T" Le glyphe était d'une manière ou d'une autre corrompu sur l'ordinateur qui imprimait la clé privée à ce moment-là.
Les BTC ont finalement été récupérés, avec un petit bonus en Bitcoin Cash (BCH) et Bitcoin Gold (BTG), provenant de ces forks BTC.
Dans la même série Recovery :
Successful Recovery Story: How we recovered 100 ETH from an old Ledger Nano S with firmware 1.0 (seed lost!)
byu/loupiote2 inledgerwallet
Successful Recovery of BTC from a HW.1 Ledger Wallet with Firmware 1.0.0 (seed lost!)
byu/loupiote2 inledgerwallet
Nano S with 1.2 firmware vs EIP-155: Successful recovery of 24 ETH and $50+k worth of ERC-20 tokens (seed lost)
byu/loupiote2 inledgerwallet
Successful recovery of 70 ETH (EIP2333) in validator on the beacon chain (seed lost)
byu/loupiote2 inledgerwallet
Nano S with Firmware 1.2: 539 ETH recovered successfully (seed lost)
byu/loupiote2 inledgerwallet
Successful recovery of $137k worth of cryptos from invalid seed phrase (two incorrect words!)
byu/loupiote2 inledgerwallet
soumis par /u/loupiote2
