Bitcoin transaction malléabilité regardant les octets

Bitcoin transaction malléabilité regardant les octets

"Malléabilité" des transactions Bitcoin est récemment devenu un enjeu majeur. Cet article examine comment les transactions sont modifiées, au niveau de l’octet.

Un attaquant a été modifie les transactions Bitcoin, les obligeant à avoir un hachage différent. Récemment, un attaquant a pris des transactions sur le réseau Bitcoin peer-to-peer, en les modifiant légèrement, et de les envoyer rapidement à un mineur. La transaction modifiée obtient souvent extrait d’abord, préempter la transaction initiale. L’attaquant ne peut faire "banal" des modifications à une transaction, donc exactement le même transfert Bitcoin comme cela se produit était destiné – la même quantité est déplacé entre les mêmes adresses, cette attaque semble tout à fait inutile. Cependant, chaque transaction est identifiée par un hachage cryptographique, et même un changement trivial à la transaction provoque le hachage de transaction à changer. Modification de la valeur de hachage d’une transaction peut avoir des effets inattendus sur le système Bitcoin.

Une explication très rapide des transactions

Une transaction Bitcoin se déplace bitcoins d’une adresse à une autre. Une transaction doit être signée avec la clé privée correspondant à l’adresse, de sorte que seul le propriétaire des bitcoins peut les déplacer. (Ce processus de signature est étonnamment complexe.) La signature est ensuite placé dans le milieu de la transaction. Enfin, l’ensemble de la transaction (y compris la signature) est cryptographiquement haché, et ce hachage est utilisée pour identifier la transaction dans le système Bitcoin. Les données importantes sont protégées par la signature et ne peut être modifié par un attaquant. Mais il y a peu de moyens de la signature elle-même peut être modifiée, mais toujours restent valables.

(Ceci est simpliste. Pour plus de détails, voir Bitcoins la dure.)

En regardant une opération modifiée

Pour trouver une transaction souffrant de malléabilité, je regardais la page des transactions non confirmées. Si une transaction se modifie, une seule version obtiendra extrait avec succès (et effectivement transférer bitcoins), et l’autre restera non confirmée (et n’a pas d’effet). Parmi les nombreuses conditions en vigueur dans les blocs minées, les mêmes bitcoins ne peuvent pas être dépensé deux fois, afin que les deux transactions ne seront jamais exploitées. C’est pourquoi avoir deux versions d’une transaction ne donnent pas lieu à deux paiements.

Je pris une transaction non confirmée aléatoire du 11 février pour examiner. (Malheureusement, cette opération a été écartée, car je l’ai écrit cet article, brisant mes liens Mais vous pouvez regarder un autre si vous voulez..) Blockchain.info comprend utilement une bannière avertissant que quelque chose est faux:

Attention! cette transaction est une double dépense de 112593804. Vous devez être extrêmement prudent lorsque vous confiant toutes les transactions à / de cet expéditeur.

En regardant les transactions, tout semble bien:

La transaction confirmée prend 0,01 BTC de 1JRQExbG6WAhPCWC5W5H7Rn1LannTx1Dix et transferts 0,0099 BTC à 1Hbum99G9Lp7PyQ2nYqDcN3jh5aw878bFt (le reste est une redevance minière de 0,001 BTC). Cette transaction a hachage bba8c3d044828f099ae3bc5f3beaff2643e0202d6c121753b53536a49511c63f.

Les scripts des deux transactions semblent identiques: Les deux transactions semblent identiques: les bitcoins se déplacent entre les mêmes comptes dans les deux cas, les montants sont égaux, ainsi que les scripts semblent identiques. Alors, pourquoi ont-ils différents hachages? Un indice est la transaction non confirmée est de 224 octets et la transaction confirmée est de 228 octets.

En regardant les transactions brutes omet également de montrer ce qui se passe:

Même si les scripts sont pour la plupart en hexadécimal dans cet affichage brut, ils ont été analysés légèrement, ce qui se cache ce qui se passe. Nous avons besoin d’obtenir les scripts complets ici et ici.

La transaction non confirmée a le script: La transaction a confirmé le script: Il y a quelques différences (mis en évidence en rouge). Mais que signifient-ils?

Ce script est le scriptSig. la signature de la transaction en utilisant la clé privée de l’expéditeur. Cette signature prouve l’expéditeur détient les bitcoins. Cependant, le scriptSig est non seulement une signature simple, mais est en fait un programme écrit dans le langage de script de Bitcoin. Ce programme repousse les données de signature sur la pile d’exécution. Le programme à partir du script non confirmé est interprété comme suit:

Notez les différences mises en évidence. La transaction initiale a un octet 0x48, qui dit à pousser (hex) 48 octets de données. L’opération modifiée a un OP_PUSHDATA2 (0x4D), qui dit que les deux octets suivants (48 00) sont le nombre d’octets à pousser. En d’autres termes, les deux opérations font exactement la même chose (pousser la signature), mais l’original indique ceci avec 48. pendant que la transaction modifiée indique ceci avec 4d 48 00. (Pousser la clé publique a une modification similaire.) Comme les deux scripts faire exactement la même chose, les deux transactions sont également valables. Toutefois, étant donné que les données ont changé, les transactions ont deux différents hachages.

