Comments
Description
Transcript
XAPP1084
ア プ リ ケーシ ョ ン ノ ー ト : Virtex-6 および 7 シ リ ーズ FPGA Virtex-6 および 7 シ リ ーズ FPGA での 不正操作防止デザイ ンの開発 XAPP1084 (v1.2) 2012 年 8 月 10 日 は じ めに 著者 : Ed Peterson こ のアプ リ ケーシ ョ ン ノ ー ト では、 FPGA をベース と す る シ ス テ ム内の知的財産 (IP) や重要な情報を 保護す る ア ンチ タ ンパー (不正操作防止/AT) 機能について説明 し 、 それ ら の実例を紹介 し ます。 こ の保 護機能 (不正操作防止機能) は、FPGA がビ ッ ト ス ト リ ーム で コ ン フ ィ ギ ュ レーシ ョ ン さ れ る 間お よ びそ の前後に有効にな ら な ければな り ま せん。 重要なデー タ には、 FPGA ロ ジ ッ ク の機能を設定す る コ ン フ ィ ギ ュ レ ーシ ョ ン デー タ 、 ビ ッ ト ス ト リ ーム内に含 ま れ る ク リ テ ィ カルなデー タ /パ ラ メ ー タ ー ( ブ ロ ッ ク RAM の初期値、 フ リ ッ プ フ ロ ッ プの初期状態な ど )、 そ し て コ ン フ ィ ギ ュ レーシ ョ ン後の通常動 作時に FPGA に対 し て動的に書 き 込みま たは FPGA か ら 動的に読み出す際に使用する 外部 メ モ リ デー タ な ど があ り ます。 こ の ア プ リ ケ ー シ ョ ン ノ ー ト で は、 Virtex®-6 フ ァ ミ リ 、 7 シ リ ー ズ (Artix™、 Kintex™、 Virtex) FPGA、 お よ び Zynq™-7000 フ ァ ミ リ のエ ク ス テ ン シブル プ ロ セ ッ シ ン グ プ ラ ッ ト フ ォーム (EPP) で 利用で き る AT 機能について説明 し 、 こ れ ら の機能が必要な理由、 各機能の使用例、 お よ び イ ンプ リ メ ン テーシ ョ ンの詳細を示 し ます。 ま た、 さ ら な る 不正操作防止効果を実現す る ための さ ま ざ ま な方法に ついて も 説明 し ます。 こ のアプ リ ケーシ ョ ン ノ ー ト を参考にす る こ と で、FPGA デザ イ ン で最高レベルの保護機能を実現す る AT の効果的な設計手法を習得で き ます。 こ れ ら の設計手法は幅広い分野を対象 と し 、 商用デザ イ ン の ク ロ ーニ ン グ (模造) やオーバービルデ ィ ン グ (過剰生産) への対策、 ま たは軍用の ク リ テ ィ カル テ ク ノ ロ ジ (CT) を リ バース エン ジニア リ ン グか ら 保護す る 目的な ど に使用で き ます。 こ の資料は、 ザ イ リ ン ク ス FPGA のアーキ テ ク チ ャ [参照 1] お よ び設計に関 し て専門的な知識があ り 、 ま た ISE® を使用 し た設計フ ロ ー [参照 2]の経験が豊富なユーザーを対象 と し てい ます。『デザ イ ンの安 全性の確保』 [参照 3] では、 FPGA の さ ま ざ ま な安全保障上の脅威 と ソ リ ュ ーシ ョ ンについて説明 し て い ます。 概要 ザ イ リ ン ク ス は、 長年、 FPGA AT ソ リ ュ ーシ ョ ン の プ ロ バ イ ダー と し て業界 を 牽引 し て き ま し た。 Virtex-II は、 ビ ッ ト ス ト リ ームの暗号化機能を備えた最初の FPGA です。 Virtex-6 や 7 シ リ ーズ FPGA では、 ビ ッ ト ス ト リ ーム の暗号化や認証のほかに さ ま ざ ま な AT 機能を シ リ コ ン に統合 し て ソ リ ュ ー シ ョ ン を拡充 し て き ま し た。 ま た、 ザ イ リ ン ク スは、 コ ン フ ィ ギ ュ レーシ ョ ン後に有効な信頼性の高い 不正操作防止機能 と し て、 Security Monitor と い う ソ フ ト IP コ ア も 提供 し てい ます [参照 4]。 ただ し 、 Security Monitor は、 特定条件下での使用制限があ り ます。 詳細は、 ザ イ リ ン ク ス FAE へお問い合わせ く だ さ い。 不正操作防止に対 し て敵 よ り も 一歩 リ ー ド す る と い う こ と は、 潜在的な脆弱性や攻撃を把握 し て攻撃に 対抗す る ために新 し い緩和技術 (対策) を開発 し 続け る こ と です。 ザ イ リ ン ク ス は、 AT 機能を重視す る ユーザーが FPGA テ ク ノ ロ ジ を安心 し て利用で き る よ う に、 複数世代にわた っ て改良を続けてい ます。 シ ス テ ム設計者は、 ザ イ リ ン ク ス FPGA の さ ま ざ ま な AT 機能の特徴を理解す る こ と で、 ど れほ ど の AT 機能を FPGA デザ イ ンに組み込むべ き か を判断で き る よ う にな り ます。 AT は、 個々のシ リ コ ン AT 機能を有効に し て使用す る 方法 と 、 こ れ ら の AT 機能を組み合わせて複数使用す る 方法があ り ま す (通 常は開発者が FPGA 内で組み合わせて使用 し 、 特定ガ イ ダ ン ス に従 う )。 © Copyright 2011-2012 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners. XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 1 概要 デザ イ ンに組み込む AT 機能を判断する には、 主に次の 3 つの要素を考慮 し ます。 • 価値 : IP の知覚的価値、 お よ び不正操作が行われた場合に経済的ま たは国家安全保障に与え る ダ メ ージ。 特定の AT 機能は非常に コ ス ト がかか り 、 保護す る テ ク ノ ロ ジの価値に対す る コ ス ト を慎 重に検討す る 必要があ り ます。 • ア ド バーサ リ ー (敵) : シ ス テ ムへの接近手段、 お よ び攻撃にあ た っ ての専門レベル/資質。 た と え ば、 シ ス テ ムへのア ク セ スは 「銃、 扉、 警備員」 で防ぐ こ と はで き る か、 一般市場で簡単に入手で き る か、 敵は個人レベルのハ ッ カーま たは組織的な大規模グループか、 な ど。 こ の よ う に、 敵の攻 撃レベルは極端な も のか ら 中間レベルに至 る ま で さ ま ざ ま です。 • 設計段階 : FPGA デザ イ ンに AT 機能を イ ンプ リ メ ン ト す る タ イ ミ ン グは、 シ ス テ ム開発の ど の段 階か。 ザ イ リ ン ク ス では、 ス ケ ジ ュ ール と コ ス ト を最小限に抑え る ために、 で き る だけ早い段階 ( シ ス テ ム で CT が定義 さ れた後な ど ) で FPGA AT 機能を イ ン プ リ メ ン ト す る こ と を推奨 し てい ま す。 設計後期に AT 機能を挿入する 場合、 通常 よ り も 多 く の コ ス ト と 時間が必要にな り ます。 その他には、 一部の AT 機能を有効にす る と 、 FPGA ロ ジ ッ ク リ ソ ース を余分に消費す る 可能性があ る こ と に留意 し て く だ さ い。 通常、 全体的な リ ソ ース消費に よ る 影響は最小限に抑え ら れますが、 こ れ ら の機能の イ ンプ リ メ ン ト 方法や FPGA デバ イ ス のサ イ ズに よ っ て異な り ます (例 : 大規模デバ イ ス ほ ど 影響が少ない)。 ザ イ リ ン ク ス では、 FPGA に ビ ル ト イ ン さ れてい る AT 機能を受動的セ キ ュ リ テ ィ と 能動的セ キ ュ リ テ ィ に分類 し てい ま す。受動的セ キ ュ リ テ ィ 機能は FPGA 内に構築 さ れてい る ため、ユーザーが FPGA ロ ジ ッ ク デザ イ ン に対 し て何 も す る 必要があ り ま せん。 ま た、 こ のセ キ ュ リ テ ィ 機能は、 一時的な特 性を持ち、 FPGA の通常動作サ イ ク ルの異な る タ イ ミ ン グで効果を発揮 し ます。 • コ ン フ ィ ギ ュ レーシ ョ ン前 (例 : バ ッ テ リ ー電源に よ り バ ッ ク ア ッ プ さ れてい る RAM (BRAM) 内 の復号化キーに よ る 保護) • コ ン フ ィ ギ ュ レーシ ョ ン中 (例 : ビ ッ ト ス ト リ ームの認証や復号化によ るユーザー デザイ ンの保護) • コ ン フ ィ ギ ュ レーシ ョ ン後 (例 : リ ー ド バ ッ ク 機能の無効化に よ る ユーザー デー タ の保護) 能動的セキ ュ リ テ ィ 機能の場合、 FPGA デザ イ ンでユーザー デザ イ ン を操作する 必要があ り ます。 こ れ ら の機能は、 ユーザー ビ ッ ト ス ト リ ームで FPGA が コ ン フ ィ ギ ュ レーシ ョ ン さ れ、 ユーザー デザ イ ン がア ク テ ィ ブにな っ た後にのみ有効にな り ます。例 と し ては、KEYCLEARB を アサー ト し てバ ッ テ リ ー 駆動型の AES キーを消去 し た り 、 PROGRAM_B イ ン タ ーセプ ト 機能を利用す る 方法があ り ます。 最小限の措置 と し て、 シ ス テ ム設計者は適切な受動的セキ ュ リ テ ィ 機能 (例 : ビ ッ ト ス ト リ ーム の暗号 化お よ び認証) をデザ イ ンに含め る 必要があ り ます。 こ れ ら の機能は、 ユーザー デザ イ ンの機能性に影 響を与え る こ と はあ り ませんが、 ロ ジ ッ ク 上の負荷 (例 : キー管理)、 シ ス テ ム上の負荷 (例 : キー ス ト レージ用に BRAM を使用する 場合には、 バ ッ テ リ ーが必要)、 お よ び コ ン フ ィ ギ ュ レーシ ョ ン時間の延 長 (暗号化 さ れた コ ン フ ィ ギ ュ レーシ ョ ンは 8 ビ ッ ト デー タ 幅に制限 さ れてい る ) な ど が生 じ る 可能性 があ り ます。 それ以外では、 こ れ ら の機能を無償で利用 し て、 あ る 程度の不正操作防止策を講 じ る こ と がで き ます。 すでに配備済みのシ ス テ ムや開発後期のデザ イ ンには、 こ れ ら の AT 機能を利用する こ と を推奨 し ます ( ま だ導入 し ていない場合)。 さ ら に、 こ の資料で紹介す る 不正操作防止機能お よ びガ イ ド ラ イ ン は、 主に 3 つの カ テ ゴ リ に分類 さ れ ま す。 1. 防止 (例 : ビ ッ ト ス ト リ ームの暗号化/認証) 2. 検出 (例 : 電圧お よ び温度の監視) 3. 応答 (例 : BBRAM に格納 さ れた ビ ッ ト ス ト リ ーム復号化キーの消去) 表 1 に、 Virtex-6 および 7 シ リ ーズ FPGA にビル ト イ ン さ れてい る AT 機能 と そのカテゴ リ を示し ます。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 2 受動的 AT シ リ コ ン機能 表 1 : AT 機能の詳細 と 分類 Virtex-6 および 7 シ リ ーズ FPGA シ リ コ ンの AT 機能 種類 カ テゴ リ 揮発性の AES-256 BBRAM キー ス ト レージ 受動的(1) 防止 不揮発性の AES-256 eFUSE キー ス ト レージ 受動的(1) 防止 256 ビ ッ ト AES ビ ッ ト ス ト リ ームの復号化 受動的(2) 防止 HMAC SHA-256 ビ ッ ト ス ト リ ームの認証 受動的(2) 防止 耐性強化 さ れた リ ー ド バ ッ ク 無効化回路 受動的(3) 防止 優れた キー ロ ー ド 有限ス テー ト マシ ン (FSM) 回路 受動的(3) 防止 JTAG の無効化 能動的 防止 JTAG の監視 能動的 検出 内部 コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ の完全性 能動的 検出 オンチ ッ プ温度お よ び電圧の監視/警告 (SYSMON/XADC) 能動的 検出 PROG イ ン タ ーセプ ト (PREQ/PACK) 能動的 検出 固有識別子 (Device DNA お よ びユーザー eFUSE) 能動的 検出 内部 コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ の消去 (IPROG) 能動的 応答 内部 AES-256 BBRAM キーの消去 (KEYCLEARB) 能動的 応答 グ ロ ーバル ト ラ イ ス テー ト (GTS) 能動的 応答 グ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) 能動的 応答 注記 : 1. 2. 3. コ ン フ ィ ギ ュ レーシ ョ ン前 コ ン フ ィ ギ ュ レーシ ョ ン中 コ ン フ ィ ギ ュ レーシ ョ ン後 後続セ ク シ ョ ンでは、 上記の機能の概要 と その必要性を説明 し 、 例を用いて適切な使用方法 (単独使用、 ま たはほかの ビル ト イ ン機能やユーザー ロ ジ ッ ク と 組み合わせて使用) を詳 し く 解説 し てい ます。 さ ら に、 FPGA デザ イ ンやシ ス テ ム全体の不正操作防止 レ ベル を引 き 上げ る ために有効な手段お よ びテ ク ニ ッ ク について も 具体的に説明 し てい ます。 FPGA レベルで有効化 さ れ る AT 機能は、 包括的なシ ス テ ム レベル AT ソ リ ュ ーシ ョ ンの一環 と し て考 え る べ き です。 こ の資料で説明する 機能やテ ク ニ ッ ク は、 FPGA に と っ て非常に優れた傘の よ う な機能 を果た し ますが、 シ ス テ ム全体を考慮 し た複数層アプ ロ ーチを展開 し 、 その一つ と し て こ の AT 機能を 利用す る と 最 も 効果的です。 受動的 AT シ リ コ ン機能 ビ ッ ト ス ト リ ームの暗号化/復号化 暗号化 し た (1) ビ ッ ト ス ト リ ーム を外部フ ラ ッ シ ュ に格納 し 、 (FPGA の復号化エン ジ ン内で) FPGA コ ン フ ィ ギ ュ レーシ ョ ン時に動的に復号化す る こ と で、 高レベルの機密性を確保で き ます。 こ れに よ り 、 同 じ 秘密キーを共有す る 人のみビ ッ ト ス ト リ ーム内の情報へア ク セ ス で き る よ う にな り ます。 ビ ッ ト ス ト リ ームの暗号化は、 シ ス テ ムの電源がオ フ の間お よ び コ ン フ ィ ギ ュ レーシ ョ ン中の機密性を確保す る こ と がで き 、ブ ロ ッ ク RAM やフ リ ッ プ フ ロ ッ プの初期化デー タ な ど の FPGA デザ イ ンの コ ン テ ン ツ を保 護 し ます。 ザ イ リ ン ク ス では、 外部 メ モ リ に格納 さ れてい る ビ ッ ト ス ト リ ームは常に暗号化 さ れた状態 で保持す る こ と を推奨 し てい ます。 こ のセキ ュ リ テ ィ 機能を利用す る には、 まず最初に暗号化す る ためにユーザーが指定 し た キーの値を使 用 し て、 BitGen ソ フ ト ウ ェ ア [参照 2] で コ ン フ ィ ギ ュ レーシ ョ ン ビ ッ ト ス ト リ ーム を暗号化す る 必要 があ り ます。AES キーが提供 さ れていない場合は、Bitgen が自動的にキーを生成 し ます。ただ し 、Bitgen 1. ザイ リ ン ク スは、 CBC (暗号文ブ ロ ッ ク連鎖) モー ド で 256 ビ ッ ト キーの AES を使用 し て暗号化 し ます。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 3 受動的 AT シ リ コ ン機能 で生成 さ れ る キーは単な る 疑似 ラ ン ダ ム であ り 、 実際の ラ ン ダ ム キーほ ど セキ ュ リ テ ィ レベルが高 く ない と い う こ と に留意 し て く だ さ い。 こ のキーは、 iMPACT ソ フ ト ウ ェ ア [参照 2] を使用 し て、 JTAG 経由で FPGA へ ロ ー ド さ れ ま す。 キーは、 FPGA 内の揮発性 BBRAM ま たは不揮発性 eFUSE のいず れかの ス ト レージへ ロ ー ド で き ま す。 いずれの メ モ リ へキーを格納すべ き か を判断す る ために、 シ ス テ ム設計者は BBRAM (表 2) と eFUSE (表 3) の長所 と 短所を それぞれ理解 し てお く 必要があ り ます。 表 2 : BBRAM ス ト レージへ格納する場合の長所および短所 長所 短所 • 揮発性、 プ ロ グ ラ ム可能 • 受動的お よ び能動的にキーを消去可能 (例 : 証拠を削除で き る ) • 不正操作防止(1) • 外部バ ッ テ リ ーが必要 • 多 く のバ ッ テ リ ー ベン ダーは高温ま たは長期 利用におけ る 動作仕様を定義 し てい ません (一部のベン ダーは こ れ ら の問題に対応する た め、 ベータ ボル タ 式バ ッ テ リ ーの提供を開始)。 注記 : 1. JTAG 経由で BBRAM の読み出 し / 書 き 込みが行われ よ う と し た場合、 ア ク セ ス が有効にな る ( 例 : 「key access mode」 にな る ) 前に BBRAM か ら FPGA の コ ン フ ィ ギ ュ レーシ ョ ン デー タ がすべて消去 さ れます。 表 3 : eFUSE ス ト レージへ格納する場合の長所および短所 長所 短所 • 外部バ ッ テ リ ーが不要 • ス プーフ ィ ン グ ( な り すま し ) が不可 • eFUSE キーで暗号化 さ れた ビ ッ ト ス ト リ ームのみ FPGA へ ロ ー ド する こ と がで き ます。 cfg_aes_only(1)(2) eFUSE ビ ッ ト • 恒久的 : キーの消去が不可 • BBRAM ソ リ ュ ーシ ョ ン よ り も セキ ュ リ テ ィ レベルが低い (例 : 証拠が残る ) • デー タ を安全に ス ク ラ ンブルする 唯一の方 も セ ッ ト さ れてい る 場合には、 その他すべ てのビ ッ ト が拒否 さ れます。 法は、 承認 さ れた アルゴ リ ズ ムや秘密キー を使用 し て暗号化する こ と であ る ため、 ザ イ リ ン ク ス では eFUSE キーに ス ク ラ ンブ ルを かけ ません。 注記 : cfg_aes_only オプシ ョ ン (eFUSE 制御レ ジ ス タ FUSE_CNTL 内にあ る ) を使用す る 場合には、 重要なポ イ ン ト が 2 つあ り ます。 1. ザ イ リ ン ク ス の間接プ ロ グ ラ ム コ ア ビ ッ ト ス ト リ ームは暗号化 さ れていないため、 ビ ッ ト ス ト リ ームの間接 フ ラ ッ シ ュ プ ロ グ ラ ム手法 [ 参照 5] を使用す る 場合、 こ のオプシ ョ ンはボー ド 上の フ ラ ッ シ ュ に暗号化ビ ッ ト ス ト リ ームが ロ ー ド さ れた後に有効にな る 必要があ り ます。 それ以外の場合、 FPGA は eFUSE キーを使用 し て間接プ ロ グ ラ ム コ ア を復号化 し よ う と し て、 コ ン フ ィ ギ ュ レーシ ョ ンがエ ラ ー と な り ます。 2. ス プーフ保護以外に も 、 cfg_aes_only オプシ ョ ン を有効に し て、 eFUSE キーで暗号化 さ れた ビ ッ ト ス ト リ ーム を攻撃者が復元で き ない よ う に保護す る こ と が重要です。 こ の場合に予想 さ れ る 攻撃の状況 と し て、 ユーザー ビ ッ ト ス ト リ ームが eFUSE に格納 さ れてい る キーで暗号化 さ れ、 攻撃者のデザ イ ンが BBRAM キーで暗号化 さ れ、 cfg_aes_only オプシ ョ ンが設定 さ れていない こ と が考え ら れます。 攻撃者は ICAP ( 内 部 コ ン フ ィ ギ ュ レーシ ョ ン ア ク セ ス ポー ト ) 経由のパーシ ャ ル リ コ ン フ ィ ギ ュ レーシ ョ ン を使用 し てユー ザー ビ ッ ト ス ト リ ーム を読み出す可能性があ り ます。 ユーザー ビ ッ ト ス ト リ ームが BBRAM キーで暗号化 さ れ、 攻撃者のデザ イ ンが eFUSE キーで暗号化 さ れてい る 場合は、 こ の攻撃が不可能です。 ビ ッ ト ス ト リ ームの暗号化お よ びキー ス ト レージの詳細は、 Virtex-6 お よ び 7 シ リ ーズ FPGA の コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド [参照 6]、 [参照 7] を参照 し て く だ さ い。 ビ ッ ト ス ト リ ームの認証 Virtex-6 ま たは 7 シ リ ーズ FPGA でユーザーがビ ッ ト ス ト リ ームの暗号化/復号化を有効に し た場合、認 証機能が自動的にオンにな り ます (つま り 、 両者は相前後 し て有効/無効 と な る )。 認証方式は、 SHA-256 ハ ッ シ ュ ア ル ゴ リ ズ ム (FIPS180-2) [ 参照 10] を 使用す る HMAC ( ハ ッ シ ュ ベー ス メ ッ セージ認証 コ ー ド ) [参照 9] を採用 し ます。 こ の タ イ プ の認証に よ っ て、 暗号文改 ざ ん を 防止す る こ と が可能です。 代表的な暗号文改 ざ ん には AES-CBC 攻撃があ り ます (図 1 参照)。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 4 受動的 AT シ リ コ ン機能 X-Ref Target - Figure 1 Initialization Vector (IV) Decryption Key Ciphertext (CT) Plaintext (PT) AES Block Cipher Decryption Entire PT Block Is Garbled Bit Flipped by an Attacker Decryption Key Ciphertext (CT) Plaintext (PT) AES Block Cipher Decryption Corresponding Bit Flipped in This PT Block XOR with Next PT Block X1084_01_090811 図 1 : AES-CBC ビ ッ ト 反転攻撃 CBC は、 AES の エ ラ ー を 伝播 し な い (non-error propagating) モー ド で あ り 、 Virtex-6 や 7 シ リ ーズ FPGA で使用 さ れ る モー ド です (注記参照)。 伝播途中にビ ッ ト が反転 さ れた場合、 後続のすべてのビ ッ ト へ影響を与え る こ と はあ り ません。 1 ビ ッ ト が反転す る と 、 その暗号文ブ ロ ッ ク 全体 と 次のブ ロ ッ ク の関連ビ ッ ト へ影響を与え ます ( ノ イ ジー チ ャ ネル上を伝送す る 場合に最適なプ ロ パテ ィ )。 ただ し 、 こ の場合、攻撃者はビ ッ ト ス ト リ ーム内に小 さ な確定的な変更を加え る こ と がで き ます。 こ の攻撃に よ り 、 その他の 128 ビ ッ ト が ス ク ラ ンブル さ れて、 キー自体の実用性が制限 さ れます。 ビ ッ ト ス ト リ ーム全体 の CRC32 イ ン テ グ リ テ ィ チ ェ ッ ク で も 、 攻撃者に よ る 変更を検出で き ます ( ビ ッ ト ス ト リ ーム で こ の チ ェ ッ ク 機能が無効の場合を除 く )。 注記 : ザ イ リ ン ク ス が FPGA デバ イ ス を設計 し ていた当時は、 NIST 認定のその他の AES モー ド (AES Galois/Counter Mode (GCM) な ど ) がなか っ ため、 こ の攻撃を考慮 し て別の暗号化アルゴ リ ズ ム を使用す る 選択肢が あ り ま せんで し た。 こ の タ イ プの攻撃には、 Virtex-6 お よ び 7 シ リ ーズ FPGA が備え る 認証機能で対応で き ます。 こ の認証方法ではキーを使用す る ため、 BitGen ソ フ ト ウ ェ アに HMAC キーを提供す る 必要が あ り ま す。 (HMAC キーは、 AES 暗号化キー と 同 じ NKY キー フ ァ イ ル内に含まれます。 HMAC キーが提供 さ れていない場合は、 Bitgen が自動的にキーを生成 し ます。 ) ただ し 、 こ のキーは、 AES キーの よ う に JTAG 経由で直接 FPGA デバ イ スへ ロ ー ド さ れません。 暗号化 さ れた ビ ッ ト ス ト リ ーム内に含まれて保 護 さ れてい ます。 オンチ ッ プ 暗号化プ ロ セ ス中に、 こ の HMAC キーがビ ッ ト ス ト リ ームか ら 抽出 さ れ て認証アルゴ リ ズ ムで使用 さ れます (つま り 、HMAC キー用のオンチ ッ プ キー ス ト レージは不要)。ビ ッ ト ス ト リ ーム認証の詳細は、 Virtex-6 お よ び 7 シ リ ーズ FPGA の コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド [参照 6]、 [参照 7] を参照 し て く だ さ い。 図 2 に、受動的セキ ュ リ テ ィ 対策 ( ビ ッ ト ス ト リ ームの暗号化お よ び認証) が有効の場合に暗号化 さ れな い ビ ッ ト ス ト リ ーム (平文)、 暗号化 さ れ る ビ ッ ト ス ト リ ーム (暗号文)、 認証 さ れ る ビ ッ ト ス ト リ ームに 該当す る 部分を それぞれ示 し てい ます。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 5 受動的 AT シ リ コ ン機能 X-Ref Target - Figure 2 Synchronization Word Command: use AES Setup Commands Authenticated Configuration Data SHA256 Startup Commands Plaintext Ciphertext X1084_02_100911 図 2 : 安全な ビ ッ ト ス ト リ ーム形式 認証プ ロ セ ス をパス し たデバ イ スは通常動作を開始 し ます ( ス タ ー ト ア ッ プ コ マ ン ド を発行)。 ビ ッ ト ス ト リ ーム の ロ ー ド が完了 し た後に High にな る はずの DONE 出力信号、 Low 駆動す る INIT_B 信号、 bootsts レ ジ ス タ で設定 さ れ る HMAC_ERROR_0 ビ ッ ト (bit location = [7] HMAC_ERROR_0) が現れ ない場合は認証が失敗 し た こ と にな り ます。 こ の レ ジ ス タ は、 iMPACT ソ フ ト ウ ェ アか ら Read Device Status コ マ ン ド を発行 し て JTAG 経由で読み出す こ と が可能です。 認証失敗は、 ビ ッ ト ス ト リ ームが不 正操作 さ れてい る 可能性があ る こ と を示 し ますが、 ビ ッ ト ス ト リ ームの ロ ー ド に使用 し たチ ャ ネルが ノ イ ズの影響を受け、 コ ン フ ィ ギ ュ レーシ ョ ン プ ロ セ ス中にビ ッ ト が反転 し た可能性 も 考え ら れます。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 6 受動的 AT シ リ コ ン機能 図 3 に、 ソ フ ト ウ ェ アで認証 コ ー ド が作成 さ れ、 その後ハー ド ウ ェ アで検証 さ れてデバ イ ス の動作を許 可す る ま での フ ロ ーを示 し ます。 X-Ref Target - Figure 3 Hash Generation and Encryption – BitGen (Software) hmac_key Hash Algorithm (SHA-256) message hmac_key | message | digest encrypt_key digest Encryption Algorithm (AES-256) e[hmac_key | message | digest] Decryption and Hash Comparison – FPGA (Hardware) e[hmac_key | message | digest] Decryption Algorithm (AES-256) Decryption Key message (to config mem) hmac_key | message | digest Hash Algorithm Comparator Yes Pass ? No enable startup disable startup X1084_03_090611 図 3 : ハ ッ シ ュ化 さ れた メ ッ セージの認証動作 強化型 リ ー ド バ ッ ク無効化回路 暗号化 さ れた ビ ッ ト ス ト リ ームが FPGA へ ロ ー ド さ れてい る 場合、 内部 コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ の リ ー ド バ ッ ク は、 いかな る 外部 イ ン タ ーフ ェ イ ス (JTAG な ど ) 経由で も 実行で き ません。 外部 リ ー ド バ ッ ク は、 強化 さ れた ト リ プル リ ダ ン ダ ン ト ロ ジ ッ ク に よ っ てすべてブ ロ ッ ク (無効化) さ れ ま す。 暗号化 さ れた ビ ッ ト ス ト リ ーム が ロ ー ド さ れた後に コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ を リ ー ド バ ッ ク で き る 唯一の方法は ICAP です。ICAP は FPGA ロ ジ ッ ク 内のユーザー デザ イ ンへ直接ア ク セ スす る こ と に よ っ てのみ利用で き る ため、 ロ ー ド プ ロ セ ス でビ ッ ト ス ト リ ームが認証 さ れた後は信頼 さ れたチ ャ ネ ル と し て許可 さ れます。 ユーザー デザ イ ンが ICAP を イ ン ス タ ン シエー ト し ていない場合は、 ICAP を 使用で き ません。 注記 : ビ ッ ト ス ト リ ー ム 内の特定制御 ビ ッ ト を 使用す る BitGen セ キ ュ リ テ ィ オプ シ ョ ン では、 リ ー ド バ ッ ク 機能を有効/無効にで き ます。 こ のビ ッ ト は、 コ ン フ ィ ギ ュ レーシ ョ ン中に変更可能な ため、 暗号化 さ れた /認証 さ れた ビ ッ ト ス ト リ ーム を使用 し ていないデバ イ ス では攻撃者が リ ー ド バ ッ ク 機能の無効設定を簡単に変更で き ます。 強化型 リ ー ド バ ッ ク 無効化回路はその よ う な弱点が な く 、 暗号化/認証 さ れた ビ ッ ト ス ト リ ーム を使用 し てい る 場合のセ キ ュ リ テ ィ オプシ ョ ン よ り も 常に優先 さ れます。 優れた FSM 回路 キー ロ ー ド 用の FSM 回路は、 ス テー ト 間で大 き なハ ミ ン グ距離を使用す る こ と で、 通常の ス テー ト マ シ ン動作を迂回 し て安全でない状態に FPGA を置 く 可能性があ る グ リ ッ チ攻撃か ら 守 る こ と がで き ま す。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 7 能動的 AT シ リ コ ン機能 能動的 AT シ リ コ ン機能 「概要」 で言及 し た と お り 、 能動的 AT 機能を使用する 場合は、 ユーザーがデザ イ ンに手を加え る 必要が あ り ま す。 た と え ば、 不正操作 に 反応 し て KEYCLEARB 入力 を 駆動す る よ う に、 デ ザ イ ン に STARTUP_VIRTEX6 を イ ン ス タ ン シエー ト す る 必要が あ り ま す。 表 4 に、 こ れ ら の能動的セ キ ュ リ テ ィ の機能、 使用例、 お よ び イ ンプ リ メ ン ト 方法を説明 し てい ます。 各機能の詳細は、 表 4 の後のセ ク シ ョ ンで説明 し てい ます。 表 4 : 能動的セキ ュ リ テ ィ 機能の使用例 機能 JTAG の無効化、 JTAG の動作監視 使用例 方法 認証 さ れ て い な い JTAG FPGA ロ ジ ッ ク に特別な方法で BSCAN プ リ ミ ア ク セ ス を 検出 し て 阻止 テ ィ ブ を イ ン ス タ ン シエー ト し て、監視/応答機能 し ます。 を追加 し ます。 内部 コ ン フ ィ ギ ュ レ ー コ ン フ ィ ギ ュ レ ー シ ョ ン メ モ リ の完全性 を バ ッ ク ショ ン メモリの グ ラ ン ド でチ ェ ッ ク し ま 完全性 す (干渉な し の ラ ン タ イ ム チ ェ ッ ク )。 POST_CRC コ ン フ ィ ギ ュ レ ーシ ョ ン ユーザー 制約を有効に し て、 FRAME_ECC プ リ ミ テ ィ ブ を イ ン ス タ ン シエー ト し ま す。コ ン フ ィ ギ ュ レ ー シ ョ ン メ モ リ の完全性 を チ ェ ッ ク/応答す る FPGA ロ ジ ッ ク を構築 し ま す。 オ ン チ ッ プ温度お よ び デバ イ ス が通常の環境範 シ ス テ ム モニ タ ー プ リ ミ テ ィ ブ を イ ン ス タ ン シ 囲内で動作す る よ う に監 エー ト し て、環境状態をチ ェ ッ ク /応答す る FPGA 電圧の監視/警告 (SYSMON) 視 し ます。 ロ ジ ッ ク を構築 し ます。 PROG イ ン タ ーセプ ト デ バ イ ス コ ン フ ィ ギ ュ STARTUP プ リ ミ テ ィ ブ を イ ン ス タ ン シエー ト し (PREQ/PACK) レ ー シ ョ ン に遅延 を 与 え て、PROG_REQ を受信 し た後の PROG_ACK ア て、 リ セ ッ ト 不 可 能 な サー ト の正 し い条件を 決定す る FPGA ロ ジ ッ ク デー タ エ レ メ ン ト を消去 を構築 し ます。 し ま す。 こ の機能は、 暗号化 さ れた ビ ッ ト ス ト リ ームに対 し てのみ使用で き ます。 固有識別子 (Device DNA/ ユーザー eFUSE) 固有識別子が認識 さ れ な 固有識別子を読み出 し /処理 し 、それ ら が有効であ い場合には、 デザ イ ンの動 る か を判断で き る FPGA ロ ジ ッ ク を構築 し ます。 作を不可に し ます ( ま たは 制限付き で許可し ます)。 内部 コ ン フ ィ ギ ュ レ ー 不正操作に反応 し て コ ン STARTUP プ リ ミ テ ィ ブ を イ ン ス タ ン シエー ト し シ ョ ン メ モ リ の消去 フ ィ ギ ュ レ ーシ ョ ン メ モ て、PROG_REQ 受信後の PROG_ACK アサー ト リ を消去 し ます。 の正 し い条件を 決定す る FPGA ロ ジ ッ ク を 構築 し ます。 内 部 AES-256 キ ー の 不正操作に反応 し て バ ッ STARTUP プ リ ミ テ ィ ブ を イ ン ス タ ン シエー ト し 消去 (KEYCLEARB) テ リ ー バ ッ ク ア ッ プ の て、 KEYCLEARB アサー ト の正 し い条件を決定 キーを消去 し ます。 す る FPGA ロ ジ ッ ク を構築 し ます。 こ の機能は、 暗号化 さ れた ビ ッ ト ス ト リ ームに対 し てのみ使用で き ます。 グ ロ ーバル 不正操作に反応 し て 出力 STARTUP プ リ ミ テ ィ ブ を イ ン ス タ ン シエー ト し て、GTS アサー ト の正 し い条件を決定す る FPGA ト ラ イ ス テー ト (GTS) を無効に し ます。 ロ ジ ッ ク を構築 し ます。 グ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) 不正操作に反応 し て、ユー STARTUP プ リ ミ テ ィ ブ を イ ン ス タ ン シエー ト し ザー フ リ ッ プ フ ロ ッ プ を て、GSR アサー ト の正 し い条件を決定する FPGA 初期状態に戻 し ます。 ロ ジ ッ ク を構築 し ます。 JTAG の無効化 (防止) 通常、 攻撃者はシ ス テ ムへ侵入 し よ う と す る と き 、 まず JTAG ポー ト を狙い ます。 そ こ で JTAG チ ェー ン を切断す る ためにビル ト イ ンの JTAG プ リ ミ テ ィ ブ (BSCAN) を特別な方法で イ ン ス タ ン シエー ト し て、 未認証ア ク セ ス を監視 し ます。 Virtex-6 FPGA の場合、 プ リ ミ テ ィ ブ名は BSCAN_VIRTEX6 と な り ます。 7 シ リ ーズ FPGA の場合のプ リ ミ テ ィ ブ名は BSCANE2 と な り ます。 FPGA (お よ び FPGA デバ イ ス と 同 じ チ ェ ーン内にあ る その他の上位デバ イ ス ま たは下位デバ イ ス のい ずれか) の JTAG チ ェーン を切断す る には、 次の 2 つの方法があ り ます。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 8 能動的 AT シ リ コ ン機能 1 つ目は、 ユーザー デザ イ ン に BSCAN プ リ ミ テ ィ ブ を イ ン ス タ ン シ エー ト し て DISABLE_JTAG 属性 を TRUE に設定す る 方法です。 Virtex-6 FPGA デザ イ ン の VHDL イ ン ス タ ン シ エー シ ョ ン の例 を 示 し ま す。 BSCAN_VIRTEX6_U0 :BSCAN_VIRTEX6 generic map ( DISABLE_JTAG => TRUE, JTAG_CHAIN => 1 -- can be 1, 2, 3, or 4 depending on the -- desired physical location of the primitive ) port map ( CAPTURE => open, DRCK => open, RESET => open, RUNTEST => open, SEL => open, SHIFT => open, TCK => tck_signal, TDI => tdi_signal, TMS => tms_signal, UPDATE => open, TDO => '1' ); 注記 : TCK、 TDI、 お よ び TMS 信号は JTAG 動作の監視に使用で き る ため、 上記では こ れ ら の信 号のみ接続 さ れてい ます (詳細は 9 ページの 「JTAG の監視 (検出)」 を参照)。 2 つ目は、 BitGen 実行中に -g DISABLE_JTAG オプシ ョ ン を追加す る 方法です。 いずれの方法を使用 し て も JTAG を切断で き ます。 1 つ目の方法ではユーザー デザ イ ンに よ っ て確実にチ ェーンが切断 さ れ ますが、 2 つ目の方法ではツール フ ロ ー内でチ ェーン を切断する 判断を遅 ら せる こ と がで き ます。 こ の 判断を下す タ イ ミ ン グは、 シ ス テ ム設計者が決定 し ます。 注記 : BitGen オプシ ョ ンが設定 さ れていて、 攻撃者が こ のオプシ ョ ン を オ フ に し よ う と し た場合、 こ のビ ッ ト 反転攻撃が認証ス テ ッ プで検出 さ れ、 デバ イ スは ス タ ー ト ア ッ プ を開始 し ません。 FPGA ロ ジ ッ ク デザ イ ンに ソ フ ト ChipScope™ Pro ロ ジ ッ ク アナ ラ イ ザー コ ア [参照 8] を イ ン ス タ ン シエー ト し た場合、 こ の コ アは、 ホ ス ト へ送 り 返す通信パ ス と し て JTAG ポー ト を使用する ため、 JTAG チ ェーン を切断す る と ChipScope Pro ロ ジ ッ ク アナ ラ イ ザー コ ア を使用で き な く な り ます (JTAG ポー ト を介 し て通信す る その他のプ ロ セ ッ サ デバ ッ ガーをすべて含む)。 FPGA をデバ ッ グす る 間は JTAG チ ェ ーン を その ま ま の状態に し 、 ChipScope Pro アナ ラ イ ザーの機能 ( ま たはプ ロ セ ッ サ デバ ッ ガー ) が不要にな る 開発段階の後期に切断で き ます。 JTAG チ ェ ーン を切断す る オプ シ ョ ン が有効に設定 さ れてい る 間は、 デバ イ ス の JTAG コ ン フ ィ ギ ュ レーシ ョ ン を使用で き ません。 ユーザーは、 シ リ アル、 シ リ アル パ ラ レル イ ン タ ーフ ェ イ ス (SPI)、 バ イ ト パ ラ レル イ ン タ ーフ ェ イ ス (BPI)、 SelectMAP な ど、 別の コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス を使用す る 必要があ り ます [参照 6][参照 7]。FPGA デバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ンが実際に遅 延 さ れてい る 限 り 、 JTAG バ ウ ン ダ リ ス キ ャ ン ボー ド レベル テ ス ト は通常に動作 し ます。 JTAG の監視 (検出) デバ イ ス内か ら JTAG ア ク テ ィ ビ テ ィ を検出す る には、 BSCAN プ リ ミ テ ィ ブの JTAG TCK、 TDI、 ま たは TMS 信号の組み合わせを監視 し ます。 外部 JTAG コ マ ン ド は、 こ れ ら の信号を ト グルす る 必要が あ る ため、 こ れ ら の信号 ラ イ ンの動作検出回路が ト グルを検出 し ます。 た と えば、 TDI 信号の立ち上が り エ ッ ジ を監視す る 場合は、 図 4 の回路を使用で き ます。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 9 能動的 AT シ リ コ ン機能 X-Ref Target - Figure 4 ‘1’ D Q Detect DFF BSCAN TDI Clk X1084_04_081211 図 4 : JTAG ア ク テ ィ ビ テ ィ 検出回路の例 TDI ラ イ ン で立ち上が り エ ッ ジが ラ ッ チ さ れ る と 、 DFE の Detect 出力は、 デバ イ ス が再コ ン フ ィ ギ ュ レーシ ョ ン さ れ る ま で (つま り 、 PROGRAM_B 入力がアサー ト さ れ る ま で ) 1 を保持 し ます。 こ の方法 は、 TCK、 TDI、 TMS 信号 ラ イ ン の立ち上が り /立ち下が り エ ッ ジ を監視す る 場合に も 適用で き ま す。 JTAG 動作検出回路のいずれかの DFF 出力が 1 にセ ッ ト さ れた場合には、 それ ら に応 じ て不正操作ペ ナルテ ィ を適用で き ます。 内部 コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ の完全性 (検出) 内部 コ ン フ ィ ギ ュ レ ーシ ョ ン メ モ リ セル (暗号化 さ れた ビ ッ ト ス ト リ ーム で コ ン フ ィ ギ ュ レ ーシ ョ ン さ れてい る ) の一部が破損 し てい る と 、 FPGA が予期 し ない不正な動作を実行す る 可能性が あ り ま す。 デー タ 破損は、 意図的な不正操作ま たは意図的でないシ ン グル イ ベン ト ア ッ プセ ッ ト (SEU) が原因 と な り ます。 リ ー ド バ ッ ク CRC (巡回冗長検査) 機能を使用す る こ と に よ っ て、 ユーザー デザ イ ンのバ ッ ク グ ラ ン ド で コ ン フ ィ ギ ュ レーシ ョ ン デー タ が継続的に リ ー ド バ ッ ク さ れて、反転 し た ビ ッ ト を検出で き ます。 こ の機能は、 FRAME_ECC プ リ ミ テ ィ ブ と 併用 し て SEU 訂正な ど の高度な動作を行 う こ と が で き ます。 イ ン プ リ メ ン テーシ ョ ン の詳細は、 Virtex-6 お よ び 7 シ リ ーズ FPGA の コ ン フ ィ ギ ュ レーシ ョ ン ユー ザー ガ イ ド ([参照 6]、 [参照 7]) の第 9 章 「 リ ー ド バ ッ ク CRC」 を参照 し て く だ さ い。 その他に、 ザ イ リ ン ク ス は Virtex-6 デバ イ ス用に Soft Error Mitigation (SEM) コ ア [参照 11] も 提供 し てい ます。 こ の コ アは、 単一 IP コ アに検出、 訂正、 分類機能を統合 し てい ます ( エ ラ ー挿入を含むため、 シ ス テ ムのあ ら ゆ る 側面を評価可能)。 最小限の手段 と し て、 FPGA コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ 内の反転 (破損) ビ ッ ト を検出す る ために、 直接 POST_CRC チ ェ ッ ク ( コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ 上の相対的な CRC チ ェ ッ ク ) を実行 し て、 シ ス テ ム レベルで対応す る こ と が可能です。 ただ し 、 こ の最小限の手段では、 ユーザーがビ ッ ト エ ラ ー を ピ ン ポ イ ン ト で特定で き ず、 エ ラ ーを修正で き ません。 温度および電圧の監視/警告 (検出) 攻撃者は、 FPGA の通常動作時の電圧や温度を変更 し てデバ イ ス に予想外の動作を さ せ る こ と で、 その 中か ら デー タ を抽出 し た り 、 特定のセキ ュ リ テ ィ 機能を迂回す る よ う に仕掛け る 可能性があ り ます。 た と えば、 『FIPS 140-2 - Security Requirements For Cryptographic Modules (暗号モジ ュ ールに関す る セ キ ュ リ テ ィ 要件)』 [参照 12] では、 「特に、 暗号化モジ ュ ールは、 指定 さ れた通常動作範囲外の動作温度 や電圧の変動を監視 し 、 適切に対応す る 必要があ る 」 と 規定 さ れてい ます。 こ の 規 格 要 件 を 満 た す に は、 オ ン チ ッ プ ハ ー ド IP ブ ロ ッ ク (Virtex-6 FPGA シ ス テ ム モ ニ タ ー (SYSMON) [ 参照 13] ま たは 7 シ リ ーズ FPGA XADC ( ザ イ リ ン ク ス ア ナ ロ グ デジ タ ル変換器) [ 参 照 14] を使用で き ます。 こ れ ら は両方 と も FPGA 内部にあ る マルチチ ャ ネル ADC であ り 、 オンチ ッ プ 電源電圧やオ ンチ ッ プ ダ イ 温度、 お よ び FPGA へ供給す る 外部アナ ロ グ電圧を監視す る こ と が可能で す。 ま た、 こ れ ら はユーザー デザ イ ンに簡単に イ ン ス タ ン シエー ト で き ます。 こ の よ う なオンチ ッ プの 監視機能は攻撃者が簡単に手を加え る こ と がで き ないため、 オ フチ ッ プ よ り も 安全です。 オンチ ッ プのパ ラ メ ー タ ーを監視す る SYSMON や XADC には、 上限/下限の警告機能を直接プ ロ グ ラ ムで き ます。 さ ら に、 FPGA ロ ジ ッ ク を使用 し て外部電圧入力のア ラ ーム リ ミ ッ ト を作成す る こ と も 可 能です (例 : 外部アナ ロ グ電圧 タ ンパー ループ、 電圧セ ンサーの出力)。 ユーザー デザ イ ン / シ ス テ ム で XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 10 能動的 AT シ リ コ ン機能 ア ラ ーム信号の ス テー タ ス を使用 し 、 それ ら がア ク テ ィ ブにな る と 適切に対応で き ます (例 : 適切な不 正操作ペナルテ ィ を 講 じ る )。 ア ナ ロ グ入力の帯域幅は制限 さ れて い ま す ( 最大入力周波数の詳細は、 『Virtex-6 FPGA シ ス テ ムモニ タ ー ユーザーガ イ ド 』 [参照 13] お よ び 『7 シ リ ーズ FPGA デュ アル 12 ビ ッ ト 1MSPS アナ ロ グ /デジ タ ル コ ンバー タ ー ユーザー ガ イ ド 』 [参照 14] を参照)。 温度や電圧の変化を素早 く 検出 し なければな ら ない場合は、オ フチ ッ プ ソ リ ュ ーシ ョ ンが必要にな り ま す。 検 出 に 必 要 な 帯 域 幅 の 指定 は シ ス テ ム 設計者 の 判断 に 委ね ら れ て い ま す。 『The Sorcerer’s Apprentice Guide to Fault Attacks』 [参照 15] には、 チ ッ プ を狙 う さ ま ざ ま な攻撃について説明 し てい ます。 それ ら の一つに電源電圧の変動があ り ます。 固有識別子 (検出) 固有識別子 (UI) には、 Device DNA と ユーザー eFUSE の 2 種類あ り ます。 こ れ ら は、 ア ンチ ク ロ ーン セ キ ュ リ テ ィ 対策 (つま り 、 ユーザーの ビ ッ ト ス ト リ ーム を盗んで自分のデバ イ ス を プ ロ グ ラ ムす る 行 為への対策) と し て使用 し た り 、 ま た UI の値に基づいて特定機能を有効化/無効化 ( ア ッ プグ レー ド / ダ ウ ン グ レー ド ) す る ために使用で き ます。 Device DNA は、 57 ビ ッ ト のデバ イ ス固有のシ リ アル番号で構成 さ れてお り 、 生産過程で FPGA 上の OTP ( ワ ン タ イ ム プ ロ グ ラ マブル) ヒ ュ ーズにザ イ リ ン ク ス が設定 し ま す (FPGA ロ ジ ッ ク に よ る こ の 値へ読み出 し ア ク セ スは、 DNA_PORT プ リ ミ テ ィ ブ経由で実行、 ま たは JTAG を介 し て外部か ら 読み 出 し を実行)。 ユーザー eFUSE には、 ユーザーが読み出 し /書 き 込み可能な 32 ビ ッ ト の OTP エ リ アが あ り 、 JTAG 経由で ユーザーが設定 し ま す (FPGA ロ ジ ッ ク に よ る こ の値への読み出 し ア ク セ ス は、 EFUSE_USR プ リ ミ テ ィ ブ経由で実行 し ま す)。 こ れ ら の UI は個別に使用で き ま すが、 セ キ ュ リ テ ィ レベルに応 じ て組合わせて使用す る こ と も 可能です。 注記 : Device DNA やユーザー eFUSE を使用す る こ と で固有の ID を持つ こ と にな り ますが、暗号化の よ う に高い機密性や認証機能 (例 : AES-256/HMAC) が備わ る わけではあ り ません。 ク ロ ーン対策には、 AES-256 暗号化の使用が最 も 効果的です。 設計者は、 その上に こ れ ら の UI を利用す る こ と で、 AT 対 策に対 し て も う 一重のセキ ュ リ テ ィ を追加で き ます。 こ れ ら の UI は、 1 つのデバ イ スへビ ッ ト ス ト リ ーム を関連付け る ために使用で き ます ( こ れは Device DNA の場合。 ユーザー eFUSE の場合は複数デバ イ スへ関連付け る )。 ユーザーが FPGA デザ イ ン内に UI の比較機能を構築 し 、 比較結果に基づいて FPGA の動作が制御 さ れ ま す。 た と えば、 UI 比較でエ ラ ーが生 じ た場合に動作開始を拒否 し た り 、 制限付き で動作許可する こ と がで き ます。 UI の使用例を次 に示 し ます。 1. セ ッ ト ア ッ プ : JTAG 経由で FPGA か ら UI 値を読み出 し 、 UI 値か ら チ ェ ッ ク サ ム を生成 し て FPGA へア ク セ ス で き る フ ラ ッ シ ュ デバ イ ス へ格納 (一方通行機能を使用 - キー タ イ プが最 も 安 全) し ま す (図 5 参照)。 X-Ref Target - Figure 5 Key UI JTAG One-Way Function Stored Checksum (Flash) X1084_05_081211 図 5 : 秘密のキーを使用 し て DNA 値を暗号化 図 5 に示す一方通行用の キーは、 暗号化 さ れた ビ ッ ト ス ト リ ーム内に格納で き ま す。 ビ ッ ト ス ト リ ームの暗号化を行わずに こ の方法でキーの機密性を確保す る にはビ ッ ト ス ト リ ーム を複雑化す る 必要があ り ます。 2. FPGA を コ ン フ ィ ギ ュ レーシ ョ ン し ます。 3. 比較 : FPGA ユーザー デザ イ ンが DNA_PORT プ リ ミ テ ィ ブ ま たは EFUSE_USR プ リ ミ テ ィ ブの いずれか一方ま たは両方か ら UI 値を読み出 し 、 同 じ アルゴ リ ズ ム を使用 し てチ ェ ッ ク サ ム を計算 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 11 能動的 AT シ リ コ ン機能 し ます。 その後、 ユーザー デザ イ ンは計算 さ れたチ ェ ッ ク サム と フ ラ ッ シ ュ か ら 読み出 し たチ ェ ッ ク サム を比較 し ます。 チ ェ ッ ク サムが一致 し た場合はデザ イ ンの通常動作が許可 さ れます。 X-Ref Target - Figure 6 UI Port JTAG One-Way Function Key Checksum = FPGA Stored Checksum EEPROM X1084_06_081211 図 6 : チ ェ ッ ク サムの比較 こ れ ら の UI の詳細は、Virtex-6 FPGA お よ び 7 シ リ ーズ FPGAの コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド ([参照 6]、 [参照 7]) を参照 し て く だ さ い。 その他に、 『Spartan-3 ジ ェ ネ レーシ ョ ン FPGA を使用 し たセキ ュ リ テ ィ ソ リ ュ ーシ ョ ン』 [参照 16] では Spartan FPGA デバ イ ス の Device DNA について説 明 し てい ます。 ク リ テ ィ カルなユーザー ク ロ ッ ク /信号の監視 (検出) ビ ッ ト ス ト リ ーム の暗号化を使用す る 場合、 ユーザーは CFGMCLK ( コ ン フ ィ ギ ュ レ ーシ ョ ン の内部 オ シ レ ー タ ー ク ロ ッ ク 出力) と い う 連続 し た ク ロ ッ ク ソ ー ス を 活用 で き ま す。 こ の ク ロ ッ ク は、 STARTUP ブ ロ ッ ク プ リ ミ テ ィ ブの出力 と し て配置 さ れてい ま す ( 「PROG イ ン タ ーセプ ト (防止/検 出)」 の STARTUP ブ ロ ッ ク の VHDL イ ン ス タ ン シエーシ ョ ン例を参照)。 こ の ク ロ ッ ク は常に駆動 し てい る ため、ユーザー ク ロ ッ ク ( ま たはその他の ク リ テ ィ カルなユーザー信号) のベース と し て使用 し 、 フ ァ ン ク シ ョ ン を監視で き ま す。 CFGMCLK は、 公称値 50MHz か ら 大幅に変動す る 可能性があ り ま すが (Virtex-6 の場合は ±55%、 7 シ リ ーズお よ び Zynq デバ イ ス の場合は ±50%)、 それで も フ ァ ン ク シ ョ ン を監視す る 上では非常に有効で、 ク リ テ ィ カルなユーザー ク ロ ッ ク や信号は有効な動作を続け、 下限 と 上限の周波数範囲内で確実に ト グ ル し ま す (CFGMCLK の変動 を 考慮)。 ク リ テ ィ カ ルな ユー ザー ク ロ ッ ク や信号が こ の範囲か ら 外れた場合は、 ユーザー デザ イ ン の故障 ま たは不正操作のいずれ かが生 じ てい る こ と を示 し 、 適切な対策を講 じ る こ と がで き ます。 PROG イ ン タ ーセ プ ト (防止/検出) コ ン フ ィ ギ ュ レーシ ョ ン時にすべての メ モ リ エ レ メ ン ト が消去 さ れ る わけではあ り ません。 た と えば、 マ イ ク ロ プ ロ セ ッ サのキ ャ ッ シ ュ や FIFO を使用す る ギガ ビ ッ ト ス ピー ド シ リ アル I/O (GTX お よ び GTH ト ラ ン シーバー ) は、 外部 PROGRAM_B ピ ン がアサー ト さ れた後で も その ま ま の状態を保持 し て使用 さ れ る 場合があ り ます (PROGRAM_B がアサー ト さ れ る と 、 FPGA は リ セ ッ ト さ れて再びビ ッ ト ス ト リ ームで コ ン フ ィ ギ ュ レーシ ョ ン さ れ る ) 。 攻撃者は、 PROGRAM_B ピ ン を アサー ト し て、 ユー ザー ビ ッ ト ス ト リ ーム を独自のビ ッ ト ス ト リ ーム (FPGA が コ ン フ ィ ギ ュ レーシ ョ ン さ れた後に保持 さ れた メ モ リ 内容をすべて消去す る ビ ッ ト ス ト リ ーム ) に置 き 換え る こ と がで き ます。 PROG イ ン タ ーセ プ ト 機能 (STARTUP ブ ロ ッ ク にあ る PROG リ ク エ ス ト / ア ク ノ レ ッ ジ信号ペア - PREQ/PACK) を使用 す る こ と で、 こ れ ら の メ モ リ エ レ メ ン ト が先に ク リ ア さ れ る ま で ( あ る いは、 PROGRAM_B がアサー ト さ れ る 前に実行すべ き ハ ウ ス キー ピ ン グ タ ス ク が実行 さ れ る ま で ) FPGA の再 コ ン フ ィ ギ ュ レ ー シ ョ ン を永久的に遅延で き ます。 も う 一つの使用例 と し て PROG イ ン タ ーセプ ト 機能は、 動作中に PROGRAM_B ピ ンのアサー ト が行 われ る べ き ではない配備後のシ ス テ ムに有効です。 こ の信号が確認 さ れ る と 不正操作が行われた こ と を XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 12 能動的 AT シ リ コ ン機能 示 し ます。 おそ ら く 攻撃者が最初にす る 行為の一つは、 PROGRAM_B を アサー ト し て FPGA の ス タ ー ト ア ッ プ動作を観察す る こ と です。 ユーザー デザ イ ン で PREQ のアサー ト を検出す る と 、 ペナルテ ィ 信号がアサー ト さ れます。 その後、 PACK を アサー ト す る こ と で PROGRAM_B がアサー ト 可能にな り ます。 暗号化 さ れた ビ ッ ト ス ト リ ームが ロ ー ド さ れて PROGRAM_B ピ ンが外部でアサー ト さ れ る ( ま たは内 部 IPROG コ マ ン ド が ICAP に送信 さ れた ) 場合は、 STARTUP ブ ロ ッ ク の PREQ 出力がアサー ト さ れ ます。 コ ン フ ィ ギ ュ レーシ ョ ンは、 ユーザーが PACK 入力を High (立ち上が り エ ッ ジ を採用) に駆動す る ま で、 ま たはデバ イ ス の電源が一度オ フ にな っ て再度オンにな る ま で延期 さ れます。 一般的なセキ ュ リ テ ィ 設定で、 PREQ/PACK 信号が接続 さ れてい る STARTUP ブ ロ ッ ク の VHDL イ ン ス タ ン シエーシ ョ ン例を次に示 し ます。 STARTUP_U0 :STARTUP_VIRTEX6 generic map ( PROG_USR => TRUE ) -- turn on PROGRAM_B intercept security feature port map ( CFGCLK => open, CFGMCLK => cfgmclk_signal, DINSPI => open, EOS => open, PREQ => preq_signal, -- PROGRAM request to FPGA logic output TCKSPI => open, CLK => '0', GSR => gsr_signal, GTS => gts_signal, KEYCLEARB => keyclearb_signal, PACK => pack_signal, -- PROGRAM acknowledge input (rising edge) USRCCLKO => '0', USRCCLKTS => '0', USRDONEO => '0', USRDONETS => '0' ); キーの消去 (応答/ ペナルテ ィ ) FPGA で最 も 重要な部分は、 ビ ッ ト ス ト リ ーム の暗号化に使用す る AES キーです。 攻撃者がキーを利 用で き る よ う にな る と 、 元の ビ ッ ト ス ト リ ーム の内容を簡単に解読 さ れて し ま い ます。 シ ス テ ム設計者 は、 ユーザー デザ イ ン を KEYCLEARB 入力 (12 ページ の 「PROG イ ン タ ーセプ ト (防止/ 検出)」 の STARTUP ブ ロ ッ ク プ リ ミ テ ィ ブにあ る ) へ接続す る こ と で、 内部 (外部) 不正操作に反応す る ペナル テ ィ 信号 と し て こ の信号を アサー ト で き ま す。 BBRAM ブ ロ ッ ク の 256 ビ ッ ト キー と 暗号解読ブ ロ ッ ク の 1920 ビ ッ ト 拡張キーの両方が消去 さ れ る と 、 攻撃者はオ フ チ ッ プの不揮発性 メ モ リ に格納 さ れて い る 暗号化ビ ッ ト ス ト リ ーム を使用で き な く な り ま す。 こ の KEYCLEARB 信号は、 不揮発性 eFUSE キーには影響を与え ません。 KEYCLEARB 信号の ア サー ト 判断 ( お よ び不正操作に反応す る そ の他すべ て の応答) は、 必ず し も FPGA 内部か ら 生 じ る と は限 り ません。 シ ス テ ム内の別の部分の不正操作 (例 : シ ス テ ム レベルま たは モジ ュ ール レベルの タ ンパー バ ウ ン ダ リ の侵害) に起因する 可能性 も あ り ます。 キーが消去 さ れ る と 、 同 じ キーで再プ ロ グ ラ ム さ れ る ま で、 あ る いは IPROG ([参照 6]、 [参照 7]) を使 用 し て別の ビ ッ ト ス ト リ ー ム ( 暗号化 さ れ て い な い基本機能のみ を 含む ビ ッ ト ス ト リ ー ム ) で再 コ ン フ ィ ギ ュ レーシ ョ ン さ れ る ま で FPGA デバ イ ス は動作で き ません。 KEYCLEARB 入力は、 適切な条件 の下でのみアサー ト さ れ る よ う に保証 さ れなければな り ません。 通常は、 こ の よ う な状態にな っ た装置 は、 取 り 外 し て中央拠点 (製造施設な ど ) へ移動 し 、 キーを ロ ー ド し て再び有効にす る 必要があ り ます。 IPROG (応答/ペナルテ ィ ) IPROG は、 ICAP イ ン タ ーフ ェ イ ス を介 し て送 ら れ る 内部 コ マ ン ド で、 FPGA コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ 、 すべての フ リ ッ プ フ ロ ッ プ、 お よ び拡張 メ モ リ を消去 し ますが、 キー自体は消去 し ません。 外 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 13 不正操作防止の ガ イ ド ラ イ ン 部 PROGRAM_B ピ ンのアサー ト と 同 じ です。 こ の コ マ ン ド は、 コ ン フ ィ ギ ュ レーシ ョ ン メ モ リ ( コ ン フ ィ ギ ュ レーシ ョ ン デー タ 、 ブ ロ ッ ク RAM、 お よ びフ リ ッ プ フ ロ ッ プの ス テー ト ) を効率的に消去す る ため、KEYCLEARB 信号 と 組み合わせて使用 し て不正操作に対応で き ます。KEYCLEARB は、IROG コ マ ン ド が発行 さ れ る 前にアサー ト さ れ ま す (KEYCLEARB がアサー ト さ れ る と 直 ぐ に IPROG コ マ ン ド を ICAP へ送信可能)。 こ れ ら の 2 つのペナル テ ィ が適用 さ れ た 後は既存 ビ ッ ト ス ト リ ー ム が FPGA で解読 さ れ な い た め、 FPGA は動作で き ない状態にな り ます。デバ イ ス を (暗号化ビ ッ ト ス ト リ ーム で) コ ン フ ィ ギ ュ レーシ ョ ンで き ない場合は、 不正操作が生 じ た こ と を表 し ます。 こ の場合、 ユーザー デザ イ ンには暗号化 さ れて いない ビ ッ ト ス ト リ ーム を ロ ー ド す る 選択肢があ る ため、 KEYCLEARB/IPROG が実行 さ れた後で も CT を露出す る こ と な く 、 基本機能 (少ない機能) を取 り 込む こ と がで き ます。 IPROG コ マ ン ド を コ ン フ ィ ギ ュ レーシ ョ ン エン ジ ンへ送信する には、 ユーザー デザ イ ンに ICAP プ リ ミ テ ィ ブ を イ ン ス タ ン シエー ト し て、 適切な コ マ ン ド シーケ ン ス を記述す る 必要があ り ます。 詳細は、 Virtex-6 FPGA ま たは 7 シ リ ーズ FPGA コ ン フ ィ ギ ュ レ ーシ ョ ン ユーザー ガ イ ド [参照 6]、 [参照 7] の 「IPROG リ コ ン フ ィ ギ ュ レーシ ョ ン」 セ ク シ ョ ン を参照 し て く だ さ い。 グ ローバル ト ラ イ ス テー ト (応答/ペナルテ ィ ) シ ス テ ム デザ イ ンに よ っ ては、 外部の FPGA ピ ン (例 : 暗号モジ ュ ール) か ら ク リ テ ィ カルな (Red) 情 報を読み出す こ と がで き ます。不正操作に反応 し て STARTUP ブ ロ ッ ク (12 ページの 「PROG イ ン タ ー セプ ト (防止/検出)」 の 「グ ロ ーバル リ セ ッ ト (応答/ペナルテ ィ )」 セ ク シ ョ ンにあ る サンプル コ ー ド を 参照) のグ ロ ーバル ト ラ イ ス テー ト (GST) 入力がアサー ト さ れ る と 、 すべての FPGA 出力がハ イ イ ン ピーダ ン ス状態にな り 、 FPGA 外部へのデー タ フ ロ ーが停止 し ます。 こ れは、 Red デー タ フ ロ ーを で き る だけ早 く 停止す る ために、 IPROG や KEYCLEARB よ り も 前に講 じ る 即効プ ロ セ ス です。 グ ローバル リ セ ッ ト (応答/ペナルテ ィ ) 大切なデー タ や重要度の高いパ ラ メ ー タ ーは、 ユーザー キーな ど の FPGA ロ ジ ッ ク レ ジ ス タ 内 (AES BBRAM ではない ) に格納で き ま す。 不正操作に反応 し て、 STARTUP ブ ロ ッ ク (12 ページの 「PROG イ ン タ ーセプ ト (防止/検出)」 参照) のグ ロ ーバル リ セ ッ ト (GSR) 入力がアサー ト さ れ る と 、 すべての FPGA レ ジ ス タ (例 : フ リ ッ プ フ ロ ッ プ ) がデフ ォ ル ト 状態に戻 り ます。 こ れは、 FPGA 内にあ る すべ ての重要なデー タ を で き る だけ早 く 消去す る ために、 IPROG や KEYCLEARB よ り も 前に講 じ る 即効 プ ロ セ ス です。 GSR は、 SRL ( シ フ ト レ ジ ス タ ル ッ ク ア ッ プ テーブル) やブ ロ ッ ク RAM の コ ン テ ン ツ を消去 し ま せん。 こ れ ら を消去す る 場合は、 ユーザー デザ イ ン ま たは IPROG コ マ ン ド を使用す る 必要があ り ます。 不正操作防止の ガイ ド ラ イン こ のセ ク シ ョ ン では、 前述 し た ビ ル ト イ ン の シ リ コ ン AT 機能 と 共に、 Virtex-6 FPGA や 7 シ リ ーズ FPGA を使用 し て耐 タ ンパー性の (不正操作 さ れに く い) デザ イ ン を作成す る ためのガ イ ド ラ イ ンお よ び技術的 ヒ ン ト を提供 し ます。 必要に応 じ て CT のみロー ド する (防止) ユーザー デザ イ ン を ノ ン ク リ テ ィ カル テ ク ノ ロ ジ ブ ロ ッ ク と ク リ テ ィ カル テ ク ノ ロ ジ (CT) ブ ロ ッ ク に分割で き る 場合は、 ユーザー デザ イ ン の ノ ン ク リ テ ィ カ ル部分のみ を 常に保有 し 、 必要な と き に FPGA のパーシ ャ ル リ コ ン フ ィ ギ ュ レーシ ョ ン (PR) 機能 [参照 17] を使用 し て CT を ロ ー ド で き ます 。 その後、 CT の役割が終わ る と 、 (PR 領域のブ ラ ッ ク ボ ッ ク ス バージ ョ ン を ロ ー ド し て ) 消去で き る よ う にな り ます。 CT 用の部分的な ビ ッ ト ス ト リ ームは、 AES キーで暗号化で き ますが、 シ ス テ ム設計者 が選択す る アルゴ リ ズ ムに よ っ て FPGA ロ ジ ッ ク 内で暗号化する こ と も 可能です。不正操作が検出 さ れ る と 、 CT の PR 領域 と キー (通常、 ブ ロ ッ ク RAM ま たは FPGA ロ ジ ッ ク レ ジ ス タ 内に格納 さ れてい る ) は消去 さ れます。 例 と し て、 15 ページの図 7 お よ び 15 ページの図 8 に、 FPGA、 CPU、 外部 メ モ リ デバ イ ス (FPGA コ ン フ ィ ギ ュ レーシ ョ ン、 PR、 CPU コ ー ド 、 お よ び CPU ブー ト コ ー ド 用) で構成 さ れ る 一般的なシ ス テ ム を示 し ます。 図 7 の PR 領域 ( 「User CT Logic Region」 と 表示) は空の状態です。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 14 不正操作防止の ガ イ ド ラ イ ン X-Ref Target - Figure 7 Limited Services Boot Code CPU RAM for CPU CT Code Memory I/F Encrypted FW and SW Other User Logic User CT Logic Region Encrypted FPGA Bitstream Configure Virtex-6 FPGA or 7 Series FPGA Using AES-CBC/SHA-256 X1084_07_090811 図 7 : 使用モデル : シス テムの CT を保護 図 8 の場合、 FPGA の こ の領域には、 PR に よ っ て CT ロ ジ ッ ク (User CT Logic) が動的に ロ ー ド さ れ ま す。 CT の役割が完了す る と ( ま たは、 不正操作が生 じ た場合)、 PR モジ ュ ールのブ ラ ッ ク ボ ッ ク ス バージ ョ ン を ロ ー ド す る こ と で PR 領域は図 7 の状態に戻 り ます。 注記 : 不正操作が検出 さ れ る と 、重要度の高い CPU コ ー ド メ モ リ も 消去 さ れ る ため、暗号化 さ れたデー タ 、 消去 さ れた PR 領域、 あ る いは重要度の低い外部 メ モ リ コ ン テ ン ツのみ残 り ます。 X-Ref Target - Figure 8 Limited Services Boot Code CPU Sensitive CPU Code Erase in Response to a Tamper Event Memory I/F Encrypted FW and SW User CT Logic Encrypted FPGA Bitstream Other User Logic Configure Virtex-6 FPGA or 7 Series FPGA Using AES-CBC/SHA-256 X1084_08_090811 図 8 : 使用モデル : シ ス テムの CT を保護 - 不正行為に対応 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 15 不正操作防止の ガ イ ド ラ イ ン こ れ ら の例では、 PR の実行に ICAP が使用 さ れ ま す。 ICAP は信頼性の高いチ ャ ネルであ る ため、 PR ビ ッ ト ス ト リ ー ム ( 暗号化/ 非暗号化) を 許可 し ま す (cfg_aes_only eFUSE ビ ッ ト が 設定 さ れ た eFUSE キーが使用 さ れてい る 場合で も 許可)。 ザ イ リ ン ク ス では、 常に、 暗号化 さ れた PR ビ ッ ト ス ト リ ーム を使用す る こ と を推奨 し ま す (暗号解読には、FPGA の コ ン フ ィ ギ ュ レーシ ョ ン エ ン ジ ン にあ る 専用暗号解読 ロ ジ ッ ク 、 ま たは FPGA ロ ジ ッ ク にユーザーが構築 し た任意の暗号解読機能を使用)。 安 全な PR に関す る その他の情報は、『PRC/EPRC : パーシ ャ ル リ コ ン フ ィ ギ ュ レーシ ョ ン のデー タ イ ン テ グ リ テ ィ お よ び セ キ ュ リ テ ィ コ ン ト ロ ー ラ ー』 [参照 18] を参照 し て く だ さ い。 外部シ ャ ン ト に よ るキーの消去 BBRAM キーを消去す る も う 一つの方法 と し て、 外部シ ャ ン ト を使用 し て VBATT ラ イ ン を グ ラ ン ド 接 続す る 方法が あ り ま す。 KEYCLEARB な ど のア ク テ ィ ブ機能は FPGA に電源が投入 さ れて コ ン フ ィ ギ ュ レーシ ョ ン さ れた後にのみ使用可能なため、 FPGA の主電源 (VCCINT お よ び VCCAUX) が供給 さ れ ない場合は こ の方法を用い る こ と がで き ます。 た と えば、 FPGA の主電源がオンにな る 前にシ ス テ ム レ ベルの不正操作が検出 さ れた場合、FPGA の外部バ ッ テ リ ー電源 ラ イ ン VBATT ピ ン をオープンに し 、 ト ラ ン ジ ス タ 分岐 ( シ ャ ン ト ) な ど で VBATT を グ ラ ン ド に接続 し ます。 こ の場合、 VBATT ピ ン を グ ラ ン ド 接続す る 前にバ ッ テ リ ー接続がオープンにな る よ う に回路を設計す る 必要があ り ます。 も う 一つのオプ シ ョ ンは、 抵抗を介 し てバ ッ テ リ ーを VBATT へ接続す る 方法です (VBATT の最大入力電流は 150nA)。 適切な抵抗値を選択す る こ と で、 バ ッ テ リ ーか ら 過剰な電流フ ロ ーを生 じ さ せ る こ と な く VBATT ピ ン を グ ラ ン ド に短絡で き ます。 FPGA に電源が投入 さ れない場合 (VCCINT や VCCAUX な ど がない場合、ただ し VBATT は こ れ ら に含ま れない)、 ユーザーが VBATT ピ ン をすぐ にグ ラ ン ド に短絡 し て AES キー (BBROM 内に格納) が消去 さ れ る ま での ワ ー ス ト ケ ー ス の最大時間は 50ms です (–55°C)。 ま た、 VBATT のみ電源 を 入れ た場合、 BBRAM キーが保持 さ れ る ス ト レージの温度範囲は –65°C ~ 150°C です。 予防策 と し てあ ら か じ めキーを消去 その他のキー消去オプシ ョ ンには、 予防策 と し て あ ら か じ め消去す る 方法があ り ます。 ビ ッ ト ス ト リ ーム を ロ ー ド し て暗号解読 し た後、 シ ス テ ム を配備す る 前に BBRAM キーを意図的に消 去で き ます。 こ の方法は、 配備 さ れた後に電源を再度オン / オ フす る 必要がないシ ス テ ム (発射後の ミ サ イ ルな ど ) にのみ有効です 。 こ れは、 eFUSE キーに使用する こ と も 可能で、 eFUSE キーの読み出 し /書 き 込み機能が無効にな っ ていない場合に限 り 、配備す る 前に JTAG を介 し てすべて 1 に書 き 換え る こ と で完了 し ます。 反復パ タ ーン な ど セキ ュ リ テ ィ レ ベルの低いキーを使用 し ない ユーザー キーには、 すべて 0、 すべて 1、 反復パ タ ーン な ど を使用すべ き ではあ り ません。 可能な限 り キーの再利用 (AES や HMAC と 同 じ キーを使用す る な ど ) は避けて く だ さ い。キーの利用者を厳 し く 制 限す る 必要があ り ます (つま り 、 キー情報を知る 必要があ る 人のみア ク セ ス で き る よ う にする )。 ラ ン ダ ム な値を使用 し て キーを作成す る こ と が理想的です ( セキ ュ リ テ ィ レベルの低いキー値を避け る 。 た と えば、 すべて 0 の ラ ン ダ ム キーは単純過ぎ る )。 BitGen ソ フ ト ウ ェ アで AES や HMAC キーを生成で き ますが、 こ の場合、 日付や時間に基づいた疑似 ラ ン ダ ム プ ロ セ ス を使用 し ます。 最 も 安全な キーを作 成す る には、 完全に不規則で複雑な値を使用 し て く だ さ い。 暗号化シ ス テ ム において、 キー管理は非常に重要なエ レ メ ン ト です (おそ ら く 、 最 も 複雑なエ レ メ ン ト と な る )。 キーに関す る その他の役立つ情報 と し て、 NIST キー管理のガ イ ド ラ イ ン [参照 19] を参照 し て く だ さ い。 フ ィ ール ド (現場) でキーを変更 最 も 明確な方法は、 iMPACT ソ フ ト ウ ェ ア を使用 し て FPGA にキーを ロ ー ド し 、 FPGA が こ の新 し い キーで暗号化 さ れた ビ ッ ト ス ト リ ームに対応す る 方法です ( こ の場合、 JTAG プ ロ グ ラ ミ ン グ ケーブル でア ク セ ス で き る ポー タ ブル コ ン ピ ュ ー タ ーが必要)。 も う 一つの方法は、 エンベデ ッ ド マ イ ク ロ コ ン ト ロ ー ラ ー [参照 20] ま たはエンベデ ッ ド JTAG ACE Player [参照 21] を使用す る ザ イ リ ン ク ス の イ ン XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 16 ま とめ シ ス テ ム プ ロ グ ラ ミ ン グ機能を使用す る 方法です。 ユーザーが iMPACT を使用 し て生成 し た -keyonly オプシ ョ ン に基づいて、 隣接す る プ ロ セ ッ サか ら JTAG シーケ ン ス を開始 し 、 こ れに よ っ て BBRAM のキーがア ッ プデー ト さ れます。 こ れは Red キーを ロ ー ド す る ( キーは暗号化 さ れていない) ため、 Red キー情報を FPGA の JTAG ポー ト へ転送す る 間の未承認ア ク セ ス か ら 守 る ために適切なセーフ ガー ド を適用 し なければな ら ない こ と に留意 し て く だ さ い。 不正操作ス テー タ ス を シ ス テムへ送信 不正操作が行われた場合、 ペナルテ ィ 信号のアサー ト のほかに、 ユーザー デザ イ ンは不正操作の ス テー タ ス情報を シ ス テ ムへ送 る こ と がで き ます ( ま たは不揮発性 メ モ リ へ書 き 込む こ と が可能)。 そ し て、 今 後の分析材料 と し て こ れ ら の情報を シ ス テ ムへ格納 し ま す。 FPGA は揮発性であ る ため、 IPROG コ マ ン ド (不正操作ペナルテ ィ ) が与え ら れ る 前に別の場所へデー タ を送信す る よ う に設計す る 必要があ り ます。 FPGA プ ローブ ポ イ ン ト へのア ク セス制限 攻撃 さ れに く い FPGA を構築する には、 レ イ ヤー ド (重構造) アプ ロ ーチが最 も 効果的です。 CT を含む すべてのデバ イ ス周囲に強力な不正操作バ ウ ン ダ リ (不正操作検出ス イ ッ チな ど ) を使用で き ます ( た と えば、 不正操作検出ス イ ッ チがア ク テ ィ ベー ト さ れ る と 、 FPGA の VBATT ラ イ ン がグ ラ ン ド に短絡 さ れ る )。 プ リ ン ト 回路基板には FPGA 信号用に埋め込み型のビ ア と 配線を使用 し 、電源配線は埋め込まれ た レ イ ヤー内で配置 さ れ ( ア ク セ ス が困難に な る )、 適切なデカ ッ プ リ ン グ を 行い ま す ( 可能で あ れば Buried Capacitance テ ク ノ ロ ジ を使用)。 JTAG バ ウ ン ダ リ ス キ ャ ン技術は、 ボー ド レベルの フ ァ ク ト リ テ ス ト で信頼性が確保 さ れてい る ため、 量産ボー ド か ら テ ス ト ポ イ ン ト を削除 し て く だ さ い。 差分電力解析 (DPA) 半導体デバ イ ス の DPA 攻撃は、長年に渡 り 検出 さ れてい る 攻撃の種類です [参照 22]。 こ れ ら の攻撃は、 プ ロ セ ッ サ、 マ イ ク ロ コ ン ト ロ ー ラ ー、 ペ イ メ ン ト カー ド ( ス マー ト カー ド )、 FPGA な ど さ ま ざ ま なデ バ イ ス を タ ーゲ ッ ト にで き ま す。 専門誌では、 ( その よ う な攻撃を可能にす る 目的で特別に設計 さ れた ボー ド を使用 し て )、 FPGA へ DPA 攻撃を実行 し て ビ ッ ト ス ト リ ームの暗号解読キーを抽出す る こ と に 成功 し た例が発表 さ れてい ます。 こ の よ う な攻撃は、 技術的に実行可能であ る 上に専門的な知識や装置がな く て も 、 ま た物理的にデバ イ スへ接近 し な く て も 実行で き る 厄介な問題です。デザ イ ンのセキ ュ リ テ ィ を懸念す る シ ス テ ム設計者は、 アーキ テ ク チ ャ やデザ イ ン フ ァ イ ル、 物理的装置へのア ク セ ス、 適切 と 思われ る その他の対策を守 る た めに包括的な (多重) セキ ュ リ テ ィ 戦略を講 じ る 必要があ り ます。 ザ イ リ ン ク ス は、 今後 も こ の分野の研 究 と 開発を続けてい き ます。 詳細は FAE へご連絡 く だ さ い。 ま とめ こ のアプ リ ケーシ ョ ン ノ ー ト では、 FPGA 設計者が現在利用で き る Virtex-6 お よ び 7 シ リ ーズ FPGA の AT 機能について説明 し 、 それ ら を効果的に使用す る 実際の例を紹介 し ま し た。 こ こ で紹介 し た こ れ ら の AT 機能を活用 し て ガ イ ド ラ イ ン (設計サ イ ク ル初期) に従 う こ と で、 不正操作防止機能を備え た FPGA デザ イ ンが実現 し ます。 1 つの AT 機能や技術だけでは常に 100% の効果を実現 し た り シ ス テ ム全体のすべての AT ニーズ を満 たす こ と は不可能ですが、 で き る だけ攻撃者の作業を複雑化 (お よ び高価に) さ せた り 、 何重に も セキ ュ リ テ ィ の壁を作 る こ と で (最良 と ま ではいかな く て も ) ほぼ確実に満足い く 結果を得 る こ と がで き る で し ょ う。 新 し い統合回路 (FPGA な ど ) の開発お よ び検証に使用 さ れ る ツールや技術は、日々進化 し て改善 さ れて い ます。 同時に、 攻撃者が使用する ツール も 進化 と 改善を繰 り 返 し てい る ため、 FPGA 設計者は利用で き る AT 機能や技術を常に把握 し てお く 必要があ り ます。 ま た、 ザ イ リ ン ク ス は こ れ ら の開発の最先端 を リ ー ド し 、 現在お よ び将来に向け て カ ス タ マー IP を守 る ために機能強化お よ び新機能の開発に尽力 し てい ます。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 17 参考資料 参考資料 こ のアプ リ ケーシ ョ ン ノ ー ト の参考資料は次の と お り です。 1. 入門 2. http://japan.xilinx.com/company/gettingstarted/index.htm ISE Design Suite http://japan.xilinx.com/support/documentation/dt_ise.htm 3. 4. WP365 : 『デザ イ ンの安全性の確保』 Security Monitor IP コ アの製品パン フ レ ッ ト 5. SPI ま たは BPI フ ラ ッ シ ュ メ モ リ の間接的プ ロ グ ラ ムの概要 http://japan.xilinx.com/support/documentation/sw_manuals/xilinx11/pim_c_introduction_indirect_ programming.htm 6. 7. 8. UG360 : 『Virtex-6 FPGA コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド 』 UG470 : 『7 シ リ ーズ FPGA コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド 』 ChipScope Pro お よ びシ リ アル I/O ツールキ ッ ト http://japan.xilinx.com/tools/cspro.htm 9. 『The Keyed-Hash Message Authentication Code (HMAC)』 (FIPS PUB 198a) http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf http://www.xilinx.com/publications/prod_mktg/CS1140_AD_SecMonIP_ProdBrf_Update_Ju ne_2012.pdf 10. 『Secure Hash Standard』 (FIPS PUB 180-2) http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf 11. Soft Error Mitigation (SEM) コ ア http://japan.xilinx.com/products/intellectual-property/SEM.htm 12. 『Security Requirements for Cryptographic Modules』 (FIPS PUB 140-2) http://www.nist.gov/itl/upload/fips1402.pdf 13. UG370 : 『Virtex-6 FPGA シ ス テ ムモニ タ ー ユーザーガ イ ド 』 14. UG480 : 『7 シ リ ーズ FPGA デ ュ アル 12 ビ ッ ト 1MSPS アナ ロ グ / デジ タ ル コ ンバー タ ー ユー ザー ガ イ ド 』 15. 『The Sorcerer’s Apprentice Guide to Fault Attacks』 (Hagai Bar-El、 Hamid Choukri、 David Naccache、 Michael Tunstall、 Claire Whelan) http://eprint.iacr.org/2004/100.pdf 16. WP266 : 『Spartan-3 ジ ェ ネ レーシ ョ ン FPGA を使用 し たセキ ュ リ テ ィ ソ リ ュ ーシ ョ ン』 17. パーシ ャ ル リ コ ン フ ィ ギ ュ レーシ ョ ン http://japan.xilinx.com/tools/partial-reconfiguration.htm 18. XAPP887 : 『PRC/EPRC : パーシ ャ ル リ コ ン フ ィ ギ ュ レーシ ョ ンのデー タ イ ン テ グ リ テ ィ お よ び セキ ュ リ テ ィ コ ン ト ロ ー ラ ー』 19. NIST 社のサ イ ト 「Key Management Guideline」 http://csrc.nist.gov/groups/ST/toolkit/key_management.html 20. XAPP058 : 『組み込み型マ イ ク ロ コ ン ト ロ ー ラ を使用する ザ イ リ ン ク ス の イ ン シ ス テ ム プ ロ グ ラ ミ ン グ機能』 21. XAPP424 : 『エンベデ ッ ド JTAG ACE Player』 22. Google 検索結果 「differential+power+analysis」 http://scholar.google.com/scholar?q=Differential+power+analysis&hl=en&as_sdt=0&as_vis=1&oi =scholart XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 18 改訂履歴 改訂履歴 次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 2011 年 9 月 21 日 1.0 初版 2011 年 12 月 1 日 1.1 「概要」 に Security Monitor IP コ アの利用についての説明を追加。 「ビ ッ ト ス ト リ ームの暗号化/復号化」に BitGen で生成 さ れ る キー についての説明を追加。 「ビ ッ ト ス ト リ ーム の認証」 の注記に認 証プ ロ セ ス についての説明を追加。 図 2 の 「Authenticated」 ボ ッ ク ス の背景色を白に変更。 「強化型 リ ー ド バ ッ ク 無効化回路」 の BitGen セキ ュ リ テ ィ オプシ ョ ンに関す る 注記を変更。表 4 の「方 法」 欄 の 「PROG イ ン タ ー セ プ ト (PREQ/PACK)」 と 「内部 AES-256 キーの消去 (KEYCLEARB)」 の内容を変更。 「JTAG の 無効化 ( 防止)」 のVHDL ソ ー ス コ ー ド の フ ォ ーマ ッ ト を 変更。 「グ ロ ーバル ト ラ イ ス テー ト (応答/ペナルテ ィ )」 セ ク シ ョ ンの追 加。 「外部 シ ャ ン ト に よ る キ ー の 消去」 の 最初 の 段落 を 変更。 「フ ィ ール ド (現場) で キーを変更」 の最後の段落に Red キーの ロ ー ド に関す る 説明を追加。 「差分電力解析 (DPA)」 の最後の文 を変更。 2012 年 8 月 10 日 1.2 「参考資料」 に 「Security Monitor IP の製品パン フ レ ッ ト 」 お よ び 「SPI ま たは BPI フ ラ ッ シ ュ メ モ リ の間接的プ ロ グ ラ ム の概 要」 への リ ン ク を 追加。 「概要」 の 「価値」 と 「敵」 の説明 を変 更。 表 2 お よ び表 3 に注記を追加。 「 ク リ テ ィ カルなユーザー ク ロ ッ ク / 信号の監視 ( 検出)」 を 追加。 表 2 と 表 3 に注記 を 追加。 「 ク リ テ ィ カルなユーザー ク ロ ッ ク /信号の監視 (検出)」 を追加。 「IPROG (応答/ペナルテ ィ )」 の内容を変更。 XAPP1084 (v1.2) 2012 年 8 月 10 日 内容 japan.xilinx.com 19 Notice of Disclaimer 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. 本資料は英語版 (v1.2) を翻訳し た も ので、 内容に相違が生じ る場合には原文を優先し ます。 資料に よ っては英語版の更新に対応し ていない も のがあ り ます。 日本語版は参考用 と し てご使用の上、 最新情報につき ま し ては、 必ず最新英語版を ご参照 く だ さ い。 こ の資料に関する フ ィ ー ド バ ッ クおよび リ ン ク などの問題につき ま し ては、 [email protected] までお知らせ く だ さ い。 いただき ま し たご意見を参考に早急に対応させていただき ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受け付けてお り ません。 あ ら か じめご了承 く だ さ い。 XAPP1084 (v1.2) 2012 年 8 月 10 日 japan.xilinx.com 20