加密模型与资源

加密 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)与保护级别参数在这里同样适用:默认的 .enc 是免密钥便携的(任何装了运行时的机器都能解密),--passphrase / --emit-key 加一个便携密钥/口令,--bind-machine(可再叠加 --passphrase)则把它机器指纹锁定到这台机器。

在运行时读回它

python
import magiclock
import onnxruntime

magiclock.bootstrap()  # 把闸门立起来——`--bind-machine` 信封需要它;便携信封不用它也能解密
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自动识别机器锁定与便携两种信封(免密钥便携信封不传任何参数就能解密)。口令/密钥便携或二因子(--bind-machine --passphrase)产物请传入 passphrase/key,而不是走交互式提示。

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

每一次都只在内存中

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