ソース コードを保護するためのセキュリティについての考慮事項
MATLAB® ソース コード (.m
) は、それ自体で実行可能ですが、MATLAB ソース ファイルのコンテンツには簡単にアクセスできるため、設計や実装の詳細が公開されてしまいます。独自のアプリケーション コードをこの形式で配布しないようにするには、代わりに次のようなオプションを 1 つ以上使用します。
P コード ファイルの作成 — テキスト形式の MATLAB ファイルを、コンテンツを不明瞭化した実行のみの形式に変換します。
スタンドアロン実行可能ファイルのビルド — MATLAB Compiler/Simulink Compiler を使用して、MATLAB プログラムまたは Simulink モデルからスタンドアロン アプリケーションを生成します。
モデルの保護の使用 — モデルの保護を使用して、Simulink モデルの内容を隠します。
コードのネイティブ コードへの変換 — ソース コードとアルゴリズムをプラットフォーム固有のバイナリ ファイルにコンパイルします。
コンパイルしたアプリケーションのリモート保護サーバーでのホスト — MATLAB Web App ServerまたはMATLAB Production Serverを使用して、アクセスが制限されたリモート保護サーバーでコンパイルしたアプリケーションをホストします。
セキュリティで保護された OS サービスの利用 — シールドされたバーチャル マシン上の保護サーバーでコンパイルしたアプリケーションをホストします。
P コード ファイルの作成
ソース コード ファイルのすべてまたは一部を "P コード" ファイル (.p
ファイル拡張子を伴う) というコンテンツを不明瞭化した形式に変換し、その形式でアプリケーション コードを配布します。
P コード ファイルの生成の詳細については、P コードを使用したコンテンツ不明瞭化ファイルの作成を参照してください。
スタンドアロン実行可能ファイルのビルド
ソース コードを保護するもう 1 つの方法には、スタンドアロン実行可能ファイルとしてビルドし、そのファイルを必要なその他のファイルと共にユーザーに配布する方法があります。展開用のファイルを準備するには、MATLAB Compiler™ または Simulink® Compiler と、サポートされる C または C++ コンパイラがインストールされていなければなりません。ただし、エンド ユーザーには MATLAB は必要ありません。
MATLAB Compiler または Simulink Compiler によってスタンドアロン実行可能ファイルが作成されると、そのアプリケーションに必要なすべてのファイルがアーカイブにまとめられます。そのアーカイブでは、各 MATLAB コード ファイル (テキスト形式の MATLAB ファイルまたは P コード ファイル) は標準の AES-256 アルゴリズムを使用して暗号化されます。既定では、ファイルの名前とディレクトリ構造は不明瞭化されず、他のファイル タイプ (MAT、FIG、MEX など) は暗号化されません。
R2021b 以降では、ファイルの名前とディレクトリ構造を不明瞭化できるほか、他のファイル タイプ (MAT、FIG、MEX など) もmcc
(MATLAB Compiler)の -s
オプションを使用して暗号化できます。実行時に、暗号化されたファイルはディスク上で暗号化されたままですが、メモリ内ではコンパイル前の元の形式に復号化されます。用途によっては、他のメソッドをこのメソッドと組み合わせて保護を強化できます。たとえば、コンパイルする前に MATLAB コード ファイルから P コード ファイルを作成することができます。
MATLAB アプリケーションのスタンドアロン実行可能ファイルをビルドするには、MATLAB プログラム ファイル作成の通常のワークフローの後で、アプリケーションを開発し、デバッグします。実行可能ファイルの生成方法の詳細については、MATLAB 関数からのスタンドアロン アプリケーションの作成 (MATLAB Compiler)を参照してください。
モデルの保護の使用
モデルを保護すると、参照モデルにコンパイルすることで元のモデルについて実装の詳細が隠されます。保護モデルを作成する際に、SLXP と呼ばれるパッケージにコンパイルすることで元のモデルについて実装の詳細が隠されます。SLXP には、コードの生成やシミュレーションなど、Simulink 環境でユーザーの求める機能をサポートするための派生ファイルが含まれます。
ユーザーがシミュレーション専用の保護モデルを作成した場合、IP のほとんどは派生バイナリ ファイル内に隠されます。ユーザーがコード生成もサポートする保護モデルを作成した場合、SLXP には、ユーザーが SLXP をどのように作成したかに応じて、読み取り可能な C/C++ コードまたは難読化されたバイナリ形式の特定のコード生成用サポート ファイルが含まれます。
シミュレーション機能とコード生成機能は、パスワードをもつ受信者のみがこれらの機能を使用できるように、必要に応じてパスワードで保護できます。パスワード保護を使用する場合、その機能の主要なサポート ファイルは AES-256 暗号化を使用して保護されます。エンド ユーザーがパスワードを入力すると、これらのファイルはディスク上で復号化されます。
パッケージ内のすべてのサポート ファイルが暗号化されるわけではありません。このようなファイルには IP はほとんど含まれていませんが、インターフェイスやサンプル時間などのモデルに関する特定の情報が開示される可能性があります。
詳細については、コンテンツを隠すためのモデルの保護 (Simulink Coder)を参照してください。
コードのネイティブ コードへの変換
一部またはすべてのソース コードまたはアルゴリズムを C/C++ コードに変換し、バイナリ ファイルにコンパイルします。コードをバイナリ ファイルに変換する方法は複数あります。
mex
コマンドで C/C++ コードからバイナリ ファイルを生成する。MATLAB Coderで MATLAB コードからバイナリ ファイルを生成する。
Simulink Coderで Simulink モデルから C/C++ コードを生成し、生成されたコードをスタンドアロンのバイナリ ファイルにコンパイルする。
保護を強化するには、生成されたバイナリにバイナリの難読化を適用できます (MathWorks 以外のツールを使用)。
コンパイルしたアプリケーションのリモート保護サーバーでのホスト
ソース コードの保護方法の 1 つに、MATLAB Web App ServerまたはMATLAB Production Serverを使用してリモート保護サーバーにそのソース コードを保存する方法があります。保存されたソース コードはアクセスが制限されたサーバーに存在し、ユーザーはセキュリティで保護されたインターフェイスを介してアプリケーションにアクセスします。ファイルは、スタンドアロン実行可能ファイルのビルドで説明したものと同じメカニズムで暗号化されます。
セキュリティで保護された OS サービスの利用
オペレーティング システムに用意されているさまざまなシステムハードニング手法を使用します。たとえば、シールドされたバーチャル マシンで実行される、アクセスが制限されたサーバーにアルゴリズムを配置できます。シールドされたバーチャル マシンを使用すると、IP を保護するためにセキュリティを強化できます。