zynq-7000 ap soc における暗号化キーの変更 (xapp1223)

14
XAPP1223 (v1.0) 2014 11 6 japan .xilinx.com 1 本資料は表記のバージ ョ ンの英語版を翻訳し たもので、内容に相違が生じ る場合には原文を優先し ます。 資料によっては英語版の更新に対応していないものがあります。 日本 語版は参考用 と し てご使用の上、 最新情報につき ま し ては、 必ず最新英語版を ご参照 く だ さ い。 概要 セキュア エンベデッ ド システムの暗号化キーは、 セキュ リ テ ィ レベルを向上させるために変更する必要があ り ます。 シ ステム設計者は、 まず最初に暗号化キーを変更すべきか否かなどの暗号化要件を定義する必要があ り ます。 暗号化要件の 定義には、 情報の重要度、 エンベデ ッ ド システムの使用、 エンベデッ ド システムに起こ り得る脅威を考慮します。 このア プ リ ケーシ ョ ン ノー ト では、 エンベデッ ド システムの暗号化キー要件について簡単に説明し ます。 リ フ ァ レンス デザイ ンを使用して、 Zynq®-7000 All Programmable (AP) SoC デバイスで AES キーを変更する方法について解説し ます。 このアプリケーション ノートの リファレンス デザイン は、ザイリンクスのウェブサイトからダウンロードできます。デザ イン フ ァ イ ルの詳細は、 12 ページの 「リファレンス デザイン」 を参照してください。 含まれるシステム リファレンス デザイン (zed_key_change) には、 次の ソ フ ト ウ ェ ア プロジェク トが含まれています。 ファースト ステージ ブー ト ローダー (FSBL) BBRAM キー ローダー (BKL) パーテ ィ シ ョ ン ローダー hello_world bbram_key_loader_src および partition_loader_src ディレクトリにソース コードがあります。 completed ディレ ク ト リには、 コンパイル済みのプロジェク トおよび zed_key_change.bifzed_key_change.mcszed_bbram1.nkyzed_bbram2.nky ファイルが含まれています。 はじめに AES (Advanced Encryption Standard) などの最新の暗号化方式の場合、 暗号化アルゴ リ ズムは公開されているため、 システ ムのセキ ュ リ テ ィ は暗号化キーのセキ ュ リ テ ィ に依存し ます。Zynq-7000 AP SoC デバイスでは、AES キーをワンタイム ログラマブル (OTP) eFUSE アレイまたはバックアップ バッテリ付き RAM (BBRAM) のいずれかに格納でき ます。BBRAM を使用する場合は、 暗号化キーを変更でき ます。 キーを変更する こ と で、 攻撃者がキーを解読するために費やす時間が増 大し、 またキーで保護する こ とで情報量を削減できます。 Zynq-7000 AP SoC デバ イ ス よ り 前のデバ イ ス では、 AES 暗号化キーは iMPACT またはサードパーティのソフトウェアを使 用して FPGA にプログラムされます (通常、 システムが実際に現場で展開される前)。 そして、 デバイスが存続する限り同 じ暗号化キーが使用されます。 Zynq-7000 AP SoC デバ イ ス の場合は、 Zynq-7000 デバイス CPU で動作するセキュア キー で暗号化キーを変更でき ます。 このアプ リ ケーシ ョ ン ノートでは、異なるパーティションに対して BBRAM キーを変更す る方法について説明します。 このキーは、 ブート時またはランタイム時に変更できます。 「暗号化キーの要件を定義」 で、 一般的なセキ ュ リ テ ィ について説明し、 Zynq-7000 AP SoC デバイスでキーを変更する理 由を示します。 リファレンス デザインは、 Zed または MicroZed 評価プラ ッ ト フォーム上で実行されます。 JTAG ピンの外 部接続の要件を含むボード のセ ッ ト ア ッ プについては、 3 ページの 「評価ボード」 で説明 し ます。 プ ロ ジ ェ ク ト 開発の概 要は、 4 ページの 「リファレンス デザインの開発」 で説明し ます。 Bootgen を使用したソフトウェア プ ロ ジ ェ ク ト の開発 およびそれらを統合してイメージを生成するプロセスについて説明します。 Zed 評価ボードにおけるキー変更のハード ウ ェア検証については、 11 ページの 「システム テスト」 で説明し ます。 アプリケーション ノート : Zynq-7000 AP SoC XAPP1223 (v1.0) 2014 11 6 Zynq-7000 AP SoC における暗号化キーの変更 著者 : Lester Sanders

Upload: phungxuyen

Post on 28-Jan-2017

248 views

Category:

Documents


10 download

TRANSCRIPT

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 1

本資料は表記のバージ ョ ンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。 資料によっては英語版の更新に対応していないものがあります。 日本語版は参考用としてご使用の上、 最新情報につきましては、 必ず最新英語版をご参照く ださい。

概要セキュア エンベデッ ド システムの暗号化キーは、 セキュ リ ティ レベルを向上させるために変更する必要があ り ます。 システム設計者は、 まず最初に暗号化キーを変更すべきか否かなどの暗号化要件を定義する必要があ り ます。 暗号化要件の定義には、情報の重要度、エンベデッ ド システムの使用、エンベデッ ド システムに起こ り得る脅威を考慮します。 このアプ リ ケーシ ョ ン ノートでは、 エンベデッ ド システムの暗号化キー要件について簡単に説明します。 リ ファレンス デザインを使用して、 Zynq®-7000 All Programmable (AP) SoC デバイスで AES キーを変更する方法について解説します。

このアプリ ケーシ ョ ン ノートの リ ファレンス デザインは、ザイ リ ンクスのウェブサイ トからダウンロードできます。デザイン ファ イルの詳細は、 12 ページの 「リ ファレンス デザイン」 を参照してください。

