Ce n’est pas du tout un bug dans le protocole bitcoin, mais une mauvaise utilisation de la part de MtGox.
Pour faire simple, une transaction BTC a plusieurs « attributs » (emetteur, dest, date, etc.) et un checksum. Ce que MtGox n’avait pas compris, c’est que ce checksum ne porte pas sur l’ensemble des attributs de cette transaction, en effet, les attributs secondaires sans grande importance, ne sont pas pris en compte dans le calcul du checksum.
Quand quelqu’un fait un transfer de chez MtGox vers l’extérieur, ils ont un « bot » qui vérifie que la transaction s’est bien faite en vérifiant ce checksum. Là où ça foire, c’est que si quelqu’un envoie/injecte rapidement une deuxième transaction identique mais avec un attribut secondaire qui a changé et qu’il est reçu avant l’original de MtGox, alors l’original ne sera pas validé, et donc, le bot de MtGox ne recevra pas la confirmation que le transfer s’est bien fait.
Notez que dans TOUS les cas, l’émetteur est bien débité, et que le récepteur a bien au final ses pépêtes.
Dans le cas de MtGox, les utilisateurs frauduleux envoient un mail à MtGox pour se plaindre (faussement) qu’il n’ont rien reçu. MtGox voit que le bot n’a pas eu de confirmation, et donc, bêtement, ils réinitient la transaction alors que la première était bonne !
Pour résumer, il n’y absolument aucun problème du côté de BTC, c’est uniquement l’algorithme de vérification utilisé par MtGox (il semble qu’ils soient les seuls à faire comme ça, mais pas sûr) qui est foireux.
Ce que je trouve déplorable, c’est l’annonce de MtGox qui a mis la faute sur le BTC, alors que non