Гомоморфне шифрування для 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-сервісу — зв'яжіться з нами для консультації. Замовте безкоштовну консультацію інженера за вашим проєктом.