...

XAPP1175 Zynq-7000 All Programmqable SoC のセキュア

by user

on
Category: Documents
103

views

Report

Comments

Transcript

XAPP1175 Zynq-7000 All Programmqable SoC のセキュア
ア プ リ ケーシ ョ ン ノ ー ト : Zynq-7000 AP SoC
Zynq-7000 All Programmable SoC のセキ ュ ア
ブー ト
XAPP1175 (v1.0) 2013 年 9 月 12 日
概要
著者 : Lester Sanders
Zynq®-7000 All Programmable SoC (AP SoC) は、 シ ス テ ム オ ン チ ッ プ (SoC) と プ ロ グ ラ マブル ロ
ジ ッ ク (PL) を統合 し たデバ イ ス です。 そのブー ト メ カ ニズ ムは、 従来のザ イ リ ン ク ス デバ イ ス と は異
な り 、 プ ロ セ ッ サ主導型 と な っ てい ます。 こ のアプ リ ケーシ ョ ン ノ ー ト では、 QSPI モー ド お よ び SD
モー ド で Zynq デバ イ ス のセ キ ュ ア ブー ト を実行す る 方法について説明 し ま す。 ま た、 さ ま ざ ま な セ
キ ュ リ テ ィ 要件に応 じ た RSA 認証 と AES 暗号化の最適な使用、 RSA キーを用いたセキ ュ リ テ ィ の扱
い方について も 記述 し ます。 さ ら に、 イ メ ージ をブー ト で き なか っ た場合にゴールデン イ メ ージ をブー
ト す る マルチブー ト の例やキーの生成お よ びプ ロ グ ラ ム方法を示す例を示 し 、 Zynq デバ イ ス のセキ ュ
リ テ ィ 機能を使用 し た アプ リ ケーシ ョ ンについて説明 し ます。
含まれる シ ス テム
次の リ フ ァ レ ン ス シ ス テ ムは、 次のサ イ ト か ら 入手で き ます。
https://secure.xilinx.com/webreg/clickthrough.do?cid=339774
は じ めに
•
zc702_u-boot
•
zc702_linux_trd
•
zc702_secure_key_driver
•
zc702_secure_key (xil_rsa_sign を含む)
•
zc702_multiboot
•
zc702_jtag_en
•
zc702_data
•
zc702_udf
IP の大 き な価値に対 し て、 セキ ュ ア ブー ト に必要な追加の労力 と コ ス ト は小 さ いため、 Zynq デバ イ ス
にはセキ ュ ア ブー ト の使用を推奨 し ます。 Zynq デバ イ ス のセキ ュ ア ブー ト には、 公開暗号キーお よ び
秘密暗号キー アルゴ リ ズ ム を使用 し ます。 こ のアプ リ ケーシ ョ ン ノ ー ト では、 セキ ュ ア ブー ト の イ ン
プ リ メ ン ト の概念、 ツール、 手法について説明 し ます。 ま た、 セ キ ュ ア エ ンベデ ッ ド シ ス テ ム の作成
方法、 公開暗号キーお よ び秘密暗号キーの生成、 プ ロ グ ラ ム、 管理方法を示 し ます。
Linux ベース のセキ ュ ア エンベデ ッ ド シ ス テ ム をすぐ に構築 し 、 ブー ト する 場合は、 「TRD のセキ ュ ア
ブー ト 」 に進み、 zc702_linux_trd シ ス テ ム を使用 し て く だ さ い。 セキ ュ ア ブー ト はプ ロ グ ラ マブル ロ
ジ ッ ク リ ソ ース を必要 と し ないため、 こ の リ ソ ース をほかの用途に利用で き ます。 Linux セキ ュ ア シ ス
テ ムのブー ト 時間は、 非セキ ュ ア シ ス テ ム と ほぼ同 じ です。
© Copyright 2013 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. AMBA, AMBA Designer, ARM, ARM1176JZ-S are trademarks of ARM in the EU and other countries. HDMI, HDMI logo, and High-Definition
Multimedia Interface are trademarks of HDMI Licensing LLC. All other trademarks are the property of their respective owners.
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
1
は じ めに
こ の資料の構成
図 1 に、 こ のアプ リ ケーシ ョ ンで解説す る セキ ュ ア ブー ト の ト ピ ッ ク を示 し ます。
Zynq Security Components
Quickly Building and Booting
a Secure Embedded Linux System
Creating Secure Embedded Systems
Generating and Programming
Cryptographic Keys
Advanced Key Management Options
Secure Embedded Systems Applications
XAPP1175 01 070813
X-Ref Target - Figure 1
図 1 : セキ ュ ア ブー ト の ト ピ ッ ク
「ブー ト アーキ テ ク チ ャ 」、 「ブー ト プ ロ セ ス」、 「AES 暗号化 と RSA 認証」、 「エンベデ ッ ド デバ イ ス の
セキ ュ リ テ ィ 」、 「セキ ュ ア シ ス テ ムの開発」 では、 Zynq デバ イ ス のセキ ュ ア ブー ト の背景情報を説明
し ま す。 zc702 ボー ド に搭載 さ れた Zynq デバ イ ス のブー ト 方法をすでに理解 し てい る 場合は、 「TRD
のセキ ュ ア ブー ト 」 に進み、 zc702_linux_trd シ ス テ ムのブー ト についての説明に従っ て く だ さ い。
「セ キ ュ ア シ ス テ ム の構築 と ブー ト 」 では、 新規ユーザー向けに、 ザ イ リ ン ク ス の グ ラ フ ィ カル ユー
ザー イ ン タ ーフ ェ イ ス (GUI) を使用 し てセキ ュ ア シ ス テ ム を構築 し 、 ブー ト す る 方法を示 し ます。 こ
こ で構築 し たシ ス テ ムはその他のセ ク シ ョ ン では使用 し ないため、ザ イ リ ン ク ス ツールの使用法を理解
し てい る 場合は、 こ のセ ク シ ョ ン を省略 し て も か ま い ません。 14.6 の Bootgen GUI では、 RSA 認証は
利用で き ません。 すべてのセキ ュ リ テ ィ 機能をサポー ト す る Bootgen GUI は 14.7 リ リ ース で提供 さ れ
る 予定です。
「セキ ュ ア ブー ト イ メ ージの作成」 では、 カ ス タ ム セキ ュ ア エンベデ ッ ド シ ス テ ムの作成方法を示 し
ます。 幅広い使用例がサポー ト さ れます。
「キーの生成 と プ ロ グ ラ ム」 では、 AES キーお よ び RSA キーを作成 し 、 Zynq デバ イ ス にセキ ュ ア エン
ベデ ッ ド シ ス テ ムの制御機能 と キーをプ ロ グ ラ ムす る方法を示 し ます。
「高度な キー管理オプシ ョ ン」 では、 RSA キーを保護する 方法を示 し ます。
「セ キ ュ ア エ ンベデ ッ ド シ ス テ ム アプ リ ケーシ ョ ン」 では、 付属の リ フ ァ レ ン ス シ ス テ ム を使用 し た
例を示 し ます。 「マルチブー ト 」 では、 セキ ュ リ テ ィ 機能 と マルチブー ト 機能を組み合わせたシ ス テ ム を
作成 し ま す。 zc702_data シ ス テ ム は、 Zynq デバ イ ス にデー タ を 安全に ロ ー ド す る 方法 を 示 し ま す。
zc702_jtag_en シ ス テ ムは、 セキ ュ ア ブー ト 後の JTAG の使用方法を示 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
2
必要なハー ド ウ ェ アおよび ソ フ ト ウ ェ ア
必要なハー ド ウ ェ
アおよび ソ フ ト
ウェア
リ フ ァ レ ン ス シ ス テ ムのハー ド ウ ェ ア要件は次の と お り です。
•
リ ビ ジ ョ ン C xc7020 シ リ コ ン を搭載 し た ZC702 評価ボー ド
•
AC 電源ア ダプ タ ー (12VDC)
•
USB Type-A/Mini-B ケーブル (UART 通信用)
•
ザ イ リ ン ク ス プ ラ ッ ト フ ォーム ケーブルま たは Digilent USB Type-A/USB Micro-B ケーブル
(JTAG を使用 し たプ ロ グ ラ ムお よ びデバ ッ グ用)
•
SD (Secure Digital) MD (Multimedia Card) フ ラ ッ シ ュ カー ド
•
タ ーゲ ッ ト ボー ド と ホ ス ト マシ ン を接続す る イ ーサネ ッ ト ケーブル (オプシ ョ ン )
•
Xilinx Platform Studio 14.6
•
ザ イ リ ン ク ス ISE (Integrated Software Environment) 14.6
•
ザ イ リ ン ク ス Vivado® 2013.2
注記 : ザ イ リ ン ク ス Bootgen ソ フ ト ウ ェ ア と FSBL (第 1 段階ブー ト ロ ーダー ) は、 セキ ュ ア ブー ト に
使用 さ れ る 主要ツールです。 Bootgen は、 ザ イ リ ン ク ス ソ フ ト ウ ェ ア開発キ ッ ト (SDK) に含まれます。
SDK はザ イ リ ン ク ス の ウ ェ ブサ イ ト か ら 単独でダ ウ ン ロ ー ド で き ま す。 SDK 14.6 では、 Bootgen の
GUI で一部の高度な機能がサポー ト さ れてい ません。 14.6 で こ れ ら の高度な機能を実装す る には、 コ マ
ン ド ラ イ ン イ ン タ ーフ ェ イ ス を使用す る必要があ り ます。シ ス テ ムの開発に ISE ツール と Vivado ツー
ルの ど ち ら を使用 し て も 、 セキ ュ ア ブー ト 機能は提供 さ れます。
ブー ト アーキテ ク
チャ
こ のセ ク シ ョ ン では、 ブー ト プ ロ セ ス に使用 さ れ る ハー ド ウ ェ アお よ び ソ フ ト ウ ェ ア コ ン ポーネ ン ト
の概要を示 し ます。
ブー ト に使用 さ れるハー ド ウ ェ ア コ ンポーネ ン ト
Zynq デバ イ ス は、 プ ロ セ ッ シ ン グ シ ス テ ム (PS) と プ ロ グ ラ マブル ロ ジ ッ ク (PL) の 2 つの フ ァ ン ク
シ ョ ン ブ ロ ッ ク で構成 さ れます。 PS には、 ARM Cortex A9 MPCore お よ び 10 (x2) 個のハー ド IP ペ
リ フ ェ ラ ルが含まれます。 PL は FPGA です。
ブー ト に使用 さ れ る ハー ド ウ ェ ア コ ン ポーネ ン ト は、 CPU、 シ ス テ ム レベル制御レ ジ ス タ (SLCR)、 不
揮発性 メ モ リ (NVM)、 セキ ュ ア ス ト レージ、 JTAG、 AES/HMAC、 オンチ ッ プ メ モ リ (OCM)、 デ ュ
アル デー タ レー ト (DDR) ラ ン ダ ム ア ク セ ス メ モ リ 、 お よ び BootROM です。 図 2 に、 ブー ト に使用
さ れ る ハー ド ウ ェ ア コ ン ポーネ ン ト を示 し ます。 NVM と DDR メ モ リ はオ フチ ッ プにあ り ます。 ブー
ト には通常 1 種類の NVM を使用 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
3
ブー ト アーキテ ク チ ャ
Processing System
eFUSE
SHA256(PPK)
Boot
ROM
CPU
DAP
Controllers
SLCR
SD
SD
NAND
NAND
NOR
NOR
QSPI
DDR
Controller
DDR
OCM
QSPI
Device Configuration Interface
AXI
DMA
Secure
Controller
Vault
PCAP
Programmable Logic
AES
Decryptor
eFuse Array
HMAC
Config
Registers
Config
Memory
BBRAM
JTAG
XAPP1175_03_052813
X-Ref Target - Figure 2
図 2 : ブー ト に使用 さ れる Zynq-7000 AP SoC のハー ド ウ ェ ア コ ンポーネ ン ト
中央演算処理装置 (CPU)
ARM Cortex-A9 MPcore は、 2 個の中央演算処理装置 (CPU) を搭載 し てい ます。 CPU0 がブー ト に使
用 さ れます。 デバ イ ス コ ン フ ィ ギ ュ レーシ ョ ン (DEVCFG) レ ジ ス タ やその他のシ ス テ ム レベル制御レ
ジ ス タ の読み出 し /書 き 込みに よ り 、 CPU はブー ト な ど の動作を制御 し ます。
シ ス テム レ ベル制御レ ジ ス タ
シ ス テ ム レベル制御レ ジ ス タ (SLCR) は、 約 150 個の レ ジ ス タ で構成 さ れ ま す。 ブー ト には、 ブー ト
モー ド 、 PS リ セ ッ ト 制御、 FPGA リ セ ッ ト 、 リ ブー ト ス テー タ ス、 リ セ ッ ト 理由、 PS レベル シ フ タ ー 、
制御、 その他、 リ ブー ト ス テー タ ス、 ロ ッ ク 、 コ ン フ ィ ギ ュ レーシ ョ ン、 割 り 込みの各レ ジ ス タ が使用
さ れ ま す。 ブー ト に使用 さ れ る ダ イ レ ク ト メ モ リ ア ク セ ス コ ン ト ロ ー ラ ー (DMAC)、 NVM お よ び
DDR コ ン ト ロ ー ラ ーの レ ジ ス タ も SLCR に含まれますが、 通常、 こ れ ら の レ ジ ス タ を ブー ト 用に変更
す る 必要はあ り ません。
デバイ ス コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ー フ ェ イ ス
デバ イ ス コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス には、 ブー ト に使用 さ れ る ダ イ レ ク ト メ モ リ ア ク
セ ス コ ン ト ロ ー ラ ー (DMAC) があ り ます。 DMAC は、 1 つの メ モ リ (通常は NVM) か ら も う 1 つの メ
モ リ (通常は DDR) に高い転送速度でパーテ ィ シ ョ ン を転送 し ます。 DMAC と PS の イ ン タ ーフ ェ イ ス
には AXI バ ス を使用 し 、 PL と の イ ン タ ーフ ェ イ ス には PCAP イ ン タ ーフ ェ イ ス を使用 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
4
ブー ト アーキテ ク チ ャ
セキ ュ ア ス ト レ ージ
セキ ュ ア ス ト レージは、 敵対者がア ク セ ス で き ないオンチ ッ プ メ モ リ です。 こ の メ モ リ は Zynq デバ イ
ス のセキ ュ リ テ ィ 境界の内側に置かれます。 シ ス テ ム構築時に、 設計者は入力/出力 (I/O) と 内部ス イ ッ
チ を制御 し 、 Zynq デバ イ ス の内部 コ ン ポーネ ン ト へのア ク セ ス を制限 し ま す。 Zynq デバ イ ス 内のセ
キ ュ ア ス ト レージは、 OCM、 L1 お よ び L2 キ ャ ッ シ ュ 、 AXI ブ ロ ッ ク RAM、 PL コ ン フ ィ ギ ュ レー
シ ョ ン メ モ リ 、 BBRAM、 お よ び eFUSE ア レ イ です。
不揮発性 メ モ リ (NVM)
Zynq デ バ イ ス の ブ ー ト に 使 用 さ れ る NVM の タ イ プ は、 SD (Secure Digital)、 QSPI (Quad Serial
Peripheral Interface)、 NAND、 お よ び NOR です。 ZC702 お よ び ZC706 評価ボー ド は、 SD と QSPI
をサポー ト し ますが、 NAND お よ び NOR NVM はサポー ト し ません。
BootROM
BootROM は、 BootROM コ ー ド を記録 し た、 128K のマ ス ク プ ロ グ ラ ム ブー ト 読み出 し 専用 メ モ リ
(BootROM) です。 こ の メ モ リ はユーザーか ら は見る こ と も 書 き込む こ と も で き ません。 BootROM コ ー
ド は、 ブー ト モー ド レ ジ ス タ を読み出 し 、 起動時 ま たはパ ワ ーオ ン リ セ ッ ト 時に必要な ク ロ ッ ク と
NVM を初期化 し ます。 JTAG モー ド を除 く すべてのブー ト モー ド では、 BootROM コ ー ド は、 メ モ リ
コ ン ト ロ ー ラ ーを使用 し て、 指定 さ れた NVM か ら OCM に FSBL パーテ ィ シ ョ ン を コ ピー し ます。
オ ン チ ッ プ メ モ リ (OCM)
OCM は 256KB の ラ ン ダ ム ア ク セ ス メ モ リ (RAM) です。 OCM の最初の機能は、 Zynq デバ イ ス の
ブー ト 時に FSBL (第 1 段階ブー ト ロ ーダー ) を格納す る こ と です。 FSBL の最大許容サ イ ズは 192KB
です。 OCM はア ド レ ス を持たず、 Zynq デバ イ ス ピ ンへのデー タ ラ イ ン も 持たないので、 セキ ュ ア ス
ト レージ と 言え ます。 ブー ト 後の OCM は、 機密 ソ フ ト ウ ェ ア用のセキ ュ ア ス ト レージ と し て使用で き
ます。 OCM は非常に高速な メ モ リ です。 ブー ト 後は、 256KB の OCM 全体が利用可能です。
AXI ブ ロ ッ ク RAM
AXI BRAM は PL の RAM です。 ブー ト には使用 さ れ ません。 こ の メ モ リ は、 機密 ソ フ ト ウ ェ ア ま た
はデー タ 用のセキ ュ ア ス ト レージ を提供 し ます。 AXI BRAM は、 ARM CPU と MicroBlaze CPU の両
方に よ っ て使用 さ れます。
eFUSE ア レ イ
PL の eFUSE ア レ イ は、オンチ ッ プの ワ ン タ イ ム プ ロ グ ラ マブル (OTP) NVM です。eFUSE ア レ イ は、
256 ビ ッ ト AES キーを格納 し ます。 ま た、 JTAG ポー ト の有効/無効な ど、 セキ ュ リ テ ィ 機能の制御に
も 使用 さ れます。 PS の eFUSE は、 RSA 認証に使用 さ れ る RSA_Enable ビ ッ ト と プ ラ イ マ リ 公開キー
(PPK) のハ ッ シ ュ 値を格納 し ます。
バ ッ テ リ バ ッ ク ア ッ プ RAM
バ ッ テ リ バ ッ ク ア ッ プ RAM (BBRAM) は、AES キーの不揮発性ス ト レージ と し て eFUSE の代替 と な
る オンチ ッ プ メ モ リ です。 こ の メ モ リ は、 再プ ロ グ ラ ム可能でゼ ロ ク リ ア可能な NVM です。 オ フチ ッ
プ バ ッ テ リ が Zynq デバ イ ス に接続 さ れてい る と 、BBRAM は NVM にな り ます。ZC702 ボー ド はバ ッ
テ リ を搭載 し てい ますが、 Zed ボー ド は搭載 し てい ません。 BBRAM はバ ッ テ リ が接続 さ れていない場
合で も AES キーの格納に使用で き ますが、 揮発性 メ モ リ と な り ます。
AES/HMAC
AES (Advanced Encryption Standard) は、 秘密 キ ー の 暗号化/ 復号化 に 使用 さ れ る 規格 で す。 HMAC
(Hashed Message Authentication Code) は、 SHA-256 ハ ッ シ ュ 関数を使用 し て秘密キー認証を提供 し ま
す。
Zynq デバ イ ス では、 AES 暗号化方式を使用 し て機密性を実現 し ま す。 Zynq デバ イ ス は、 ハー ド 化 さ
れた AES 復号化エン ジ ン を内蔵 し 、 HMAC エン ジ ン と 組み合わせて使用 し ます。 AES 復号化/HMAC
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
5
ブー ト アーキテ ク チ ャ
認証は切 り 離す こ と はで き ま せん。 ソ フ ト ウ ェ ア は、 製造側の ソ フ ト ウ ェ ア 開発プ ロ セ ス で、 SDK
Bootgen ツールで暗号化 し ます。 復号化は、 フ ィ ール ド 展開 さ れたエンベデ ッ ド デバ イ ス で実行 さ れま
す。 AES 復号化には、 eFUSE ま たは BBRAM にプ ロ グ ラ ム さ れた秘密キーが使用 さ れます。
JTAG/DAP バウ ン ダ リ スキ ャ ン チ ェ ーン
JTAG チ ェーンは、 PL に よ っ て使用 さ れ る バ ウ ン ダ リ ス キ ャ ン チ ェーン です。 DAP は、 PS に よ っ て
使用 さ れ る バ ウ ン ダ リ ス キ ャ ン チ ェーンです。 2 つのチ ェーンはカ ス ケー ド 接続す る こ と も 、 単独で使
用す る こ と も 可能です。 JTAG チ ェ ーンは、 PS お よ び PL コ ー ド の ロ ー ド や eFUSE お よ び BBRAM 内
のキーのプ ロ グ ラ ム、 デバ ッ グに使用 さ れます。
ブー ト に使用 さ れる ソ フ ト ウ ェ ア コ ンポーネ ン ト
ザ イ リ ン ク ス ISE Design Suite は、 シ ス テ ム 開発に使用 さ れ る ツ ールです。 ISE Design Suite には、
PlanAhead、 Xilinx Platform Studio (XPS)、 ソ フ ト ウ ェ ア開発キ ッ ト (SDK)、 Bitgen、 Bootgen、 お よ
び iMPACT が含まれます。 ISE (Integrated System Environment) お よ び Vivado Design Suite を使用 し
て、 VHDL/Verilog コ ー ド を イ ン プ リ メ ン ト し ま す。 SDK は、 C コ ー ド の コ ンパ イ ル、 ブー ト イ メ ー
ジの生成、 ブー ト イ メ ージの ロ ー ド 、 ソ フ ト ウ ェ ア と ハー ド ウ ェ アのデバ ッ グに使用 さ れます。
SDK では、 ソ フ ト ウ ェ ア プ ロ ジ ェ ク ト の作成お よ びそのプ ロ ジ ェ ク ト のダ ウ ン ロ ー ド と デバ ッ グが可
能です。 SDK は、 Windows ま たは Linux を搭載 し た PC で動作 し ます。 Zynq デバ イ ス で動作 し 、 ブー
ト に使用 さ れ る ソ フ ト ウ ェ ア プ ロ グ ラ ム は、 BootROM コ ー ド 、 FSBL、 ps7_init、 U-Boot、 お よ び
DEVCFG コ ー ド です。
ブー ト ヘ ッ ダー
ブー ト ヘ ッ ダーは、 FSBL パーテ ィ シ ョ ンの特性を定義 し ます。 ブー ト ヘ ッ ダーの イ メ ージ ID お よ び
Header Checksum フ ィ ール ド に基づいて、BootROM コ ー ド は整合性チ ェ ッ ク を実行 し ます。Encryption
Status フ ィ ール ド は、FSBL が非セキ ュ アかセキ ュ アか、ま たセキ ュ アであ る 場合、キー ソ ース が eFUSE
か BBRAM か を指定 し ます。 ブー ト ヘ ッ ダーの フ ォ ーマ ッ ト は、 『Zynq-7000 AP SoC テ ク ニ カル リ
フ ァ レ ン ス マニ ュ アル』 (UG585) [参照 1] に記載 さ れてい ます。詳細は、『Zynq-7000 All Programmable
SoC ソ フ ト ウ ェ ア開発者向けガ イ ド 』 (UG821) [参照 2] も 参照 し て く だ さ い。
Bitgen
Bitgen は、 ビ ッ ト ス ト リ ーム パーテ ィ シ ョ ン用の非暗号化 BIT フ ァ イ ルを生成 し ます。 Zynq デバ イ ス
での暗号化には使用 さ れません。
Bootgen
Bootgen は、ブー ト 用 イ メ ージ を生成す る SDK ツールです。こ の ツールは NVM に ロ ー ド さ れ る イ メ ー
ジ を生成 し ます。 Bootgen は、 ユーザーが生成 し た Bootgen イ メ ージ フ ォ ーマ ッ ト (BIF) フ ァ イ ルを
入力 と し ます。 こ の フ ァ イ ルには、 イ メ ージに含まれ る パーテ ィ シ ョ ンが リ ス ト さ れてい ます。 Bootgen
は 1 つの イ メ ージ フ ァ イ ルを MCS ま たは BIN 形式で出力 し ます。 アルゴ リ ズ ム を使用 し てパーテ ィ
シ ョ ン を暗号化 し 、 RSA アルゴ リ ズ ム を使用 し てパーテ ィ シ ョ ンに署名を入れます。
注記 : SDK 14.6 の Bootgen GUI は、 セキ ュ リ テ ィ 機能のサポー ト に制限があ り ます。 SDK 14.6 の場
合、 Bootgen は コ マ ン ド ラ イ ンで使用 さ れた場合に RSA 認証お よ び暗号化/非暗号化複合パーテ ィ シ ョ
ン を サポー ト し ま す。 将来の SDK リ リ ー ス で、 RSA 認証 と 暗号化/非暗号化複合パーテ ィ シ ョ ン を サ
ポー ト す る 予定です。
Secure Key Driver
Secure Key Driver ソ フ ト ウ ェ アは、 PS お よ び PL の eFUSE ア レ イ を プ ロ グ ラ ム し ます。 こ の ソ フ ト
ウ ェ アは Zynq デバ イ ス で動作 し ます。 RSA 認証を使用す る 場合、 Secure Key Driver を用いて PS の
eFUSE ア レ イ を プ ロ グ ラ ムす る 必要が あ り ま す。 AES 暗号化を使用す る 場合、 iMPACT の代わ り に
eFUSE ド ラ イ バー を 使用 し て AES キ ー を プ ロ グ ラ ム で き ま す。 Secure Key Driver の使用手順は、
「Secure Key Driver」 に記載 さ れてい ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
6
ブー ト アーキテ ク チ ャ
第 1 段階ブー ト ローダー (FSBL)
FSBL は、 BootROM コ ー ド で OCM に ロ ー ド さ れ る パーテ ィ シ ョ ン です。 こ れは、 NVM に格納 さ れ
てい る イ メ ージ内のパーテ ィ シ ョ ン ( ソ フ ト ウ ェ ア プ ロ グ ラ ム、 ビ ッ ト ス ト リ ーム ) を、 パーテ ィ シ ョ
ン の転送先に ロ ー ド し ま す。 ソ フ ト ウ ェ ア パーテ ィ シ ョ ン の転送先は、 通常は DDR、 OCM、 ま たは
AXI BBRAM です。 ビ ッ ト ス ト リ ームの転送先は、 PL コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ です。 FSBL は、
AES/HMAC エン ジ ン と RSA ラ イ ブ ラ リ を使用 し て、 復号化お よ び認証プ ロ セ ス を制御 し ます。 FSBL
の機能はほ と ん ど のユーザー ロ ー ド 要件を満た し ま すが、 独自の要件が あ る 場合は、 FSBL の ソ ー ス
コ ー ド を編集で き ます。
iMPACT
iMPACT は、 主に開発段階で、 FPGA (PL を含む) のプ ロ グ ラ ムに使用 さ れます。 こ の ツールは、 PL の
eFUSE ア レ イ ま たは BBRAM (制御パ ラ メ ー タ ー と 256 ビ ッ ト AES キーを含む) をプ ロ グ ラ ム し ます。
U-Boot
U-Boot は、 Zynq デバ イ ス で実行 さ れ る オープ ン ソ ース ソ フ ト ウ ェ アです。 こ れはは通常、 Linux の
ロ ー ド に使用 さ れ ます。 その他の U-Boot の機能には、 DDR メ モ リ の読み出 し 、 NVM の消去/読み出
し /書 き 込みな ど があ り ます。 U-Boot は FSBL ま たは XMD に よ っ て ロ ー ド さ れ ます。 U-Boot は こ れ
ら の非セキ ュ ア ブー ト に使用 さ れますが、 いずれの場合 も 必須ではあ り ません。
BootROM コ ー ド
BootROM コ ー ド は、 起動時お よ び場合に よ っ て はマルチブー ト 時に実行 さ れ る マ ス ク プ ロ グ ラ ム
ROM コ ー ド です。 こ の コー ド はブー ト モー ド を判断 し 、 ブー ト に使用 さ れ る メ モ リ コ ン ト ロ ー ラ ーを
初期化 し て、 JTAG 以外のブー ト モー ド の場合は OCM への FSBL の ロ ー ド を実行 し ます。
信頼の連鎖
デバ イ ス のセキ ュ ア ブー ト では、 まず BootROM コ ー ド が FSBL を ロ ー ド し 、 続いて FSBL がビ ッ ト
ス ト リ ーム と ソ フ ト ウ ェ ア を ロ ー ド し ます。 BootROM コ ー ド に よ っ て確立 さ れたセキ ュ ア ブー ト を基
盤 と し て、 デバ イ ス に ロ ー ド さ れ るすべての ソ フ ト ウ ェ アの連続的認証に よ り 、 信頼の連鎖が形成 さ れ
ます。 こ れに よ り 、 敵対者が ソ フ ト ウ ェ ア ま たはビ ッ ト ス ト リ ーム フ ァ イ ルを不正操作す る こ と を防ぎ
ます。
デバイ ス コ ン フ ィ ギ ュ レーシ ョ ン (devcfg)
devcfg は、 ダ イ レ ク ト メ モ リ ア ク セ ス コ ン ト ロ ー ラ ー (DMAC) を使用 し て ビ ッ ト ス ト リ ーム と ソ フ
ト ウ ェ ア を ロ ー ド す る 、 ザ イ リ ン ク ス のデバ イ ス コ ン フ ィ ギ ュ レーシ ョ ン ド ラ イ バーです。 devcfg ソ
フ ト ウ ェ アの標準的な用途は、 不揮発性 メ モ リ (NVM) か ら ラ ン ダ ム ア ク セ ス メ モ リ ま たは コ ン フ ィ
ギ ュ レーシ ョ ン メ モ リ へのビ ッ ト ス ト リ ームの ロ ー ド です。
イ メ ージ
イ メ ージは、 Zynq デバ イ ス の機能を定義する ビ ッ ト ス ト リ ーム と ソ フ ト ウ ェ ア を含むフ ァ イ ルです。通
常、 イ メ ージは まず NVM に ロ ー ド さ れます。 電源投入時に、 イ メ ージはブー ト プ ロ セ ス の一部 と し て
NVM か ら RAM ま たは コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ 、 あ る いはその両方に コ ピー さ れます。 イ メ ー
ジは 1 つ以上の (通常は複数の) パーテ ィ シ ョ ンで構成 さ れます。 イ メ ージには、ビ ッ ト ス ト リ ーム パー
テ ィ シ ョ ン と ソ フ ト ウ ェ ア パーテ ィ シ ョ ン以外に、 パーテ ィ シ ョ ン と イ メ ージの特性を定義す る ヘ ッ
ダー (ブー ト 、 パーテ ィ シ ョ ン ) 情報が含まれます。
パーテ ィ シ ョ ン
パーテ ィ シ ョ ンは、 イ メ ージ を構成す る 個々の PL ビ ッ ト ス ト リ ーム と PS ソ フ ト ウ ェ ア (ELF、 BIN)
です。 パー テ ィ シ ョ ン の例 と し て、 system.bit、 fsbl.elf、 hello_world.elf、 u-boot.elf、
uImage.bin、 devicetree.dtb、 お よ び uramdisk.image.gz が挙げ ら れます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
7
ブー ト プ ロ セス
ブー ト イ メ ージ フ ォ ーマ ッ ト (BIF)
BIF は、 Bootgen が イ メ ージに含むパーテ ィ シ ョ ン ( ビ ッ ト ス ト リ ーム、 ソ フ ト ウ ェ ア ) を リ ス ト す る 、
Bootgen への入力フ ァ イ ルです。 BIF には各パーテ ィ シ ョ ンの属性 も 含まれます。 パーテ ィ シ ョ ンの属
性を使用 し て、 そのパーテ ィ シ ョ ンに暗号化ま たは認証、 あ る いはその両方を適用す る か を指定で き ま
す。
ps7_init
ps7_init コ マ ン ド は、非セキ ュ ア ブー ト で FSBL の代替手段 と し て使用で き ます。 ps7_init コ マ ン ド は、
XMD を使用す る 場合に開発段階でブー ト コ ン ポーネ ン ト を初期化す る簡単な方法を提供 し ます。
Xilinx Microprocessor Debugger (XMD)
XMD は、一般に開発段階で PL お よ び PS パーテ ィ シ ョ ンの ロ ー ド に使用 さ れ る ソ フ ト ウ ェ ア開発キ ッ
ト (SDK) の ソ フ ト ウ ェ ア ツールです。 こ の ツールは、 パーテ ィ シ ョ ンの ロ ー ド 以外に、 デバ イ ス の機
能の迅速なテ ス ト に も 使用 さ れます。 XMD は JTAG ポー ト を使用す る ため、 セキ ュ ア ブー ト には使用
で き ません。
RSA
RSA は、 ソ フ ト ウ ェ ア (ELF、 BIN、 お よ び BIT パーテ ィ シ ョ ン を含む) の認証に使用 さ れ る公開キー
アルゴ リ ズ ム です。 認証では、 ソ フ ト ウ ェ アが修正 さ れていない こ と を確認 し ます。 Zynq デバ イ ス で
は、 各 ソ フ ト ウ ェ ア パーテ ィ シ ョ ン を個別に認証で き ま す。 RSA は公開キー /秘密キー ペア を使用 し
ます。 秘密キーは、 製造工場で Bootgen でパーテ ィ シ ョ ンに署名を入れ る 際に使用 さ れます。 公開キー
は、 フ ィ ール ド 展開 さ れた Zynq デバ イ ス でパーテ ィ シ ョ ン を検証する 際に使用 さ れます。 Zynq デバ イ
ス の場合、 公開キー /秘密キー ペアは (同 じ イ メ ージの異な る パーテ ィ シ ョ ン上で も ) 必要に応 じ て何度
で も 変更可能です。
ソ フ ト ウ ェ ア開発キ ッ ト (SDK)
SDK は Eclipse ベー ス の ソ フ ト ウ ェ ア で、 ザ イ リ ン ク ス の ウ ェ ブサ イ ト か ら ダ ウ ン ロ ー ド で き ま す。
SDK は、 ソ フ ト ウ ェ ア開発以外に、 イ メ ージの作成、 Zynq デバ イ スへの ソ フ ト ウ ェ アお よ びビ ッ ト ス
ト リ ームのダ ウ ン ロ ー ド 、QSPI への イ メ ージの書き 込み、ソ フ ト ウ ェ ア プ ロ グ ラ ムのデバ ッ グ をサポー
ト し ます。
ブー ト プ ロ セス
こ のセ ク シ ョ ン では、 ブー ト モー ド 、 ブー ト 手順、 ブー ト フ ロ ー、 ブー ト 後のセキ ュ リ テ ィ 維持の概
要を示 し ます。 その後、 BootROM コ ー ド 、 FSBL、 U-Boot な ど、 ブー ト に使用 さ れ る ソ フ ト ウ ェ アに
ついて説明 し ます。
ブー ト モー ド
ブー ト モー ド は、 PS マ ス タ ー非セキ ュ ア、 PS マ ス タ ー セキ ュ ア、 JTAG の 3 種類です。 マ ス タ ー モー
ド では、 QSPI、 SD、 NAND、 ま たは NOR NVM を使用 し ます。
セキ ュ ア ブー ト 手順
図 3 にセキ ュ ア エンベデ ッ ド シ ス テ ムの開発手順を示 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
8
ブー ト プ ロ セス
X-Ref Target - Figure 3
Generate AES, RSA Keys
Use the Secure Key Driver to Program
RSA Enable, PPK Hash
Program AES Key
Use Bootgen to Create Image
in MCS or BIN Format
Program QSPI with MCS File
or
Program SD with BIN file
XAPP1175_3_070513
図 3 : セキ ュ ア シ ス テムの開発手順
ブー ト フ ロー
Zynq デバ イ ス を ブー ト す る には、 SDK を使用 し て PC 上で ソ フ ト ウ ェ ア (FSBL、 U-Boot) を開発 し 、
Bootgen で イ メ ージ を作成 し ます。 FSBL は Zynq デバ イ ス で動作 し 、 Zynq デバ イ ス に よ っ て使用 さ れ
る ソ フ ト ウ ェ ア を ロ ー ド し ます。
NVM への イ メ ージの ロ ー ド と 、 NVM か ら DDR ( ま たは OCM) へのパーテ ィ シ ョ ン の コ ピー と い う
2 つの ロ ー ド 操作が必要です。 SDK の フ ラ ッ シ ュ プ ロ グ ラ マ (zynq_flash) ま たは U-Boot が、 QSPI に
イ メ ージ を ロ ー ド し ます。
SD を使用す る 場合、 SD カー ド に BIN イ メ ージ を書き 込みます。 こ れには、 USB ケーブルで PC に接
続 さ れ る SD カー ド リ ーダー / ラ イ タ ーを使用 し ます。 SD カー ド を ZC702 評価ボー ド の SDIO ス ロ ッ
ト (J64) に挿入 し ま す。 SD カー ド ま たは QSPI か ら の イ メ ージの コ ピーは、 FSBL ま たは U-Boot に
よ っ て実行 さ れ ます。 NVM の ロ ー ド では、 すべてのパーテ ィ シ ョ ン が通常はフ ラ ッ シ ュ ま たは SD に
ロ ー ド さ れます。 Zynq デバ イ ス は、 通常は 2 段階のプ ロ セ ス でブー ト さ れます。 第 1 段階で FSBL が
ビ ッ ト ス ト リ ーム フ ァ イ ル と U-Boot パーテ ィ シ ョ ン を ロ ー ド し 、 第 2 段階で U-Boot が残 り のパー
テ ィ シ ョ ン を ロ ー ド し ま す。 残 り のパーテ ィ シ ョ ン は、 通常は Linux ア プ リ ケーシ ョ ン を含む Linux
パーテ ィ シ ョ ンです。
U-Boot が Linux と Linux ア プ リ ケーシ ョ ン を ロ ー ド す る のが一般的ですが、 こ の ア プ リ ケーシ ョ ン
ノ ー ト の使用例の大半では、 FSBL が U-Boot、 Linux、 お よ び Linux ア プ リ ケーシ ョ ン を ロ ー ド し ま
す。 こ の場合 も U-Boot は ロ ー ド さ れ る のは、 U-Boot が Linux の ロ ー ド 以外の機能に も 使用 さ れ る た
めです。 FSBL を使用 し て Linux パーテ ィ シ ョ ン を ロ ー ド する と 、 ユーザーはど のパーテ ィ シ ョ ンに暗
号化ま たは認証を適用す る か を指定可能です。 U-Boot は、 将来の リ リ ー ス で こ の機能を提供す る 予定
です。
ブー ト モー ド ピ ンで JTAG が指定 さ れてい る場合、 BootROM コ ー ド は JTAG ポー ト を有効に し ます。
ソ フ ト ウ ェ ア を ロ ー ド お よ び実行には、 XMD が使用 さ れ ま す。 JTAG ブー ト モー ド では、 FSBL は
JTAG ブー ト モー ド が使用 さ れて い る と い う メ ッ セージ を 表示 し ま す。 JTAG モー ド の使用時には、
FSBL はパーテ ィ シ ョ ン を ロ ー ド し ません。 非セキ ュ ア な JTAG ブー ト では、 FSBL ま たは ps7_init の
いずれかがブー ト コ ン ポーネ ン ト を初期化 し ます。
BootROM コ ー ド
BootROM コ ー ド は、 ブー ト 時の初期セ ッ ト ア ッ プを実行 し ます。 マ ス タ ー セキ ュ ア ブー ト ま たはマ ス
タ ー非セキ ュ ア ブー ト の場合、 BootROM コ ー ド は、ブー ト モー ド レ ジ ス タ に よ っ て指定 さ れた NVM
コ ン ト ロ ー ラ ーを初期化 し 、 ブー ト ヘ ッ ダーを解析 し 、 FSBL を OCM に コ ピー し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
9
ブー ト プ ロ セス
図 4 に BootROM コ ー ド の フ ロ ーを示 し ます。 BootROM コ ー ド は、 ブー ト モー ド レ ジ ス タ を読み出
し て、 マ ス タ ー ブー ト モー ド か ス レーブ ブー ト モー ド か、 そ し てマ ス タ ー モー ド の場合、 ど の タ イ プ
の NVM を使用 し てい る のか を判断 し ます。 ま た、 ブー ト ヘ ッ ダーを読み出 し て、 非セキ ュ ア ブー ト
かセキ ュ ア ブー ト か、 そ し てセキ ュ ア ブー ト の場合、 キー ソ ース は BBRAM か eFUSE か を判断 し ま
す。 PL の eFUSE ア レ イ で指定 さ れた キー ソ ース と 、 ブー ト ヘ ッ ダーで指定 さ れた キー ソ ース でキー
が 一 致 し な い 場 合、 BootROM コ ー ド は Zynq デ バ イ ス を セ キ ュ ア ロ ッ ク ダ ウ ン 状態 に し ま す。
BootROM コ ー ド は、 デバ イ ス の状態に基づいてデバ イ ス のブー ト モー ド が不正で あ る と 判断 し た場
合、 Zynq デバ イ ス を セ キ ュ ア ロ ッ ク ダ ウ ン 状態に し ま す。 無効 な状態の例は、 ブー ト ヘ ッ ダーの
Encryption Status フ ィ ール ド で BBRAM を 使用 し た 暗号化 を 指定 し て い る に も か か わ ら ず、 PL の
eFUSE ア レ イ では eFUSE only キー ソ ース を指定 し てい る場合です。セキ ュ ア ブー ト では、 BootROM
コ ー ド は、 FSBL を認証す る前に独自のテ ス ト を実行 し てセキ ュ リ テ ィ を確認 し ます。
XIP (eXecute In Place) モー ド では、 CPU は DDR か ら ではな く NVM か ら 直接 コ ー ド を実行 し ま す。
XIP モー ド はセキ ュ ア ブー ト には使用で き ません。
X-Ref Target - Figure 4
Power Up ||
POR
S - Secure
NS - Non-secure
Clear PS, PL
Boot Mode Register
Initial
Boot
Boot Header
Key Mismatch ||
Illegal Boot Mode ||
Boot Header Error ||
Boot Flow Error
Secure
Lockdown
Efuse Array
Initialize Clocks, Mem Ctlrs
Master (Unencrypted)
Master (Encrypted)
BH Length = 0
Security Disable &
CPU Idle
Master
NS Initial
Boot
Move FSBL: NVM->OCM
Multiboot Error
XIP
JTAG
Boot Flow
Error || XIP
Master
S Initial
Boot
Move FSBL:NVM->OCM
thru AES/HMAC Engine
Unlock/Lock
Subsystems &&
pcfg_aes_en=1
NS First
Stage Boot
S First
Stage Boot
Initialization, Move Images
Multiboot Error
Initialization, Move Images
Authenticate, Enable Decryption if Specified
XAPP1175_05_061513
図 4 : BootRom コ ー ド のフ ロー チ ャ ー ト
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
10
ブー ト プ ロ セス
第 1 段階ブー ト ローダー (FSBL)
FSBL は、 BootROM コ ー ド に よ っ て OCM に ロ ー ド さ れ ま す。 FSBL は Bootgen と 緊密に連携 し て、
Bootgen に よ っ て作成 さ れた イ メ ージ内のパーテ ィ シ ョ ン を読み出 し ます。 FSBL の主な機能は、 NVM
か ら DDR と PL コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ にパーテ ィ シ ョ ン を コ ピーす る こ と です。 暗号化 さ れ
てい る パーテ ィ シ ョ ンは、 復号化のために AES/HMAC エン ジ ンに転送 さ れ、 その後 DDR ま たはほか
のデ ス テ ィ ネーシ ョ ン ア ド レ ス に ロ ー ド さ れ ま す。 system.bit が イ メ ージ に含 ま れ る 場合、 FSBL は
system.bit を PL コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ に転送 し ます。 次に、 FSBL は、 第 2 段階ブー ト ロ ー
ダー (SSBL) ま たはアプ リ ケーシ ョ ン パーテ ィ シ ョ ン を それぞれのデス テ ィ ネーシ ョ ン ア ド レ ス (通常
は DDR) に転送 し ます。 FSBL は複数の ELF フ ァ イ ルを ロ ー ド で き ます。
パーテ ィ シ ョ ン を ロ ー ド す る 2 番目の方法は、 FSBL が u-boot.elf を ロ ー ド し 、 U-Boot が ソ フ ト ウ ェ ア
パーテ ィ シ ョ ン を ロ ー ド す る こ と です。
FSBL は、 パーテ ィ シ ョ ン が ロ ー ド さ れ る 前に、 BootROM コ ー ド に よ っ て起動 さ れたデバ イ ス の初期
化を完了 し ます。 MIO、 ク ロ ッ ク 、 DDR コ ン ト ロ ー ラ ーが初期化 さ れます。
FSBL は、 ほ と ん ど のユーザーの ソ フ ト ウ ェ ア ロ ー ド 要件に対応 し ます。 場合に よ っ ては、 追加の ロ ー
ド 要件や機能要件を満たすために FSBL ソ ース コ ー ド を編集する 必要があ り ます。 例 と し て、 認証証明
の User Defined フ ィ ール ド を、 ロ ー ド さ れ る ソ フ ト ウ ェ ア バージ ョ ンの定義な ど の機能に使用す る 場
合を考え ます。 こ れに対応す る には、 FSBL コ ー ド を編集 し 、 適切な ソ フ ト ウ ェ ア バージ ョ ンが ロ ー ド
さ れてい る か をチ ェ ッ ク さ せ る必要があ り ます。 FSBL ソ ース コ ー ド は、 zynq_fsbl_0 ソ フ ト ウ ェ ア プ
ロ ジ ェ ク ト の src デ ィ レ ク ト リ にあ り ます。
注記 : 編集す る FSBL コ ー ド は多 く の場合、 main.c お よ び image_mover.c に含まれてい ます。
FSBL フ ッ ク は、 ユーザー定義の機能を プ ラ グ イ ンす る フ レーム ワ ー ク を提供 し ます。 FSBL フ ッ ク の
使用例 と し て、 ビ ッ ト ス ト リ ー ム の ダ ウ ン ロ ー ド 後 に PL コ ア を 初期化す る 場合が挙げ ら れ ま す。
fsbl_hook.c 内の FSBL フ ッ ク 関数は次の と お り です。
•
FsblHookBeforeBitstreamDload : ビ ッ ト ス ト リ ームのダ ウ ン ロ ー ド 前に FSBL の編集領域を提供
•
FsblHookAfterBitstreamDload : ビ ッ ト ス ト リ ームのダ ウ ン ロ ー ド 後に FSBL の編集領域を提供
•
FsblHookBeforeHandoff : SSBL ま たはアプ リ ケーシ ョ ンへの FSBL のハン ド オ フ前に、 FSBL の
編集領域を提供
zc702_linux_trd 内の タ ーゲ ッ ト リ フ ァ レ ン ス デザ イ ン (TRD) シ ス テ ム は、 I2C を 初期化す る 際の
FSBL 編集の例を示 し ます。 『シ ンプルな AMP : 2 つの Zynq SoC プ ロ セ ッ サ上で動作す る Linux お よ
びベア メ タ ル シ ス テ ム』 (XAPP1078) では、 FSBL は ロ ー ド す る追加パーテ ィ シ ョ ン を検索 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
11
ブー ト プ ロ セス
図 5 に FSBL の フ ロ ーチ ャ ー ト を示 し ます。
X-Ref Target - Figure 5
Initialization
Read Partition Header
Authentication Certificate?
N
Y
RSA Verify Partition
N
Partition Encrypted?
Y
Route Partition to
AES-HMAC Engine
Route Partition to
Destination
N
Last Partition
Handoff Executable
Partition
XAPP1175_06_080113
図 5 : FSBL フ ロー
FSBL は、 ブー ト イ メ ージ を解析 し て、 イ メ ージに RSA 検証ま たは AES 復号化、 あ る いはその両方が
適用 さ れ る か を判断 し ます。パーテ ィ シ ョ ンが AES 暗号化 さ れてい る場合、 FSBL はそのパーテ ィ シ ョ
ン を AES/HMAC エン ジ ンに転送 し た後、 最終的なデス テ ィ ネーシ ョ ンに転送 し ます。 パーテ ィ シ ョ ン
が RSA 認証 さ れてい る場合、 FSBL は認証証明 (AC) を読み出 し てそのパーテ ィ シ ョ ン を検証 し ます。
AC には公開キー と 署名が含まれてい ます。
FSBL は sha256 お よ び rsa2048_ext ラ イ ブ ラ リ 関数を使用 し てパーテ ィ シ ョ ン を検証 し ます。コ ンパ イ
ル済みの sha256 お よ び rsa2048_ext 関数は、 $XILINX_EDK/lib にあ り ます。 FSBL は NVM 内の イ
メ ージ を解析 し 、 次の手順を実行 し ます。
•
XAPP1175 (v1.0) 2013 年 9 月 12 日
RSA を使用 し てセカ ン ダ リ 公開キー (SPK) を検証す る
japan.xilinx.com
12
AES 暗号化 と RSA 認証
•
RSA を使用 し てパーテ ィ シ ョ ン を検証する
FSBL コ ー ド 内で呼び出 さ れ る RSA 関数は、 イ メ ージ内のパーテ ィ シ ョ ン認証証明の有無に基づいて、
条件付 き で実行 さ れます。
U-Boot
U-Boot は、 エ ン ベデ ッ ド シ ス テ ム に広 く 使用 さ れ て い る オープ ン ソ ー ス の ブー ト ロ ー ダ ーです。
U-Boot は FSBL と 類似 し た機能を実行 し ます。 ま た、 NVM と DDR の読み出 し /書 き 込みな ど の追加
機能を備え てい ま す。 zc702_uboot リ フ ァ レ ン ス シ ス テ ム は、 U-Boot を含むシ ス テ ム を提供 し ま す。
U-Boot は、 通常は OCM ではな く DDR で動作 し ます。 U-Boot の コ ン フ ィ ギ ュ レーシ ョ ン と 構築につ
いては、 wiki.xilinx.com を参照 し て く だ さ い。 U-Boot は、 NVM か ら DDR に Linux を ロ ー ド す る 以
外に、 DDR の読み出 し や NVM の消去/書 き 込み/読み出 し に も 使用 さ れます。 U-Boot に よ る QSPI の
消去/読み出 し /書 き 込み操作は、 PC 上で実行 さ れ る SDK フ ラ ッ シ ュ ラ イ タ ーの代替手段です。 U-Boot
は Zynq デバ イ ス で実行 さ れます。
U-Boot は、 zynq-uboot プ ロ ンプ ト か ら イ ン タ ラ ク テ ィ ブに実行す る こ と も 、 電源投入時に自動的に実
行す る こ と も 可能です。 include/configs デ ィ レ ク ト リ 内の zynq_common.h フ ァ イ ルには、 U-Boot の
機能を設定す る オプシ ョ ンが含まれます。 コ ン フ ィ ギ ュ レーシ ョ ンの編集後、 wiki.xilinx.com で説明 し
てい る よ う に U-Boot を再 コ ンパ イ ルす る 必要があ り ます。 開発段階では、 U-Boot を 5 秒の遅延で コ
ン フ ィ ギ ュ レーシ ョ ン し ま す。 量産段階では、 特にセ キ ュ ア ブー ト の場合、 遅延 0 で リ コ ン フ ィ ギ ュ
レーシ ョ ン、 U-Boot を再構築 し ます。
現在 FSBL でサポー ト し てい る 認証/復号化機能の U-Boot への追加や NVM の追加 コ ン フ ィ ギ ュ レー
シ ョ ンのサポー ト な ど、 U-Boot のサポー ト はザ イ リ ン ク ス で積極的に開発が進め ら れてい る分野です。
AES 暗号化 と
RSA 認証
Bootgen お よ び FSBL ソ フ ト ウ ェ アは、 AES 暗号化、 HMAC 認証、 RSA 認証をサポー ト し てい ます。
RSA は効果的な認証方式です。 AES は公開キー暗号 よ り も 効率的な暗号化方式です。 AES 暗号化 と
HMAC 認証は秘密キーを使用 し 、 RSA 認証は秘密キー /公開キー ペア を使用 し ます。 RSA 認証では、
Bootgen がパーテ ィ シ ョ ン と BootROM コ ー ド に署名を入れ、 FSBL がパーテ ィ シ ョ ン を検証 し ます。
RSA 認証に使用 さ れ る 秘密キー /公開キー ペアには、 秘密キーだけ を使用する 暗号化方式に比べて、 セ
キ ュ リ テ ィ の面で大 き な利点があ り ます。 RSA では、 秘密キーは通常、 物理的セキ ュ リ テ ィ を備えた製
造工場で使用 さ れ ます。 公開キーはエ ンベデ ッ ド デバ イ ス に ロ ー ド さ れ ます。 万一エ ンベデ ッ ド デバ
イ ス が敵対者に よ る 盗難に遭い、 公開キーが抽出 さ れた場合で も 、 損害は限定 さ れ ます。 RSA キー ペ
アは、必要に応 じ て何度で も 変更可能です。 キーを変更す る と 、 キーが解読 さ れ る リ ス ク が低下 し 、 キー
が保護 し てい る IP の脆弱性が軽減 さ れます。
Zynq デバ イ ス は、 100MB/s で復号化/認証を行 う シ リ コ ン ベース の AES/HMAC エン ジ ン を搭載 し て
い ます。 AES/HMAC エン ジ ンは暗号化を実行す る わけではあ り ません。 暗号化/復号化に AES-256 が
使用 さ れ、 秘密キー認証には HMAC が使用 さ れます。 AES 暗号化は Bootgen に よ っ て実行 さ れます。
AES/HMAC エン ジ ンの AES 機能 と HMAC 機能を単独で使用 し て、 パーテ ィ シ ョ ンの復号化/認証を
行 う こ と はで き ません。 AES は 256 ビ ッ ト 秘密キーを使用す る 対称型暗号アルゴ リ ズ ム です。 HMAC
キーは 256 ビ ッ ト 秘密キーです。
Zynq デバ イ ス の RSA 非対称型暗号アルゴ リ ズ ムは、 2048 ビ ッ ト 係数を使用 し ます。 係数は、 一般に
受け入れ ら れてい る キー長の記述です。 BootROM コ ー ド は FSBL パーテ ィ シ ョ ン を認証 し 、 FSBL は
FSBL が ロ ー ド す る パーテ ィ シ ョ ン を認証 し ます。 BootROM コ ー ド と FSBL は、 同 じ RSA アルゴ リ
ズ ム を使用 し ます。
Bootgen はパーテ ィ シ ョ ンに署名を入れ、BootROM コ ー ド と FSBL はパーテ ィ シ ョ ン を検証す る ため、
Bootgen、 BootROM コ ー ド 、 お よ び FSBL ソ フ ト ウ ェ アの イ メ ージ フ ォーマ ッ ト は一致 し ていなけれ
ばな り ません。 認証 さ れ る 各パーテ ィ シ ョ ンについて、 イ メ ージ内の認証証明 (AC) フ ィ ール ド が RSA
認証に使用 さ れます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
13
エ ンベデ ッ ド デバイ スのセキ ュ リ テ ィ
図 6 に Bootgen と FSBL の相互作用を示 し ます。 Bootgen は PC で動作 し 、 FSBL は Zynq デバ イ ス で
動作 し ます。 Bootgen は各パーテ ィ シ ョ ンに対 し て図に示 し た順序で暗号化機能を実行 し ます。同様に、
FSBL は ロ ー ド す る 各パーテ ィ シ ョ ン ご と に図に示 し た順序で暗号化機能を実行 し ます。
Personal Computer
ZC702
Bootgen
FSBL
HMAC Sign
RSA Verify
AES Encrypt
AES Decrypt
RSA Sign
HMAC Verify
XAPP1175_25_051613
X-Ref Target - Figure 6
図 6 : FSBL と Bootgen の相互作用
Bootgen は、 HMAC の生成、 AES 暗号化、 RSA 署名を順に実行 し ます。 Zynq デバ イ ス では、 こ の順
序は逆にな り 、 パーテ ィ シ ョ ンの RSA 認証、 AES 復号化、 HMAC 認証の順に実行 さ れます。
RSA 認証ではパーテ ィ シ ョ ンに署名は入 り ません。 代わ り に SHA256 関数を使用 し て、 パーテ ィ シ ョ
ン のハ ッ シ ュ 値を生成 し ま す。 SHA256 ハ ッ シ ュ は、 パーテ ィ シ ョ ン のサ イ ズが 1000MB であ っ て も
1MB であ っ て も 関係な く 、 同 じ サ イ ズの出力を生成す る 一方向関数です。 ハ ッ シ ュ には、 秘密キーを
使用 し て署名が入れ ら れ ま す。 Bootgen は、 RSA で認証 さ れ る 各パーテ ィ シ ョ ン について、 パーテ ィ
シ ョ ンのキーお よ び署名を含む認証証明 (AC) を書 き 込みます。
ISE 14.7 で は、 FSBL と 同 じ RSA ラ イ ブ ラ リ を 使用 し て パー テ ィ シ ョ ン を RSA 検証す る 機能 が
U-Boot に追加 さ れ る 予定です。
エ ンベデ ッ ド デバ
イ スのセキ ュ リ
ティ
まず潜在的な脅威を特定す る な ど、エンベデ ッ ド デバ イ ス開発の初期段階か ら セキ ュ リ テ ィ を考慮に入
れた設計を行 う 必要があ り ます。 エンベデ ッ ド デバ イ ス に対す る 潜在的な脅威 と し て、 次が挙げ ら れま
す。
•
エンベデ ッ ド デバ イ ス の盗難
•
エンベデ ッ ド デバ イ ス ま たはシ ス テ ム内のデー タ の秘匿性
•
エンベデ ッ ド デバ イ ス の ク ロ ーニ ン グ
•
サービ ス拒否攻撃
•
マル ウ ェ アの挿入に よ る エンベデ ッ ド デバ イ ス の動作の変更
•
内部関係者に よ る 敵対者へのキーの譲渡
図 7 に、 認証 を 使用 し て 信頼 の 連鎖内 で パー テ ィ シ ョ ン を ロ ー ド す る ブ ー ト フ ロ ー を 示 し ま す。
BootROM コ ー ド は FSBL を ロ ー ド し ます。 FSBL お よ び U-Boot ブー ト ロ ーダーは、 ハー ド ウ ェ アお
よ び ソ フ ト ウ ェ ア パーテ ィ シ ョ ン を ロ ー ド し ま す。 セ キ ュ ア ブー ト の主な目的は、 敵対者が修正 さ れ
たパーテ ィ シ ョ ン を ロ ー ド す る こ と を防ぎ、 独自のパーテ ィ シ ョ ンの機密性を維持す る こ と です。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
14
エ ンベデ ッ ド デバイ スのセキ ュ リ テ ィ
BootROM
Code
FSBL
Bitstream
SSBL
OS
U-Boot
Linux
Apps
XAPP1175_02_051613
X-Ref Target - Figure 7
図 7 : セキ ュ ア ブー ト の信頼の連鎖
ユーザーは、 ど のパーテ ィ シ ョ ン を暗号化 し 、 RSA 秘密キー /公開キー ペア を使用 し て ど のパーテ ィ
シ ョ ン を認証す る か を Bootgen で定義 し ます。 信頼の連鎖内のすべてのパーテ ィ シ ョ ン を認証すれば、
不正操作 さ れていないパーテ ィ シ ョ ンだけが確実に ロ ー ド さ れ る よ う にな り ます。
キーのセキ ュ リ テ ィ は、 エンベデ ッ ド デバ イ ス のセキ ュ リ テ ィ の重要な部分です。 RSA の利点の 1 つ
は、 秘密キーがデバ イ ス に ロ ー ド さ れない こ と です。 も う 1 つの利点は、 パーテ ィ シ ョ ン ご と に異な る
RSA キーを指定で き 、 パーテ ィ シ ョ ンのア ッ プデー ト 時に RSA キーを変更で き る こ と です。 キーを変
更すれば、 敵対者がキーを攻撃で き る時間が制限 さ れ、 脆弱性のあ る情報 も 限定 さ れます。
キーのセキ ュ リ テ ィ を強化す る ために、 Bootgen は RSA キーへのア ク セ ス を情報セキ ュ リ テ ィ 担当者
のみに制限 し 、キーを安全に扱 う 機能を備えてい ます。最終的なエンベデ ッ ド 製品に使用 さ れてい る キー
には情報セキ ュ リ テ ィ 担当者 し かア ク セ ス で き ないため、内部関係者に よ る攻撃の脅威が軽減 さ れます。
Zynq デバ イ ス は さ ら に、 多数の ソ フ ト ウ ェ ア IP と ハー ド ウ ェ ア IP をデバ イ ス のセキ ュ リ テ ィ 境界内
に統合す る こ と に よ り 、 セキ ュ リ テ ィ を確保 し てい ます。 ビル ド オプシ ョ ン と ソ フ ト ウ ェ アの組み合わ
せに よ り 、 セキ ュ リ テ ィ 境界内での IP の保護が可能 と な り ます。 さ ら に、 Zynq デバ イ ス は、 機密性が
求め ら れ る プ ロ グ ラ ムお よ びデー タ の格納に利用で き る、比較的大容量のセキ ュ ア ス ト レージ を備え て
い ます。 こ の ス ト レージには Linux OS の保持に十分な容量はないため、 機密機能 と 非機密機能のシ ス
テ ム パーテ ィ シ ョ ン が必要にな り ま す。 リ ン カー ス ク リ プ ト と BIF 属性に よ り 、 DDR か ら オープ ン
ソ ース コ ー ド を実行 し 、 機密性が求め ら れ る アプ リ ケーシ ョ ンはオンチ ッ プ セキ ュ ア ス ト レージか ら
実行で き ます。 「Secure Key Driver」 に、 オンチ ッ プ メ モ リ (OCM) か ら コ ー ド の位置を特定す る リ ン
カー ス ク リ プ ト が記載 さ れてい ます。
エンベデ ッ ド シ ス テ ムは、 一般にセキ ュ ア ブー ト 後 (すなわち、 動作中) に攻撃を受け ます。 オペレー
テ ィ ン グ シ ス テ ム な ど の ロ ー ド さ れた ソ フ ト ウ ェ アは、 敵対者に よ る Zynq デバ イ ス のハー ド ウ ェ ア ま
たは ソ フ ト ウ ェ ア リ ソ ースへのア ク セ ス を許 さ ない よ う に し なければな り ません。
セキ ュ ア ブー ト では、 すべてのパーテ ィ シ ョ ンが信頼の連鎖内で ロ ー ド さ れます。 ブー ト 段階か ら 動作
段階 (すなわち、 Linux アプ リ ケーシ ョ ンの ロ ー ド 完了時点) への移行後、 OS はシ ス テ ム を セキ ュ ア な
状態に維持 し なければな り ません。 非セキ ュ ア ブー ト では、 U-Boot と Linux アプ リ ケーシ ョ ンがビ ッ
ト ス ト リ ーム を ロ ー ド 可能です。 Linux が ロ ー ド さ れ る と 、 アプ リ ケーシ ョ ンは devcfg ド ラ イ バーを使
用 し て ビ ッ ト ス ト リ ーム を ロ ー ド で き ます。
OS は再起動後、devcfg ド ラ イ バーが信頼性のないユーザー / アプ リ ケーシ ョ ンに よ っ てア ク セ ス さ れな
い よ う に し な く てはな り ません。 その最 も 直接的な手段は、 devcfg ド ラ イ バー モジ ュ ールを カーネル
ビル ド の外側に置 く こ と です。 Linux は スーパーバ イ ザー /ユーザー モー ド を備え てい ます。 devcfg ド
ラ イ バーが Linux ビル ド に含 ま れてい る 場合、 ス ーパーバ イ ザーは、 ユーザーにパ ス ワ ー ド を要求 し 、
devcfg フ ァ イ ルへのア ク セ ス を スーパーバ イ ザーのみ許可する こ と で、 ア ク セ ス を制限す る必要があ り
ます。
PS-PL アーキ テ ク チ ャ は、 PS ま たは PL での動作エ ラ ーか ら 回復す る際に冗長性を確保す る機能を提供
し ます。 PS は、 シ ン グル イ ベン ト アプセ ッ ト (SEU) ア ク テ ィ ビ テ ィ に よ っ て ト リ ガー さ れた不正操作
イ ベン ト がないか、 PL を監視で き ます。 PL はセキ ュ リ テ ィ モニ タ ーを使用 し て PS を監視で き ます。
エンベデ ッ ド デバ イ ス のセキ ュ リ テ ィ 要件には、 セキ ュ ア ブー ト 以外に、 不正操作防止や情報保証があ
り ます。 ザ イ リ ン ク ス は、 PL か ら 実行 さ れ る、 完全にテ ス ト 済みのハ イ エン ド セキ ュ リ テ ィ モニ タ ー
IP を販売 し てい ます。 あ る いは、 ユーザーが PL ロ ジ ッ ク リ ソ ース を使用 し ないセキ ュ リ テ ィ モニ タ ー
を開発す る こ と も 可能です。 軽量のセキ ュ リ テ ィ モニ タ ーを開発す る 際には、 『Zynq-7000 のプ ロ セ ッ
シ ン グ シ ス テ ム (PS) と XADC (ザ イ リ ン ク ス アナ ロ グ -デジ タ ル コ ンバータ ー) 間の専用 イ ン タ ーフ ェ
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
15
セキ ュ ア シ ス テムの開発
イ ス を利用 し た シ ス テ ム監視お よ び外部チ ャ ネル計測』 (XAPP1172) [参照 3] を参照す る こ と を推奨 し
ます。
不正操作防止 (AT) については、 『Virtex-6 お よ び 7 シ リ ーズ FPGA での不正操作防止デザ イ ンの開発』
(XAPP1084) で説明 し てい ます。 情報保証 (IA) については、 『デザ イ ン の安全性の確保』 (WP365) [参
照 4]で説明 し てい ます。
セキ ュ ア シ ス テム
の開発
「Xilinx Platform Studio を使用 し たプ ロ ジ ェ ク ト の作成」 の手順に従っ て、 まず基本的なセキ ュ ア シ ス
テ ム を テ ス ト し ます。 Zynq デバ イ ス は、 こ のセ ク シ ョ ン で説明 し ない多 く のセキ ュ リ テ ィ オプシ ョ ン
を備え てい ま す。 図 8 にセ キ ュ ア シ ス テ ム の標準的な開発プ ロ セ ス を示 し ま す。 こ れに従っ て、 ユー
ザーは Zynq デバ イ ス のセキ ュ リ テ ィ 機能の使用法を段階的に学習で き ます。 こ の よ う な段階的な アプ
ロ ーチを使用す る のは、 eFUSE キーお よ び eFUSE only 制御ビ ッ ト が一度プ ロ グ ラ ム さ れ る と 、 eFUSE
キーが失われた場合に BBRAM キーの使用に戻れないか ら です。 ま た、 RSA Enable eFUSE 制御ビ ッ
ト が一度プ ロ グ ラ ム さ れ る と 、 少な く と も マ ス タ ー モー ド での FSBL 認証がなければ、 ボー ド を使用で
き ません。
こ の セ ク シ ョ ン で 説 明す る プ ロ セ ス は 必須 で は あ り ま せ ん が、 Zynq デ バ イ ス は RSA お よ び
AES/HMAC を使用す る セキ ュ リ テ ィ オプシ ョ ン を数多 く 備えてい る ため、 こ こ で取 り あげます。 非セ
キ ュ ア デザ イ ンの開始 し た後の手順は、BBRAM AES キーを使用 し たセキ ュ ア デザ イ ンです。BBRAM
AES キーは再プ ロ グ ラ ム可能です。 次の手順では RSA 認証を有効に し ます。 RSA Enable eFUSE 制御
ビ ッ ト と PPK のハ ッ シ ュ 値は、 Secure Key Driver を使用 し て、 PS の eFUSE エ リ アにプ ロ グ ラ ム さ れ
ます。 BBRAM は、 こ の段階で も AES 復号化のキー ソ ース と し て使用可能です。
Non-Secure Design
Secure Boot - BBRAM
Secure Boot - eFUSE
Secure Boot - eFUSE only
Bootgen
Debug Mode -> Release Mode
XAPP1175_24_051613
X-Ref Target - Figure 8
図 8 : Zynq デバイ スのセキ ュ リ テ ィ オプ シ ョ ンの使用
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
16
TRD のセキ ュ ア ブー ト
次の手順では AES 復号化に eFUSE キーを使用 し ます。 こ の段階では、 非セキ ュ ア ブー ト 、 RSA 認証、
BBRAM AES キーを使用 し たセキ ュ ア ブー ト 、 お よ び eFUSE キーを使用 し たセキ ュ ア ブー ト が可能
です。 AES キー ソ ース を変更する には、 ボー ド の電源を一旦切る 必要があ り ます。 RSA Enable ビ ッ ト
がプ ロ グ ラ ム さ れてい る 場合は、 FSBL の認証が必要です。 RSA が有効な場合の 「非セキ ュ ア」 ブー ト
は、 非認証の非セキ ュ ア ブー ト と は異な り ます。
eFUSE および BBRAM キーのキー スワ ッ プ
キーは eFUSE ま たは BBRAM NVM にプ ロ グ ラ ムで き ます。 BBRAM の利点は、 再プ ロ グ ラ ム可能で
あ り 、 不正操作 イ ベ ン ト が発生 し た場合は消去で き る こ と です。 eFUSE ア レ イ 制御 ビ ッ ト の eFUSE
Secure Boot お よ び BBRAM Key Disable は、 eFUSE キー と BBRAM キーの ス ワ ッ プ を禁止 し てい ま
す。 こ れ ら のビ ッ ト がプ ロ グ ラ ム さ れていない場合は、 電源の切断後に ど ち ら のキー ソ ース も 使用で き
ます。 BBRAM Key Disable がプ ロ グ ラ ム さ れ、eFUSE Secure Boot はプ ロ グ ラ ム さ れていない場合は、
eFUSE キーを使用 し た非セキ ュ ア ブー ト ま たはセキ ュ ア ブー ト が実行可能です。 AES キー ソ ー ス と
し て eFUSE のみを使用す る には、 PL の eFUSE 制御ア レ イ で eFUSE Secure Boot Only ビ ッ ト をプ ロ
グ ラ ム し ます。 PL の eFUSE は、 iMPACT ま たは Secure Key Driver を使用 し てプ ロ グ ラ ム で き ます。
こ の機能のプ ロ グ ラ ム方法は、 「Secure Key Driver」 で説明 し ます。
図の最後のオプシ ョ ン (Bootgen リ リ ース モー ド ) は、 情報セキ ュ リ テ ィ 担当者がセキ ュ ア エンベデ ッ
ド デバ イ ス のプ ロ ダ ク シ ョ ン リ リ ース に使用 し ます。 こ の段階では、 Bootgen リ リ ース モー ド を使用
し て RSA 秘密キーのセキ ュ リ テ ィ を強化で き ます。 こ れについては、 「高度な キー管理オプシ ョ ン」 で
説明 し ます。
TRD のセキ ュ ア
ZC702 ベース シ ス テ ムの TRD をブー ト す る ための ソ ース フ ァ イ ルが、 zc702_linux_trd リ フ ァ レ ン ス
ブー ト
シ ス テ ム に用意 さ れてい ます。 こ のセ ク シ ョ ン では、 タ ーゲ ッ ト リ フ ァ レ ン ス デザ イ ン を使用 し て簡
単にセキ ュ ア ブー ト イ メ ージ を作成す る手順を説明 し ます。 こ こ では、 リ フ ァ レ ン ス デザ イ ン シ ス テ
ム に あ ら か じ め存在す る キーを使用 し ま す。 こ のア プ リ ケーシ ョ ン ノ ー ト の後半には、 「キーの生成」
に関す る セ ク シ ョ ンがあ り ます。
注記 : 次の手順を使用す る と 、 PS の eFUSE が切断 さ れます。 こ れ以降、 ZC702 ボー ド を使用す るすべ
てのテ ス ト では、 少な く と も 1 つのパーテ ィ シ ョ ンが認証 さ れ る 必要があ り ます。
次の手順に従っ て、 TRD のセキ ュ ア ブー ト を実行 し ます。
1. ZC702 ボー ド を セ ッ ト ア ッ プ し ます。 「ZC702 評価ボー ド のセ ッ ト ア ッ プ」 を参照 し て く だ さ い。
ブー ト モー ド ス イ ッ チを JTAG ブー ト モー ド に設定 し ます。
2. Tera Term 通信端末を起動 し 、 Baud Rate = 115200、 Date = 8 Bits、 Parity = None、 Stop Bit = 1、
Flow control = None と 設定 し ます。
3. xapp1175/zc702_secure_key_driver/ready_for_download デ ィ レ ク ト リ に移動 し ます。
こ のデ ィ レ ク ト リ には、 ps_secure_key_read.elf お よ び ps_secure_key_write.elf フ ァ
イ ルがあ り ます。 eFUSE がプ ロ グ ラ ム さ れてい る 場合は、 手順 4 で ps_secure_key_read.elf
を実行 し ます。 eFUSE を プ ロ グ ラ ムする 必要があ り 、 ザ イ リ ン ク ス が用意 し たキーを評価ボー ド
に使用 し て も よ い場合は、 手順 4 で ps_secure_key_write.elf を実行 し ます。
4. コ マ ン ド プ ロ ンプ ト ま たは SDK か ら xmd を実行 し 、 次の コ マ ン ド を実行 し ます。
connect arm hw
source ps7_init.tcl
ps7_init
次のいずれか を実行 し ます。
dow ps_secure_key_write.elf (eFUSE をプ ロ グ ラ ムする 場合 )
ま たは
dow ps_secure_key_read.elf (eFUSE を読み出す場合 )
con
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
17
セキ ュ ア シ ス テムの構築 と ブー ト
5. オプシ ョ ン と し て、 通信端末に表示 さ れ る PPK のハ ッ シ ュ 値が
xapp1175/zc702_efuse_driver/ready_for_download/hash_ppk.txt 内の値 と 一致 し て
い る こ と を確認 し ます。
6. xapp1175/zc702_linux_trd デ ィ レ ク ト リ に移動 し ます。
7. bootgen -image zc702_linux_trd.bif -o zc702_linux_trd.mcs -encrypt bbram を実
行 し ます。
注記 : SDK 14.6 では、 こ の コ マ ン ド は Linux で実行す る必要があ り ます。 Windows は SDK 14.7
でサポー ト さ れ る 予定です。
8. SDK を起動 し ます。 ワ ー ク スペース を xapp1175/zc702_linux_trd/SDK と し て選択 し ます。
9. SDK で [Xilinx Tools] → [Program Flash] を ク リ ッ ク し ます。
10. xapp1175/zc702_linux_trd/zc702_linux_trd.mcs に移動 し て イ メ ージ を指定 し ます。 オ
フ セ ッ ト を [0x0] に設定 し ます。 フ ラ ッ シ ュ の タ イ プ を [QSPI Single] に設定 し ます。 [Program] を
ク リ ッ ク し ます。
11. ZC702 評価ボー ド 上の J25 ジ ャ ンパーを 1 (評価ボー ド がシ ン グル ス イ ッ チを使用す る場合は 4)
に動かす こ と で、 ブー ト モー ド ス イ ッ チを QSPI ブー ト モー ド に切 り 替え ます。
12. 電源を一旦切っ て再度入れます。 Zynq がブー ト し 、 Petalinux プ ロ ンプ ト が表示 さ れてい る こ と を
確認 し ます。 ロ グ イ ンす る には、 ユーザー名に 「root」、 パ ス ワ ー ド に 「root」 と 入力 し ます。
13. 非セキ ュ ア ブー ト と セキ ュ ア ブー ト のブー ト 時間を比較す る には、 手順 7~手順 12 を繰 り 返 し ま
す。 非セキ ュ ア BIF に対 し て手順 7 を再実行する と き は、 -encrypt bbram 引数を削除 し 、 代わ り に
zc702_linux_trd_ns.mcs で QSPI をプ ロ グ ラ ム し ます。
セキ ュ ア シ ス テム
の構築 と ブー ト
こ のセ ク シ ョ ンでは、Xilinx Platform Studio (XPS) お よ び SDK で提供 さ れ る GUI を使用 し た Zynq シ
ス テ ムの開発手順を示 し ます。 AES キーの生成 と 、 非セキ ュ ア イ メ ージお よ びセキ ュ ア イ メ ージの作
成の手順が記載 さ れてい ま す。 14.6 の GUI では、 RSA 認証はサポー ト さ れてい ま せん。 ZC702 評価
ボー ド のセ ッ ト ア ッ プ手順を示 し ます。 zc702_uboot シ ス テ ムは、 JTAG モー ド を使用 し てブー ト さ れ
ます。 こ れに続いて、 ZC702 ボー ド の SD お よ び QSPI メ モ リ を使用 し て非セキ ュ ア ブー ト と セキ ュ ア
ブー ト を実行 し ます。
セキ ュ ア ブー ト に必要な作業は次の と お り です。
•
ザ イ リ ン ク ス のツールを使用 し て Zynq デバ イ ス のハー ド ウ ェ アお よ び ソ フ ト ウ ェ ア を作成す る
•
Bootgen の [Advanced] タ ブ を使用 し てセキ ュ ア イ メ ージ を生成す る
•
Bootgen を使用 し て AES キーを生成す る
•
iMPACT ま たは Secure Key Driver を使用 し て、 AES キーを BBRAM ま たは eFUSE にプ ロ グ ラ
ムす る
•
ZC702 評価ボー ド で SD カー ド を ロ ー ド す る か、 QSPI フ ラ ッ シ ュ を プ ロ グ ラ ムす る
こ のセ ク シ ョ ンでは、シ ス テ ムの開発 と Bootgen GUI の使用について概要を示 し ます。ISE Design Suite
14.6 の Bootgen GUI は、 RSA 認証お よ び暗号化/非暗号化複合パーテ ィ シ ョ ン を サポー ト し てい ま せ
ん。 Bootgen を コ マ ン ド ラ イ ン で実行す る と 、 暗号化/非暗号化複合パーテ ィ シ ョ ン、 パーテ ィ シ ョ ン
のユーザー選択可能なセキ ュ リ テ ィ 、 RSA 認証がサポー ト さ れます。
注記 : こ のセ ク シ ョ ンの手順は、 RSA Enable ビ ッ ト がプ ロ グ ラ ム さ れていないボー ド でのみ有効です。
こ のセ ク シ ョ ンのデザ イ ン フ ァ イ ルは、 設計者が作成す る必要があ り ます。 zc702_uboot シ ス テ ム内の
デザ イ ン フ ァ イ ルは、 RSA_Enable がプ ロ グ ラ ム さ れてい る ボー ド 用です。
高度なセキ ュ リ テ ィ 機能の詳細は、 後半のセ ク シ ョ ンに記載 さ れてい ます。 後半のセ ク シ ョ ン では、 こ
のセ ク シ ョ ンで作成 し た フ ァ イ ルは不要です。 ザ イ リ ン ク ス は、 14.6 か ら デザ イ ン エン ト リ に Vivado
を使用す る こ と を推奨 し てい ます。 ブー ト には SDK が使用 さ れ る ので、 ど の よ う な手法で ソ フ ト ウ ェ
アお よ びビ ッ ト ス ト リ ーム パーテ ィ シ ョ ン を開発 し て も か ま い ません。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
18
セキ ュ ア シ ス テムの構築 と ブー ト
Xilinx Platform Studio を使用 し た プ ロ ジ ェ ク ト の作成
こ のセ ク シ ョ ンでは、 ベース シ ス テ ム ビルダー (BSB) を使用 し て zc702_uboot プ ロ ジ ェ ク ト を作成 し
ま す。 こ の シ ス テ ム は、 PS に UART1 お よ び GPIO IP が あ り 、 PL に GPIO ス イ ッ チ、 GPIO LED、
AXI BRAM、 お よ び AXI タ イ マー IP があ り ます。
zc702_uboot シ ス テ ムには、 MHS、 XMP、 お よ び UCF フ ァ イ ルが含まれます。 し たがっ て、 ザ イ リ ン
ク ス ツールの新 し い リ リ ー ス を使用 し て シ ス テ ム を構築で き ま す。 こ のセ ク シ ョ ン に従っ て新規プ ロ
ジ ェ ク ト を作成す る 場合は、 新規プ ロ ジ ェ ク ト デ ィ レ ク ト リ を作成 し ます。
1. Windows を使用す る 場合は [ISE Design Suite 14.6] → [EDK] → [Xilinx Platform Studio] を ク リ ッ
ク し て、 XPS を 起動 し ま す。 Linux を 使用す る 場合は 「xps &」 と 入力 し ま す。 [Getting Started]
ページで [Create New Project Using Base System Builder] を ク リ ッ ク し ます。 zc702_uboot デ ィ レ
ク ト リ に移動 し ます。 [File Name] に system.xmp が含まれてい る こ と を確認 し ます。 [Save] を ク
リ ッ ク し ます。 図 9 に BSB プ ロ ジ ェ ク ト の作成画面を示 し ます。 [Project File] にプ ロ ジ ェ ク ト 名
を入力 し 、 [OK] を ク リ ッ ク し ます。
X-Ref Target - Figure 9
X1175_07_052313
図 9 : BSB を使用 し た zc702_uboot プ ロ ジ ェ ク ト の作成
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
19
セキ ュ ア シ ス テムの構築 と ブー ト
2. 図 10 に示す よ う に、 [Board Name] で [Zynq ZC702 Evaluation Board] を指定 し ます。 [Next] を ク
リ ッ ク し ます。
X-Ref Target - Figure 10
X1175_08_052313
図 10 : ZC702 評価プ ラ ッ ト フ ォ ームの選択
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
20
セキ ュ ア シ ス テムの構築 と ブー ト
3. 図 11 に示す よ う に、 [Available Peripherals] で [axi_bram_ctl] をハ イ ラ イ ト し 、 [Add] を ク リ ッ
ク し て AXI BRAM IP を追加 し ます。 AXI BRAM は PL の IP です。 64K の容量を選択 し ます。 同
様に [axi_timer] を選択 し て [Add] を ク リ ッ ク し 、 ペ リ フ ェ ラ ルを追加 し ま す。 [Use Interrupt] を
axi_timer に対 し てオンに し ます。 [Finish] を ク リ ッ ク し ます。
X1175_09_052313
X-Ref Target - Figure 11
図 11 : PL への AXI BRAM IP の追加
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
21
セキ ュ ア シ ス テムの構築 と ブー ト
4. 図 12 に示す よ う に、 [Project] → [Export Hardware Design to SDK] を ク リ ッ ク し て、 プ ロ ジ ェ ク
ト を 起動 し 、 ソ フ ト ウ ェ ア 開発キ ッ ト (SDK) を 起動 し ま す。 [Include bitstream and BMM
file] をオンに し ます。 デフ ォ ル ト のオプシ ョ ンでビ ッ ト ス ト リ ーム を作成す る 場合、 こ の手順に
約 10 分かか り ます。 実行中は XPS の右下に ス テー タ ス ア イ コ ンが表示 さ れます。
ハー ド ウ ェ アがエ ク ス ポー ト さ れて SDK が起動す る と 、[Workspace Launcher] ダ イ ア ロ グ ボ ッ ク
ス に ワ ー ク ス ペ ー ス 名 の 入 力 を 求 め る プ ロ ン プ ト が 表 示 さ れ ま す。 ワ ー ク ス ペ ー ス を
[zc702_uboot/SDK] デ ィ レ ク ト リ に設定 し ます。 [OK] を ク リ ッ ク し ます。
X-Ref Target - Figure 12
[BB
図 12 : SDK へのハー ド ウ ェ ア デザイ ンのエ ク スポー ト
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
22
セキ ュ ア シ ス テムの構築 と ブー ト
5. 図 13 に示す よ う に、 [File] → [New] → [Board Support Package] を ク リ ッ ク し ます。 [standalone]
を ク リ ッ ク し 、 デフ ォ ル ト のオプシ ョ ン を使用 し てボー ド サポー ト パ ッ ケージ (BSP) を作成 し ま
す。 [Finish] を ク リ ッ ク し ます。 [Board Support Package Settings] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ
た ら 、 ラ イ ブ ラ リ を選択せずに [OK] を ク リ ッ ク し ます。 SDK に よ っ てボー ド サポー ト パ ッ ケー
ジが作成 さ れます。
X-Ref Target - Figure 13
X1175_11_053113
図 13 : ボー ド サポー ト パ ッ ケージの作成
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
23
セキ ュ ア シ ス テムの構築 と ブー ト
6. FSBL プ ロ ジ ェ ク ト を作成 し ます。 [File] → [New] → [Application Project] を ク リ ッ ク し ます。
[Application Project] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 プ ロ ジ ェ ク ト 名 と し て 「fsbl」 と 入力
し ます。 [Board Support Package] に [Use existing] を選択 し 、 [standalone_bsp_0] を ク リ ッ ク し ま
す。[Next] を ク リ ッ ク し ます。[New Project Templates] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れます。図 14
に FSBL プ ロ ジ ェ ク ト の作成を示 し ます。[Zynq FSBL] を ク リ ッ ク し 、[Finish] を ク リ ッ ク し ます。
X-Ref Target - Figure 14
X1175_12_052313
図 14 : FSBL (第 1 段階ブー ト ローダー ) ソ フ ト ウ ェ ア ア プ リ ケーシ ョ ンの作成
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
24
セキ ュ ア シ ス テムの構築 と ブー ト
7. [Project Explorer] ビ ュ ーで [FSBL] を右 ク リ ッ ク し 、 [Properties] を ク リ ッ ク し ます。
図 15 に示す よ う に、 デバ ッ グ情報が SDK ま たは通信端末ウ ィ ン ド ウ に表示 さ れ る よ う に、 FSBL
コ ン パ イ ル オプ シ ョ ン を編集 し ま す。 コ ン パ イ ルに使用 さ れ る デバ ッ グ オプシ ョ ン に基づい て、
FSBL は イ メ ージ内のパーテ ィ シ ョ ン に関す る 有益な情報を提供 し ま す。 SD ま たは QSPI ブー ト
モー ド を使用す る 場合は、 こ のデバ ッ グ情報が役に立ち ます。JTAG ブー ト モー ド を使用す る場合、
FSBL はパーテ ィ シ ョ ン を コ ピー し ないため、 情報は提供 さ れません。
FSBL デバ ッ グ ロ グ フ ァ イ ル内のブー ト プ ロ セ スの詳細を表示する には、[C/C++ Build] → [Settings]
→ [ARM gcc compiler] → [Symbols] を ク リ ッ ク し、 [DEBUG]、 [FSBL_DEBUG_GENERAL]、
[FSBL_DEBUG_INFO] シ ン ボルを使用 し て コ ンパ イ ルを実行 し ます。 [Defined Symbols] ビ ューで
[+] ア イ コ ン を ク リ ッ ク し、 シ ン ボルを繰 り 返 し 選択 し ます。 [Enter Value] ダ イ ア ロ グ ボ ッ ク ス の
[FSBL_DEBUG_INFO] のエン ト リ を下図に示し ます。 こ の手順を、 各シ ンボルにつき 1 回ずつ、 合
計 3 回実行し ます。
[Apply] を ク リ ッ ク し 、 [OK] を ク リ ッ ク し ます。 FSBL ソ フ ト ウ ェ ア プ ロ ジ ェ ク ト が コ ンパ イ ル
さ れます。 ELF (fsbl.elf) は、 fsbl/Debug デ ィ レ ク ト リ に置かれます。
X-Ref Target - Figure 15
X1175_13_052313
図 15 : FSBL ソ フ ト ウ ェ ア ア プ リ ケーシ ョ ンへのシ ンボル コ ンパイル オプ シ ョ ンの使用
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
25
セキ ュ ア シ ス テムの構築 と ブー ト
8. SDK で [Xilinx Tools] → [Create Zynq Boot Image] を ク リ ッ ク し 、 Bootgen を起動 し ます。 図 16
に Bootgen GUI の起動を示 し ます。
X-Ref Target - Figure 16
X1175_14_052313
図 16 : Bootgen の起動
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
26
セキ ュ ア シ ス テムの構築 と ブー ト
9. [Create Zynq Boot Image] ダ イ ア ロ グ ボ ッ ク ス の [Basic] タ ブ を使用 し て、 BIF フ ァ イ ルのデ ィ レ
ク ト リ と フ ァ イ ル名を指定 し ま す。 [Browse] を ク リ ッ ク し て、 プ ロ ジ ェ ク ト 名 と し て fsbl が指定
さ れた fsbl/Debug デ ィ レ ク ト リ か ら fsbl.elf file を選択 し ます。 パーテ ィ シ ョ ンの リ ス ト に
system.bit を追加 し ま す。 ビ ッ ト ス ト リ ーム を使用す る 場合、 ビ ッ ト ス ト リ ーム パーテ ィ シ ョ
ンは FSBL パーテ ィ シ ョ ンに従 う 必要があ り ます。 パーテ ィ シ ョ ンの リ ス ト に u-boot.elf を追加 し
ます。 図 17 に示す よ う に、 [Create Image] を ク リ ッ ク し て BIF フ ァ イ ル と 非セキ ュ ア BIN お よ び
MCS フ ァ イ ルを生成 し ます。 BIF フ ァ イ ルは、 イ メ ージに含まれ る パーテ ィ シ ョ ン を リ ス ト す る、
Bootgen への入力フ ァ イ ルです。MCS 形式の イ メ ージは QSPI ブー ト モー ド で使用 さ れます。BIN
形 式 の イ メ ー ジ は SD
ブー ト
モ ー ド で 使 用 さ れ ま す。 プ ロ ジ ェ ク ト に デ ィ レ ク ト リ
ready_for_download_unencrypted を作成 し ます。 [Output folder] の [Browse] を ク リ ッ ク し て、 出
力フ ォ ルダー と し て [ready_for_download] デ ィ レ ク ト リ を選択 し ます。
X-Ref Target - Figure 17
[BB
図 17 : Bootgen GUI を使用 し た非セキ ュ ア BIF の作成
10. 暗号化を選択 し た場合、 SDK 14.6 Bootgen GUI は、 イ メ ージ内のすべてのパーテ ィ シ ョ ンが暗号
化 さ れたセキ ュ ア イ メ ージ を生成 し ます。 AES/HMAC エ ン ジ ンは、 256 ビ ッ ト AES キー と 256
ビ ッ ト HMAC キーを要求 し ます。 AES キーは、 ザ イ リ ン ク ス Bootgen ツールま たは外部ツールを
使用 し て生成で き ます。 ザ イ リ ン ク ス Bootgen ソ フ ト ウ ェ ア を使用 し て開発用 AES キーを生成す
る には、 次の内容を含む generate_aeskey.bif フ ァ イ ルを作成 し ます。
generate_aeskey_image:
{
[aeskeyfile] bbram.nky
[bootloader, encryption=aes] fsbl.elf
}
次の Bootgen コ マ ン ド を使用 し て、 AES キーを生成 し ます。
bootgen -image generate_aeskey.bif -o temp.mcs -encrypt efuse | bbram
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
27
セキ ュ ア シ ス テムの構築 と ブー ト
指定 し た AES キーが存在 し ない場合、 Bootgen は、 generate_aeskey.bif フ ァ イ ル内の名前を
持つ AES キーを生成 し ます ( こ の場合は bbram.nky)。
注記 : -encrypt 引数の値は efuse ま たは bbram です。14.6 リ リ ース では、 こ の コ マ ン ド は Windows
で機能 し ません。 Windows での使用は 14.7 でサポー ト さ れ る予定です。
11. セキ ュ ア イ メ ージ を作成す る には、 非セキ ュ ア イ メ ージ と 同様の手順に従っ て [Create Zynq Boot
Image] ダ イ ア ロ グ ボ ッ ク ス の [Basic] タ ブ でパーテ ィ シ ョ ン を 指定 し ま す。 出力デ ィ レ ク ト リ
ready_for_download_bbram を 作成 し ま す。 [Output folder] で こ の デ ィ レ ク ト リ を 指定 し ま す。
[Create Zynq Boot Image] ダ イ ア ロ グ ボ ッ ク ス で [Advanced] タ ブ を ク リ ッ ク し て、 [Enable
encryption] をオンに し 、手順 10 で生成 し たキーを参照 し ます。図 18 に示す よ う に、[Create Image]
を ク リ ッ ク し てセキ ュ ア ブー ト イ メ ージ を作成 し ます。 Bootgen は イ メ ージ を MCS ま たは BIN
形式で記述 し ます。
X-Ref Target - Figure 18
[BB
図 18 : 暗号化 し た イ メ ージの作成
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
28
セキ ュ ア シ ス テムの構築 と ブー ト
ZC702 評価ボー ド のセ ッ ト ア ッ プ
1. 電源ケーブルを 12V J60 コ ネ ク タ に接続 し ます。
2. PC と USB UART J17 コ ネ ク タ を USB ケーブルで接続 し ます。
3. プ ラ ッ ト フ ォーム USB ケーブル II を JTAG コ ネ ク タ J2 に接続 し ます。
表 1 に、 ZC702 のモー ド 選択ス イ ッ チの機能を示 し ます。 ZC702 ボー ド に よ っ ては、 SW16 を使用す
る も の と 、 J25、 J22、 J20 ジ ャ ンパーを使用する も のがあ り ます。
表 1 : ZC702 のブー ト モー ド の選択
XAPP1175 (v1.0) 2013 年 9 月 12 日
MIO[5] - J25
MIO[4] - J22
MIO[3] - J20
JTAG
0
0
0
NOR
0
0
1
NAND
0
1
0
QSPI
1
0
0
SD
1
1
0
japan.xilinx.com
29
セキ ュ ア シ ス テムの構築 と ブー ト
ボー ド のセ ッ ト ア ッ プ後、 次の手順に従っ て、 AES キーのプ ロ グ ラ ム、 ブー ト イ メ ージの ロ ー ド 、 暗
号化 し た イ メ ージのブー ト を実行 し ます。
1. 図 19 に示す よ う に、 Linux を使用す る場合は 「impact &」 と 入力 し て、 iMPACT を起動 し ます。
Windows を 使 用 す る 場合 は [ISE Design Suite 14.6] → [ISE Design Tools] → [64-Bit Tools] →
[iMPACT] を ク リ ッ ク し ます。 プ ロ ジ ェ ク ト フ ァ イ ルの保存を求め る プ ロ ンプ ト が表示 さ れた ら 、
[No] を ク リ ッ ク し ます。 [New iMPACT Project] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れた ら 、 [Cancel] を
ク リ ッ ク し ます。 [iMPACT Flows] ビ ュ ーで [Boundary Scan] を ダブル ク リ ッ ク し ます。 右 ク リ ッ
ク し て、 [Initialize Chain] を ク リ ッ ク し ます。 JTAG チ ェーン を初期化 し ます。 ARM® コ ア ま たは
xc7z020 FPGA の一方だけが JTAG チ ェ ーン上に表示 さ れた場合は、 ブー ト モー ド 選択ス イ ッ チ
を [JTAG] に切 り 替え て、 チ ェ ーン を再初期化 し ます。
コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを割 り 当て る よ う に求め ら れた ら 、[Yes] を ク リ ッ ク し ます。DAP
(一番左のデバ イ ス ) が緑色に表示 さ れた状態で、 [Bypass] を ク リ ッ ク し ます。 xc7z020 が選択 さ れ
た状態で、 [Assign New Configuration File] ダ イ ア ロ グ ボ ッ ク ス に
「xapp1175/xc702_uboot/bbram.nky」 と 入力 し ま す。 [Device Programming Properties] ダ イ
ア ロ グ ボ ッ ク ス が表示 さ れた ら 、 [Cancel] を ク リ ッ ク し ます。
X-Ref Target - Figure 19
[BB
図 19 : iMPACT - 連結 さ れた JTAG チ ェ ーンの検出
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
30
セキ ュ ア シ ス テムの構築 と ブー ト
2. 図 20 に示す よ う に、 iMPACT を使用 し て BBRAM キーを プ ロ グ ラ ム し ます。 [xc7z020] を右 ク
リ ッ ク し 、 [Program] を ク リ ッ ク し ま す。 [Device Programming Properties] が 表 示 さ れ た ら 、
[Cancel] を ク リ ッ ク し ま す。 iMPACT では eFUSE キ ー も プ ロ グ ラ ム で き ま す。 eFUSE キ ー と
BBRAM キーを プ ロ グ ラ ムす る 場合は、 Bootgen の -encrypt efuse | bbram 引数で、 ど ち ら のキー
を使用す る か を指定 し ます。 Bootgen は、 イ メ ージのブー ト ヘ ッ ダー領域にキー ソ ース を書 き 込
みます。 電源投入時に、 BootROM コ ー ド はブー ト ヘ ッ ダーを読み出 し 、 ど のキー ソ ース を使用す
る か を決定 し ます。 eFUSE 制御レ ジ ス タ も iMPACT でプ ロ グ ラ ム さ れます。
図 20 に示す よ う に、 iMPACT GUI ではな く 、 コ マ ン ド ラ イ ンか ら iMPACT を実行す る こ と も 可
能です。 loadkey.cmd を編集 し て、 適切な キー フ ァ イ ルを使用 し ます。
cd xapp1175/zc702_uboot
impact -batch loadkey.cmd
X-Ref Target - Figure 20
[BB
図 20 : iMPACT を使用 し た BBRAM キーのプ ログ ラ ム
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
31
セキ ュ ア シ ス テムの構築 と ブー ト
3. Linux プ ロ ンプ ト で 「xsdk &」 を実行する か、 Windows の ス タ ー ト メ ニ ュ ーで [Xilinx Design
Tools] → [ISE Design Suite 14.6] → [EDK] → [Xilinx Software Development Kit] を ク リ ッ ク し 、
SDK を起動 し ます。 ワー ク スペース を zc702_uboot/SDK に設定 し ます。 [Terminal] タ ブ を ク リ ッ
ク し て、 端末 ウ ィ ン ド ウ を セ ッ ト ア ッ プ し ま す。 図 21 に、 115200 ボー レ ー ト を使用す る よ う に
SDK 通信端末を セ ッ ト ア ッ プする 方法を示 し ます。 あ る いは、 minicom、 Tera Term、 ま たはハ イ
パー タ ー ミ ナルを通信端末 と し て使用す る こ と も 可能です。
X-Ref Target - Figure 21
[BB
図 21 : SDK 通信端末
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
32
セキ ュ ア シ ス テムの構築 と ブー ト
4. SDK で [Xilinx Tools] → [Program Flash] を ク リ ッ ク し ます。オプシ ョ ンに よ り 、[Verify after flash]
をオンに し 、 [Program] を ク リ ッ ク し ます。 図 22 に、 NVM QSPI フ ラ ッ シ ュ メ モ リ のプ ロ グ ラ ム
を示 し ます。
X-Ref Target - Figure 22
[BB
図 22 : QSPI NVM のプ ログ ラ ム
コ マ ン ド プ ロ ンプ ト で QSPI をプ ロ グ ラ ムする には、 次の よ う に入力 し ます。
zynq_flash -f u-boot.mcs -offset 0x0
注記 : こ れは u-boot.mcs が現在のデ ィ レ ク ト リ にあ る こ と を前提 と し てい ます。 ほかのデ ィ レ ク
ト リ にあ る 場合は、 完全なパ ス を指定 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
33
セキ ュ ア シ ス テムの構築 と ブー ト
5. J20/22/25 ス イ ッ チを設定 し て QSPI ブー ト モー ド を選択 し ます。 ボー ド の電源を一旦切っ て再度
入れます。 図 23 に、 通信端末の出力 と U-Boot プ ロ ンプ ト を示 し ます。
X-Ref Target - Figure 23
[BB
図 23 : U-Boot ア プ リ ケーシ ョ ン実行後の通信端末の出力
6. SD カー ド を使用 し てブー ト す る には、Bootgen に よ っ て作成 さ れた <design>.bin を BOOT.bin
に コ ピー し ます。 USB ケーブルを使用 し て、 SD/MMC カー ド リ ーダー / ラ イ タ ーを PC に接続 し
ま す。 BOOT.BIN を SD カー ド に コ ピ ー し ま す。 SD カー ド を SD/MMC ス ロ ッ ト に挿入 し ま す。
ブー ト モー ド を SD (011) に設定 し ます。 電源を一旦切っ て再度入れます。 QSPI ブー ト モー ド を
使用 し た と き と 同 じ 出力が通信端末に表示 さ れてい る こ と を確認 し ます。
QSPI ブー ト エ ラ ーのデバ ッ グ
QSPI モー ド か ら のブー ト 後に機能エ ラ ーが発生 し た場合、 JTAG ブー ト モー ド を使用 し て、 パーテ ィ
シ ョ ン の ロ ー ド 後に機能が予想どお り 働いてい る か を検証 し ます。 [Xilinx Tools] → [XMD Console]
を ク リ ッ ク し 、 次の XMD コ マ ン ド を入力 し ます。
xmd
fpga -debugdevice devicenr 2 -f system.bit
connect arm hw
rst -processor
source ps7_init.tcl
ps7_init
ps7_post_config
dow u-boot.elf
con
exit
注記 : フ ァ イ ルが現在のデ ィ レ ク ト リ にない場合は、 フ ァ イ ルの完全なパ ス を指定 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
34
セキ ュ ア ブー ト イ メ ージの作成
ブー ト で き ない場合、通常は ク ロ ッ ク ま たは メ モ リ コ ン ト ロ ー ラ ーのセ ッ ト ア ッ プが不適当であ る こ と
が原因です。 シ リ コ ンお よ び ソ フ ト ウ ェ アのバージ ョ ンに よ っ て、 ク ロ ッ ク 周波数が変わ る こ と があ り
ます。
JTAG ブー ト に成功 し た場合、 QSPI ブー ト エ ラ ーをデバ ッ グす る ための次の手順は、 デバ ッ グ情報を
提供す る FSBL バージ ョ ン を作成す る こ と です。 こ れについては、 「Xilinx Platform Studio を使用 し た
プ ロ ジ ェ ク ト の作成」 に説明 さ れてい ます。 新 し い FSBL を作成 し 、 デバ ッ グ用 FSBL を BIF に組み
込む手順を参照 し て く だ さ い。 QSPI ブー ト を再実行 し 、 FSBL デバ ッ グ ロ グ フ ァ イ ルを読み出 し て、
ブー ト エ ラ ーを特定 し ます。
セキ ュ ア ブー ト
イ メ ージの作成
シ ス テ ム設計者は、 セ キ ュ ア ブー ト イ メ ージの作成に あ た っ て 2 つの点に注意す る 必要が あ り ま す。
1 つは、 ど のパーテ ィ シ ョ ン を暗号化 し 、 ど のパーテ ィ シ ョ ン を認証す る か を指定す る こ と です。 も う
1 つは、 機密性が求め ら れ る プ ロ グ ラ ムや機密デー タ が Zynq デバ イ ス のセキ ュ リ テ ィ 境界の内側にあ
る セキ ュ ア ス ト レージに配置 さ れ る よ う に、 シ ス テ ム を設計す る こ と です。
標準的な ソ フ ト ウ ェ ア イ メ ージは、比較的大 き いオープン ソ ース U-Boot お よ び Linux パーテ ィ シ ョ ン
と 、 ソ フ ト ウ ェ ア と PLIP を含む独自規格のパーテ ィ シ ョ ン で構成 さ れ ます。 通常は、 独自規格のパー
テ ィ シ ョ ン と 機密性が求め ら れ る パーテ ィ シ ョ ンだけ を暗号化 し ます。 大 き なパーテ ィ シ ョ ン を暗号化
し ていな ければ、 キーが脅威に さ ら さ れ る 危険性は減 り ます。 通常、 U-Boot や Linux な ど のオープ ン
ソ ース ソ フ ト ウ ェ アは、 パーテ ィ シ ョ ンが修正 さ れていない こ と を確認する ために認証 さ れますが、 暗
号化は さ れません。 U-Boot ま たは Linux、 あ る いはその両方に独自の変更が加え ら れた場合は、 こ れ ら
のパーテ ィ シ ョ ン も 暗号化 さ れ る こ と があ り ます。 信頼の連鎖を使用 し てブー ト する 際は、 暗号化は問
題にな り ません。 暗号化は、 パーテ ィ シ ョ ンが読み出 し 不可で、 機密性が確保 さ れてい る こ と を保証 し
ます。 Bootgen イ メ ージ フ ォーマ ッ ト (BIF) フ ァ イ ルは、 パーテ ィ シ ョ ン ご と に暗号化/認証を指定する
Bootgen 入力フ ァ イ ルです。
復号化を使用す る 場合、 AES/HMAC エ ン ジ ンはほかの回路 よ り も 低い ク ロ ッ ク 周波数で動作 し ま す。
つま り 、 暗号化を使用 し ない場合 よ り も ブー ト が遅 く な る こ と があ り ます。 オープン ソ ース のパーテ ィ
シ ョ ン を暗号化 し ないオプシ ョ ン を指定す る と 、 ブー ト 時間が短縮 さ れ ま す。 ZC702 ボー ド で行っ た
QSPI のテ ス ト では、 非セキ ュ ア ブー ト と セキ ュ ア ブー ト のブー ト 時間に差はあ り ません。 ブー ト 時間
は、 NVM の構成お よ びス ピー ド グ レー ド に よ っ て異な り ます。
セキ ュ ア シ ス テ ム作成の最初の手順は、 BIF フ ァ イ ルの作成です。 「付録 B」 に、 エンベデ ッ ド シ ス テ
ムの例におけ る セキ ュ リ テ ィ 要件を示 し ます。 記載 さ れてい る 使用例は、 U-Boot、 Linux、 お よ びマル
チブー ト のセキ ュ ア シ ス テ ム です。 デー タ パーテ ィ シ ョ ンの使用例 も 記載 さ れてい ます。 「付録 B」 の
使用例の BIF を 「付録 C」 に示 し ま す。 こ れ ら の使用例は電源投入時のブー ト 用で あ る た め、 FSBL
パーテ ィ シ ョ ンが含まれてい ます。 Bootgen では、 BIF フ ァ イ ルに必ず し も FSBL パーテ ィ シ ョ ンが含
ま れてい る 必要はあ り ません。 Bootgen は、 単一の ソ フ ト ウ ェ ア ま たはデー タ パーテ ィ シ ョ ンの AES
暗号化お よ び RSA 認証を実行で き ま す。 こ れに よ り 、 FSBL がな く て も 、 ブー ト 後の ロ ー ド 操作がサ
ポー ト さ れます。
Zynq デバ イ ス のセキ ュ ア ス ト レージ と セキ ュ リ テ ィ 境界は、 Linux アプ リ ケーシ ョ ンへのハン ド オ フ
後のセ キ ュ リ テ ィ の維持に効果的です。 NVM で暗号化 さ れ る PL パーテ ィ シ ョ ン は、 PL の コ ン フ ィ
ギ ュ レ ー シ ョ ン メ モ リ で復号化 さ れ、 格納 さ れ ま す。 PS パー テ ィ シ ョ ン は、 NVM で暗号化 さ れ、
AES/HMAC エン ジ ンに よ っ て復号化 さ れます。 DDR 内の ソ フ ト ウ ェ アは通常は暗号化 さ れず、 Zynq
のセキ ュ リ テ ィ 境界の外側に置かれます。
機密性が求め ら れ る ソ フ ト ウ ェ ア と デー タ を保護す る には、 デス テ ィ ネーシ ョ ン ア ド レ ス を Zynq デバ
イ ス のセキ ュ リ テ ィ 境界の内側 (通常は OCM ま たは AXI BRAM) にす る 必要があ り ます。 「セキ ュ ア
シ ス テ ム の構築 と ブー ト 」 では、 AXI BRAM を ARM CPU と 組み合わせて使用す る 方法を示 し ます。
「eFUSE ド ラ イ バー」 では、 OCM 内の コ ー ド /デー タ の位置を特定す る方法を示 し ます。 セキ ュ ア ス ト
レージの容量は限 ら れてい る ため、 ソ フ ト ウ ェ ア メ モ リ マ ッ プ を設計す る 必要があ り ま す。 オープ ン
ソ ース コ ー ド は、 DDR にプ レーン テ キ ス ト で格納で き ます。 機密性が求め ら れ る ソ フ ト ウ ェ アは、 セ
キ ュ ア ス ト レ ージに格納 し ま す。 ソ フ ト ウ ェ ア パーテ ィ シ ョ ン内の コ ー ド を保護す る 必要はないが、
デー タ に機密性が求め ら れ る場合、 リ ン カー ス ク リ プ ト を使用 し てデー タ を OCM に ロ ー ド で き ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
35
セキ ュ ア ブー ト イ メ ージの作成
Bootgen はデー タ のみのパーテ ィ シ ョ ン の ロ ー ド が可能です。 デー タ だけに機密性が求め ら れ る 場合、
デー タ パーテ ィ シ ョ ンはセキ ュ ア ス ト レージの効果的な使用法です。Bootgen は、デー タ パーテ ィ シ ョ
ンの暗号化ま たは認証、 あ る いはその両方を実行で き ます。
RSA 認証 と AES 暗号化は、 ソ フ ト ウ ェ アお よ び ビ ッ ト ス ト リ ーム全体の認証以外に、 ソ フ ト ウ ェ ア
ア ッ プデー ト やパーシ ャ ル ビ ッ ト ス ト リ ームに も 適用で き ます。
Bootgen
Bootgen は、 NVM に ロ ー ド さ れ る イ メ ージ を生成する、 PC ベース の ソ フ ト ウ ェ アです。 BIF フ ァ イ ル
は、 パーテ ィ シ ョ ン を リ ス ト し 、 各パーテ ィ シ ョ ンの認証/暗号化要件を指定 し ます。 Bootgen は 1 つの
イ メ ージ フ ァ イ ルをバ イ ナ リ 形式ま たは MCS 形式で出力 し ます。BIF フ ァ イ ルの属性を使用 し て、パー
テ ィ シ ョ ン ご と に ロ ー ド ア ド レ ス を指定 し 、 そのパーテ ィ シ ョ ンに暗号化ま たは認証、 あ る いはその両
方を適用す る か を指定 し ます。 14.6 の Bootgen では、 セキ ュ リ テ ィ 機能の多 く は Bootgen を コ マ ン ド
ラ イ ンか ら 実行 し た場合にのみ利用可能です。
Bootgen は、 デバ ッ グ モー ド ま たは リ リ ース モー ド で動作 し ます。 デバ ッ グ モー ド は簡単に使用で き 、
多 く のユーザーのセキ ュ リ テ ィ 要件を満た し ます。 リ リ ース モー ド では、 RSA キーのセ キ ュ リ テ ィ が
強化 さ れます。 デバ ッ グ モー ド は、 パーテ ィ シ ョ ンの RSA 署名を与え る必要がないため、 こ のモー ド
の方が使用が容易です。 デバ ッ グ モー ド では、 ユーザーは BIF で RSA 秘密キーを提供 し 、 Bootgen が
ハ ッ シ ュ 値お よ び署名を生成 し ます。 Bootgen の リ リ ース モー ド は、 公開キー と BIF 内の署名を使用
し ます。
Bootgen は SDK 内で も 、 単独のツール と し て も 使用可能です。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
36
セキ ュ ア ブー ト イ メ ージの作成
図 24 に Bootgen の フ ロ ーを示 し ます。
X-Ref Target - Figure 24
Partitions
BIF
Read Keys
Read Partition Attributes
Generate Signatures
Generate Authentication
Certificate
Concatenate Partition,
Encrypted Partition
N
Authentication Certificate
Y
Last Partition
Encrypt Partition
N
Y
N
Authenticated Partition
Generate BIN, MCS files
Y
XAPP1175_26_080113
図 24 : Bootgen のフ ロー チ ャ ー ト
Bootgen を使用す る には、 bootimage.bif な ど の Bootgen イ メ ージ フ ァ イ ル (BIF) を作成 し 、 次の
よ う に コ マ ン ド ラ イ ン で Bootgen を実行 し ます。
bootgen -image bootimage.bif -o <design>.mcs -encrypt bbram
-encrypt <efuse | bbram> 引数が指定 さ れ、 AES キ ー フ ァ イ ルが含 ま れ て い な い場合、 Bootgen は、
[aeskeyfile] 属性引数の接頭辞が フ ァ イ ル名に付いた AES (design.nky) キー フ ァ イ ルを生成 し ます。
こ のキー フ ァ イ ル名は、 BIF フ ァ イ ル内の [aeskeyfile=<design>.nky] 属性の引数 と し て使用す る 必要
があ り ます。
次の BIF は、 すべてのパーテ ィ シ ョ ンが認証 さ れ、 FSBL お よ び Linux アプ リ ケーシ ョ ンが暗号化 さ れ
る Linux イ メ ージの例です。
image: {
[aeskeyfile] bbram.nky
[pskfile] psk.pk1
[sskfile] ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
[encryption=aes, authentication=rsa] system.bit
[authentication=rsa] u-boot.elf
[authentication=rsa,load=0x3000000,offset=0x100000] uImage.bin
[authentication=rsa,load=0x2A00000,offset=0x600000] devicetree.dtb
[authentication=rsa,load=0x2000000,offset=0x620000] uramdisk.image.gz
[authentication=rsa, encryption=aes] sobel_cmd.elf
}
こ の BIF で、 pskfile 属性はプ ラ イ マ リ 秘密キー (psk.pk1) の属性であ り 、 sskfile 属性はセカ ン
ダ リ 秘密キー (ssk.pk1) の属性です。 [aeskeyfile] 属性は、 AES キーを指定 し ます。 すべてのパーテ ィ
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
37
キーの生成 と プ ログ ラ ム
シ ョ ンが認証 さ れます。 fsbl.elf、 system.bit、 お よ び sobel_cmd.elf が暗号化 さ れます。 ロ ー
ド 属性に従っ て、 FSBL は指定 さ れたア ド レ ス にパーテ ィ シ ョ ン を コ ピー し ます。
FSBL は こ れ ら の属性を使用 し 、NVM の [offset] ア ド レ ス か ら DDR の [load] ア ド レ ス にパーテ ィ シ ョ
ン を コ ピー し ます。 こ れ ら の属性を FSBL で使用す る 場合、 U-Boot はパーテ ィ シ ョ ン を ロ ー ド し ない
よ う に構築お よ び コ ン フ ィ ギ ュ レーシ ョ ンす る 必要があ り ま す。 U-Boot の コ ン フ ィ ギ ュ レーシ ョ ンは
次の よ う に定義 し ます。
u-boot-xlnx/include/configs/zynq_common.h を次の よ う に編集 し ます。
次の行の下の sf read 操作を削除 し ます。
#define CONFIG_EXTRA_ENV_SETTINGS
qspi=echo Copying Linux from QSPI flash to RAM
次の コ マ ン ド は変更 し ないで く だ さ い。
bootm 0x3000000 0x2000000 0x2A00000
こ の BIF を使用す る 場合、イ メ ージが ZC702 ボー ド の QSPI には大 きすぎ ます。こ の場合、system.bit
パーテ ィ シ ョ ン を削除す る の も 1 つの選択肢です。
キーの生成 と プ ロ
グラム
こ のセ ク シ ョ ンでは、 使用 さ れ る キー、 キーの形式、 キーの生成、 Bootgen お よ び FSBL コ ー ド に よ る
キーの使用法について説明 し ま す。 zc702_secure_key_driver シ ス テ ムは、 キー と 制御情報を プ ロ グ ラ
ム し ます。 iMPACT を使用 し て PL のキー と 制御情報をプ ロ グ ラ ムする 方法は、 「セキ ュ ア シ ス テ ムの
構築 と ブー ト 」 で説明 さ れてい ます。
Zynq デバ イ ス で使用 さ れ る 暗号キーは次の と お り です。
•
AES 256 ビ ッ ト キー
•
HMAC キー
•
RSA プ ラ イ マ リ 秘密キー (PSK)
•
RSA プ ラ イ マ リ 公開キー (PPK)
•
RSA セカ ン ダ リ 秘密キー (SSK)
•
RSA セカ ン ダ リ 公開キー (SPK)
前述の よ う に、 Zynq デバ イ ス 内の RSA 認証にはプ ラ イ マ リ キー と セ カ ン ダ リ キーが使用 さ れ ま す。
プ ラ イ マ リ キーはセ カ ン ダ リ キー を 認証 し ま す。 セ カ ン ダ リ キーはパーテ ィ シ ョ ン を 認証 し ま す。
Bootgen デバ ッ グ モー ド では、 ユーザーは BIF 内で秘密キーのみを提供 し ます。
キーの生成
開発者の AES/HMAC エ ン ジ ン用キーは、 Bootgen を使用 し て生成 さ れ ま す。 AES キーは、 iMPACT
ま たは Secure Key Driver を使用 し て eFUSE ま たは BBRAM にプ ロ グ ラ ム さ れます。
こ のアプ リ ケーシ ョ ン ノ ー ト では、 OpenSSL を使用 し て RSA キーを生成 し ます。 RSA キーの生成方
法はほかに も あ り ま す。 プ ラ イ マ リ お よ びセ カ ン ダ リ RSA 秘密キーは、 次の OpenSSL コ マ ン ド を使
用 し て生成 さ れます。
openssl genrsa -out psk.pem 2048
openssl genrsa -out ssk.pem 2048
注記 : openssl は Linux デ ィ ス ト リ ビ ュ ーシ ョ ン に含 ま れ て い ま す。 Windows ユーザーは、 Cygwin
OpenSSL を使用す る か、 ま たは http://slproweb.com/products/Win32OpenSSL.html か ら OpenSSL を
ダ ウ ン ロ ー ド で き ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
38
キーの生成 と プ ログ ラ ム
こ れ ら の PEM (Privacy Enhanced Mail) キー フ ァ イ ルの形式は、 バ イ ナ リ DER フ ァ イ ルの Base64 エ
ン コ ー ド です。 こ れ ら の フ ァ イ ルは、 1 行目の “-----BEGIN RSA PRIVATE KEY-----” で識別 さ れます。
RSA では、 公開キーは秘密キーの中に含まれます。 秘密キーか ら 公開キーを抽出す る openssl コ マ ン ド
は、 次の と お り です。
openssl rsa -pubout -in psk.pem -out ppk.pub
openssl rsa -pubout -in ssk.pem -out spk.pub
こ れ ら の フ ァ イ ルの命名規則では、 PEM フ ァ イ ルは秘密キー (非公開キー ) で、 PUB フ ァ イ ルは公開
キーです。 ど ち ら の フ ァ イ ル も PEM 形式ですが、 拡張子が異な り ます。
注記 : こ の規則を強制する メ カニズムは存在し ません。Bootgen は こ れ ら のフ ァ イ ル拡張子を無視し ます。
Bootgen では PEM お よ び PUB フ ァ イ ルを直接使用で き ます。 その他のツールでは、 N、 E、 お よ び D
係数を直接表示す る シ ンプルなテ キ ス ト 形式に フ ァ イ ルを変換 し なければな ら ない場合があ り ます。 こ
の変換は、 OpenSSL を使用 し て こ れ ら の係数を抽出す る convert_key.pl Perl ス ク リ プ ト で実行で
き ます。
convert_key.pl psk.pem psk.pk1
convert_key.pl ssk.pem ssk.pk1
注記 : convert_key.pl の前に xilperl、 Active State Perl、 ま たは /usr/local/bin/perl を付けなければ
な ら ない場合があ り ます。
.pk1 フ ァ イ ルには、 N、 E、 D、 P、 お よ び Q フ ィ ール ド が含 ま れ ま す。 N お よ び E 係数は公開 コ ン
ポーネ ン ト を表 し 、N、E、お よ び D フ ィ ール ド は秘密コ ン ポーネ ン ト を表 し ます。Bootgen で PEM/PUB
フ ァ イ ルの代わ り に *.pk1 フ ァ イ ルを使用す る こ と も 可能です。 Bootgen はキー フ ァ イ ルの形式を自
動的に判断 し ます。
AES キーは *.nky フ ァ イ ルに格納で き 、 [aeskeyfile] 属性を使用 し て BIF 内で参照で き ま す。 通常は
キーを フ ァ イ ルに格納す る必要があ る ため、 キーが脅威に さ ら さ れ る危険性が増加 し ます。 秘密キーを
格納 し た フ ァ イ ルの使用を避け る には、 コ マ ン ド ラ イ ンで AES キーお よ び HMAC キーを次の よ う に
指定 し ます。
bootgen -image zc702_u-boot.bif -o zc702_u-boot.mcs -w on -encrypt efuse
key=<aeskey> StartCBC=<initialization_vector> hmac=<hmac_key>
注記 : 14.6 では、 こ の コ マ ン ド は Windows でサポー ト さ れてい ません。
Zynq デバイ スのセキ ュ リ テ ィ 境界内の eFUSE / BBRAM
RSA 認証では、 PPK のハ ッ シ ュ 値は PS の eFUSE ア レ イ に格納 さ れます。 AES 復号化では、 こ のキー
は PL の eFUSE ま た は BBRAM に 格納 さ れ ま す。 PL の eFUSE 制御 ビ ッ ト (eFUSE Secure Boot、
BBRAM Key Disable、 お よ び JTAG Chain Disable) は、 iMPACT ま たは Secure Key Driver を使用 し
てプ ロ グ ラ ム さ れ ます。 eFUSE は OTP メ モ リ です。 eFUSE のプ ロ グ ラ ム後は、 パ ワ ーオン リ セ ッ ト
(POR) が必要です。
Secure Key Driver
Secure Key Driver は、 PS お よ び PL の eFUSE を プ ロ グ ラ ム し ます。
Secure Key Driver を コ ンパ イ ルお よ び実行する こ と で eFUSE を プ ロ グ ラ ムす る には、 次の作業が必要
です。
•
AES キーを生成す る
•
PPK のハ ッ シ ュ 値を生成す る
•
生成 さ れた AES キー と ハ ッ シ ュ (PPK) 値で xilskey_input.h を編集する
•
必要に応 じ て、 xilskey_input.h 内の XSK_EFUSEPS_DRIVER お よ び XSK_EFUSEPL_DRIVER
を定義す る
•
SDK を使用 し て、 Secure Key Driver ソ フ ト ウ ェ ア プ ロ ジ ェ ク ト を構築する
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
39
キーの生成 と プ ログ ラ ム
•
XMD を使用 し て Secure Key Driver を実行する か、 ま たは NVM に ド ラ イ バーを ロ ー ド し 、 電源
を一旦切っ て再度入れ る
Secure Key Driver は、PS ま たは PL、あ る いはその両方の eFUSE をプ ロ グ ラ ムで き ます。PL の eFUSE
をプ ロ グ ラ ムす る には、 4 つの MIO 出力を MIO 出力か ら JTAG ピ ンに接続 し ます。 プ リ ン ト 回路基板
上に こ れ ら の外部接続が作成 さ れてい る 必要があ り ます。 表 2 に、 zc702 ボー ド 用 Secure Key Driver
で使用 さ れ る 接続に一致す る ピ ン配置の例を示 し ます。ほかの MIO ピ ン を使用する 場合は、 XilSkey ド
ラ イ バー内で指定 さ れ る位置を変更 し ます。
表 2 : eFuse の接続
MIO
JTAG
17
TDI
21
TDO
19
TCK
20
TMS
開発段階では、 通常は iMPACT を使用 し て AES キーを プ ロ グ ラ ムする 方が簡単です。
PPK のハ ッ シ ュ 値の生成
OpenSSL を使用 し て RSA キーを生成 し た後、 Bootgen を使用 し て PPK のハ ッ シ ュ 値を生成 し ます。
gen_hash_ppk.bif フ ァ イ ルを次の内容で生成 し ます。
gen_hash_ppk :
{
[pskfile] psk.pk1
[sskfile] ssk.pk1
[bootloader, authentication=rsa] fsbl.elf
}
次を実行 し ます。
bootgen -image gen_hash_ppk.bif -efuseppkbits hash_ppk.txt
こ の bootgen コ マ ン ド は、 PPK のハ ッ シ ュ 値を含む hask_ppk.txt フ ァ イ ルを生成 し ます。 eFUSE を
使用 し て PPK のハ ッ シ ュ 値を格納する と 、 シ リ コ ン を効率的に利用で き ます。
Secure Key Driver の ELF の生成
SDK を使用 し て Secure Key Driver アプ リ ケーシ ョ ン を作成す る には、 zc702_secure_key_driver デ ィ
レ ク ト リ に移動 し ます。 Secure Key Driver の機能は、 xilskey_efuse_example.c お よ び xilskey_input.h
フ ァ イ ルを編集す る こ と で制御 さ れます。PL の eFUSEs を Secure Key Driver でプ ロ グ ラ ム し ない場合
は、 次の行を コ メ ン ト し ます。
#define XSK_EFUSEPL_DRIVER
PS の eFUSE のみ読み出すには、 xilskey_efuse_example.c 内の書き 込み関数を コ メ ン ト し ます。
xilskey_input.h フ ァ イ ルを編集 し て、 PS の eFUSE ま たは PL の eFUSE、 あ る いはその両方をプ
ロ グ ラ ムで き ます。 次の手順に従っ て、 xilskey_input.h を編集 し ます。
1. eFUSE を使用す る 場合は、 XSK_EFUSEPS_DRIVER お よ び XSK_EFUSEPL_DRIVER を定義 し
ます。
2. PPK のハ ッ シ ュ 値を hash_ppk.txt か ら XSK_EFUSEPS_RSA_KEY_HASH_VALUE に コ ピー
し ます。
3. XSK_EFUSEPS_ENABLE_RSA_KEY_HASH を TRUE に設定 し て、 RSA PPK のハ ッ シ ュ をプ
ロ グ ラ ム し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
40
キーの生成 と プ ログ ラ ム
4. XSK_EFUSEPS_ENABLE_RSA_AUTH を TRUE に設定 し て、 RSA 認証を有効に し ます。
5. PL を プ ロ グ ラ ムす る 場合は、 AES キーを XSK_EFUSEPL_AES_KEY に コ ピー し ます。
6. XSK_EFUSEPL_PROGRAM_AES_AND_USER_LOW_KEY を TRUE に設定 し て、 AES キーを
プ ロ グ ラ ム し ます。
zc702_Secure Key Driver を コ ンパ イ ル し ます。 図 25 に示す よ う に、 xsdk & を実行 し 、 ワー ク スペー
ス を zc702_secure_key_driver SDK に変更 し ます。
X-Ref Target - Figure 25
[BB
図 25 : zc702_secure_key_driver SDK ワー ク スペースの作成
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
41
キーの生成 と プ ログ ラ ム
図 26 に示す よ う に、[File] → [New] → [Application Project] を ク リ ッ ク し 、アプ リ ケーシ ョ ン プ ロ ジ ェ
ク ト を 「secure_key_driver」 と し て定義 し ます。 [Next] を ク リ ッ ク し ます。
X-Ref Target - Figure 26
[BB
図 26 : secure_key_driver ア プ リ ケーシ ョ ン プ ロ ジ ェ ク ト の定義
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
42
キーの生成 と プ ログ ラ ム
図 27 に示す よ う に、 [Empty Application] を ク リ ッ ク し 、 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れた ら 、 プ ロ
ジ ェ ク ト に 「secure_key_driver」 と い う 名前を付け ます。 [Finish] を ク リ ッ ク し ます。
注記 : SDK の表示が ウ ェ ルカ ム画面で隠れてい る場合は、 ウ ェ ルカ ム画面を閉 じ て く だ さ い。
X1175_31_052313
X-Ref Target - Figure 27
図 27 : 空のア プ リ ケーシ ョ ンの作成
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
43
キーの生成 と プ ログ ラ ム
図 28 に示す よ う に、 [secure_key_driver_bsp] ボー ド サ ポー ト パ ッ ケ ージ を 右 ク リ ッ ク し 、 [Board
Support Package Settings] を ク リ ッ ク し ます。
X-Ref Target - Figure 28
[BB
図 28 : BSP の設定
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
44
キーの生成 と プ ログ ラ ム
図 29 に示す よ う に、 [xilskey] ラ イ ブ ラ リ をオンに し 、 BSP を再構築 し ます。 [OK] を ク リ ッ ク し ます。
X-Ref Target - Figure 29
[BB
図 29 : Secure Key Library の選択
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
45
キーの生成 と プ ログ ラ ム
図 30 に、 コ ンパ イ ル済みの xilskey ラ イ ブ ラ リ を示 し ます。
X-Ref Target - Figure 30
[BB
図 30 : コ ンパイル済みの xilskey ラ イ ブ ラ リ
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
46
キーの生成 と プ ログ ラ ム
efuse_driver を選択 し た状態で、 [File] → [Import] → [General File System] を ク リ ッ ク し て、 [Next] を
ク リ ッ ク し 、 xilskey_efuse_example.c お よ び xilskey_input.h を含む src デ ィ レ ク ト リ に移
動 し て こ れ ら の フ ァ イ ル を イ ン ポー ト し ま す。 2 つの フ ァ イ ル を選択 し 、 [Finish] を ク リ ッ ク し ま す。
[secure_key_driver] プ ロ ジ ェ ク ト を選択 し 、 [Project] → [Build Project] を実行 し ます。 図 31 に、 コ ン
パ イ ル済みの efuse_driver ソ フ ト ウ ェ ア プ ロ ジ ェ ク ト を示 し ます。
X-Ref Target - Figure 31
[BB
図 31 : コ ンパイル済みの Secure Key Driver
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
47
キーの生成 と プ ログ ラ ム
DDR ではな く OCM か ら Secure Key Driver を実行する には、 リ ン カー ス ク リ プ ト lscript.ld を
図 32 に示す よ う に編集 し ます。 SDK で リ ン カー ス ク リ プ ト を開 く には、 [Explorer] タ ブで
efuse_driver/src/lscript.ld を ク リ ッ ク し て、 lscript.ld を右 ク リ ッ ク し 、 [Open] を ク リ ッ
ク し ます。
X-Ref Target - Figure 32
[BB
図 32 : OCM 内の Secure Key Driver のロー ド
セ ク シ ョ ンの位置を ps7_ram_0_S_AXI_BASE_ADDR に変更 し ます。 hw_platform デ ィ レ ク ト リ か ら
ソ ース フ ァ イ ルに ps7_init.c お よ び ps7_init.h フ ァ イ ルを追加 し ます。 ps7_init() コ ールの コ メ
ン ト をはず し ます。 efuse_driver ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン を再構築 し ます。
Secure Key Driver の実行
eFUSE ド ラ イ バーは、 ど のブー ト モー ド で も 実行で き ます。 最 も 簡単な方法は、 JTAG ブー ト モー ド
で XMD を使用す る こ と です。 xapp1175/zc702_secure_key_driver/ready_for_download デ ィ レ ク ト リ
には、ps_secure_key_write.elf お よ び ps_secure_key_read.elf フ ァ イ ルが含まれてい ます。
PS の eFUSE が既にプ ロ グ ラ ム さ れてい る 場合は、 ps_secure_key_read.elf を使用 し ます。
次の手順に従っ て、 XMD で Secure Key Driver を実行 し 、 eFUSE に書 き 込みます。
xmd
connect arm hw
source ps7_init.tcl
ps7_init
stop
dow ps_secure_key_write.elf (if writing)
dow ps_secure_key_read.elf (if reading)
con
stop
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
48
高度なキー管理オプ シ ョ ン
eFUSE ド ラ イ バーの出力は、 Tera Term や SDK タ ー ミ ナルな ど の通信端末で表示で き ます。 通信端末
の作成方法は、 「TRD のセキ ュ ア ブー ト 」 に記載 さ れてい ます。 Secure Key Driver は XMD で実行す
る 代わ り に、 QSPI ま たは SD に ロ ー ド 可能です。 こ のためには、 FSBL と Secure Key Driver を含む
BIF を作成 し ます。
secure_key_driver:
{
[bootloader] fsbl.elf
ps_secure_key_write.elf
}
OCM か ら Secure Key Driver を 実行す る 場合、 FSBL は BIF フ ァ イ ルに含 ま れ ま せん。 DDR か ら
Secure Key Driver を実行す る場合は、 FSBL は BIF フ ァ イ ルに含まれます。 OCM か ら 実行す る際は、
OCM のベース ア ド レ ス を使用する 必要があ り ます。
Bootgen を使用 し て、 MCS ま たは BIN フ ァ イ ルを作成 し ます。 詳細については、 『OS お よ び ラ イ ブ ラ
リ 資料 コ レ ク シ ョ ン』 (UG643) [ 参照 5] に 含 ま れ る 『LibXil SKey for Zynq-7000 AP SoC Devices』
(UG996) を参照 し て く だ さ い。
QSPI を使用す る 場合は、 [SDK] → [Program Flash] を実行 し て QSPI を プ ロ グ ラ ム し ます。 SD カー ド
を使用す る 場合は、 SD カー ド に BOOT.bin を ロ ー ド し 、 カー ド を zc702 ボー ド のカー ド ス ロ ッ ト (J64
SDIO) に挿入 し ます。 ブー ト モー ド ピ ン を SD に設定 し 、 電源を一旦切っ て再度入れます。
Secure Key Driver の も う 1 つの使用法は、 SVF を作成 し 、 iMPACT を使用 し て SVF を再生する こ と
です。 「付録 E」 に、 こ の フ ロ ーの手順を示 し ます。
Secure Key Driver の詳細は、 『OS お よ び ラ イ ブ ラ リ 資料 コ レ ク シ ョ ン』 (UG643) [参照 5] を参照 し て
く だ さ い。
高度なキー管理オ
プシ ョ ン
Bootgen リ リ ース モー ド では、 BIF 属性は RSA 秘密キーではな く 公開キーを使用す る ため、 キー処理
のセキ ュ リ テ ィ が向上 し ます。 一部の組織では、 情報セキ ュ リ テ ィ 担当者がセキ ュ ア エンベデ ッ ド 製品
のプ ロ ダ ク シ ョ ン リ リ ース を担当 し ます。 情報セキ ュ リ テ ィ 担当者のキーの扱い方は、 製品開発部門 と
は異な り ます。 情報セキ ュ リ テ ィ 担当者は、 電子署名にハー ド ウ ェ ア セキ ュ リ テ ィ モジ ュ ール (HSM)
を使用 し 、 暗号化には別個のセキ ュ ア サーバーを使用する こ と があ り ます。 HSM と セキ ュ ア サーバー
は、 通常はセキ ュ ア エ リ ア内に配置 さ れ ます。 HSM はセキ ュ ア キー /署名生成デバ イ ス であ り 、 秘密
キーを生成 し 、 秘密キーを使用 し てパーテ ィ シ ョ ン の暗号化を行い、 RSA キーの公開部分を Bootgen
に提供 し ます。 秘密キーが HSM の外部に出 る こ と はあ り ません。 Bootgen リ リ ース モー ド では、 BIF
は HSM に よ っ て生成 さ れ る 公開キ ー と 署名 を 使用 し ま す。 秘密 キーに関連付け ら れた公開キーは、
ppk.pk1 お よ び spk.pk1 です。
HSM は、Bootgen に よ っ て生成 さ れたパーテ ィ シ ョ ンのハ ッ シ ュ値を受け入れ、ハ ッ シ ュ値 と 秘密キー
に基づいて署名ブ ロ ッ ク を返 し ます。 HSM を エ ミ ュ レー ト す る には、
xapp1175/xc702_secure_key/xil_rsa_sign_src デ ィ レ ク ト リ に用意 さ れた xil_rsa_sign ソ フ ト ウ ェ ア を
使用 し 、 makefile を用いて実行フ ァ イ ルを コ ンパ イ ルする 手順に従い ます。 HSM と 同様に、
xil_rsa_sign は Bootgen に よ っ て提供 さ れ る ハ ッ シ ュ に署名を入れ ます。 xil_rsa_sign 実行フ ァ イ ルを
構築す る には、 xil_sign_rsa_src デ ィ レ ク ト リ に移動 し 、 makefile_linux (makefile_xp) を makefile に コ
ピー し 、 次の コ マ ン ド を実行 し ます。
make xil_rsa_sign
注記 : Windows を使用 し ていて make コ マ ン ド がエ ラ ーにな っ た場合は、 makefile_xp 内の GCC の
ソ ース を編集 し ます。 $XILINX_EDK には、 各種のエンベデ ッ ド プ ロ セ ッ サ固有の gcc.exe があ り
ます。 こ れ ら の gcc.exe 実行フ ァ イ ルは使用 し ないで く だ さ い。 GCC を完全なパ ス
(c:/cygwin/bin/gcc.exe ま たは $XILINX/gnu/MinGW/5.0.0/nt/bin/gcc.exe) に変更 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
49
高度なキー管理オプ シ ョ ン
xil_rsa_sign を使用す る には、<path>/xapp1175/zc702_secure_key/xil_rsa_sign_src を $PATH に追加 し
ます。
図 33に、 Bootgen リ リ ース モー ド の フ ロ ーを示 し ます。 「xil_rsa_sign」 と 表示 さ れた ス テージは、 HSM
(標準モー ド ) ま たは xil_rsa_sign のいずれで も 実行で き ます。
X-Ref Target - Figure 33
bootimage_spk.bif
bootgen -generate_hashes
spk.pk1.sha256
xil_rsa_sign -gensig
spk.pk1.sha256.sig
bootimage_partitions.bif
bootgen -generate_hashes
fsbl.elf.sha256
uboot.elf.sha256
system.bit.sha256
xil_rsa_sign -gensig
fsbl.elf.sha256.sig
uboot.elf.sha256.sig
system.bit.sha256.sig
bootimage_presign.bif
Bootgen
<design>.mcs|bin
XAPP1175_28_060613
図 33 : Bootgen リ リ ース モー ド の フ ロー
こ のセ ク シ ョ ンでは、 デバ ッ グ モー ド と リ リ ース モー ド で Bootgen を実行 し ます。 出力 イ メ ージ フ ァ
イ ル (zc702_uboot_dm.mcs お よ び zc702_uboot_rm.mcs) の内容に違いがない こ と がわか り ます。
デバ ッ グ モー ド と リ リ ース モー ド で Bootgen を実行す る には、 xapp1175/zc702_secure_key デ ィ レ ク
ト リ に移動 し ます。
デバ ッ グ モー ド の Bootgen のセ ッ ト ア ッ プ
次の よ う に Bootgen を実行 し ます。
bootgen -image bootimage_dm.bif -o zc702_uboot_dm.mcs -encrypt efuse
こ こ で、 bootimage_dm.bif は次の と お り です。
bootimage_dm:
{
[aeskeyfile] efuse.nky
[pskfile] psk.pk1
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
50
高度なキー管理オプ シ ョ ン
[sskfile] ssk.pk1
[bootloader, encryption=aes, authentication=rsa] fsbl.elf
[encryption=aes, authentication=rsa] system.bit
[authentication=rsa] u-boot.elf
}
注記 : 14.6 では、 こ の コ マ ン ド は Windows でサポー ト さ れてい ません。
Bootgen リ リ ース モー ド の手順
xapp1175/zc702_secure_key デ ィ レ ク ト リ に、 リ リ ース モー ド での Bootgen の実行の例があ り ます。 リ
リ ース モー ド を使用 し た キーお よ び署名の生成手順は次の と お り です。
1. 次の コ マ ン ド を使用 し て、 SPK のハ ッ シ ュ フ ァ イ ルを作成 し ます。
bootgen -image spk.bif -generate_hashes
こ こ で、 spk.bif は次の と お り です。
spk:
{
[spkfile] spk.pk1
}
Bootgen は SPK のハ ッ シ ュ spk.pk1.sha256 を生成 し ます。
2. xil_rsa_sign を実行 し て、 SPK の署名を生成 し ます。
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.bin
[encryption=aes, authentication=rsa] system.bit
[authentication=rsa] u-boot.elf
}
Bootgen は、 fsbl.elf.0.sha256、 u-boot.elf.0.sha256、 u-boot.elf.1.sha256、 お よ び
system.bit.0.sha256 を生成 し ます。 一部の ELF フ ァ イ ルは 2 つのパーテ ィ シ ョ ン (プ ロ グ ラ ム
テキ ス ト ブ ロ ッ ク と MMU ブ ロ ッ ク ) で構成 さ れる ため、パーテ ィ シ ョ ンに よ っ ては 2 つの SHA256
フ ァ イ ルが存在し ます。 イ メ ージはま だ構築 さ れていません。 ハ ッ シ ュ は作成 さ れています。
4. xil_rsa_sign を使用 し て、 作成 さ れたハ ッ シ ュ の署名を生成 し ます。
xil_rsa_sign -gensig -sk ssk.pk1 -data fsbl.elf.0.sha256 -out
fsbl_debug.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
こ れ ら の処理に よ り 、 SSK お よ びパーテ ィ シ ョ ンの署名が生成 さ れます。 次の bootgen コ マ ン ド を実行
し 、 イ メ ージ を作成 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
51
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
bootgen -image bootimage_presign.bif -o zc702_u-boot.mcs -encrypt efuse
こ こ で、 BIF は次の と お り です。
bootimage_presign:
{
[ppkfile] ppk.pk1
[spkfile] 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
[encryption=aes, authentication=rsa, presign=u-boot.elf.0.sha256.sig]
u-boot.elf
}
デバ ッ グ モー ド と リ リ ース モー ド で Bootgen が生成する MCS/BIN イ メ ージに違いはあ り ません。 こ
れを確認する には、 次の コ マ ン ド を実行 し ます。
diff zc702_uboot_dm.mcs zc702_uboot_rm.mcs
こ れ ら の手順を実行す る ための makefile が xil_rsa_sign に用意 さ れてい ます。 xil_rsa_sign と bin を編
集 し て、 適切なパス を指定 し ます。 次の コ マ ン ド を実行 し ます。
make clean
make all
デフ ォ ル ト では、 zc702_*.bin フ ァ イ ルが作成 さ れ ま す。 MCS フ ァ イ ルを作成す る には、 makefile で
bin を mcs に変更 し ます。
セキ ュ ア エ ン ベ
デ ッ ド シ ス テム
ア プ リ ケーシ ョ ン
こ のセ ク シ ョ ン では、 Zynq のセ キ ュ リ テ ィ 機能を利用 し た アプ リ ケーシ ョ ン について説明 し ます。 ま
た、 セ キ ュ リ テ ィ と 高信頼性 を 組み合わせた マルチブー ト の例 を 多数示 し ま す。 GDB デバ ッ ガーで
ps_autherr マルチブー ト リ フ ァ レ ン ス デザ イ ン を使用 し 、 RSA 認証お よ びマルチブー ト フ ロ ーを解析
し ます。 QSPI を使用 し た Linux のブー ト 時間を テ ス ト す る 2 つの方法について説明 し ます。 Bootgen
を用いて認証証明内のユーザー定義フ ィ ール ド を作成す る方法を示 し ます。zc702_data リ フ ァ レ ン ス シ
ス テ ムは、 Zynq デバ イ ス のセキ ュ ア ス ト レージにデー タ フ ァ イ ルを ロ ー ド する 方法を示 し ます。 さ ま
ざ ま なセキ ュ リ テ ィ 要件に対応 し た JTAG デバ ッ グ ポー ト の階層的制御の使用について説明 し ます。
マルチ ブー ト
デバ イ ス が元のア ッ プデー ト ブー ト イ メ ージ をブー ト で き なか っ た場合、マルチブー ト を利用 し て ゴー
ルデン イ メ ージ をブー ト で き ます。 マルチブー ト の例は、 zc702_multiboot リ フ ァ レ ン ス シ ス テ ム で示
さ れてい ます。 代替的なマルチブー ト イ ンプ リ メ ン テーシ ョ ン も 可能です。 こ の イ ンプ リ メ ン テーシ ョ
ン では、 ア ッ プデー ト イ メ ージの ロ ー ド に問題が起 き た場合にゴールデン イ メ ージがバ ッ ク ア ッ プに
な る よ う に、 ア ッ プデー ト イ メ ージ と ゴールデン イ メ ージの内容が同一にな っ てい ます。 こ の機能は
「フ ォールバ ッ ク 」 と 呼ばれ る こ と があ り ます。
さ ま ざ ま なマルチブー ト 要件が、 ソ フ ト ウ ェ ア ア ッ プデー ト を可能に し ます。 ソ フ ト ウ ェ ア ア ッ プデー
ト イ メ ージ を ロ ー ド で き なか っ た場合、 FSBL は元の イ メ ージ を ロ ー ド し ま す。 デバ イ ス のセ キ ュ リ
テ ィ を確保す る には、 デバ イ ス を既知の作業状態でブー ト す る こ と が重要です。 説明 さ れてい る マルチ
ブー ト 手法を活用す る こ と で、 こ れ ら のマルチブー ト 要件のいずれに も 対応で き ます。
マルチブー ト シ ス テ ム の目的は、 テ ス ト 可能なマルチブー ト シ ス テ ム の作成方法を示す こ と です。 テ
ス ト 可能で あ る ためには、 意図的にシ ス テ ム にエ ラ ーを発生 さ せ る 必要が あ り ま す。 zc702_multiboot
シ ス テ ムについては、 図 34 に 3 つの イ メ ージ を使用 し たマルチブー ト 用 QSPI の レ イ ア ウ ト を示 し ま
す。 最初の イ メ ージは FSBL イ メ ージで、 0x0 に置かれます。 2 番目の イ メ ージはア ッ プデー ト イ メ ー
ジで、 0x400000 に置かれます。 3 番目の イ メ ージはゴールデン イ メ ージで、 0xA00000 に置かれます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
52
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
すべての イ メ ージは同 じ FSBL を使用 し ます。2 番目の イ メ ージ と 3 番目の イ メ ージの開始ア ド レ ス は、
イ メ ージのサ イ ズに応 じ て変更で き ます。
X-Ref Target - Figure 34
0x0
FSBL
0x400000
FSBL
system_corrupt.bit
u-boot.elf
0xA00000
FSBL
system.bit
u-boot.elf
XAPP1175_56_080213
図 34 : zc702_multiboot のフ ラ ッ シ ュ レ イ アウ ト
3 つの イ メ ージ を作成する ための BIF フ ァ イ ルは、 bootimage_fsbl.bif、
bootimage_update.bif、 お よ び bootimage_golden.bif です。 次の Bootgen コ マ ン ド を使用 し
て、 3 つの イ メ ージの MCS フ ァ イ ルを作成 し ます。
bootgen -image bootimage_fsbl.bif -o fsbl.mcs -encrypt efuse
bootgen -image bootimage_update.bif -o update.mcs -encrypt efuse
bootgen -image bootimage_golden.bif -o golden.mcs -encrypt efuse
注記 : xapp1175/zc702_multiboot デ ィ レ ク ト リ には、 5 つのマルチブー ト シ ス テ ムがあ り ます。 こ のセ
ク シ ョ ン では、 すべての例に適用 さ れ る 一般的な手順を示 し ま す。 対象 と な る マルチブー ト シ ス テ ム
デ ィ レ ク ト リ ( た と えば、 ps_autherr) に変更 し 、 こ のセ ク シ ョ ンで示す手順に従い ます。
zc702_multiboot の例では、 ア ッ プデー ト イ メ ージは意図的に破損 さ せてい ます。 Bootgen の イ メ ージ
出力は破損 し てい ますが、Bootgen へのパーテ ィ シ ョ ン入力は破損 し ていない こ と に注意 し て く だ さ い。
マルチブー ト では、 ブー ト プ ロ セ ス 中に破損 し た イ メ ージが検出 さ れ、 それに続いて破損 し ていない
ゴールデン イ メ ージが ロ ー ド さ れます。
例 と し て、 xapp1175/zc702_multiboot/ps_autherr シ ス テ ムでは、 ソ フ ト ウ ェ ア (PS) に意図的に RSA エ
ラ ーを発生 さ せ ます。 こ のセ ク シ ョ ン で既に示 し た手順で update.mcs を作成後、 次の コ マ ン ド を使
用 し ます。
cp update.mcs update.mcs$
こ れに よ り 、 元のバージ ョ ン が保存 さ れ ます。 diff 命令を使用す る と 、 イ メ ージが破損 さ れた こ と を確
認 で き ま す。 RSA 認証 エ ラ ー の 原因 と な る 破損は、 update.mcs の 行 15900 で 発生 し て い ま す。
update.mcs$ は元のア ッ プデー ト MCS フ ァ イ ルであ り 、 こ の例ではゴールデン MCS イ メ ージ と 同
じ 内容です。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
53
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
図 35 に、 [SDK] → [Program Flash] を ク リ ッ ク し て FSBL イ メ ージ を QSPI の位置 0x0 に書 き込む手
順 を 示 し ま す。 こ の プ ロ セ ス を 繰 り 返 し て、 update.mcs を 0x400000 の 位 置 に プ ロ グ ラ ム し 、
golden.mcs を 0xA00000 の位置にプ ロ グ ラ ム し ます。
X-Ref Target - Figure 35
[BB
図 35 : FSBL イ メ ージのプ ログ ラ ム
注記 : 14.7 以前の ソ フ ト ウ ェ アでは、 SDK プ ロ グ ラ ム フ ラ ッ シ ュ は QSPI に複数の イ メ ージ を正 し く
プ ロ グ ラ ムで き ません。
zc702_multiboot の例で 3 つの イ メ ージ を ロ ー ド す る 2 番目の方法は、 U-Boot を使用 し ます。次の手順
に従っ て、 U-Boot を使用 し て イ メ ージ を ロ ー ド し ます。
1. 次の Bootgen コ マ ン ド で BIN 出力形式の イ メ ージ を作成 し ます。
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$
次の例の よ う に、 16 進数エデ ィ タ ー (gvim や hd な ど ) を使用 し ます。
gvim update.bin
ビ ッ ト ス ト リ ームは 0x194C0 か ら 始ま り ます。
行 19570 な ど で文字を変更 し ます。
update.bin フ ァ イ ルを保存 し ます。
3. 次の コ マ ン ド で変更内容を確認 し ます。
diff update.bin update.bin$
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
54
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
4. zc702_multiboot/ready_for_download デ ィ レ ク ト リ 内の BOOT.bin フ ァ イ ルに、 FSBL パーテ ィ
シ ョ ン と U-Boot パーテ ィ シ ョ ンが含まれてい ます。 こ の BOOT.bin が SD カー ド か ら ブー ト さ れ
る と 、 U-Boot が Zynq デバ イ ス で実行 さ れます。 BOOT.bin、 fsbl.bin、 update.bin、 お よ び
golden.bin を SD カー ド に コ ピー し ます。 ブー ト モー ド を SD に設定 し ます。 通信端末を開 き、 電
源を一旦切っ て再度入れます。
U-Boot プ ロ ンプ ト に、 手順 5 ~ 12 の コ マ ン ド を入力 し ます。
5. mmcinfo
6. fatload mmc 0 0x100000 fsbl.bin
7. sf probe 0 0 0
8. sf write 0x100000 0 0x20000
9. fatload mmc 0 0x100000 update.bin
10. sf write 0x100000 0x400000 ${filesize}
11. fatload mmc 0 0x100000 golden.bin
12. sf write 0x100000 0xA00000 ${filesize}
13. ボー ド の電源を切 り ます。 SD ブー ト モー ド か ら QSPI ブー ト モー ド に変更 し ます。 電源を投入 し
ます。
図 36 に、 マルチブー ト 動作に U-Boot を使用 し た QSPI のプ ロ グ ラ ム を示 し ます。 こ れは、 手順 5 ~
12 の コ マ ン ド を示 し てい ます。
X-Ref Target - Figure 36
X1175_42_060613
図 36 : U-Boot を使用 し たプ ログ ラ ム
通信端末に表示 さ れ る ロ グ出力を読み、 マルチブー ト が正 し く 機能 し てい る こ と を確認 し ます。 マルチ
ブー ト でゴールデン イ メ ージが正常に ロ ー ド さ れ る と 、 通信端末ウ ィ ン ド ウ に U-Boot プ ロ ンプ ト が表
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
55
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
示 さ れ ます。 system.bit が正常に ロ ー ド さ れ る と 、 DS19 が点滅 し ます。 こ の表示は、 ア ッ プデー ト イ
メ ージの ロ ー ド がエ ラ ーにな っ た後、マルチブー ト でゴールデン イ メ ージの ロ ー ド に成功 し た こ と を示
し ます。
FSBL デバ ッ グ ロ グに よ り 、マルチブー ト が設計どお り に機能 し た こ と が最終的に確認で き ます。FSBL
デバ ッ グ ロ グは、 パーテ ィ シ ョ ン の数、 各パーテ ィ シ ョ ン の ロ ー ド ア ド レ ス、 長 さ 、 パーテ ィ シ ョ ン
の暗号化/RSA 署名の有無を示 し ます。 各パーテ ィ シ ョ ンついて、 すべての DEVC レ ジ ス タ 値が表示 さ
れ ま す。 こ れ ら の レ ジ ス タ については、 『Zynq-7000 All Programmable SoC テ ク ニ カル リ フ ァ レ ン ス
マニ ュ アル』 (UG585) [参照 6] で説明 さ れてい ます。DEVC レ ジ ス タ 値に よ っ てデバ ッ グ ロ グは比較的
長 く な り ますが、情報の大半は繰 り 返 し であ る ため、デバ イ ス ロ グ を読むのは簡単です。図 37 に FSBL
デバ ッ グ ロ グ フ ァ イ ルの一部を示 し ます。
X-Ref Target - Figure 37
X1175_43_060613
図 37 : FSBL デバ ッ グ ログの出力
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
56
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
図 38 に示す よ う に、 通信端末で ロ グ フ ァ イ ルを保存 し ます。 こ れに よ り 、 デバ ッ グ ロ グ全体がテ キ ス
ト エデ ィ タ ーで簡単に確認で き ます。
X-Ref Target - Figure 38
X1175_44_052313
図 38 : マルチ ブー ト ログのキ ャ プ チ ャ
マルチブー ト リ フ ァ レ ン ス デザ イ ンは、 複数のマルチブー ト シ ス テ ム を提供 し ます。 意図的に発生 さ
せたエ ラ ーに反応 し てマルチブー ト 機能が正常に機能す る か を テ ス ト す る には、 有効に機能す る イ メ ー
ジ と 特定のエ ラ ーが発生す る イ メ ージ を作成す る必要があ り ます。エ ラ ー モー ド は常に想定どお り と は
限 ら ないため、 ロ グ フ ァ イ ルを確認 し 、 意図 し た と お り の原因でマルチブー ト が機能 し た こ と を確認す
る 必要があ り ます。
マルチブー ト シ ス テ ムに よ っ ては、 エ ラ ーが正 し く 生成 さ れていて も 、 そのエ ラ ー以外の原因でマルチ
ブー ト が機能す る 場合があ り ます。 想定 し た よ う にエ ラ ー モー ド が発生する よ う 、 BIF を構築す る必要
があ り ま す。 た と えば、 zc702_pl_encerr シ ス テ ム を使用す る 際は、 暗号化エ ラ ーが認証エ ラ ーに よ っ
て 隠 さ れ る 可 能 性 が あ り ま す。 こ れ を 防 ぐ に は、 暗 号 化 エ ラ ー を 発 生 さ せ る パ ー テ ィ シ ョ ン の
[authentication=rsa] 属性を省略 し ます。
表 3 に、 zc702_multiboot シ ス テ ム を リ ス ト し ま す。 こ れ ら の例では、 独立 し た hello_update ELF と
hello_golden ELF を使用 し ます。 hello パーテ ィ シ ョ ン内の C print 文は、 ど のパーテ ィ シ ョ ンが実行中
であ る か を示 し ま す。 zc702_ps_autherr シ ス テ ム では、 ソ フ ト ウ ェ ア (PS) での認証エ ラ ー後に ゴール
デン イ メ ージがブー ト さ れます。
表 3 : マルチ ブー ト の例
プロジ ェ ク ト
BIF
zc702_ps_autherr
ps_autherr.bif
update_ps_autherr.bin
ps_autherr.log
zc702_pl_autherr
pl_autherr.bif
update_pl_autherr.bin
pl_autherr.log
zc702_pl_encerr
pl_encerr.bif
update_pl_encerr.bin
pl_encerr.log
zc702_ps_checksum
ps_checksum.bif
update_s_checksum.bin
ps_checksum.log
zc702_pl_checksum
pl_checksum.bif
update_pl_checksum.bin
pl_checksum.log
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
エ ラー
ログ
57
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
zc702_ps_autherr プ ロ ジ ェ ク ト の作成お よ び実行の手順は次の と お り です。
1. ア ッ プデー ト イ メ ージに次の BIF (bootimage_update.bif) を使用 し ます。
the_image
{
[pskfile] psk.pk1
[sskfile] ssk.pk1
[aeskeyfile] efuse.nky
[bootloader, encryption=aes, authentication=rsa] fsbl.elf
[authentication=rsa] hello_update.elf
}
2. Bootgen を使用 し て、 次の コ マ ン ド で update.bin フ ァ イ ルを作成 し ます。
bootgen -image bootimage_update.bif -o update.bin -encrypt efuse
Use the gvim text editor (or similar) to insert an error:
gvim update.bin
3. 図 39 に示す よ う に、 次の コ マ ン ド を実行 し ます。
Tools -> Convert to Hex
update.bin フ ァ イ ルを 16 進数形式で表示 し ます。
X1175_45_060613
X-Ref Target - Figure 39
図 39 : gvim を使用 し たエ ラ ーの生成
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
58
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
4. 図 40 に示す よ う に、 行 01eba0 で発生 し てい る Hello を検索 し ます。
X-Ref Target - Figure 40
X1175_46_060613
図 40 : 認証エ ラ ーを発生 さ せる
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
59
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
5. 図 41 に示す よ う に、 行 1eba0 の最初のニブルを 4865 か ら 5865 に変更 し ます。 Hello が Xello に
変わ る こ と を確認 し ます。 次の よ う に入力 し ます。
Tools > Convert Back
update.bin を保存 し ます。
X-Ref Target - Figure 41
X1175_47_060613
図 41 : PS 認証エ ラ ーが発生する ア ッ プデー ト フ ァ イル
こ のセ ク シ ョ ンで既に示 し た よ う に、 U-Boot プ ロ ンプ ト で手順 5 ~ 13 を実行 し て QSPI への書 き 込み
を実行 し 、 シ ス テ ム をブー ト し ます。 こ のプ ロ セ スは、 マルチブー ト のすべての例に適用可能です。 こ
の手順を利用 し て、 カ ス タ ム マルチブー ト シ ス テ ム を構築で き ます。
FSBL デバ ッ グ
前のセ ク シ ョ ンでは、 最終的な ソ リ ューシ ョ ン を提供する こ と ではな く 、 マルチブー ト ソ リ ュ ーシ ョ ン
の開発方法を示す こ と を目的 と し てい ま し た。 FSBL はマルチブー ト で中心的な役割を担い ます。 FSBL
デバ ッ グ ロ グは、 マルチブー ト プ ロ セ ス中の FSBL の動作を把握す る のに効果的です。 マルチブー ト
プ ロ セ ス を解析す る 2 番目の方法は、 GDB を使用 し て FSBL の各ス テ ッ プ を検討す る こ と です。 GDB
での FSBL の解析は、 パーテ ィ シ ョ ンの ロ ー ド 、 マルチブー ト 、 お よ び RSA 認証におけ る FSBL の動
作を理解す る のに役立ち ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
60
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
図 42 に、 SDK でのデバ ッ グ セ ッ シ ョ ンのセ ッ ト ア ッ プ を示 し ます。 次の よ う に ク リ ッ ク し ます。
[Run] → [Debug Configuration]
デバ ッ グす る fsbl.elf を選択 し ます。
X-Ref Target - Figure 42
X1175_48_060613
図 42 : SDK でのデバ ッ グ セ ッ シ ョ ンの開始
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
61
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
図 43 に、 SDK の GDB デ バ ッ ガ ー を 示 し ま す。 こ れ は マ ル チ ブ ー ト リ フ ァ レ ン ス デ ザ イ ン の
ps_autherr シ ス テ ムです。 こ のシ ス テ ムでは、 hello_update パーテ ィ シ ョ ン で RSA 認証がエ ラ ーにな っ
てい ます。 デバ ッ ガーの位置は、 認証証明を指す コー ド です。
X-Ref Target - Figure 43
X1175_49_060613
図 43 : SDK で FSBL に GDB デバ ッ ガーを実行
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
62
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
図 44 に、 SPK の署名を検証す る 位置に進んだ後の GDB デバ ッ ガーを示 し ます。
X-Ref Target - Figure 44
X1175_50_060613
図 44 : SPK の RSA 検証
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
63
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
図 45 に、 パーテ ィ シ ョ ン を検証する RSA コ ー ド の位置にあ る GDB を示 し ます。
X-Ref Target - Figure 45
X1175_51_060613
図 45 : パーテ ィ シ ョ ンの RSA 検証
ブー ト 時間の測定
ブー ト 時間は、 エンベデ ッ ド デバ イ ス のブー ト モー ド 、 NVM の コ ン フ ィ ギ ュ レーシ ョ ン と ス ピー ド 、
ロ ー ド さ れ る パーテ ィ シ ョ ンのサ イ ズに よ っ て決定 し ます。ほ と ん ど の場合、NVM の コ ン フ ィ ギ ュ レー
シ ョ ンは、 ZC702 評価ボー ド の コ ン フ ィ ギ ュ レーシ ョ ン と 異な り ます。非セキ ュ ア ブー ト お よ びセキ ュ
ア ブー ト モー ド でのブー ト 時間の推定値は、 ザ イ リ ン ク ス のフ ィ ール ド アプ リ ケーシ ョ ン エン ジニア
(FAE) ま でお問い合わせ く だ さ い。 Zynq-7000 AP SoC ツールでサポー ト し てい る フ ラ ッ シ ュ デバ イ ス
の詳細は、 AR50991 を参照 し て く だ さ い。
zc702_linux_trd イ メ ージ を使用す る と 、 おお よ その QSPI ブー ト 時間を推定可能です。 ZC702 ボー ド
を使用す る 場合、 セキ ュ リ テ ィ 機能を含む BIF と セキ ュ リ テ ィ 機能を含ま ない BIF を作成す る こ と で、
非セキ ュ ア ブー ト 時間 と セキ ュ ア ブー ト 時間を比較的容易に比較で き ます。 Petalinux ビル ド では、 非
セキ ュ ア ブー ト 時間 と セキ ュ ア ブー ト 時間に測定可能な差はあ り ません。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
64
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
ブー ト 時間を測定す る 2 番目の方法は、 図 46 に示す よ う に、 FSBL のパフ ォーマ ン ス測定を有効にす
る こ と です。
X-Ref Target - Figure 46
X1175_52_060613
図 46 : SDK での FSBL_PERF オプ シ ョ ンの設定
認証証明内のユーザー定義 フ ィ ール ド
使用例 15 の BIF は、 認証証明内のユーザー定義フ ィ ール ド (UDF) を提供 し ます。 オ フ セ ッ ト 0x8 にあ
る 56 バ イ ト UDF の可能な用途には、 次の も のがあ り ます。
•
ソ フ ト ウ ェ ア バージ ョ ン管理
•
ソ フ ト ウ ェ アで提供 さ れ る証明書
•
タ イ ム ス タ ンプ
•
パーテ ィ シ ョ ン識別子/バージ ョ ン
UDF は、 こ のセ ク シ ョ ン で示すフ ロ ーに従っ て、 Bootgen を使用 し て書 き 込まれます。 デバ イ ス では、
UDF 内の情報は通常は FSBL で処理 さ れます。 FSBL コ ー ド はユーザーが作成す る 必要があ り ます。
ユーザー定義フ ィ ール ド を生成す る には、 uboot_v10.hex フ ァ イ ル と 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
}
udf_data 属性の有効範囲は、 こ の属性が指定 さ れてい る パーテ ィ シ ョ ン (直前の BIF 内の u-boot.elf)
に限 ら れます。 こ の 16 進数フ ァ イ ルには最大 56 バ イ ト が入 り ます。 こ の 16 進数フ ァ イ ルが 56 バ イ ト
未満の と き 、 Bootgen はユーザー定義フ ィ ール ド (UDF) を 0 でパデ ィ ン グ し 、 UDF を 56 バ イ ト に拡張
し ます。 authentication=none のパーテ ィ シ ョ ンに対 し て udf_data 属性を指定 し た場合、 16 進数フ ァ イ
ルが存在 し ないか読み出 し 不可の場合、 16 進数フ ァ イ ルが 56 バ イ ト を超え る 場合、 あ る いは 16 進数以
外の形式を使用 し てい る場合は、 エ ラ ーが発生 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
65
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
例 と し て、 zc702_udf.hex に次の値が入っ てい る 場合を考え ます。
1234 5678 9ABC DEF0 9456 f232 227b dd70
図 47 に、 こ の zc702_udf.hex について認証証明の UDF を示 し ます。
X-Ref Target - Figure 47
X1175_53_060613
図 47 : 認証証明内のユーザー定義フ ィ ール ド
デー タ パーテ ィ シ ョ ンのロー ド
Bootgen は、 ELF お よ び BIT パーテ ィ シ ョ ン以外に、 デー タ パーテ ィ シ ョ ン も ロ ー ド で き ます。 デー
タ パーテ ィ シ ョ ン の代表的な アプ リ ケーシ ョ ン には、 デジ タ ル信号処理 (DSP) 係数や電子カルテ、 財
務記録があ り ます。 Bootgen 属性に よ り 、 デー タ パーテ ィ シ ョ ンに暗号化ま たは認証、 あ る いはその両
方が適用で き ます。 BIF の例を次に示 し ます。
the_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 に ロ ー ド さ れた こ と を確認する には、 必要に応 じ て JTAG ポー ト を無効に し 、
XMD で mrd 0xFFFFC000 8 コ マ ン ド を実行 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
66
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
ブー ト オプ シ ョ ンへの DEVCFG および SLCR レ ジ ス タ の使用
ブー ト に使用 さ れ る DEVCFG レ ジ ス タ は、 0xF8007000 か ら のオ フ セ ッ ト に配置 さ れ る 、 制御、 ロ ッ
ク 、 CFG、 お よ び MCTRL の各レ ジ ス タ です。 0xF8000000 に位置する SLCR に も 汎用 ロ ッ ク レ ジ ス
タ があ り ます。 TRM は各レ ジ ス タ を定義 し ます。 CTRL レ ジ ス タ は頻繁に使用 さ れ る ため、 表 4 に参
考 と し てその定義を示 し ます。 安全性 と セキ ュ リ テ ィ の強化を目的 と し て、 一部の制御ビ ッ ト は三重に
な っ てい ます。
表 4 : 0xF8007000 の制御レ ジ ス タ
名称
ビッ ト
説明
FORCE_RST
31
PS を強制的にセキ ュ ア ロ ッ ク ダ ウ ン状態にす る
PCFG_PROG_B
30
PL を リ セ ッ ト する
PCFG_POR_CNT_4K
29
POR タ イ マーを制御す る
予約
28
PCAP_PR
27
PL の リ コ ン フ ィ ギ ュ レーシ ョ ンに PCAP と ICAP の ど ち ら を使
用す る かを選択す る
PCAP_MODE
26
PCAP イ ン タ ーフ ェ イ ス を有効にする
PCAP_RATE_EN
25
デー タ レー ト を選択する
MULTIBOOT_EN
24
リ セ ッ ト か ら マルチブー ト を有効にす る 。 PS_POR_B に よ っ て
ク リ ア される
JTAG_CHAIN_DIS
23
JTAG チ ェーン を無効にす る
予約
ユーザー モー ド
予約
PCFG_AES_FUSE
PCFG_AES_EN
22:16
15
0 は CPU が BootROM コー ド を実行中であ る こ と を示す
14:13
12
11:9
0 - BBRAM、 1 - EFUSE
000 - AES を無効にす る 、 111 - AES を有効にす る 、 その他 ロ ッ クダウン
SEU_EN
8
0 - PL か ら の SEU 信号を無視す る、 1 - SEU を受信 し た場合は
SEC_EN
7
0 - PS はセキ ュ ア ブー ト さ れなか っ た、1- PS はセキ ュ ア ブー ト
SPNIDEN
6
0 - 非侵入型デバ ッ グ を無効にす る
SPIDEN
5
0 - セキ ュ ア な侵入型デバ ッ グ を無効にす る
NIDEN
4
0 - 非侵入型デバ ッ グ を無効にす る
DBGEN
3
0 - 侵入型デバ ッ グ を無効にす る
DAP_EN
2:0
XAPP1175 (v1.0) 2013 年 9 月 12 日
ロ ッ ク ダ ウ ン状態にす る
さ れた
111 - ARM DAP を有効にす る
japan.xilinx.com
67
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
JTAG デバ ッ グ
Zynq-7000 AP SoC では、 JTAG ポー ト を使用 し て、 ソ フ ト ウ ェ アお よ びビ ッ ト ス ト リ ーム の ロ ー ド 、
AES キーの ロ ー ド 、 情報の制御、 デバ ッ グ を実行で き ます。 JTAG ポー ト が無効に さ れていない場合、
敵対者に よ っ てマル ウ ェ アの挿入や コ ン フ ィ ギ ュ レ ーシ ョ ン メ モ リ お よ び レ ジ ス タ の読み出 し に使用
さ れ る 危険があ り ます。 JTAG ポー ト は、 正当なデバ ッ グ操作に使用 し ない と き は必ず無効に し ます。
Zynq デバ イ スは、 DAP コ ン ト ロ ー ラ ーま たは JTAG コ ン ト ロ ー ラ ー、 あ る いはその両方を使用 し てデ
バ ッ グで き ます。 DAP JTAG チ ェーン と PL JTAG チ ェ ーンは、 連結する こ と も 、 単独で使用す る こ と
も 可能です。 単独で使用す る と 、 SoC/FPGA 全体を敵対者の脅威に さ ら す こ と はあ り せん。 た と えば、
PL へのア ク セだけでデバ ッ グ可能な場合、 PL JTAG チ ェ ーンだけ を利用 し ます。 こ れに よ り 、 PS への
ア ク セ ス さ れ る のを防ぐ こ と がで き ます。
図 48 に、 独立 し た JTAG チ ェ ーン と カ ス ケー ド 接続 し た JTAG チ ェ ーン を示 し ます。
X-Ref Target - Figure 48
Cascade Mode
PS
PL
ARM DAP
FPGA TAP
Independent Mode
PS
PL
ARM DAP
FPGA TAP
XAPP1175_54_053113
図 48 : JTAG チ ェ ーン
Zynq デバ イ スは、 JTAG ポー ト の階層的制御機能を備え てい ます。 こ のため、 セキ ュ リ テ ィ 要件に基づ
いて、 さ ま ざ ま な方法でデバ ッ グ ポー ト へのア ク セ ス を制御で き ま す。 セ キ ュ リ テ ィ 要件は、 エ ンベ
デ ッ ド デバ イ ス の寿命期間内に変わ る こ と があ り ます。 JTAG デバ ッ グ ポー ト を無効にす る には、 3 つ
の方法があ り ます。 Zynq SoC エンベデ ッ ド デバ イ ス を フ ィ ール ド 展開す る前に、 ワ ン タ イ ム プ ロ グ ラ
マブル eFUSE ビ ッ ト を使用 し 、 デバ ッ グ ポー ト へのア ク セ ス を永久的に無効にで き ます。 こ の eFUSE
ビ ッ ト のプ ロ グ ラ ムは元に戻す こ と はで きず、電源を一旦切っ て再度入れて も デバ ッ グ ポー ト は無効の
ま ま です。
2 番目の方法は、 デバ ッ グ ポー ト 無効 eFUSE が切断 さ れていない場合にのみ使用で き ます。 こ の方法
は、 0xF8007000 にあ る 制御レ ジ ス タ 内の JTAG_CHAIN_DISABLE、 DAP_EN、 SPINDEN、 SPIDEN、
NIDEN、 DBGEN ビ ッ ト を使用 し 、 デバ ッ グ ポー ト へのア ク セ ス を無効/有効に し ます (表 4 参照)。 こ
のア ク セ ス制御は、 2 つの JTAG チ ェーン を単独で使用す る か、 連結 し て使用す る かにかかわ ら ず可能
です。
3 番目の方法では、 ロ ッ ク レ ジ ス タ がデバ ッ グ ポー ト へのア ク セ ス を半永久的に無効に し ます。 こ の方
法では、 デバ ッ グ ポー ト へのア ク セ ス は、 電源を一旦切っ て再度入れ る ま で無効です。
セ キ ュ ア ブー ト では、 JTAG ポー ト は BootROM コ ー ド に よ っ て早い段階で無効に さ れ ま す。 製品 リ
リ ース後は、 デバ ッ グ ポー ト を使用 し ないのであれば、 eFUSE 無効 JTAG レ ジ ス タ に書 き 込む こ と で、
JTAG ポー ト を永久的に無効にで き ます。 こ れには、 iMPACT ま たは Secure Key Driver を使用 し ます。
図 49 に、 iMPACT を使用 し て eFUSE に書 き 込む こ と で JTAG ポー ト を無効にする 操作を示 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
68
セキ ュ ア エ ンベデ ッ ド シ ス テム ア プ リ ケーシ ョ ン
X-Ref Target - Figure 49
X1175_55_060613
図 49 : iMPACT を使用 し た JTAG ポー ト の無効化
Secure Key Driver を使用する には、 xilskey_input.h 内の次の行を変更 し ます。
#define XSK_EFUSEPL_DISABLE_JTAG_CHAIN TRUE
「Secure Key Driver」 で示 し た手順に従い、 Secure Key Driver を コ ンパ イ ル し て実行 し ます。
DEVCFG CTRL レ ジ ス タ を使用 し た JTAG の無効化
JTAG_CHAIN_DISBLE eFUSE が切断 さ れていない場合、 CPU は、 CTRL(23)= 0x0 に書 き 込む こ と
で JTAG ポー ト を有効にで き ま す。 セキ ュ ア ブー ト の後、 Zynq デバ イ ス をデバ ッ グす る には、 JTAG
ポー ト を有効にす る 必要があ り ます。
zc702_jtag_en シ ス テ ムは、 セキ ュ ア ブー ト の後に JTAG を有効にす る 方法を示 し ます。 こ の BIF は、
認証お よ び暗号化を使用 し てセキ ュ ア シ ス テ ム を作成 し ます。 こ のプ ロ ジ ェ ク ト では、 FSBL の実行の
最 後 に JTAG ポ ー ト の ロ ッ ク が 解 除 さ れ る よ う に FSBL が 修 正 さ れ ま す。 fsbl_hook.c 内 の
FsblHookBeforeHandoff 関数に、 次の コ ー ド が追加 さ れます。
ctrl_reg = Xil_In32(0xF8007000);
fsbl_printf(DEBUG_INFO,"Before 0xF8007000 = 0x%08x\r\n");
ctrl_reg = ctrl_reg & (~(1<<23));
ctrl_reg = ctrl_reg | 0x7F;
Xil_Out32(0xF8007000,ctrl_reg);
ctrl_reg = Xil_In32(0xF8007000);
fsbl_printf(DEBUG_INFO,"Before 0xF8007000 = 0x%08x\r\n");
こ の FSBL コ ー ド が追加 さ れていない と 、 JTAG ポー ト は ロ ッ ク さ れ、 iMPACT や XMD でア ク セ ス で
き ません。 こ の コ ー ド に よ っ て、 FSBL の実行の最後に JTAG へのア ク セ ス が有効にな り ます。 セキ ュ
ア シ ス テ ム では、 JTAG ポー ト へのア ク セ ス を さ ら に高度な方法で制御す る こ と が求め ら れ ま す。 デ
バ ッ グの完了後は、 JTAG ポー ト を無効にす る 必要があ り ます。 こ れには、 こ のセ ク シ ョ ン で既に説明
し た、 JTAG ポー ト を有効にする コ ー ド の基本的な修正を利用 し ます。 セキ ュ ア ブー ト し たエンベデ ッ
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
69
ま とめ
ド デバ イ ス をデバ ッ グす る 必要があ る と し ます。 ボー ド 上のプ ッ シ ュ ボ タ ン を押す と 、 関連付け ら れ
た GPIO 割 り 込みが生成 さ れ、 JTAG へのア ク セ ス を要求 し ます。 割 り 込みハン ド ラ ーは、 JTAG ポー
ト を有効にす る 前にパ ス ワー ド を確認 し ます。 デバ ッ グ セ ッ シ ョ ンが完了 し た ら 、 2 番目の GPIO 割 り
込みに関連付け ら れた も う 1 つのボ タ ン を押 し ます。 こ れで、 割 り 込みハン ド ラ ーが JTAG ポー ト を無
効に し ます。
ま とめ
Zynq-7000 デバ イ ス では、 セ キ ュ ア ブー ト を容易に イ ン プ リ メ ン ト で き ま す。 Zynq-7000 デバ イ ス は
PL の リ ソ ース を使用す る こ と な く セキ ュ ア ブー ト 機能を提供す る ため、 追加 コ ス ト は最小限に抑え ら
れます。 セキ ュ ア ブー ト は、 多 く の悪意あ る 攻撃か ら エンベデ ッ ド シ ス テ ム を保護す る も ので、 Zynq
デバ イ ス は、 さ ま ざ ま なセキ ュ リ テ ィ 要件に対応す る セキ ュ リ テ ィ オプシ ョ ン を備え てい ます。
付録 A
用語集 - 略語
こ のアプ リ ケーシ ョ ン ノ ー ト では、 次の用語が使用 さ れてい ます。 ほ と ん ど の用語の定義は、 「ブー ト
アーキ テ ク チ ャ 」 に記載 さ れてい ます。
•
AES/HMAC (Advanced Encryption Standard/ Hashed Message Authentication Code)
•
認証証明 (AC)
•
Bitgen
•
Bootgen
•
ブー ト ヘ ッ ダー (BH)
•
ブー ト イ メ ージ フ ォーマ ッ ト (BIF)
•
バ ッ テ リ バ ッ ク ア ッ プ機能付 き RAM (BBRAM)
•
デバ イ ス コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス (DevC)
•
eFUSE ア レ イ
•
Secure Key Driver
•
FSBL (第 1 段階ブー ト ロ ーダー )
•
ISE Design Suite
•
イ メ ージ
•
iMPACT
•
パーテ ィ シ ョ ン
•
パーテ ィ シ ョ ン ヘ ッ ダー
•
プ ロ グ ラ マブル ロ ジ ッ ク (PL)
•
プ ロ セ ッ シ ン グ シ ス テ ム (PS)
•
プ ラ イ マ リ 秘密キー (PSK)
•
プ ラ イ マ リ 公開キー (PPK)
•
RSA (Rivest, Shamir, Adleman)
•
セカ ン ダ リ 秘密キー (SSK)
•
セカ ン ダ リ 公開キー (SPK)
•
ソ フ ト ウ ェ ア開発キ ッ ト (SDK)
•
SHA (Secure Hash Algorithm)
•
セキ ュ ア ス ト レージ
•
U-Boot
•
Xilinx Platform Studio (XPS)
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
70
付録 B
付録 B
ユーザーが選択可能なセキ ュ リ テ ィ 機能の使用例
BIF フ ァ イ ルの属性を使用 し て、 RSA 認証を適用する か、 ま た AES/HMAC 暗号化/認証を適用す る か
をパーテ ィ シ ョ ン ご と に指定 し ます。 表 5 に、 AES/HMAC 暗号化 と RSA 認証をパーテ ィ シ ョ ン ご と
に指定 し た イ メ ージの使用例を示 し ます。ほかの使用例 も あ り 得ます。表 5 のほ と ん ど の使用例は、TRD
と 同 じ パーテ ィ シ ョ ン で構成 さ れ ます。 使用例 11 ~ 14 は、 BIF 内の単一のデー タ パーテ ィ シ ョ ン を
示 し ます。ソ フ ト ウ ェ ア パーテ ィ シ ョ ンやビ ッ ト ス ト リ ーム パーテ ィ シ ョ ン と 同様に、デー タ パーテ ィ
シ ョ ン も 、 初期ブー ト イ メ ージに (すなわち、 FSBL パーテ ィ シ ョ ン と 共に) 含め る こ と がで き ます。
表 5 : セキ ュ リ テ ィ を指定する使用例
BootROM RSA
RSA
AES/HMAC
使用例 1 - 非セキ ュ ア ブー ト
fsbl.elf
system.bit
u-boot.elf
uImage.bin
devicetree.dtb
uramdisk.image.gz
sobel_cmd.elf
使用例 2 - セキ ュ ア ブー ト 、 パーテ ィ シ ョ ン を AES/HMAC 暗号化
fsbl.elf
x
system.bit
x
u-boot.elf
x
uImage.bin
x
devicetree.dtb
x
uramdisk.image.gz
x
sobel_cmd.elf
x
使用例 3 - セキ ュ ア ブー ト 、 FSBL を RSA 認証、 パーテ ィ シ ョ ン を AES/HMAC 暗号化
fsbl.elf
x
x
system.bit
x
u-boot.elf
x
uImage.bin
x
devicetree.dtb
x
uramdisk.image.gz
x
sobel_cmd.elf
x
使用例 4 - セキ ュ ア ブー ト 、 すべてのフ ァ イルを RSA 認証
fsbl.elf
x
x
system.bit
x
u-boot.elf
x
uImage.bin
x
devicetree.dtb
x
uramdisk.image.gz
x
sobel_cmd.elf
x
使用例 5 - セキ ュ ア ブー ト 、 FSBL を RSA 認証
fsbl.elf
x
x
system.bit
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
71
付録 B
表 5 : セキ ュ リ テ ィ を指定する使用例 (続き )
BootROM RSA
RSA
AES/HMAC
u-boot.elf
uImage.bin
devicetree.dtb
uramdisk.image.gz
sobel_cmd.elf
使用例 6 - セキ ュ ア ブー ト 、 すべてのパーテ ィ シ ョ ン を RSA 認証お よび AES/HMAC 暗号化
fsbl.elf
x
x
system.bit
x
x
u-boot.elf
x
x
uImage.bin
x
x
devicetree.dtb
x
x
uramdisk.image.gz
x
x
sobel_cmd.elf
x
x
使用例 7 - セキ ュ ア ブー ト 、 コ ー ド を RSA 認証、 PL ビ ッ ト ス ト リ ームを AES/HMAC 暗号化
fsbl.elf
x
x
system.bit
x
u-boot.elf
x
uImage.gz
x
devicetree.dtb
x
uramdisk.image.gz
x
sobel_cmd.elf
x
x
x
使用例 8 - セキ ュ ア ブー ト 、 FSBL、 PL ビ ッ ト ス ト リ ーム、 ア プ リ ケーシ ョ ン を AES/HMAC
暗号化
fsbl.elf
x
system.bit
x
u-boot.elf
uImage.bin
devicetree.dtb
uramdisk.image.gz
sobel_cmd.elf
x
使用例 9 - 非セキ ュ ア マルチ ブー ト - 3 つのイ メ ージ を示す
イ メ ージ 1
fsbl.elf
イ メ ージ 2
fsbl.elf - 標準
system.bit - 標準
u-boot.elf - 標準
イ メ ージ 3
fsbl.elf - ゴールデン
u-boot.elf - ゴールデン
PL ビ ッ ト ス ト リ ー ム ゴールデン
使用例 10 - セキ ュ ア マルチ ブー ト - 3 つのイ メ ージ を示す
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
72
付録 B
表 5 : セキ ュ リ テ ィ を指定する使用例 (続き )
BootROM RSA
RSA
AES/HMAC
イ メ ージ 1
fsbl.elf
x
x
イ メ ージ 2
fsbl.elf - ゴールデン
system.bit - 標準
x
u-boot.elf - 標準
x
x
イ メ ージ 3
fsbl.elf - ゴールデン
x
x
system.bit - ゴールデン
x
u-boot.elf - ゴールデン
x
x
使用例 11 - 非セキ ュ ア バイ ナ リ デー タ フ ァ イル - 現状のま ま、 Bootgen ソ ースではない
datafile.bin
使用例 12 - 認証済みのバイ ナ リ デー タ フ ァ イル
datafile.bin
x
使用例 13 - AES/HMAC 暗号化済みのバイ ナ リ デー タ フ ァ イル
datafile.bin
x
使用例 14 - AES/HMAC 暗号化済み、 RSA 認証済みのバイ ナ リ フ ァ イル
datafile.bin
x
x
x
x
使用例 15 - 認証証明内のユーザー定義フ ィ ール ド
デー タ フ ァ イ ル
使用例 16 - リ リ ース モー ド の Bootgen - 認証済みの U-Boot
fsbl.elf
x
u-boot.elf
x
x
使用例 17 - リ リ ース モー ド の Bootgen - 認証済みの TRD
fsbl.elf
x
x
system.bit
x
u-boot.elf
x
uImage.gz
x
devicetree.dtb
x
uramdisk.image.gz
x
sobel_cmd.elf
x
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
x
x
73
付録 C
付録 C
Bootgen デバ ッ グ モー ド の BIF
「 イ メ ージ、 パーテ ィ シ ョ ン、 認証証明」 で定義 さ れた シ ス テ ムの BIF は、 次の よ う にな り ます。
使用例 1 - 非セキ ュ ア ブー ト の BIF の例
image: {
[bootloader] zynq_fsbl_0.elf
system.bit
u-boot.elf
ulinux.bin
devicetree.dtb
uramdisk.image.gz
sobel_cmd.elf
}
注記 : RSA Enable eFUSE をプ ロ グ ラ ムす る場合は、 FSBL を認証する 必要があ り ます。 ま た、使用例 1
の BIF は機能 し ません。 こ の場合は、 使用例 5 を使用 し ます。
使用例 2 - すべてのパーテ ィ シ ョ ンが暗号化 さ れる
image: {
[aeskeyfile] system.nky
[bootloader, encryption=aes] zynq_fsbl_0.elf
[encryption=aes] system.bit
[encryption=aes] u-boot.elf
[encryption=aes] ulinux.bin
[encryption=aes] devicetree.dtb
[encryption=aes] uramdisk.image.gz
[encryption=aes] sobel_cmd.elf
}
使用例 3 - FSBL が RSA 認証 さ れ、 すべてのパーテ ィ シ ョ ンが暗号化 さ れる
image: {
[aeskeyfile] system.nky
[pskfile] uc3_psk.pk1
[sskfile] uc3_ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
[encryption=aes] system.bit
[encryption=aes] u-boot.elf
[encryption=aes] uImage.bin
[encryption=aes] devicetree.dtb
[encryption=aes] uramdisk.image.gz
[encryption=aes] sobel_cmd.elf
}
使用例 4 - すべてのパーテ ィ シ ョ ンが RSA 認証 さ れる
注記 : FSBL と PL は最初に指定 さ れた SPK フ ァ イ ルを使用 し て認証 さ れ、 U-Boot、 Linux、 お よ び
hello は linux_ssk.pk1 フ ァ イ ルを使用 し て認証 さ れます。
image: {
[aeskeyfile] system.nky
[pskfile] uc4_1_psk.pk1
[sskfile] uk4_1_ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
[authentication=rsa] system.bit
[sskfile] linux_ssk.pk1
[authentication=rsa] u-boot.elf
[authentication=rsa] uImage.bin
[authentication=rsa] devicetree.dtb
[authentication=rsa] uramdisk.image.gz
[authentication=rsa] sobel_cmd.elf
}
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
74
付録 C
使用例 5 - FSBL が RSA 認証 さ れる
image: {
[aeskeyfile] system.nky
[pskfile] uc5_psk.pk1
[sskfile] uc5_ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
system.bit
u-boot.elf
uImage.bin
devicetree.dtb
uramdisk.image.gz
sobel_cmd.elf
}
使用例 6 - すべてのパーテ ィ シ ョ ンが RSA 認証および AES 暗号化 さ れる
image: {
[aeskeyfile] system.nky
[pskfile] uc6_psk.pk1
[sskfile] uc6_ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
[encryption=aes, authentication=rsa] system.bit
[encryption=aes, authentication=rsa] u-boot.elf
[encryption=aes, authentication=rsa] uImage.bin
[encryption=aes, authentication=rsa] devicetree.dtb
[encryption=aes, authentication=rsa] uramdisk.image.gz
[encryption=aes, authentication=rsa] linux.image.gz
[encryption=aes, authentication=rsa] sobel_cmd.elf
}
使用例 7 - すべてのパーテ ィ シ ョ ンが RSA 認証 さ れる。 FSBL、 ビ ッ ト ス ト リ ーム、 および
sobel_cmd ア プ リ ケーシ ョ ンが AES 暗号化 さ れる
image: {
[aeskeyfile] system.nky
[pskfile] psk.pk1
[sskfile] ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
[encryption=aes, authentication=rsa] system.bit
[authentication=rsa] u-boot.elf
[authentication=rsa,load=0x3000000,offset=0x100000] uImage.bin
[authentication=rsa,load=0x2A00000,offset=0x600000] devicetree.dtb
[authentication=rsa,load=0x2000000,offset=0x620000] uramdisk.image.gz
[encryption=aes, authentication=rsa] sobel_cmd.elf
}
使用例 8 - FSBL、 ビ ッ ト ス ト リ ーム、 およびア プ リ ケーシ ョ ン を AES 暗号化する
image: {
[aeskeyfile] system.nky
[bootloader, encryption=aes] zynq_fsbl_0.elf
[encryption=aes] system.bit
[encryption=none] u-boot.elf
[encryption=none] uImage.bin
[encryption=none] devicetree.dtb
[encryption=none] uramdisk.image.gz
[encryption=aes] sobel_cmd.elf
}
使用例 9 - 非セキ ュ ア マルチ ブー ト
image0: {
[bootloader] zynq_fsbl_0.elf
}
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
75
付録 C
standard_image: {
[bootloader] zynq_fsbl_0.elf
system.bit
u-boot.elf
}
golden_image: {
[bootloader] zynq_fsbl_0.elf
system.bit
u-boot.elf
}
注記 : ア ッ プデー ト イ メ ージ と ゴールデン イ メ ージは、 32K の倍数 と な る ア ド レ ス に置かれてい る 必
要があ り ます。
使用例 10 - セキ ュ ア マルチ ブー ト
image0: {
[aeskeyfile] uc10.nky
[pskfile] uc10_psk.pk1
[sskfile] uc10_ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
}
standard_image: {
[aeskeyfile] uc10.nky
[pskfile] uc10_psk.pk1
[sskfile] uc10_ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
[sskfile] bitstream_ssk.pk1
[encryption=aes, authentication=rsa] system.bit
[sskfile] u-boot_ssk.pk1
[authentication=rsa] u-boot.elf
}
golden_image: {
[aeskeyfile] uc10.nky
[pskfile] uc10_psk.pk1
[sskfile] uc10_ssk.pk1
[bootloader, encryption=aes, authentication=rsa] zynq_fsbl_0.elf
[sskfile] bitstream_ssk.pk1
[encryption=aes, authentication=rsa] system.bit
[sskfile] u-boot_ssk.pk1
[authentication=rsa] u-boot.elf
}
注記 : ア ッ プデー ト イ メ ージ と ゴールデン イ メ ージは、 32K の倍数 と な る ア ド レ ス に置かれてい る 必
要があ り ます。
使用例 11 - 非セキ ュ ア バイ ナ リ デー タ フ ァ イル
image:
{
[bootloader] fsbl.elf
hello.elf
datafile.bin
}
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
76
付録 D
使用例 12 - 認証済みのバイ ナ リ デー タ フ ァ イル
image: {
[bootloader, encryption=aes, authentication=rsa] fsbl.elf
[encryption=aes, authentication=rsa] hello.elf
[authentication=rsa] datafile.bin
}
使用例 13 - AES 暗号化済みのバイ ナ リ デー タ フ ァ イル
image: {
[bootloader, encryption=aes, authentication=rsa] fsbl.elf
[encryption=aes, authentication=rsa] hello.elf
[encryption=aes] datafile.bin
}
使用例 14 - AES 暗号化済み、 RSA 認証済みのバイ ナ リ デー タ フ ァ イル
image: {
[bootloader, encryption=aes, authentication=rsa] fsbl.elf
[encryption=aes, authentication=rsa] hello.elf
[encryption=aes, authentication=rsa] data.bin
}
注記 : 暗黙的な属性 [encryption=none] は、 すべてのパーテ ィ シ ョ ンのデフ ォ ル ト です。
使用例 15 - 認証証明内のユーザー定義フ ィ ール ド
image
{
[bootloader, encryption=aes, authentication=rsa] fsbl.elf
[encryption=aes, authentication=rsa, udf_data=hello_v10.hex] hello.elf
}
付録 D
イ メ ージ、 パーテ ィ シ ョ ン、 認証証明
こ のセ ク シ ョ ン では、 イ メ ージ、 パーテ ィ シ ョ ン、 認証証明について説明 し ま す。 Bootgen は、 NVM
に ロ ー ド さ れ る 1 つの イ メ ージ を生成 し ます。 イ メ ージは 1 つ以上のパーテ ィ シ ョ ン で構成 さ れ ます。
イ メ ージ内のパーテ ィ シ ョ ンが RSA 認証 さ れ る場合、 パーテ ィ シ ョ ンの後に認証証明が続 き ます。
表 6 に、 「 イ メ ージ、 パーテ ィ シ ョ ン、 認証証明」 の使用例 7 の イ メ ージ フ ォーマ ッ ト の例を示 し ます。
FSBL パーテ ィ シ ョ ンについては、 FSBL 認証証明の フ ィ ール ド を示 し ます。 その他のパーテ ィ シ ョ ン
については、 認証証明の位置のみ示 し ます。 すべてのパーテ ィ シ ョ ンの認証証明は同 じ 形式です。
表 6 : 使用例 7 のイ メ ージ フ ォ ーマ ッ ト の例
ブー ト ヘ ッ ダー
パーテ ィ シ ョ ン ヘ ッ ダー テーブル
FSBL デー タ セグ メ ン ト
512 ビ ッ ト ア ラ イ メ ン ト - 0x のパデ ィ ン グ
認証証明のヘ ッ ダー
ユーザー定義フ ィ ール ド - 56 バ イ ト
RSA PPK - 2 x 2048 + 512 ビ ッ ト
RSA SPK - 2 x 2048 + 512 ビ ッ ト
RSA SPK 署名 - 2048 ビ ッ ト
FSBL 署名 - 2048 ビ ッ ト
PL ビ ッ ト ス ト リ ーム - system.bit
ビ ッ ト ス ト リ ームの認証証明
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
77
付録 D
表 6 : 使用例 7 のイ メ ージ フ ォ ーマ ッ ト の例 (続き )
U-Boot
U-Boot の認証証明
Linux - uImage.bin
uImage.bin の認証証明
devicetree.dtb
devicetree.dtb の認証証明
uramdisk.image.gz
uramdisk.image.gz の認証証明
Sobel Cmd パーテ ィ シ ョ ン
Sobel Cmd の認証証明
Bootgen は、 通常はブー ト ヘ ッ ダー、 FSBL、 PL ビ ッ ト ス ト リ ーム、 お よ び複数の ソ フ ト ウ ェ ア パー
テ ィ シ ョ ンで構成 さ れ る イ メ ージ を生成 し ます。
表 5 の使用例では、 Bootgen は次の 3 つの表に示 し た フ ォーマ ッ ト で イ メ ージ を生成 し ます。
表 7 に、 使用例 1 お よ び 2 の イ メ ージ フ ォーマ ッ ト を示 し ます。 こ れ ら の使用例では、 RSA 認証は使
用 さ れません。
表 7 : 使用例 1 および 2 のイ メ ージ フ ォ ーマ ッ ト
ブー ト ヘ ッ ダー
イ メ ージ ヘ ッ ダー テーブル
パーテ ィ シ ョ ン ヘ ッ ダー テーブル
FSBL
PL ビ ッ ト ス ト リ ーム
U-Boot
Linux
Sobel Cmd アプ リ ケーシ ョ ン
表 8 に、 使用例 3 お よ び 5 の イ メ ージ を示 し ます。 こ れ ら の使用例では、 FSBL のみが RSA 認証 さ れ
ま す。 使用例 3 では、 すべてのパーテ ィ シ ョ ン が AES/HMAC エ ン ジ ン に転送 さ れ ま す。 使用例 5 で
は、 AES/HMAC エン ジ ンに転送 さ れ る パーテ ィ シ ョ ンはあ り ません。
表 8 : 使用例 3 および 5 のイ メ ージ フ ォ ーマ ッ ト
ブー ト ヘ ッ ダー
イ メ ージ ヘ ッ ダー テーブル
パーテ ィ シ ョ ン ヘ ッ ダー テーブル
FSBL
認証証明
PL ビ ッ ト ス ト リ ーム
U-Boot
Linux
Sobel Cmd アプ リ ケーシ ョ ン
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
78
付録 D
表 9 に、 使用例 4、 6、 7 の イ メ ージ フ ォーマ ッ ト を示 し ます。
表 9 : 使用例 4、 6、 7 のイ メ ージ フ ォ ーマ ッ ト
ブー ト ヘ ッ ダー
イ メ ージ ヘ ッ ダー テーブル
パーテ ィ シ ョ ン ヘ ッ ダー テーブル
FSBL
FSBL の認証証明
PL ビ ッ ト ス ト リ ーム
PL ビ ッ ト ス ト リ ームの認証証明
U-Boot
U-Boot の認証証明
Linux
Linux の認証証明
Sobel Cmd アプ リ ケーシ ョ ン
Sobel Cmd の認証証明
パーテ ィ シ ョ ン
パーテ ィ シ ョ ンは次の 2 つま たは 3 つのセ ク シ ョ ンで構成 さ れます。
•
パーテ ィ シ ョ ン ヘ ッ ダー : パーテ ィ シ ョ ンの レ イ ア ウ ト に関する 情報を格納 し ます。
•
物理パーテ ィ シ ョ ン : デー タ お よ びパデ ィ ン グ、 オプシ ョ ンの拡張スペース で構成 さ れます。
•
認証証明 (パーテ ィ シ ョ ンが認証 さ れ る場合)
表 10 にパーテ ィ シ ョ ン ヘ ッ ダーの フ ォーマ ッ ト を示 し ます。
表 10 : パーテ ィ シ ョ ン ヘ ッ ダー
オフセッ ト
パーテ ィ シ ョ ンのデー タ ワー ド 長
0x4
復号化 さ れたデー タ ワー ド 長
0x8
合計パーテ ィ シ ョ ン ワー ド 長 (AC を含む)
0xC
デス テ ィ ネーシ ョ ン ロ ー ド ア ド レ ス (PS)
0x10
デス テ ィ ネーシ ョ ン実行ア ド レ ス (PS)
0x14
イ メ ージのデー タ ワー ド オ フ セ ッ ト
0x18
属性ビ ッ ト - PS - ビ ッ ト 4、 PL - ビ ッ ト 5
0x1C
セ ク シ ョ ン数
0x20
チ ェ ッ ク サム ワー ド オ フ セ ッ ト
0x24
イ メ ージ ヘ ッ ダーの ワー ド オ フ セ ッ ト
0x24 - x38
0x3C
XAPP1175 (v1.0) 2013 年 9 月 12 日
説明
0x0
未使用
ヘ ッ ダー チ ェ ッ ク サム
japan.xilinx.com
79
付録 D
認証証明
認証証明は、 認証 さ れ る よ う に指定 さ れた各パーテ ィ シ ョ ン (FSBL、 ソ フ ト ウ ェ ア、 ビ ッ ト ス ト リ ー
ム ) と 組み合わせて使用 さ れ ます。 表 11 に示す よ う に、 AC はすべてのパーテ ィ シ ョ ン で同 じ 形式にな
り ます。
表 11 : 認証証明
オフセ ッ ト
長さ
フ ィ ール ド
注意事項
0x0
0x4
認証証明のヘ ッ ダー
0x4
0x4
認証証明の長 さ
0x08
0x3C
ユーザー定義フ ィ ール ド
0x44
0x100
PPK 係数
0x144
0x100
PPK 係数の拡張
0x244
0x04
PPK 指数
0x248
0x3C
パデ ィ ン グ
0x284
0x100
SPK 係数
0x384
0x100
SPK 係数の拡張
0x484
0x04
SPK 指数
0x488
0x3C
パデ ィ ン グ
0x4C4
0x100
SPK 署名
480 個の 0
(sha256^Dp) mod Np LE
0x5C4
0x100
パーテ ィ シ ョ ン署名
(sha256^Ds) mod Ns LE
56 バ イ ト
640 バ イ ト の リ ト ル エンデ ィ ア ン
480 個の 0
640 バ イ ト の リ ト ル エンデ ィ ア ン
PPK 係数 + PPK 係数の拡張 + PPK 指数は 516 バ イ ト です。 パデ ィ ン グはすべて 0 の 60 バ イ ト (480
ビ ッ ト ) です。
Bootgen は、 認証証明オ フ セ ッ ト 0x140、 0x380 について、 コー ド 検証時間を短縮す る ためのモン ゴ メ
リ 減算に使用 さ れ る 係数の拡張を計算 し ます。
RSA 認証は、 必要なデー タ 全体で SHA256 を計算す る こ と で進行 し 、 その結果 256 ビ ッ ト (32 バ イ ト )
整数が得 ら れます。 こ のハ ッ シ ュ 整数は、 PKCS #1v1.5 に従っ て 2048 ビ ッ ト (256 バ イ ト ) ま でパデ ィ
ン グ さ れます。 署名ブ ロ ッ ク は、 パデ ィ ン グ さ れた 2048 ビ ッ ト ハ ッ シ ュ の係数指数 と し て計算 さ れま
す。 こ の 計算 に は、 指数 と し て キ ー の 秘 密指数 (D) が 使用 さ れ ま す。 等価 な OpenSSL 関数 は、
BN_mod_exp_mont() です。 SPK の署名は (P の添字で示 さ れ る ) プ ラ イ マ リ キーを使用 し 、 パーテ ィ
シ ョ ンの署名は (S の添字で示 さ れ る ) セカ ン ダ リ キーを使用 し ます。 すべての計算は 2048 ビ ッ ト ベー
ス で行われ る ため、 パデ ィ ン グ さ れたハ ッ シ ュ 値 と 署名は 2048 ビ ッ ト (256 バ イ ト ) です。 デー タ は リ
ト ル エンデ ィ ア ン形式で、 LSB か ら MSB の順で格納 さ れます。
表 12 で説明 さ れてい る パデ ィ ン グ さ れたハ ッ シ ュ 整数は、 Bootgen のネ イ テ ィ ブ ス ト レージ と 、
-generate_hashes コ マ ン ド ラ イ ン オプシ ョ ンで作成 さ れ る *.sha256 フ ァ イ ルで使用 さ れます。
表 12 : PKCS #1v1.5 に従 っ てパデ ィ ン グ さ れた SHA256 ハ ッ シ ュ フ ィ ール ド と *.sha256 ハ ッ シ ュ
フ ァ イルの フ ォ ーマ ッ ト
バイ ト
0:31
フ ィ ール ド
生の SHA256 ハ ッ シ ュ 値
( リ ト ル エンデ ィ ア ン )
計算済み
PKCS の特殊な値
0x20、0x04、0x00、0x05、0x01、0x02、0x04、
0x03、0x65、0x01、0x48、0x86、0x60、0x09、
0x06、 0x0D、 0x30、 0x31、 0x30
0
0x00
パデ ィ ン グ
0xFF
32:50
51
52:253
XAPP1175 (v1.0) 2013 年 9 月 12 日
値
japan.xilinx.com
80
付録 D
表 12 : PKCS #1v1.5 に従 っ てパデ ィ ン グ さ れた SHA256 ハ ッ シ ュ フ ィ ール ド と *.sha256 ハ ッ シ ュ
フ ァ イルの フ ォ ーマ ッ ト (続き )
バイ ト
フ ィ ール ド
値
254
1
0x01
255
0
0x00
表 13 : RSA2048 署名ブ ロ ッ ク と *.sig フ ァ イルのフ ォ ーマ ッ ト
バイ ト
0:255
フ ィ ール ド
値
シ グナチ ャ 値 ( リ ト ル エンデ ィ ア ン ) (sha256 ^Dp) mod Np LE
[spksignature] ま たは [presign=] 属性を使用 し 、 外部で計算 さ れた署名ブ ロ ッ ク を ロ ー ド す る 場合、 署
名ブ ロ ッ ク の フ ォーマ ッ ト は、 表 13 で定義 さ れてい る最終署名ブ ロ ッ ク と 同 じ でなければな り ません。
外部フ ァ イ ルか ら 署名ブ ロ ッ ク を読み出す際に、デー タ が処理 さ れた り バ イ ト オーダーが反転す る こ と
はあ り ません。 同一のデー タ が AC に コ ピー さ れます。
表 14 に認証ヘ ッ ダーの定義を示 し ます。
表 14 : 認証証明のヘ ッ ダー
ビッ ト
フ ィ ール ド
値
31:16
予約
0s
15:14
認証証明の フ ォーマ ッ ト
00 : PKCS #1 v1.5
13:12
認証証明のバージ ョ ン
00 : バージ ョ ン 1.0
11
PPK キー タ イ プ
0 : ハ ッ シ ュ キー
10:9
PPK キー ソ ース
0 : eFUSE
8
SPK 有効
1 : SPK 有効
7:4
公開強度
0 : 2048
3:2
ハ ッ シ ュ アルゴ リ ズ ム
0 : SHA256
1:0
公開アルゴ リ ズ ム
1 : RSA
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
81
付録 E
付録 E
SVF に よ る eFUSE のプ ログ ラ ム
1. efuse.opt 内の ELF フ ィ ール ド のデ ィ レ ク ト リ パ ス を更新 し ます。 efuse.opt フ ァ イ ルは、
zc702_secure_key_driver リ フ ァ レ ン ス シ ス テ ムで提供 さ れます。
2. 次の コ マ ン ド を実行 し ます。
xmd -tcl efuse.tcl -opt efuse.opt
図 50 に示す よ う に、 efuse_out.svf フ ァ イ ルが作成 さ れます。
X-Ref Target - Figure 50
X1175_37_052313
図 50 : SVF フ ァ イル efuse_out.svf
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
82
付録 E
iMPACT を使用 し た SVF フ ァ イルの再生
JTAG イ ン タ ー フ ェ イ ス 用 Digilent ま たはプ ラ ッ ト フ ォ ー ム USB ケーブルで zc702 ボー ド を セ ッ ト
ア ッ プ し ます。 ケーブルを USB UART ポー ト にセ ッ ト ア ッ プ し ます。 iMPACT を使用 し て ELF を ダ
ウ ン ロ ー ド し 、 PPK ハ ッ シ ュ を プ ロ グ ラ ム し ます。 こ の操作は、 SVF を再生す る こ と に よ っ て実行 さ
れます。
1. iMPACT を起動 し 、 チ ェーン を初期化 し て [Add Xilinx device] を ク リ ッ ク し ます。 図 51 に示す よ
う に、 efuse_out.svf を ス キ ャ ン チ ェ ーンに追加 し ます。
X-Ref Target - Figure 51
X1175_38_052313
図 51 : efuse_out.svf の追加
2. efuse_out.svf に移動 し ます。
3. 右 ク リ ッ ク し て、 efuse_out.svf を再生 し ます。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
83
参考資料
図 52 に示す よ う に、 こ の操作に よ っ て PPK ハ ッ シ ュ の書 き 込み ( ま たは読み出 し ) が実行 さ れます。 こ
れに よ り 、 AES キーの書 き 込みが行われます。
X-Ref Target - Figure 52
X1175_39_052313
図 52 : eFUSE 読み出 し 操作の結果
xilskey_input.h 内の選択内容に よ っ て、 SVF の機能 (読み出 し 、 書き 込み) が定義 さ れます。
参考資料
1.
2.
3.
『Zynq-7000 All Programmable SoC テ ク ニ カル リ フ ァ レ ン ス マニ ュ アル』 (UG585)
4.
5.
6.
7.
8.
9.
『デザ イ ンの安全性の確保』 (WP365)
10.
11.
12.
13.
14.
15.
『Zynq-7000 All Programmable SoC ソ フ ト ウ ェ ア開発者向けガ イ ド 』 (UG821)
『Zynq-7000 の PS と XADC 間の専用 イ ン タ ーフ ェ イ ス を利用 し たシ ス テ ム監視お よ び外部チ ャ ネ
ル計測』 (XAPP1172)
『OS お よ び ラ イ ブ ラ リ 資料コ レ ク シ ョ ン』 (UG643)
『Zynq-7000 All Programmable SoC テ ク ニ カル リ フ ァ レ ン ス マニ ュ アル』 (UG585)
『OS お よ び ラ イ ブ ラ リ 資料コ レ ク シ ョ ン』 (UG643)
『Zynq-7000 All Programmable SoC : コ ン セプ ト 、 ツール、 テ ク ニ ッ ク ガ イ ド 』 (UG873)
『Zynq-7000 All Programmable SoC ZC702 ベース タ ーゲ ッ ト リ フ ァ レ ン ス デザ イ ン (ISE Design
Suite 14.5) ユーザー ガ イ ド 』 (UG925)
『EDK の コ ン セプ ト 、 ツール、 テ ク ニ ッ ク 』 (UG683)
『7 シ リ ーズ FPGA コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド 』 (UG470)
『Virtex-6 お よ び 7 シ リ ーズ FPGA での不正操作防止デザ イ ンの開発』 (XAPP1084)
『デザ イ ンの安全性の確保』 (WP365)
DENX U-Boot お よ び Linux ガ イ ド : http://www.denx.de/wiki/DULG/Manual
RSA http://en.wikipedia.org/wiki/RSA
16. モン ゴ メ リ 減算 http://en.wikipedia.org/wiki/Montgomery_reduction
17. 『OS お よ び ラ イ ブ ラ リ 資料コ レ ク シ ョ ン』 (UG643)
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
84
改訂履歴
改訂履歴
次の表に、 こ の文書の改訂履歴を示 し ます。
日付
バージ ョ ン
2013 年 9 月 12 日
1.0
内容
初版
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 the Limited
Warranties which can be viewed at http://www.xilinx.com/warranty.htm; 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 Critical Applications:
http://www.xilinx.com/warranty.htm#critapps.
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.
本資料は英語版 (v1.0) を翻訳 し た も ので、 内容に相違が生 じ る 場合には原文を優先 し ます。
資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。
日本語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。
こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、
[email protected] ま でお知 ら せ く だ さ い。 いただ き ま し た ご意見を参考に早急に対応 さ
せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受け付けてお り ません。 あ ら か じ め
ご了承 く だ さ い。
XAPP1175 (v1.0) 2013 年 9 月 12 日
japan.xilinx.com
85
Fly UP