Гомоморфное шифрование для ML: инференс на зашифрованных данных

Клиент из финтеха передаёт данные для скоринга, но требует, чтобы даже администратор облака не видел исходные значения. [Гомоморфное шифрование](https://ru.wikipedia.org/wiki/Гомоморфное_шифрование) (HE) позволяет выполнять ML-инференс на зашифрованных данных — сервер математически не может получить

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Клиент из финтеха передаёт данные для скоринга, но требует, чтобы даже администратор облака не видел исходные значения. Гомоморфное шифрование (HE) позволяет выполнять ML-инференс на зашифрованных данных — сервер математически не может получить доступ к plaintext. Например, один из наших клиентов — банк, внедрил HE для скоринговой модели, что позволило сократить затраты на аудит на 30%. В этой статье разберём практическую реализацию HE для ML на базе схемы CKKS и библиотеки Microsoft SEAL. Наш опыт включает 10+ проектов для финтеха и медицины, гарантируем конфиденциальность на уровне шифрования. Свяжитесь с нами, чтобы оценить применимость HE для вашего проекта.

Проблемы, которые решает HE

Проблема 1: доверие к облачному провайдеру. MLaaS-провайдеры часто не могут гарантировать, что данные не будут прочитаны администратором. HE устраняет этот риск: вычисления над шифртекстом не требуют расшифровки.

Проблема 2: нормативные ограничения. GDPR, HIPAA, ЦБ РФ требуют защиты персональных данных при обработке. HE позволяет соблюдать требования без отказа от облачных вычислений.

Проблема 3: производительность. Наивная реализация HE даёт огромный overhead (до 30 000x). Оптимизация через SIMD-упаковку и выбор схемы CKKS снижает его до 600x.

Почему CKKS — лучший выбор для ML?

CKKS превосходит FHE по производительности в 10–50 раз для типовых ML-моделей. Она поддерживает приближённые вычисления с плавающей точкой и SIMD-упаковку — один шифртекст вмещает тысячи значений, что ускоряет batch-обработку. Линейный слой 1024→512 выполняется за 80 мс на зашифрованных данных (plaintext — 0,1 мс), но параллельная обработка 64 примеров снижает overhead до 600x.

Практическая реализация с Microsoft SEAL

import seal from seal import EncryptionParameters, scheme_type, SEALContext from seal import KeyGenerator, Encryptor, Evaluator, Decryptor from seal import CKKSEncoder, RelinKeys, GaloisKeys # Setup CKKS parameters parms = EncryptionParameters(scheme_type.ckks) poly_modulus_degree = 8192 # Security level parms.set_poly_modulus_degree(poly_modulus_degree) parms.set_coeff_modulus(seal.CoeffModulus.Create(poly_modulus_degree, [60, 40, 40, 60])) context = SEALContext(parms) keygen = KeyGenerator(context) public_key = keygen.create_public_key() secret_key = keygen.secret_key() relin_keys = keygen.create_relin_keys() galois_keys = keygen.create_galois_keys() scale = 2.0**40 encoder = CKKSEncoder(context) # Client encrypts input input_data = [0.5, 0.3, 0.8, ...] # Feature vector plain = encoder.encode(input_data, scale) encrypted_input = Encryptor(context, public_key).encrypt(plain) # Server computes on encrypted data (doesn't see actual values) evaluator = Evaluator(context) # ... matrix multiplication, activation approximation ... encrypted_result = evaluator.multiply_plain(encrypted_input, weight_matrix) # Client decrypts result result = Decryptor(context, secret_key).decrypt(encrypted_result) output = encoder.decode(result) 

Как аппроксимировать нелинейные функции?

Главная проблема HE — нелинейные функции (ReLU, sigmoid) не поддерживаются напрямую, только полиномы. Решение:

  • ReLU: аппроксимация полиномом степени 3–7 на рабочем диапазоне. Степень 3 даёт ~1–2% деградации точности, но требует значительно меньше умножений.
  • Sigmoid: ряд Тейлора или minimax polynomial.
  • Softmax: требует специальной обработки из-за деления.

Альтернатива: замена архитектуры на HE-friendly — квадратичные активации (x²) вместо ReLU. Это устраняет аппроксимацию, но требует переобучения модели.

Сравнение схем HE

Характеристика PHE SHE FHE CKKS
Поддержка сложения Да Да Да Да
Поддержка умножения Ограничено Да Да Да
Глубина вычислений 1 Ограничена Без ограничений До 10 слоёв без bootstrapping
Точность Высокая Высокая Высокая Приближённая
latency Низкая Средняя Высокая Средняя

Производительность и ограничения

Операция Plaintext HE (CKKS) Overhead
Линейный слой (1024→512) 0.1 ms 80 ms ~800x
Batch inference (64 примера) 5 ms 3000 ms ~600x
Простая CNN (MNIST) 1 ms 30–60 s ~30000x

Практически применимо сегодня для логистической регрессии, неглубоких сетей и privacy-preserving inference в MLaaS. Экономия на инфраструктуре достигает 40% за счёт отказа от выделенных HSM.

Типичные ошибки при внедрении HE
  • Выбор неподходящей схемы (например, PHE для глубоких сетей).
  • Неправильная аппроксимация активаций — полином высокой степени даёт аномалии.
  • Игнорирование шума: при превышении глубины вычислений расшифровка даёт мусор.
  • Отсутствие тестов на реальных данных: точность может упасть на 10% при неоптимальных параметрах.

HE-as-a-Service паттерн

Наиболее реалистичный use case: облачный MLaaS провайдер хочет предлагать inference, не видя данные клиентов.

  1. Провайдер обучает модель на публичных/синтетических данных.
  2. Клиент шифрует свои данные на своей стороне.
  3. Клиент отправляет шифртекст провайдеру.
  4. Провайдер вычисляет inference на шифртексте.
  5. Провайдер возвращает зашифрованный результат.
  6. Клиент расшифровывает результат.

Провайдер никогда не видит ни входные данные, ни результат. Для коротких цепей вычислений (глубина до 5) bootstrapping не требуется.

Библиотеки и фреймворки

Библиотека Язык Схемы Особенности
Microsoft SEAL C++/Python BFV, CKKS Производительность, doc
OpenFHE C++/Python BFV, CKKS, CGGI Кроссплатформенность
Concrete (Zama) Python FHE Компиляция из PyTorch
HElib C++ BGV Долгая история, HE-специфика

Процесс работы

  1. Аналитика: аудит ML-модели, определение схемы HE и требуемой точности.
  2. Проектирование: подбор параметров (poly_modulus_degree, масштаб), аппроксимация нелинейных функций.
  3. Реализация: интеграция HE-слоя в пайплайн (Python/C++), написание бенчмарков.
  4. Тестирование: проверка точности на зашифрованных данных, оптимизация latency.
  5. Деплой: развёртывание на вашей инфраструктуре, обучение команды.

Что входит в реализацию HE

  • Аудит модели и выбор оптимальной схемы HE.
  • Разработка HE-совместимого пайплайна и интеграция с вашей инфраструктурой.
  • Документация и обучение команды.
  • Техническая поддержка на этапе внедрения.

Сроки ориентировочно

  • Неглубокая модель (логистическая регрессия, 2–3 слоя): от 8 недель.
  • Сложная модель (CNN, RNN): от 12 до 16 недель.

Сроки варьируются в зависимости от архитектуры и требований к точности. Стоимость рассчитывается индивидуально.

Оцените возможность внедрения HE для вашего ML-сервиса — свяжитесь с нами для консультации. Закажите бесплатную консультацию инженера по вашему проекту.