含まれるシステムリ ファレンス デザイン (zed_key_change) には、 次のソフ ト ウェア プロジェク トが含まれています。

• ファース ト ステージ ブート ローダー (FSBL)

• BBRAM キー ローダー (BKL)

• パーティシ ョ ン ローダー

• hello_world

bbram_key_loader_src および partition_loader_src ディレク ト リにソース コードがあり ます。 completed ディレク ト リには、 コンパイル済みのプロジェク トおよび zed_key_change.bif、 zed_key_change.mcs、 zed_bbram1.nky、zed_bbram2.nky ファイルが含まれています。

はじめにAES (Advanced Encryption Standard) などの最新の暗号化方式の場合、 暗号化アルゴ リ ズムは公開されているため、 システムのセキュ リティは暗号化キーのセキュ リティに依存します。Zynq-7000 AP SoC デバイスでは、AES キーをワンタイム プログラマブル (OTP) eFUSE アレイまたはバッ クアップ バッテ リ付き RAM (BBRAM) のいずれかに格納できます。BBRAMを使用する場合は、 暗号化キーを変更できます。 キーを変更するこ とで、 攻撃者がキーを解読するために費やす時間が増大し、 またキーで保護するこ とで情報量を削減できます。

Zynq-7000 AP SoC デバイスよ り前のデバイスでは、AES 暗号化キーは iMPACT またはサードパーティのソフ ト ウェアを使用して FPGA にプログラムされます (通常、 システムが実際に現場で展開される前)。 そして、 デバイスが存続する限り同じ暗号化キーが使用されます。 Zynq-7000 AP SoC デバイスの場合は、 Zynq-7000 デバイス CPU で動作するセキュア キーで暗号化キーを変更できます。 このアプ リ ケーシ ョ ン ノートでは、異なるパーティシ ョ ンに対して BBRAM キーを変更する方法について説明します。 このキーは、 ブート時またはランタイム時に変更できます。

「暗号化キーの要件を定義」 で、 一般的なセキュ リ テ ィについて説明し、 Zynq-7000 AP SoC デバイスでキーを変更する理由を示します。 リ ファレンス デザインは、 Zed または MicroZed 評価プラ ッ ト フォーム上で実行されます。 JTAG ピンの外部接続の要件を含むボードのセッ ト アップについては、 3 ページの 「評価ボード」 で説明します。 プロジェク ト開発の概要は、 4 ページの 「リ ファレンス デザインの開発」 で説明します。 Bootgen を使用したソフ ト ウェア プロジェク トの開発およびそれらを統合してイ メージを生成するプロセスについて説明します。 Zed 評価ボードにおけるキー変更のハードウェア検証については、 11 ページの 「システム テス ト 」 で説明します。

アプリケーシ ョ ン ノート : Zynq-7000 AP SoC

XAPP1223 (v1.0) 2014 年 11 月 6 日

Zynq-7000 AP SoC における暗号化キーの変更著者 : Lester Sanders

必要なハードウェアおよびソフ トウェア

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 2

注記 : Zed とは、 Zynq 評価および開発を意味します [参照 1]。

このアプリ ケーシ ョ ンでは、ザイ リ ンクスのソフ ト ウェア開発キッ ト (SDK) に関する知識があるこ とを前提と して説明しています。セキュア アプリ ケーシ ョ ンに SDK を使用するための入門ガイ ドは、『Zynq-7000 All Programmable SoC のセキュア ブート 』 (XAPP1175) [参照 2] を参照してください。

必要なハードウェアおよびソフ トウェアZynq-7000 デバイスで暗号化キーを変更する際のハードウェアおよびソフ ト ウェア要件は次のとおりです。

• Zed または MicroZed 評価ボード

• AC 電源アダプター (12VDC)

• USB Type-A/Micro-B ケーブル

• ザイ リ ンクス プラ ッ ト フォーム ケーブル USB II

• JTAG–MIO ワイヤ コネクタ (x 4)

• Vivado® Design Suite 2014.3

• ザイ リ ンクス ソフ ト ウェア開発キッ ト (SDK) 2014.3

暗号化キーの要件を定義エンベデッ ド システム設計者は、 システムの暗号化キーの要件を定義する必要があ り、 キーの変更が必要か否かを判断します。暗号化キーの要件は、エンベデッ ド システムで使用される情報の重要度、エンベデッ ド システムの使用モデル、およびシステムへの脅威によって決定されます。

エンベデッ ド システムで使用される情報の重要度

Zynq-7000 AP SoC デバイスで使用されるパーティシ ョ ンは、ソフ ト ウェア、データ、およびハード ウェア (ビッ ト ス ト リーム) の 3 種類あり ます。 ハード ウェアやソフ ト ウェアでは、 競合性の高い IP が含まれる場合に重要と判断されます。 データ パーティシ ョ ンでは、 患者カルテなど機密情報と して保護する必要がある情報が含まれる場合に重要と判断されます。

エンベデッ ド システムの使用モデル

エンベデッ ド システムの使用形態によって、 攻撃のリ スクや確率が左右されます。 セキュ リ テ ィ ガードで保護されたセキュ リティ範囲内でエンベデッ ド システムが使用される場合、内部攻撃の対象とな り ますが、盗用や物理的な攻撃にさらされる可能性が低下します。デバイスが現場で使用され、有線/無線通信を介してインターネッ ト接続される場合は、デバイスが盗用されたり、中間者攻撃でデータが傍受される可能性があ り ます。フ ィールド エンベデッ ド システムがリモートソフ ト ウェア アップデート をサポートする場合は、 通常、 暗号化キーの変更が必要です。

エンベデッ ド システムへの脅威

