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);aes_operation(key, sizeof(key),明文,sizeof(明文),aes_out, 16, 1, aes_done_cb, 1);(encryption)和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?

谢谢,

设备:
Joacimwe
离线
最后看到: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 -解密。

也就是说,你有任何问题使用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?

亚历克斯·罗
离线
最后看到:1年5个月前
专家
加入:2014-02-28 19:16
谢谢你分享你的

谢谢你分享你的经历。

我使用的开放源代码与最小的修改borth加密和解密,这工作非常好。我也尝试了GAPM_USE_ENC_BLOCK_CMD,它也工作得很好。

我遵循了UM-B-15,附录h,这是与AES相关的文档。使用aes_operation函数,我无法获得正确的加密输出,也不能用于解密。我将尝试定义USE_AES_DECRYPT。如果你有的话,请多发给我一些申请材料。

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

亚历克斯·罗
离线
最后看到:1年5个月前
专家
加入:2014-02-28 19:16
谢谢你分享你的

谢谢你分享你的经历。

我使用的开放源代码与最小的修改borth加密和解密,这工作非常好。我也尝试了GAPM_USE_ENC_BLOCK_CMD,它也工作得很好。

我遵循了UM-B-15,附录h,这是与AES相关的文档。使用aes_operation函数,我无法获得正确的加密输出,也不能用于解密。我将尝试定义USE_AES_DECRYPT。如果你有的话,请多发给我一些申请材料。

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

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
api是在非

这些api是用非标准和不一致的方式制作的。Key/明文/enctext有时反转,有时不反转。

这是加密一个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
嗨Joacimwe:

嗨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,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa};
aes_set_key (aes_temp关键);
关键,aes_enc_dec (aes_temp xor_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函数更改为:

aes_enc_dec(unsigned char *in, unsigned char *out, AES_KEY *key)

int j;

如果(ble_flags & BLE_SAFE_MASK)
rwip_schedule ();

//检查避免与SMPM/LLM冲突
如果(smpm_env。(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]);

(j = 0; < 16; j + +) {
*(挥发性uint8 *) (uint32) (0 x80000 + 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 ();

(j = 0; < 16; j + +) {
Out [j] = *(volatile uint8*)(uint32)(0x80000+jump_table_struct[offset_em_enc_cipher]+j);

返回0;

我不知道为什么会这样

MT_dialog
离线
最后看到:三个月三个星期前
工作人员
加入:2015-06-08 34
嗨内核,

嗨内核,

显然你是在为键和纯文本使用相同的数据,请尝试分配纯文本数组到一个不同的变量数组,并将数据颠倒,这样你会得到一个正确的结果。

由于MT_dialog

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
你应该用我的保险箱

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

https://support.dialog-semiconductor.com/feature-request-easy-encblock

您应该会得到与openssl相同的结果。