Конфиденциальные вычисления, опыт oneFactor

Виктор Стрелков, директор по разработке oneFactor, выступил 14 апреля в панельной дискуссии «Конфиденциальные вычисления» в рамках конференции Data Fusion. Он рассказал про программно-аппаратную среду, где применяется технология Trusted Execution Environment на примере Intel SGX. Содержание выступления:
Как, мы использовали технологию Intel SGX для задач машинного обучения? Чтобы перейти к раскрытию тезиса, начнем с двух вещей:
- что такое SGX;
- зачем использовать SGX, когда у нас есть много различных платформ, которые можно использовать для машинного обучения без данной технологии.
Все, о чем я рассказываю про технологии SGX обернуто в конкретный сервис oneFactor. Есть коммерчески успешные кейсы его использования. Порог входа в сервис и технологии низкий — это SAAS. Это существующая реальность, которая приносит прибыль.
Начнем с того, что такое Intel SGX
Intel SGX — это технология, которая позволяет создавать в памяти сервера так называемые анклавы. Это области памяти, защищенные от несанкционированного доступа любого процесса, в том числе процессов с повышенной привилегией. Это одна из ключевых особенностей этой технологии, которую мы будем впоследствии использовать.
Как работает эта технология
Первое: создается приложение, которое содержит трастед (trusted) и антрастед (untrusted) части — защищенную и незащищенную. Анклав, к слову, это трастед — защищенная часть. Все, что происходит в незащищенной часть является обычным приложением.
Второе — запускается его антрастед часть, которая является интерфейсом трастед части. Вызовы из антрастед в трастед часть происходят по специальному протоколу E-call^. Вторым пунктом исполнения создается анклав. Третье — происходит вызов из трастед функций. Четвертое — все трастед функции происходят в защищенном ядре, которое работает с секретами, с чем угодно. Возвращается результат в антрастед часть и дальше происходит обычное исполнение.
Часть вторая. Зачем вообще использовать SGX для машинного обучения?
В компании oneFactor разработана своя платформа машинного обучения, мы обучаем скоринговые и другие модели. На этой платформе, кроме обучения, есть исполнение, которое предоставляет результат этих скоринговых моделей по REST API клиенту, который их потребляет. Естественно, непрерывно у нас происходит постоянный R&D — как можно улучшить качество скоринговой модели, потому что качество скоринга — это непрерывная перекладка в эффективность бизнеса потребителей скоринговых моделей банков. Выше качество — лучше бизнесу.
В рамках процесса постоянного улучшения мы запустили очередной цикл исследования с партнером, предоставляющим свои данные для обучения. Модели до этого были на одном классе данных, на классе данных телеком. Затем наши аналитики совместно с другими сделали R&D, которые добавили в данные телекома данные другой доменной области.
Это R&D проводилось в физически защищенной переговорной комнате, с запаянными ноутбуками, заклеенными окнами, с доступом по пропускам — с сильными мерами безопасности. В этой переговорке аналитиками был получен результат — добавление этих новых данных улучшает качество модели до 15%.
Соответственно, мимо такого грандиозного увеличения мы пройти не могли и дальше стали думать как использовать полученные результаты. Одно дело в эксперименте получили, круто, а дальше что? Скоры, сервис расчета, SLA в переговорной не сделаешь.
Собрали три параметра платформы машинного обучения, которая могла бы работать с такими данными.
Эти тезисы заключались в том, что необходимо обеспечить конфиденциальность данных этого поставщика, с которым мы сделали R&D, в трех направлениях:
- От одного поставщика к другому. То есть от нас, мы в данном случае поставщики телеком данных, и, условно, у нас есть поставщик других данных. Два поставщика друг у друга данные видеть, очевидно, не должны.
- Второе — защитить от аналитика, дата сайентиста, который обучает эту модель.
- Третье — от администратора платформы. В данном случае от нас, oneFactor, как от разработчика.
В итоге, проведя технологический R&D вслед за аналитическим, мы построили proof of concept, который успешно прошел аудит безопасности, в том числе у партнера поставщика данных. В итоге на базе этого POC с SGX и возникла новое поколение платформы — платформа конфиденциальных вычислений.
Это суть работающей платформы. Мы выделили конфиденциальное ядро обучения, приложение на С++, оно позволяет, используя SGX обучать модели в себе, и исполнять модель обучения.
Что это такое я уже сказал, это С++ приложение, развернутое на серверах Intel, поддерживающих SGX. При этом, поскольку это ядро соответствует всем предыдущим трем тезисам, может быть развернуто в любом месте, в любом контуре. Может быть в нашем контуре, может быть в контуре поставщика данных, контуре третьего лица, которое сидит и предоставляет инфраструктуру, может быть в облаке. Позволяет развернуть и гарантировать конфиденциальность загруженных данных, развернутых в любом контуре.
Как происходит взаимодействие с дата-поставщиками?
Поставщик данных шифрует на стороне свой набор данных любым способом, в данном случае RSA, ассиметрично, и производит аттестацию анклавов. При аттестации анклава поставщик делает сравнение следующих характеристик анклава.
Есть так называемые подписи «мистер сайнер» и «мистер анклав». «Мистер анклав» — это, так скажем, хэш от сборки этого анклава. «Мистер сайнер» — это тот, кто его собрал и развернул, в данном случае OneFactor. Аттестация позволяет убедиться, что это именно тот анклав и именно от того поставщика.
Убедившись в этом, дата-провайдер загружает туда открытый ключ шифрования, которым он предварительно зашифровал свои данные. При этом ключ проходит напрямую в анклав, в трастед часть, нигде не дублируется, не остается и не складывается. После этого в этот сервер поставщик загружает свои зашифрованные признаки, которые он будет в трастед части обрабатывать.
То же самое делает N поставщиков. Работать это будет в случае, когда каждый из поставщиков аттестует анклав и загрузит туда свои зашифрованные признаки.
С клиентской стороны, разработанное нами приложение, реализует API, которое обрабатывается нашим доработанным Jupyter-ядром, и предоставляет в итоге аналитику понятные интерфейсы Jupyter-ядра для обучения. Да, они немножко обрезаны, потому что конфиденциальность все-таки накладывает отпечаток, но тем не менее достаточны для решения задачи обучения эффективной модели. Обучение проходит в ядре, там же проходит публикация этой модели.
Что такое публикация?
Обучение — это одно дело, все хорошо. Модель обучения мы могли бы получить в той же переговорной, вынести какой-то LightGBM, но ее нужно, соответственно, запустить. Поэтому рядом с ядром обучения поднимается ровно такое же ядро исполнения, только с сильно меньшим размером доступной памяти. Происходит такой же процесс аттестации только для нового ядра.
Публикация модели физически загружается в трастед исполняющего ядра. И после этого, здесь API-шный интерфейс, они становятся доступными к запросу клиента. Все те преимущества нашей платформы, которые были: обучил, задеплоил, можешь пользоваться, они здесь, в этой части, тоже поддерживаются.
Вот как выглядит приложение анклава, это плюсовое (С++) приложениеантрастед часть которогореализует только API взаимодействия с трастед частью. И трастед, в которой реализованы две вещи: бустинг фреймворк и аналитические утилиты. То есть все те вещи, которые работают непосредственно с открытыми данными.
В данном случае сейчас бустинг фреймворк — это Light GBM. Только это пропатченный Light GBM нами, собственно пропатчен под все те вызовы, которые доступны внутри антрастед, они там некоторым образом урезаны. И набор аналитических инструментов, которые мы постоянно расширяем. Они позволяют проводить аналитику признаков перед тем, как обучать на них. Инструментарий статистики постоянно расширяется.
Что дальше?
В процессе нашего перехода из POC в продуктивную реализацию мы поменяли версию SGX. Достаточно серьезное, мажорное изменение, по этому поводу на Хабре можете почитать статью. В целом, это позволило использовать бОльшие анклавы, оптимизированное в антрастед часть взаимодействие с памятью позволило нам в 10 раз ускорить обучение.
В планах динамически расширяемые анклавы по памяти. Сейчас, к сожалению, это статически поднимаемые анклавы. Если вы задали им, условно, 256 Гб памяти, и подняли, и в процессе обучения у вас будет переполнение, то произойдет ошибка.
Также в планах сделать загрузку шифрованных эталонов — сейчас можно загружать зашифрованные фичи, почему бы не шифрованные эталоны? Тем более, что запрос на загрузку шифрованных эталонов присутствует, как и на загрузку шифрованных фичей.
Это основное, что я хотел рассказать про использование нами технологии SGX в платформе машинного обучения.