paint-brush
Инструментальные цепочки нового поколения FHE для мультивселенной разработчиков: как TFHE ведет нас тудак@pascalpaillier
1,217 чтения
1,217 чтения

Инструментальные цепочки нового поколения FHE для мультивселенной разработчиков: как TFHE ведет нас туда

к Pascal Paillier23m2024/05/17
Read on Terminal Reader
Read this story w/o Javascript

Слишком долго; Читать

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

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coins Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Инструментальные цепочки нового поколения FHE для мультивселенной разработчиков: как TFHE ведет нас туда
Pascal Paillier HackerNoon profile picture

Введение

FHE меняет правила игры, и мы все приглашены сыграть.


Если вы понятия не имеете, о чем я говорю, значит, в последнее время вы живете под камнем. Просмотрите некоторые обширные ресурсы FHE.org и вернитесь.


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


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


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


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


Моя компания Zama фокусируется на одной конкретной схеме FHE — TFHE . TFHE обеспечивает гомоморфную обработку данных с помощью очень специфических средств: сверхбыстрой начальной загрузки и вычислений, выраженных в виде сетей поиска в таблицах. Мы пришли к глубокому пониманию того, как эти особенности, которые раньше делали TFHE своего рода аутсайдером в пространстве FHE, могут быть преобразованы в гомоморфные библиотеки, компиляцию, виртуальные машины или аппаратное ускорение.


Другие известные претенденты на FHE, такие как CKKS , BGV или BFV, используют совершенно разные концепции в своем практическом оборудовании: начальная загрузка слишком медленна, чтобы ее можно было использовать, поэтому глубина обработки ограничена, однако данные можно векторизовать с помощью массовой пакетной обработки, вычисления выражать в виде полиномиальных схем и - в случае CKKS - результаты приблизительные. Таким образом, перевод BGV/BFV и CKKS в компиляторы и среды выполнения требует от разработчиков инструментов совершенно иного подхода.


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


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


Давай сыграем в игру.


Возьмем разработчика, который ничего не знает о тонкостях FHE, но хочет создать гомоморфное приложение. Здесь вы — создатель инструментов, вы сталкиваетесь с этим разработчиком, от которого можно ожидать некоторого знакомства с общими практиками разработки и основами информатики, но все остальное — высшая математика и тому подобное — запрещено. Как вы можете успешно заставить их создавать приложение FHE самостоятельно?


В этой статье рассматриваются различные стратегии победы в этой игре, делая ставки на TFHE.


В зависимости от характера приложения — обработка пользовательских данных, нейронные сети, смарт-контракты или программирование общего назначения — будут изучены пути достижения успеха с помощью TFHE. Это исследование проведет нас по легкому пути, по сложному пути и по нескольким другим, промежуточным, с разным уровнем технологической готовности к их практической реализации.

Что такое программы TFHE?

TFHE означает Тор FHE. Также называемый CGGI по именам первооткрывателей, TFHE занимает уникальное положение в мире FHE: это самый известный механизм, обеспечивающий программируемую начальную загрузку (PBS).


В двух словах, PBS — это поиск по гомоморфной таблице. Он возвращает шифрование T[x] , где T — табличная функция по вашему выбору, учитывая шифрование индекса x . Скорость его работы не зависит от записей T , а только от количества записей и находится в диапазоне миллисекунд. Кроме того, PBS сбрасывает шум шифрования, встроенный в выходной зашифрованный текст, поэтому вы можете составлять PBS последовательно бесконечно, зная, что ваше гомоморфное приложение всегда будет обрабатывать чистые зашифрованные тексты.

сети ТФХЭ

Вычислительная модель, которую отстаивает TFHE, является квинтэссенцией.


Элементарный процессор в программах TFHE выглядит в точности как нейрон и состоит из двух основных гомоморфных операций:


  1. Линейная комбинация входных данных, которая возвращает E(x) , где x = w_1 x_1 + … + w_n x_n modulo m , учитывая зашифрованные входные данные E(x_1), …, E(x_n) и набор весов открытого текста w_1, …, w_n .


  2. PBS, которая вычисляет E(T[x]) на основе E(x) , где T — некоторая таблица открытого текста размером m .

