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

Коли клієнти вимагають, щоб навіть адміністратор хмари не бачив їхні дані, стандартні заходи захисту не працюють. Ми розробляємо рішення на основі гомоморфного шифрування, які дозволяють виконувати ML-інференс на зашифрованих даних, зберігаючи повну конфіденційність. Наша команда реалізує проєкт під ключ — від вибору схеми шифрування до впровадження та подальшої підтримки.
Часті запитання

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

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139