
Optimizations for Pairing-Based Cryptography
Этот репозиторий содержит рабочий код на Rust, соответствующий продолжающейся серии публикаций в блоге, посвящённых оптимизациям в криптографии на основе спариваний с использованием BLS12-381 в качестве эталонной кривой.
Обратите внимание: Этот код предназначен для образовательных целей, не проходил аудит безопасности и не подходит для использования в производстве. Используйте на свой страх и риск.
В этом посте будет рассмотрена модулярная арифметика Монтгомери от начала до конца, включая контекст, альтернативы, теорию и практический рабочий код на Rust, работающий в 9 раз быстрее, чем универсальная реализация больших целых чисел. В следующем посте блога будет дополнительно оптимизирована (относительно тяжёлая) процедура умножения на «голом» ассемблере x86-64.
mont1: https://github.com/nccgroup/pairing/tree/main/mont1Этот второй пост продвигает алгоритм умножения Монтгомери, разработанный в Rust, ещё дальше, чтобы достичь максимальной производительности, которую современная машина x86-64 может обеспечить для реализации, написанной вручную на ассемблере. Несколько специализированных инструкций и передовых микроархитектурных особенностей, обеспечивающих повышенный параллелизм, позволяют процедуре умножения Монтгомери работать более чем в 15 раз быстрее, чем универсальная реализация больших целых чисел.
mont2: https://github.com/nccgroup/pairing/tree/main/mont2Авторское право 2021 Eric Schorn; распространяется по лицензии 3-Clause BSD License.