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验证命令,进行密钥的验证
各个区的配置条件:
- 芯片的config区和data区一旦锁定,没有办法解锁,锁的方法只能通过lock command来进行锁定。
- config区在没锁定的时候,可以使用write command来进行写操作,但注意,0x00-0x03地址(word地址,详情请参考手册)不能被写,0x15word地址不能使用write command来写。
- 在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 进行配置,(详细的说明参看配置说明,这里只对代码进行说明)
- 芯片唤醒后,打开宏定义 ATSHA204_Configration 进入配置函数ATSHA204_Config(),
- 打开宏定义 Configration_Zone 先对Configration Zone进行配置
通过对16个slotx_configration 区写入 0x80,0x80,
<配置数据说明详见 atsha204配置 和 配置说明两个文档>
将Data Zone配置成存储密钥,密 钥不可读写
- 写完成后,在读取一下 Configration Zone 的数据查看与配置的数据想通过后,
- 通过Lock_ConfigrationZone(); 函数将Configration Zone 锁住,
- 读取一下0x15地址的 lockconfig位 为0x00表示锁定完成
第二步, 往Data Zone 写入密钥
注意: 在Configration Zone 锁定后,才能对Data Zone进行读写操作
data区一旦锁定,没有办法解锁
- 通过Write Command 命令,写入预先准备好的密钥
- 写入完成后,读取查看 写入的数据是否正确
- 通过函数DataZone_Init()锁定Data Zone ;
- 最后读取一下0x15地址下的lockData位 为0x00 表示锁定完成
密钥验证流程:
注意: 芯片开始工作前要唤醒,并且延时至少2.5ms后, 芯片才能开始工作
- 对ATSHA204A芯片的配置完成后,将DataZone配置成 密钥区(SlotX) 并且锁定后对数据不可读写。
- 主控MCU与芯片相连,在启动时候,首先我们要获取芯片序列号,为后面计算MAC。
- 进入函数
主控MCU通过RNG寄存去 让MCU产生20字节的随机数,
- 发送一个nonce命令给ATSHA204A,利用上面产生的20字节的随机数,让ATSHA204A 内部的产生Tempkey的值,
- MCU发送MAC命令,ATSHA204A 就可以根据host_tempkey、序列号、以及秘钥计算,计算出一个摘要degest1,返回给MCU
- 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(使用前将#替换为@)