エンベデッ ド システムへの脅威の例と して、物理的攻撃と リモート ハッキングの 2 つを紹介します。本来、脅威は情報の重要度やエンベデッ ド システムの使用モデルと深く関係します。 使用モデルを用いて、 サイ ドチャネル DPA (差分電力解析) 攻撃などの手元のシステムを対象と した物理的攻撃、 またはサービス妨害などを引き起こすインターネッ ト経由のリモート攻撃を受け易いか否かを判断できます。

情報の重要度は、 必要な保護レベルの判断に役立ちます。 必要な保護レベルは、 機密情報への不正アクセス、 IP の盗用、あるいはシステムの機能障害 (サービス妨害) を引き起こす原因などによって異なり ます。

評価ボード

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 3

モバイル アプリ ケーシ ョ ンでエンベデッ ド システムが使用される場合は、デバイスが盗用されているかを所有者が認識できるこ とがあ り ます。 手頃な価格でデバイスを置き換えるこ とができ、 暗号化キーをゼロ化すれば、 物理的な攻撃を受けにく くな り ます。

デバイスのリモート ハッキングによる情報流出が脅威の対象となる場合には、キーを変更して攻撃から保護するこ とが可能です。

暗号化キーを変更する理由

暗号化キーを変更する理由は次のとおりです。

• 最良のセキュ リティ対策 - ク ローズド システムの場合でも、 定期的にキーを変更する必要があ り ます。

• オープン システム - エンベデッ ド システムのソフ ト ウェア サプライヤーはそれぞれ異なる暗号化キーを使用する必要があ り ます。

• 連結システム - エンベデッ ド システムは、有線および無線イーサネッ ト を使用して連結されます。連結される と、優れたシステムになり ますが、 リモート ハッカーへアクセス ポイン ト を提供するこ とにな り ます。

• 複数の非公開のピア間通信 - 複数のリモート エンティティへ機密情報を送信する場合は、 異なる暗号化キーを使用する必要があ り ます。

評価ボードリ ファレンス デザインは、 ザイ リ ンクス と Avnet 社の評価ボードを使用します。 ザイ リ ンクスの Zynq-7000 AP SoC デバイス評価プラ ッ ト フォームは ZC702 と ZC706 の 2 つで、 Avnet 社の Zynq-7000 デバイス評価プラ ッ ト フォームは、 Zed とMicroZed ボードの 2 つです。早期にリ リースされた Zed ボードは、セキュ リ ティをサポート していません。ZC702 と ZC706ボードには、 BBRAM 用のバッテ リが実装されています。

ボードのセッ ト アップ要件は、 GPIO ピンから JTAG ポートへ外部接続を行う こ とです。 この接続は、最新のボード上で簡単に定義および実装できます。 リ ファレンス デザインでは、 安価な Avnet 社製ボードを使用します。

図 1 に Zed ボードのセッ ト アップを示します。 JTAG ポートは J15 コネクタへ接続します。 JTAG TMS、 TCK、 TDO、 TDIポートは、 ボード上に表記されています。 MIO ポートは、 JE1 コネク タへ接続します。 Zed および MicroZed ボード上のMIO (GPIO) と JTAG の接続は比較的単純です。

リファレンス デザインの開発

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 4

Zed および MicroZed ボードは、 BBRAM 用のバッテ リ を備えていません。 プロ ト タイプのテス トでは、 BBRAM のバッテリの代わりに電源を使用できます。 Zed ボードでは、 電源を J16 の BATT/GND 端子に接続します。 MicroZed ボードでは、電源を S12 に接続します。 図 1 は、 リ ファレンス デザインを使用した MicroZed の接続の写真です。

評価ボードを使用してプロ ト タイプ化した後、ボード ト レースを用いて GPIO と JTAG ポート を接続したカスタム ボードを開発できます。

リファレンス デザインの開発BBRAM キーを変更するシステム開発では、 4 つのソフ ト ウェア プロジェ ク ト (FSBL (ファース ト ステージ ブート ローダー )、 BBRAM キー ローダー (BKL)、 パーティシ ョ ン ローダー、 hello_world) を使用します。 リ ファレンス デザインでは、FSBL、BBRAM キー ローダー、およびパーティシ ョ ン ローダーがオリジナルの暗号化キーを使用し、hello_world パーティシ ョ ンが 2 つ目の暗号化キーを使用します。

このアプリ ケーシ ョ ン ノートでは、 hello_world パーティシ ョ ンのロード /復号化の前に暗号化キー ロード ソフ ト ウェアが実行されるよ うに、デバイス上でロード /実行の順序を変更する方法について説明します。 これは、 BBRAM キー ローダーとパーティシ ョ ン ローダーを使用して実行します。

キーの変更には、 パーティシ ョ ンのロード /実行の順序を変更する必要があるため、 パーティシ ョ ンをロードする標準フローを変更しなければなり ません。 変更されない場合は、 FSBL がすべてのパーティシ ョ ンをロード して、 ロード された最後のパーティシ ョ ンに実行を移します。 すでに述べたよ うに、 hello_world パーティシ ョ ンは新しい暗号化キーを使用して暗号化されています。 BBRAM キー ローダーがロード されても実行されなければ、 hello_world パーティシ ョ ンの復号化で使用される BBRAM キーがアップデート されません。

X-Ref Target - Figure 1

図 1 : Zed ボード上における MIO と JTAG の接続

リファレンス デザインの開発

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 5

図 2 に、 エンベデッ ド システムをブートする際の標準フローを示します。

図 3 に、暗号化キーが変更される リ ファレンス デザインのフローを示します。新しいキーで暗号化されたパーティシ ョ ンを復号化できるよ うにパーティシ ョ ンのロード /実行の順序が変更されています。

