Защита моделей нейронных сетей при помощи аппаратных ключей SenseLock

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

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

    Защита нейронной сети может быть физическая и юридическая. Юридическая защита обычно заключается в использовании «водяных знаков», и поможет доказать, что нейронная сеть используется не законно. Физическая защита сводится к блокировке защищенной модели. В данной статье мы рассмотрим физическую защиту на основе ключей SenseLock и фреймворка Intel OpenVINO.

    Мы в своих решениях используем оптимизацию моделей и инференс (исполнение моделей) в фреймворке Intel OpenVINO. Это позволяет оптимизировать скорость исполнения нейронных сетей на всей линейке устройств Intel начиная от CPU, встроенной графики iGPU и заканчивая ускорителями VPU на базе Intel Movidius (MyriadX).

    Фреймворк предлагает нам следующую концепцию реализации защиты:

    Рисунок 1. Схема из документации по Intel OpenVINO, https://docs.openvinotoolkit.org/latest/openvino_docs_IE_DG_protecting_model_guide.html
    Рисунок 1. Схема из документации по Intel OpenVINO, https://docs.openvinotoolkit.org/latest/openvino_docs_IE_DG_protecting_model_guide.html

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

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

    В качестве ключа мы выбрали решение одного из наших партнеров - SenseLock EL5-STD. Электронные ключи SenseLock серии EL5 построены на высокозащищенной линейке смарт-карт Infenion с процессором ARM SC300.

    Основные параметры:

    • 32-битный высокозащищенный чип Infenion, сертифицированный по EAL5+;

    • 512 килобайтами памяти для кода и данных;

    • встроенная система лицензирования и удаленного обновления;

    • система автоматической защиты исполняемых файлов;

    • возможность написания и интеграции любых криптографических алгоритмов;

    • оперативная память 12 кб.

    На момент постановки задачи основной исполняемый код траекторного анализа объектов по результатам детекции был реализован на Python. Первая попытка реализации заключалась в шифровании кода Python и модели, предварительно сконвертированной через Intel OpenVINO Optimizer. Попытка провалилась из-за необходимости шифрования не только самого кода, а в том числе  и интерпретатора, что даже удалось, но запуск отдельного инстанса интерпретатора позволял получить доступ к данным и модели уже в расшифрованном виде, в процессе ее исполнения. Были также предприняты попытки использования инструментов pyinstaller, nuitka, однако, Intel OpenVINO toolkit предоставляется в виде множества динамических библиотек, которые можно подменить и результатом получить исходную модель нейронной сети.

    Вторым и основным направлением реализации защиты моделей стало партирование кода на C++ с компиляцией всей бизнес-логики, включая части OpenSource Intel OpenVINO toolkit, необходимые для исполнения, в виде единого бинарника, шифруемого аппаратным ключом.

    Часть плагинов и библиотек в финальном релизе Intel OpenVINO подгружаются динамически и могут быть подменены злоумышленником для извлечения модели в процессе ее исполнения. Здесь нам очень сильно помог один из пулл-реквестов в основном репозитории, а именно https://github.com/openvinotoolkit/openvino/pull/3219. Его мы взяли в качестве основы для подключения всех динамических плагинов и модулей статически, чтобы скомпилировать продукт как единый бинарник со встроенной бизнес-логикой и шифрованием данных внутри, без возможности динамического изменения библиотек в процессе исполнения.  Итоговое решение представляет собой монолит inference engine OpenVINO для сборки продуктов в моделях stand-alone / portable.

    Используя ключи  SenseLock можно обезопасить себя одним из двух способов:

    1. Использовать API, которое предоставляется производителем, и перенести ключевую логику работы на ключ.

    2. Воспользоваться программой Virbox Protector. Она анализирует выполняемый файл и предоставляет выбор доступных функций, которые можно защитить разными методами (Obfuscation, Virtualization, Snippet, Encryption). Естественно, использование множества защищённых функций может привести к снижению производительности программы, но при грамотном подходе это будут незначительные потери. Также в  Virbox Protector присутствует функция анти-дебаггера, предотвращающая отладку зашифрованной программы, а также дополнительная программа DS Protector, нацеленная на защиту файлов с данными (в нашем случае, модель нейронной сети) с используемой зашифрованной программой.

    В нашем случае мы использовали Virbox Protector с DS Protector. Программы позволяют не тратить силы на разработку и внедрение собственных алгоритмов шифрования и защиты ПО. Так выглядит защита программ c помощью Virbox Protector:

    Рисунок 2. Virbox Protector
    Рисунок 2. Virbox Protector

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

    Рисунок 3. Virbox Protector
    Рисунок 3. Virbox Protector

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

    1. Отсутствие доступа злоумышленника к модели

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

    3. Готовую систему лицензирования с проверкой наличия ключа и возможность прошивки сроков его использования локально или удаленно

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

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

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

    Средняя зарплата в IT

    120 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 9 250 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое