Fastcrypto, a biblioteca de criptografia usada no Sui, quebrou muitos recordes de velocidade, e nosso trabalho em benchmarks e análises de segurança corrigiu inúmeras vulnerabilidades de segurança, ao mesmo tempo que abriu a porta para a inovação, identificando novos truques de otimização.

Um artigo, Fastcrypto: Pioneering Cryptography Via Continuous Benchmarking, apresentado recentemente no workshop de benchmarking da Conferência Internacional sobre Engenharia de Desempenho (ICPE) no Imperial College em Londres, descreve nosso benchmarking contínuo e sistemático de funções criptográficas na biblioteca Fastcrypto.

A apresentação fez parte de uma sessão chamada “Inovações em Testes de Desempenho: Estratégias e Tecnologias” no workshop Teste de Carga e Benchmarking de Sistemas de Software. A conferência atraiu convidados da academia e da indústria, incluindo representantes do MongoDB e da Amazon que também falaram no mesmo workshop.

Destacamos o benchmarking sistemático e contínuo da biblioteca Fastcrypto, que é uma coleção de funções criptográficas como assinaturas digitais, funções hash e provas de conhecimento zero. No Fastcrypto, todas as funções são avaliadas continuamente após o lançamento e sob demanda, e os resultados são publicados online. Funções semelhantes podem ser facilmente comparadas e mantemos os dados históricos para poder acompanhar o desempenho ao longo do tempo.

A apresentação enfatizou como esses benchmarks facilitaram a tomada de decisões mais informadas no desenvolvimento de Fastcrypto e Sui, influenciando as escolhas de dependências e uso, bem como otimizando o foco dos recursos do desenvolvedor.

Tomada de decisão qualificada a partir de benchmarks

Um estudo de caso do artigo abordou o desafio de selecionar um esquema de assinatura para validadores em Sui. Para que um usuário envie uma transação à Sui, a transação deve ser assinada por um quórum de validadores, combinada em um certificado de transação. Com aproximadamente 100 validadores e uma participação igualmente distribuída, um quórum consiste em 67 validadores, o que significa que cada validador deve verificar 67 assinaturas por transação.

O esquema de assinatura BLS permite que múltiplas assinaturas sejam verificadas como se fossem uma única assinatura, mas é muito mais lento que alternativas, como EdDSA. Um benchmarking detalhado revelou que o ponto de equilíbrio entre estes dois esquemas está entre 40 e 45 assinaturas. Portanto, para Sui, usar o BLS é mais eficiente e é isso que é usado hoje.

A avaliação comparativa dos esquemas de assinatura EdDSA e BLS revelou um ponto de equilíbrio de 40 a 45 assinaturas em lote, mostrando que, com o pool de validadores da Sui, o BLS é uma escolha de alto desempenho.

“Você também deve se preocupar se o software de repente ficar muito mais rápido”

A apresentação também mostrou como os benchmarks podem revelar comportamentos inesperados de software. Um exemplo envolveu bibliotecas que implementavam o esquema de assinatura EdDSA, que presumia que a chave pública deveria ser armazenada em cache e fornecida como entrada para a função de assinatura. Se uma chave pública incorreta for fornecida, isso poderá levar à extração da chave privada (conforme mostrado em nosso GitHub ed25519-unsafe-libs).

Este problema foi detectado porque algumas bibliotecas exibiram um desempenho excepcionalmente rápido, ignorando a derivação da chave pública e usando a chave potencialmente incorreta fornecida como argumento. Embora os benchmarks muitas vezes visem acelerar o software, “você também deve se preocupar se o software de repente ficar muito mais rápido”, conforme observado por um membro da audiência no workshop.