このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
コンテンツを隠すためのモデルの保護
知的財産を開示せずに、サードパーティとモデルを共有する場合は、モデルを保護してください。モデルを保護すると、参照モデルにコンパイルすることで元のモデルについて実装の詳細が隠されます。保護モデルには、指定するオプション機能をサポートするための派生ファイルが含まれます。
Simulink® Coder™ を使用してモデルを保護すると、保護モデルのユーザーに以下を許可できます。
保護モデルを含むモデルを、ノーマル、アクセラレータ、ラピッド アクセラレータ、またはエクスターナル モードでシミュレートする。
モデルの内容およびブロック パラメーターを含む、モデルの読み取り専用 Web ビューを開く。モデルの読み取り専用 Web ビューを作成するには、Simulink Report Generator™ ライセンスが必要です。
保護モデルを含むモデルの C および C++ コードを生成する。
HDL Coder™ ライセンスがある場合、保護モデルを含むモデルの HDL コードを生成する。
Embedded Coder® ライセンスがあり、モデルの ERT ベースのシステム ターゲット ファイルを指定する場合、スタンドアロン インターフェイスを介して保護モデルのコードを生成する。
任意で各オプションをパスワード保護できます。これらのいずれかのオプションのパスワード保護を選択する場合、ソフトウェアでは AES-256 暗号化を使用してサポート ファイルが保護されます。保護モデルを作成する前に、サードパーティによるモデルの使用方法と、次の保護モデルの作成のベスト プラクティスを考慮してください。
保護モデルを作成するときは、次の点に留意してください。
Simulink Coder は、モデルの保護バージョンを作成し、拡張子を
.slxp
として、ソース モデルと同じ名前のファイルで保存します。拡張子が
.slx
の元のモデル ファイルは変更されません。Model ブロックを介してモデルを保護する場合、Model ブロックは変更されません。必要に応じて、Simulink Coder は、保護モデルを含むプロジェクト アーカイブ (
.mlproj
)、保護モデルのハーネス モデル、および追加のサポート ファイルを作成します。
この例では、読み取り専用表示、シミュレーションまたはコード生成用に保護モデルを参照モデルから作成する方法を示します。
親モデルの準備
必要に応じて、元の参照モデルを参照するために、Model ブロックを親モデルで設定します。この手順により、Model ブロックが保護モデルの作成時に保護参照になりません。
保護するモデルを参照する親モデルを開きます。この例では、
sldemo_mdlref_basic
という名前のモデルを開きます。各 Model ブロックについて、[ブロック パラメーター] ダイアログ ボックスを開き、[モデル名] フィールドで拡張子
.slx
を指定します。モデルと保護モデルの両方が同じフォルダーに存在するときは、
.slxp
が.slx
に優先されます。拡張子を指定しないと、元の Model ブロックは元のモデルではなく保護モデルを参照します。[OK] をクリックします。
参照されるモデルの保護
sldemo_mdlref_basic
モデルで、3 つの Model ブロックのいずれかをクリックします。Simulink ツールストリップの [Model ブロック] タブで、[保護] をクリックします。
[保護モデルの作成者] が開きます。
[一般] タブで、サポートする機能を指定します。
[シミュレーション] および [コード生成] を選択します。これらのオプションにより、保護モデルのユーザーは、保護モデルを参照するモデルのコードをシミュレーションして生成できます。保護モデルの機能をパスワードで保護する場合は、8 文字以上のパスワードを入力します。各オプションには、一意なパスワードを指定できます。
ヒント
[保護モデルの作成者] は、MATLAB® セッション中にモデルの設定をキャッシュします。ダイアログ ボックスを閉じて再度開くと、設定が維持されます。パスワードと調整可能なパラメーターの選択内容はキャッシュされません。既定の設定に戻すには、[リセット] をクリックします。 (R2023b 以降)
Embedded Coder ライセンスがあり、モデルで ERT ベースのシステムのターゲット ファイル (たとえば、
ert.tlc
) を指定している場合、[コード インターフェイス] フィールドが表示されます。この例では、
sldemo_mdlref_basic
が ERT ベースのシステム ターゲット ファイルを指定しないため、[保護モデルの作成者] の [コード インターフェイス] オプションを使用できません。[コンテンツ タイプ] リストから
[難読化されたソース コード]
を選択し、保護モデルのソース コードの目的とロジックを隠します。モデルの保護オプションの詳細については、Content typeを参照してください。
[シミュレーション オプション] タブで、保護モデルのユーザーがシミュレーション中に調整できるパラメーターを指定します。
モデルをコンパイルして調整可能なパラメーターを一覧表示するには、[シミュレーション用の調整可能なパラメーター] セクションで [リフレッシュ] をクリックします (R2023b 以降)。
保護モデル ユーザーによるシミュレーション中の調整を可能にするパラメーターを選択します。
この例では、
sldemo_mdlref_basic
には調整可能なパラメーターはありません。メモ
コード生成では、非自動ストレージ クラスをもつパラメーターが調整可能です。詳細については、Model ブロックで使用されるパラメーターおよび信号のストレージ クラスを参照してください。
[保存オプション] タブで、保護モデルを保存する場所、プロジェクトで保護モデルをサポート ファイルと共に保存するかどうか、およびハーネス モデルを作成するかどうかを指定します。
[保存先フォルダー] ボックスで、保護モデルのフォルダー パスを指定します。既定値は、現在の作業フォルダーです。
保護モデルと共にサポート ファイルを自動的に収集、作成、およびパッケージ化するには、[保護モデルをプロジェクト内の依存関係と共にパッケージ化] を選択します。
メモ
プロジェクトを共有する前に、プロジェクトに必要なサポート ファイルが含まれているかどうか確認してください。サポート ファイルが不足している場合は、関連するハーネス モデルのコードをシミュレーションまたは生成することで、不足しているファイルを特定できます。不足している依存関係をプロジェクトに追加し、必要に応じてハーネス モデルを更新します。
[保護モデルをプロジェクト内の依存関係と共にパッケージ化] を選択すると、[保護モデル用にハーネス モデルを作成する] が選択されます。ハーネス モデルがプロジェクトに含まれており、保護モデルを参照する Model ブロックに対して分離された環境を提供します。
保護モデルをさらにカスタマイズするには、以下を行います。
コードの難読化のためにユーザー設定による難読化を指定する。ユーザー設定による保護モデルの難読化の指定を参照してください。
複数のコード生成ターゲットを指定する。複数のターゲットを含む保護モデルの作成を参照してください。
保護モデルのコールバックを定義する。保護モデルのコールバックの定義を参照してください。
保護モデルを作成するには、[作成] をクリックします。
保護モデル、ハーネス モデル、サポート ファイルを含むプロジェクト アーカイブ (.mlproj
) が、指定された保存先フォルダーに表示されます。保護モデルをテストするには、現在のフォルダー ブラウザーでプロジェクト アーカイブをダブルクリックし、保存先フォルダーを指定してその内容を抽出します。または、プロジェクト アーカイブを右クリックします。次に、[ここに抽出] をクリックします。プロジェクトが開き、抽出されたファイルが、プロジェクト アーカイブに従って名前が付けられた新しいフォルダーに入ります。
保護モデルをテストし、それを元のモデルと比較できます。詳細については、保護モデルのテストを参照してください。
モデルの階層構造内の保護モデルを使用するには、ハーネス モデルに含まれるような Model ブロックを介して保護モデルを参照します。保護モデルを参照する Model ブロックの [シミュレーション モード] は、[アクセラレータ]
に設定されます。このモードは変更できません。詳細については、サードパーティからの保護モデルの参照を参照してください。
モデルを保護する他のメソッド
現在のモデルの階層構造内の最上位モデルから保護モデルを作成するには、次のいずれかのオプションを使用します。
Simulink ツールストリップの [シミュレーション] タブで [保存] ボタンの矢印をクリックし、[保護モデル] を選択する。
Simulink ツールストリップの [C コード] タブで [共有] ボタンの矢印をクリックし、[保護モデルの生成] を選択する。
保護モデルをプログラムで作成するには、関数 Simulink.ModelReference.protect
を使用します。
保護モデル レポート
Simulink エディターで保護モデルを作成する場合、保護モデルのレポートが生成され、保護モデルの一部として含まれます。この例で、保護モデルのレポートを表示するには、保護モデルをダブルクリックするか、ハーネス モデルのブロック上の保護モデルのバッジ アイコンを右クリックし、[レポートの表示] を選択します。
このレポートには以下のものが含まれています。
[Summary]。次のテーブルが含まれます。
[環境]。保護モデルの作成に使用された Simulink のバージョン、その他の製品のバージョンおよびプラットフォームなどが記載されます。
[Supported functionality]。保護モデルがサポートする機能ごとに、
[オン]
、[オフ]
、または[パスワード保護でオン]
を報告します。複数のターゲットに対して保護モデルを設定する場合、この表にはサポートされているターゲットのリストが含まれます。
[Interface Report]。入出力仕様、エクスポート関数の情報、インターフェイス パラメーターおよびデータ ストアなど、モデル インターフェイス情報が記載されます。
このレポートには、保護されていないモデルについてのコード生成レポート (コード メトリクス レポートやトレーサビリティ レポートなど) に表示される他のセクションは含まれません。それらのレポートには、モデルの設計に関する詳細が含まれるためです。
保護モデルの要件と制限
保護モデルを作成するときは、次の要件を考慮してください。
保護モデルを作成するには、Simulink Coder または HDL Coder のライセンスを所有していなければなりません。
モデルは MATLAB パス上で使用可能でなければなりません。
モデルは保護時にアクティブなコンフィギュレーションを使用します。保護モデルのコンフィギュレーションを変更することはできません。
モデルにバリアントが含まれている場合、保護モデルには保護時にアクティブなバリアントのみが含まれます。
モデル保護プロセスではコールバックは保存されません。保護モデルで使用するコールバックの作成の詳細については、保護モデルのコールバックの定義を参照してください。
保護モデルの名前を変更したり、サフィックスを変更したりしないでください。そのようにすると、元の名前やサフィックスに戻すまで、モデルは使用できなくなります。
モデルおよびそれが参照するモデルには、一意の名前を使用します。ある保護モデルが、異なる保護モデルまたは別の保護モデルの階層内にある異なるモデルと同じ名前のモデルを参照する場合、保護モデルの使用に制限事項があります。最上位モデルが、そのような名前の競合がある 2 つの保護モデルを参照している場合、最上位モデルを保護したり、最上位モデルのコードを生成したり、最上位モデルのシミュレーションをソフトウェアインザループ (SIL)、プロセッサインザループ (PIL) またはラピッド アクセラレータ モードで実行したりすることはできません。
モデルにインラインでない S-Function が含まれている場合は、.MEX ファイルに一意の名前を使用します。MATLAB パス上にある別の .MEX ファイルと名前が競合する場合、保護モデルをシミュレートできません。
モデルは、モデル参照の要件と制限に記載されている要件も満たしていなければなりません。
コード生成の要件と制限
コード生成をサポートする保護モデルを作成するには、保護する前のモデルが以下の要件を満たしていなければなりません。
モデルは、ノーマル モード、アクセラレータ モード、ソフトウェアインザループ (SIL) モード、またはプロセッサインザループ (PIL) モードと単一のターゲットを使用しなければなりません。
モデルにインラインでない S-Function が含まれていてはなりません。
モデルの [コード生成] 、 [検証] 、 [関数の実行時間を計測する] コンフィギュレーション パラメーターがオンであってはなりません。モデルを保護するときにこのオプションがオンの場合、ソフトウェアによってこのパラメーターがオフになり、警告が表示されます。
保護された参照モデルは、パスワード保護を使用しないコード生成をサポートしなければなりません。
モデルは、保護された各参照モデルの [コンテンツ タイプ] と互換性がなければなりません。次の表に、互換性に関する情報を示します。
コード生成のコンテンツ タイプの互換性
保護された親モデルのコンテンツ タイプ 互換する保護された参照モデルのコンテンツ タイプ バイナリ
バイナリ
難読化されたソース コード
'ObfuscateCode'
が'false'
に設定されたバイナリ
バイナリ
'ObfuscateCode'
が'false'
に設定されたバイナリ
難読化されたソース コード
読み取り可能なソース コード
難読化されたソース コード
難読化されたソース コード
読み取り可能なソース コード
難読化されたソース コード
読み取り可能なソース コード
保護された親モデルと保護された参照モデルの [コンテンツ タイプ] が一致しない場合、コード生成ではさらに高いレベルの保護を提供する [コンテンツ タイプ] が適用されます。たとえば、
[バイナリ]
に設定された保護された親モデルは、[難読化されたソース コード]
に設定されている保護された参照モデルに対して[バイナリ]
を生成します。[読み取り可能なソース コード]
に設定された保護された親モデルは、[難読化されたソース コード]
に設定された保護された参照モデルに対して[難読化されたソース コード]
を生成します。
保護モデルを含むモデルのコード生成時のエラーを防ぐには、以下が満たされなければなりません。
保護モデル名は、同じモデル参照階層内の他のモデル名から一意でなければなりません。
インターフェイスが一致しなければなりません。
パラメーターが互換しなければなりません。
入れ子にされた保護モデルの要件と制限
保護モデルの受信者がその保護モデルを参照するモデルを保護できるようにするには、保護モデルは以下でなければなりません。
アクセラレータ モードをサポートする。[保護モデルの作成者] で [シミュレーション] を選択するか、関数
Simulink.ModelReference.protect
を使用して'Mode'
を'Accelerator'
または'CodeGeneration'
に設定しなければなりません。既定の
'CodeInterface'
設定'Model reference'
を使用する。シミュレーションにはパスワード保護を使用しない。
コールバックがない。
保護された親モデルがサポートする意図のある操作を、パスワード保護を使用せずにサポートする。
保護された親モデルがコード生成をサポートする意図がある場合、保護された親モデルの意図する [コンテンツ タイプ] と互換性のある [コンテンツ タイプ] を使用する。互換性のある [コンテンツ タイプ] のオプションのリストについては、前の節の表を参照してください。
保護された親モデルが使用するものと同じコンパイラを使用する。
異なる保護モデルまたは別の保護モデルの階層内にある異なるモデルと同じ名前のモデルを参照しない。
保護するモデルが保護モデルを参照している場合、参照されている保護モデルは前述の要件を満たさなければなりません。
保護モデルを参照するモデルを保護する場合は、参照保護モデルの調整可能なパラメーターを、保護しているモデルに対して調整可能として指定する必要があります。
メモ
[HDL コード生成] オプションが選択された状態で作成する保護モデルにより、暗号化およびシミュレーションと保護モデルを参照するモデルからの HDL コード生成のサポートが可能です。HDL ソース コードを難読化したり、コールバックを指定したり、このオプションが有効になっている入れ子にされた保護モデルを使用したりすることはできません。HDL コード生成の制限事項の詳細については、HDL コード生成のための保護モデルの制限事項 (HDL Coder)を参照してください。