Travei hoje em uma linha minúscula no fluxo do Babylon e, honestamente, isso me incomodou mais do que o próprio bug... a corrida só existe entre ler o estado antigo e escrever o novo. Parece quase inofensivo quando eu digo assim, só alguns momentos dentro do backend, mas aí eu continuei pensando: espera, toda a segurança aqui depende do que pode acontecer nesses momentos.
Eu parei de olhar isso como “alguém pode atacar isso?” e comecei a olhar para a ordem. O serviço lê o estado, faz a verificação, outra coisa se move quase ao mesmo tempo e, então, a atualização é gravada. Na maior parte do tempo, a lacuna é tão pequena que nada dá errado e, de fora, parece totalmente seguro.
Mas “muito improvável” e “impossível” não são a mesma coisa.
Foi isso que ficou na minha cabeça.
Acho que o Babylon está fazendo uma troca de engenharia bem normal aqui... não desacelere todo o sistema com travas pesadas ou coordenação extra só para eliminar uma única janela de timing minúscula; deixe essa janela tão pequena que usá-la se torne extremamente difícil. Talvez essa seja a decisão certa; talvez remover totalmente crie mais atraso e problemas novos em outro lugar.
Ainda assim, eu não gosto quando a probabilidade é explicada como se fosse uma garantia. Se a segurança depende de validadores e serviços chegarem ao mesmo estado na ordem esperada, então o timing faz parte do modelo de segurança, quer as pessoas digam isso em voz alta ou não.
E eu continuo me perguntando onde exatamente está a linha... quão pequeno precisa ficar uma janela de race antes de a gente considerar aceitável, e quais partes de um protocolo nunca deveriam depender de timing de forma alguma?
Talvez o sistema não elimine a race.
Talvez ele só deixe a linha de chegada quase impossível de alcançar.
@BabylonLabs_io #baby $BABY
Eu parei de olhar isso como “alguém pode atacar isso?” e comecei a olhar para a ordem. O serviço lê o estado, faz a verificação, outra coisa se move quase ao mesmo tempo e, então, a atualização é gravada. Na maior parte do tempo, a lacuna é tão pequena que nada dá errado e, de fora, parece totalmente seguro.
Mas “muito improvável” e “impossível” não são a mesma coisa.
Foi isso que ficou na minha cabeça.
Acho que o Babylon está fazendo uma troca de engenharia bem normal aqui... não desacelere todo o sistema com travas pesadas ou coordenação extra só para eliminar uma única janela de timing minúscula; deixe essa janela tão pequena que usá-la se torne extremamente difícil. Talvez essa seja a decisão certa; talvez remover totalmente crie mais atraso e problemas novos em outro lugar.
Ainda assim, eu não gosto quando a probabilidade é explicada como se fosse uma garantia. Se a segurança depende de validadores e serviços chegarem ao mesmo estado na ordem esperada, então o timing faz parte do modelo de segurança, quer as pessoas digam isso em voz alta ou não.
E eu continuo me perguntando onde exatamente está a linha... quão pequeno precisa ficar uma janela de race antes de a gente considerar aceitável, e quais partes de um protocolo nunca deveriam depender de timing de forma alguma?
Talvez o sistema não elimine a race.
Talvez ele só deixe a linha de chegada quase impossível de alcançar.
@BabylonLabs_io #baby $BABY
