你好对话和开发人员,
我想使用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 i在阵列中使用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 -解密。
也就是说,你有任何问题使用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_28 ...描述得很好。
您使用AES的方式/目的是什么?你使用它发送数据通过空气加密或加密/解密存储在闪存/eeprom?
感谢您分享您的体验。
我使用的开放源代码与最小的修改borth加密和解密,这工作非常好。我也尝试了GAPM_USE_ENC_BLOCK_CMD,它也工作得很好。
我遵循了UM-B-15,附录h,这是与AES相关的文档。使用aes_operation函数,我无法获得正确的加密输出,也不能用于解密。我将尝试定义USE_AES_DECRYPT。如果你有的话,请多发给我一些申请材料。
AES EBC是我用的。加密数据用于空中和内存。
感谢您分享您的体验。
我使用的开放源代码与最小的修改borth加密和解密,这工作非常好。我也尝试了GAPM_USE_ENC_BLOCK_CMD,它也工作得很好。
我遵循了UM-B-15,附录h,这是与AES相关的文档。使用aes_operation函数,我无法获得正确的加密输出,也不能用于解密。我将尝试定义USE_AES_DECRYPT。如果你有的话,请多发给我一些申请材料。
AES EBC是我用的。加密数据用于空中和内存。
这些api是用非标准和不一致的方式制作的。Key/明文/enctext有时反转,有时不反转。
这是加密一个16字节的块时应该使用的方式:
键aes_operation_enc:不反转
key gapm_use_enc_block:反转
输入明文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:反转
嗨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;
if(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)
if(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
您应该在此处使用我的安全加密功能:
https://support.dialog-semiconductor.com/feature-request-easy-encblock
您应该与openssl一起获得相同的结果。