当前位置:   article > 正文

ATSHA204A(三)——config区配置_atsha204a lock config

atsha204a lock config

成功唤醒之后,才可以做很多事情,实现它的命令功能。

  • 芯片的config区和data区一旦锁定,没有办法解锁,锁的方法只能通过lock command来进行锁定。
  • config区在没锁定的时候,可以使用write command来进行写操作,但注意,0x00-0x03地址(word地址,详情请参考手册)不能被写,0x15word地址不能使用write command来写。
  • 在config锁定前,data区(包括slot区和OTP区)既不能写也不能读。而在config锁定后,data区锁定前,data区只能写不能读,在data区锁定后,可以根据config中的配置来进行读写。

 

1. config区的组成

包含序列号和其他 ID信息以及访问数据存储器各槽权限信息的 88字节(704位)EEPROM区域。

配置区域锁定(LockConfig 设置为!=0x55)之前可进行修改。

 该区域默认设置如下:

Config的配置都是按照word(字)地址进行的,每个word为4字节。 

1.1 0x00-0x03(始终可读)

ATSHA204A中包含了各种固定信息,无论锁定位的状态如何,在任何情况下都不能写入,但始终可以读取。

1.1.1 SerialNum

9 个字节(SN<0:8>),一起形成 CryptoAuthentication 系列中任何器件都不会重复的惟一值。序列号分为两组:
(1) SN<0:1> SN<8>

在 ATSHA204A 的大多数版本中,这些位的值是在制造时固定的。其默认值为(0x01 0x23 0xEE),这 24 位始终包含在 ATSHA204A 所执行的 SHA-256 计算中,也就是所有芯片都有这几个值都是有的。 

(2)SN<2:7>

这些位的值由 Microchip 在制造过程中编程,对于每个芯片均有所不同。这 6 个字节(48 位)可视情况包含在 ATSHA204A 所执行的一些 SHA-256 计算中。

1.1.2 RevNum

Microchip用来提供制造版本信息的 4字节信息。这些字节可以自由读取为 RevNum<0:3>,但始终不应被系统软件使用,因为它们可能会因芯片版本发生变化。

1.2 字0x03(始终可读)

字节2为I2C_Enable:

Bit7-1


Bit0

 

忽略,由 Microchip 设置。


0 = 单线接口模式。
1 = I2C 接口模式。

本文为I2C接口操作。

1.3 0x04(始终读,锁前可写)

(1)字节0为I2C_Address:

Bit7-1


Bit3

 

 

 

 

Bit0

I2C 器件地址


TTL 使能(双用途位)
I2C 地址的一部分,设置阈值。
0 = 输入电平使用固定参考。
1 = 输入电平使用 VCC 作为参考。

 

忽略。

能看到该器件默认I2C地址为C8

(2) 字节1为CheckMacConfig

此字节仅适用于 CheckMac、Read 和 Write 命令:

  •  Read Write: CheckMacConfig<0>控制slot 0和 1,CheckMacConfig<1>控制slot 2 和 3,依此类推,一个字节8位,控制16个slot。如果 TempKey.SourceFlag中的值与此字节中的相应位不匹配,则任何加密 Read 或 Write 命令都将失败。对于明文读取和写入,此字节被忽略。
  •  CheckMac: CheckMacConfig<0>控制slot 1,CheckMacConfig<1>控制slot 3,依此类推。只有在目标槽对应的 CheckMacSource值与 CheckMac 命令的 Modebit2的值匹配时才会使能复制功能。如果Modebit2与 TempKey.SourceFlag不匹配,则此命令将失败,因此这相当于要求此字节中的相应位与 TempKey.SourceFlag匹配。

 (3) 字节2为OTP模式

0xAA(只读模式)=当 OTP 区域锁定时,禁止写操作,允许所有字的读操作。
       0x55(消耗模式)=当 OTP 区域锁定时写入 OTP 区域会导致位仅从 1 转换为 0。允许读取所有字。
       0x00(传统模式)=当 OTP 区域锁定时,禁止写操作,并会禁止字 0 和 1 的读操作以及 32 字节读操作。
       所有其他模式均保留。
(4)字节3为选择器模式

如果为 0x00,将用 UpdateExtra 更新 Selector。
       如果为其他值,将只允许 Selector 在值为零时更新。

1.4 word address为0x05-0x0c的区域(始终读,锁前可写)

每个slot配置占2个字节,也就是由16个位组成,它们控制特定槽或密钥的使用和访问。当数据区域锁定时,SlotConfig字段根据下表进行解析。当数据区域解锁时,这些限制不适用,所有槽均可自由写入,但不能读取。

配置每个槽的16位,具体作用如下:

