В этой небольшой заметке я хочу затронуть тему совместных конфиденциальных вычислений и попробовать кратко изложить суть этих подходов и развеять несколько неоднозначностей, сложившихся в трактовке этого термина в современном информационном поле. Надеюсь, получится ?
Начну немного издалека, я в целом интересуюсь темой распределенной обработки данных с сохранением конфиденциальности, в частности активно смотрю на развитие такого направления, как Federated Learning. Часто попадаются статьи и материалы на эту тему, в которых наблюдаю некоторую терминологическую путаницу, тк термины Federated Learning и Confidential Computing часто используют как синонимы, но это не совсем так. Может быть я не совсем прав, но набор методов, для "обучения" (learning) и для "вычислений" вообще-то отличаются и не являются подмножеством друг друга. Поэтому в первую очередь хочу высказаться про мое понимание их фундаментальной разницы:
Federated Learning - набор методов, в результате выполнения которых мы получаем обученную математическую модель (которая используется для логического вывода на новых наборах данных) и они тесно связаны и неотделимы от методов машинного обучения. Этими методами решаются такие прикладные задачи, как обучение скоринговой модели по данным разных банков, без обмена данными о заемщиках и тп.
Confidential Computing - набор методов, целью которых является совместная обработка данных, то есть непосредственно использование данных в вычислении (найти среднее, сумму и тд) каких-то математических выражений с целью получения точного результата математических вычислений. Например, этими методами решаются такие прикладные задачи, как получение отчета о продажах по всему рынку в целом по данным разных ритейловых сетей, каждая из которых не хочет раскрывать объем своих продаж и тп.
Сори за возможную корявость формулировок, но хотелось акцентировать внимание на этих фундаментальных различия. Надеюсь вы почувствовали разницу. Но на самом деле если детальнее покопаться в тематике, то появляются и еще более продвинутые методы и термина типа "differential privacy" и тп, но создание полной антологии этой области, наверное, тема отдельной статьи, а в рамках данного материала я бы хотел остановиться именно на упомянутых выше двух классов методов.
Ключевой вывод тут - не надо путать Federated Learning и Confidential Computing - это разные методы для разных классов задач, хотя и решающих одну проблематику.
Так вот этих методов, которые попадают в область Confidential Computing - довольно много. В большинстве своем они лежат в области математики и криптографии. Но в последние пару лет эту тема очень сильно популяризирует то, что разработчики аппаратного обеспечения (Intel, IBM, NVidia) реализовали на аппаратном уровне защиту данных. То есть загрузив данные на один сервер, вы получаете гарантию того, что без вашего разрешения никто не получит доступ к вашим данным, даже получив физический доступ к серверу, что ранее нельзя было гарантировать никакими методами, тк любая программная защита в целом всегда нивелировалась угрозой компрометации физического доступа к системе хранения. При этом, для того, что бы совместно использовать данные, на таком сервере (куда загружены данные разных владельцев) все равно нужно применять либо FL либо CC либо какие-то другие методы совместной обработки данных. Но использование их в рамках одного сервера делает процесс вычислений намного более простым и быстрым.
Кстати, этому уделяется мало внимания, но должен отметить, что тут есть очень тонкий момент нахождения правильного компромисса: все эти методы (и FL и CC) применимы как для распределенной структуры (данные лежат на разных серверах, каждый из которых принадлежит отдельному владельцу), так для централизованной (данные лежат на одном сервере, который поддерживает функции аппаратной защиты). Но только в случае:
распределенных вычислений - имеем всю проблематику распределенных вычислений: ненадежная среда передачи, компрометация источника данных, медленная скорость передачи, асинхронную работу узлов и тд
централизованных вычислений - необходимость копирования и централизации большого объема данных в единой точке
PR со стороны вендоров железа привел к тому, что термин Confidential Computing стал синонимом методов аппаратной защиты данных.
Вот, например, сайт TAdviser дает такое определение: "Конфиденциальные вычисления (Confidential Computing) предназначены для защиты используемых данных с помощью аппаратной доверенной среды выполнения (Trusted Execution Environments, TEE). Это быстрорастущий сектор безопасности данных, к которому в последнее время приковано повышенное внимание."
Но это не совсем так. Аппаратная защита это пререквизит к использованию методов СС, но сама по себе она не является методом обработки данных, а только гарантом их защиты. В любом случае, в распределенной среде или в централизованной, над данными должны быть применена алгоритмы для их обработки, которые относятся либо к классу CC либо к FL.
Ключевой вывод - метод аппаратной защиты, которые рекламируют вендоры, это enabler для применения методов совместных защищенных вычислений, а не сам метод.
Теперь давайте теперь обратимся к самой математической сути методов совместных конфиденциальных вычислений. Идем в любимую википедию и находим так такое правильное и четкое определение:
"В криптографии протокол конфиденциального вычисления (также безопасное, защищенное или тайное многостороннее вычисление, англ. secure multi-party computation) — криптографический протокол, позволяющий нескольким участникам произвести вычисление, зависящее от тайных входных данных каждого из них, таким образом, чтобы ни один участник не смог получить никакой информации о чужих тайных входных данных."
Вот это определение очень правильно. А вот дальше на страничке идет довольно сложное математическое объяснение, а если обратиться к научным статьям, в которых еще и криптография всего процесса применяется, то совсем становиться грустно.
Но вот теперь, внимание, феерический пример, который прям на пальцах раскрывает суть этих методов. На самом деле я его подсмотрел в докладе Петра Емельянова, из компании ubic.tech, который был сделан в рамках нашей секции "Federated Learning" на конференции OpenTal.AI 2022.
Задача:
есть 3 товарища, каждый из которых владеет некоторой суммой денег. Мы хотим подсчитать общую сумму денег у 3-х товарищей, но при условии что каждый из товарищей не узнает, какой суммой владеют другие участники.
Решение:
Шаг 1: каждый товарищ раскладывает свою сумму на 3 (общее количество участников вычисления) чисел произвольным образом, с сохранение условия что сумма этих числе должна равняться количеству денег у товарища, в остальном числа могут быть произвольными.
Шаг 2: каждый участник оставляет у себя одно число, и обменивается другими числами с каждым другим участником.
Шаг 3: каждый участник проводит суммирование полученных от других участников чисел со своим числом и получает сумму
Шаг 4: каждый участник публикует получившуюся сумму всем остальным участникам
Шаг 5: каждый участник по полученным суммам вычислят среднее и получает общее среднее всех денег у участников вычисления
Итог: каждый участник узнал среднюю сумму денег в группе, но не раскрыл ни одному другому участнику сумму, которой он владеет.
Весь процесс наглядно представлен на рисунке:
Вот, собственно, и все. На мой взгляд эта схема максимально просто и наглядно раскрывает суть методов "совместных конфиденциальных вычислений".
Надеюсь, было полезно :)