Нейрон TFHE


В «нейроне TFHE» m , x_i , w_i , а также записи T[0], …, T[m-1] являются целыми числами, и можно свободно выбирать «параметры» m , w_1, …, w_n и T Учитывая, что линейная комбинация имеет почти нулевую стоимость, узким местом эффективности является PBS, время работы которого зависит исключительно от модуля m : скорость уменьшается с увеличением m . Это побуждает использовать небольшие значения - нечетные или четные, но не менее 2 - для модулей в нейронах TFHE, хотя необходимо найти компромисс, чтобы избежать слишком резкого снижения их вычислительной выразительности.


Теперь, точно так же, как нейроны собираются в слои в нейронных сетях, чтобы извлечь выгоду из параллелизма и трюков HPC, сети TFHE накапливают слои нейронов TFHE. Каждый слой имеет весовую матрицу по модулю общего модуля m и вектор справочных таблиц размера m . Однако модуль может отличаться в предыдущем или следующем слое, как и форма слоя.


Сеть TFHE


И на этом TFHE заканчивается! Итак, нам просто нужно систематически выражать функции в виде сетей поиска. Теперь у нас есть гомоморфная вычислительная модель.


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

Создание исполняемых сетей TFHE

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


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


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


Параметризация сети TFHE



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

Программы ТФХЕ

Программа TFHE представляет собой набор параметризованных сетей TFHE, склеенных «простой логикой».


Простая логика состоит из


  • инструкции, работающие с переменными открытого текста (имеются в виду обычные незашифрованные переменные),

  • ветвление, безусловное или обусловленное предикатами открытого текста,

  • чтение и запись памяти по адресам открытого текста, арифметика указателей,

  • вызовы подпрограмм/функций.


По сути, простая логика содержит любую логику программирования, поддерживаемую языком, за исключением одного единственного случая: изменения зашифрованных переменных программы, что является прерогативой частей программы TFHE. Единственное, что разрешено делать простой логике с зашифрованными текстами (как и с открытыми ключами TFHE) — это перемещать их без изменений и передавать частям TFHE, как если бы они работали внутри своего собственного отдельного сопроцессора или контейнера.


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


Программа ТФХЕ


Для унификации представления программ TFHE можно использовать специальный язык — например, какой-нибудь DSL или, лучше, диалект MLIR — так, чтобы компиляцию можно было выполнять с помощью одного и того же внутреннего компилятора.


Точная природа среды выполнения (общая/динамическая библиотека, виртуальная машина или что-то еще) здесь является лишь модальностью. Любой вариант приведет к созданию работающего гомоморфного приложения на базе TFHE, которое можно будет развернуть и предоставить пользователям.


Теперь давайте вернемся на минутку к самой игре.


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


Наша цель достигнута, нам просто нужна программа TFHE, чтобы получить исполняемый файл. Но... как, черт возьми, мы вообще собираемся заставить разработчика самостоятельно создавать что-то столь специфическое, как программа TFHE?

Легкий путь: выпустите библиотеку FHE и позвольте разработчикам делать свое дело

Вот легкий путь к победе: вы инкапсулируете всю сложность в API-интерфейс FHE «черного ящика».

Простые программы

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


  • программная логика, состоящая из собственных инструкций языка и конструкций области видимости,

  • переменные и выбор типов данных, которые им присваивает программа, выбранных среди всех возможных типов данных,

  • вызывает набор внешних функций, выбранных среди всех доступных внешних функций, которые программа использует для работы со своими переменными.


