スクリプト暗号化

本章では、FIRERPA 内蔵 Python 環境で動作するモジュールやスクリプトの暗号化方法について説明します。PC 上でのスクリプト暗号化は対象外で、~/modules/task~/modules/extension などのディレクトリにあるモジュール、および内蔵 Python コマンドで実行するスクリプトの暗号化を紹介します。暗号化作業を迅速に行うためのツールも提供しています。

スクリプトの暗号化には Cython を使用し、Python コードを C 言語に変換してから .so ファイルにコンパイルします。この方法によるパフォーマンスへの影響はごくわずかです。ただし、すべてのスクリプトファイルではなく、コアロジックのみを暗号化することを推奨します。また、サードパーティライブラリのファイルを暗号化しても無意味ですので行わないでください。「自身のロジックのみを暗号化する」という原則を常に守ってください。

ツールイメージのビルド

本ツールは Docker に大きく依存しているため、事前に Docker がインストールされていることを確認してください。リポジトリ https://github.com/firerpa/compiler をクローンし、ドキュメントまたは以下のコマンドに従ってイメージをビルドします。

docker build -t compiler .

スクリプトコードの暗号化

次のコマンドを使用して、ソースコードをコンテナ内にマッピングしコンパイルします。サポートされるアーキテクチャ(arch)は armarm64x86x86_64 で、それぞれ FIRERPA サーバーの異なるアーキテクチャに対応します。異なるアーキテクチャでコンパイルされたファイルには互換性がありません。

docker run -it --rm -v /source/dir:/data compiler:latest compile.sh --arch arm64 /data/my_important_script.py

正常に実行されると、スクリプトと同じディレクトリに my_important_script.cpython-39.so というファイルが生成されます。このファイル名は変更しないでください。別の名前を使用したい場合は、元のスクリプトファイル名を直接変更してください。配布時には、対応する .py ソースファイルを削除し、.so ファイルを該当ディレクトリに配置するだけで構いません。

注目

コードが FIRERPA モジュール(extension や task など)ではなく、単一の Python ファイルのみで構成されている場合、Python インタープリターは .so ファイルを直接実行できません。この場合は、暗号化された .so ファイルをインポートして起動するエントリポイント用の .py スクリプトを作成する必要があります。コードがモジュールそのものである場合は、.so ファイルを直接該当ディレクトリに配置し、サービスを再起動してください。