Современное развитие криптографии стремительно движется вперед, предлагая новые инструменты для защиты данных и обеспечения приватности. Одним из таких революционных направлений является полностью гомоморфное шифрование (FHE), позволяющее выполнять вычисления над зашифрованными данными без необходимости предварительной дешифровки. В 2023 году команда Zama представила в рамках своего проекта TFHE-rs инновационный подход к реализации алгоритма хеширования SHA256, адаптированного для работы с Boolean гомоморфными операциями. Это позволило пользователям эффективно выполнять хеширование в зашифрованном виде, обеспечивая высокий уровень безопасности и конфиденциальности. Основы и значимость SHA256 в гомоморфных вычислениях SHA256 — это криптографический хеш-алгоритм, широко используемый для создания цифровых отпечатков данных, обеспечивающий целостность и аутентификацию информации.
Его применение охватывает различные сферы, включая блокчейн, цифровые подписи и безопасное хранение паролей. Традиционно SHA256 работает с открытыми данными, однако в условиях необходимости защиты конфиденциальности возникает задача выполнения хеширования непосредственно над зашифрованными данными. Полностью гомоморфное шифрование становится ответом на этот вызов, предоставляя возможность проводить вычисления без раскрытия исходной информации. Интеграция SHA256 с FHE открывает путь к новым приложениям, где безопасность данных критична, например, в облачных вычислениях и конфиденциальных протоколах обмена сообщениями. Принципы работы алгоритма SHA256 Алгоритм SHA256 базируется на обработке входных данных блоками по 512 бит.
Перед началом хеширования требуется выполнить особую операцию — padding, или заполнение. Этот этап включает дополнение данных одним битом со значением 1, затем последовательностью нулевых битов так, чтобы суммарная длина сообщения стала кратной 512, а в конце добавляется двоичное представление длины исходных данных в 64 битах. Основные вычислительные блоки SHA256 включают ряд побитовых операций: AND, XOR, NOT, а также циклические сдвиги вправо (ROTR) и логические сдвиги вправо (SHR). Помимо этого, алгоритм использует специальные функции с названием sigma и два вспомогательных блока — Ch и Maj. В совокупности эти операции обеспечивают сложную и надежную трансформацию данных на каждом шаге хеширования.
Оптимизация логических функций в контексте Boolean гомоморфных вычислений Особенность Boolean реализации алгоритма в том, что каждый бит данных представлен как зашифрованный булевый элемент Ciphertext. Это требует переосмысления традиционных операций с учетом ограничений гомоморфного шифрования, где операции дороже по вычислительным ресурсам и времени. В работе над TFHE-rs команда Zama предложила упрощения функций Maj и Ch с использованием классических булевых законов и оптимизаций. Для функции Maj использовано преобразование по дистрибутивному закону, что уменьшает количество необходимых логических операций. Аналогично функция Ch была заменена на битовый мультиплексор, который в зависимости от одного управляющего бита выбирает один из двух остальных.
Это существенно снижает сложность и, следовательно, нагрузку на гомоморфные операции. Особое внимание уделено циклическим и логическим сдвигам, которые, в отличие от других вычислений, обходятся без гомоморфных процедур, так как операция сводится к перестановке позиций зашифрованных бит без их расшифрования, что дает значительный выигрыш в производительности. Реализация гомоморфного сложения и параллельные алгоритмы Одним из наиболее сложных этапов является реализация сложения модуло 2^32 в рамках гомоморфных вычислений. Простой риппл-кэрри аддер (ripple carry adder), хотя и понятен с архитектурной точки зрения, оказывается неэффективным из-за последовательной зависимости этапов сложения. В TFHE-rs применены более продвинутые методы параллельных префиксных сумматоров, такие как Brent-Kung и Ladner-Fischer, которые позволяют одновременно вычислять части сложения, снижая латентность операций.
Выбор между этими алгоритмами зависит от контекста: Brent-Kung минимизирует количество булевых операций и подходит для ограниченных по ресурсам сценариев, тогда как Ladner-Fischer требует большего числа операций, но лучше распараллеливается на мощных многоядерных системах и облачных сервисах. Кроме того, используются карри-сейв аддеры (carry save adder), которые оптимизируют цепочки сложений, заменяя некоторые из них более эффективными булевыми комбинациями Maj и XOR. Этот подход значительно улучшает использование вычислительных ресурсов и сокращает время выполнения задач хеширования. Параллелизация и производительность в TFHE-rs TFHE-rs активно использует возможности многопоточной обработки через интеграцию с библиотекой Rayon. Такой выбор технологии позволяет создавать параллельные итераторы и эффективно распределять вычисления по доступным ядрам процессора.
Это особенно важно при работе с битовыми операциями, где каждый элемент слова (32 бита) может обрабатываться отдельным потоком. Кроме того, внутри основных циклов и функций реализованы рекурсивные вызовы с использованием rayon::join(), что позволяет одновременно выполнять независимые части вычислений. Состоящие из множества вызовов сложения и логических операций temp1 и temp2 в цикле сжатия хеша демонстрируют, как можно разворачивать высокоуровневую параллелизацию, не нарушая криптографическую корректность алгоритма. Интеграция и использование homomorphic SHA256 в приложениях Реализация SHA256 на основе Boolean TFHE-rs требует изменений в структуре исходного кода: каждое булево значение заменяется шифротекстом типа Ciphertext. При этом основные идеи алгоритма остаются прежними, что упрощает переход и переиспользование традиционных алгоритмов.
Пользовательский опыт начинается с шифрования входных данных, которые предварительно проходят этап padding на стороне клиента. После этого данные отправляются на сервер, где над ними производится гомоморфное вычисление хеша. По завершении процесса сервер возвращает зашифрованный результат, который расшифровывается на клиенте, обеспечивая таким образом непрерывную защиту информации на всех этапах. TFHE-rs поддерживает работу с текстовыми строками и шестнадцатеричными данными. Кроме того, предусмотрены опции выбора алгоритма префиксного сумматора по флагам командной строки, что открывает путь для адаптации к разным вычислительным средам.