リ ファレンス デザインでは、 次のタスクを使用して AES キーを変更します。

• ブロ ッ ク RAM キー ローダーおよびパーティシ ョ ン ローダー ソフ ト ウェア プロジェク ト

• JTAG ポートの有効化/無効化

• すべてのソフ ト ウェア プロジェク ト を実行するためのハンドオフ コード

• Bootgen イ メージ フォーマッ ト (BIF) ファ イルの変更

アドレス マップと実行ハンドオフ

リ ファレンス デザインでは、 FSBL、 BBRAM キー ローダー、 パーティシ ョ ン ローダー、 および hello_world が連続して実行される必要があ り ます。標準的な FSBL フローでは、最後のパーティシ ョ ンのみ実行されます。1 つのソフ ト ウェア パーティシ ョ ンから次のパーティシ ョ ンへ実行を移すために、 ソフ ト ウェア プロジェク トには HandoffExit 関数が含まれます。HandoffExit 関数は、 次に実行するパーティシ ョ ンのロード アドレスを使用します。 表 1 に、 リ ファレンス デザインで使用されるソフ ト ウェア プロジェク トのアドレス マップを示します。

X-Ref Target - Figure 2

図 2 : システム開発の標準フロー

X-Ref Target - Figure 3i

図 3 : 暗号化キーを変更する場合のロード /実行の順序

表 1 : アドレス マップ

ソフ トウェア アドレス

ブロ ッ ク RAM キー ローダー 0xFFFFC000

パーティシ ョ ン ローダー 0x200000

hello_world 0x300000

リファレンス デザインの開発

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 6

このア ド レス マップ、 HandoffExit 関数、 および BIF partition_owner 属性 (後で説明) を使用して、 実行順序は FSBL →BBRAM キー ローダー → パーティシ ョ ン ローダー → hello_world とな り ます。

FSBL (ファースト ステージ ブートローダー ) と Hello_World プロジェク ト

SDK の新しいプロジェク ト テンプレート を使用して、 FSBL と hello_world プロジェク ト をコンパイルします。 hello_worldプロジェク トは、 変更なしでコンパイルされます。 最初のコンパイルの後に FSBL プロジェク トにわずかな変更が必要です。

このリ ファレンス デザインはセキュア モードで実行されるため、 JTAG ポートは無効となり ます。 BBRAM キー ローダーで使用されるセキュア キー ド ラ イバーは JTAG ポート を使用します。JTAG ポート を有効にする場合、fsbl_src/main.cコードを変更します。 DAP/JTAG ポート を有効にするには、 main.c 内のコードに CTRL(23) を書き込みます。

標準的な FSBL は、 FSBL の直後にビッ ト ス ト リームがパーティシ ョ ン と してロード されるよ うにロード順序を強制的に実行します。 システムによっては、 FSBL コードを変更してこの要件を緩和する必要があ り ます。

1. コマンド プロンプ トに 「xsdk &」 と入力します。

2. [Create Application Project] をク リ ッ ク します。

3. [New Project Templates] ダイアログ ボッ クスで [Project Name] に 「fsbl」 と入力して [Hardware Platform] を選択して、[Next] をク リ ッ ク します。

4. [New Project Templates] で [Zynq FSBL] を選択して [Finish] をク リ ッ ク します。リ ファレンス デザインの fsbl/src で、main.c を fsbl_src/main.c に置き換えます。

5. [Project Explorer] ペインで、[fsbl] を右ク リ ッ ク して [C/C++ Build Settings] → [Symbols] → [Defined Symbols +] をク リ ック します。 テキス ト ボッ クスに 「FSBL_DEBUG_INFO 」 と入力して、 [OK] をク リ ッ ク します。

6. これらの手順を繰り返して、hello_world ソフ ト ウェア プロジェク ト を作成します。hello_world ソフ ト ウェア プロジェク トのコード変更は不要です。

7. [Project Explorer] ペインで、 [hello_world] をダブルク リ ッ ク して [src] → [lscript.ld] をク リ ッ ク し、[ps7_ddr_0_S_AXI_BASEADDR] のベース アドレスに 「0x00300000」 と入力します。

BBRAM キー ローダー BBRAM キー ローダーは、 SDK の lib/sw_services ディ レク ト リのセキュア キー ド ラ イバー (SKD) ライブラ リ を使用し ます。 こ の SKD を用いて、 eFUSE および BBRAM キーをプロ グ ラ ムでき ます。 以前は、 iMPACT または BPMMicrosystems 社製デバイス プログラマを使用して暗号化キーをプログラムしていました。

BBRAM キー ローダー ソフ ト ウェア プロジェク ト を作成するには、まず次のコマンドを使用して、BBRAM キー ローダーボード サポート パッケージを作成します。

1. [File] → [New] → [Board Support Package] をク リ ッ ク します。

2. [Project Name] に「bbram_key_loader_bsp_0」 と入力します。[Hardware Platform] で [zed_hw_platform] を選択して、[Finish]をク リ ッ ク します。

3. [Board Support Package Settings] ウ ィンド ウで [xilskey] をオンにして、 [Finish] をク リ ッ ク します。

4. [File] → [New] → [Application Project] をク リ ッ ク します。

5. [Project Name] に「bbram_key_loader」 と入力して、[Hardware Platform] で [zed_hw_platform] を選択します。[Use Existing]をオンにして [bbbram_key_loader_bsp_0] BSP を選択して、 [Next] をク リ ッ ク します。

6. [New Project Templates] で [Empty Application] を選択します。

7. [Project Explorer] ペインで [bbram_key_loader] を右ク リ ッ ク して [src] をク リ ッ ク し、 [Import] → [General] → [File System]をク リ ッ ク して、 [Next] をク リ ッ ク します。

