Comprendre le problème de la malléabilité des transactions

13
1014

Traduction [1] d’un article de Jimmy Song publié sur medium.com le 16 août 2017 :

L’un des avantages de SegWit, dont l’activation est imminente, c’est qu’il corrige le problème de la malléabilité des transactions [2]. Dans cet article, je vais expliquer ce dont il s’agit et pourquoi il est important de corriger ce bug.

Qu’est-ce que la malléabilité des transactions ?

Pour comprendre la malléabilité des transactions, il faut se figurer Bitcoin comme un grand registre mondial et les transactions comme des chèques bancaires, comme je l’ai fait dans mon précédent article sur SegWit.

Un identificateur de transaction (un « hash » de transaction), c’est quelque chose d’unique qui ressemble à une empreinte digitale. Mais contrairement à une empreinte digitale, l’ID de transaction change si la transaction qu’elle représente change de quelque façon que ce soit.

Comme mentionné dans mon article précédent, tout comme les chèques bancaires comportent des signatures manuscrites, les transactions Bitcoin sont signées numériquement. Tout comme les signatures de la vie réelle, les signatures numériques peuvent varier légèrement et pourtant être toujours valides.

Étant donné que l’identifiant de transaction tient compte de tous les éléments de la transaction, l’identificateur de transaction change si la signature numérique change. Ces modifications subtiles ne peuvent se produire qu’avant l’insertion d’une transaction dans un bloc. Une fois qu’une transaction est inscrite dans la blockchain, la transaction, y compris la signature, devient immuable.

La mutabilité de la signature peut être problématique car quelqu’un peut intercepter une transaction, modifier légèrement la signature et modifier l’identificateur de transaction. Ce serait comme remplacer la signature sur un chèque. Le montant sur le chèque ne changerait pas [ni l’émetteur, ni le destinataire], mais la modification de la signature entraînerait une modification de l’identifiant de contrôle.

Les identifiants de transaction sont particulièrement importants car, en tant que grand registre mondial, Bitcoin est organisé autour d’eux. Les nouvelles transactions se rapportent aux ID des transactions passées pour prouver que la signature du chèque est correcte.

 

Comment la malléabilité des transactions affecte-t-elle le réseau Lightning ?

Quelques mots, tout d’abord, sur le réseau Lightning. Le Lightning Network est un réseau de micro-paiements off-chain [3]. Il fonctionne sur Bitcoin et est souvent désigné comme une solution « Layer 2 » [4].

Le réseau Lightning fonctionne en créant une transaction doublement signée. Il crée un nouveau chèque qui n’est valide que si les deux parties signent. Ce chèque comporte la somme envoyée d’une partie à l’autre. À mesure que de nouveaux micro-paiements sont effectués d’un côté à l’autre, le montant du chèque est mis à jour et les deux parties signent le résultat.

Pour démarrer un canal de paiement Lightning, ce chèque doublement signé doit être crédité. Pour que ce chèque ne soit pas retenu par un acteur non coopératif, le chèque est doublement signé avant que la transaction soit envoyée au réseau. Pour que le réseau Lightning fonctionne, il ne faut pas que la transaction de financement soit diffusée avant que le chèque soit doublement signé.

Étant donné que ce chèque se réfère à l’identifiant de la transaction de crédit, si cet identifiant est modifié, le chèque deviendra invalide. L’ouverture d’un canal Lightning Network devient dès lors très compliquée. Il existerait des façons de faire fonctionner Lightning sans corriger le bug de la malléabilité des transactions, mais c’est beaucoup plus facile si c’est corrigé.

 

Comment SegWit corrige-t-il ce bug ?

Il s’avère que les signatures sont la seule façon dont les identifiants de transaction peuvent être modifiées par un attaquant. Avec SegWit, l’identifiant de transaction ne prend plus en compte la signature. Cela signifie que même si l’attaquant change cette signature, l’identificateur de transaction reste le même. Les signatures sont toujours vérifiées, mais ne sont pas utilisées dans le calcul de l’identifiant de transaction.

 

Conclusion

La malléabilité des transactions est corrigée avec Segwit car on cesse de prendre en compte les signatures lors du calcul de l’empreinte de la transaction. Corriger ce bug permet au Lightning Network de fonctionner sans complications.

 

Source : bitcointechtalk.com 

 


[1] Avertissement : il s’agit d’une traduction non-professionnelle. En cas de doute veuillez consulter le texte original.

[2] A lire également : Qu’est-ce que la malléabilité des transactions ?

[3] En dehors de la blockchain.

[4] LN est une « seconde couche »,  un protocole sur le protocole Bitcoin.