FHE (Fully Homomorphic Encryption) — полностью гомоморфное шифрование простыми словами и на практике

FHE (полностью гомоморфное шифрование) — класс криптосхем, позволяющих выполнять вычисления прямо над зашифрованными данными и получать зашифрованный же результат. После расшифровки владелец ключа видит то же значение, как если бы вычисление шло по открытым данным. Практическое следствие: облако/исполнитель ничего не знает о входах и, при желании, о самой программе, но может «посчитать» и вернуть результат.

FHE (Fully Homomorphic Encryption) — полностью гомоморфное шифрование простыми словами и на практике

Связанные материалы: zkML (верифицируемый ИИ), AI Security Hub, Fine-tuning LLM, LoRA.

FHE (Fully Homomorphic Encryption): зачем это нужно

  • Приватность по умолчанию. Банк, клиника или аналитический провайдер могут обрабатывать данные клиента, не видя их содержимого.
  • Нулевая экспозиция в облаке. Вы отдаёте ciphertext, а не plaintext; утечки инфраструктуры не раскрывают исходники.
  • Совместимость со строгими режимами. В медицине/финансах/гос-секторах FHE упрощает соответствие нормативам хранения/обработки.
  • Приватный ML. Инференс моделей по зашифрованным данным (и/или с зашифрованными весами) без доступа к самому содержимому.

Короткая история и «семейство» схем

Идея гомоморфного шифрования обсуждалась с 1970-х; впервые полную схему предложил Крейг Джентри (2009). Современная практика — это семейство реализаций на решётках:

  • BGV (Brakerski–Gentry–Vaikuntanathan) — точная арифметика над кольцами, хороший контроль шума.
  • BFV (Brakerski–Fan–Vercauteren) — целочисленная арифметика, удобна для «точных» вычислений.
  • CKKS (Cheon–Kim–Kim–Song) — приближённая арифметика с плавающей «фикспойнт» шкалой; популярна для ML/аналитики.
  • TFHE — «покомпонентные» логические операции/быстрый бутстраппинг; применяют для булевых схем и активаций.

Отдельно: частичные (PHE) — Paillier (аддитивная) и ElGamal (мультипликативная) — поддерживают одну операцию и не являются «полными».

Типы гомоморфии (уровни возможностей)

  • PHE (частичное) — одна операция (сложение или умножение) без ограничений глубины.
  • SHE (ограниченное) — несколько операций, но с малой глубиной.
  • Leveled FHE — заранее заданная глубина цепочки операций без бутстраппинга (дешевле).
  • Full FHE — неограниченная глубина благодаря бутстраппингу (освежение шума).

На практике часто хватает leveled: вы оцениваете «глубину схемы» и подбираете параметры так, чтобы пройти без перезарядки.

Что под капотом: кольца, шум и ключи

Современные FHE-схемы базируются на задачах типа (R)LWE/RLWE (задачи на «шум» в линейных уравнениях над кольцами). Важно понимать три идеи:

1) Шум. Каждое шифрование содержит контролируемый шум. При гомоморфных операциях шум растёт. Если превысить порог — расшифровка сломается. Бутстраппинг «сбрасывает» шум (дорога операция, но делает схему «полной»).

2) Ключи. Помимо обычных public/secret, нужны оценочные (evaluation) ключи:

  • Relinearization keys — «сжимают» степень шифротекста после умножения.
  • Galois/rotation keys — для поворотов/сдвигов «батчей» (SIMD).
  • Bootstrapping keys — чтобы уметь освежать шум.

3) Упаковка (SIMD). В BGV/BFV/CKKS можно «упаковать» множество значений в один шифротекст и делать операции покомпонентно (SIMD). Это резко снижает стоимость на элемент.

Варианты арифметики: точная vs приближённая

  • BGV/BFV: целочисленная арифметика по модулю; удобна, если важно точное равенство/счётчик/булева логика.
  • CKKS: «плавающая» шкала; вы храните действительные числа с контролируемой погрешностью. Отлично подходит для статистики/ML, где приемлемо.

В CKKS ключевое — масштаб (scale) и rescale после умножений. В BGV/BFV — модуль-свитч и контроль «бюджета шума».

