Код: https://github.com/otito12/sticksandstones

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

TLDR: я подтверждаю, что гомоморфное шифрование пока неприемлемо для этого варианта использования, но это забавное упражнение, чтобы посмотреть, сможем ли мы обойти его особенности!

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

В обычных условиях (мы можем читать обычный текст) посредничество на сервере чата может выглядеть следующим образом:

  1. Пользователи будут подключаться к серверу чата через веб-сокет. (_implementation: сначала я написал этот сервер на express.js, а потом еще раз на flask. Позже вы поймете, почему)
  2. При получении сообщения из сокета сервер чата опубликует объект сообщения в виде открытого текста в теме Kafka очереди сообщений. (_implementation: Объединенное облако для размещения кластеров)
  3. Поточный процессор, содержащий сериализованную модель, использует топик Kafka очереди сообщений. (_implementation: Первоначально потоковый процессор был просто скриптом Python, но позже он был преобразован в сервер flask. Опять же, позже вы поймете, почему)
  4. Потоковый процессор устанавливает для сообщения флаг _flag и публикует его в теме очереди прогнозов Kafka.
  5. Сервер чата считывает _flag и определяет, подвергать ли сообщение цензуре.
  6. Кроме того, сообщения, ожидающие предсказания, помещаются в структуру KV на сервере чата, чтобы обеспечить порядок их отправки.

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

Дополнительное примечание по архитектуре: мы могли бы развернуть сериализованную модель открытого текста с сервером чата. Однако мы будем использовать отдельный потоковый процессор для базового случая, зная, что сервер-посредник не будет знать о сервере чата.

Что такое гомоморфное шифрование и где оно применяется?

Гомоморфное шифрование – это форма шифрования, которая позволяет выполнять вычисления с зашифрованными данными без предварительной их расшифровки. Результирующие вычисления остаются в зашифрованном виде, что при расшифровке приводит к результату, идентичному результату, полученному, если бы операции были выполнены с незашифрованными данными. (цитата)

Слишком упрощенные модели машинного обучения.По своей сути простые модели машинного обучения представляют собой ряд преобразований, применяемых к входным данным, которые приводят к выходным данным, структура входных и выходных данных которых строго определена. Из этого следует, что если гомоморфное шифрование позволяет нам выполнять преобразования зашифрованных данных и получать идентичные выходные данные, то можно преобразовать модель машинного обучения в гомоморфную форму.

В следующей главе мы обучим и развернем машину линейных опорных векторов, которая полагается на гомоморфное шифрование, чтобы делать прогнозы на зашифрованных данных!

Вот как будет выглядеть конечный результат:

Увидимся там!