
Otimizações para Criptografia Baseada em Emparelhamento
Este repositório contém o código Rust funcional que corresponde a uma série contínua de postagens de blog cobrindo otimizações em criptografia baseada em emparelhamentos usando BLS12-381 como a curva de referência.
Observação: Este código tem propósitos educacionais, não passou por uma auditoria de segurança e não é adequado para produção. Use por sua conta e risco.
Esta postagem abordará a aritmética modular de Montgomery do início ao fim, incluindo contexto, alternativas, teoria e código Rust prático e funcional rodando 9X mais rápido do que uma implementação genérica de Big Integer. A próxima postagem do blog otimizará ainda mais a rotina de multiplicação (relativamente) pesada em linguagem assembly bare-metal x86-64.
mont1: https://github.com/nccgroup/pairing/tree/main/mont1Esta segunda postagem leva o algoritmo de multiplicação de Montgomery desenvolvido em Rust ainda mais longe para buscar o máximo desempenho que uma máquina x86-64 moderna pode entregar a partir de uma implementação escrita à mão em linguagem assembly. Várias instruções especializadas e recursos microarquiteturais avançados que permitem maior paralelismo resultam na rotina de multiplicação de Montgomery rodando mais de 15X mais rápido do que uma implementação genérica de Big Integer.
mont2: https://github.com/nccgroup/pairing/tree/main/mont2Copyright 2021 Eric Schorn; Licenciado sob a Licença BSD de 3 Cláusulas.