Keras.js предоставляет возможность запускать предварительно обученные модели Keras непосредственно в браузере с помощью JavaScript. Одним из критически важных аспектов использования моделей в клиентской среде является безопасность и защита весов модели, поскольку они могут содержать интеллектуальную собственность, а также быть уязвимы для несанкционированного доступа и модификации.
Весовые коэффициенты моделей Keras в Keras.js обычно экспортируются в формате JSON, где структура включает:
Пример структуры JSON для слоя Dense:
{
"class_name": "Dense",
"config": {
"units": 64,
"activation": "relu",
"use_bias": true
},
"weights": {
"kernel": [[0.1, 0.2], [0.3, 0.4]],
"bias": [0.01, 0.02]
}
}
JSON-файл с весами полностью загружается на клиентскую сторону, что делает его доступным для анализа и копирования при стандартной загрузке.
Для защиты весов можно использовать симметричное шифрование (AES) или асимметричное (RSA). Процесс включает:
Пример AES-шифрования на Node.js:
const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
function encrypt(data) {
let cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update(JSON.stringify(data), 'utf8', 'base64');
encrypted += cipher.final('base64');
return { encryptedData: encrypted, iv: iv.toString('base64') };
}
На клиенте необходимо использовать тот же алгоритм и ключ для расшифровки перед загрузкой в Keras.js.
Снижение точности чисел с плавающей точкой (например, с
float32 до float16) уменьшает размер файла и
делает точное восстановление модели сложнее. Keras.js поддерживает
весовые тензоры с пониженной точностью.
Использование обфускаторов для структуры JSON усложняет чтение и анализ весов. Можно изменить имена слоев, ключей и даже переставить порядок массивов, сохраняя корректность модели для Keras.js.
Если часть модели содержит критически важные слои, можно оставить их выполнение на сервере через REST API, а на клиенте загружать только промежуточные вычисления. Такой подход позволяет скрыть стратегически важные веса и алгоритмы.
После расшифровки или обфускации JSON можно использовать Keras.js для создания модели:
import KerasJS from 'keras-js';
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'weights.bin'
},
gpu: true
});
await model.ready();
const inputData = new Float32Array([0.5, 0.2, 0.1, 0.7]);
const outputData = await model.predict({ input: inputData });
console.log(outputData);
При использовании шифрования необходимо вставить этап расшифровки JSON/weights до передачи их Keras.js.
Для ограничения несанкционированного использования весов рекомендуется:
Защита весов модели в Keras.js требует баланса между удобством работы в браузере и безопасностью интеллектуальной собственности. Комбинация шифрования, контроля доступа и обфускации позволяет существенно усложнить несанкционированное использование модели без снижения производительности инференса.