赞
踩
成功唤醒之后,才可以做很多事情,实现它的命令功能。
包含序列号和其他 ID信息以及访问数据存储器各槽权限信息的 88字节(704位)EEPROM区域。
配置区域锁定(LockConfig 设置为!=0x55)之前可进行修改。
该区域默认设置如下:
Config的配置都是按照word(字)地址进行的,每个word为4字节。
ATSHA204A中包含了各种固定信息,无论锁定位的状态如何,在任何情况下都不能写入,但始终可以读取。
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 计算中。
Microchip用来提供制造版本信息的 4字节信息。这些字节可以自由读取为 RevNum<0:3>,但始终不应被系统软件使用,因为它们可能会因芯片版本发生变化。
字节2为I2C_Enable:
Bit7-1
|
忽略,由 Microchip 设置。
|
本文为I2C接口操作。
(1)字节0为I2C_Address:
Bit7-1
Bit0 | I2C 器件地址
忽略。 |
能看到该器件默认I2C地址为C8。
(2) 字节1为CheckMacConfig
此字节仅适用于 CheckMac、Read 和 Write 命令:
(3) 字节2为OTP模式
0xAA(只读模式)=当 OTP 区域锁定时,禁止写操作,允许所有字的读操作。
0x55(消耗模式)=当 OTP 区域锁定时写入 OTP 区域会导致位仅从 1 转换为 0。允许读取所有字。
0x00(传统模式)=当 OTP 区域锁定时,禁止写操作,并会禁止字 0 和 1 的读操作以及 32 字节读操作。
所有其他模式均保留。
(4)字节3为选择器模式
如果为 0x00,将用 UpdateExtra 更新 Selector。
如果为其他值,将只允许 Selector 在值为零时更新。
每个slot配置占2个字节,也就是由16个位组成,它们控制特定槽或密钥的使用和访问。当数据区域锁定时,SlotConfig字段根据下表进行解析。当数据区域解锁时,这些限制不适用,所有槽均可自由写入,但不能读取。
配置每个槽的16位,具体作用如下:
Bit | ||
15-12 | WriteConfig | 请参见下面的详细功能定义。 |
11-8 | WriteKey | 要用于验证加密写操作的密钥的槽。跟bit0-3类似,只不过这里是写操作,使用write command命令。 |
7 | IsSecret | 0 = 槽并非机密信息槽,允许明文读取、明文写入,无 MAC 检查且无 Derivekey 命令 1 = 槽为机密信息槽。读操作和写操作(如果允许)必须进行加密。 |
6 | EncryptRead | 0 = 允许明文读取。 1 = 要求槽为机密信息槽,并以加密读取的方式进行访问。 |
5 | LimitedUse(1) | 0 = 密钥可使用的次数无限制。 1 = 根据槽的 UseFlag(或 LastKeyUse)对密钥的使用次数进行限制。 |
4 | CheckOnly | 0 = 此槽可用于所有加密命令。 1 = 此槽只能用于 CheckMac 以及后跟 CheckMac 的 GenDig 命令。 |
3-0 | ReadKey | 要用于加密读取的密钥的槽。如果你想把某个slot设置成可以加密读取,则在这里要指定加密读取的密钥存放的slot。 如果为 0x0,则此槽可用作 CheckMac/Copy 命令的源槽。 |
(1)WriteConfig写配置位—— Derivekey命令
Bit 15 | Bit 14 | Bit 13 | Bit 12 | 源秘钥 | |
0 | X | 1 | 0 | 目标 | DeriveKey 命令可在未授权 MAC 的情况下运行(滚动)。 |
1 | X | 1 | 0 | 目标 | DeriveKey 命令需要授权 MAC(滚动)。 |
0 | X | 1 | 1 | 父项 | DeriveKey 命令可在未授权 MAC 的情况下运行(创建)。 |
1 | X | 1 | 1 | 父项 | DeriveKey 命令需要授权 MAC(创建)。 |
X | X | 0 | X | — | 在 WriteConfig 字段中具有此值的槽不可用作 DeriveKey 命令的目标。 |
(2)WriteConfig写配置位—— Write命令
Bit 15 | Bit 14 | Bit 13 | ||
0 | 0 | 0 | 始终 | 始终允许对此槽进行明文写入。设置为“始终”的槽始终不应用来存储密钥。可以向此槽写入 4 个或 32 个字节。 |
X | 0 | 1 | 从不 | 始终不允许使用 Write 命令写入此槽。设置为“从不”的槽仍可用来存储密钥。 |
1 | 0 | X | 从不 | 始终不允许使用 Write 命令写入此槽。设置为“从不”的槽仍可用来存储密钥。 |
X | 1 | X | 加密 | 写入此槽的内容需要一个正确计算的 MAC,并且输入数据必须由系统通过 WriteKey 使用 Write 命令说明中记录的加密算法进行加密。禁止对此槽进行 4 字节写入。 |
(3)IsSecret和EncryptRead位的配置对slot读操作的影响
IsSecret | EncryptRead | |
0 | 0 | 始终允许从此槽进行明文读取。 设置为此状态的槽始终不应用来存储密钥。一次可以读取 4 个或 32 个字节。 |
0 | 1 | 禁止。使用此代码的槽不能保证安全性。 |
1 | 0 | 始终不允许从此槽进行读取。 设置为此状态的槽仍可用来存储密钥。 |
1 | 1 | 从此槽中读取的内容使用 Read命令描述中记录的加密算法进行加密。 加密密钥位于由 ReadKey 指定的槽中。禁止 4 字节读写操作。 |
UseFlag:
用于“限制使用的槽”。“1”位的数量表示在禁止前槽 0 至 7 可使用的次数。也就是指明了对应的slot区(只限slot0-7)中的key还能使用多少次,但前提是slot config.SingleUse = 1,UseFlag才会有用。
UpdateCount:
表示槽 0 至 7 已用 DeriveKey 更新的次数。
LastKeyUse:
用于控制槽 15 的限制使用次数。每个“1”位表示槽 15 的一次剩余使用次数。仅适用于 SlotConfig<5>LimitedUse 置 1 的情况。而计算剩余使用次数的方法是,所有LastKeyUse位1的个数加起来,那么总共就有16*8 = 128次了,用完后,slot15就彻底不能再使用,无法被DeriveKey更新。
UserExtra:
对于一般的系统使用,可通过 UpdateExtra 命令进行修改。
UpdateExtra命令格式:
【注】
选择器:
选择哪个器件将在执行 Pause 命令后保持工作模式。
LockValue:
控制数据和 OTP 区域是否解锁、可自由写入但不能读取。
0x55 = 数据和 OTP 区域已解锁,且具有写访问权限。
0x00 = 数据和 OTP 区域已锁定,并采用配置区域中定义的访问策略。数据区域中的槽只能根据相应WriteConfig 字段进行修改。OTP 区域只能根据 OTP 模式进行修改。
LockConfig:
配置区域访问。
0x55 = 配置区域具有写访问(已解锁)。
0x00 = 配置区域没有写访问(已锁定)。
LOCK命令格式:
每个slot占两个字节,每一位什么作用上面都写了,利用I2C写入就可以了,就实现了配置,可以直接按照地址写,地址直接用word就可以,4字节或者32字节。在读写操作的数据包中,该区zone的值为0x00,如果直接用0x00只能读写4bytes,如果zone = 0x00 | 0x80就可以读写32bytes。
确定各slot的使用权限,全部写入,成功后,确定正确,就可以clock了。按照clock的命令数据包的格式,写config区的最后一个字节LockConfig,写成0x00就锁上了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。