ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 &Tools 使用


  • 前言
  • 一、SlotConfig
  • 二、KeyConfig
  • 三、实际应用设置案例

前言

  • 《https://blog.csdn.net/HowieXue/article/details/75212476 》中提到,ATECC508A使用前需要根据需求配置好各Slot/KeyConfig数据,并且要在Provision代码里的ConfigData数组中,替换相应的Slot/KeyConfig数据,才能正常使用。

因为每一个Bit都有其特殊含义,理解起来非常困难,有一个Bit配置不对,都有可能导致508A不work,而且此时芯片Lock住也不能改了(囧),所以单开篇博客详细解析一下下~~

Ps.: 其实两年前就想着重写这一块,但苦于公司Security的保密Policy没有发布,但现在我重新删减整理了下(本文都是测试用数据哦),针对典型应用作为案例,希望让大家更好理解508A的配置使用。

开过过程中, 因为16个Slot/KeyConfig每一个Bit去配置,再去计算相应的数据太麻烦,所以我做了一个小Excel Tools,里面集合了整个508A的数据区解释/配置…
在配置数据时,只需判断某Bit是否使能,在Tools中通过SlotConfig/KeyConfig Generator置位该Bit,就自动算出代码中所用的Config数据,嗯,用过的都说好~。

自动计算Slot/Key Config:
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第1张图片

Tools 中的SlotConfig Generator(所有数据均为写博客用的测试Demo)
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第2张图片
KeyConfig Generator
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第3张图片

Tools全览
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第4张图片
Tools获取
需要的话还是留言邮箱吧,虽然里面删减后只剩测试数据,但还是涉及Secret,不敢Publish(Secrurity政策猛于虎 哎)


一、SlotConfig

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第5张图片
SlotConfig配置DataZone中每一个Slot所存储的数据、以及相应的权限,里面详细的设定了每一个Slot需要存储哪一种Secret、是否支持加密读写、数据是否具有可读可写权限等。

根据Datasheet,每个Slot都有16Bit的功能选项去选择,最后生成的ConfigData在Provisioning中写入508A,然后在程序里将ConfigZone Lock完成配置。(SlotConfig数据是在ConfigZone的第20-51Byte)
SlotConfig中某些功能之间还会相互影响,以下针对每一个Bit详细讲解:

注意只有DataZone Lock后这些配置才会生效。、


1.ReadKey(Bit 0:3)

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第6张图片
ReadKey(0-3Bit),是配置该Slot存储数据的可读权限,实际就是配置的508A Read命令在该Slot的执行权限,0-3BIt全配置为0,则读该Slot没有任何限制

如果该Slot配置为存储私钥PriKey,则默认永远不可读,这种case下配置ReadKey各Bit的含义如下:

  • Bit0:是否使能外部数字签名,(该PriKey是否可执行外部Sign,设为1开启,0关闭)
  • Bit1:使内部数字签名,一般是在CheckMac/Genkey命令中使用
  • Bit2:使能ECDH操作(如果该Slot存储PriKey需要ECDH,此项必选,ECDH配置可参见https://blog.csdn.net/HowieXue/article/details/78649559 )
  • Bit3:ECDH操作结果是否明文输出,1则ECDH产生的Secret会输出为明文,0则Secret会写另入一个指定的Slot。(Bit2为0则该项忽略)

该Slot存储的数据实际是否可读与IsSecret和EncryptedRead的设置都非常相关。。。并且如果设置Slot存储的是ECC 私钥Private keys,则该Slot是永远不能被读取的。

每个Bit相应的功能在Tools中也已经加了Comments:
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第7张图片

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第8张图片

2.NoMac

在这里插入图片描述

Bit4:使能禁用Mac命令,1则针对508A的MAC/HMAC命令都不能执行了,0则所有命令都能执行

这个Bit一般默认为0就行了,安全级别要求跟高也可以设为1将MAC指令禁用。

3.LimitedUse

在这里插入图片描述
Bit5:使能限制Key使用次数。

有些Key存储后,可以限制其使用次数,超出次数该Slot就会disable掉,一般也设置为0就行了。
我们该功能没有使用过,具体可以看下面Datasheet说明:

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第9张图片针对slot15 该bit有特殊应用:
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第10张图片ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第11张图片

4.EncryptRead

在这里插入图片描述Bit6:使能加密读,设为0可以明文读。设为1为加密读,如果设为1,则该Slot的IsSecret Bit7也要设为1

必须使能EncryptedRead才能使用加密读,否则与508芯片通信都是明文传输

5.IsSecret

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第12张图片Bit7:该slot存储的数据是否是Confidential Secret(隐私数据)
如果slot存储的是key就设为1吧,如果设为0,则GenKey、Sign命令都不能在该Slot执行了。

可以说IsSecret与EncryptedRead共同决定了某一Slot具备的读权限,之间关系如下:
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第13张图片

6.WriteKey

在这里插入图片描述
WriteKey根据WriteConfig配置该Slot支持怎样的Write,默认我都设置的0,Write命令配置包括Configuration/OTA/Data Zone的写操作,具体的有兴趣的看下Datasheet吧

7.WriteConfig

在这里插入图片描述

配置了该Slot的Write Permissions,既Write命令可执行的权限:
有5种权限如下:

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第14张图片
Bit12-Bit15全部设为0,对应的就是Always模式,可以支持明文写入,Datasheet上也建议,如果存储Key的话,不要设置为该模式。

如果存储的是私钥等Secret,建议WriteConfig设置为Never,既该Slot永远不能被Write

该参数其他对应的Config Table如下:
针对DeriveKey :
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第15张图片
针对PrivWrite:
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第16张图片

针对GenKey:
在这里插入图片描述



二、KeyConfig

在这里插入图片描述
KeyConfig配置了每个slot存储的Key的功能权限,是在ConfigZone的第96 - 127 Byte,也是只有DataZone Lock后这些配置才会生效。

1.Private

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第17张图片
Bit0:Slot是否存储ECC PriKey,

  • 设为1则该Slot存储ECC私钥,相应就可以执行一些ECC私钥相关功能,如Sign、GenKey等。。

  • 设置0则相反,如果存储公钥、HMAC/SHA的key或者对称加密的Key,就设置为0

2.PubInfo

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第18张图片

Bit1:

  • 如果Bit0设置为1(既存ECC私钥),则该Bit作用为是否公开该Key的一些公开的版本信息(Public version)
  • 如果Bit0设为0,则Bit1决定了该Publickey是否可以执行Verify功能,Verify功能/命令就是用一个存储的PubKey去校验签名信息,然后返回执行结果)(Valid/Invalid)

