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进行配置

通过对16个slotx_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

关于ATSHA204a的使用流程相关推荐

  1. atsha204a加密ic01

    ATSHA204A加密芯片是ATMEL公司研发的一款高安全性的,功能丰富的加密IC,使用SHA-256算法进行加密操作,内置16*32字节的slot(EEPROM)可以存储用户数据和秘钥,唯一的9字节 ...

  2. ATSHA204A加密芯片攻略——使用篇

    ATSHA204A加密芯片是ATMEL公司研发的一款高安全性的,功能丰富的加密IC,使用SHA-256算法进行加密操作,内置16*32字节的slot(EEPROM)可以存储用户数据和秘钥,唯一的9字节 ...

  3. 淘宝获取单笔订单信息服务端调用API及流程

    淘宝获取单笔交易接口(文档地址):https://open.taobao.com/api.htm?docId=54&docType=2 调用接口所需依赖(文档地址):https://devel ...

  4. 用伪代码模拟洗衣机的运转流程

    今天的软导课又学到了不少"骚操作",其中就包括Pseudocode和Top-down design. 不如现在就借着介绍洗衣机的运转流程向大家介绍一下这两个简单的东西. 题目如下 ...

  5. vue-devTools插件安装流程

    vue-devTools插件安装流程 本文主要介绍 vue的调试工具 vue-devtools 的安装和使用 工欲善其事, 必先利其器, 快快一起来用vue-devtools来调试开发你的vue项目吧 ...

  6. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  7. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  8. 浅显易懂 Makefile 入门 (01)— 什么是Makefile、为什么要用Makefile、Makefile规则、Makefile流程如何实现增量编译

    1. 什么是 Makefile Makefile 文件描述了 Linux 系统下 C/C++ 工程的编译规则,它用来自动化编译 C/C++ 项目.一旦写编写好 Makefile 文件,只需要一个 ma ...

  9. Go 学习笔记(57)— Go 第三方库之 amqp (RabbitMQ 生产者、消费者整个流程)

    1. 安装 rabbitmq 的 golang 包 golang 可使用库 github.com/streadway/amqp 操作 rabbitmq .使用下面命令安装 RabbitMQ . go ...

最新文章

  1. 指定eclipse启动使用的jdk,路径有空格的情况
  2. 网站编程手册 服务器端,Peergine-P2P服务器端开发手册-v1.3.doc
  3. [其实有加强版的]校门外的树
  4. oracle 10g 关库,Oracle Db10g 启动和关闭数据库
  5. kuayu react_React+Spring实现跨域问题的完美解决方法
  6. 手机能打开的表白代码_手机拍照还能加文字?打开这个自带按钮,一键就能添加方便...
  7. Redis原理及拓展
  8. TensorFlow运作方式入门
  9. debug方式看Activity启动流程小记
  10. 《构建之法》阅读笔记二
  11. Metadata Lock原理4
  12. 如何查看CSND私密文章
  13. cmd中文乱码解决方案
  14. Excel潜能系列——Excel游戏 2048
  15. 虚拟服务器会计科目,云服务器入什么会计科目
  16. vue 自定义事件 解绑
  17. 机器学习基础(五)最大似然估计
  18. RoboMaster视觉教程(4)装甲板识别算法
  19. hashmap的无序和有序
  20. Web容器(三):Servlet规范和Servlet容器

热门文章

  1. 大数据图书分享-Python数据可视化实战课程
  2. 权威数据来了,中国到底有多少个程序员?
  3. 我协会负责人调研东风汽车·····
  4. 斗破苍穹java游戏美杜莎在哪_《斗破苍穹》四大魔兽体质排名,美杜莎的九彩吞天蟒仅排第二...
  5. 展锐服务器芯片,芯片“代号”背后的故事,你了解多少?
  6. 谨以此文纪念我的2020——不负热爱,砥砺前行
  7. 编译c或c++代码出现error “***” was not declared in this scope 的解决方法
  8. 类的继承层次结构的宽度和深度
  9. win10 计算机管理器没有ime,win10系统右下角显示IMe被禁用的解决方法
  10. Android 联想K5 Play 8.0 Notification突破拦截(vdex反编译 )