모델 및 리소스 암호화
AI 모델과 그 외 바이너리 자산을 암호화하고, 런타임에 평문을 디스크에 기록하지 않고 다시 읽어 들입니다.
magiclock protect-model은 모델, 가중치 파일, 또는 그 외 모든 리소스를 .enc 봉투로 암호화합니다. 앱은 런타임에 bootstrap() + open_model()로 이를 메모리에서 복호화합니다 — 평문 바이트는 결코 디스크에 닿지 않습니다.
모델 암호화하기
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 플래그가 여기에도 모두 적용됩니다.
런타임에서 다시 읽어 들이기
import magiclock
import onnxruntime
magiclock.bootstrap() # brings the gate up against this machine's license
model_bytes = magiclock.open_model("models/face.onnx.enc") # plaintext, in memory only
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 | 머신 잠금 봉투인지 포터블 봉투인지 자동으로 감지합니다. 프롬프트 대신 포터블 또는 2단계 산출물에는 passphrase/key를 전달하세요. |
예외와 예외 상황에 대해서는 전체 Python API 레퍼런스를 참고하세요.
언제나 메모리에만
복호화된 모델 바이트는 그 참조를 들고 있는 동안만 프로세스 메모리에 존재합니다 — open_model()은 평문 복사본을 디스크나 임시 디렉터리, 그 밖의 어디에도 결코 기록하지 않습니다. 추론 프레임워크가 바이트가 아니라 파일 경로를 필요로 한다면, 직접 파일로 기록하는 대신 메모리 기반 위치(예: 메모리 기반 파일 객체)에 보관하세요. 그렇지 않으면 평문이 MagicLock의 보호 범위 밖의 디스크에 남게 됩니다.