3.KeyType

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第19张图片
Bit2-4:ECC私钥类型,
508A目前只支持P256 NIST 类型的ECC PriKey…

如下图,ECC key则KeyType设置为 1 0 0 (既4),不是ECC Key则设为 1 1 1 (既7)
ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第20张图片

5. Lockable

在这里插入图片描述
Bit5:使能Slot Lock,
该Bit就是设置Slot是否支持单独锁定功能,1则使能该功能,Lock后也是不能数据被改动

6. ReqRandom

在这里插入图片描述
Bit6:使能Nonce是否需要随机数
针对一些命令,Nonce可以是固定的,也可以是随机数,这一项就是这个功能。开启后安全性更高一些,但是个人感觉没太大必要

7. ReqAuth

在这里插入图片描述

Bit7:使能Key操作之前的认证功能

508A有这个功能,是说在对slot存储的Key执行操作时,可以先对这个Key进行认证。怎么认证呢?是根据Bit8-11中指向的认证密钥来做。

该功能我们没有用过,因为Prikey一般在存储时已经进行了安全管控,在使用上一般不做这类Check,如果另有安全要求可以使能,但要相应配置下面的AuthKey参数:。

8.AuthKey

在这里插入图片描述
Bit8-11:如果使能Bit7,则AuthKey表明了相应认证用的Key在哪个Slot
AuthKey指向的认证密钥是用来Verify该Key的合法性,一般指向另一个Slot存储的Key。

9.IntrusionDisable

在这里插入图片描述
Bit12:使能禁用该Slot所有命令(除了GenKey命令)
设为1的话,相当于该Slot除了GenKey命令,其他命令接受了都不会执行了,这个功能我个人理解和Lock还不一样,相当于更改了执行权限。
一般用的很少

10.X509id

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第21张图片
Bit14-15:PubKey是否遵循X509格式
如果不为0,则代表存储的PubKey是遵循X509格式,那么用该PubKey去验证证书的签名,需要明确证书长度、PubKey位置等。

如果为0,则代表PubKey可以验证任一格式的签名,或者该Slot不存储PubKey

这个我们也没怎么用过,不多介绍了

KeyConfig介绍完毕。。。写博客比写代码都累。。


三、实际应用设置案例

总结下实际应用案例数据,仅供参考

SlotConfig数据:

SlotConfig Data Usage
0x8780 存储ECC PriKey
0x8720 存储ECC PriKey 并需要该Key执行ECDH、GenKey
0xC780 存储ECC PriKey 使用IIC加密读
0x0F00 存储PubKey、Signature等普通Secret数据(非私钥)

KeyConfig数据:

KeyConfig Data Usage
0x3300 存储ECC PriKey
0x3C00 存储PubKey、Signature等普通Secret数据(非私钥)

ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig及KeyConfig详细配置 & Tools 使用_第22张图片


欢迎转载,Howie原创作品,本文地址

http://blog.csdn.net/HowieXue/article/details/92433541

谢谢

你可能感兴趣的:(嵌入式开发,网络安全-ATECC508A)