ソリューション
ザイリンクス FPGA では、AES、HMAC、DNA などのビットストリーム暗号化方法が複数サポートされています。
これらの方法については、xilinx.com にある各 FPGA のコンフィギュレーション ユーザー ガイドを参照してください。
ザイリンクスでのビットストリームのセキュリティ サポート、利用可能なオプション、そのインプリメント方法については、まず、コンフィギュレーション ユーザー ガイドをよくお読みください。
また、デザインをセキュリティ保護するには、外部暗号化デバイスを使用する必要があります。
キーを入手し、検証コードを計算するには、デバイスを読み出してください。
同じようなインプリメンテーションを説明しているリファレンス デザインは、こちらにあります。
http://japan.xilinx.com/support/documentation/application_notes/xapp780.pdf
このインプリメンテーションに関してご利用いただけるのは、これだけなので、これをご利用になる場合は、提供されているリファレンス デザインおよびコードを変更する必要があります。
BBRAM または eFUSE ストレージ オプションを選択する場合は、それぞれの機能を理解いただいて、お客様のデザイン要件に合ったものをお選びください。
それぞれの短所、長所に関しては、次の表および注記を参照してください。
各オプションの詳細については、該当デバイスのユーザー ガイドを参照してください。
ザイリンクス デバイスを使用したビットストリーム暗号化に関するう一般的な情報は次のようになっています。
Virtex-6 および 7 シリーズでは、HMAC および AES キーの両方がサポートされています。
Spartan デバイスには AES キー オプションのみがあります。
また、ビットストリームの圧縮と暗号化も、Virtex-6 および 7 シリーズ デバイスでのみサポートされています。
詳細は
(ザイリンクス アンサー 37413) を参照してください。
3 つの大型 Spartan-6 デバイスでのみ、ビットストリームの暗号化がサポートされています (XC6SLX75 / 75T、XC6SLX100 / 100T、XC6SLX150 / 150T)。
HMAC キーはビットストリームに含まれており、AES キーのように、FPGA にプログラムする必要はありません。
HMAC キーは、AES キーと同じ NKY キー ファイルおよび BIT ファイルに含まれています。
ビットストリームの暗号化が使用されていたとしても、ICAP インターフェイスを介してリードバックを実行することができます。
POR または PROG が最初にアサートされて、コンフィギュレーション メモリが消去されているなら、デバイスが暗号キーを保持していたとしても、暗号化されていないビットストリームをデバイスをコンフィギュレートするために読み込むことができます。
FUSE_CNTL[0] ビットが一旦プログラムされると、FPGA をコンフィギュレートするには、eFUSE キーで暗号化されたビットストリームのみが使用できます。
NKY ファイルを BitGen に入力するか、またはキーを指定して BitGen でそのファイルを作成することができます。
HMAC キーが指定されていない場合、BitGen が自動的にそのキーを生成します。
しかし、このキーは、AES キーとは異なり、JTAG を介して直接 FPGA に読み込まれません。
これは、暗号化されたビットストリームに含まれ、保護 (ラップ) されています。
オンチップの復号化プロセス中に、この HMAC キーはビットストリームから抽出され、認証アルゴリズムで使用されます (たとえば、HMAC キーにはオンチップのキー ストレージは不要です)。
NKY ファイルのフォーマット : KEY HMAC/(AES の場合は 0) <hex string> (256 ビットの HMAC/AES キー)
NKY ファイルのサンプルは次のようになります。
StartCBC BitGen 設定はオプションであって、必須ではありません。
ザイリンクスの AES ビットストリーム暗号化には、256 ビットの AES キーを利用した CBC (Cipher Block Chaining) と呼ばれるテクニックが使用されています。
CBC は、ビットストリームの 2 つの異なる箇所が同じ実際値を持っている場合に (すべて 0 の場合など)、別々のパターンに暗号化するようにします。
これにより、不正アクセスがあった場合のザイリンクス ビットストリーム復号化を防ぎます。
CBC には、開始番号にランダムな番号 (初期ベクター) が必要です。
BBRAM および eFUSE の AES/HMAC キー フロー (ISE/Vivado および iMPACT/ハードウェア セッション)
(ISE) :
1) デザインをインプリメントした後に、[Encryption BitGen] 設定をオンにします。
2) 暗号化方法に BBRAM または eFUSE を選択し、HMAC または AES キーを入力して、BitGen を実行し、NKY (キー) および BIT (コンフィギュレーション) ファイルを生成します。
- Virtex-6 および 7 シリーズ デバイスの場合は、HMAC および AES キーの両方が必要です。
- 暗号化をオンにしているのに、キーまたは AES 初期ベクターを指定していない場合は、BitGen がランダムにそれらを生成します。
Vivado :
注記 : Vivado フローを使用したプログラミングおよびデバッグに関しては、(UG908) を参照してください。
Vivado のビットストリーム オプションは、デザインの XDC ファイルを使用してデザイン自体に設定されます。
Vivado デザインに対してビットストリーム暗号化をイネーブルにし設定するには、次の手順に従ってください。
1) 合成後またはインプリメンテーション後のデザインを開き、プロジェクトのソース ビューの制約のドロップダウン メニューで、XDC をダブルクリックして開きます。
2) XDC で、ビットストリーム暗号化をイネーブルにするため、次のプロパティを設定します。
set_property BITSTREAM.ENCRYPTION.ENCRYPT Yes [current_design]
3) (UG908) の表 A-1 「デバイス コンフィギュレーション ビットストリーム設定」を参照し、XDC または Tcl スクリプトで暗号化オプションの残りを同様に設定します。
4) サンプルは次のようになります。
注記 : Tcl コンソールを使用するか、または Tcl スクリプトを使用して、これらを Tcl で設定して、XDC に反映されることもできます。
5) ビットストリームを生成したら、iMPACT を起動するか、ハードウェア セッションを開き、次のセクションのいずれかに従ってください。
注記 : BITSTREAM プロパティのすべてをしポートするには、次のコマンドを使用します。
report_property -all [current_design] BITSREAM*
もう少し厳密に設定する場合は、次のコマンドを使用します。
report_property -all [current_design] BITSREAM.CONFIG*
または
report_property -all [current_design] BITSREAM.ENCRYPTION*
デフォルト値がリストされている場合は、チェックしたい各プロパティに対し、次のコマンドを使用します。
list_property_value -default <property> [current_design]
iMPACT および Vivado ハードウェア セッションを使用した暗号化されたビットストリームのプログラム
iMPACT :
1) まず、デバイスを選択して右クリックし、[Assign New Configuration File] をクリックして、BIT ファイルをダウンロードする場合と同じように、FPGA に NKY ファイルをダウンロードします。
注記 : NKY ファイルは、BIT ファイルと同じプロジェクト ディレクトリに生成する必要があります。
2) 暗号化された BIT ファイルでも、暗号化されていない BIT ファイルでも (この場合はキーが無視される)、FPGA をコンフィギュレートすることができます。
AES キーを使用して、暗号化されたビットストリームを使用するか、暗号化されていないビットストリームを使用する場合、コンフィギュレーションに制限を設けるか、設けないか、というオプションに関しては、コンフィギュレーション ユーザー ガイドまたは
(ザイリンクス アンサー 39389) を参照してください。
ハードウェア セッション :
注記 : Vivado フローを使用したプログラミングおよびデバッグについては (UG908) を参照してください。
1) Flow Navigator の [Program and Debug] からハードウェア セッションを起動します。
2) 既存のハードウェア ターゲットを開くか、または新しいものを Connection Wizard を使用して接続します。
3) デバイス/ボードに従って、正しいハードウェア プロパティを設定します。
4) 次の図に示すように、ターゲット デバイスを右クリックして、NKY ファイルおよび BIT ファイルを割り当てます。

