
Optimizations for Pairing-Based Cryptography
Questo repository contiene il codice Rust funzionante che corrisponde a una serie in corso di articoli di blog sulle ottimizzazioni nella crittografia basata su pairing, utilizzando BLS12-381 come curva di riferimento.
Nota: Questo codice è a scopo puramente educativo, non è stato sottoposto a un audit di sicurezza e non è adatto alla produzione. Utilizzalo a tuo rischio.
Questo articolo tratterà l'aritmetica modulare di Montgomery dall'inizio alla fine, includendo contesto, alternative, teoria e codice Rust pratico e funzionante che gira 9 volte più veloce di un'implementazione generica con Big Integer. Il prossimo articolo del blog ottimizzerà ulteriormente la routine di moltiplicazione (relativamente) pesante in linguaggio assembly x86-64 bare-metal.
mont1: https://github.com/nccgroup/pairing/tree/main/mont1Questo secondo articolo spinge ancora oltre l'algoritmo di moltiplicazione di Montgomery sviluppato in Rust, alla ricerca delle massime prestazioni che una moderna macchina x86-64 può offrire da un'implementazione scritta a mano in linguaggio assembly. Diverse istruzioni specializzate e funzionalità micro-architetturali avanzate che consentono un maggiore parallelismo fanno sì che la routine di moltiplicazione di Montgomery giri più di 15 volte più veloce di un'implementazione generica basata su Big Integer.
mont2: https://github.com/nccgroup/pairing/tree/main/mont2Copyright 2021 Eric Schorn; concesso in licenza secondo la 3-Clause BSD License.