AR# 52881

コンフィギュレーション - ビットストリームの暗号化- 暗号化したビットストリームの生成およびプログラム方法

説明

暗号化されたビットストリームの生成方法および、暗号化キーを FPGA にプログラムするほう方法を教えてください。


ソリューション

ザイリンクス 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



その他の BitGen オプションに関しては、14.4 のコマンド ライン ユーザー ガイドを参照してください。

http://www.xilinx.com/support/documentation/sw_manuals_j/xilinx14_3/devref.pdf

Virtex-6 および 7 シリーズのビットストリームの暗号化/復号化に関しての詳細は、XAPP1084 を参照してください。

http://japan.xilinx.com/support/documentation/application_notes/xapp1084_tamp_resist_dsgns.pdf

AR# 52881
日付 06/09/2015
ステータス アクティブ
種類 ソリューション センター
デバイス
ツール