Стоимость: на что закладываться

  • Расширение данных: шифротекст крупнее открытого значения (×10…×100+).
  • Латентность: операции в десятки–тысячи раз медленнее, чем в открытом виде; «бутстраппинг» — самый тяжёлый шаг.
  • Память: крупные параметры (размер кольца N, модуль Q), дополнительные ключи.

Снижают цену: упаковка SIMD, грамотная структура вычислений, минимизация умножений/ротаций, выбор leveled вместо полного FHE, аккуратные параметры.

ML под FHE: как строят инференс

Задача — заменить то, что «не дружит» с гомоморфией, и уложиться в глубину:

  • Активации: ReLU/Swish заменяют на полиномиальные аппроксимации (квадрат, Чебышёв, кусочно-полиномиальные).
  • Нормализации: избегать делений и сложных функций; всё «дорогое» — заранее свёртывать в оффлайне.
  • Квантование: уменьшение диапазонов/точности снижает глубину.
  • CKKS: стандарт для вещественных сетей; TFHE — для булевых/«битовых» вариантов.
  • Batching: упаковывайте целые мини-батчи в ciphertext; экономия огромная.

Где реально применяют: приватный скоринг (финансы/страхование), поиск по зашифрованным признакам, медицинские предикторы, рекомендации без раскрытия профиля пользователя.

Ядро API: что обычно можно сделать

  • Encrypt/Decrypt (SEAL-подобные библиотеки): работа со скейлом (CKKS), списки модулей (RNS).
  • EvalAdd/EvalMul: базовые операции; следите за ростом скейла/шума.
  • Relinearize/Rescale/ModSwitch: «сжатие» и выравнивание параметров.
  • Rotate/Permute: ротации упакованных слотов (нужны Galois-ключи).
  • Bootstrap (если нужно «бесконечное» вычисление).

Дизайн-паттерны вычислений

  • «Больше сложений, меньше умножений» — глубину делают умножения.
  • Формулы Горанера для полиномов — минимизация глубины мультипликативной цепочки.
  • Предварительные константы — сводите деления/нормировки в оффлайн-коэффициенты.
  • Ротации пакетами — планируйте развороты/сдвиги слотов заранее: каждая ротация — это отдельная «дорогая» операция.
  • Слои «в линию» — избегайте ветвлений: логика «если/то» сложна для FHE; используйте «мягкие» приближения.

Сравнение: FHE vs альтернативы

Подход Что даёт Плюсы Минусы/нюансы
FHE Считаем над зашифрованными данными Приватность без доверия к исполнителю; совместим с облаком Медленно/дорого; перепроектирование алгоритмов
MPC Совместное вычисление между сторонами Нет единой доверенной стороны; хорош для интерактивных сценариев Требует онлайн-взаимодействия; сетевая стоимость
TEE Защищённая среда (SGX и др.) Почти нативная скорость; простая разработка Доверие к железу; уязвимости/патчи; модель угроз другая
zk-доказательства (zkML) Доказуем правильный результат Дешёвая проверка/ончейн; не раскрывает входы при нужном дизайне Обычно не скрывает сами входы по умолчанию; доказывает «правильность», а не «секретность»

Практикагибриды: TEE для тяжёлых участков, FHE для чувствительных полей, zk — для публичной верификации итога.

Проектирование под FHE: пошаговый план

  1. Выделите «ценность приватности». Какие поля нельзя раскрывать? Что можно псевдоанонимизировать?
  2. Выберите схему. Точные целые → BFV/BGV; стат-/ML-инференс → CKKS; булевы/логические цепочки → TFHE.
  3. Оцените глубину. Счёт полиномов/слоёв/умножений → хватит ли leveled? Нужен ли бутстраппинг?
  4. Спроектируйте упаковку. Какие данные упакуем в один ciphertext? Какие ротации необходимы?
  5. Подберите параметры. Размер кольца N, модуль Q, скейл (CKKS), уровень безопасности (бит-security).
  6. Соберите прототип. Замерьте латентность, память, точность/погрешность (CKKS).
  7. Твикните модель. Упростите активации, уменьшите глубину, вынесите константы.
  8. Добавьте контроль. Логи вычислений, алерты по «исчерпанию» уровня, тесты корректности на эталонах.

