Las redes neuronales nos ayudan a resolver diversos problemas en el campo de la inteligencia artificial y la visión por computadora. Por ejemplo, detección, clasificación, segmentación, reconocimiento de objetos y muchos otros. En muchos casos, se utilizan modelos previamente entrenados, que se entrenan aún más de acuerdo con los propios datos del desarrollador para obtener una solución industrial lista para usar. En este caso, tanto el conjunto de datos en sí (un conjunto de datos marcados para entrenamiento adicional) como el modelo resultante son valiosos. Si el modelo es operado por el Cliente, distribuido bajo un esquema de licencia y tiene suficiente precisión para el mercado, entonces es valioso en sí mismo, ya que puede ser copiado y lanzado dentro del marco de soluciones de terceros.
Una de las tareas que surgen en la etapa de despliegue de soluciones listas para usar basadas en redes neuronales es la protección de modelos desarrollados y pre-entrenados del uso no autorizado con la integración del sistema de licencias y limitación de tiempo en la versión de plazo fijo. Licencias.
La protección de la red neuronal puede ser física y legal. La protección legal generalmente consiste en el uso de “marcas de agua” y ayudará a demostrar que la red neuronal se está utilizando ilegalmente. La protección física se reduce a bloquear el modelo protegido. En este artículo, consideraremos la protección física basada en claves SenseLock y el marco Intel OpenVINO.
En nuestras soluciones, utilizamos la optimización de modelos y la inferencia (ejecución de modelos) en el marco Intel OpenVINO. Esto le permite optimizar la velocidad de ejecución de las redes neuronales en toda la línea de dispositivos Intel, comenzando por la CPU, gráficos iGPU integrados y terminando con aceleradores VPU basados en Intel Movidius (MyriadX).
El marco nos ofrece el siguiente concepto de implementación de protección:
Figura 1. Diagrama de la documentación de Intel OpenVINO https://docs.openvinotoolkit.org/latest/openvino_docs_IE_DG_protecting_model_guide.html
El modelo se cifra durante la optimización, pero se descifra durante la ejecución y, dentro del marco de código abierto, un usuario sin escrúpulos puede convertirlo fácilmente en el original, disponible para copiar y replicar.
Figura 2. Llave de hardware SenseLock EL5-STD
Nos propusimos crear un sistema de inferencia de red neuronal dentro de un solo archivo ejecutable utilizando una clave de hardware, donde se cifran algunas funciones que rara vez se utilizan.
Como clave, elegimos la solución de uno de nuestros socios: SenseLock EL5-STD. Las llaves electrónicas de la serie SenseLock EL5 están integradas en la línea de tarjetas inteligentes Infenion de alta seguridad con el procesador ARM SC300.
Parámetros principales:
Chip Infenion de alta seguridad de 32 bits, certificado EAL5 + 512 kilobytes de memoria para código y datos, sistema de actualización remota y licencias incorporadas, protección automática de archivos ejecutables, capacidad para escribir e integrar cualquier algoritmo criptográfico, 12 kb de RAM
En el momento del planteamiento del problema, el código ejecutable principal para el análisis de la trayectoria de los objetos, basado en los resultados de la detección, se creó en Python. El primer intento de implementación fue cifrar el código Python y el modelo, preconvertidos mediante Intel OpenVINO Optimizer. El intento falló debido a la necesidad de cifrar no solo el código en sí, sino también el intérprete, que incluso tuvo éxito, pero la ejecución de una instancia separada del intérprete permitió acceder a los datos del modelo ya descifrados durante su ejecución. . También se ha intentado utilizar pyinstaller, herramientas nuitka, sin embargo, el kit de herramientas Intel OpenVINO se proporciona en forma de muchas bibliotecas dinámicas que se pueden reemplazar y obtener el modelo de red neuronal original.
La segunda y principal dirección de implementación de la protección del modelo fue la migración del código a C ++ con la compilación de toda la lógica empresarial, incluidas las partes del kit de herramientas de código abierto Intel OpenVINO necesarias para la ejecución, en forma de un único binario cifrado con un llave de hardware.
Algunos complementos y bibliotecas en la versión final de Intel OpenVINO se cargan dinámicamente y pueden ser reemplazados por un atacante para recuperar el modelo durante su ejecución. Aquí, una de las solicitudes de extracción en el repositorio principal nos ayudó mucho, a saber, https://github.com/openvinotoolkit/openvino/pull/3219. Lo tomamos como base para conectar todos los complementos y módulos dinámicos de forma estática, con el fin de compilar el producto como un único binario con lógica empresarial incorporada y cifrado de datos en su interior, sin posibilidad de cambio dinámico de bibliotecas durante la ejecución. La solución final es un motor de inferencia monolítico OpenVINO para ensamblar productos en modelos autónomos / portátiles.
Con las claves SenseLock, puede protegerse de una de estas dos formas:
Usa la API proporcionada por el fabricante y transfiere la lógica de trabajo a la llave. Usa el programa Virbox Protector. Analiza el archivo ejecutable y proporciona una selección de funciones disponibles que se pueden proteger mediante diferentes métodos (ofuscación, virtualización, fragmento y cifrado). Naturalmente, el uso de muchas funciones protegidas puede conducir a una disminución en el desempeño del programa, pero con un enfoque competente, estas serán pérdidas insignificantes. Virbox Protector también tiene una función anti-depurador que evita la depuración de un programa encriptado, así como un programa adicional DS Protector destinado a proteger archivos de datos (en nuestro caso, un modelo de red neuronal) con un programa encriptado en uso.
En nuestro caso utilizamos Virbox Protector con DS Protector. Los programas le permiten no desperdiciar energía en el desarrollo e implementación de sus propios algoritmos de protección de software y cifrado. Así es como se ve la protección de los programas que usan Virbox Protector:
Figura 3. Protector Virbox
Además, con las teclas, se proporciona un cómodo control del programa y, con la ayuda de la aplicación del fabricante, puede configurar la fecha de caducidad de la clave y el número de lanzamientos del programa. A continuación se muestra la interfaz de la utilidad:
Figura 4. Protector Virbox
Con la ayuda de Virbox Protector, ciframos el archivo único resultante, transferimos algunas de las funciones a la clave y resolvimos varios problemas a la vez:
No hay acceso de piratas informáticos al modelo La incapacidad de reemplazar módulos cargados dinámicamente de la solución de código abierto con códigos fuente disponibles públicamente Un sistema de licencias listo para usar con verificación de la presencia de una clave y la posibilidad de actualizar los términos de su uso de forma local o remota.La portabilidad de la solución entre cualquier dispositivo ejecutivo con referencia a la clave de hardware emitida.Un sistema de implementación simple e intuitivo sin la necesidad de implementar el entorno y los paquetes dependientes.
Vale la pena señalar que no hay programas o datos que no puedan ser pirateados o robados, pero puede crear protección, el costo de la piratería que hace que las acciones ilegales carezcan de sentido.