8. [Browse] で、 リ ファレンス デザインの xilskey_v2_0/examples ディレク ト リ を選択して、 [OK] をク リ ッ ク します。

9. xilskey_bbram_example.c、 xilskey_input.h、 および handoff.S ファ イルを選択します。

xilskey ソース ファ イルも SDK のインス トール エリ ア (lib/sw_services の下) にあ り ます。 xilskey_v2_0/examplesディ レ ク ト リ の リ フ ァ レンス デザイ ンのコ ピーには、 xilskey_input.h にサンプルの AES キーが追加され、

リファレンス デザインの開発

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 7

xilskey_bbram_example.c にハンドオフ コードが追加されています。 ソース ファ イルを追加した後、 [Finish] をク リ ッ ク します。

10. [Project Explorer] ペインで、 [bbram_key_loader] をダブルク リ ッ ク して [src] → [lscript.ld] をク リ ッ ク し、[ps7_ram_0_S_AXI_BASEADDR] のベース アドレスに 「0xFFFFC000 」 と入力します。

表 2 に、 ZC702 および Zed/MicroZed ボードで使用される接続を示します。

MIO と JTAG の接続は、 xilskey_input.h ファ イルに定義されています。

セキュア キー ド ラ イバーのドキュ メン トは次のディ レク ト リにあ り ます。

$ Xilinx/../SDK/2014.3/data/embeddedsw/lib/sw_services/xilskey_v2_0/doc

パーティシ ョ ン ローダー

パーティシ ョ ン ローダーは、 ソース アドレスからデスティネーシ ョ ン アドレスへシングル パーティシ ョ ンをコピーする小さなコード セッ トです。 パーティシ ョ ン ローダーは、 Zynq-7000 AP SoC 上の 2 つのハード ウェア機能 (デバイス コンフ ィギュレーシ ョ ン ダイレク ト メモ リ アクセス コン ト ローラー (DevC DMAC) および AES Decryptor) に対して簡単にアクセスできるよ うにインターフェイスを提供します。 devcfg デバイス ド ラ イバーは、SDK/../data/embeddedsw/XilinxProcessorIPLib/drivers/devcfg_v3_1 ディ レク ト リにあ り ます。 パーティシ ョ ン ローダーは、 この devcfg デバイス ド ラ イバーの関数を使用して、 DevC DMAC や AES Decryptor を制御します。 コピーされるパーティシ ョ ンがソフ ト ウェアまたはデータのいずれかの場合は、 PcapDataTransfer 関数が使用されます。 コピーされるパーティシ ョ ンがハード ウェア (ビッ ト ス ト リーム) の場合は、 PcapLoadPartition 関数が使用されます。

パーティシ ョ ン ローダーは、 5 つの引数 (ソース アドレス、 デスティネーシ ョ ン アドレス、 ソース サイズ、 デスティネーシ ョ ン サイズ、 およびコピー時に復号化機能を介すか否かを指定する引数) を使用します。 ソース アドレスは、 パーティシ ョ ンの Bootgen で生成された Quad SPI (Quad Serial Peripheral Interface) フラ ッシュ メモ リのアドレスです。このアドレスは、 SDK Flash Writer によって書き込みが行われます。 デスティネーシ ョ ン アドレスは、 Zynq-7000 AP SoC デバイス内のDDR、 オンチップ メモ リ (OCM)、 またはコンフ ィギュレーシ ョ ン メモ リ内のアド レスです。 暗号化が使用される場合、パーティシ ョ ンのソースの長さはデスティネーシ ョ ンの長さよ り長くな り ます。

パーテ ィ シ ョ ンのソースおよびデステ ィ ネーシ ョ ンのア ド レス /サイズを決定するには次の 2 つの方法があ り ます。[FSBL_DEBUG_INFO] シンボルがコンパイルのオプシ ョ ンである場合は、FSBL デバッグ ログ ファ イルにアドレスおよびサイズ情報が含まれます。

表 2 : MIO と JTAG の接続

ピン名 ZC702 MIO Zed MIO MicroZed MIO

TDI 17 13 13

TDO 18 10 10

TCK 19 11 11

TMS 20 12 12

リファレンス デザインの開発

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 8

図 4 の FSBL デバッグ ログ ファ イルの最後の部分に、 bbram_key_loader パーティシ ョ ンのソースおよびデスティネーシ ョン アドレス とサイズを示しています。

パーティシ ョ ンのアドレスおよびサイズは、 -debug コマンド オプシ ョ ンを使用して Bootgen を実行した場合にも提供されます。

パーティシ ョ ン ローダーの実行中に DevC DMAC が停止した場合は、サイズ (SRC LEN、 DEST LEN) が適切であるかを確認して ください。 パーティシ ョ ンのサイズ情報は提供されますが、 ない場合はバイ ト数またはワード数という単位で必ず必要です。 ワード とバイ ト間の変換には、 次の python コードを使用します。

int(“f6d20”,16)10109761010976 * 44043904hex(4043904)0x3db480

リ ファレンス デザインでは、パーティシ ョ ン ローダーが AES 復号化機能を介して hello_world ソフ ト ウェアを Quad SPI フラ ッシュ メモ リから DDR へコピーします。

次の手順に従って、 空のアプリ ケーシ ョ ンと してパーティシ ョ ン ローダー ソフ ト ウェア プロジェク ト を作成します。

1. [Project Explore] ペインで [partition_loader] を右ク リ ッ ク して、 [src] → [Import] をク リ ッ ク します。

2. [Import] ダイアログ ボッ クスで [General] → [File System] を選択して [Next] をク リ ッ ク します。

3. [Browse] で、リ ファレンス デザインの partition_loader_src ディ レク ト リ を選択して、[OK] をク リ ッ ク します。

