Después de BIP 65, ¿los MPC simples y unidireccionales siguen sujetos a la maleabilidad de las transacciones?
Más específicamente:
¿Está el beneficiario en riesgo debido a la maleabilidad? Si es así, ¿cómo? (hasta donde entendí, el beneficiario ya no está en riesgo)
¿Está el pagador en riesgo debido a la maleabilidad? Si es así, ¿cómo? (hasta donde yo entendí, el beneficiario todavía está en riesgo)
Hay una variedad de formas diferentes de construir un canal de micropagos, pero hay dos diseños que creo que son particularmente relevantes para su pregunta sobre "canales de micropagos simples y unidireccionales":
Canales de micropagos estilo Spillman: este era un diseño de canal de micropagos comúnmente descrito antes de BIP65 ( OP_CHECKLOCKTIMEVERIFY
, CLTV). Los canales de estilo Spillman fueron descritos por primera vez por Jeremy Spillman en abril de 2013 e implementados en la biblioteca BitcoinJ en 2013 .
Canales de micropago estilo CLTV: esta es una nueva forma de construir un canal de pago que se hizo posible cuando CLTV entró en vigor a mediados de diciembre de 2015. Los canales estilo CLTV fueron descritos por el autor de BIP65, Peter Todd, como parte de ese BIP e implementados en dos1- pitón en febrero de 2016 .
Las siguientes dos secciones describen cómo la maleabilidad se relaciona con esos dos tipos diferentes de canales de micropagos.
BIP65 no cambia la forma en que la maleabilidad afecta los canales de micropagos estilo Spillman, por lo que la siguiente descripción era cierta antes de que se aplicara BIP65 y ahora (al menos para las transacciones que no usan segwit).
Un canal de micropagos al estilo Spillman se construye utilizando la siguiente secuencia de eventos entre el Comerciante (que recibe los fondos) y el Cliente (que gasta los fondos):
El problema con la maleabilidad ocurre en el séptimo paso anterior, cuando se transmite la transacción de depósito. Si la transacción que se agrega a la cadena de bloques no es byte por byte idéntica a la transacción de reembolso que el Comerciante firmó en el quinto paso, entonces la transacción de reembolso ya no es válida porque intenta gastar una transacción con un txid diferente que la transacción de depósito.
El Comerciante aún puede trabajar voluntariamente con el Cliente para devolver el dinero del Cliente, pero esto significa que no tenemos los canales de micropagos de estilo confiable que queremos.
Una nota sobre el testigo segregado (segwit): debido a que segwit elimina el tipo de maleabilidad que permitiría a alguien cambiar el txid de la transacción de depósito sin el permiso del Cliente, las transacciones que usan segwit pueden usar canales de micropagos al estilo Spillman sin riesgo de maleabilidad. causó problemas. Al momento de escribir este artículo, segwit no está implementado en la red principal, pero espero que lo esté tarde o temprano, así que lo describo aquí para los futuros lectores de esta respuesta. Tenga en cuenta que segwit es una característica opcional que el Cliente ya debería estar usando para eliminar la maleabilidad en este caso, por lo que la activación de segwit por sí sola no elimina automáticamente la maleabilidad en los canales de estilo Spillman.
[1] También se puede usar bare multisig (multisig sin una dirección P2SH).
Un canal de micropagos estilo CLTV se construye usando la siguiente secuencia de eventos entre el Comerciante y el Cliente. Estos pasos serán idénticos tanto antes como después de activar segwit.
Este proceso elimina las preocupaciones con la maleabilidad en los canales de micropagos estilo CLTV, aunque no elimina la maleabilidad en sí. Debido a que el Cliente puede generar la transacción de reembolso en cualquier momento según la Condición 2.2 anterior, no necesita comprometerse previamente con un txid en particular; puede esperar hasta que la transacción de depósito se haya agregado a la cadena de bloques y su txid se haya vuelto casi inmutable antes de generar la transacción de reembolso.
Si, a pesar de esperar múltiples confirmaciones, la maleabilidad ocurre de todos modos, el Cliente siempre puede generar y firmar una nueva transacción de reembolso utilizando su clave privada. Eso es porque todo lo que se necesita, de acuerdo con la Condición 2.2 en la dirección P2SH, es una firma de la clave autorizada más un tiempo de bloqueo después de una fecha determinada.
El Comerciante puede verse afectado por la maleabilidad si el txid de la transacción de depósito cambia después de haber aceptado cualquier pago. Por esta razón, es mejor que el Comerciante espere a que la transacción de depósito reciba al menos una confirmación antes de que el Comerciante acepte cualquier transacción de pago (esperar más confirmaciones brindará más seguridad y se recomienda para valores altos). Dado que el Comerciante debe esperar a que la transacción de depósito reciba la confirmación de cualquier manera para evitar que el Cliente gaste el doble (que también es el caso en los canales de estilo Spillman), esta fuente de maleabilidad no afecta significativamente la seguridad. modelo.
BIP65 no arregló la maleabilidad para los canales de estilo Spillman más antiguos, pero hizo posibles los canales de pago de estilo CLTV que no se ven afectados negativamente por la maleabilidad de las transacciones. Segwit también corregirá la maleabilidad para los canales de estilo Spillman cuando todas las entradas en la transacción de depósito se gastan de las salidas de segwit.
Sí. Dado que no puede firmar una firma y las firmas en una transacción se utilizan al calcular un txid
, por lo tanto, solo los testigos segregados o los txid normalizados arreglarían la maleabilidad de la transacción.
tocar
David A. Harding