РЕДАКТИРОВАТЬ: этот пост теперь доступен в блоге OpenMined. Из-за проблем с написанием кода и математикой я решил выпустить оставшуюся часть серии на OpenMined для более удобного чтения. Ссылки доступны здесь:

Объяснение CKKS: Часть 1, Стандартное кодирование и декодирование

Объяснение CKKS: Часть 2, Полное кодирование и декодирование

Объяснение CKKS: Часть 3, Шифрование и дешифрование

Введение в гомоморфное шифрование:

Часть 1: Обзор и варианты использования

Часть 2: ОН пейзаж и CKKS

Часть 3: Кодирование и декодирование в CKKS

Введение

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

На этом рисунке из прошлой статьи показан рабочий процесс CKKS. Как объяснялось ранее, чтобы выполнить вычисление над зашифрованным вектором, мы должны сначала закодировать его в полином, а затем зашифровать его в пару полиномов.

Вы можете спросить, зачем нам использовать полиномы вместо векторов? Это потому, что многочлены имеют «красивую» структуру, которая позволяет выполнять некоторые вычисления очень эффективно, сохраняя при этом высокий уровень безопасности.

Поэтому CKKS сначала начинает с кодирования вектора в полином открытого текста. Можно рассматривать это как помещение сообщения в стеклянную бутылку, поскольку сообщение упаковано в контейнер, который «упрощает» обработку, в то время как сообщение все еще хорошо видно, и любой может восстановить его.

Примечание. из-за ограничений Medium, затрудняющих написание LaTeX и кода, в моем репозитории Github доступен блокнот, содержащий то же содержание, что и эта статья, со всеми статьями с кодом по адресу: https: // github.com/dhuynh95/homomorphic_encryption_intro

Представляет интерес блокнот https://github.com/dhuynh95/homomorphic_encryption_intro/blob/master/01_encoding_decoding_ckks.ipynb, и вы можете запустить его с помощью Google Colab на странице https://colab.research.google.com/github. /dhuynh95/homomorphic_encryption_intro/blob/master/01_encoding_decoding_ckks.ipynb

Следующие скриншоты документов LaTeX взяты из моей магистерской диссертации «Гомоморфный случайный лес».

I. Предварительные мероприятия

II. Кодировка Vanilla

Теперь посмотрим, как реализовать это на практике:

III. Кодировка CKKS

Теперь мы увидим на практике, как кодировать кодировщик и декодер CKKS, адаптируя стандартные кодировщик и декодер:

Заключение

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

Это первый шаг в нашем гомоморфном путешествии, и позже мы увидим, как мы можем затем зашифровать и расшифровать многочлены с помощью гомоморфизмов.

Так что я надеюсь, что вам понравилось читать эту статью, было бы здорово получить ваши отзывы, и я постараюсь публиковать больше статей в будущем.

Если у вас есть какие-либо вопросы, не стесняйтесь обращаться ко мне в Linkedin, вы также можете найти меня в Twitter!