用户数据的AES加密和解密

8帖子 / 0新
最后一篇文章
亚历克斯·卢
离线
最后一次露面:1年5个月前
专家
加入:2014-02-28 19:16
用户数据的AES加密和解密

您好对话和开发人员,

我想使用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解密加密的数据?

谢谢,

设备:
乔辛威
离线
最后一次露面:1年7个月前
大师
加入:2014-01-14 06:45
你好。

你好。

硬件加密仅支持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上?

亚历克斯·卢
离线
最后一次露面:1年5个月前
专家
加入:2014-02-28 19:16
感谢您分享您的

感谢您分享您的经验。

我将开源代码和最小修改用于Borth Encrytipn和Decrytion,这很好。我还尝试了GAPM_USE_ENC_BLOCK_CMD,它也效果很好。

我遵循UM-B-15,附录,即与AES相关的文档。使用AES_OPERATION函数,我无法获得正确的输出以进行加密,也无法进行解剖。我将尝试定义use_aes_decrypt。如果Yoy Ave,请给我更多这些Aaplication Notes。

AES EBC是我使用的。加密的数据usese用于空气和内存。

亚历克斯·卢
离线
最后一次露面:1年5个月前
专家
加入:2014-02-28 19:16
感谢您分享您的

感谢您分享您的经验。

我将开源代码和最小修改用于Borth Encrytipn和Decrytion,这很好。我还尝试了GAPM_USE_ENC_BLOCK_CMD,它也效果很好。

我遵循UM-B-15,附录,即与AES相关的文档。使用AES_OPERATION函数,我无法获得正确的输出以进行加密,也无法进行解剖。我将尝试定义use_aes_decrypt。如果Yoy Ave,请给我更多这些Aaplication Notes。

AES EBC是我使用的。加密的数据usese用于空气和内存。

乔辛威
离线
最后一次露面:1年7个月前
大师
加入:2014-01-14 06:45
API是在非

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:反转

核心
离线
最后一次露面:3年8个月前
加入:2017-04-14 04:35
嗨,乔辛威:

嗨,乔辛威:

我对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
离线
最后一次露面:4个月2天前
职员
加入:2015-06-08 11:34
嗨,内核,

嗨,内核,

显然,您正在为键和纯文本使用相同的数据,请尝试将纯文本数组分配给其他变量数组并放置数据,这样您就可以获得正确的结果。

谢谢mt_dialog

乔辛威
离线
最后一次露面:1年7个月前
大师
加入:2014-01-14 06:45
你应该使用我的安全

您应该在此处的第三篇文章中使用我的安全加密功能:

https://support.dialog-spoomendonductor.com/feature-request-easy-complock

您应该获得与OpenSSL相同的结果。