Частные темы, о которых спотыкаются чаще всего

Бутстраппинг. Делает схему «полной», но это сотни миллисекунд–секунды на ciphertext в обычных настройках. Если pipeline фиксированный, старайтесь обойтись leveled и переписать вычисление.

Погрешность (CKKS). Каждое умножение увеличивает скейл и вносит ошибку округления. Контролируйте rescale и держите итоговую точность в заданном допуске.

Ротации и память. Планируйте число Galois-ключей и ротаций: они влияют и на размер ключевого набора, и на время.

Смешанные типы. «Целое + вещественное»? Иногда выгодно держать первые шаги в BFV, затем перейти к CKKS (или наоборот) — но межсхемная композиция сложна; чаще выбирают одну схему и проектируют под неё.

Набор «правил большой тройки» для инженера

  • Минимизируйте умножения и ротации. Самые дорогие операции.
  • Используйте упаковку и SIMD. Игнор упаковки — главный «убийца» производительности.
  • Ранний прототип и профилировка. Точная стоимость FHE «на глаз» не оценивается; эксперимент обязателен.

Пример: линейная регрессия и логистическая под FHE

Линейная регрессия — почти «нативна»: сумма произведений wᵀx в CKKS/BFV, при CKKS — ещё и масштаб. Логистическая требует сигмоиды: заменяют на полином P(x) (например, аппроксимация Чебышёва 3-5-го порядка) → предсказание вероятности с допустимой ошибкой.

FAQ

FHE пригоден для обучения моделей или только для инференса?

Инференс — реалистично сегодня. Обучение под FHE — крайне дорого, но возможны гибриды (часть шагов в TEE/MPC; приватные градиенты под HE для простых моделей).

Чем CKKS отличается от BFV/BGV?

CKKS — приближённая арифметика по вещественным числам с контролем масштаба/ошибки; BFV/BGV — целочисленная арифметика по модулю, «строго точная», но менее удобная для статистики/ML.

Что такое «уровни» и почему все говорят про «глубину»?

Каждое умножение «съедает» уровень. Если уровни закончились — надо бутстраппить (дорого) или изначально выбрать параметры/аппроксимации так, чтобы уложиться.

Можно ли скрыть и данные, и модель?

Да. Данные всегда шифруются; веса модели тоже можно шифровать/скрывать (есть протоколы «двусторонней» приватности), но это ещё увеличит стоимость.

Это быстрее, чем zkML или TEE?

Нет. TEE ближе к нативной скорости. zk решает другую задачу — верификацию. FHE — про секретность входов при вычислении. В реальных системах часто используется комбинация.

Подходит ли FHE для блокчейна/он-чейн?

Он-чейн обычно делают только проверку (zk). FHE-вычисления исполняют оффчейн, возвращая результат владельцу. Есть исследования «он-чейн FHE», но экономически это пока тяжело.

Чек-лист внедрения

  1. Определили, что FHE действительно решает проблему приватности, а не «удорожает по моде».
  2. Выбрали схему (CKKS/BFV/BGV/TFHE) и библиотеку (SEAL-подобные/аналог).
  3. Оценили глубину, спроектировали упаковку и ротации.
  4. Настроили параметры безопасности (бит-уровень), N, Q, масштаб.
  5. Заложили мониторинг: уровни, латентность, память, точность.
  6. Прописали «план деградации» (облегчённый маршрут без бутстраппинга).
  7. Провели evals точности и производительности на реальных данных (см. evals).

Мини-глоссарий

  • Гомоморфизм — свойство шифрования сохранять операцию: Enc(a) ⊕ Enc(b)Enc(a ○ b).
  • Шум — скрывающий добавок в ciphertext; растёт при операциях.
  • Бутстраппинг — процедура «освежения» шума; делает схему «полной».
  • SIMD/батчинг — упаковка многих значений в один ciphertext.
  • Relinearization/Galois keys — ключи для «сжатия» степеней и для ротаций.
  • CKKS/BFV/BGV/TFHE — популярные семейства FHE-схем.

См. также

Task Runner