Типы данных имеют свой собственный подъязык, представляющий собой смесь собственных типов и конструкций типизации, позволяющих расширить эти собственные типы и объединить их в структурированные типы более высокого уровня. Система типов предназначена для обеспечения достаточной выразительности, чтобы охватить практически любую структуру данных, которая может потребоваться программе. Внешние функции — это те, которые предоставляются библиотеками, стандартными или другими, но они также могут быть вызваны неявно с помощью встроенных в язык инструкций (например, операторов для модульной арифметики или деления).


Итак, простые программы на самом деле «просты»:


Простая программа по сути


Услышь меня здесь хорошо. Я не говорю, что все концепции программирования высокого уровня, такие как полиморфизм, объекты с их членами и атрибутами, классы и иерархическое наследование, шаблоны, макросы, трейты, потоки, рекурсия, синтаксический сахар, аннотации и все другие мыслимые нулевые затраты. абстракции, предоставляемые языком, должны быть простыми в обращении с разработчиком, хотя они были изобретены для упрощения его работы.


Я просто говорю, что для нашей цели это просто безобидные украшения, которые исчезают во время компиляции, потому что из исходного кода выводится урезанная, но эквивалентная версия программы в нормальной форме. Эта версия программы, выраженная в каком-либо промежуточном представлении (IR), состоит из прямолинейных базовых блоков - последовательностей инструкций, которые являются элементарными в этом IR - соединенных некоторым графом потока управления.


Теперь именно эта программа в нормальной форме является «простой». Я имею в виду, достаточно простой, чтобы его можно было дополнить гомоморфными возможностями.

Добавьте FHE на картинку

Вы выиграете игру, выпустив собственную библиотеку FHE и предоставив разработчику возможность решить, как ее лучше всего использовать.


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


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


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


Они придумают гомоморфную программу, которая сейчас выглядит примерно так.


Гомоморфная программа по сути


Теперь существуют простые и зашифрованные переменные, и программа должна поддерживать строгое разделение между этими двумя типами объектов. Это потому, что существует золотое правило FHE, которое гласит, что когда вы применяете функцию к смеси простых и зашифрованных аргументов, результат обязательно зашифровывается, например, fhe_add(E(x), y) возвращает E(x+y) и скоро. Таким образом, простые переменные могут входить в некоторые функции FHE, но никогда не могут выйти из них. Гомоморфное шифрование «загрязняет» все, к чему прикасается, посредством вычислений.


Итак, смотрите... как тогда условно перейти к зашифрованной переменной?


Ну, ты не можешь. Но это совсем не большая проблема.

Одна загвоздка: условное ветвление

В приложении FHE условное ветвление может действовать только на простые логические значения, но не на зашифрованные. Как узнать, куда перейти на основе зашифрованного бита? У вас нет закрытого ключа пользователя для расшифровки этого бита.


К счастью, FHE также дает вам простые советы, как это исправить.

Как регуляризовать if

Предположим, разработчик изначально хотел сделать что-то вроде


 if (x == 0) then y = 3 else z = 7


но понимает, что к этому моменту переменная x фактически будет зашифрована. Как адаптировать этот фрагмент кода?


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


 bit = (x == 0) // bit = 1 if x == 0 otherwise 0 y = 3 * bit + y * (1 - bit) // y = 3 if bit == 1 otherwise no change z = z * bit + 7 * (1 - bit) // z = 7 if bit == 0 otherwise no change


На втором проходе разработчик должен распространить тот факт, что x имеет зашифрованный тип, в последующих строках:


 bit = fhe_is_equal(x, 0) // bit, y_new and z_new are encrypted y_new = fhe_add(fhe_mul(3, bit), fhe_mul(y, fhe_sub(1, bit))) z_new = fhe_add(fhe_mul(z, bit), fhe_mul(7, fhe_sub(1, bit)))


Можно проверить, что это функционально эквивалентно первоначальному замыслу разработчика, и все.


Если язык программирования позволяет перегружать собственные операторы, API FHE может даже сделать явные функции FHE второго фрагмента излишними, так что первое переписывание — единственное, что нужно сделать разработчику.