Pourquoi malléabilité importe?

Transaction Malléabilité a été discutée pendant des années et traité comme un inconvénient mineur. Les deux transactions ont exactement le même effet, bitcoins entre les mêmes adresses en mouvement. Une seule transaction sera confirmée par les mineurs, et l’autre sera rejeté, pour que personne ne se fait payer deux fois, même si il y a deux transactions.

Il y a, cependant, trois problèmes qui ont tourné jusqu’à récemment en raison de la malléabilité.

Tout d’abord, la principale Bourse Mt.Gox ont affirmé qu’ils allaient arrêter le traitement bitcoin retraits jusqu’à ce que le réseau Bitcoin approuve et standardise sur un nouveau hachage non malléable. Apparemment, ils utilisaient le hachage pour le suivi des transactions, et seraient ré-envoyer bitcoins si la transaction n’a pas comparu à passer. Ceci est évidemment un problème si la transaction ne passer, mais avec un hachage différent.

Deuxièmement, certains logiciels de portefeuille utiliserait les deux transactions pour calculer l’équilibre, ce qui a provoqué pour montrer la valeur erronée.

Enfin, en raison de la façon dont Bitcoin poignées changement. malléabilité pourrait provoquer une deuxième opération à l’échec. Cela nécessite un peu plus d’explications.

Les échecs en raison de changer et la malléabilité

Le protocole Bitcoin ne bouge pas vraiment bitcoins d’une adresse à. Au lieu de cela, il faut bitcoins à partir d’un ensemble de entrées. et les envoie à un ensemble de les sorties. Chaque sortie est une adresse (en fait un script, mais nous allons ignorer que pour l’instant). Chaque entrée est une sortie d’une opération précédente, et chaque entrée doit être entièrement dépensé.

Par conséquent, si vous avez 3 bitcoins, et vous voulez passer un d’entre eux, les deux autres bitcoins se sont retournés à vous comme changement. envoyé à une adresse que vous contrôlez. Si vous souhaitez ensuite passer un peu de changement, votre deuxième transaction fait référence à la transaction précédente qui génère le changement, le référencement par le hachage de la première transaction. C’est là malléabilité devient un problème – si le hachage de la première transaction a changé, la deuxième transaction est pas valide et la transaction échoue. Notez que le changement sera toujours aller à votre adresse correcte, de sorte que vous pouvez passer aussi longtemps que vous utilisez le bon (modifié) transaction hachage, de sorte que vous ne perdez pas de bitcoins. Vous avez juste l’inconvénient d’avoir une transaction rejetée, et vous aurez besoin de le refaire avec le bon hachage.

Le problème du changement ne se produit que parce que certains logiciels de portefeuille prend un raccourci, vous permettant de (tenter de) passer le changement avant que la transaction a été confirmée. Le raisonnement est que depuis qu’il est votre changement de votre transaction, vous devriez être en mesure de vous faire confiance. Mais cela tombe en panne avec la malléabilité.

Malléabilité est connu depuis longtemps

Conclusion

Espérons que cela a contribué à faire de la malléabilité plus compréhensible. Si vous voulez en savoir plus de détails sur le protocole Bitcoin, y compris la signature et le hachage, voir mon article précédent BitCoins à la dure.

gt; OP_PUSHDATA 0041 4d 41 00

Je pense que vous avez manqué un ‘2’ dans le nom de l’opérateur là.

Au cas où quelqu’un se demande ce que mon commentaire était sur le point, la question que je soulignais dans le poste a été corrigé.

donc ce qui est arrivé ici.

# Vol Transactions de retrait et retraits historiques par Attacker 1
adresse, txid_cleaned

—–BEGIN PGP SIGNATURE —–

Notez que la malléabilité est également PUSHDATA et PUSHDATA4, pas spécifiquement PUSHDATA2. En outre, une application majeure qui malléabilité brise est tout ce qui repose sur une opération de remboursement de nlocktime’d précalculées, les dépenses d’une opération de retour à l’expéditeur avant que la transaction initiale est annoncée.

grand article, je l’ai vraiment apprécié la lecture de ce. l’apprentissage de l’exploitation minière est très intéressant et Mineco sont une entreprise vraiment bien minier!

Vraiment sympa après!
Maintenant, je suis en train de procéder à un tel TX malléable sur mon propre exemple, juste pour essayer comment cela fonctionne.
Pouvez-vous dire exactement ce que et comment je peux changer dans ma tx 350946f9c61598ff4d8c77cb99625f6ac106765dcbf2d2d855a122363b3f3c24?
Avez-vous utilisé createrawtransaction / signrawtransaction?

Source: www.righto.com

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

sept − 5 =