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

谢谢

阅读全文
0 0
原创粉丝点击