Protótipo Leios da Cardano corrige ataque de temporização em anúncios de Endorser Block
Desenvolvedores da Cardano corrigiram uma falha de temporização no protótipo Leios que podia fazer nós honestos se desconectarem entre si. O problema afetava a lógica de anúncios de Endorser Block do protótipo e nunca fez parte do protocolo atual da mainnet da Cardano.
By SongMarketCap
O protótipo Leios da Cardano recebeu uma correção de rede depois que os desenvolvedores identificaram um ataque de temporização envolvendo anúncios de Endorser Block. Em condições específicas, um stake pool com credenciais operacionais válidas podia enviar um anúncio cronometrado com cuidado que levava um nó honesto a se desconectar de outro par honesto cuja visão da cadeia estava ligeiramente atrás.
A correção foi mesclada no branch leios-prototype do Ouroboros Consensus em 18 de agosto e destacada pela equipe de Consensus da Intersect em 25 de agosto. A Blink Labs posteriormente implementou a proteção correspondente no Dingo.
Diferença de temporização do Leios podia desconectar pares honestos
Ouroboros Leios é a arquitetura de escalabilidade planejada da Cardano, projetada para aumentar o throughput de transações mantendo as propriedades de segurança do protocolo de consenso subjacente.
Parte do design usa Endorser Blocks, que carregam dados adicionais de transações ao lado dos blocos de classificação da Cardano. Os nós podem anunciar um Endorser Block antes de os dados completos do bloco chegarem, ajudando a informação a se propagar pela rede de forma mais eficiente.
O problema identificado envolvia o número de emissão do certificado operacional, ou OCIN, anexado a esses anúncios.
Dois nós honestos podem temporariamente ter pontas imutáveis da cadeia diferentes. Um nó mais adiantado pode já considerar um OCIN mais antigo como revogado, enquanto um par upstream que ainda não atingiu o mesmo ponto imutável pode legitimamente tratá-lo como válido.
A lógica anterior do protótipo podia interpretar um anúncio usando aquele OCIN mais antigo como comportamento inválido e desconectar o par upstream.
A issue original no GitHub descreve como um stake pool atacante podia explorar essa diferença de temporização enviando um anúncio pouco antes de seu OCIN se tornar imutável. Como o pool podia incrementar seu OCIN ao colocar um novo cabeçalho na cadeia, a sequência podia ser usada para acionar desconexões entre nós honestos.
A issue afirmava que o comportamento precisava ser corrigido antes que a lógica de anúncios pudesse ser considerada adequada para a mainnet.
Nova lógica do Leios interrompe a desconexão
A correção mesclada muda como um nó Leios reage quando recebe um anúncio usando um OCIN que sua própria ponta imutável já considera revogado.
Em vez de encerrar a conexão com o par, o nó aceita a mensagem no nível do protocolo de rede. Como o nó receptor já sabe que o OCIN está obsoleto, o anúncio é ignorado em vez de processado ou repassado adiante.
A mudança permite que um par honesto fique temporariamente atrasado sem ser classificado como malicioso.
Os desenvolvedores também documentaram um caso residual mais restrito envolvendo chaves KES históricas vazadas. Uma chave vazada ainda poderia ser usada para enviar um pequeno número de anúncios adicionais falsos de Endorser Block para pares imediatamente a jusante após a revogação.
Esses anúncios não provocam desconexões e não são propagados adiante. A discussão de desenvolvimento descreve o custo adicional de processamento como mínimo e o comportamento remanescente como indesejável, mas não um bloqueador para o protótipo atual.
Não há evidência de fonte primária de que esse vetor de ataque tenha afetado a mainnet da Cardano. O mecanismo de anúncios afetado pertence ao protótipo Leios, e a correção foi mesclada em seu branch dedicado de desenvolvimento em vez do branch de consenso de produção.
Dingo adota a mesma proteção do Leios
A Blink Labs também aplicou o modelo de tratamento de OCIN obsoleto ao Dingo, sua implementação independente de nó da Cardano.
A issue do Dingo foi aberta em 26 de agosto depois que os desenvolvedores identificaram que um anúncio corretamente assinado, porém obsoleto, ainda podia ser registrado e retransmitido. O pull request #3563 foi mesclado em 27 de agosto.
Na implementação atualizada, anúncios obsoletos ou de emissor desconhecido são aceitos sem fechar a conexão com o par, mas não são registrados, processados ou repassados. Anúncios novos seguem pelo processamento normal, com testes de regressão cobrindo diversos estados de OCIN.
A atualização de desenvolvimento de agosto da Intersect também relatou suporte expandido do db-analyser para cadeias Leios. A ferramenta agora pode reproduzir dados da cadeia Leios e medir transações de Endorser Block certificadas, seu tamanho e o tempo necessário para lê-las e aplicá-las. Isso estende os testes além do throughput para custos de processamento do ledger e comportamento de recursos.
A correção para anúncios obsoletos agora abrange duas implementações. O Ouroboros Consensus mudou o comportamento no protótipo Leios original em 18 de agosto, enquanto o Dingo adotou sua implementação correspondente nove dias depois, alinhando como ambas as bases de código lidam com o mesmo caso extremo de rede antes que o Leios chegue à implantação em produção.