BBRAM および eFUSE の AES/HMAC キー オプション (コマンド ライン) および説明
暗号化用の ISE BitGen オプション設定およびコマンド ライン オプション
コマンド例
-g Encrypt: |
ビットストリームを暗号化 |
ビットストリームの暗号化のオン/オフ
|
-g HKey: |
HMAC キー (16 進数の文字列) |
HMAC キーを指定します。キー ファイルに書き込まれます。
|
-g KeyFile: |
暗号化キー ファイルを入力 |
AES キーおよび AES 初期ベクターが含まれます。指定されていない場合は BitGen がランダム キーおよびベクターを作成します。 |
-g startCBC: |
AES 初期ベクター |
初期ベクターを指定します。キー ファイルに書き込まれます。 |
Spartan-6 の基本的な BitGen 暗号化コマンド
bitgen -w -g Encrypt:Yes -g Key0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX system.ncd
Virtex-6 または 7 シリーズ デバイスの詳細な BitGen コマンド
bitgen -w -g Encrypt:Yes -g EncryptKeySelect:efuse -g Key0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -g HKey:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -g compress system.ncd system.bit system.pcf
異なるオプションを使用した複雑なコマンド
bitgen -w -g Security:Level2 -g Encrypt:Yes -g KeyFile:XXX.nky -g StartCBC:XXXXXXXX -g JTAG_SysMon:Disable -g compress system.ncd system.bit system.pcf