Bit
15-12WriteConfig请参见下面的详细功能定义。
11-8WriteKey要用于验证加密写操作的密钥的槽。跟bit0-3类似,只不过这里是写操作,使用write command命令。
7IsSecret0 =  槽并非机密信息槽,允许明文读取、明文写入,无 MAC 检查且无 Derivekey 命令
1 =  槽为机密信息槽。读操作和写操作(如果允许)必须进行加密。
6EncryptRead0 = 允许明文读取。
1 = 要求槽为机密信息槽,并以加密读取的方式进行访问。
5LimitedUse(1)0 = 密钥可使用的次数无限制。
1 = 根据槽的 UseFlag(或 LastKeyUse)对密钥的使用次数进行限制。
4CheckOnly0 = 此槽可用于所有加密命令。
1 = 此槽只能用于 CheckMac 以及后跟 CheckMac 的 GenDig 命令。
3-0ReadKey要用于加密读取的密钥的槽。如果你想把某个slot设置成可以加密读取,则在这里要指定加密读取的密钥存放的slot。
如果为 0x0,则此槽可用作 CheckMac/Copy 命令的源槽。

(1)WriteConfig写配置位—— Derivekey命令

Bit 15Bit 14Bit 13Bit 12源秘钥
0X10目标DeriveKey 命令可在未授权 MAC 的情况下运行(滚动)。
1X10目标DeriveKey 命令需要授权 MAC(滚动)。
0X11父项DeriveKey 命令可在未授权 MAC 的情况下运行(创建)。
1X11父项DeriveKey 命令需要授权 MAC(创建)。
XX0X在 WriteConfig 字段中具有此值的槽不可用作 DeriveKey 命令的目标。

(2)WriteConfig写配置位—— Write命令

Bit 15Bit 14Bit 13
000始终始终允许对此槽进行明文写入。设置为“始终”的槽始终不应用来存储密钥。可以向此槽写入 4 个或 32 个字节。
X01从不始终不允许使用 Write 命令写入此槽。设置为“从不”的槽仍可用来存储密钥。
10X从不始终不允许使用 Write 命令写入此槽。设置为“从不”的槽仍可用来存储密钥。
X1X加密写入此槽的内容需要一个正确计算的 MAC,并且输入数据必须由系统通过 WriteKey 使用 Write 命令说明中记录的加密算法进行加密。禁止对此槽进行 4 字节写入。

(3)IsSecret和EncryptRead位的配置对slot读操作的影响

IsSecretEncryptRead
00始终允许从此槽进行明文读取。
设置为此状态的槽始终不应用来存储密钥。一次可以读取 4 个或 32 个字节。
01禁止。使用此代码的槽不能保证安全性。
10始终不允许从此槽进行读取。
设置为此状态的槽仍可用来存储密钥。
11

从此槽中读取的内容使用 Read命令描述中记录的加密算法进行加密。

加密密钥位于由 ReadKey  指定的槽中。禁止 4 字节读写操作。

1.5 0x0d-0x10

UseFlag:

用于“限制使用的槽”。“1”位的数量表示在禁止前槽 0 至 7 可使用的次数。也就是指明了对应的slot区(只限slot0-7)中的key还能使用多少次,但前提是slot config.SingleUse = 1,UseFlag才会有用。

UpdateCount:

表示槽 0 至 7 已用 DeriveKey 更新的次数。

1.6 0x11-0x14

LastKeyUse:

用于控制槽 15 的限制使用次数。每个“1”位表示槽 15 的一次剩余使用次数。仅适用于 SlotConfig<5>LimitedUse 置 1 的情况。而计算剩余使用次数的方法是,所有LastKeyUse位1的个数加起来,那么总共就有16*8 = 128次了,用完后,slot15就彻底不能再使用,无法被DeriveKey更新。

1.7 0x15

UserExtra:

对于一般的系统使用,可通过 UpdateExtra 命令进行修改。

UpdateExtra命令格式:

【注】

  • Mode.bit1 = 1时,这条命令做的操作是,减少NewValue中指定的SlotID的使用次数。
  • UserExtra中的值不为0,那么此条命令如果更新UserExtra的话将会返回失败。
  • 如果SelectorMode不为0,而且Selector不为0,那么那么此条命令如果更新Selector的话将会返回失败。
     

选择器:

选择哪个器件将在执行 Pause 命令后保持工作模式。

LockValue:

控制数据和 OTP 区域是否解锁、可自由写入但不能读取。

0x55 = 数据和 OTP 区域已解锁,且具有写访问权限。

0x00 = 数据和 OTP 区域已锁定,并采用配置区域中定义的访问策略。数据区域中的槽只能根据相应WriteConfig 字段进行修改。OTP 区域只能根据 OTP 模式进行修改。

LockConfig:
配置区域访问。

0x55 = 配置区域具有写访问(已解锁)。

0x00 = 配置区域没有写访问(已锁定)。

LOCK命令格式:

 


2 Config 区的配置决定DATA区的操作权限

每个slot占两个字节,每一位什么作用上面都写了,利用I2C写入就可以了,就实现了配置,可以直接按照地址写,地址直接用word就可以,4字节或者32字节。在读写操作的数据包中,该区zone的值为0x00,如果直接用0x00只能读写4bytes,如果zone = 0x00 | 0x80就可以读写32bytes。

确定各slot的使用权限,全部写入,成功后,确定正确,就可以clock了。按照clock的命令数据包的格式,写config区的最后一个字节LockConfig,写成0x00就锁上了。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/81620
推荐阅读
相关标签
  

闽ICP备14008679号