インテル® Stratix® 10 デバイス・セキュリティー・ユーザーガイド

ID 683642
日付 9/02/2021
Public
ドキュメント目次

4.5.2.3. ヘルパーデータとラップされたキーをクアッドQSPIフラッシュメモリーにプログラミングする

Quartus Programming File Generatorのグラフィカル・インターフェイスを使用して、PUFパーティションを含む初期QSPIフラッシュイメージを作成します。QSPIフラッシュにPUFパーティションを追加するには、フラッシュ・プログラミング・イメージ全体を生成してプログラムする必要があります。PUFデータ・パーティションの作成、およびPUFヘルパーデータとラップされたキーファイルを使用したフラッシュイメージの生成は、Programming File Generatorコマンド・ライン・インターフェイスではサポートされていません。

次の手順では、PUFヘルパーデータとラップされたキーを使用してフラッシュ・プログラミング・イメージを構築する方法を示します。

  1. File メニューで、 Programming File Generatorをクリックします。Output Filesタブで次のとおり選択します。
    1. Device FamilyにはStratix 10を選択します。
    2. Configuration modeにはActive Serial x4を選択します。
    3. Output directoryには、出力ファイル・ディレクトリーを指定します。この例では、output_filesになっています。
    4. Nameには、生成されるプログラミング・ファイルの名前を指定します。この例ではoutput_fileを使用しています。
    5. Descriptionには、生成するプログラミング・ファイルを選択します。この例では、デバイス・コンフィグレーションにはJTAG Indirect configuration File (.jic) を使用し、デバイスのヘルパーイメージにはRaw Binary File of Programming Helper Image (.rbf) を使用しています。この例では、Memory Map File (.map)Raw Programming Data File (.rpd) を生成します。ロウ・プログラミング・データ・ファイルが必要になるのは、サードパーティーのプログラマーを使用する予定がある場合のみです。
      図 8. Programming File GeneratorのOutput FilesタブでのJTAG Indirect Configurationの選択
Input Filesタブで次のとおり選択します。
  1. Add Bitstream をクリックして、.sof ファイルを指定します。
  2. .sof ファイルを選択し、Propertiesをクリックします。
    1. Enable signing toolOnにします。
    2. Private key file.pem ファイルを選択します。
    3. Finalize encryptionOnにします。
    4. Encryption key file.qek ファイルを選択します。
    5. OK をクリックして、前のウィンドウに戻ります。
  3. PUFヘルパー・データ・ファイルを指定するには、Add Raw Dataをクリックします。Files of typeドロップダウン・メニューでQuartus Physical Unclonable Function File (*.puf) に変更します。.puf ファイルを指定します。
  4. ラップされたAESキーファイルを指定するには、Add Raw Dataをクリックします。Files of typeドロップダウン・メニューでQuartus Wrapped Key File (*.wkey) に変更します。.wkey ファイルを指定します。
    図 9. コンフィグレーション、認証、および暗号化用の入力ファイルの指定

Configuration Deviceタブで次のとおり選択します。

  1. Add Deviceをクリックして、使用可能なフラッシュデバイスの一覧からフラッシュデバイスを選択します。
  2. 先ほど追加したコンフィグレーション・デバイスを選択し、Add Partitionをクリックします。
  3. Input fileEdit Partitionダイアログボックスで、ドロップダウン・リストから .sof を選択します。デフォルトをそのまま使用するか、Edit Partitionダイアログボックスで他のパラメーターを編集します。
    図 10. .sofコンフィグレーション・ビットストリーム ・パーティションを指定する
  4. .puf.wkey を入力ファイルとして追加すると、Programming File GeneratorによってPUFパーティションが Configuration Deviceに自動で作成されます。.puf.wkeyPUFパーティションに格納するには、PUFパーティションを選択し、Editをクリックします。Edit Partitionダイアログボックスで、ドロップダウン・リストから .puf ファイルおよび .wkey ファイルを選択します。PUFパーティションを削除する場合は、コンフィグレーション・デバイスを削除して再度追加し、Programming File Generatorによって別のPUFパーティションを作成できるようにしてください。
    図 11. .pufファイルと .wkeyファイルをPUFパーティションに追加する
  5. Flash Loaderパラメーターに対して選択する インテル® Stratix® 10デバイスファミリーとデバイス名は、お使いの インテル® Stratix® 10 OPNと一致するようにします。
  6. Generateをクリックし、Output Files タブで指定した出力ファイルを生成します。
  7. Programming File Generatorでは、.qek ファイルを読み出します。AESキーの生成にパスフレーズを使用した場合は、パスフレーズの入力を求められるので、Enter QEK passphraseプロンプトにパスフレーズを入力します。Enterキーをクリックします。
  8. Programming File Generatorによって生成が正常に行われたことがレポートされたら、OKをクリックします。
インテル® Quartus® Prime Programmerを使用して、QSPIプログラミング・イメージをQSPIフラッシュメモリーに書き込みます。
  1. インテル® Quartus® PrimeToolsメニューでProgrammerを選択します。
  2. ProgrammerでHardware Setupをクリックし、接続している インテル® FPGAダウンロード・ケーブルを選択します。
  3. Add Fileをクリックし、.jic ファイルを指定します。
    図 12. .jicをプログラムする
  4. ヘルパーイメージに関連付けられているボックスを選択解除します。
  5. .jic 出力ファイルにProgram/Configureを選択します。
  6. Startボタンをオンにし、QSPIフラッシュメモリーをプログラムします。
  7. ボードの電源を再投入します。その後、 クワッドSPIフラッシュ・メモリー・デバイスにプログラムされたデザインが、ターゲットFPGAにロードされます。
PUFパーティションをクアッドSPIフラッシュに追加するには、フラッシュ・プログラミング・イメージ全体を生成してプログラムする必要があります。

PUFパーティションがすでにフラッシュに存在している場合は、 インテル® Quartus® Prime Programmerを使用すると、PUFヘルパーデータとラップされたキーファイルに直接アクセスできます。例えば、アクティベーションが失敗した場合は、PUFを再登録し、AESキーを再ラップできます。その後、フラッシュ全体を上書きせずに、PUFファイルだけをプログラムすることができます。

インテル® Quartus® Prime Programmerでは、既存のPUFパーティション内のPUFファイルに対して次の動作引数をサポートします。
  • p: program (プログラム)
  • v: verify (検証)
  • r: erase (消去)
  • b: blank check (ブランクチェック)
PUFパーティションが存在する場合でも、 PUF登録に関しては、同じ制限事項に従ってください。
  1. i 動作引数を使用して、最初の動作に対してプロビジョニング・ファームウェア・ヘルパー・イメージを読み出します。例えば、次のコマンドシーケンスでは、PUFを再登録し、AESルートキーを再ラップし、古いPUFヘルパーデータとラップされたキーを消去してから、新しいPUFヘルパーデータとAESルートキーをプログラムして確認します。
    quartus_pgm -c 1 -m jtag -o "ei;new.puf;1SX280LH2"
    quartus_pgm -c 1 -m jtag --ccert_file=signed_aes.ccert \
    -o "e;new.wkey;1SX280LH2"
    quartus_pgm -c 1 -m jtag -o "r;old.puf"
    quartus_pgm -c 1 -m jtag -o "r;old.wkey"
    quartus_pgm -c 1 -m jtag -o "p;new.puf"
    quartus_pgm -c 1 -m jtag -o "p;new.wkey"
    quartus_pgm -c 1 -m jtag -o "v;new.puf"
    quartus_pgm -c 1 -m jtag -o "v;new.wkey"