LPC55S69 针对 SCA 的 AES 屏蔽对策 您好。 我是否正确理解以下方法应该保护参考 AES-128 密钥免受因使用掩码而造成的侧信道攻击?我使用的应用程序接口有点过时,但没关系,我能得到正确的结果。
uint32_t coreClockHz = CLOCK_GetFreq(kCLOCK_CoreSysClk);
status_t result = PUF_Init(PUF, PUF_DISCHARGE_TIME_MS, coreClockHz);
if (result != kStatus_Success) return result;
result = PUF_Start(PUF, ac_buffer, ac_size);
if (result != kStatus_Success) {
PUF_Deinit(PUF, PUF_DISCHARGE_TIME_MS, coreClockHz);
}
__attribute__((aligned(4)))
uint8_t user_key[16] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
__attribute__((aligned(4)))
uint8_t keyCode[52] = {0x00};
result = PUF_SetUserKey(PUF, kPUF_KeyIndex_00, user_key, sizeof(user_key), keyCode, sizeof(keyCode));
if (result != kStatus_Success) {
PUF_Deinit(PUF, PUF_DISCHARGE_TIME_MS, coreClockHz);
}
hashcrypt_handle_t hch;
hch.keySize = kHASHCRYPT_Aes128;
hch.keyType = kHASHCRYPT_SecretKey;
result = PUF_GetHwKey(PUF, keyCode, 52, kPUF_KeySlot0, 0x01000001);
if (result != kStatus_Success) {
PUF_Deinit(PUF, PUF_DISCHARGE_TIME_MS, coreClockHz);
}
uint8_t pt[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t ct[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
result = HASHCRYPT_AES_EncryptEcb(HASHCRYPT, &hch, pt, ct, 16); 位置为 0、3、4、7 的至少关键字节... 应该受到保护吗? Re: LPC55S69 AES masking countermeasure against SCA 我之所以提出这个问题,是因为我能够通过 PUF_GetHwKey() API 使用非零掩码参数恢复从 PUF 推送到 AES 密钥寄存器的 AES-128/AES-256 密钥。所有密钥字节均已正确恢复。此外,我还验证了恢复的 AES 密钥的明文/密文是否正确。 问题是我在设置掩码时做错了什么,还是掩码没有正常工作。 Re: LPC55S69 AES masking countermeasure against SCA 你好@新矮人
我们可以检查 AN12324
LPC55Sxx 物理不可克隆函数和散列的用法
- PUF 还具有其他防止攻击的功能。例如,通过阻止功能(注册、代码输出、 键锁)或提供增强的侧信道保护(通过使用键盘掩码)。
这仅指密钥重建期间的内部加密操作。
puf_gethwKey () 中的掩码参数不能保护单个 AES 密钥字节在加载到 HASCRYPT AES 密钥寄存器后不被观察。
BR
哈利 Re: LPC55S69 AES masking countermeasure against SCA @Harry_Zhang 问题是我能够从密钥代码中恢复密钥。还是预期的行为,网络安全级别? Re: LPC55S69 AES masking countermeasure against SCA @Harry_Zhang谢谢! puf_gethwKey () 中的掩码参数不能保护单个 AES 密钥字节在加载到 HASCRYPT AES 密钥寄存器后不被观察。 让我再澄清一个问题。"keyMask"参数的作用是什么? status_t PUF_GetHwKey(PUF_Type *base、 常数 uint8_t*keyCode、 size_tkeyCodeSize, puf_key_slot_t keySlot、 uint32_tkeyMask); Re: LPC55S69 AES masking countermeasure against SCA 你好@新矮人
是的,这是预料之中的行为。 该图显示,PUF仅保护密钥存储,然后将重建后的明文密钥直接发送到AES引擎。 AES 引擎没有侧信道保护,因此在加密过程中,其电源/EM 行为仍有可能泄露真实密钥。
BR
哈利 Re: LPC55S69 AES masking countermeasure against SCA 你好@新矮人
keyMask 参数仅在 PUF 硬件内部使用,以便在密钥重构过程中增加一些随机性。 其目的是使内部 PUF 操作稍难通过侧信道攻击进行分析。 它不会屏蔽或修改最终的 AES 密钥,也不会保护 HASHCRYPT AES 引擎。 因此,掩码只在 PUF 密钥解包过程中起作用,在 AES 加密过程中不起作用。
您可以查看PUF_GetHwKey函数的定义。
BR
哈利
記事全体を表示