概要

MagicLock が保護する対象、2 つの保護レベル、そしてこれ以降のドキュメント全体に登場する基本概念について説明します。

MagicLock は、Python のソースコードと AI モデルを暗号化し、署名付きライセンスによるゲートで保護し、ソフトウェアの実行のたびにそのライセンスを完全にオフラインで検証する、コマンドラインツール兼 Python SDK です。パッケージを 1 つインストールし、コマンドを 1 つ実行するだけで、製品を出荷できます。

メンタルモデル

MagicLock のすべては、2 つの独立した問いに集約されます。何を保護するのか、そしてどれだけ強力な保護が必要か、です。

保護対象出力強度
簡易版Python ソース(.py.pya — インポートシステムが理解する、暗号化されゲートで保護されたコンテナ良好 — 単純なコピーは防止;実行中は復号されたバイトコードがメモリ上に存在します
コンパイル版(強保護)Python ソース(コンパイル済み)ネイティブの .so / .pyd、またはスタンドアロンのアプリディレクトリ強力 — 平文の Python は一切出荷されず、ライセンスゲートは 1 箇所に集約されず、コンパイル後のすべてのモジュールに自動で組み込まれるため、攻撃者が見つけて patch する的を絞れません
モデル・リソース保護モデル、重み、任意のバイナリ資産.enc — 暗号化されたエンベロープどちらのレベルにも適用可能;平文はメモリ上にのみ存在します

簡易版を使えば数分で保護を導入でき、その後コードの書き方を変えることなくコンパイル版へ移行できます — コンパイル版のゲートは自動的に挿入されるため、デコレータを付けたり bootstrap() を手動で呼んだりする必要はありません。

基本概念

このドキュメント全体で繰り返し登場する、いくつかの考え方があります。

  • ライセンス(License) — あなたのアカウントに対して発行される署名付きの許可証で、利用できる機能と、その有効期限を定めます。鍵ファイルを直接扱うことなく発行・検証されます。
  • デバイス固定(ノードロック) — デフォルトでは、ライセンス(およびそれで暗号化されたもの)は、有効化を行った特定のマシンに紐づけられます。暗号化されたファイルを別のマシンにコピーしても、そこでは復号できません。
  • 有効化(Activation) — あなたのアカウントの下でマシンをプロビジョニングする、一度限りのステップです。最初の protect/build 呼び出しに組み込まれているため、手動で実行する必要はほとんどありません — 詳しくはアカウントと有効化を参照してください。
  • ケーパビリティ(Capability) — ライセンスが付与できる、名前の付いた権限(コード保護、モデル暗号化など)です。ランタイムゲートと open_model() はそれぞれ必要なケーパビリティを確認します。
  • オフライン猶予(Offline grace) — 暗号化はライセンスサーバーへの確認を行います。一時的にオフラインになっても、猶予枠があるため作業を続けられます。復号にはネットワークが一切必要ありません。
  • 有効期限(Expiry) — ライセンスとは独立した、暗号化された成果物そのものに対する任意の制御で、指定した日付や期間を過ぎると復号できなくなります。

60 秒クイックスタート

shell
pip install magiclock

# First run: signs you in (opens a browser) and activates this machine,
# then encrypts. Every encrypt after that is instant and non-interactive.
magiclock protect app.py            # -> app.pya

# Runs fully offline: no login, no network, ever.
magiclock run app.pya

次に読むべきもの