4. [Select All] をク リ ッ ク して、 [Finish] をク リ ッ ク します。

5. [Project Explore] ペインで [partition_loader] をダブルク リ ッ ク して、 [src] → [lscript.ld] をク リ ッ ク します。

6. [ps_ddr_0_S_AXI_BASEADDR] のベース アドレス と して 「0x00200000」 と入力します。

SDK Flash Writer のロードの後、 bbram_key_loader パーティシ ョ ンが暗号化されて Quad SPI フラ ッシュ メモ リ内に格納されます。 bbram_key_loader パーテ ィ シ ョ ンを DDR へ復号化/ コ ピーする標準的な FSBL 動作は、 暗号化キーがxilskey_input.h 内に含まれているため使用でき ません。 パーテ ィ シ ョ ン ローダーは、 復号化機能を介さずにbbram_key_loader パーティシ ョ ンを DDR へコピーします。 BRAM キー ローダーを使用する際に、 パーティシ ョ ンは復号化されて OCM へコピーされます。 パーティシ ョ ン ローダーは、 OCM から実行されます。

パーティシ ョ ン ローダーは、 パーティシ ョ ンのコピーや復号化のほかにも、暗号化された暗号化キーを Zynq-7000 デバイスの OCM 内に格納して、 使用直前にキーを復号化するタスク もサポート しています。

X-Ref Target - Figure 4

図 4 : bbram_key_loader パーティシ ョ ンのソースおよびデスティネーシ ョ ン アドレスを示すログ ファイル

リファレンス デザインの開発

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 9

BootgenBootgen は、パーティシ ョ ンを統合して BIN または MCS フォーマッ トでイ メージを生成する SDK ツールです。Bootgen を使用するには、 Bootgen GUI またはテキス ト エディ ターを使用して Bootgen イ メージ フォーマッ ト (BIF) ファ イルを作成します。 BIF ファ イルは、 イ メージ内に含まれるパーティシ ョ ンの リ ス トです。 リ ス ト内の各パーティシ ョ ンに対して、BIF ファ イルはオプシ ョ ンでロード アド レス、 暗号化、 認証を指定するパーテ ィシ ョ ン属性を含める こ とができます。partition_owner 属性は、 FSBL がパーティシ ョ ンをロードするか否かを制御します。 partition_owner 属性は、 U-Boot などのセカンド ローダー ( リ ファレンス デザインではパーティシ ョ ン ローダー) がパーティシ ョ ンをロードする場合に使用されます。

リ ファレンス デザインを用いて、 ロード /実行の順序要件が満たされたイ メージを生成する方法を示します。

Bootgen イ メージ フォーマッ ト ファイル

現在、Bootgen GUI では複数の暗号化キーを指定するこ とができません。 リ ファレンス デザイン用の BIF を生成するには、Bootgen GUI を使用してテンプレート BIF を生成した後、 テキス ト エディ ターを使用して BIF 内のキーを定義します。

1. SDK で [Tools] → [Create Zynq Boot Image] をク リ ッ ク します。

2. [Use encryption] をオンにします。

3. [Key File] で [zed_bbram1.nky] を参照 ( リ ファレンス デザインのキー ディ レク ト リにある ) して、 [Add] をク リ ッ クします。

4. [File path] で fsbl.elf を参照します。

5. [Partition type] に [bootloader] を選択します。 [Encryption] に [aes] を選択して、 [OK] をク リ ッ ク します。

6. fsbl.elf に対して [Add] の手順を繰り返して bbbram_key_loader.elf、 partition_loader.elf、 およびhello_world.elf を追加します。

7. [Partition type] を [datafile] に変更します。

8. [Browse] を使用して、 [Output BIF file path:] に [zed_key_change.bif] を指定します。

9. [Browse] を使用して、 [Output path:] に [zed_key_change.mcs] を指定します。

10. [Create Image] をク リ ッ ク します。

リファレンス デザインの開発

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 10

図 5 に、 4 つのパーティシ ョ ンが追加された Bootgen GUI インターフェイスを示します。

11. テキス ト エディ ターを使用して、 2 つ目の暗号化キー (zed_bbram2.nky) を Bootgen GUI で生成した BIF に追加します。 partition_owner 属性を hello_world パーティシ ョ ンに追加します。 最終的な BIF は、 completed ディ レク ト リのzed_key_change.bif に配置されます。

12. コマンド プロンプ トで、 次のコマンドを実行して MCS ファイルを生成します。

bootgen -image zed_change_key.bif -o zed_change_key.mcs -encrypt bbram -w on

または、 SDK を使用して、手作業で編集した zed_change_key.bif を Bootgen GUI に読み込んで、GUI を使用してMCS ファ イルを生成するこ と も可能です。

X-Ref Target - Figure 5

図 5 : Bootgen GUI を使用した BIF 生成

システム テスト

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 11

システム テスト暗号化キーの変更をテス トするには、 SDK Flash Writer を使用して Quad SPI フラ ッシュ メモ リに zed_key_change.mcsを書き込みます。 QSPI へ書き込みできない場合は、 Zed/MicroZed ボードのスイ ッチを JTAG プログラ ミ ング モードに設定してこの動作を行います。 すべてのパーティシ ョ ンは、 Quad SPI フラ ッシュ メモ リにロード されます。

1. SDK で [Xilinx Tools] → [Program Flash] をク リ ッ ク します。

2. [Program Flash Memory] ダイアログ ボッ クスで、 [Browse] を使用してイ メージ ファイルと して zed_key_change.mcsを選択します。

3. [Offset] で、 「0x0」 を指定します。

4. [Program] をク リ ッ ク します。