Чтобы дать разработчику дополнительную дозу синтаксического сахара, вы можете даже предоставить перегруженный тернарный оператор a? b : c , где любой аргумент может быть зашифрован или нет. Часть кода становится еще проще:


 bit = (x == 0) // bit = 1 if x == 0 otherwise 0 y_new = bit? 3: y // y = 3 if bit == 1 otherwise no change z_new = bit? z: 7 // z = 7 if bit == 0 otherwise no change


Это легко обобщается на произвольные операторы if/switch : каждый раз, когда необходимо проверить зашифрованное условие, разработчику просто нужно использовать мультиплексирование, чтобы объединить несколько тел оператора в один блок эквивалентного линейного кода.

Как упорядочить цикл for/ while

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


 for (i = 0; i < x; i++) do <body> // i is plain, x is encrypted


где x должен иметь зашифрованный тип. Сначала разложим это на простой оператор for и нестандартный оператор if :


 for (i = 0; i < known_max_value_of_x; i++) do if (i < x) then <body> // i is plain, x is encrypted


а затем регуляризируйте оператор if , как и раньше:


 for (i = 0; i < known_max_value_of_x; i++) do bit = (i < x) // i is plain, x and bit are encrypted <new_body> // new body regularized using bit? _ : _


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


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

Пример: конфиденциальные смарт-контракты на EVM

fhEVM от Zama — это полноценная платформа с открытым исходным кодом для разработки и развертывания конфиденциальных смарт-контрактов на виртуальной машине Ethereum (EVM). Контракты fhEVM — это простые контракты Solidity, созданные с использованием традиционных цепочек инструментов Solidity. Знакомый опыт разработки дополнен FHE библиотекой TFHE.sol , которая предоставляет зашифрованные типы данных и замену FHE для стандартных функций.


Поддерживаемые типы зашифрованных данных в настоящее время


 ebool, euint4, euint8, euint16, euint32, euint64, eaddress


и вскоре будут включены зашифрованные целые числа со знаком. Зашифрованные переменные создаются из необработанных входных зашифрованных текстов с использованием специальных конструкторов:


 function mint(bytes calldata encryptedAmount) public onlyContractOwner { euint64 amount = TFHE.asEuint64(encryptedAmount); balances[contractOwner] = balances[contractOwner] + amount; totalSupply = totalSupply + amount; }


