硬汉嵌入式论坛

 找回密码
 立即注册
查看: 887|回复: 2
收起左侧

[应用设计] 关于使用ATECC608A加密芯片如何进行AES对称加密的使用的问题

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2023-6-5 15:17:37 | 显示全部楼层 |阅读模式
本人最近在使用ATECC608A与STM32F4做耗材加密验证的东西,我打算使用AES对称加密解密来进行耗材使用数据的读写,数据存储在ATECC608A内部的EEPROM中,我将ATECC608A的库移植好后将配置区域配置并锁存后,可以正常使用库函数读设备ID、配置寄存器的数据、生成随机数等操作,但是在使用AES相关函数做AES加解密时却总是报错f4,所以想请教下有没有用过ATECC608的大佬指点一下;

ATECC608A的配置如下:

const uint8_t ecc608_configdata[ATCA_ECC_CONFIG_SIZE] = {
    0x01,            0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
    ECC608A_ADDRESS, 0x00, 0x00, 0x01, 0x85, 0x00, 0x82, 0x00, 0x85, 0x20, 0x85, 0x20, 0x85, 0x20, 0x8F, 0x46,
    0x8F,            0x0F, 0x9F, 0x8F, 0x0F, 0x0F, 0x8F, 0x0F, 0x0F, 0x8F, 0x0F, 0x8F, 0x0F, 0x8F, 0x0F, 0x0F,
    0x0D,            0x1F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
    0x00,            0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF7, 0x00, 0x69, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00,            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0E, 0x60, 0x00, 0x00, 0x00, 0x00,
    0x53,            0x00, 0x53, 0x00, 0x73, 0x00, 0x73, 0x00, 0x73, 0x00, 0x38, 0x00, 0x7C, 0x00, 0x1C, 0x00,
    0x3C,            0x00, 0x1A, 0x00, 0x1C, 0x00, 0x10, 0x00, 0x1C, 0x00, 0x30, 0x00, 0x12, 0x00, 0x30, 0x00
};



AES加密读写测试函数:


void AES_encrypt_test(void){
       
        ATCA_STATUS status;
        uint8_t slot = 9;
        uint8_t plaintext[16] = "Hello ATECC608A";
        uint8_t ciphertext[16] = {0};
    uint8_t aes_key[32] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
       
    status = atcab_write_bytes_zone(ATCA_ZONE_DATA,slot,0x00,aes_key,32);
    if (status != ATCA_SUCCESS) {
        printf("Error: writing AES key to data zone:%x.\n",status);
    }
        status = atcab_aes_encrypt(slot, 0, plaintext, ciphertext);
       
    /* 使用ATECC608A进行AES加密 */
    status = atcab_aes_encrypt(slot, 0, plaintext, ciphertext);
    if (status != ATCA_SUCCESS) {
        /* 加密失败,这里需要处理错误 */
                printf("加密失败,错误码:%x\r\n",status);
    }

    /* 打印加密前和加密后的文本 */
    printf("Plaintext:  %s\r\nCiphertext: ", (char*)plaintext);
    for (int i = 0; i < sizeof(plaintext); i++) {
        printf("%02x ", ciphertext);
    }
}
串口打印的东西:

我使用AES相关函数报错F4,写入槽的东西也不能正常读出,读的时候也是报错F4;
请教下各位大佬,指导一下,万分感谢


main.c

8.16 KB, 下载次数: 0

回复

使用道具 举报

0

主题

215

回帖

215

积分

高级会员

积分
215
发表于 2023-6-5 23:35:17 | 显示全部楼层
做参考:用过ATSHA204,需要把配置写如后,再执行对应的锁定操作,然后芯片加密读写才正常。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2023-6-6 16:44:31 | 显示全部楼层
找到原因了,之前因为看数据手册说slot上锁后就不能更改了,所以一直没有给数据区上锁怕把器件搞废了,只给配置区上了锁,所以在对数据区进行read和一些加密操作的时候都弄不了,只能写;在官网的论坛里看到了一位外国友人出现了和我一样的问题,操作数据区时报错f4,他找到了答案:因为数据区没有上锁,链接:https://forum.microchip.com/s/topic/a5C3l000000UjUdEAK/t187986;我将数据区上锁后设备就能正常使用了,能够正常使用AES加密;我之前以为加密后就不能对slot进行读写和修改操作了,后面发现上锁了还可以(不能说还可以应该是才可以),这器件就是要在配置号配置区和数据区上锁才能正常开始使用的;如果没上锁那数据区的数据可以随便修改,这个时候如果器件能正常使用似乎也是不符合设定的;

https://forum.microchip.com/s/topic/a5C3l000000UjUdEAK/t187986


下载 (2).png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 22:25 , Processed in 0.162208 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表