Main Content

保護モデルの作成のベスト プラクティス

サードパーティと共有するモデルの実装の詳細を隠す場合は、保護モデルを作成します。元のモデル ファイルを含めるのではなく、保護モデルに指定する機能をサポートする派生ファイルを含めます。ユーザーが必要とする機能をサポートし、モデルに関する最小限の情報を含む保護モデルを作成するには、次のベスト プラクティスに従います。保護前および保護中にモデルに対して選択した設定で、保護モデルのユーザーが実行できる内容が指定されます。さまざまな設計オプションのトレードオフを考慮します。追加の機能をサポートするには、保護モデルに追加のコンテンツを含めなければなりません。それにより、設計のより多くの要素が表示される可能性があります。保護モデルはコンパイルされたモデル参照から派生されたアーティファクトを使用するため、モデルは保護した後に変更できません。

保護モデルのユーザーに合わせた設定の調整

保護するモデルを作成する場合は保護モデルのユーザーに合わせて調整して、システムで保護モデルを参照できる設定を選択します。モデルを保護した後に、保護モデルが親モデルと互換するようにコンフィギュレーション パラメーターの設定などのオプションを変更することはできません。モデルを保護する前に、互換するオプションを使用するようにモデルを設定します。

一意なモデル名の選択

モデルを保護した後に保護モデルの名前を変更することはできません。名前の競合を回避するために、システム内の他のモデルとは異なるモデル名を選択します。ユーザーのモデルの階層構造内の他のモデルと競合しないモデル名を選択します。ソース (保護されていない) モデルを保護する前に、この名前を使用してモデルを保存します。

モデル パラメーターの構成

モデルを保護する前に、保護モデルのユーザーに合わせてコンフィギュレーション パラメーターの設定を選択します。親モデルが保護モデルを参照する場合、モデル階層のコンフィギュレーション パラメーターの設定およびモデルの階層構造のコード生成のためのコンフィギュレーション パラメーターの設定で説明されているように、モデルのコンフィギュレーション パラメーターは互換性がなければなりません。たとえば、保護モデルのパラメーター [ソルバー][可変ステップ] に設定した場合、保護モデルを参照するモデルは [ソルバー][可変ステップ] に設定されなければなりません。モデルに複数のコンフィギュレーション セットが含まれる場合、保護モデルは、モデルを保護するときにアクティブになるコンフィギュレーション セットを使用します。パラメーターの非互換性を最小化するには、モデル コンフィギュレーション セットを保護モデルのユーザーに送信して、親モデルの構成を使用できます。詳細については、コンフィギュレーションの複数のモデル間での共有を参照してください。

モデルの外部インターフェイスの最小化

入力端子と出力端子を除き、モデルにインターフェイスを提供する設計要素の数を最小化します。外部コンポーネントとの連携を許可するには、保護モデルはこれらの設計要素を保護しません。以下の項目については、保護を許可する以下の代替オプションを検討します。

  • 調整可能なパラメーター — Auto または Localizable 以外のストレージ クラスを使用するコード内の調整可能なパラメーターの数を最小化します。モデルの生成コード内のグローバル ストレージ クラスを使用するパラメーターは、保護モデルのコードに表示されます。保護モデルのユーザーに調整可能なパラメーターへのアクセスが必要な場合は、保護モデルが提供するパラメーターのリストに同意します。詳細については、C Data Code Interface Configuration for Model Interface Elementsを参照してください。

  • データ オブジェクト — パラメーターと信号データ オブジェクト、データ型オブジェクト、バス オブジェクトを含む、外部に保存されているデータオブジェクトは保護されません。保護モデルのユーザーがアクセスする必要があるデータ オブジェクトのみ含めます。データ オブジェクトを使用して、モデルの作成中に信号を監視し、パラメーターをキャリブレーションします。キャリブレーションの後、パラメーターの値を指定してから、それらの値をインライン化します。詳細については、データ オブジェクトを参照してください。

  • データストア — 信号オブジェクトでグローバル データ ストアを使用しないでください。グローバルなデータストアにより、データが参照モデル全体で表示できるようになります。代わりに、入力端子と出力端子を使用して、モデル参照全体でデータを通信します。モデルにローカルなデータストアとして Data Store Memory ブロックを使用できます。詳細については、ローカルおよびグローバル データ ストアを参照してください。

  • モデル引数 — モデルが使用する引数の数を最小化します。保護モデルが引数を使用する場合、保護モデルのユーザーが、親モデルで引数の値を指定しなければなりません。これらのデータ項目は、保護モデルのユーザーに表示されます。モデルが使用する各モデル引数について、引数の指定を保護モデルのユーザーに伝えます。

  • Simulink 関数 — モデルが使用する Simulink 関数のスコープを検討します。Simulink 関数にグローバル スコープがある場合、またはモデルのルート レベルでスコープされる場合、保護モデルで表示可能なインターフェイスが提供されます。Simulink 関数を保護モデルと連動させない場合、モデルのサブシステム内でスコープを指定することを検討してください。詳細については、サブシステムのスコープ内の Simulink Function ブロックを参照してください。

  • ログを行うブロック — 保護モデルでブロックベースのログを使用しないでください。Timeseries 形式を使用する To File ブロックと To Workspace ブロックは保護モデルで機能するため、ログに記録されたデータは保護モデル ユーザーに表示されます。信号のログ、および信号セレクターを使用する他のオプションは、保護モデル内の信号で機能しません。

  • インラインでない S-Function — モデルが使用するインラインでない S-Function のコンテンツを検討します。インラインでない S-Function を含むモデルを保護すると、S-Function に対して書き込みを行う MEX ファイルは保護モデル ビルド フォルダーに配置され、保護モデルのユーザーに表示されます。

