您好对话框和开发人员,
我想使用da14580来加密和解密用户数据。使用GapM_USE_ENC_BLOCK_CMD非常好,并更正加密。
当我关注UM-B-15时,附录H时,加密和解密都存在错误。我试图在Arch_Main.c中使用测试代码,如上所述,名为aes_init(false,aes_done_cb);和aes_operation(key,sizeof(keyof(keyof),明文,sizeof(plaintext),aes_out,16,16,aes_done_cb,1);(加密)和aes_operation(key,sizeof(key),aes_out,16,aes_result,16,0,aes_done_cb,0);(解密)。
加密的数据与使用gapm_use_enc_block_cmd的数据不同。——使用相同的密钥和明文。对于解密,所有的输出都是0来自相同的密钥和加密的数据,不能获得明文回来。
请说明如何使用s/w解密。
由于信息非常有限,我不知道如何设置aes_flag——我尝试了0和1,结果相同。IV我在数组中使用了0,因为芯片没有IV…
SW_AES.c支持AES-CBC,可以使用GAPM_USE_ENC_BLOCK_CMD解密加密的数据?
谢谢,
设备:
你好。
硬件加密仅支持AES加密操作;而不是AES解密操作。因此,如果您想使用AES解密,您必须使用SW实现进行解密操作。要包含它,必须定义USE_AES_DECRYPT(参见aes_api.c)。如果没有定义,解密就不能工作。
请注意,有许多块密码操作模式,它使用AES:AES-CBC,AES-CTR,AES-EBC等(参见https://en.wikipedia.org/wiki/block_cipher_mode_of_operation.).硬件模块只支持原始aes加密操作,即使用128位密钥和128位明文,生成128位密文。还要注意,我认为输出字节出于某种原因是颠倒的。aes_operation API函数似乎使用了AES-EBC,除非您知道自己在做什么,否则永远不应该直接使用它。
作为DA14580上的通用加密,我将推荐AES-CTR,因为您只需要AES加密操作而不是AES - 解密操作,这意味着您不需要使用SW AES-DECRYPLY。
也就是说,您是否在使用MobM_USE_ENC_BLOCK_CMD中使用GAPM_USE_ENC_BLOCK_CMD进行任何问题,以便使用UM-B-15中声明的AES API(而不是?在我看来,GapM_USE_ENC_BLOCK_CMD是使用AES的首选方法。
例如,使用AES-CTR将明文的前12个字节设置为nonce/IV,该值对于您加密的每个消息(随机数或序列号)都应该不同。其他4个字节设置为一个计数器,每加密同一消息的16个字节就增加一个计数器。然后将生成的密文与明文异或,它与nonce/IV一起是最终加密的数据。要解密,使用存储的nonce/IV和异或AES密文与加密的文本重复AES操作,恢复明文。这幅画在https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation Counter_.28……描述它很好。
以什么方式/用于您使用AES的目的?您是否使用它来通过加密的空中发送数据或加密/解密存储在闪存/ EEPROM上的/解密?
谢谢你分享你的经历。
我使用了对Borth EncryTipn和Decrytion的Min修改的开源代码,这效果非常好。我也尝试了gapm_use_enc_block_cmd,它也很好地工作。
我跟随UM-B-15,附录,这是onlt aes相关的文件。使用AES_Operation函数,我无法获得正确的互联输出,而不适用于解释。我会尝试定义duest_aes_decrypt。如果YOY AVE,请将更多的私营标记发送给我。
AES EBC是我使用的。对空气和内存的加密数据Usese。
谢谢你分享你的经历。
我使用了对Borth EncryTipn和Decrytion的Min修改的开源代码,这效果非常好。我也尝试了gapm_use_enc_block_cmd,它也很好地工作。
我跟随UM-B-15,附录,这是onlt aes相关的文件。使用AES_Operation函数,我无法获得正确的互联输出,而不适用于解释。我会尝试定义duest_aes_decrypt。如果YOY AVE,请将更多的私营标记发送给我。
AES EBC是我使用的。对空气和内存的加密数据Usese。
API以非标准和非一致方式制作。键/明文/ enctext有时会颠倒且有时不是。
这就是加密16个字节块时应使用的方式:
key aes_operation_enc:未反转
关键gapm_use_enc_block:逆转
输入plaintext aes_operation enc:反转
输入enctext gapm_use_enc_block:反转
输出enctext aes_operation enc:未反转
输出enctext gapm_use_enc_block:反转
解密时:
输入enctext aes_operation dec:未反转
输出明文aes_operation dec:反转
嗨Joacimwe:
我有一个关于DA14580 AES函数的问题,我想用AES-128加密用户数据,问题是DA14580 AES加密输出的数据和openssl lib加密输出的数据是不同的,它和DA14580 AES加密输出的数据一样,我不知道为什么。
我的SDK版本是5.04,这里是我的代码:
uint8_t xor_key [16];
UINT8_T AES_TEMP [16] = {0xAB,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA};
aes_set_key(aes_temp,&key);
aes_enc_dec(aes_temp,xor_key和key,ble_safe_mask);
输出XOR_KEY值为:AF C6 6C 38 7E AF E7 CB 64 99 E4 C2 70 56 29 DD
但我使用openssl lib加密相同的aes_temp[16],输出为:b8 0e 69 e1 72 74 75 5c 5d c0 fe ea 7f 5f 66 df
我将aes_enc_dec函数更改为:
int aes_enc_dec(未签名的char * in,unsigned char * out,aes_key * key,unsigned char ble_flags)
{
in j;
如果(ble_flags & BLE_SAFE_MASK)
Rwip_schedule();
//检查以避免与SMPM / LLM冲突
if(smpm_env.operation &&((struct smp_cmd *)(smpm_env.operation)) - >操作== gapm_use_enc_block)
返回1;
setword32(ble_aeskey31_0_reg,键 - > ks [3]);
setword32(ble_aeskey63_32_reg,键 - > ks [2]);
setword32(ble_aeskey95_64_reg,键 - > ks [1]);
setword32(ble_aeskey127_96_reg,键 - > ks [0]);
for(j = 0; j <16; j ++){
*(volatile uint8 *)(uint32)(0x80000 + jump_table_struct [offset_em_enc_plain] + j)= [J];
}
//将数据上的指针设置为加密。
SetWord32 (BLE_AESPTR_REG jump_table_struct [offset_em_enc_plain]);
//启动HW块
setword32(ble_aescntl_reg,1);
而(getword32(ble_aescntl_reg)== 1)
如果(ble_flags & BLE_SAFE_MASK)
Rwip_schedule();
for(j = 0; j <16; j ++){
出局[j] = *(volatile uint8 *)(uint32)(0x80000 + jump_table_struct [offset_em_enc_cipher] + j);
}
返回0;
}
我不知道为什么会这样
嗨内核,
显然,您正在使用相同的键和纯文本的数据,请尝试将纯文本数组分配给不同的变量阵列,并将数据倒置,以这种方式您将获得适当的结果。
谢谢mt_dialog.
你应该在第三篇文章中使用我的安全加密功能:
https://support.dialog-semicondiondiondum/feature-request-easy-encblock.
您应该会得到与openssl相同的结果。