Hace un par de días se comentó en la comunidad un caso que eriza la piel. Un usuario, aunque solo firmó una transferencia de 500 U, lo que acabó saliendo on-chain fue de 50.000 U. Al final, recién cuando se reconstruyó el eslabón completo, se descubrió que el front-end con el que interactuó había sido manipulado: en pantalla se mostraba 500 U, pero los datos firmados correspondían a 50.000 U. La clave privada la controlaba él; la firma, la confirmó él mismo. Pero en realidad no tenía ni idea de qué estaba firmando.
Este asunto me devolvió al @NewtonProtocol del Libro Blanco: un concepto que aparece de forma recurrente, pero que casi nadie profundiza. Se trata de la “intención de la transacción”. El diagrama del flujo de autorización en la sección 5.3 lo explica con mucha claridad: lo que el usuario envía no es una “firma de transacción en crudo”, sino una “intención de transacción”. El motor de estrategias primero evalúa si esa intención es válida y conforme; al pasar, se le agrega una firma agregada y se envía para su ejecución. A primera vista, ¿no es simplemente dividir la firma en dos pasos? Pero después de pensarlo un rato, sentí que debajo había un cambio más profundo: fuerza a que “lo que firmaste” y “lo que pretendías firmar” queden acoplados, obligándolos a alinearse.
Los monederos tradicionales tienen un punto ciego difícil de evitar. La firma con la clave privada es un problema matemático; la intención de la transacción es un problema semántico. La matemática puede garantizar que la firma es auténtica, pero no puede garantizar que lo que tenías en la cabeza sea exactamente lo mismo que lo que finalmente se ejecuta en la cadena. La solución de Newton convierte la intención en un dato estructurado para que el motor de estrategias pueda verificarla de forma independiente. Lo que recibe el operador no es una sucesión de “jeroglíficos” en hexadecimal, sino un texto legible a simple vista del tipo “quién transfiere cuánto a quién”. Primero deben comprobar si esa descripción textual es conforme; y solo después, respaldarla con su propia firma BLS.
#Newt
Pero esto también abre un nuevo dilema. ¿Y si la propia intención se genera en un front-end secuestrado? El usuario cree que está introduciendo 500 U, pero el front-end cambia sigilosamente a 50.000 U y luego envía la intención. El operador recibe una intención de transferencia de 50.000 U que “parece” conforme. La validan: conforme. Firman: ejecutan. $NEWT La garantía de la pignoración de tokens puede evitar que la estrategia sea alterada, y puede impedir que el operador se tome libertades; pero no puede cerrar la brecha entre “lo que tenías en la cabeza” y “lo que aparece en la pantalla”.
Quizá ese sea el punto ciego más interno de toda la capa de autorización. DYOR.
Este asunto me devolvió al @NewtonProtocol del Libro Blanco: un concepto que aparece de forma recurrente, pero que casi nadie profundiza. Se trata de la “intención de la transacción”. El diagrama del flujo de autorización en la sección 5.3 lo explica con mucha claridad: lo que el usuario envía no es una “firma de transacción en crudo”, sino una “intención de transacción”. El motor de estrategias primero evalúa si esa intención es válida y conforme; al pasar, se le agrega una firma agregada y se envía para su ejecución. A primera vista, ¿no es simplemente dividir la firma en dos pasos? Pero después de pensarlo un rato, sentí que debajo había un cambio más profundo: fuerza a que “lo que firmaste” y “lo que pretendías firmar” queden acoplados, obligándolos a alinearse.
Los monederos tradicionales tienen un punto ciego difícil de evitar. La firma con la clave privada es un problema matemático; la intención de la transacción es un problema semántico. La matemática puede garantizar que la firma es auténtica, pero no puede garantizar que lo que tenías en la cabeza sea exactamente lo mismo que lo que finalmente se ejecuta en la cadena. La solución de Newton convierte la intención en un dato estructurado para que el motor de estrategias pueda verificarla de forma independiente. Lo que recibe el operador no es una sucesión de “jeroglíficos” en hexadecimal, sino un texto legible a simple vista del tipo “quién transfiere cuánto a quién”. Primero deben comprobar si esa descripción textual es conforme; y solo después, respaldarla con su propia firma BLS.
#Newt
Pero esto también abre un nuevo dilema. ¿Y si la propia intención se genera en un front-end secuestrado? El usuario cree que está introduciendo 500 U, pero el front-end cambia sigilosamente a 50.000 U y luego envía la intención. El operador recibe una intención de transferencia de 50.000 U que “parece” conforme. La validan: conforme. Firman: ejecutan. $NEWT La garantía de la pignoración de tokens puede evitar que la estrategia sea alterada, y puede impedir que el operador se tome libertades; pero no puede cerrar la brecha entre “lo que tenías en la cabeza” y “lo que aparece en la pantalla”.
Quizá ese sea el punto ciego más interno de toda la capa de autorización. DYOR.