Zynq-7000 All Programmable SoC の セキ ュ ア ブー ト
ス タ ー ト ア ッ プ ガ イ ド
UG1025 (v1.0.1) 2014 年 3 月 18 日
Notice of Disclaimer
The information disclosed to you hereunder (the “Materials”) is provided solely for the selection and use of Xilinx products. To the maximum extent permitted by applicable law: (1) Materials are made available "AS IS" and with all faults, Xilinx hereby DISCLAIMS ALL WARRANTIES AND CONDITIONS, 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, including negligence, 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, the Materials (including your use of the Materials), including for any direct, indirect, special, incidental, or consequential loss or damage (including loss of data, 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 reasonably foreseeable or Xilinx had been advised of the possibility of the same. Xilinx assumes no obligation to correct any errors contained in the Materials or to notify you of updates to the Materials or to product specifications. You may not reproduce, modify, distribute, or publicly display the Materials without prior written consent. Certain products are subject to the terms and conditions of Xilinx’s limited warranty, please refer to Xilinx’s Terms of Sale which can be viewed at www.xilinx.com/legal.htm#tos; IP cores may be subject to warranty and support terms contained in a license issued to you by Xilinx.
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 and liability for use of Xilinx products in such critical applications, please refer to Xilinx’s Terms of Sale which can be viewed at www.xilinx.com/legal.htm#tos.
Automotive Applications Disclaimer
XILINX PRODUCTS ARE NOT DESIGNED OR INTENDED TO BE FAIL-SAFE, OR FOR USE IN ANY APPLICATION REQUIRING FAIL-SAFE PERFORMANCE, SUCH AS APPLICATIONS RELATED TO: (I) THE DEPLOYMENT OF AIRBAGS, (II) CONTROL OF A VEHICLE, UNLESS THERE IS A FAIL-SAFE OR REDUNDANCY FEATURE (WHICH DOES NOT INCLUDE USE OF SOFTWARE IN THE XILINX DEVICE TO IMPLEMENT THE REDUNDANCY) AND A WARNING SIGNAL UPON FAILURE TO THE OPERATOR, OR (III) USES THAT COULD LEAD TO DEATH OR PERSONAL INJURY. CUSTOMER ASSUMES THE SOLE RISK AND LIABILITY OF ANY USE OF XILINX PRODUCTS IN SUCH APPLICATIONS.
© Copyright 2013–2014 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners.
本資料は英語版 (v1.0.1) を翻訳 し た も ので、 内容に相違が生 じ る 場合には原文を優先 し ます。
資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。
日本語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。
こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、[email protected] ま でお知 ら せ く だ さ い。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ールア ド レ スへのお問い合わせは受け付け てお り ません。 あ ら か じ めご了承 く だ さ い。
改訂履歴
次の表に、 こ の文書の改訂履歴を示 し ます。
日付 バージ ョ ン 内容
2013 年 11 月 12 日 1.0 初版
2014 年 3 月 18 日 1.0.1 図 2-1 お よ び図 2-2 への参照 を 修正。表 2-1 の SW16 の設定 (位置 4) を 修正。
PDF のブ ッ ク マー ク に章番号 を 追加、 お よ び フ ィ ー ド バ ッ ク ボ タ ン を 追加。
目次
改訂履歴 . . . 3
第 1 章 : は じ めに
概要 . . . 5第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
概要 . . . 6ZC702 のセ ッ ト ア ッ プ要件 . . . 6
ハー ド ウ ェ アのセ ッ ト ア ッ プ . . . 8
非セキ ュ ア TRD アプ リ ケーシ ョ ンの実行 . . . 12
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ング
概要 . . . 14AES キーの生成お よ びプ ロ グ ラ ム . . . 15
RSA キーの生成 . . . 17
セキ ュ アキー ド ラ イ バーを生成 し て RSA 機能を有効化. . . 18
セキ ュ ア キー ド ラ イ バーを実行 し て RSA 機能を有効化. . . 25
第 4 章 : Bootgen イ メ ージ フ ォ ーマ ッ ト フ ァ イルの作成
概要 . . . 27TRD を安全に起動. . . 27
セキ ュ ア ス ト レージに機密性の高いパーテ ィ シ ョ ン を プ ロ グ ラ ムす る. . . 30
第 5 章 : 高度なキー管理オプ シ ョ ン
概要 . . . 37第 6 章 : マルチ ブー ト
概要 . . . 41第 7 章 : デー タ パーテ ィ シ ョ ンのローデ ィ ング
概要 . . . 43第 8 章 : 認証証明のユーザー定義フ ィ ール ド を使用
概要 . . . 45付録 A : その他の リ ソ ース
ザ イ リ ン ク ス の リ ソ ース . . . 47ソ リ ュ ーシ ョ ンセ ン タ ー. . . 47
参考資料 . . . 47
第 1 章 : は じ めに
第 1 章
は じ めに
概要
Zynq®-7000 All Programmable SoC (AP SoC) は、 非公開キー暗号 (AES/HMAC) と 公開キー暗号 (RSA) を提供 し ま す。
こ れに よ っ て、 機密性の高い ソ フ ト ウ ェ ア を暗号化 し た り 、Zynq-7000 AP SoC へ ロ ー ド さ れ る ソ フ ト ウ ェ アの認証を ト ラ ス ト チ ェ ーン (信頼の連鎖) で行 う こ と がで き ます。 ト ラ ス ト チ ェ ーン を使用す る ブー ト プ ロ セ ス では、 敵対者 に よ る ソ フ ト ウ ェ アの改ざんが行われていない こSと が保証 さ れ ます。 機密性の高い ソ フ ト ウ ェ アは、 暗号化す る こ
と で解読不可 と な り 信頼性が向上 し ます。
AES は非公開キーを使用 し ます。RSA は Zynq-7000 AP SoC 内の公開キーを使用 し 、 こ のキーは必要に応 じ て何度で
も 変更で き 、同 じ イ メ ージ内のパーテ ィ シ ョ ンに対 し て も 同様です。敵対者がキーを攻撃す る 時間を制限す る ために、
暗号キーは変更す る 必要があ り ます。
Zynq-7000 AP SoC のセキ ュ リ テ ィ 機能はプ ロ グ ラ マブル リ ソ ー ス を使用 し ません。 し たが っ て、Zynq-7000 AP SoC 内のセキ ュ リ テ ィ 機能を使用す る 際の コ ス ト は、 セキ ュ アブー ト の使用法を学ぶための時間 く ら いです。 こ の ス タ ー ト ア ッ プ ガ イ ド では、 セ キ ュ ア ブー ト の使用法を ZC702 評価ボー ド を用いて説明 し ま す。 非セ キ ュ ア ブー ト と セ キ ュ アブー ト では、 同 じ ザ イ リ ン ク ス ツールを使用す る ため、 ツールフ ロ ーの変更はあ り ません。14.6 リ リ ース の 場合、 セキ ュ ア ブー ト 機能には Bootgen を コ マ ン ド ラ イ ン ツール と し て使用す る 必要があ り ます。
こ のユーザー ガ イ ド に付属す る 参照シ ス テ ムは、 次の リ ン ク か ら 入手可能です。
https://secure.xilinx.com/webreg/clickthrough.do?cid=345331
こ のユーザー ガ イ ド の内容は次の と お り です。
• 第2章 「ZC702 評価ボー ド のセ ッ ト ア ッ プ」
• 第3章 「AES/RSA キーの生成お よ びプ ロ グ ラ ミ ン グ」
• 第4章 「Bootgen イ メ ージ フ ォーマ ッ ト フ ァ イ ルの作成」
• 第5章 「高度な キー管理オプシ ョ ン」
• 第6章 「マルチブー ト 」
• 第7章 「デー タ パーテ ィ シ ョ ンの ロ ーデ ィ ン グ」
• 第8章 「認証証明のユーザー定義フ ィ ール ド を使用」
TRD に関す る その他の情報は、 『Zynq-7000 All Programmable SoC ZC702 評価キ ッ ト お よ びビデオ/画像処理キ ッ ト ス
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
第 2 章
ZC702 評価ボー ド のセ ッ ト ア ッ プ
概要
こ の章では、ZC702 評価ボー ド のセ ッ ト ア ッ プ方法について説明 し ます。
注記:ZC702 ボー ド の全機能の説明は、 『Zynq-7000 XC7Z020 All Programmable SoC 向け ZC702 評価ボー ド ユーザー ガ イ ド 』 (UG850) [参照3] を参照 し て く だ さ い。
ZC702 のセ ッ ト ア ッ プ要件
ZC702 評価ボー ド のセ ッ ト ア ッ プに必要な も のを次に示 し ます。
• ハー ド ウ ェ アのセ ッ ト ア ッ プ :
° ZC702 評価ボー ド (XC7Z020 CLG484-1 搭載)
° USB Type-A/Mini-B ケーブル (UART 通信用)
° AC 電源ア ダプ タ ー (12 VDC)
• Windows ソ フ ト ウ ェ アお よ び ド ラ イ バーのセ ッ ト ア ッ プ :
° Tera Term Pro (ま たは同等の) 端末プ ロ グ ラ ム (こ のプ ロ グ ラ ムはすでに イ ン ス ト ール さ れてい る 場合があ り ます。 詳細は、Tera Term の ウ ェ ブサ イ トを参照 し て く だ さ い。)
° Silicon Laboratories 社製 USB-UART ド ラ イ バー (Silicon Laboratories 社の USB-UART ド ラ イ バー ダ ウ ン ロ ー ド サ イ トか ら ダ ウ ン ロ ー ド 可能です。 こ のプ ロ グ ラ ムはすでに イ ン ス ト ール さ れてい る 場合があ り ま す。)
ZC702 のセ ッ ト ア ッ プ要件
ZC702 ボー ド のジ ャ ンパー と ス イ ッ チのデフ ォ ル ト 設定を図2-1 お よ び表2-1 に示 し ます。
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
Quad SPI デバ イ ス か ら ブー ト す る 場合、図2-1 の よ う に SW16 ス イ ッ チを設定 し ます。 ポジシ ョ ン 1、2、3、 お よ び
5 を右に し 、 ポジシ ョ ン 4 を左に し ます。
X-Ref Target - Figure 2-1
図 2-1 : Quad SPI モー ド で ブー ト する場合のモー ド ス イ ッ チ設定
UG1025_c2_01_090313
表 2-1 : ZC702 評価ボー ド のス イ ッ チ設定
ス イ ッ チ ポジ シ ョ ン 設定
SW10
(JTAG チ ェーン入力選択用の 2 個の DIP ス イ ッ チ)
1 オ フ
2 オン
SW12
(2 個の DIP ス イ ッ チ)
1 オ フ
2 オ フ
SW15
(2 個の DIP ス イ ッ チ)
1 オ フ
2 オ フ
SW16
(5 個の DIP ス イ ッ チ)
1 右
2 右
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
ハー ド ウ ェ アのセ ッ ト ア ッ プ
こ のセ ク シ ョ ンでは、 ハー ド ウ ェ ア セ ッ ト ア ッ プの手順について説明 し ます。
1. SW16 モー ド ス イ ッ チを図2-1 の よ う に設定 し ます。
2. ZC702 ボー ド の電源を オ フ に し た状態 (図2-2 の SW11 は下) で、USB Mini-B ケーブルを ZC702 ボー ド 上の
USB-UART と 表示 さ れてい る mini-USB ポー ト J17 へ接続 し 、 も う 一方を PC 側の空いてい る USB ポー ト へ接続 し ます (図2-2)。
3. 電源ケーブルを接続 し ます。
4. ZC702 ボー ド の電源をオンに し ます (SW11 ス イ ッ チを上にシ フ ト)。
USB-UART ド ラ イバーのイ ン ス ト ール
1. ダ ウ ン ロ ー ド し た実行可能な UART-USB ド ラ イ バー フ ァ イ ル (6ページの 「ZC702 のセ ッ ト ア ッ プ要件」 に記 載) を実行 し ま す。 こ の実行 フ ァ イ ル を実行す る こ と に よ っ て、ホ ス ト PC と の USB - UART 間通信が可能にな り ま す。 こ の ド ラ イ バーは、 ボー ド に電源が投入 さ れ る と 自動的にダ ウ ン ロ ー ド と 実行 を開始 し ま す。 ま た、
こ の ド ラ イ バーは、Silicon Laboratories 社の USB-UART ド ラ イ バーダ ウ ン ロ ー ド サ イ トか ら ダ ウ ン ロ ー ド で き ま す。
X-Ref Target - Figure 2-2
図 2-2 : UART と 電源ケーブルを接続する ZC702
UG1025_c2_02_090313
USB/UART 12V Power
Init LED
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
2. [デバ イ ス マネージ ャ ー] で USB-UART 間の接続を既知の COM ポー ト お よ びボー レー ト に設定 し ます。
a. Windows 7 の場合、[ス タ ー ト] メ ニ ュ ーを左 ク リ ッ ク し て、[コ ン ト ロ ール パネル] を選択 し ます。
b. [デバ イ ス マネージ ャ ー] を選択 し ます。
c. リ ス ト の中か ら Silicon Labs 社製のデバ イ ス を右 ク リ ッ ク し て、[プ ロ パテ ィ] を選択 し ます。
d. [ポー ト の設定] タ ブを ク リ ッ ク し ます。[詳細設定] を ク リ ッ ク し ます。
e. COM1 ~ COM4 の中で有効な COM ポー ト を選択 し ます。 こ れで コ ン ピ ュ ー タ ーがポー ト の割 り 当て を記憶
す る ため、 ボー ド のシ リ アル UART ポー ト をプ ラ グ イ ンす る たびに再度割 り 当て る 必要はあ り ません。
f. ビ ッ ト/秒= 115200、 デー タ ビ ッ ト = 8、 パ リ テ ィ =な し 、 ス ト ッ プビ ッ ト = 1、 お よ びフ ロ ー制御=な し に設定 し ます。[OK] を ク リ ッ ク し ます。
注記:手順お よ び図は、Windows XP ま たは Windows 7 ホ ス ト PC を使用 し た場合を示 し てい ます。
X-Ref Target - Figure 2-3
図 2-3 : UART ケーブルド ラ イバーのイ ン ス ト ール
UG1025_c2_03_090313
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
図2-4 ~図2-6 は、USB-UART ポー ト の設定手順を示 し てい ます。
X-Ref Target - Figure 2-4
図 2-4 :ド ラ イバーの設定
UG1025_c2_04_090313
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
X-Ref Target - Figure 2-5
図 2-5 : UART の [ポー ト の設定] タ ブ
UG1025_c2_05_090313
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
非セキ ュ ア TRD ア プ リ ケーシ ョ ンの実行
1. イ ン ス ト ール済みの Tera Term ま たは同等の端末プ ロ グ ラ ム を開始 し 、 次の よ う に設定 し ます。
ビ ッ ト/秒= 115200、 デー タ ビ ッ ト = 8、 パ リ テ ィ =な し 、 ス ト ッ プ ビ ッ ト = 1、 フ ロ ー制御=な し 2. ZC702 評価ボー ド 上でブー ト モー ド ス イ ッ チ (J16) を JTAG モー ド に し ます。
3. [SDK] → [Xilinx Tools] → [Program Flash] を呼び出 し て、
ug1025/zc702_linux_trd/ready_for_download/zc702_linux_trd_ns.mcs を参照 し ま す。 オ フ セ ッ ト に 「0x0 」 と 入力 し て、[Finish] を ク リ ッ ク し ます。QSPI がプ ロ グ ラ ム さ れた後に電源を切 り ます。
X-Ref Target - Figure 2-6
図 2-6 : COM ポー ト の選択 (COM1 ~ COM4)
UG1025_c2_06_090313
第 2 章 : ZC702 評価ボー ド のセ ッ ト ア ッ プ
4. 電源を入れて、QSPI モー ド で TRD をブー ト し ます。図2-7 に、TRD のブー ト を示 し ます。
ZC702 ボー ド に関す る 詳細情報は、『Zynq-7000 XC7Z020 All Programmable SoC 向け ZC702 評価ボー ド ユーザー ガ イ ド 』 (UG850) [参照3] を参照 し て く だ さ い。図2-1 に、 工場出荷時の ZC702 ボー ド のジ ャ ンパーお よ び ス イ ッ チの設 定が示 さ れてい ます。 ス イ ッ チ と ジ ャ ンパーのデフ ォ ル ト 設定一覧は表2-1 を参照 し て く だ さ い。
ZC702 評価キ ッ ト の最新情報については、Zynq-7000 All Programmable SoC ZC702 評価キ ッ ト の資料 ウ ェ ブサ イ トを
参照 し て く だ さ い。ZC702 ボー ド を使用 し た基本的なハー ド ウ ェ アお よ び ソ フ ト ウ ェ アフ ロ ーの詳細は、 『Zynq-7000 All Programmable SoC : コ ン セプ ト 、 ツール、 テ ク ニ ッ ク ガ イ ド 』 (UG873) [参照4] を参照 し て く だ さ い。 その他の情 報は、Zynq-7000 AP SoC の資料 ウ ェ ブサ イ トを参照 し て く だ さ い。
X-Ref Target - Figure 2-7
図 2-7 : zc702_linux_trd のブー ト
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
第 3 章
AES/RSA キーの生成およびプ ログ ラ ミ ング
概要
こ の章では、 キーの生成お よ びプ ロ グ ラ ミ ン グについて説明 し ます。図3-1 に、 こ こ で説明す る ト ピ ッ ク を示 し ます。
Zynq®-7000 All Programmable SoC (AP SoC) で使用 さ れ る 暗号キーを次に示 し ます。
• 256 ビ ッ ト の AES 暗号キー
• 256 ビ ッ ト の HMAC 暗号キー
• RSA プ ラ イ マ リ 非公開キー (PSK)
• RSA プ ラ イ マ リ 公開キー (PPK)
• RSA セカ ン ダ リ 非公開キー (SSK)
• RSA セカ ン ダ リ 公開キー (SPK)
推奨 さ れ る セキ ュ ア ブー ト フ ロ ーを実行す る ため、AES お よ び RSA キーを生成 し て Zynq AP SoC 内にプ ロ グ ラ ム し て く だ さ い。AES キーは、Bootgen を使用 し て生成 し ます。AES キーは、 バ ッ テ リ バ ッ ク ア ッ プ RAM (BBRAM) ま たは eFUSE にプ ロ グ ラ ムで き ます。BBRAM は、 再プ ロ グ ラ ム可能でゼ ロ ク リ ア な メ モ リ です。eFUSE は 1 回のみ プ ロ グ ラ ム可能 (OTP) です。
Zynq AP SoC では、 プ ラ イ マ リ RSA キーを使用 し てセカ ン ダ リ キーを認証 し ます。 そ し てセカ ン ダ リ キーを使用 し
て パー テ ィ シ ョ ン (ELF、BIT フ ァ イ ル な ど) を 認証 し ま す。RSA プ ラ イ マ リ お よ びセ カ ン ダ リ キ ーの生成には、
OpenSSL を使用 し ます。OpenSSL は入手が簡単 と 言 う 理由で使用 し てい ますが、その他の方法で も 可能です。OpenSSL
で生成 さ れ る RSA キーは、 非公開キー と 公開キーの 2 つです。 公開キーは、 非公開キーのサブセ ッ ト と な り ます。 セ キ ュ リ テ ィ 上、 非公開キーの保護が非常に重要です。RSA の場合、 非公開キーを使用 し て製造サ イ ト で各パーテ ィ シ ョ ン に署名 し 、 その署名を検証す る ために、Zynq AP SoC エ ンベデ ッ ド デバ イ ス に公開キーがプ ロ グ ラ ム さ れ ま す。 フ ィ ール ド にあ る エンベデ ッ ドデバ イ ス には非公開の RSA キーが含まれていないため安全です。
こ の ス タ ー ト ア ッ プガ イ ド では、iMPACT を使用 し てデバ イ ス に AES キーがプ ロ グ ラ ム さ れます。RSA セキ ュ リ テ ィ は、 ザ イ リ ン ク ス のセキ ュ ア キー ド ラ イ バーを使用 し てデバ イ ス にプ ロ グ ラ ム さ れます。 セキ ュ ア キー ド ラ イ バー は、AES キーをプ ロ グ ラ ムで き ます。
X-Ref Target - Figure 3-1
図 3-1 :キーの生成およびプ ログ ラ ミ ング
*HQHUDWHDQG3URJUDP
$(6.H\
*HQHUDWH56$.H\V DQG+DVK33.
&UHDWHDQG5XQ 6HFXUH.H\'ULYHU
3URJUDP56$B(QDEOH +DVK33.
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
AES キーの生成およびプ ログ ラ ム
次の手順で Bootgen を使用 し て AES キーを生成 し ます。
1. 次の コ マ ン ド を使用 し て generate_aeskey.bif フ ァ イ ルを生成 し ます。
generate_aeskey:
{
[aeskeyfile] bbram.nky
[bootloader, encryption=aes] fsbl.elf }
2. 次の Bootgen コ マ ン ド を使用 し て AES キーを生成 し ます。
bootgen -image generate_aeskey.bif -o temp.mcs -encrypt bbram
指定 し た AES キーがない場合は、Bootgen が generate_aeskey.bif 内にあ る 名前 (こ の場合は bbram.nky) を使用 し て キーを生成 し ます。
3. AES キーをプ ロ グ ラ ムす る ために、iMPACT を起動 し ます。Linux の場合は、impact & を実行 し ます。Windows の場合は、 ス タ ー ト メ ニ ュ ーか ら [ISE Design Suite 14.6] → [ISE Design Tools] → [64-Bit Tools] → [iMPACT] を選 択 し ま す。 プ ロ ジ ェ ク ト フ ァ イ ル を 保存す る 指示画面が表示 さ れ た 場合は [No] を ク リ ッ ク し ま す。 新 し い iMPACT プ ロ ジ ェ ク ト のダ イ ア ロ グ ボ ッ ク ス が表示 さ れた場合は [Cancel] を ク リ ッ ク し ます。
4. [iMPACT Flows] ウ ィ ン ド ウ で Boundary Scan を ダブル ク リ ッ ク し ます。 右 ク リ ッ ク し て Initialize Chain を選択 し ます。JTAG チ ェ ーンに xc7z020 FPGA の ARM コ アが 1 つ し か表示 さ れない場合は、 ブー ト モー ド ス イ ッ チ を JTAG に変更 し てチ ェーン を再び初期化 し ます。 コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルの割 り 当て指示画面が表示 さ れた ら [Yes] を ク リ ッ ク し ます。
5. DAP が緑色表示 し てい る と き に [Bypass] を ク リ ッ ク し ます。xc7z020 を選択 し て、[Assign New Configuration File]
ダ イ ア ロ グ ボ ッ ク ス に手順1 で生成 し た AES キーを 入力 し ます。[Device Programming Properties] が表示 さ れた 場合は [Cancel] を ク リ ッ ク し ます。
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
図3-2 に、iMPACT の JTAG チ ェーン を示 し ます。
6. 図3-3 に示す よ う に、iMPACT を使用 し て BBRAM キーをプ ロ グ ラ ム し ます。[ZC7Z020] を右 ク リ ッ ク し て、
[Program] を ク リ ッ ク し ます。iMPACT では eFUSE キー も プ ロ グ ラ ムで き ます。eFUSE キー と BBRAM キーは両 方 と も Zynq AP SoC へプ ロ グ ラ ム で き ます。Bootgen で -encrypt コ マ ン ドオプシ ョ ンの引数 efuse | bbram を使用 し て、 使用す る キーを指定 し ます。Bootgen が イ メ ージの Boot Header 領域にキー ソ ー ス を書 き 込みます。 電源 投入時に BootROM コ ー ド が Boot Header を読み取 り 、 使用す る キーソ ース を判断 し ます。
eFUSE の制御 も [iMPACT Processes] ウ ィ ン ド ウ の [Available Operations] を使用 し てプ ロ グ ラ ムで き ます。eFUSE 制御 レ ジ ス タ は、 キーの切 り 替え を制限 し た り 、JTAG ポー ト を永久的に無効にす る な ど の機能に使用 さ れます。
X-Ref Target - Figure 3-2
図 3-2 : iMPACT - 連結 さ れたチ ェ ーンの検出
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
RSA キーの生成
こ のセ ク シ ョ ン では、 プ ラ イ マ リ お よ びセ カ ン ダ リ RSA キーを生成 し ます。 こ れ ら のキーを使用 し て、 プ ラ イ マ リ 公開キーのハ ッ シ ュ が生成 さ れます。
1. こ のユーザーガ イ ド では、OpenSSL を使用 し て RSA キーを生成 し ます。(RSA キーの生成手段はほかに も あ り ます。) プ ラ イ マ リ お よ びセカ ン ダ リ 非公開 RSA キーは、 次の OpenSSL コ マ ン ド を使用 し て生成 さ れます。
X-Ref Target - Figure 3-3
図 3-3 : iMPACT を使用 し て BBRAM キーを プ ログ ラ ム
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
2. プ ラ イ マ リ 公開キー (PPK) のハ ッ シ ュ を生成 し ます。openssl を使用 し て RSA キーを生成 し た後、Bootgen を使 用 し て PPK のハ ッ シ ュ を生成 し ます。 次の コ マ ン ド を使用 し て gen_hash_ppk.bif を生成 し ます。
gen_hash_ppk:
{
[pskfile] psk.pk1 [sskfile] ssk.pk1
[bootloader, authentication=rsa] fsbl.elf }
3. 次を実行 し ます。
bootgen -image gen_hash_ppk.bif -efuseppkbits hash_ppk.txt hash_ppk.txt フ ァ イ ルに PPK のハ ッ シ ュ が含まれます。
セキ ュ ア キー ド ラ イバーを生成 し て RSA 機能を有 効化
RSA を使用す る には、PS eFUSE ア レ イ に RSA Enable 制御ビ ッ ト と PPK のハ ッ シ ュ を プ ロ グ ラ ムす る 必要が あ り ま す。 こ れ を行 う には、 ソ フ ト ウ ェ ア開発キ ッ ト (SDK) を使用 し て セ キ ュ ア キー ド ラ イ バー ソ フ ト ウ ェ ア のプ ロ ジ ェ ク ト を作成 し ま す。 こ のプ ロ ジ ェ ク ト は、ug1025/zc702_secure_driver デ ィ レ ク ト リ に あ り ま す。 セ キ ュ ア キー ド ラ イ バーの機能は、xilskey_efuse_example.c お よ び xilskey_input.h フ ァ イ ル を編集 し て操作 し ま す。
RSA を有効に し て PPK のハ ッ シ ュ を プ ロ グ ラ ムす る には、xilskey_input.h フ ァ イ ルを編集 し て PS eFUSE、PL
eFUSE、 ま たはそれ ら の両方を プ ロ グ ラ ム し ま す。eFUSE は OTP で あ る ため、 すでにプ ロ グ ラ ム済みの場合には、
PPK ハ ッ シ ュ の読み取 り のみ可能 と な る よ う に xilskey_efuse_example.c フ ァ イ ルを編集で き ます。
次の よ う に xilskey_input.h フ ァ イ ルを編集 し ます。
1. XSK_EFUSEPS_DRIVER を定義 し ます。
2. コ メ ン ト を使用 し て XSK_EFSUSEPL_DRIVER を無効に し ます。
3. hash_ppk.txt か ら XSK_EFUSEPS_RSA_KEY_HASH_VALUE に PPK ハ ッ シ ュ を コ ピー し ます。
4. XSK_EFUSEPS_ENABLE_RSA_KEY_HASH を TRUE に設定 し ます。
5. XSK_EFUSEPS_ENABLE_RSA_AUTH を TRUE に設定 し ます。
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
SDK を使用 し てセ キ ュ ア キー ド ラ イ バーを コ ンパ イ ル し ます。Linux の場合、xsdk & を実行 し て SDK を起動 し ま す。Windows の場合、Xilinx SDK 2013.2 を ダブル ク リ ッ ク す る か、[ス タ ー ト] → [ISE Design Suite 14.6] → [EDK] → [Xilinx Software Development Kit] を選択 し て SDK を起動 し ます。図3-4 の よ う に ワー ク スペース を選択 し ます。
X-Ref Target - Figure 3-4
図 3-4 :セキ ュ アキー ド ラ イバーのワー ク スペース を選択
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
6. 図3-5 の よ う に新 し いアプ リ ケーシ ョ ンプ ロ ジ ェ ク ト を作成 し ます。[Project name] に 「secure_key_driver」 と 入 力 し ます。 その他のオプシ ョ ンはデフ ォ ル ト 値の ま ま で使用 し ます。[Next] を ク リ ッ ク し ます。
X-Ref Target - Figure 3-5
図 3-5 :セキ ュ アキー ド ラ イバーの作成
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
7. 図3-6 の よ う に [Empty Application] を選択 し て、 ダ イ ア ロ グボ ッ ク ス が表示 さ れ る た ら 、secure_key_driver プ ロ ジ ェ ク ト を指定 し て [Finish] を ク リ ッ ク し ます。
X-Ref Target - Figure 3-6
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
8. 図3-7 の よ う に [secure_key_driver_bsp] を右 ク リ ッ ク し て、[Board Support Package Settings] を ク リ ッ ク し ます。
X-Ref Target - Figure 3-7
図 3-7 :ボー ドサポー トパ ッ ケージの設定
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
9. 図3-8 の よ う に [xilskey library] を選択 し て、 ボー ドサポー ト パ ッ ケージ (BSP) を再構築 し ます。[OK] を ク リ ッ ク し ます。
X-Ref Target - Figure 3-8
図 3-8 :セキ ュ アキーラ イ ブ ラ リ の選択
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
10. xilskey ラ イ ブ ラ リ は、secure_key_driver_bsp/ps7_cortexa9_0/lib の下に コ ンパ イ ル さ れ、[Project Explorer] ウ ィ ン ド ウ に表示 さ れます。図3-9 を参照 し て く だ さ い。
X-Ref Target - Figure 3-9
図 3-9 :コ ンパイル さ れた xilskey ラ イ ブ ラ リ
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
11. secure_key_driver を選択 し 、[File] → [Import] → [General Files] を選択 し て、 アプ リ ケーシ ョ ン プ ロ ジ ェ ク ト に xilskey_efuse_example.c お よ び xilskey_input.h を イ ン ポー ト し ます。secure_key_driver プ ロ ジ ェ ク ト を選択 し て、[Project] → [Build Project] を実行 し ます。図3-10 に、 コ ンパ イ ル さ れた secure_key_driver プ ロ ジ ェ ク ト を示 し ます。
セキ ュ ア キー ド ラ イバーを実行 し て RSA 機能を有 効化
X-Ref Target - Figure 3-10
図 3-10 :コ ンパイル さ れたセキ ュ アキー ド ラ イバープ ロ ジ ェ ク ト
8*BFB
第 3 章 : AES/RSA キーの生成およびプ ロ グ ラ ミ ン グ
con stop
読み取 り 可能に設定 し て secure_key_driver を コ ンパ イ ルす る と 、 通信端末を開いて PPK のハ ッ シ ュ 値を確認で き ま す。
第 4 章 : Bootgen イ メ ージフ ォ ーマ ッ ト フ ァ イルの作成
第 4 章
Bootgen イ メージ フ ォーマ ッ ト フ ァ イルの作成
概要
Bootgen を使用 し て、Zynq®-7000 All Programmable SoC (AP SoC) の起動に使用 さ れ る フ ァ イ ル イ メ ージ を生成 し ま す。Bootgen へ入力 さ れ る フ ァ イ ルは、 イ メ ージ内に含 ま れ る パーテ ィ シ ョ ン を リ ス ト し た Bootgen Image Format (BIF) フ ァ イ ルです。 パーテ ィ シ ョ ン と は、 イ メ ージ を構成す る ソ フ ト ウ ェ ア、 デー タ 、 お よ び ビ ッ ト ス ト リ ーム フ ァ イ ルです。 た と えば、TRD のパーテ ィ シ ョ ン は、fsbl.elf、system.bit、u-boot.elf、uImage.bin、
uramdisk.image.gz、devicetree.dtb、 お よ び sobel_cmd.elf です。
BIF では、 属性を使用 し てパーテ ィ シ ョ ンの暗号化 [encryption] や認証 [authentication] を指定 し ます。 ま た、 不揮発性
メ モ リ (NVM) のオ フ セ ッ ト ア ド レ ス [offset] やダブルデー タ レー ト (DDR) メ モ リ の ロ ー ド ア ド レ ス [load] を指定す る 場合に も 属性を使用 し ます。
Bootgen は、 イ メ ージ フ ァ イ ルを MCS フ ォーマ ッ ト ま たは BIN フ ォーマ ッ ト で出力 し ます。Zynq Flash Programmer を使用 し て ク ワ ッ ドシ リ アルペ リ フ ェ ラ ルイ ン タ ーフ ェ イ ス (QSPI) へ書 き 込みを実行す る 場合は、Intel MCS フ ォー マ ッ ト を使用 し ます。U-Boot を使用 し て QSPI をプ ロ グ ラ ムす る 場合や SD ブー ト モー ド を使用す る 場合には、BIN フ ォーマ ッ ト を使用 し ます。
14.6 では、RSA お よ びパーテ ィ シ ョ ンベース で暗号/認証を指定す る 機能は、 コ マ ン ド ラ イ ンで Bootgen を使用す る
場合のみ有効です。14.6 の Bootgen GUI では、 セ キ ュ リ テ ィ 機能のサ ポー ト に制限が あ り ま す。 ま た、14.6 では、
Bootgen コ マ ン ド ラ イ ンは Linux 上でのみ利用で き ます。
TRD を安全に起動
TRD を安全に起動す る ために使用 さ れ る BIF を次に示 し ます。
trd_image:{
[aeskeyfile] bbram.nky [pskfile] psk.pk1 [sskfile] ssk.pk1
[bootloader, encryption=aes, authentication=rsa] fsbl.elf [encrytion=aes, authentication=rsa] system.bit
第 4 章 : Bootgen イ メ ージフ ォ ーマ ッ ト フ ァ イルの作成
ビ ッ ト ス ト リ ームパーテ ィ シ ョ ンが含まれてい る ため、こ の BIF を使用 し て作成 さ れた イ メ ージは大 き すぎ て ZC702
QSPI 内 (16MB) に収ま り ません。BIF か ら 4.4MB の system.bit を削除す る と 格納可能にな り ます。
[aeskeyfile]、[pskfile]、 お よ び [sskfile] 属性で指定 し た暗号キーの生成については、第3章を参照 し て く だ さ い。
こ の BIF では、FSBL が指定 さ れた DDR ア ド レ スへパーテ ィ シ ョ ン を ロ ー ド で き る よ う に、[offset] 属性 と [load] 属 性を使用 し ます。 ほ と ん ど のシ ス テ ム では、U-Boot を使用 し てパーテ ィ シ ョ ン を ロ ー ド し ます。14.6 リ リ ース の時点 では、 パーテ ィ シ ョ ンの認証に使用 さ れ る RSA ラ イ ブ ラ リ が U-Boot に含ま れてい ません。 こ のため、FSBL を使用 し てパーテ ィ シ ョ ン を認証/ロ ー ド し ます。すべてのパーテ ィ シ ョ ンが FSBL で認証 さ れ る フ ロ ーをサポー ト す る ため
に、U-Boot zynq_common.h は変更 さ れてい ます。
注記:U-Boot の認証機能は、14.7 リ リ ース でサポー ト さ れ る 予定です。
ト ラ ス ト チ ェ ーン を使用 し てデバ イ ス がブー ト さ れ る よ う 、 すべてのパーテ ィ シ ョ ンが認証 さ れ る 必要があ り ます。
つま り 、 各パーテ ィ シ ョ ンは ロ ー ド 前に認証 さ れます。 ほ と ん ど の場合、 すべてのパーテ ィ シ ョ ンは暗号化 さ れてい ま せん。 暗号は機密性 を与え る ため、 機密情報 を 含むパーテ ィ シ ョ ン は暗号化すべ き です。 一般的には、Linux や
U-Boot な ど のオープン ソ ースパーテ ィ シ ョ ン を暗号化す る こ と はあ ま り 意味がない と 考え ら れてい ます。 暗号化は
ブー ト 時間を増加す る 可能性が あ り ま すが、 こ れ ま でにテ ス ト し た NVM コ ン フ ィ ギ ュ レ ーシ ョ ン では、 セ キ ュ ア ブー ト と 非セキ ュ アブー ト のブー ト 時間に差はあ り ません。
AES は既知のプ レーンテ キ ス ト 攻撃に対 し て脆弱ではあ り ませんが、それ以外の攻撃を受け る 可能性があ る ため、必 要ない場合に暗号化を使用すべ き ではあ り ません。 暗号化は機密情報を保護す る ために使用 し て く だ さ い。
QSPI モー ド で TRD を安全に起動す る には、 次の手順を実行 し ます。
1. 第2章で説明 し た と お り に、ZC702 評価ボー ド を設定 し ます。
2. 第2章で説明 し た と お り に、Tera Term を設定 し ます。
3. UG1025/zc702_secure_key_driver/SDK デ ィ レ ク ト リ へ移動 し ます。第3章で説明 し た と お り に
secure_key_driver.elf プ ロ ジ ェ ク ト を作成 し ます。PS RSA_Enable お よ び PPK eFUSE のハ ッ シ ュ をプ ロ グ ラ ムす る ために、 次の xmd コ マ ン ド を実行 し ます。
connect arm hw dow fsbl.elf con
stop
dow secure_key_driver.elf con
exit
4. ug1025/zc702_linux_trd デ ィ レ ク ト リ へ移動 し ます。 こ のプ ロ ジ ェ ク ト の BIF 機能を確認す る 場合は、
zc702_linux_trd.bif を開いて属性を確認 し ます。 次を実行 し て TRD イ メ ージ を生成 し ます。
bootgen -image zc702_linux_trd.bif -o zc702_linux_trd.mcs -encrypt bbram
注記:SDK 14.6 リ リ ー ス の場合、Bootgen コ マ ン ド ラ イ ンは Linux 上で実行す る 必要があ り ま す。Windows は、
SDK 14.7 でサポー ト さ れ る 予定です。
5. Linux の場合、xsdk & を実行 し て SDK を起動 し ま す。 ワ ー ク ス ペー ス を ug1025/zc702_linux_trd/SDK に指定 し ま す。
6. SDK で [Xilinx Tools] → [Program Flash] を ク リ ッ ク し ます。 電源を切 り ます。
7. 次の イ メ ージ を指定 し ます。
ug1025/zc702_linux_trd/zc702_linux_trd.mcs
前に述べた と お り 、 こ の MCS イ メ ージには TRD ビ ッ ト ス ト リ ームが含ま れてい ません。TRD を ブー ト す る に は、 ビ ッ ト ス ト リ ーム を含む BIN イ メ ージ を生成 し て、SD モー ド でブー ト し ます。
8. J25 を 1 へ移動、ま たは評価ボー ド が SW16 を使用 し てい る 場合には ス イ ッ チ 4 を 1 へ移動 し て、ZC702 評価ボー
第 4 章 : Bootgen イ メ ージフ ォ ーマ ッ ト フ ァ イルの作成
9. 電源を一旦切っ てか ら 再度オンに し ます。Petalinux プ ロ ンプ ト 画面で Zynq AP SoC のブー ト を検証 し ます。 ロ グ イ ンには、 ユーザー名 root、 パ ス ワー ド root を使用 し ます。図4-1 に、 予想 さ れ る TRD 出力を示 し ます。
10. 非セキ ュ ア と セキ ュ アのブー ト 時間を比較す る ため、 非セキ ュ ア ブー ト 用に QSPI へ zc702_linux_trd_ns.mcs を プ ロ グ ラ ム し て手順7 ~手順9 を繰 り 返 し ます。 電源を投入 し てか ら 、 通信端 末に 「zynq>」と 表示 さ れ る ま での時間を計測 し ます。
ブー ト 時間は、NVM の種類や コ ン フ ィ ギ ュ レーシ ョ ン、 セキ ュ リ テ ィ 、 お よ び イ メ ージのサ イ ズに よ っ て異な り ま す。 ブー ト 時間の概算が必要な場合は、 ザ イ リ ン ク ス の FAE (フ ィ ール ド アプ リ ケーシ ョ ン エン ジニア) へお問い合 わせ く だ さ い。 ザ イ リ ン ク ス FAE が Boot Timer Estimator を使用 し て、 さ ま ざ ま な コ ン フ ィ ギ ュ レーシ ョ ンの概算を 行い ます。
X-Ref Target - Figure 4-1
図 4-1 :予想 さ れる TRD 出力
8*BFB
第 4 章 : Bootgen イ メ ージフ ォ ーマ ッ ト フ ァ イルの作成
セキ ュ ア ス ト レージに機密性の高いパーテ ィ シ ョ ン を プ ログ ラ ムする
機密性の高い情報を保護す る ための も う 1 つの手段 と し て、Zynq-7000 AP SoC のセキ ュ リ テ ィ 境界内にあ る セキ ュ ア ス ト レージ (オンチ ッ プメ モ リ [OCM]、AXI BRAM) に格納す る 方法があ り ます。 こ れは、 リ ン カース ク リ プ ト ま た は Bootgen [load] 属性で指定で き ます。
DDR ではな く OCM にパーテ ィ シ ョ ン を格納す る には、 リ ン カー ス ク リ プ ト を図4-2 の よ う に変更 し ます。
FSBL は OCM か ら 実行す る ため、 通常、 パーテ ィ シ ョ ンは FSBL を使用 し て OCM へ ロ ー ド さ れ る こ と はあ り ません
JTAG モー ド の場合は、 デバ イ ス を ps7_init で初期化で き る ため、XMD コ マ ン ド を使用 し て ELF を OCM へ ロ ー ド で
き ます。 その他のブー ト モー ド を使用す る 場合は、FSBL で U-Boot を ロ ー ド し 、U-Boot を使用 し て OCM へ機密性 の高いパーテ ィ シ ョ ン を ロ ー ド し ます。
X-Ref Target - Figure 4-2
図 4-2 :セキ ュ リ テ ィキー ド ラ イバーを OCM に格納
8*BFB
第 5 章 : 高度なキー管理オプ シ ョ ン
第 5 章
高度なキー管理オプ シ ョ ン
概要
製造サ イ ト で Bootgen が使用 さ れます。Bootgen の動作モー ド には Debug と Release があ り ます。 こ の章では、Release モー ド で Bootgen を実行す る 方法について説明 し ます。Release モー ド は、Debug モー ド と は異な る 方法で RSA キー を使用 し ます。Debug モー ド の場合は非公開キーを使用 し ます。Release モー ド の場合は、 最終的な BIF の中に公開 キー と パーテ ィ シ ョ ンの署名が含まれます。
最新の暗号技術 と し てはアルゴ リ ズ ム が主流であ り 、 非公開キーの保護には不可欠です。Bootgen の Release モー ド は、 非公開 キ ーの保護に役立 ち ま す。 こ の非公開 キ ーの保護は、 製造サ イ ト で実施 さ れ ま す。 使用 し た モー ド (Debug/Release) に関わ ら ず、 フ ィ ール ド へ出 さ れ る エ ンベデ ッ ド デバ イ ス には同 じ 公開キー と コ ン テ ン ツ が含ま れ ま す。
非公開 キ ー を 保護す る 1 つの方法 と し て、 エ ン ベデ ッ ド 製品の最終 リ リ ー ス 時に セ キ ュ リ テ ィ ス タ ッ フ (Infosec
group) を利用す る こ と が挙げ ら れます。 こ れに よ っ て、暗号キーを取 り 扱 う 社員数を削減で き ます。多 く の場合、ハー
ド ウ ェ ア セキ ュ リ テ ィ モジ ュ ール (HSM) がセキ ュ ア エ リ ア内で使用 さ れます。HSM は、RSA の 2 種類のキー (非公 開 と 公開) と 署名を生成 し ます。HSM に格納 さ れた非公開キーは決 し て漏洩 し ないため、 セキ ュ リ テ ィ も 強化 さ れま す。
Boorgen Release モー ド では、Bootgen と も う 一つのザ イ リ ン ク ス ツール (xil_rsa_sign) が HSM と 同 じ 機能を果た し 、 ハ ッ シ ュ と 署名を生成 し ます。 こ の章では、Bootgen と xil_rsa_sign を使用 し て、 非公開キーの保護を さ ら に強化す る 方法について説明 し ます。
xil_rsa_sign を コ ンパ イ ルす る 際には、ug1025/zc702_secure_key/xil_rsa_sign_src デ ィ レ ク ト リ へ移行 し ます。Linux の 場合は、makefile_linux を makefile に コ ピー し ます。Windows の場合は、makefile_xp を makefile に コ ピー し ます。 そ し て make を実行 し ます。
Windows では、makefile 内の gcc.exe が正 し く ない場合に make でエ ラ ーが生 じ ます。$XILINX_EDK ソ フ ト ウ ェ アには gcc.exe フ ァ イルが多数あ り ます。Windows を使用し ている と きは、$XILINX/gnu/MinGW/5.0.0/nt/bin/gcc.exe ま たは cygwin gcc.exe への完全なパス を使用し て makefile を編集し て く ださい。
CC=c:/cygwin/bin/gcc.exe ま たは
CC=c:/Xilinx/14.6/ISE_DS/SE/gnu/MinGW/5.0.0/nt/bin/gcc.exe
第 5 章 : 高度なキー管理オプ シ ョ ン
}
Bootgen が SPK ハ ッ シ ュ フ ァ イ ル (spk.pk1.sha256) を生成 し ます。
2. xil_rsa_sign を使用 し て署名を生成 し ます。
xil_rsa_sign -gensig -sk psk.pk1 -data spk.pk1.sha256 -out spk.pk1.sha256.sig 3. 次の Bootgen コ マ ン ド を使用 し て、 パーテ ィ シ ョ ンのハ ッ シ ュ を生成 し ます。
bootgen -image bootimage_partitions.bif -o temp.txt -encrypt efuse -generate_hashes BIF は次の と お り です。
bootimage_partitions:
{
[ppkfile] ppk.pk1 [spkfile] spk.pk1
[spksignature] spk.pk1.sha256.sig
[bootloader, encryption=aes, authentication=rsa] fsbl.elf [encryption=aes, authentication=rsa] system.bit
[authentication=rsa] u-boot.elf }
パーテ ィ シ ョ ンのハ ッ シ ュ が生成 さ れ、ハ ッ シ ュフ ァ イ ルは、fsbl.elf.0.sha256、system.bit.0.sha256、
お よ び u-boot.elf.0.sha256 と な り ます。
4. 作成 さ れたハ ッ シ ュ の署名を生成 し ます。
xil_rsa_sign -gensig -sk ssk.pk1 -data fsbl.elf.0.sha256 -out fsbl.elf.0.sha256.sig xil_rsa_sign -gensig -sk ssk.pk1 -data system.bit.0.sha256 -out
system.bit.0.sha256.sig
xil_rsa_sign -gensig -sk ssk.pk1 -data u-boot.elf.0.sha256 -out u-boot.elf.0.sha256.sig
5. 次の Bootgen コ マ ン ド を使用 し て、 イ メ ージ を生成 し ます。
bootgen -image bootimage_presign.bif -o zc702_uboot_rm.mcs -encrypt efuse BIF は次の と お り です。
bootimage_presign:
{
[aeskeyfile] efuse.nky [ppkfile] ppk.pk1 [sskfile] spk.pk1
[spksignature] spk.pk1.sha256.sig
[bootloader, encryption=aes, authentication=rsa, presign=fsbl.elf.0.sha256.sig]
fsbl.elf
[encryption=aes, authentication=rsa, presign=system.bit.0.sha256.sig] system.bit [authentication=rsa, presign=u-boot.elf.0.sha256.sig] u-boot.elf
}
6. Bootgen の Debug モー ド と Bootgen の Release モー ド が同 じ イ メ ージ フ ァ イ ルを生成 し てい る こ と を確認 し ます。
こ れを行 う には、Bootgen Debug モー ド で イ メ ージ を生成 し 、2 つの イ メ ージ を比較 し ます。 次の Bootgen コ マ ン ド を使用 し て、Debug モー ド で Bootgen を実行 し ます。
第 5 章 : 高度なキー管理オプ シ ョ ン
bootimage_dm:
{
[aeskeyfile] efuse.nky [pskfile] psk.pk1 [sskfile] ssk.pk1
[bootloader, encryption=aes, authentication=rsa] fsbl.elf [encryption=aes, authentication=rsa] system.bit
[authentication=rsa] u-boot.elf }
次を実行 し ます。
diff zc702_uboot_dm.mcs zc702_uboot_rm.mcs こ れで、2 つの フ ァ イ ルが同 じ であ る こ と を確認で き ます。
本章のま と め
• RSA の安全性は、 公開 (非公開ではない) キーを使用す る フ ィ ール ド デバ イ ス に基づいてお り 、 こ のキーは必要
に応 じ て変更で き ます。
• Bootgen の Release モー ド は、 製造サ イ ト で内部攻撃か ら 非公開キーを守 る ためのオプシ ョ ンです。
第 6 章 : マルチ ブー ト
第 6 章
マルチ ブー ト
概要
オ リ ジナル イ メ ージのブー ト に失敗 し た場合、Zynq®-7000 All Programmable SoC (AP SoC) を既知の正常な状態へ確 実にブー ト す る ためにマルチブー ト が使用 さ れます。 こ の章では、マルチブー ト を使用す る 方法について説明 し ます。
マルチブー ト では、3 つの イ メ ージ を使用 し ます。FSBL パーテ ィ シ ョ ンのみ含むオ リ ジナルイ メ ージは 0x0 に配置 さ れてい ます。標準/ア ッ プデー ト イ メ ージは 0x400000 に配置 さ れてい ます。そ し て ゴールデン イ メ ージは 0xA00000 に配置 さ れてい ます。
マルチブー ト 例の主な構成要素は、 ブー ト の失敗を引 き 起 こ すエ ラ ーを定義 し てい ます。 こ の例では、system.bit 内にエ ラ ーが含ま れてい ます。
マルチブー ト は、 次の手順で実行 さ れます。
1. FSBL、 ア ッ プデー ト イ メ ージ、 お よ びゴールデン イ メ ージ を生成 し ます。
bootgen -image bootimage_fsbl.bif -o fsbl.bin -encrypt efuse bootgen -image bootimage_update.bif -o update.bin -encrypt efuse bootgen -image bootimage_golden.bif -o golden.bin -encrypt efuse 2. update.bin を コ ピー し て、 ア ッ プデー ト イ メ ージのオ リ ジナル版を保存 し ます。
cp update.bin update.bin$
3. ア ッ プデー ト イ メ ージ内にエ ラ ーを挿入す る ため、HEX エデ ィ タ ー (gvim ま たは hd な ど) を使用 し ます。
gvim update.bin
4. update.bin にエ ラ ーを挿入 し ます。 ビ ッ ト ス ト リ ームの開始位置は 0x194C0 です。19570 行目の 1 文字を変更 し ます。update.bin を保存 し ます。
5. diff コ マ ン ド を使用 し て、update.bin にエ ラ ーが含まれてい る こ と を確認 し ます。
diff update.bin update.bin$
6. Tera Term を開 き ます。[File] →[Log] を ク リ ッ ク し ます。 ダ イ ア ロ グ ボ ッ ク ス に 「multiboot.log」 と 入力 し ます。
7. ug1025/zc702_multiboot/ready_for_download か ら 、BOOT.bin、fsbl.bin、update.bin お よ び golden.bin を SD カー ド へ コ ピー し ます。ZC702 評価ボー ド でブー ト モー ド を SD に設定 し ます。 電源を一旦切っ てか ら 再度 オンに し ます。
8. U-Boot のプ ロ ンプ ト 画面で次の コ マ ン ド を入力 し ます。
mmcinfo
fatload mmc 0 0x100000 fsbl.bin sf probe 0 0 0
sf write 0x100000 0 0x20000 fatload mmc 0 0x100000 update.bin
第 6 章 : マルチ ブー ト
9. 電源を切 り ます。 ブー ト モー ド を SD か ら QSPI へ変更 し ます。 電源を入れます。
10. multiboot.log を読み込んで、 マルチブー ト 動作を検証 し ます。
multiboot.log 内で、update.bin の ロ ー ドエ ラ ーの原因 と な る エ ラ ーが予想どお り であ り 、golden.bin イ メ ー ジが ロ ー ド さ れてい る こ と を確認 し ます。
第 7 章 : デー タパーテ ィ シ ョ ンのローデ ィ ン グ
第 7 章
デー タ パーテ ィ シ ョ ンのローデ ィ ング
概要
Bootgen は、ELF や BIT フ ァ イ ルのほかに も デー タ パーテ ィ シ ョ ン を ロ ー ド で き ます。代表的なデー タ パーテ ィ シ ョ
ンアプ リ ケーシ ョ ンには、 デジ タ ル信号処理 (DSP) 係数、 保健記録、 財務記録があ り ます。ELF、BIN、 お よ び BIT な ど のパーテ ィ シ ョ ン タ イ プ と 同 じ よ う に、Bootgen の属性でデー タ パーテ ィ シ ョ ン を暗号化/認証で き ます。
デー タ パーテ ィ シ ョ ン を ロ ー ド す る BIF は、 次の よ う にな り ます。
image:{
{
[bootloader, encryption=aes, authentication=rsa] fsbl.elf [encryption=aes, authentication=rsa] hello.elf
[encryption=aes, authentication=rsa, load=0xFFFFC000] coefficients.bin }
こ のデー タ フ ァ イ ル例 (coefficients.bin) には、0101010111001100 が含まれてい ます。
デー タ フ ァ イ ルが OCM に ロ ー ド さ れてい る か を確認す る には、 次の XMD コ マ ン ド を実行 し ます。
mrd 0xFFFFC000 8
一般的に、 デー タパーテ ィ シ ョ ンの格納場所 と し ては OCM が最適です。 上記の BIF に問題はあ り ませんが、FSBL が OCM か ら 実行す る ため、FSBL を使用 し てパーテ ィ シ ョ ン を OCM へ ロ ー ド すべ き ではあ り ません。 デー タ パー テ ィ シ ョ ン を OCM へ ロ ー ド す る には、U-Boot を使用す る 方法を推奨 し てい ます。
第 8 章 : 認証証明のユーザー定義 フ ィ ール ド を使用
第 8 章
認証証明のユーザー定義フ ィ ール ド を使用
概要
RSA を使用す る 場合は、[authentication] 属性があ る 各パーテ ィ シ ョ ンに認証証明 (AC) が生成 さ れます。AC には、キー や署名のほかに、ロ ー ド さ れ る ソ フ ト ウ ェ アのバージ ョ ン を示すために使用で き る ユーザー定義フ ィ ール ド (UFD) が 含まれます。 こ の UDF は、 パーテ ィ シ ョ ン サプ ラ イ ヤーの識別や タ イ ム ス タ ンプ情報の提供な ど、 さ ま ざ ま なユー ザー定義機能に使用で き ます。
UDF は、HEX フ ァ イ ルで定義 さ れます。HEX フ ァ イ ルのサ イ ズは最大 56 バ イ ト です。UDF 内の情報を使用す る に
は、FSBL ま たは U-Boot に コ ー ド を追加す る 必要があ り ます。
AC に UDF を作成す る 手順は次の と お り です。 完成プ ロ ジ ェ ク ト は、ug1025/zc702_udf にあ り ます。
1. 16 進数を使用す る uboot_v10.hex を生成 し ます。た と えば、16 進数値 と し て 「12345678abcdef」 を使用 し ます。
2. udf_data 属性を使用 し て、 次の よ う に BIF を生成 し ます。
the_image {
[pskfile] psk.pk1 [sskfile] ssk.pk1 [aeskeyfile] efuse.nky
[bootloader, authentication=rsa, encryption=aes] fsbl.elf [authentication=rsa, udf_data=uboot_v10.hex] u-boot.elf }
3. 次の Boorgen コ マ ン ド を実行 し ます。
bootgen -image bootimage.bif -o zc702_udf.mcs -encrypt bbram
第 8 章 : 認証証明のユーザー定義 フ ィ ール ド を使用
4. HEX エデ ィ タ ー (gvim ま たは hd) を使用 し て UDF を特定 し ます。図8-1 では、0025480 行目に完成 し た zc702_udf デザ イ ンの UDF を示 し てい ます。
X-Ref Target - Figure 8-1
図 8-1 :認証証明のユーザー定義 フ ィ ール ド
8*BFB
付録 A : その他の リ ソ ース
付録 A
その他の リ ソ ース
ザイ リ ン ク スの リ ソ ース
ア ンサー デー タ ベース、 資料、 ダ ウ ン ロ ー ド 、 フ ォー ラ ム な ど のサポー ト リ ソ ース を利用す る には、 次の ウ ェ ブサ イ ト にア ク セ ス し て く だ さ い。
japan.xilinx.com/support
常に最新情報を受け取 る には、 マ イプ ロ フ ィ ールか ら ア ラ ー ト にア ンサーを追加 し て く だ さ い。
japan.xilinx.com/support/myalerts
ザ イ リ ン ク ス の資料で使用 さ れてい る 技術用語については、 次の用語集を参照 し て く だ さ い。
japan.xilinx.com/company/terms.htm
ソ リ ュ ーシ ョ ン セ ン タ ー
デバ イ ス、 ツール、IP のサポー ト については、ザ イ リ ン ク ス の ソ リ ュ ーシ ョ ンセ ン タ ーを参照 し て く だ さ い。 設計に 関す る ア シ ス タ ン ス、 ア ド バ イ ス、 問題解決の ヒ ン ト な ど を記載 し てい ます。
参考資料
ZC702 お よ び関連資料の最新情報は、 次の ウ ェ ブサ イ ト か ら 入手で き ます。
Zynq-7000 All Programmable SoC ZC702 評価キ ッ ト の ウ ェ ブサ イ ト Zynq-7000 All Programmable SoC ZC702 評価キ ッ ト の資料ウ ェ ブサ イ ト
こ れ ら のザ イ リ ン ク ス資料お よ び ウ ェ ブサ イ ト では、 こ のユーザー ガ イ ド で役立つ情報を提供 し てい ます。
付録 A : その他の リ ソ ース
7. 『Zynq-7000 All Programmable SoC ソ フ ト ウ ェ ア開発者向けガ イ ド 』 (UG821) 8. Tera Term の ウ ェ ブサ イ ト : en.sourceforge.jp/projects/ttssh2/releases/
9. Silicon Laboratories 社の USB-UART ド ラ イ バーウ ェ ブサ イ ト :
www.silabs.com/Support%20Documents/Software/CP210x_VCP_Windows.zip
付録 B : Warranty
付録 B
Warranty
THIS LIMITED WARRANTY applies solely to standard hardware development boards and standard hardware programming cables manufactured by or on behalf of Xilinx (“Development Systems”).
Subject to the limitations herein, Xilinx warrants that Development Systems, when delivered by Xilinx or its authorized distributor, for ninety (90) days following the delivery date, will be free from defects in material and workmanship and will substantially conform to Xilinx publicly available specifications for such products in effect at the time of delivery. This limited warranty excludes: (i) engineering samples or beta versions of Development Systems (which are provided “AS IS” without warranty); (ii) design defects or errors known as “errata”; (iii) Development Systems procured through unauthorized third parties; and (iv) Development Systems that have been subject to misuse, mishandling, accident,
alteration, neglect, unauthorized repair or installation. Furthermore, this limited warranty shall not apply to the use of covered products in an application or environment that is not within Xilinx specifications or in the event of any act, error, neglect or default of Customer. For any breach by Xilinx of this limited warranty, the exclusive remedy of Customer and the sole liability of Xilinx shall be, at the option of Xilinx, to replace or repair the affected products, or to refund to Customer the price of the affected products. The availability of replacement products is subject to product discontinuation policies at Xilinx. Customer may not return product without first obtaining a customer return material authorization (RMA) number from Xilinx.
THE WARRANTIES SET FORTH HEREIN ARE EXCLUSIVE. XILINX DISCLAIMS ALL OTHER WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, AND ANY WARRANTY THAT MAY ARISE FROM COURSE OF DEALING, COURSE OF PERFORMANCE, OR USAGE OF TRADE. (2008.10)