Atsha204a使用心得

       最近公司要用到Atsha204a做软件和硬件的绑定加密,于是就调了它的驱动,将使用过程中遇到的坑整理下,也好让各位同仁少加点班;废话少说,直接入正题。

0.加密原理:

主控端和Atsha204a端有相同的16 组密码,用一串明文(一般生成一组32byte随机数),主控端用约定的一组密码使用sha256()加密算法将明文生成Hash值(32 byte),同时主控将明文传递给Atsha204a端,用与主控约定好的一组(SlotNum)密码内部生成sha256  Hash值。然后主控读取Atsha204a生成的hash,与自身生成的hash进行对比,若相同则成功。

注意:通讯线路中(iic)不传递密码,Atsha204a端密码区先烧录好16组密码(根据配置,密码可以设置不可读,就算出来的,也是0xff),只传递加密前的明文和约定密码的组号即可。

1.往Atsha204a里写密钥:

1.1 配置 config zone:

主要是16组密码的属性(如是否明文显示,是否可读,是否可写),如下的几个配置:

int8_t data1[4]={0x80,0x80,0x80,0x80}; //data锁定后不可读,也不可写
uint8_t data2[4]={0x80,0x00,0x80,0x00}; //
uint8_t data3[4]={0x00,0x00,0x00,0x00};//data锁定可明文读,也可写
uint8_t data4[4]={0xC0,0x80,0xC0,0x80};//
uint8_t data5[4]={0xC0,0x00,0xC0,0x00};//

设备16组密码的属性:

    Set_Zone_4byte(0,20,data1);
    Set_Zone_4byte(0,24,data2);
    Set_Zone_4byte(0,28,data3);
    Set_Zone_4byte(0,32,data4);
    Set_Zone_4byte(0,36,data5);

    Set_Zone_4byte(0,40,data3);
    Set_Zone_4byte(0,44,data3);
    Set_Zone_4byte(0,48,data3);

1.2:lock config zone;一旦lock无法无法解锁;

Lock(0x80);
1.3:  write opt zone(我的没有使用);


1.4:  确保2后可以进行 slot zone 密码区进行读写;

在zone 3写入16组密码(每组32byte)
1.5: lock slot zone;一旦lock无法无法解锁;

Lock(0x81);

6.操作完成,可以进入2的加密和验证操作。

2.加密和验证:

char ch;
    static   int  slotNum = 0;
    unsigned char recBuf[35]={0};           //接收ATSHA204计算结果
    unsigned char randomNum[35]={0};        //随机数BUF
    CATsha204();                     //定义一个类    
    ch = GenerateRandomNum(randomNum);  //产生随机数
    if(ch != 0){
        printk("==atsha204 iic com failed,exit==\n");
        return -1;
    }
    printk("slotNum =%d\n",slotNum);
    if(check_lock() != 1){
        printk("\n this is a new atsha204,will fac_lock_atsha204\n");
        //fac_lock_atsha204();
    }
    ch=Mac(slotNum,randomNum+1,recBuf);   //进行密码验证
    if(ch)
    {
        printk("-------------mac ok---------------\n");
    }
    else
    {
        printk("-------------mac fail---------------\n");
    }
    slotNum++;
    if(slotNum >=16)
        slotNum = 0;
    return 0;

### ATSHA204A与FPGA的实现方案 #### 1. 硬件接口设计 ATSHA204A通过I²C或单线协议(SWP)与其他设备通信。对于FPGA的应用场景,通常采用SWP接口来简化连接复杂度并减少引脚占用。在FPGA内部逻辑中需构建相应的状态机用于控制命令发送接收流程,并处理来自ATSHA204A的数据流[^1]。 #### 2. 密钥存储与访问机制 利用FPGA丰富的内部资源可以创建安全区域专门用来保存敏感信息如密钥等。当需要读取这些数据时,则触发特定事件使能通往外部的安全通道去请求目标芯片中的对应内容。此过程应遵循严格的权限校验原则以保障整个系统的安全性[^3]。 #### 3. 认证算法移植 由于ATSHA204A内置了高效的SHA-256哈希引擎,在实际部署过程中可以直接调用其提供的API函数完成必要的运算工作而无需额外编写复杂的数学模型代码。不过针对某些特殊需求可能仍有必要将部分核心计算单元迁移到可编程门阵列上来提高性能表现或是满足定制化要求。 ```verilog // Verilog伪码示例:初始化ATSHA204A并通过SWP发起一次简单的挑战响应认证 module atsha204a_fpga ( input wire clk, output reg swp_io, // SWP双向IO口 ... ); always @(posedge clk) begin if (reset_n == 0) begin state <= IDLE; end else case(state) INIT: begin // 初始化序列... send_command(0x01); // 发送复位命令给ATSHA204A state <= WAIT_RESP; end CHALLENGE: begin generate_random_challenge(); send_command_with_data(challenge); state <= VERIFY; end // 更多的状态转换... endcase end endmodule ``` #### 4. 安全性考量 考虑到潜在攻击面的存在,建议采取多种防护措施相结合的方式加强整体防御能力。比如实施物理层面上的篡改检测电路设计;软件层面则可通过引入时间戳、计数器等手段防止重放攻击的发生。同时也要注意保护好私有密钥在整个生命周期内的保密性和完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值