保護モデルの設計オプション

モデルの作成中に前述の設計要素のいずれかを使用する場合、モデルのユーザーがその要素を必要としていない場合は、バリアントを使用して保護モデルから設計要素を除外できます。たとえば、テスト中に To File ブロックを使用して、保護モデルのユーザーがアクセスする必要のないデータをログに記録します。バリアントを使用してブロックを除外するには、次のようにします。

  1. To File ブロックにつながる信号に Manual Variant Sink ブロックなどのバリアント ブロックを挿入します。

  2. To File ブロックにバリアント ブロックの最初の出力を接続します。

  3. バリアント ブロックの 2 つ目の出力を、信号を終了させる Terminator ブロックに接続します。

  4. モデルのテスト中に信号をログに記録するには、最初のバリアント出力を有効にします。

  5. ログを行うブロックを使用せずにモデルを保護するには、2 つ目のバリアント出力を有効にします。保護モデルはアクティブなバリアントのみを使用するため、信号はログに記録されずに終了します。

    Variant block with two signal outputs. One output leads to a To File block. One output leads to a Terminator block. The variant that leads to the Terminator block is activated.

保護モデルに含める内容

モデルの保護オプション

保護モデルの機能を指定すると、保護モデルに、それらの機能をサポートするアーティファクトが含まれます。含まれるアーティファクトを制限すると、モデルのユーザー、またはアクセス許可なしでモデルを表示または変更しようとする外部の攻撃者に表示される内容を制御できます。さまざまな設計オプションのトレードオフを考慮します。追加の機能をサポートするには、保護モデルに追加のコンテンツを含めなければなりません。それにより、設計のより多くの要素が表示される可能性があります。モデルのユーザーと調整を行って、必要な機能について合意します。以下の機能のサポートのみを指定します。

  • 難読化されたソース コード — 保護モデルのユーザーが生成されたソース コードをコンパイルしなければならない場合にこのオプションを使用します。保護モデルには、生成されたソース コードの難読化バージョンが含まれます。このバージョンはソース コードと同様に動作しますが、モデル ユーザーと潜在的な攻撃者にとって分かりにくくなります。

  • コンパイルされたコード — 保護モデルのユーザーが保護モデルからコンパイルされたライブラリを使用できる場合はこのオプションを使用します。保護モデルには、生成されたソース コードからコンパイルされたバイナリ ファイルとヘッダー ファイルが含まれます。ソース コードは含まれません。このオプションにより、モデルのユーザーと潜在的な攻撃者が、モデルの生成されたソース コードにアクセスするのを防ぎます。

  • パスワード保護 — 保護モデルのユーザーに対して一部の機能をサポートし、外部の攻撃者からサポート ファイルを保護する場合はこのオプションを使用します。パスワードを指定する各オプションについて、そのオプションをサポートする派生ファイルは、AES-256 暗号化を使用して保護されます。各機能を実行する前に、保護モデルはユーザーにパスワードの指定を求めます。保護モデルのユーザーと調整を行って、各オプションのパスワードを選択します。保護モデルが、同様に保護されている親モデルで参照されている場合は、親の保護モデルがサポートする機能をパスワード保護しないでください。

  • デジタル署名 — 受信者が、外部攻撃者が変更したモデルを使用しないように、証明書を使用して保護モデルに署名します。モデルに署名すると、モデルのユーザーは、署名したユーザーが保護モデルを公開し、署名後に変更されていないことを確認できます。モデルに署名した後にモデルが変更されると、ユーザーはそのモデルを使用できません。(信頼済み証明書の) ユーザーのコンピューター ストレージに、証明書を認証する機関からの証明書があることを確認します。

インターフェイス レポート

保護モデルを作成する場合、生成された保護モデル レポートにはインターフェイス レポートが含まれます。インターフェイス レポートには、入力仕様と出力仕様、エクスポートされた関数、インターフェイス パラメーター、データストアに関する情報が含まれます。インターフェイス レポートを参照として使用して、保護モデルのユーザーと通信します。

ハーネス モデルの作成

保護モデルを作成する場合、保護モデルを参照するハーネス モデルを作成するオプションがあります。ハーネス モデルを使用して、ユーザーが保護モデルをシステムと連携させるために必要な情報を定義します。ハーネスに、保護モデルが使用するものと同じコンフィギュレーション セットが含まれます。ハーネス モデルで、保護モデルが使用するデータ定義を含めることができます。

関連するトピック