El indicador SigHash SINGLE|ANYONECANPAY
es sin lugar a duda, uno de los más interesantes por su versatilidad y por las vulnerabilidades que puede provocar. Tanto, que aparece dos veces en esta lista.
Este indicador firmará el input en cuestión y el output con el mismo índice que el input; además permitirá que se puedan añadir otros inputs, lo que resulta en que tanto los outputs no firmados como los inputs no firmados sean modificables.
En una transacción sin confirmar, si uno de los inputs es firmado con el indicador SigHash SINGLE|ANYONECANPAY
y ese input desbloquea más fondos que el output al que está referenciado, es posible llevárselos a otra transacción quedándote con la diferencia entre la cantidad de fondos bitcoin del input y del output correspondiente.
Esto es posible puesto que el indicador SigHash SINGLE|ANYONECANPAY
brinda un alto grado de modularidad al input en cuestión, permitiendo que se modifique tanto el resto de inputs como el resto de outputs no firmados. (NOTA 1: Outputs dummies)
En la imagen vemos una transacción vulnerable, en la que uno de los inputs se firma con el indicador SigHash SINGLE|ANYONECANPAY
. Este input en cuestión (B) desbloquea 1,5BTC > 1BTC del output al que está referenciado (D).
El atacante puede crear una transacción de ataque, en la que completando para el mismo número de inputs y outputs previos, se llevara al output F (una dirección que controla) la diferencia entre el input B y D. Es decir, el atacante pone un nuevo input (en el ejemplo el input E con 0,1BTC) y pone como output el F, al que se envían 0,6BTC (0,1BTC del input E + 0,5BTC del diferencial entre B y D)
A pesar de que esto es posible, la transacción de ataque sigue siendo vulnerable a otro ataque del mismo estilo. Solo se garantizaría el éxito del ataque cuando una de las transacciones fuera confirmada, lo que ocurrirá generalmente con aquella que pague una mayor fee.
Quien hace este tipo de firma, si lo hace de manera consciente, tiene en mente algo como "mientras que una parte de los fondos lleguen a esta dirección, haz lo que quieras con el resto de direcciones de llegadas y añade tantos inputs como quieras."
Normalmente en la timechain (o blockchain) de Bitcoin, los inputs firmados con este indicador suelen desbloquear una cantidad de fondos igual o inferior a la del output con el mismo índice. Esto hace que, en la práctica, este tipo de ataque no sea económicamente viable, ya que el atacante tendría que aportar fondos adicionales con nuevos inputs, terminando por beneficiar al destinatario original en lugar de obtener ganancias.