AES 暗号化は対称キーを用いた自己認証アルゴリズムで、暗号化と復号化に同じキーを使用します。したがって、このキーは非公開キーとして保護する必要があり、キーを格納するための領域が内部に必要になります。RSA (Rivest Shamir Adleman) による認証手段もあります。RSA は非対称アルゴリズムで、署名に使用するキーと検証に使用するキーが異なります。認証には一対のキーが必要です。
- 署名には、秘密キーを使用します。
- 検証には、公開キーを使用します。
この公開キーは保護の必要がないため、セキュアな格納領域は不要です。この認証方式と暗号化を組み合わせることにより、真正性と機密性の両方を確保できます。RSA は、暗号化されているパーティションと暗号化されていないパーティションのいずれにも使用可能です。
RSA のメリットは、公開キーを使用することだけではなく、復号化する前に認証を実行できることが挙げられます。RSA 公開キーのハッシュ値は eFUSE に格納する必要があります。ザイリンクス SoC デバイスでは、パーティション データは AES 復号化エンジンに送信される前に認証されます。この方法では、パーティション データの真正性を確認してから復号化を実行することになるため、復号化エンジンへの攻撃を防ぐことができます。
ザイリンクス SoC では、公開キーと秘密キーの 2 つのペアが使用されます (プライマリおよびセカンダリ)。プライマリ公開/秘密キーは、セカンダリ公開/秘密キー ペアを認証します。セカンダリ キーは、パーティションを署名/検証します。
キーを示す頭文字の最初のアルファベットは、プライマリの場合 P、セカンダリの場合 S となります。キーを示す頭文字の 2 番目のアルファベットは、公開の場合 P、秘密の場合 S となります。キーの種類は次の 4 つです。
- PPK = プライマリ公開キー
- PSK = プライマリ秘密キー
- SPK = セカンダリ公開キー
- SSK = セカンダリ秘密キー
Bootgen は、次の 2 つの方法で認証証明を作成できます。
- PSK と SSK を供給します。これらの 2 つの入力を使用し、SPK 署名がオンザフライで計算されます。
- PPK、SSK、および SPK 署名を入力として供給します。この方法は、PSK がわからない場合に使用されます。
プライマリ キーはハッシュ化されて eFUSE 内に格納されます。このハッシュ値は、FSBL によってブート イメージに格納されたプライマリ キーのハッシュ値と比較されます。このハッシュは、Vitis に付属するスタンドアロン ドライバーを使用して PS の eFUSE メモリに書き込むことができます。
BIF ファイルの例を次に示します。
image:
{
[pskfile]primarykey.pem
[sskfile]secondarykey.pem
[bootloader,authentication=rsa] fsbl.elf
[authentication=rsa]uboot.elf
}
デバイス固有の認証の詳細は、次の資料を参照してください。