FPGA のサポート

ブート時のセキュリティで説明したように、FPGA のみで構成されるデバイスもセキュリティを維持しながらフィールド展開する必要があります。ザイリンクス ツールは、暗号化および認証を実現するためのエンベデッド IP モジュールをプログラミング ロジックの一部として提供します。Bootgen は、7 シリーズ以降の FPGA ファミリ デバイスに幅広く対応するセキュア イメージの作成 (暗号化および/または認証) をサポートしています。この章では、Bootgen を使用してビットストリームを暗号化して認証する方法について例を挙げて説明します。FPGA をサポートする Bootgen は、スタンドアロンの Bootgen インストールで入手できます。

注記: 7 シリーズ デバイス以降のビットストリームのみがサポートされています。

暗号化および認証

ザイリンクス FPGA は、内蔵型で PL ベースの HMAC (Hash-based Message Authentication Code)、および Cipher Block Chaining (CBC) モードの Advanced Encryption Standard (AES) モジュールを使用します。

暗号化の例

暗号化されたビットストリームを作成するには、aeskeyfile 属性を使用して BIF で AES キー ファイルを指定します。encryption=aes 属性は、BIF ファイルにリストされている暗号化の必要なビットストリームに対して指定する必要があります。

bootgen -arch fpga -image secure.bif -w -o securetop.bit

BIF ファイルは次のようになります。

the_ROM_image:
{
	[aeskeyfile] encrypt.nky
	[encryption=aes] top.bit
}

認証の例

次に、FPGA ビットストリームを認証するための Bootgen コマンドを示します。

bootgen -arch fpga -image all.bif -o rsa.bit -w on -log error

BIF ファイルは次のとおりです。

the_ROM_image:
{
	[sskfile] rsaPrivKeyInfo.pem
	[authentication=rsa] plain.bit
}

ファミリ キー/難読化キー

難読化キーの暗号化を使用するには、ザイリンクス サポートに登録し、ターゲット デバイス ファミリのファミリ キー ファイルをリクエストする必要があります。このファイルが格納されている場所へのパスは、難読化キーの暗号化を実行する前に bif オプションとして渡しておく必要があります。ファミリ キーを入手するには、secure.solutions@xilinx.com までお問い合わせください。

image:
{
	[aeskeyfile] key_file.nky
	[familykey] familyKey.cfg
	[encryption=aes] top.bit
}
次の図は、サンプルの aeskey ファイルを示しています。
1: AES キーのサンプル

HSM モード

プロダクションの FPGA では HSM モードを使用しますが、標準モードでも選択できます。

標準モード

標準モードは、認証署名が埋め込まれたビットストリームを生成します。このモードで、ユーザーは認証されたビットストリームの生成に秘密キーを利用できます。次のように Bootgen を実行します。

bootgen -arch fpga -image all.bif -o rsa_ref.bit -w on -log error

以降の手順に、HSM モードで認証されたビットストリームを生成する方法を説明します。この場合、セキュア チームが秘密キーを管理し、ユーザーはこれを利用できません。次の図は、HSM モードのフローを示しています。

2: HSM モード フロー

ステージ 0: ダミー キーで認証する

これは、1 つのビットストリームに対するワンタイム タスクです。ステージ 0 の場合、Bootgen は stage0.bif ファイルを生成します。

the_ROM_image:
{
	[sskfile] dummykey.pem
	[authentication=rsa] plain.bit
}
注記: 認証されたビットストリームには、ヘッダー、実際のビットストリーム、署名およびフッターが含まれます。この dummy.bit は、認証されたビットストリームのフォーマットでビットストリームを得るために作成され、ダミーの署名を含みます。ダミー ビット ファイルが Bootgen に渡されると、署名が計算されてオフセットに挿入され、認証されたビットストリームが得られます。

ステージ 1: ハッシュを生成する

bootgen -arch fpga
          -image stage1.bif -generate_hashes -log error

Stage1.bif は次のとおりです。

the_ROM_image:
{
	[authentication=rsa] dummy.bit
}

ステージ 2: Hash HSM に署名する。ここでは OpenSSL がデモに使用されています。

openssl rsautl -sign
  -inkey rsaPrivKeyInfo.pem -in dummy.sha384 > dummy.sha384.sig

ステージ 3: RSA 証明を実際の署名で更新する

Stage3.bif は次のとおりです。

bootgen -arch fpga -image stage3.bif -w -o rsa_rel.bit -log error
the_ROM_image:
{
	 [spkfile] rsaPubKeyInfo.pem
	 [authentication=rsa, presign=dummy.sha384.sig]dummy.bit
}
注記: eFUSE に書き込む必要のある公開キー ダイジェストは、HSM モードのステージ 3 で生成された rsaPubKeyInfo.pem.nky ファイルにあります。