5. Zed ボードを使用し、 バッテ リが追加されない場合は、 J16 BATT/GND 端子に電源を接続します。 iMPACT を使用して、 最初の zed_bbram1.nky キーを BBRAM にプログラムします。

impact -batch xapp1223-crypto-key-change/keys/bbram1_key_load.cmd

6. 図 1 および表 2 に定義されている とおりに、 Platform Cable USB II を JE1 コネク タに置き換えます。

7. Quad SPI フラ ッシュ メモ リへのロードが完了した後、ボードの電源を切断し、Mode Select ピンを QSPI に切り換えてボードに電源を投入します。 TeraTerm などの通信端末を起動します。 ボード上の PS_RST (RST) ボタンを押します。

図 6 に、 予想されるデバッグ ログ出力の最後の部分を示します。

8. リ ファレンス デザインのログを使用して、BBRAM キー ローダーが BBRAM に書き込みを行い、パーティシ ョ ン ローダーへ実行をハンドオフする こ と を検証します。 パーティシ ョ ン ローダーが AES 復号化機能を介して hello_worldパーティシ ョ ンを DDR へコピーした後 hello_world へ実行をハンドオフし、 通信端末に 「Hello World」 が書き込まれるこ とを検証します。

インプリ メンテーシ ョ ンの注意事項このアプリ ケーシ ョ ン ノートでは、 暗号化キーを変更する方法について説明しています。 実際のシステムでは、 このセクシ ョ ンで言及するこ と以外にも考慮すべき事項があ り ます。

X-Ref Target - Figure 6

図 6 : BBRAM キー変更のログ出力

まとめ

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 12

Zynq-7000 AP SoC デバイスにおける暗号化キーの変更は、 エンベデッ ド システムへ不正にアクセスして MIO/EMIO からJTAG ポート間の接続で信号を傍受する攻撃者に対して、わずかな防御策に過ぎません。キーを保護するには、外部の JTAG接続を保護するこ とが不可欠です。 改ざん対策については、 『Virtex-6 および 7 シ リーズ FPGA での不正操作防止デザインの開発』 (XAPP1084) [参照 3] を参照してください。

Zynq-7000 AP SoC デバイスの場合、 BBRAM の書き込みト ランザクシ ョ ンはプログラマブル ロジッ ク (FPGA) セクシ ョ ンを消去してしま うため、 ビッ ト ス ト リームの再度書き込みが必要です。 既に述べたとおり、 パーティシ ョ ンの書き込みにはパーティシ ョ ン ローダーを使用します。

リ ファレンス デザインでは、 2 つの暗号化キーを使用します。 この方法では、 任意のキーの数に拡張可能です。 任意数のBBRAM キー ローダー /パーティシ ョ ン ローダーを BIF に含めるこ とができます。

リ ファレンス デザインでは、 ランタイム中にハンドオフが実行されるため、 ブート プロセス と ランタイム プロセスの両方を使用します。

パーティシ ョ ン ローダーを使用する場合、 リモートで リ キーイングできます。 このアプリ ケーシ ョ ン ノートでは、キーの交換については言及していません。 リモートのエンティティ (ピア、 ホス ト ) へアクセスするには、 暗号化キーを交換する必要があ り、 それを暗号化、 また符号化する必要があ り ます。 Bootgen はシングル パーティシ ョ ンの暗号化/符号化をサポート しています。 256 ビッ トの暗号化キーはデータ パーティシ ョ ンです。 格納されるキーは、 Zynq-7000 デバイスのセキュ リ テ ィ領域内にある NVM、 DDR、 またはオンチップ メモ リ内で暗号化され、 キーが必要なと きにパーティシ ョ ンローダーがコピー /復号化します。

一般にセキュア キー ド ラ イバーが xilskey_input.h ファ イルにハード コード されている暗号化キーを BBRAM へ書き込みます。 一部のアプリ ケーシ ョ ンでは、 OCM または AXI ブロ ッ ク RAM のメモ リ アドレス内にキーが暗号化されて格納されます。 xilskey_input.h 内のハード コード されたキーではなく、 キー用のメモ リ アドレスを使用する場合には、セキュア キー ド ラ イバーにわずかなコード変更が必要です。

BBRAM キーは、 Zynq-7000 デバイ スのセキ ュ リ テ ィ 領域内に格納されるため安全です。 キーが不要な場合は、xilskey_input.h でキーの値に 0 を使用して、セキュ リ ティ オプシ ョ ンをゼロ化します。ゼロ化は、BBRAM キー ローダー /パーティシ ョ ン ローダーのペアを使用して実行できます。暗号化キーがロード された後、 CTRL(23) の書き込みを実行して xilskey_bram_example.c で JTAG ポート を無効にします。

暗号化キー要件の指定では、 デバイスのライフサイクルを考慮してキー要件を定義する必要があ り ます。 ブート時にロード されるパーティシ ョ ンで使用される暗号化キーは、 ブート時に BBRAM 内に存在している必要があ り ます。

注記 : BBRAM キー ローダー /パーティシ ョ ン ローダー操作を実行してランタイム中に暗号化キーを変更した後は、 電源投入時に使用される暗号化キーを リ ロードする必要があ り ます。

まとめこのアプ リ ケーシ ョ ン ノートでは、 Zynq-7000 All Programmable SoC で BBRAM キーを変更する方法について説明しました。 リ ファレンス デザインで使用されるテクニッ クを利用して、 必要に応じて複数回キーを変更できます。 キーは、 ソフト ウェア、 データ、 またはハード ウェアのパーティシ ョ ンに対して変更できます。 BBRAM キー ローダーとパーティシ ョン ローダーを使用して、 それぞれのキー要件に対してキーを変更できます。

