加密模型与资源

加密 AI 模型与其他二进制资产,并在运行时读取它们,全程不落盘。

magiclock protect-model 把模型、权重文件或任意资源加密成一个 .enc 信封。你的应用在运行时用 bootstrap() + open_model() 在内存中解密——明文字节从不落盘。

加密一个模型

shell
magiclock protect-model models/face.onnx                       # -> models/face.onnx.enc
magiclock protect-model weights/net.pt --feature ai_model -o net.enc

--feature 指定解锁它所需的授权能力,默认是 ai_model加密你的代码里的有效期(--trial / --expires-in / --expires-at)、便携档(--no-bind-machine--passphrase--emit-key)和 --lock-passphrase 参数在这里同样适用。

在运行时读回它

python
import magiclock
import onnxruntime

magiclock.bootstrap()  # 针对这台机器的授权把闸门立起来
model_bytes = magiclock.open_model("models/face.onnx.enc")  # 明文只存在于内存中
session = onnxruntime.InferenceSession(model_bytes)

不管信封里装的是什么,open_model() 的用法都一样——ONNX、PyTorch state dict、原始权重数组,或者配置包、数据集这类任意二进制资源。传进去的是 bytes,读出来的也是 bytes

函数参考

签名说明
magiclock.bootstrap()bootstrap(vault_dir=None, *, app_version="1.0.0") -> MagicLockRuntime在任何 open_model()(或被门控的代码)运行前调用一次即可。magiclock build 会在编译产物的入口自动帮你插入这个调用——只有普通(未编译)脚本才需要你手动调用。这台机器尚未激活时会抛出异常。
magiclock.open_model()open_model(path, *, vault_dir=None, passphrase=None, key=None) -> bytes自动识别机器锁定与便携两种信封。便携或二因子产物请传入 passphrase/key,而不是走交互式提示。

异常与边界情况详见完整的 Python API 参考

每一次都只在内存中

解密后的模型字节只在你持有引用期间存在于进程内存里——open_model() 从不把明文副本写到磁盘、临时目录或任何其他地方。如果你的推理框架需要的是文件路径而不是字节,请把它放在内存态的位置(比如内存文件对象),而不是自己把它写出去,否则明文就会落到 MagicLock 保护范围之外的磁盘上。