目录
ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储
- 508A内部存储区介绍
- Data Zone
- Config Zone
- 508A Config Zone配置(自定义)
ATECC508A芯片在使用之前,需要自定义配置ConfigZone与DataZone,并同Lock命令将两个区域锁住,否则无法正常使用功能。而一旦锁上就是永久性的,配置区不能够进行解锁操作,这也是为了考虑到安全因素。
一、508A内部存储区介绍
–由官方Datasheet可知,508A内部具有整片安全EERPOM和SRAM buffer。
–其中EEPROM总大小为11200 bits,并且分成三个区:Data、Configuration、OTP。(如下图,图片看不清可右键新窗口打开,不知道Markdown为啥会缩放图片)
如上图可知,Data Zone主要存放数据,而config Zone是决定芯片配置,并且决定Data zone存放什么数据的关键配置区。
Data Zone
–Data Zone共有1208 byte存储空间,以slot作为一个存储单元,每个508A内部共有16个slot。如下图:
–Slot 0-7每个空间大小为36 Byte,推荐用来存储私钥或secret;slot 8空间比较大(416byte),所以官方推荐用来存储整个证书等数据;9-15(72 Bytes)推荐存储一些公钥或者签名、证书subject。
如下图为Slot 0 的空间示意图:
Config Zone
–>Configuration zone共有128 byte的空间大小,里面包含了工厂生产数据、设备信息(如串号和I2C地址),以及我们需要配置的Data Zone Slot的读写权限配置等等。
–>Config Zone空间示意图如下:其中有淡红背景色的是不能更改的出厂数据
–》图中在I2C_Address之后就是我们可以自定义的空间了,比较重要的就是SlotConfigxx区域,每一个区域的配置都会影响到相应Slotxx的读写权限、命令执行以及功能的实现。
–》这也是为什么我们需要进行Provisional的原因,必须提前规划好,公私钥以及secret、证书信息存储在哪里。否则一旦配置后Lock,就不能更改了。
Slot/KeyConfig 详细配置(精确到每一个Bit)可参见:https://blog.csdn.net/HowieXue/article/details/92433541
上图是config区剩下的空间分布,其中keyConfigxx就是对应了SlotConfigxx,Slot被配置成存储密钥后,还要进行Keyconfig来配置,该Slot能存储什么密钥,并且能执行什么命令、以及操作。是不是略复杂,嗯 大坑还在后面。
OTP Zone
OTP(One Time Programmable) Zone大小为64 Byte,是一个只读存储区,在ConfigZone里面配置使用该Zone,并且在ConfigZone Lock之前,OTP Zone是不能进行读写操作。
我实际使用中并没有用到过OTP Zone,所以不再展开介绍了
二、508A Config Zone配置(自定义)
这里主要讲重要的SlotConfig,其官方解释为:Two bytes of access and usage permissions and controls for each slot of the Data zone,如下图:
Slot/KeyConfig 详细配置(精确到每一个Bit)可参见:https://blog.csdn.net/HowieXue/article/details/92433541
–>SlotConfig bits如下图(部分),根据官方Datasheet来看,SlotConfig每一个bit的配置都是与508应用功能息息相关,如想让508A 通过加密I2C通信方式去读取其中某一个Slot数据,则该Bit 6 必须设置为 1,否则EncryptRead命令执行会失败。
–>再比如,如果想利用该Slot完成ecdh操作,则Bit 2 必须为1等等。因此一开始的配置过程是非常耗时的,要非常仔细阅读Datasheet,才能根据功能一个一个去查询比对。希望Atmel今后能推出个自动化工具,能直接算出来。
–>KeyConfig Bits如下图,与slot config相对应,个人理解,Slotconfig就是规定了Slot能存什么,外界能够对该slot数据进行怎么样的读写,以及能执行什么命令。而KeyConfig就是规定了存的东西到底是什么,这个slot里面存储的什么密钥,该密钥能做什么等等。
–例如,Keyconfig第一个bit就表明了,该slot存储的key是否是ECC私钥,如果置位,则该slot就默认存储的是ECC 私钥,并且能够执行Sign、Genkey以及PrivWrite命令,否则就不能执行这些命令。实际应用中这些Bit之间 有很多都是相互牵制的。
这里不再一一 说明每个bit的功能,只是介绍需要这个流程去配置,才能正常使用508。我们实际中应用也没有相对复杂,而且由于我们的 security policy,不具体细说配置结果,正常使用就看datasheet自己配置就好。
具体每个bit的功能,可参见ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig/KeyConfig详细解释 & 配置工具Tools
下一节会介绍配置Provision的代码,只需一步实现508Provision,将公私钥、Secret、以及证书数据一次性写入508中,并在今后设备认证和数据通信中进行verify和加解密。
博主热门文章推荐:
一篇读懂系列:
LoRa Mesh系列:
网络安全系列:
- ATECC508A芯片开发笔记(一):初识加密芯片
- SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
- 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
- AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例
嵌入式开发系列:
- 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
- IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
- Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
- Android底层调用C代码(JNI实现)
- 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
- Android/Linux设备有线&无线 双网共存(同时上内、外网)
AI / 机器学习系列:
- AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
- AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
- AI: 什么是机器学习的数据清洗(Data Cleaning)
- AI: 机器学习的模型是如何训练的?(在试错中学习)
- 数据可视化:TensorboardX安装及使用(安装测试+实例演示)