Собственные операторы Solidity +, -, *, &, |, ^, etc перегружены для удобства разработчика, а предоставленные операторы сравнения eq, ne, gt, lt, ge, le возвращают зашифрованное логическое значение ebool . Гомоморфный тернарный оператор _? _ : _ называется select :


 function bid(bytes calldata encryptedBid) internal { euint32 bid = TFHE.asEuint32(encryptedBid); ebool isAbove = TFHE.le(bid, highestBid); // Replace highest bid highestBid = TFHE.select(isAbove, bid, highestBid); }


Что касается среды выполнения, fhEVM предоставляет EVM с поддержкой TFHE, где гомоморфные функции представлены как предварительно скомпилированные контракты, что является результатом интеграции библиотеки Rust TFHE-rs с открытым исходным кодом.


Дополнительную информацию об этом см. в официальном документе fhEVM .

Что нужно для создания API FHE с помощью TFHE?

Помните, как выглядят исполняемые программы TFHE — параметризованные сети TFHE, собранные с помощью простой логики? Ну, вам просто нужен способ сопоставить с этим логику программного обеспечения разработчика.


Первое требование — убедиться, что логика программы «проста». Это именно то, что мы научили разработчика делать самостоятельно, упорядочивая операторы потока управления. Так что сейчас у нас с этим все в порядке.


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

1. Вам необходимо создать сети TFHE для ваших функций API.

Предварительное создание параметризованной сети TFHE, реализующей заданную функцию, не обязательно является тривиальной задачей.


Простое создание гомоморфного сложения двух зашифрованных 64-битных целых чисел без знака приводит к множеству технических возможностей: как представить 64-битные входные данные как векторы модульных целых чисел? С каким именно модулем (или несколькими модулями)? И как тогда реализовать 64-битную схему сложения со слоями поиска в таблице?


Там много вариантов. Но в конечном итоге вы примете решение благодаря хорошей инженерии и проведению множества экспериментов.

2. Вам необходимо нормализовать зашифрованные типы данных.

Предполагая, что вы реализовали сети TFHE для всех функций API, вы хотите быть уверены, что их можно будет составлять по своему усмотрению, как блоки Lego.


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


Опять же, вариантов много, и вам придется выбирать между ними.

3. Вам необходимо обеспечить фактическую компоновку

Если предположить, что все сети TFHE теперь полностью совместимы в своих форматах ввода/вывода, компонуемость по-прежнему не может быть обеспечена.


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


Это похоже на сопротивление в электронных схемах: вы не сможете соединить одну цепь с другой, если импедансы не совпадают. Сначала вам нужно выровнять их уровни импеданса, и здесь то же самое. Самый простой способ сделать это — использовать фиксированные наборы параметров (даже, возможно, только один уникальный набор), которые настроены так, чтобы обеспечить согласованность всех функций API. В дальнейшем будет зафиксирован формат публичных ключей пользователей, а также параметры, используемые при шифровании и дешифровании пользователей, независимо от кодов разработчика.


Если вы найдете способ удовлетворить эти три требования при создании сетей TFHE и их параметризации и при этом добиться хорошей общей производительности, то поздравляем! Ты справился с этим.

Так почему же библиотеки FHE не могут быть достаточно хороши?

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


Но они могут быть недостаточно хороши для программ, специализирующихся на


  • большие, ресурсоемкие функции, такие как машинное обучение,

  • пользовательские, нестандартные функции.


Вот тогда и приходит на помощь гомоморфная компиляция.

Трудный путь: выпустить гомоморфный компилятор

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


Компилятор позаботится о том, что разработчик не знает, как сделать самостоятельно. Он будет получать информацию от разработчика — чем бы это ни было, ваш вызов — и ему придется дополнить недостающие части, чтобы получить программу TFHE.


Давайте рассмотрим типичные примеры нестандартных приложений.

Конфиденциальный вывод с помощью глубоких нейронных сетей

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

Что разработчик предоставляет в качестве входных данных

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


Здесь действительно важна специфика того, как выполняется квантование, поскольку ваш компилятор потребует, чтобы модель по существу представляла собой сеть TFHE или чтобы ее можно было легко подстроить под нее путем простого переписывания. Известно , что доступные методы с открытым исходным кодом поддерживают эту форму квантования либо путем пост-квантования предварительно обученной модели, либо, что предпочтительнее, путем выполнения обучения с учетом квантования (QAT), которое достигает самых современных уровней точности по сравнению с другими. к неквантованным моделям, обученным на одном и том же наборе данных.


По сути, модули, используемые на сетевых уровнях TFHE, представляют собой переменные степени 2, так что точность сигналов активации измеряется в битах. Веса представляют собой целые числа со знаком, а функции активации сами квантуются и создаются при поиске в таблице. Когда активации табулируют смещенную функцию жесткого знака с изученным смещением, это определение охватывает такие типы моделей, как BNN , TNN и их многобитовые обобщения. Но в принципе можно свободно использовать произвольные справочные таблицы в функциях активации, поэтому их можно даже изучить во время обучения, чтобы достичь большей точности.


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

Что нужно для параметризации сети TFHE?

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


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


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

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


Любое изменение в реализации среды выполнения должно быть отражено в этих двух модулях, поскольку они оба сильно зависят от алгоритма и оборудования.


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


Создание оптимальной параметризации сети TFHE

Технологическая готовность

Хорошая наука и инженерия привели к решению проблем оптимизации такого типа за считанные секунды, а компиляторы TFHE, такие как Concrete, уже имеют эффективный оптимизатор параметров TFHE в качестве внутреннего модуля.


Различные улучшения могут сделать оптимизаторы TFHE еще более быстрыми в будущем, но даже без них можно считать параметризацию сетей TFHE практически выполненным делом.

Высокоскоростная обработка пользовательских данных

Что разработчик предоставляет в качестве входных данных

Эти приложения совершенно другого типа. Разработчик хранит математическую спецификацию пользовательской функции для реализации вместе с ограничением точности. Возьмем, к примеру

где x — действительное число от 0 до 1, и использование приближения G к F допустимо при условии, что

Разработчик знает, что реализация G на обратной стороне конверта путем составления стандартных функций API, вероятно, будет слишком неоптимальной.


Ваш компилятор будет создавать на лету новую сеть TFHE, специально разработанную для удовлетворения спецификации G Затем он параметризует его и приступит к внутренней компиляции для создания гомоморфного приложения.

Что нужно для синтеза сети TFHE?

Ну, вот тут-то дорога вдруг становится гораздо более ухабистой.

В настоящее время недостаточно научных знаний о том, как сети TFHE с точным определением, которое я дал ранее, могут быть синтезированы автоматически. Даже исследования по синтезу схем смежных типов, которые также основаны на целочисленной модульной арифметике, в лучшем случае скудны. Не говоря уже о каких-либо существовавших ранее синтезаторах, способных выполнить эту задачу от А до Я.

Использование преимущества логического синтеза

Один из способов решения этой проблемы — использовать часть вычислительной мощности сетей TFHE, сводя их к логическим схемам. Например, нейрон TFHE можно заставить действовать как троичный логический вентиль.


к

  • установив количество входов равным 3 и задав x_1, x_2, x_3 значениями 0/1,
  • установив его модуль m = 4 и его веса (w_1, w_2, w_3) = (2, -1, 1) ,
  • установив для таблицы поиска значение [0, 1, 1, 0] .


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


  • использование инструмента логического синтеза для генерации логической схемы на основе спецификации разработчика (для этого доступно множество инструментов с открытым исходным кодом),
  • разрезание (так называемое трехстороннее LUT-разделение) схемы на троичные элементы, принадлежащие словарю,
  • заменяя эти троичные ворота эквивалентными нейронами,
  • преобразование схемы в многоуровневую сеть минимальной глубины.


Это лишь одна из многих иллюстративных стратегий, поскольку существует множество методов, основанных на логических схемах. Вы также можете просто рассмотреть обычные бинарные вентили и реализовать их с ограниченными нейронами TFHE. Cingulata от CEA и, позднее, транспилятор FHE от Google стали пионерами этого пути, создав TFHE.

Технологическая готовность

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


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


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

Поиск комплексного компилятора TFHE

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


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

  2. Он будет принимать предварительно обученные нейронные сети или другие модели машинного обучения и интерпретировать их как сети TFHE.

  3. Он будет принимать макеты функций, только что созданные на основе математической спецификации, и будет выполнять синтез «на лету» для создания пользовательских сетей TFHE.

  4. Это превратило бы все непараметризованные сети TFHE, оставленные в модуле компиляции, в исполняемые экземпляры с использованием модуля оптимизатора, когда это необходимо.

  5. Он будет выполнять внутренний этап компиляции для различных целевых сред выполнения TFHE и/или аппаратных архитектур.

  6. Для синтеза и параметризации более быстрых сетей TFHE будут использоваться преимущества конкретных аппаратных ускорителей (через их модель стоимости).


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


Это предоставит разработчикам приложений FHE максимальный опыт разработки.

Краткое содержание

В контексте программирования FHE общего назначения библиотека TFHE может обеспечить модульность и полностью автономную разработку с использованием уже существующих цепочек инструментов.


TFHE является пионером в использовании специальных методов компиляции, которые могут удовлетворить потребности разработчиков и после этого, в первую очередь для вывода зашифрованных данных машинного обучения, а в ближайшие годы — для высокоскоростного анализа зашифрованных данных и других пользовательских приложений FHE.


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


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


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


Благодарность Midjourney v6 с небольшим руководством автора