ATECC508A芯片开发笔记(十):ConfigZone中 SlotConfig/KeyConfig详细解释 & 配置工具Tools



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


前言

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

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

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

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

自动计算Slot/Key Config:
在这里插入图片描述

Tools 中的SlotConfig Generator(所有数据均为写博客用的测试Demo)
在这里插入图片描述
KeyConfig Generator
在这里插入图片描述
并且每一个bit代表的意义也在excel有说明,查看非常方便
在这里插入图片描述

Tools全览
在这里插入图片描述
Tools获取
需要的话还是留言邮箱吧,虽然里面删减后只剩测试数据,但还是涉及Secret,不敢Publish(Secrurity政策猛于虎 哎)


一、SlotConfig

在这里插入图片描述
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)

在这里插入图片描述
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:
在这里插入图片描述

在这里插入图片描述

2.NoMac

在这里插入图片描述

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

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

3.LimitedUse

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

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

在这里插入图片描述针对slot15 该bit有特殊应用:
在这里插入图片描述在这里插入图片描述

4.EncryptRead

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

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

5.IsSecret

在这里插入图片描述Bit7:该slot存储的数据是否是Confidential Secret(隐私数据)
如果slot存储的是key就设为1吧,如果设为0,则GenKey、Sign命令都不能在该Slot执行了。

可以说IsSecret与EncryptedRead共同决定了某一Slot具备的读权限,之间关系如下:
在这里插入图片描述

6.WriteKey

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

7.WriteConfig

在这里插入图片描述

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

在这里插入图片描述
Bit12-Bit15全部设为0,对应的就是Always模式,可以支持明文写入,Datasheet上也建议,如果存储Key的话,不要设置为该模式。

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

该参数其他对应的Config Table如下:
针对DeriveKey :
在这里插入图片描述
针对PrivWrite:
在这里插入图片描述

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



二、KeyConfig

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

1.Private

在这里插入图片描述
Bit0:Slot是否存储ECC PriKey,

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

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

2.PubInfo

在这里插入图片描述

Bit1:

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

3.KeyType

在这里插入图片描述
Bit2-4:ECC私钥类型,
508A目前只支持P256 NIST 类型的ECC PriKey…

如下图,ECC key则KeyType设置为 1 0 0 (既4),不是ECC Key则设为 1 1 1 (既7)
在这里插入图片描述

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

在这里插入图片描述
Bit14-15:PubKey是否遵循X509格式
如果不为0,则代表存储的PubKey是遵循X509格式,那么用该PubKey去验证证书的签名,需要明确证书长度、PubKey位置等。

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

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

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


三、实际应用设置案例

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

SlotConfig数据:

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

KeyConfig数据:

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

在这里插入图片描述


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

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

谢谢

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HowieXue

求打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值