はじめに
Security Key Management Toolは、UFPKによりKUKを暗号化し、KUKのEncrypted Keyを得ることができます。
Security Key Management Tool
「鍵のラッピング」タブの「鍵の種類」タブで以下の設定をします。
- 鍵の種類:KUKを選択します。
- ラッピング鍵:UFPKを選択し、UFPKファイルとしてUFPKの平文鍵を、W-UFPKファイルとしてUFPKのEncrypted Keyを指定します。
- 出力:バイナリを選択し、出力ファイル名(.bin)を指定します。
「鍵データ」タブに移動し、以下の設定をします。
- ファイル:KUKの平文鍵を指定します。
上記設定後、「ファイルを生成する」をクリックすると「出力」に指定したファイルにバイナリ形式で出力が生成されます。
バイナリファイルのフォーマットはドキュメントまたはCソースでの出力に記載があります。
出力形式をCソースにすると以下のようになるはずです(具体的な値は異なる)。
const encrypted_user_key_data_t g_encrypted_user_key_data =
{
/* uint32_t keytype; */
0x00000000,
/* uint32_t shared_key_number; */
0x00000000,
/* uint8_t wufpk[32]; */
{
0x57, 0xEF, 0xD8, 0x49, 0x76, 0x1E, 0x63, 0xE5, 0xA0, 0x5D, 0x9D, 0xA3, 0xF9, 0xF7, 0x51, 0xC0,
0x8C, 0xF5, 0x0F, 0x53, 0x15, 0x32, 0xC4, 0x8A, 0xCE, 0xF2, 0x43, 0x11, 0x46, 0x7F, 0x04, 0xC3
},
/* uint8_t initial_vector[16]; */
{
0x31, 0x4F, 0x73, 0x0F, 0xFD, 0xE9, 0xFE, 0x3F, 0xD5, 0x13, 0xA9, 0x55, 0xA5, 0x41, 0x68, 0xF0
},
/* uint8_t encrypted_user_key[ENCRYPTED_KEY_BYTE_SIZE]; */
{
0x53, 0xDC, 0xD0, 0x82, 0xF7, 0x67, 0x4F, 0x63, 0x06, 0xA5, 0x94, 0x5F, 0xD0, 0x6D, 0x8D, 0x33,
0xEE, 0x4C, 0x48, 0xEF, 0x14, 0xE4, 0xEC, 0x20, 0x13, 0xCB, 0x8F, 0xE0, 0x83, 0x52, 0x18, 0xD8,
0x03, 0xD4, 0xC6, 0x58, 0x33, 0x8B, 0xAC, 0x00, 0xC3, 0x2D, 0x5B, 0x24, 0xCF, 0x4A, 0xEB, 0x22
},
/* uint8_t crc[4]; */
{
0x52, 0x49, 0x87, 0x31
},
};
以下の情報が含まれています(big endian)。
- keytype(32bit):キー種別ですが、RXの場合使用しません。
- shared_key_index(32bit):RXの場合0x00000000固定です。
- wufpk(32byte):UFPKのEncrypted Keyです。
- initial_vector(16byte):KUKのEncrypted Keyを計算するときに使用されたIVです。
- encrypted_user_key(48byte):KUKのEncrypted Keyです。
- crc(4byte):keytype~encrypted_user_keyまでのCRCです。
上記のうちwufpk、initial_vector、encrypted_user_key を入力とし、KUKのWrapped KeyをMCUに計算させることができます。
ファームウェアへの組み込み方法は、以下のような方法が考えられそうです。
- Security Key Management ToolからCソースを出力しファームウェアに組み込む:攻撃者へのキーの漏洩はないものの、フラッシュのコピーによりUFPK、KUKで可能な操作がすべてできる。
- デバイスのプロビジョニング時にSecurity Key Management Toolからのバイナリ出力を読み込み、MCU上でKUKのWrapped Keyを計算・データフラッシュへ書き込む:プロビジョニング操作が必要な代わりに、フラッシュのコピーができない(デバイスごとのHUKで暗号化されるため)。
セキュリティを考えると、KUKのWrapped Keyのみをデータフラッシュに保存することがよさそうです。