Me quedé atascado en una línea diminuta del flujo de Babylon hoy y, honestamente, me molestó más que el propio fallo… la carrera solo existe entre la lectura del estado anterior y la escritura del nuevo. Suena casi inofensivo cuando lo digo así, solo unos momentos dentro del backend, pero luego seguí pensando: espera, toda la seguridad aquí depende de lo que pueda pasar dentro de esos momentos.
y dejé de verlo como “¿alguien podría atacarlo?” y empecé a mirarlo en términos de orden. el servicio lee el estado, hace la comprobación, otra cosa se mueve al mismo tiempo con una diferencia casi mínima, y luego se escribe la actualización. la mayor parte del tiempo la brecha es tan pequeña que no pasa nada y, desde fuera, parece totalmente seguro.
pero “muy improbable” y “imposible” no son lo mismo.
Eso fue lo que se me quedó en la cabeza.
Creo que Babylon está haciendo un intercambio bastante normal de ingeniería… no hay que frenar todo el sistema con bloqueos pesados ni con coordinación extra solo para eliminar una única ventana de tiempo diminuta; hazla lo bastante pequeña como para que usarla sea extremadamente difícil. quizá esa sea la decisión correcta; quizá eliminarla por completo crearía más retraso y nuevos problemas en otro lugar.
Aun así, no me gusta cuando explican la probabilidad como si fuera una garantía. si la seguridad depende de que validadores y servicios lleguen al mismo estado en el orden esperado, entonces el tiempo forma parte del modelo de seguridad, aunque la gente no lo diga en voz alta.
y sigo preguntándome dónde debería estar la línea… ¿qué tan pequeña tiene que volverse una ventana de carrera antes de que la consideremos aceptable, y qué partes de un protocolo nunca deberían depender del tiempo en absoluto?
Quizá el sistema no elimina la carrera.
Quizá solo hace que la línea de meta sea casi imposible de alcanzar.
@BabylonLabs_io #baby $BABY
y dejé de verlo como “¿alguien podría atacarlo?” y empecé a mirarlo en términos de orden. el servicio lee el estado, hace la comprobación, otra cosa se mueve al mismo tiempo con una diferencia casi mínima, y luego se escribe la actualización. la mayor parte del tiempo la brecha es tan pequeña que no pasa nada y, desde fuera, parece totalmente seguro.
pero “muy improbable” y “imposible” no son lo mismo.
Eso fue lo que se me quedó en la cabeza.
Creo que Babylon está haciendo un intercambio bastante normal de ingeniería… no hay que frenar todo el sistema con bloqueos pesados ni con coordinación extra solo para eliminar una única ventana de tiempo diminuta; hazla lo bastante pequeña como para que usarla sea extremadamente difícil. quizá esa sea la decisión correcta; quizá eliminarla por completo crearía más retraso y nuevos problemas en otro lugar.
Aun así, no me gusta cuando explican la probabilidad como si fuera una garantía. si la seguridad depende de que validadores y servicios lleguen al mismo estado en el orden esperado, entonces el tiempo forma parte del modelo de seguridad, aunque la gente no lo diga en voz alta.
y sigo preguntándome dónde debería estar la línea… ¿qué tan pequeña tiene que volverse una ventana de carrera antes de que la consideremos aceptable, y qué partes de un protocolo nunca deberían depender del tiempo en absoluto?
Quizá el sistema no elimina la carrera.
Quizá solo hace que la línea de meta sea casi imposible de alcanzar.
@BabylonLabs_io #baby $BABY
