您好对话和开发人员,
我想使用DA14580来加密和解密用户数据。最好使用gapm_use_enc_block_cmd,并纠正加密。
当我遵循um-b-15(附录H)时,加密和解密都存在问题。我尝试在Arch_main.c中使用测试代码,如所述,称为aes_init(false,aes_done_cb);and aes_operation(key,sizeof(key),明文,sizeof(明文),aes_out,16,1,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,结果相同。我在数组中使用0的IV由于芯片没有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拨打。
也就是说,您在使用um-b-15中使用的AES API的方式使用GAPM_USE_ENC_BLOCK_CMD是否有任何问题?我认为GAPM_USE_ENC_BLOCK_CMD是使用AES的首选方法。
使用AES-CTR,例如,将明文的前12个字节设置为nonce/iv,对于您加密的每个消息(随机号码或序列号)应该不同。其他4个字节设置为一个计数器,该计数器对您加密相同消息的每个16个字节的数据都会增加。然后,用您的明文将所得的密文Xor Xor与Nonce/IV一起使用,这是您的最终加密数据。要解密,请使用存储的nonce/iv重复AES操作,并用加密文本将AES Ciphertext XOR XOR XOR XOR XOR XOR XOR进行重复。图片在https://en.wikipedia.org/wiki/block_cipher_mode_of_operation#counter_.28 ...很好地描述了它。
您以什么方式/出于什么目的使用AE?您是否使用它来通过加密的空气发送数据或加密/解密存储在闪存/EEPROM上?
感谢您分享您的经验。
我将开源代码和最小修改用于Borth Encrytipn和Decrytion,这很好。我还尝试了GAPM_USE_ENC_BLOCK_CMD,它也效果很好。
我遵循UM-B-15,附录,即与AES相关的文档。使用AES_OPERATION函数,我无法获得正确的输出以进行加密,也无法进行解剖。我将尝试定义use_aes_decrypt。如果Yoy Ave,请给我更多这些Aaplication Notes。
AES EBC是我使用的。加密的数据usese用于空气和内存。
感谢您分享您的经验。
我将开源代码和最小修改用于Borth Encrytipn和Decrytion,这很好。我还尝试了GAPM_USE_ENC_BLOCK_CMD,它也效果很好。
我遵循UM-B-15,附录,即与AES相关的文档。使用AES_OPERATION函数,我无法获得正确的输出以进行加密,也无法进行解剖。我将尝试定义use_aes_decrypt。如果Yoy Ave,请给我更多这些Aaplication Notes。
AES EBC是我使用的。加密的数据usese用于空气和内存。
API以非标准和不一致的方式制作。钥匙/明文/恩克文有时会逆转,有时不相反。
这就是加密16个字节时应使用的方式:
键aes_operation_enc:未反转
键gapm_use_enc_block:反向
输入明文AES_OPERATION ENC:转换
输入ENCTEXT GAPM_USE_ENC_BLOCK:反向
输出Enctext AES_OPERATION ENC:未逆转
输出Enctext GAPM_USE_ENC_BLOCK:反向
解密时:
输入ENCTEXT AES_OPERATION DEC:未反转
输出明文AES_OPERATION DEC:反转
嗨,乔辛威:
我对DA14580 AES函数有问题,我想使用AES-128来加密用户数据,问题是DA14580 AES加密输出数据与OpenSSL LIB加密输出数据有所不同不,为什么。
我的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,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 5C 5D C0 C0 FE EA 7F 5F 5F 5F 66 DF 66 DF
我将AES_ENC_DEC函数更改为:
int aes_enc_dec(unsigned char *in,unsigned char *out,aes_key *键,unsigned char ble_flags)
{
int j;
if(ble_flags&ble_safe_mask)
rwip_schedule();
//检查以避免与SMPM/LLM冲突
if(smpm_env.operation &&((struct smp_cmd *)(smpm_env.operation)) - >操作== gapm_use_enc_enc_block)
返回-1;
setWord32(ble_aeskey31_0_reg,key-> ks [3]);
setWord32(ble_aeskey63_32_reg,key-> ks [2]);
setWord32(ble_aeskey95_64_reg,key-> ks [1]);
setWord32(ble_aeskey127_96_reg,key-> ks [0]);
for(j = 0; j <16; j ++){
*(volatile uint8*)(uint32)(0x80000+jump_table_struct [offset_em_enc_plain]+j)= in [j];
}
//将数据指针设置为加密。
setWord32(ble_aesptr_reg,umk_table_struct [offset_em_enc_plain]);
//启动HW块
setWord32(ble_aescntl_reg,1);
while(getWord32(ble_aescntl_reg)== 1)
if(ble_flags&ble_safe_mask)
rwip_schedule();
for(j = 0; j <16; j ++){
out [j] = *(volatile uint8 *)(uint32)(0x80000+jump_table_struct [offset_em_enc_cipher]+j);
}
返回0;
}
我不知道为什么会发生
嗨,内核,
显然,您正在为键和纯文本使用相同的数据,请尝试将纯文本数组分配给其他变量数组并放置数据,这样您就可以获得正确的结果。
谢谢mt_dialog
您应该在此处的第三篇文章中使用我的安全加密功能:
https://support.dialog-spoomendonductor.com/feature-request-easy-complock
您应该获得与OpenSSL相同的结果。