リファレンス デザインこのアプリ ケーシ ョ ン ノートの リ ファレンス デザインは、 ザイ リ ンクスのウェブサイ トからダウンロードできます。

表 3 に、 リ ファレンス デザインの詳細を示します。

表 3 : リファレンス デザインの詳細

パラメーター 説明

全般

開発者 Lester Sanders

参考資料

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 13

参考資料1. 『ZedBoard スタート アップ ガイ ド』

2. 『Zynq-7000 All Programmable SoC のセキュア ブート 』 (XAPP1175)

3. 『Virtex-6 および 7 シ リーズ FPGA での不正操作防止デザインの開発』 (XAPP1084)

4. 『ZedBoard Configuration and Booting Guide』 zedboard.org/support/design/1521/11

5. 『ZedBoard Hardware User’s Guide』 zedboard.org/sites/default/files/documentations/ZedBoard_HW_UG_v2_2.pdf

6. 『MicroZed and System on Module Hardware User Guide』zedboard.org/sites/default/files/documentations/MicroZed_HW_UG_v1_5.pdf

改訂履歴次の表に、 この文書の改訂履歴を示します。

ターゲッ ト デバイス Zynq-7000 AP SoC

ソース コードの提供 あ り

ソース コードの形式 VHDL、 Verilog

既存のザイ リ ンク ス アプ リ ケーシ ョ ン ノー ト / リ フ ァ レンスデザイン、 サードパーティからデザインへのコード /IP の使用

なし

シミ ュレーシ ョ ン

論理シ ミ ュレーシ ョ ンの実施 なし

タイ ミ ング シ ミ ュレーシ ョ ンの実施 N/A

論理シ ミ ュレーシ ョ ンおよびタイ ミ ング シ ミ ュレーシ ョ ンでのテス トベンチの利用

N/A

テス トベンチの形式 Verilog

使用したシ ミ ュレータ /バージ ョ ン Vivado シ ミ ュレータ

SPICE/IBIS シ ミ ュレーシ ョ ンの実施 N/A

インプリ メンテーシ ョ ン

使用した合成ツール/バージ ョ ン Vivado 合成

使用したインプリ メンテーシ ョ ン ツール/バージ ョ ン Vivado インプリ メンテーシ ョ ン

スタティ ッ ク タイ ミ ング解析の実施 あ り

ハードウェア検証

ハードウェア検証の実施 あ り

使用したハード ウェア プラ ッ ト フォーム Zed ボード

表 3 : リファレンス デザインの詳細 (続き)

パラメーター 説明

日付 バージョ ン 内容

2014 年 11 月 6 日 1.0 初版

法的通知

XAPP1223 (v1.0) 2014 年 11 月 6 日 japan.xilinx.com 14

法的通知The information disclosed to you hereunder (the “Materials”) is provided solely for the selection and use of Xilinx products.To the maximum extentpermitted by applicable law:(1) Materials are made available "AS IS" and with all faults, Xilinx hereby DISCLAIMS ALL WARRANTIES ANDCONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and (2) Xilinx shall not be liable (whether in contract or tort, includingnegligence, or under any other theory of liability) for any loss or damage of any kind or nature related to, arising under, or in connection with, theMaterials (including your use of the Materials), including for any direct, indirect, special, incidental, or consequential loss or damage (including loss ofdata, profits, goodwill, or any type of loss or damage suffered as a result of any action brought by a third party) even if such damage or loss was reasonablyforeseeable or Xilinx had been advised of the possibility of the same.Xilinx assumes no obligation to correct any errors contained in the Materials or tonotify you of updates to the Materials or to product specifications.You may not reproduce, modify, distribute, or publicly display the Materials withoutprior written consent.Certain products are subject to the terms and conditions of Xilinx’s limited warranty, please refer to Xilinx’s Terms of Sale whichcan be viewed at http://www.xilinx.com/legal.htm#tos; IP cores may be subject to warranty and support terms contained in a license issued to you byXilinx.Xilinx products are not designed or intended to be fail-safe or for use in any application requiring fail-safe performance; you assume sole risk andliability for use of Xilinx products in such critical applications, please refer to Xilinx’s Terms of Sale which can be viewed athttp://www.xilinx.com/legal.htm#tos.

Automotive Applications DisclaimerXILINX PRODUCTS ARE NOT DESIGNED OR INTENDED TO BE FAIL-SAFE, OR FOR USE IN ANY APPLICATION REQUIRING FAIL-SAFEPERFORMANCE, SUCH AS APPLICATIONS RELATED TO:(I) THE DEPLOYMENT OF AIRBAGS, (II) CONTROL OF A VEHICLE, UNLESSTHERE IS A FAIL-SAFE OR REDUNDANCY FEATURE (WHICH DOES NOT INCLUDE USE OF SOFTWARE IN THE XILINX DEVICE TOIMPLEMENT THE REDUNDANCY) AND A WARNING SIGNAL UPON FAILURE TO THE OPERATOR, OR (III) USES THAT COULD LEADTO DEATH OR PERSONAL INJURY.CUSTOMER ASSUMES THE SOLE RISK AND LIABILITY OF ANY USE OF XILINX PRODUCTS INSUCH APPLICATIONS.

© Copyright 2014 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein aretrademarks of Xilinx in the United States and other countries.All other trademarks are the property of their respective owners.

この資料に関するフ ィードバッ クおよびリ ンクなどの問題につきましては、 [email protected] まで、 または各ページの右下

にある [フ ィードバッ ク送信] ボタンをク リ ッ クする と表示されるフォームからお知らせください。フ ィードバッ クは日本語で入力可能で

す。いただきましたご意見を参考に早急に対応させていただきます。なお、 このメール アドレスへのお問い合わせは受け付けており ませ

ん。 あらかじめご了承ください。