关于ATSHA204a的使用流程

2023-05-16

ATSHA204含有一个EEPROM  和 一个 SRAM

EEPROM :包含

1个 Data Zone(512Bytes)  :一般用来存储密钥的

1个 configration Zone(88Bytes)  :

用来设置Data区中的数据使用的方法:

1)作为密钥使用 还是简单的数据,作为密钥是否可读可写     是明文读写 还是 加密读写   使用的次数

2)存储有9位的芯片唯一序列号

3)对OTP区的使用模式

3)configration Zone   和 Data Zone 锁住的控的控制位

1个OTP Zone

ATSHA204在使用:

首先,要对配置区进行配置目的:规定好密钥的使用方式和存储地点,和最后验证的MAC的方式

然后,然后将密钥写入Data区中指定的位置

最后,通过官方提供的库里面的MAC验证命令,进行密钥的验证

各个区的配置条件:

  1. 芯片的config区和data区一旦锁定,没有办法解锁,锁的方法只能通过lock command来进行锁定。
  2. config区在没锁定的时候,可以使用write command来进行写操作,但注意,0x00-0x03地址(word地址,详情请参考手册)不能被写,0x15word地址不能使用write command来写。
  3. 在config锁定前,data区(包括slot区和OTP区)既不能写也不能读。而在config锁定后,data区锁定前,data区只能写不能读,在data区锁定后,可以根据config中的配置来进行读写。

官方提供的库里面有一个执行各种命令的函数:

uint8_t sha204m_execute(uint8_t op_code,  uint8_t param1,     uint16_t param2,
                                         uint8_t datalen1 , uint8_t *data1,     uint8_t datalen2, uint8_t *data2, uint8_t datalen3, uint8_t *data3,  
                                         uint8_t tx_size,  uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer)

以下参数的具体值  需要参看数据手册没有 明确的介绍

uint8_t op_code:命令码                   uint8_t param1  :命令对应的第一个参数         uint16_t param2:命令对应的第二个参数

   uint8_t datalen1 , uint8_t *data1 :完成命令需要发送的数据 长度   和指向数据的指针    没有 可以 填写 0x00 , 0x00

  uint8_t datalen2 , uint8_t *data2 :完成命令需要发送的数据 长度   和指向数据的指针    没有 可以 填写 0x00 , 0x00

  uint8_t datalen3 , uint8_t *data3:完成命令需要发送的数据 长度   和指向数据的指针    没有 可以 填写 0x00 , 0x00

uint8_t tx_size,  uint8_t *tx_buffer :需要发送数据的长度  和指向数据的指针  以上参数的集合

uint8_t rx_size, uint8_t *rx_buffer:命令执行完,返回的数据

配置流程:

注意: 芯片开始工作前要唤醒,并且延时至少2.5ms, 芯片才能开始工作

      芯片的config区和data区一旦锁定,没有办法解锁

第一步

Configration Zone 进行配置,(详细的说明参看配置说明,这里只对代码进行说明)

  1. 芯片唤醒后,打开宏定义 ATSHA204_Configration 进入配置函数ATSHA204_Config(),
  2. 打开宏定义 Configration_Zone 先对Configration Zone进行配置

通过对16slotx_configration 区写入 0x80,0x80,

<配置数据说明详见 atsha204配置 配置说明两个文档>

Data Zone配置成存储密钥,          钥不可读写

  1. 写完成后,在读取一下 Configration Zone 的数据查看与配置的数据想通过后,
  2. 通过Lock_ConfigrationZone(); 函数将Configration Zone 锁住,
  3. 读取一下0x15地址的 lockconfig 0x00表示锁定完成

第二步,   Data Zone 写入密钥

注意: Configration Zone 锁定后,才能对Data Zone进行读写操作

data区一旦锁定,没有办法解锁

  1. 通过Write Command 命令,写入预先准备好的密钥
  2. 写入完成后,读取查看 写入的数据是否正确
  3. 通过函数DataZone_Init()锁定Data Zone ;
  4. 最后读取一下0x15地址下的lockData 0x00 表示锁定完成

密钥验证流程:

注意: 芯片开始工作前要唤醒,并且延时至少2.5ms, 芯片才能开始工作

  1. 对ATSHA204A芯片的配置完成后,将DataZone配置成 密钥区(SlotX) 并且锁定后对数据不可读写。
  2. 主控MCU与芯片相连,在启动时候,首先我们要获取芯片序列号,为后面计算MAC。
  3. 进入函数

主控MCU通过RNG寄存去 让MCU产生20字节的随机数,

  1. 发送一个nonce命令给ATSHA204A,利用上面产生的20字节的随机数,让ATSHA204A           内部的产生Tempkey的值,
  2.  MCU发送MAC命令,ATSHA204A 就可以根据host_tempkey、序列号、以及秘钥计算,计算出一个摘要degest1,返回给MCU
  3. MCU内部通过官方库计算出来一个摘要 degest2

MCU判断digest1和digest2是否匹配,不匹配将程序挂起即可

 

关于配置可以参考博客:https://blog.csdn.net/a5882230/article/details/52214845

关于使用可以参考博客:https://blog.csdn.net/u013216061/article/details/79159682

