ONNX Runtime Web (ORT Web) предоставляет возможность запускать модели машинного обучения непосредственно в браузере на стороне клиента. Одной из важных задач при работе с моделями в веб-среде является защита интеллектуальной собственности: предотвращение несанкционированного доступа к весам модели и затруднение их обратного проектирования. Для этого применяются обфускация и шифрование весов модели.
ONNX-модель представляет собой файл формата .onnx,
содержащий:
Наибольшую ценность для защиты представляют тензоры весов, поскольку они содержат обученные параметры, которые можно использовать для восстановления поведения модели.
Обфускация заключается в изменении представления данных модели, сохраняя функциональность при выполнении, но затрудняя прямой анализ. В веб-окружении применяются следующие подходы:
Перемешивание и упаковка данных
ArrayBuffer и последовательного
применения побитовых операций XOR или сдвигов.Изменение структуры файла
Псевдо-сжатие
gzip, brotli) для усложнения
прямого чтения бинарного файла.Шифрование обеспечивает криптографическую защиту, при которой данные невозможно использовать без соответствующего ключа. На практике для ORT Web используют AES или ChaCha20:
Пример алгоритма шифрования и расшифровки:
// Расшифровка веса модели в браузере
async function decryptWeights(encryptedData, key, iv) {
const cryptoKey = await crypto.subtle.importKey(
"raw",
key,
{ name: "AES-GCM" },
false,
["decrypt"]
);
const decryptedBuffer = await crypto.subtle.decrypt(
{ name: "AES-GCM", iv },
cryptoKey,
encryptedData
);
return new Float32Array(decryptedBuffer);
}
Для использования обфусцированных или зашифрованных весов с ORT Web необходимо:
Загрузка и расшифровка
fetch и применяет
расшифровку и декодирование в ArrayBuffer.Создание сессии ORT
ort.InferenceSession.create() с
Uint8Array расшифрованных весов.import * as ort from 'onnxruntime-web';
async function loadEncryptedModel(url, key, iv) {
const response = await fetch(url);
const encryptedData = await response.arrayBuffer();
const weights = await decryptWeights(encryptedData, key, iv);
// Создание сессии с использованием расшифрованных весов
const session = await ort.InferenceSession.create(weights);
return session;
}
Обфускация и шифрование весов позволяют сохранить производительность браузерного исполнения при надежной защите интеллектуальной собственности и предотвращении несанкционированного использования моделей.