Гомоморфное шифрование

Как отдать данные в облако на обработку, не дав их прочитать.

Гомоморфное шифрование (homomorphic encryption) — шифрование, позволяющее выполнять вычисления прямо над шифротекстами так, что после расшифровки получается тот же результат, что и при вычислении над открытыми данными.

Зачем это знать

Обычная схема такова: чтобы что-то посчитать, данные надо расшифровать. Значит, на сервере в момент обработки они лежат открытыми — и это самая лакомая точка для атаки. Гомоморфное шифрование убирает этот компромисс: облако считает вслепую, никогда не видя содержимого. Для защитника это переход от «доверяем серверу» к «серверу нечего у нас взять».

Идея на простом примере

Представьте «волшебный конверт»: вы кладёте число в запечатанный конверт, отдаёте помощнику, он, не вскрывая, складывает его с другим запечатанным числом — и возвращает конверт, в котором лежит сумма. Вскрыть может только владелец ключа. Формально для сложения это выглядит так: если E — шифрование, то существует операция над шифротекстами, дающая шифр суммы.

E(3) ⊕ E(5)  =  E(8)        # сложение под шифром
E(3) ⊗ E(5)  =  E(15)       # умножение под шифром
Расшифровать E(8) → 8 может только владелец секретного ключа.

Заметьте: помощник так и не узнал ни 3, ни 5, ни даже 8. Он лишь механически преобразовал конверты. В этом вся суть: вычислитель работает с шифротекстами как со «строительными блоками», подчиняющимися алгебраическим правилам, и эти правила устроены так, что аккуратно «дублируют» арифметику над спрятанными числами. Слово «гомоморфизм» из математики как раз и означает отображение, которое сохраняет структуру операции: операция над зашифрованными значениями соответствует операции над открытыми.

Частичное, «почти полное» и полное

Схемы различаются тем, какие операции и сколько раз они поддерживают.

  • Частично гомоморфное (PHE) — одна операция, зато неограниченно. Например, у RSA умножение шифротекстов даёт шифр произведения; у схемы Пайе сложение шифротекстов даёт шифр суммы. Этого хватает для узких задач (приватное суммирование голосов, тайное голосование).
  • «Несколько уровней» (SHE) — поддерживает и сложение, и умножение, но ограниченное число операций подряд.
  • Полностью гомоморфное (FHE) — любые вычисления любой глубины. Раз можно делать сложение и умножение по модулю над битами, можно собрать произвольную булеву схему, а значит вычислить что угодно.

Как это работает под капотом

Современные FHE-схемы строятся на «обучении с ошибками» (Learning With Errors, LWE) и решётках. Чтобы скрыть данные, в шифротекст подмешивают небольшой шум. При сложении шумы складываются, при умножении — растут гораздо быстрее. Пока шума немного, расшифровка верна; когда он перерастёт порог — данные испортятся, и восстановить их не сможет даже владелец ключа.

Прорыв 2009 года (Крейг Джентри) — операция bootstrapping: схема умеет «расшифровать саму себя под шифром» и тем самым сбросить накопившийся шум, не раскрывая данные. Это позволяет считать сколь угодно глубоко. Цена — bootstrapping вычислительно очень дорог.

Каждая операция добавляет шум:
  шифр:  [данные | небольшой шум]
  + + ×  →  [данные | шум растёт ...........]
  если шум > порога → расшифровка сломана
  bootstrapping → шум снова мал, считаем дальше

Где это применяется

  • Приватные вычисления в облаке: отдать зашифрованную медицинскую или финансовую базу на анализ, получить зашифрованный результат — провайдер не видит содержимого.
  • Приватный поиск/запросы: сделать запрос к удалённой базе, не раскрывая, что именно ищете.
  • Конфиденциальная аналитика и ML-инференс: посчитать статистику или применить модель к чужим данным, не объединяя их в открытом виде; межбанковский антифрод без раскрытия клиентов.
  • Защита от инсайдера: даже администратор облака с полным доступом к серверу видит лишь шифротексты, поэтому утечка дампа базы или компрометация оператора не раскрывают данные.

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

Реальные ограничения (без иллюзий)

Это не «бесплатная приватность». Главные ограничения:

  • Скорость: операции под шифром в тысячи–миллионы раз медленнее обычных; шифротексты крупные. Поэтому FHE применяют к узким, ценным вычислениям, а не «ко всему подряд».
  • Бюджет шума/глубина: без bootstrapping число операций ограничено; с ним — медленно.
  • Что считаем: схемы естественно дружат с арифметикой (сложение, умножение); ветвления, сравнения и условные переходы выражаются неуклюже и дорого, ведь сервер не имеет права «подсмотреть» условие, чтобы выбрать ветку, — приходится вычислять обе и комбинировать под шифром.
  • Целостность: гомоморфное шифрование скрывает данные, но само по себе не гарантирует, что сервер выполнил правильное вычисление — это отдельная задача (верифицируемые вычисления, ZKP).

Как защититься и применять грамотно

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

Итоги

  • Гомоморфное шифрование позволяет считать над зашифрованными данными; результат после расшифровки совпадает с вычислением над открытыми.
  • PHE — одна операция неограниченно; SHE — обе, но конечной глубины; FHE — любые вычисления (благодаря bootstrapping).
  • Под капотом — решётки/LWE и подмешанный шум; превышение бюджета шума ломает расшифровку, bootstrapping его сбрасывает.
  • Применения — облачная приватная обработка, приватный поиск, конфиденциальная аналитика; главные ограничения — скорость, размер и сложность ветвлений.
Проверьте себя
1. Что принципиально позволяет делать гомоморфное шифрование?
AСжимать данные перед шифрованием
BВыполнять вычисления прямо над шифротекстами без расшифровки
CРасшифровывать данные быстрее обычного
DПередавать ключи по открытому каналу
2. Чем полностью гомоморфное шифрование (FHE) отличается от частичного (PHE)?
AFHE вообще не использует ключи
BFHE поддерживает только сложение
CFHE поддерживает любые вычисления любой глубины, а PHE — одну операцию
DPHE работает только в блокчейне
3. Зачем в FHE нужна операция bootstrapping?
AЧтобы сбросить накопившийся шум и продолжать вычисления
BЧтобы ускорить расшифровку в облаке
CЧтобы передать данные без шифрования
DЧтобы уменьшить размер ключа до нуля