关于MAC校验可以参考博客:https://www.cnblogs.com/hjw91blog/articles/7918802.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于ATSHA204a的使用流程 的相关文章

  • Java 线程 基础知识总结

    线程基础 很不严谨的说 xff0c 线程是什么 xff1f 线程就是为了让很多个东西并发执行 xff0c 大大的提高程序执行的效率啊 三个非常重要的概念 xff1a 程序 xff1a 一组写好了的静态代码块 xff08 就我们写的那些代码玩
  • 模拟银行系统 Java 四份代码(三种交互方式,两种数据存储方式)

    环境 编程语言 xff1a Java 14 0 1IDE xff1a intelliJ IDEA 2020 1 2有 Java demo 涉及到使用 idea 编辑器创建文件 读取文件 xff1b 有关编码问题 xff0c 请参考下图 id
  • Java 模拟数据库连接池 + 模拟ORM框架

    环境 编程语言 xff1a Java 14 0 1数据库 xff1a MySQL 8 0 xff08 用户名与密码都是root xff0c ip及端口是localhost 3306 xff09 JDBC xff1a mysql connec
  • Java 模拟考试系统(Swing + IO)

    编程语言 xff1a Java 14 0 1IDE xff1a intelliJ IDEA 2020 1 2 使用了MVC分层架构思想 xff0c 并且仅涉及JavaSE内容 功能 xff1a 登录 43 考试UI xff1a Swing数
  • Java IO 基础知识总结

    观前提示 xff1a 本文涉及的代码演示部分 xff0c 为了文章的观赏性 xff0c 许多代码演示中有意忽略了导包 异常处理 所谓 IO xff0c I xff08 input xff09 O xff08 output xff09 xff
  • Java 模拟浏览器与服务器之间请求与响应的过程

    环境与MVC分层架构思想 编程语言 xff1a Java 14 0 1IDE xff1a intelliJ IDEA 2020 1 2 V View视图层String html jspC Controller控制层Servlet 控制的是相
  • helm部署相关服务过程中问题记录

    在学习helm部署相关服务过程中出现一些相关问题 xff0c 自己记录并供大家一起学习 xff01 xff01 xff01 问题1 部署helm 获取软件包失败 在通过wget https storage googleapis com ku
  • J2EE JSP 基础知识总结

    Tomcat 9Java Server Page xff08 Java 服务页 xff09 一 xff1a JSP 初识 使用 JSP 文件 JSP 是 HTML 文件与 Java 文件的混合文件 xff0c HTML 文件可以直接通过浏览
  • Java 模拟购物系统(Servlet + JSP + EL + JSTL)

    目的是将后端逻辑 流程 业务写清楚 xff0c 所以前端代码很简陋 xff08 丑 xff09 功能一 xff1a 登录 功能二 xff1a 注册 功能三 xff1a 欢迎界面 功能四 xff1a 商品分类界面 功能五 xff1a 购物界面
  • J2EE EL + JSTL 基础知识总结

    Tomcat 9EL Expression Language xff0c 表达式语言JSTL JSP Standard Tag Library xff0c JSP 标准标签库 JSP 代码并不好写 xff0c 因为包含前端代码与 Java
  • J2EE 文件上传下载

    Tomcat 9 文件上传 文件上传本质上是 I O 读写 客户端 xff08 浏览器 xff09 发送文件使用 HTTP 协议 xff0c 将文件的内容写出去 xff1a 客户端本地输入流 gt 内容 gt 网络输出流服务器 xff08
  • J2EE Filter 基础知识总结

    Tomcat 9 Filter xff08 过滤器 xff09 Tomcat 提供的一个组件 xff0c 类似 Servlet 机制与使用方式是一个特殊的 Servlet过滤什么 什么时候使用 一 xff1a Filter 的基本使用 自己
  • J2EE Listener 浅谈

    Tomcat 9 xff0c 四个组件 Servlet JSP Filter Listener 中 xff0c Listener 是最早加载的 Listener 监听器是 Tomcat 提供的一个组件 xff0c 监听域对象包括 reque
  • Java XML 文件的 DTD 解析规则,DOM 方式解析 XML

    HTML xff0c Hyper Text Markup Language xff0c 超级文本标记 标签 语言 出现目的是服务器给浏览器发送响应信息 xff0c 浏览器按照规则解析语言并进行展示 XML xff0c eXtensible
  • J2EE Cookie 基础知识总结

    Tomcat 9 在讲述 Cookie 之前 xff0c 有必要谈谈 Session session 对象是服务器管理的 xff08 session对象存储在服务器端 xff09 session 对象是无状态的 xff08 每一个sessi
  • Java ThreadLocal 管理机制

    ThreadLocal 类在线程中的作用相当于 Session xff0c 其常用方法有三个 xff1a set get remove ThreadLocal 源码 set span class token keyword public s
  • J2EE WEB注解 使用语法

    Tomcat 9 WEB 容器给我们提供了很多组件 xff0c 比如 xff1a Servlet JSP Filter Listener JSP 使用特殊 xff0c WEB 容器内部的 web xml 配置文件替我们已做好配置并找到解析引
  • openssh 登录报错所走过的坑~~~Password authentication failed

    报错 提示Password authentication failed 一般是关闭防火墙 systemctl stop firewalld amp amp systemctl disable firewalld 修改 etc ssh ssh
  • 快速开发一个 ChatGPT 应用的保姆级教程

    本文转自 GitHub xff0c 原文 xff1a https github com easychen openai gpt dev notes for cn developer xff0c 版权归原作者所有 欢迎投稿 xff0c 投稿请

随机推荐