跳到主要内容

HW_AES_HASH_STORE_KEYS()中的安全模式?

da1468x.

11个月前

张贴了bobspam@free.fr.50分 7回复
0旋转

你好

我正在使用AES CBC从DA14683传输数据,我想为安全模式准备我的代码。我从文档中了解,以便设置AES键,我需要:

- 启用OTP阅读

- 使用DMA通道7将键从OTP传输到AES键64寄存器

- 禁用OTP.

- 在我的数据上发射AES

我更喜欢了解我目前正在使用的HW_AES_HASH_STORE_KEYS函数的洞察力,以便准备AES协处理器。在将其传输到AES寄存器之前,它设置密钥扩展和准备密钥字节。

- 是否需要准备存储在OTP中的键?我只是需要将它们从OTP复制到AES寄存器吗?

- 是否需要在启动DMA通道7之前调用hw_aes_hash_store_keys()函数,因此它设置了密钥扩展?此功能的关键转移应失败;这是否可以在安全模式下以硬件故障结束?我需要重新实现该功能,以便只设置参数,准备键但没有有效地加载键?

换句话说,你能给我一些关于如何设置安全模式的DA14683的见解(请通过将我重定向到教程来回答)?

先感谢您

此致

st

11个月前

bobspam@free.fr. 50分

问题n°2似乎与q n°1相当链接:Crypto_hmac_sha256()在安全模式中是什么?它看起来像这个函数只能实现CPU密钥传输,它根本不使用DMA。

辅助问题:您是否在生产中测试了安全模式和加密/ HMAC?

谢谢

接受答案!

8个月前

PM_DIALOG.

嗨鲍勃,

HW_AES_HASH_STORE_KEYS()存储AES / HASH引擎内存中的AES键。此功能将用于AES / HASH引擎存储器中的AES加密/解密的键存储。如果引擎执行键扩展,则AES_KEYS应仅包含基本密钥。否则它应该包含所有扩展键。在线教程

如果已启用安全功能,则应用程序无法读取存储的密钥。如果禁用安全启动闪光灯,则是,是的,可以。

存储在OTP中的键只能由安全的DMA通道7.在键的生成之后,您应该将它们存储到OTP的安全区域。

有关安全启动的更多信息,请在线和数据表找到。

谢谢,PM_DIALOG.

8个月前

A331287970@126.com 0分

认为!

7个月前

bobspam@free.fr. 50分

你好

谢谢您的回答。

- 我确实理解,OTP内存包含AES模块直接使用的键。如果加密算法需要密钥扩展,则所有键都必须存储在AES_keys中。

- 我确实理解,在安全模式下,CPU无法读取存储在OTP中的键。它们只能使用DMA转移。

- 是否实际的董事会支持套餐执行此DMA转移?从我的理解,没有。

- >我是否应该重新实现HW_AES_HASH_STORE_KEYS()以在安全模式下使用密钥扩展?我正在使用AES CBC,并使用OpenSSL解码传输数据。

- 您没有回答我关于Crypto_hmac_sha256()的问题。

- 从我的理解,我无法使用存储在OTP中的键以在安全模式下使用HMAC。这意味着HMAC功能无法从JTAG / MKIMAGE生产工具获取其键。

- >你能确认吗?

先感谢您

此致

st

7个月前

bobspam@free.fr. 50分

你好

我打算通过initial_flash / jtag / otp / suota_loader_secued软件组使用系统中引入的对称密钥。

如果我替换HW_AES_HASH_STORE_KEYS()函数以具有DMA通道7加载的键:

- 我了解我需要以相同的方式手动设置“密钥扩展”设置hw_aes_hash_store_keys

- 下一个陈述似乎与字节交换相关。如果我理解,它与小型联系转换有关。

您能否向MMA通道7确认设置以从OTP将密钥正确加载到AES协处理器中?是否有任何特定的字节顺序转换执行?如果是的话在哪种情况下?

先感谢您

此致

st

6个月前

bobspam@free.fr. 50分

你好

对于记录,我设法使用存储在OTP中的对称密钥使用AES CBC加密。

程序如下:

dma_setup secured_channel = {
.cannel_number = hw_dma_channel_7,
.bus_width = hw_dma_bw_word,
.irq_enable = hw_dma_irq_state_enabled,
.irq_nr_of_trans = 0,
.dreq_mode = hw_dma_dreq_start,
。inc = hw_dma_ainc_true,
.b_inc = hw_dma_binc_true,
.circular = hw_dma_mode_normal,
.dma_prio = hw_dma_prio_0,
.dma_idle = hw_dma_idle_interrupting_mode,
.dma_init = hw_dma_init_ax_bx_ay_by,
.dma_req_mux = hw_dma_trig_none,
.src_address = 0x0,
.dest_address = 0x0,
.Length = 0x0,
.callback = key_secured_copy_cb,
.user_data = xxx,
};

静态int16_t key_secured_copy(const uint8_t * from,uint8_t *到,uint32_t大小)
{
//声明局部变量
int16_t错误= -1;
UINT16_T local_size;

//检查参数完整性
断言(来自!= null);
断言(到!= null);
断言(大小> 0);

if((来自!= null)&&(to!= null)&&(size> 0)){

//键扩展需要由发动机执行
reg_set_bit(aes_hash,crypto_ctrl_reg,crypto_aes_kexp);

//准备DMA数据
secured_channel.src_address =(uint32_t)from;
secured_channel.dest_address =(uint32_t);
secured_channel_len = 0;
if(secured_channel.bus_width == 0){
local_size = size;
} 别的 {
local_size = size / secured_channel.bus_width;
}
secured_channel.length = local_size;
hw_otpc_init();
hw_otpc_set_speed(hw_otpc_sys_clk_freq_16);
hw_otpc_manual_read_on(0);
hw_dma_channel_initialization(&(secured_channel));
hw_dma_channel_enable(secured_channel.channel_number,hw_dma_state_enabled);
os_event_wait(secured_channel_event,os_event_forever);
hw_dma_channel_stop(secured_channel.channel_number);
hw_otpc_manual_read_off();
hw_otpc_disable();

//设置错误返回参数
if(local_size == secured_channel_len){
error = 0;
} 别的 {
错误= 1;
}
}
//警报错误
断言(错误== 0);

返回错误;

}

函数调用是

key_secured_copy((uint8_t *)0x07f8e8c0,(uint8_t *)&aes_hash-> crypto_keys_start,32);

请注意,对话框工具中显示的密钥secure_image_config.py似乎具有与系统有效使用的密钥不同的exidianess。

为了能够使用OpenSSL从DA14683传输的扰乱消息,我必须重写从小endian中显示的XML文件中显示的十六进制密钥(32位)。

(请参阅HW_AES代码中的字节交换。由于CPU无法访问键,因此无法在安全模式下完成此操作)

希望能帮助到你。主题已关闭。

此致

st

6个月前

bobspam@free.fr. 50分

你好

对于记录,一个小型endian.bash脚本需要吨转换由secure_image_config.py生成的键的eDennsness,从而允许使用openssl到unspherid数据:

#!/ bin / bash
如果[$#--ne 1] ||[[!$ 1 =〜[0-9A-FA-F] {64}]]
然后
echo“用法:endian.bash 256_hex_key”
退出1.
FI.

对于我在0 1 2 3 4 5 6 7

l = $(($ i * 4 + 1))
echo $ 1 |折叠-w 2 |tail-n + $ l |头-n 4 |TAC |tr -d“\ n”
完毕

回声

布尔

st