跳到主要内容

用于用户数据的AES加密和解密

DA14580.

5年前

用于用户数据的AES加密和解密

张贴了亚历克斯罗0分 7回复
0旋转

您好对话框和开发人员,

我想使用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 i在阵列中使用0的IV由于芯片没有IV ...

SW_AES.c支持AES-CBC,可以使用GAPM_USE_ENC_BLOCK_CMD解密加密的数据?

谢谢,

5年前

Joacimwe. -5点

你好。

硬件加密仅支持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个字节设置为对您加密的每条消息(随机数或序列号)的每条消息应该不同的once / IV。其他4个字节被设置为对您加密相同消息的每个16个字节的数据增加的计数器。然后XOR与纯粹的pinipherText,与Nonce / IV一起是您的最终加密数据。要解密,请使用存储的once / IV和XOR与加密文本一起重复AES操作以恢复明文。图片at.https://en.wikipedia.org/wiki/block_cipher_mode_of_operation_2...描述它很好。

以什么方式/用于您使用AES的目的?您是否使用它来通过加密的空中发送数据或加密/解密存储在闪存/ EEPROM上的/解密?

5年前

亚历克斯罗 0分

感谢您分享您的体验。

我使用了对Borth EncryTipn和Decrytion的Min修改的开源代码,这效果非常好。我也尝试了gapm_use_enc_block_cmd,它也很好地工作。

我跟随UM-B-15,附录,这是onlt aes相关的文件。使用AES_Operation函数,我无法获得正确的互联输出,而不适用于解释。我会尝试定义duest_aes_decrypt。如果YOY AVE,请将更多的私营标记发送给我。

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

5年前

亚历克斯罗 0分

感谢您分享您的体验。

我使用了对Borth EncryTipn和Decrytion的Min修改的开源代码,这效果非常好。我也尝试了gapm_use_enc_block_cmd,它也很好地工作。

我跟随UM-B-15,附录,这是onlt aes相关的文件。使用AES_Operation函数,我无法获得正确的互联输出,而不适用于解释。我会尝试定义duest_aes_decrypt。如果YOY AVE,请将更多的私营标记发送给我。

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

5年前

Joacimwe. -5点

API以非标准和非一致方式制作。键/明文/ enctext有时会颠倒且有时不是。

这就是加密16个字节块时应使用的方式:

key aes_operation_enc:未反转
key gapm_use_enc_block:反转

输入plaintext aes_operation enc:反转
输入enctext gapm_use_enc_block:verdered

输出enctext aes_operation enc:未反转
输出enctext gapm_use_enc_block:反转

解密时:

输入enctext aes_operation dec:未反转
输出明文AES_operation DEC:反转

3年前

核心 0分

嗨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;

if(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)
if(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;
}

我不知道为什么会发生这种情况

3年前

mt_dialog. -30点

嗨内核,

显然,您正在使用相同的键和纯文本的数据,请尝试将纯文本数组分配给不同的变量阵列,并将数据倒置,以这种方式您将获得适当的结果。

谢谢mt_dialog.

3年前

Joacimwe. -5点

您应该在此处使用我的安全加密功能:

https://support.dialog-semicondiondiondum/feature-request-easy-encblock.

您应该与openssl一起获得相同的结果。