Una transacción estándar de Bitcoin deposita monedas en una dirección y luego, utilizando el lenguaje de programación de Bitcoin, establece que quien quiera gastar esta salida debe poseer la clave privada correspondiente a esa dirección.
Sin embargo, es posible desviarse de esta plantilla base para crear transacciones más complejas, donde se deben cumplir otras condiciones para gastar el resultado de la transacción.
¿Es posible crear una transacción en la que se deposite una suma en una dirección, pero solo el propietario de otra clave privada puede gastarla? No soy un experto en secuencias de comandos de Bitcoin, pero esto parece al menos posible.
En este caso, ¿se puede usar una transacción tan manipulada para montar un ataque de doble gasto, donde la dirección A envía la suma X a la dirección B, pero una vez que se completa la transacción, la dirección A conserva la propiedad de la suma y puede enviarla a otra parte, mientras que la dirección B en realidad no puede hacer nada al respecto incluso si la suma se acredita a su saldo?
¿Cómo trataría una billetera estándar una transacción de este tipo? ¿Reconocería incluso que está sucediendo algo extraño, o mostraría ciegamente que X BTC ingresó la dirección B, independientemente del script de transacción?
Lo siento, me engañó la forma en que sitios como blockchain.info muestran las transacciones: una transacción en realidad no contiene ninguna "dirección de salida", solo contiene salidas que establecen las condiciones necesarias para gastarlas; la "dirección de salida" se calcula comprobando la firma de la dirección solicitada por el script de salida; por lo tanto, es imposible "enviar dinero a la dirección B" sin colocar realmente la dirección B en el script de salida.
Sin embargo, la pregunta sigue siendo: ¿podría diseñarse una transacción para engañar a una billetera para que le diga a su usuario "Recibí X BTC", mientras que otra persona puede reclamar la suma usando otra clave privada?
Lo que estás describiendo es una contradicción de términos. Si se deposita una suma de dinero en una dirección, eso significa que solo la clave privada de esa dirección puede gastar el dinero.
Tal vez podría crear una transacción no estándar y decirle a la gente que le está dando permiso al propietario de la dirección B para gastarlo, pero si la gente observa la transacción con suficiente atención, podrán decir que realmente es la dirección C (y no B) ' s propietario que puede gastarlo. No hay forma de evitar esto: la salida de la transacción es pública, al igual que la implementación de cómo funciona.
Entonces, si la pregunta es: ¿puede engañar al software X con una transacción no estándar? Tal vez dependa de encontrar un error (u otra situación menos que ideal) en el software en cuestión. (por ejemplo, si crea una transacción que puede gastar la dirección B o C, tal vez la billetera que posee B diga que tiene el saldo, y si no lo transfiere nuevamente antes de que usted lo haga, entonces puede "robarlo de vuelta"). " el dinero de esa manera) Sin embargo, trataría cualquier transacción no estándar como altamente sospechosa.
No, no engañará al cliente estándar con esto. Si no comprende el script por completo (es decir, es un script no estándar), no intenta analizarlo parcialmente o lo que sea. El procedimiento es simple: si el cliente no puede entender completamente el script, simplemente lo ignora. Período.
Máximo
usuario15793
Máximo