ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储
来源:互联网 发布:java 接口 抽象类 编辑:程序博客网 时间:2024/05/29 04:29
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,就不能更改了。
上图是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,如下图:
–>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自己配置就好。
下一节会介绍配置Provision的代码,只需一步实现508Provision,将公私钥、Secret、以及证书数据一次性写入508中,并在今后设备认证和数据通信中进行verify和加解密。
:
欢迎转载,Howie原创作品,本文地址:
http://blog.csdn.net/howiexue/article/details/75212476
谢谢
- ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储
- ATECC508A芯片开发笔记(一):初识加密芯片
- ATECC508A芯片开发笔记(八):ECDH算法配置方法、执行过程及实现原理
- ATECC508A芯片开发笔记(七):实现对数据数字签名(Sign)并验证(Verify)证书签名
- ATECC508A芯片开发笔记(三):获取508A串号、随机数源码及I2C抓包分析
- ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植
- ATECC508A芯片开发笔记(五):Provision执行过程及代码分析
- ATECC508A芯片开发笔记(六):产生CSR以及申请证书(X.509)流程及其内容分析
- ATECC508A加密芯片
- android开发(四):数据存储
- 数据存储(四)
- Android基础笔记(四)-数据存储和界面展现
- 学习(数据存储) 个人笔记四
- 安卓高德地图开发(四)——自定义线路规划(根据地点的经纬度规划线路)
- 安卓高德地图开发(四)——自定义线路规划(根据地点的经纬度规划线路)
- Kinect开发笔记之(四)Kinect开发环境配置
- 单片机以太网控制芯片W7100A数据手册(四)
- stm32芯片smartcard功能开发(接触式IC卡)
- ajax框架,juery的实现xml,中文乱码与跨域访问
- so 动态加载---解决sdk过大问题
- 链表--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 《Angular之引用标签报错》
- springboot缓存 之 从Cache中取出所有条目
- ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储
- Android学习资源大整合
- 实训--day07就业指导
- Android 相关环境变量配置(包括JDK、SDK)
- 及杳
- 《上帝与新物理学》
- 剑指offer刷题---面试题11
- Fresco 框架的基本使用
- 为什么构造函数不能为虚函数