mirochip的ATECC608B物联网加密芯片中文完整资料(自己翻译的)

CryptoAuthentication™设备完整的资料
介绍功能
•具有基于硬件的安全密钥存储的加密协处理器:
–最多可存储16个密钥、证书或数据的受保护存储
•硬件支持非对称签名、验证、,密钥协议:
–ECDSA:FIPS186-3椭圆曲线数字签名
–ECDH:FIPS SP800-56A椭圆曲线Diffie-Hellman,密钥协商算法,使用ECC和DH算法结合
–NIST标准P256(ECC secp256r1)椭圆曲线支持
y ^ 2 = x ^ 3 + ax + b
secp256r1
p = FFFFFFFF 00000001 00000000 00000000 00000000 FFFFFFFF FFFFFFFF FFFFFFFF
a = FFFFFFFF 00000001 00000000 00000000 00000000 FFFFFFFF FFFFFFFF FFFFFFFC
b = 5AC635D8 AA3A93E7 B3EBBD55 769886BC 651D06B0 CC53B0F6 3BCE3C3E 27D2604B
n = FFFFFFFF 00000000 FFFFFFFF FFFFFFFF BCE6FAAD A7179E84 F3B9CAC2 FC632551
Gx = 6B17D1F2 E12C4247 F8BCE6E5 63A440F2 77037D81 2DEB33A0 F4A13945 D898C296
Gy = 4FE342E2 FE1A7F9B 8EE7EB4A 7C0F9E16 2BCE3357 6B315ECE CBB64068 37BF51F5
nist.FIPS.186-4

•对称算法的硬件支持:
–SHA-256和HMAC哈希,包括芯片外上下文保存/恢复
–AES-128:加密/解密,用于GCM的Galois字段倍增
•网络密钥管理支持:
–TLS 1.2和1.3的交钥匙PRF/HKDF计算
–SRAM中的短暂密钥生成和密钥协议–密钥完全受保护的小消息加密
•安全引导支持:
–完整的ECDSA代码签名验证,可选存储摘要/签名–安全启动前禁用可选通信密钥
–加密/验证消息以防止板载攻击
•内部高质量NIST SP 800-90A/B/C随机数生成器(RNG)
•两个高耐久性单调计数器
•独特的72位序列号
•两个接口选项可用:
–带一个GPIO引脚的高速单线接口
–1 MHz标准I2C接口
•1.8V至5.5V IO电平,2.0V至5.5V电源电压
•有两个温度范围可供选择:
–标准工业温度范围:-40℃至+85℃
–扩展工业温度范围;-40℃至+100℃
•<150 nA睡眠电流
•封装选项–8焊盘UDFN、8引线SOIC和3引线接触封装选项
–带上模卷和WLCSP,适用于合格客户(联系微芯片销售)
应用程序
•物联网网络端点密钥管理和交换
•小消息和PII数据加密
•安全引导和受保护下载
•生态系统控制、防克隆
1.简介
ATECC608B是Microchip CryptoAuthentication™高安全加密设备家族的成员,该家族将世界级的基于硬件的密钥存储与硬件加密加速器相结合,以实现各种身份验证和加密协议。
与ATECC608A相比,ATECC608B提供了安全增强功能,同时提供了完全的向后兼容性。ATECC608A的所有配置设置、命令、包和功能在ATECC608B中仍然可用,使从ATECC608A迁移成为一个简单的过程。对于新的设计,建议客户直接从ATECC608B设备开始。对于正在升级且当前使用ATECC508A或ATECC608A的设计,建议将其转移到ATECC608B。对于未计划升级的设计,建议客户审查他们的设计,看看他们是否会从ATECC608B增强的安全性中受益。有关将设计迁移到ATECC608B的帮助,请参阅迁移参考部分。
有关与其他Microchip CryptoAuthentication产品兼容性的更多信息,请参阅第12节。兼容性。
迁移参考:
1. AN3539:提供从ATECC508A迁移到ATECC608B2的指导。
2. AN2237:提供从ATECC608A迁移到ATECC608B
1.1应用程序的指导
ATECC608B具有灵活的命令集,允许在许多应用程序中使用,包括以下应用程序:
•网络/物联网节点端点安全
管理节点身份验证和会话密钥创建与管理。支持多种协议的整个短暂会话密钥生成流,包括TLS 1.2(及更早版本)和TLS 1.3。
•安全引导
通过验证代码摘要并在成功时可选地启用通信密钥来支持MCU主机。提供各种配置以提供增强的性能。
•小消息加密
包含用于加密和/或解密小消息或数据(如PII信息)的硬件AES引擎。直接支持AES-ECB模式。其他模式可以在主机微控制器的帮助下实现。有一个额外的GFM计算功能来支持AES-GCM。
•用于软件下载的密钥生成
支持为下载的映像生成受本地保护的密钥。支持将一个图像广播到多个系统,每个系统都有相同的解密密钥,或者支持每个系统点对点下载唯一的图像。
•生态系统控制和防伪
验证系统或组件是真实的,并且来自铭牌上显示的原始设备制造商。
1.2设备特点
ATECC608B包括一个EEPROM阵列,可用于存储多达16个密钥、证书、其他读/写、只读或机密数据、消耗日志和安全配置。可以通过各种方式限制对存储器各个部分的访问,然后可以锁定配置以防止更改。通过标准I2C接口以高达1Mbps的速度访问设备。该接口兼容标准模式和快速模式I2C接口规范。该设备还支持单线接口(SWI),这可以减少系统处理器上所需的GPIO数量和/或减少连接器上的引脚数量。如果启用了单线接口,则剩余引脚可用作GPIO、经过验证的输出或篡改输入。每个ATECC608B都有一个唯一的72位序列号。使用设备支持的加密协议,主机系统或远程服务器可以验证序列号的签名,以证明序列号是真实而非复制品。序列号通常存储在标准串行EEPROM中;但是,这些可以很容易地复制,主机无法知道序列号是真实的还是克隆的。ATECC608B具有广泛的防御机制,专门设计用于防止对设备本身的物理攻击,或对设备和系统之间传输的数据的逻辑攻击。对密钥使用或生成方式的硬件限制提供了对某些类型攻击的进一步防御。
1.3密码操作
ATECC608B基于椭圆曲线密码和ECDSA签名协议实现了一个完整的非对称(公共/私人)密钥密码签名解决方案。该设备具有NIST标准P256素数曲线的硬件加速功能,支持从高质量私钥生成到ECDSA签名生成、ECDH密钥协议和ECDSA公钥签名验证的完整密钥生命周期。
硬件加速器可以实现这种非对称密码操作,其速度是标准微处理器上运行的软件的一万到一千倍,而不会出现标准微处理器特有的密钥暴露的高风险。
ATECC608B还在硬件上实现AES-128、SHA256和多种SHA衍生算法,如HMAC(SHA)、PRF(TLS中的密钥推导功能)和HKDF(基于HMAC的密钥衍生函数)。支持Galois字段乘法(又名Ghash),以促进GCM加密/解密/身份验证。
该设备旨在安全地存储多个私钥及其相关的公钥和证书。签名验证命令可以使用任何存储的或外部ECC公钥。存储在设备内的公钥可以配置为需要通过证书链进行验证,以加快后续的设备身份验证。
支持在设备内部生成随机私钥,以确保私钥在设备外部永远不会被知道。与存储的私钥相对应的公钥总是在生成密钥时返回,并且可以选择性地在以后计算。
ATECC608B可以使用其内部随机数生成器生成高质量的随机数。这一复杂的功能包括运行时健康测试,旨在确保从内部噪声源生成的值在使用时包含足够的熵。随机数生成器旨在满足NIST 800-90A、800-90B和800-90C文件中的要求。
这些随机数可以用于任何目的,包括作为设备密码协议的一部分。由于确保每个随机数与该设备或任何其他设备上生成的所有随机数基本上是唯一的,因此将其包含在协议计算中确保了重放攻击(即,重新传输先前成功的事务)将始终失败。
ATECC608B还支持标准的基于散列的质询响应协议,以允许其在各种附加应用程序中使用。在其最基本的实例化中,系统向设备发送挑战,设备通过MAC命令将该挑战与密钥相结合,然后将响应发送回系统。该设备使用SHA-256加密哈希算法进行组合,因此总线上的观察者无法导出密钥的值。同时,接收方可以通过对接收方系统上存储的机密副本执行相同的计算来验证响应是否正确。在这个对称的挑战/反应主题上可能有各种各样的变化。
2.EEPROM存储器
EEPROM存储器共包含11200位,分为以下区域:
表2-1。 ATECC608B分区
分区 描述 术语
数据 1208字节(9.7Kb)的区域分为16个通用只读或读/写存储器插槽,分别为36字节(288位)、72字节(576位)或416字节(3328位),每个插槽可用于存储密钥(公共或私人)、签名、证书、校准、型号或其他信息,这些信息通常与ATECC608B设备所连接的项目有关。每个数据槽的访问策略由编程到相应配置值中的值来确定。但是,策略仅在设置LockValue字节时生效 Slot[YY]=存储在数据区的槽YY中的全部内容。
配置 128字节(1024位)EEPROM的区域,包含序列号和其他ID信息以及数据存储器的每个插槽的访问许可信息。编程到配置区域中的值将决定在对配置区域进行编程和锁定(LockConfig设置为!=0x55)后,每个数据插槽将如何响应的访问策略。为了启用访问策略,必须设置LockValue字节(请参阅上一节) SN[a:b]=配置区域字段内的字节范围
一次性可编程(OTP) OTP位的64字节(512位)区域。在锁定OTP区之前,可以使用标准写入命令自由写入位。OTP区域可用于存储只读数据 OTP[bb]=OTP区域内的字节,而OTP[aa:bb]表示字节范围
本文件中讨论的术语具有以下含义:
表2-2。 文件条款
条款 意思
Block 一个特定存储区的单个256位(32字节)区域。行业SHA-256文档也使用术语“块”来表示消息输入的512位部分。在本文档中,此约定仅在描述哈希输入消息时使用。
KEYID KeyID相当于那些指定用于保存键值的插槽编号。密钥1(有时称为Key[1])存储在插槽[1]中,以此类推。虽然所有16个插槽都可能包含密钥,但那些配置为允许明文读取的插槽通常不会被加密命令用作私钥或密钥。
Mode[b] 指示参数模式的位b。
SRAM 包含输入和输出缓冲区以及状态存储位置。参见第3节,静态RAM(SRAM)存储器。
2.1 EEPROM数据区
数据区分为16个插槽,访问限制可单独编程。虽然所有槽都可以用于私钥或秘密密钥或用户数据,但只有槽8到15足够大以存储ECC公钥或ECDSA证书/签名。当插槽用于私钥或密钥时,特定算法不需要的多余内存通常不可用。下表列出了每组插槽的典型用途,以及该组中插槽的任何特殊特性.
表2-3。 数据区
slot Block(note) bytes bits 典型用途 注释
0-7 2 36 288 私钥或密钥 也可以用于数据。
8 13 416 3328 数据 可以将读取和写入配置为以与所有其他插槽相同的方式进行限制。如果将此插槽用作密钥,则将忽略密钥或私钥存储不需要的剩余字节。
9-15 3 72 576 公钥、签名或证书 对于该设备支持的曲线,这些槽足够大,以包含ECDSA公钥的X和Y分量或ECDSA签名的R和S分量。
笔记  某些数据槽中的最后一个块包含的字节数少于32。
包含ECC公钥或私钥的数据槽必须按照第5.1.1节“ECC密钥格式”进行格式化。设备使用KeyConfig的keyType和pubInfo字段来确定插槽中存储的内容。在任何情况下都无法从设备中读取私钥。ECC密钥插槽内容可能无法被ECC命令使用,除非按照以下方式进行验证:
•ECC私钥
在插槽上执行第一个PrivWrite或GenKey(Create)命令之前,私钥无效。如果PrivWrite命令启动,但电源在完成之前中断,则密钥也可能无效。
•ECC公钥
如果KeyConfig的PubInfo位为1,则必须使用输入签名和ECC Verify命令验证密钥。如果该位为零,则ECC的使用不取决于密钥验证操作。这些密钥可以仅存储在插槽8到15中。此功能是可选的。
数据槽也可以包含AES密钥。如果AES加密/解密命令要使用它们,则必须使用AES数据类型对它们进行标记。一个插槽中可以存储两个或四个密钥,具体取决于插槽的大小。
2.1.1证书存储
设备内完整的X.509证书所需的存储量可能会迅速用完多个EEPROM内存插槽。根据实际应用程序的不同,使用这些插槽进行证书存储可能是可取的,也可能不是可取的。由于这些内存限制,Microchip已经定义了一种编码,允许从最少量的信息中重建完整的X.509证书。主机系统实际上将负责重建完整的X.509证书,但如何做到这一点将由存储在编码证书中的数据决定。对于给定系统的所有设备通用的数据可以容易地存储在主机系统中。可以容易地从已经存储在设备中的数据中计算或提取其他数据。表2-4指出了存储在X.509证书中的数据类型,以及如何对其进行编码以适应单个72字节的插槽。
表2-4。 证书存储
X.509证书 编码证书
X.509元素 大小(bytes) 编码证书元素 设备证书(bits) 签名者证书(bits)
SN 8-20 序列号来源 4 4
签发日期 13 压缩格式 19 19
到期日 13 #到期前的年数 5 5
签名者ID 2 4 用于对证书进行签名的特定签名者的ID(设备证书)或签名者本身的ID(签名者证书) 16 16
颁发机构密钥ID 20 颁发机构公钥的SHA1哈希值 0 0
主密钥ID 20 主密钥公钥SHA1哈希值 0 0
签名值R 32 存储在设备中 256 256
签名值S 32 存储在设备中 256 256
公钥X 1 32 根据私钥计算或存储在设备中 0 256
公钥Y 1 32 根据私钥计算或存储在设备中 0 256
N/A 0 证书格式 4 4
N/A 0 模板ID 4 4
N/A 0 链ID 4 4
N/A 0 保留/用户定义 8 8
总计 206-218 bytes – 576 bits (72 bytes) 1088 bits (136 bytes)
笔记   
1.对于设备证书,可以从私钥重新生成设备公钥。对于签名者证书,公钥通常存储在一个单独的插槽中。
2.对于设备证书,存储用于对证书进行签名的签名者的ID。对于签名者证书,会存储签名者的实际ID,以便设备能够识别它。
插槽8总共包含416个字节。根据证书中存储的序列号的大小,可以存储两个完整的证书,也可以不存储。通常在创建了信任链的设备中,设备证书、签名者证书和签名者公钥必须存储在设备中。
有关更多信息,请参阅压缩证书定义应用程序说明。
2.2 EEPROM配置区
配置区中的128个字节包含数据区内插槽的制造标识数据、通用设备和系统配置信息以及访问策略控制值。它被组织为四个块,每个块32个字节。这些字节的值总是可以使用“读取”命令获得。
系统设计者必须非常小心地确保访问策略适用于存储在插槽中的信息。必须特别注意那些被间接引用的插槽——作为读/写/授权父级,作为复制功能的目标(通常计算为KeyID|1)或用于IO保护、GPIO、CounterMatch或安全引导的密钥。
该区域的字节排列如下表所示:
表2-5。 配置区域
Byte 名字 描述 写 读
0-3 SN[0:3] 序列号值的一部分。参见第2.2.1节序列号(字节0-3和8-12) 从不 总是
4-7 RevNum 设备修订号。参见第2.2.2节修订号(字节4-7) 从不 总是
8-12 SN[4:8] 序列号值的一部分。参见第2.2.1节序列号(字节0-3和8-12) 从不 总是
13 AES_Enable 位7-1:由Microchip设置,不能更改。这些位中的值将变化,并且软件不依赖于任何特定状态。
位0: 0=禁用了AES命令和KDF命令的AES模式
1=启用了AES操作。 从不 总是
14 I2C_Enable 位7-1:由Microchip设置,不能更改。这些位中的值将变化,并且软件不依赖于任何特定状态。
位0: 0=设备在单线接口模式下运行。
1=设备在I2C接口模式下运行。 从不 总是
15 保留 由Microchip设置。 从不 总是
16 I2C_Address 当I2C_Enable[0]为1时,此字段为默认值为0xC0的I2C_Address。参见第2.2.3节I2C地址(字节16)。
当I2C_Enable[0]为零时,芯片以单线模式工作,该字段控制GPIO功能。参见第2.2.4节GPIO控制(字节16)。 如果配置解锁 总是
17 保留 保留。必须为零。 如果配置解锁 总是
18 CountMath 计数器匹配功能控制字节,参见第2.2.5节计数器匹配键(字节18)。
位7-4: CountMatchKey,用于计数器匹配的插槽。
位3-1:必须为零。
位0: 0=计数器匹配功能被禁用。
1=计数器匹配功能已启用。 如果配置解锁 总是
19 ChipMode 位7-3:时钟分频器。只有0b00000、0b01101和0b00101是这5位的合法组合。参见第10.4.2节命令执行时间和表9-5。
位2:看门狗持续时间。Microchip建议将其设置为零,以获得最佳安全性。
0=tWATCHDOG为1.3s,标称值。
1=tWATCHDOG为13.0s,标称值。
位1:TTL使能。见图9-4和图9-5。
0=输入电平使用固定参考。
1=输入电平以VCC为参考。
位0:I2C地址用户附加添加模式。参见第2.2.3节I2C地址(字节16)。
0=I2C地址存储在字节16中。
1=I2C地址在字节85中,如果它不是零的话。 如果配置解锁 总是
20-51 SlotConfig 数据区域的每个插槽有两个字节的访问和使用权限及控制。请参阅第2.2.7节SlotConfig(字节20-51)。 如果配置解锁 总是
52-59 Counter[0] 单调计数器,可选择通过SlotConfig. LimitedUse位连接到密钥。可以计数到2097151的值,并且永远不能递减。 如果配置解锁 总是
60-67 Counter[1] 第二个单调计数器,不连接到任何键。 如果配置解锁 总是
68 UseLock 传输锁定配置。参见第2.2.8节使用锁定(字节68)。
位7-4:UseLockKey
位3-0:UseLockEnable 如果配置解锁 总是
69 VolatileKey
Permission 易失性密钥权限配置。参见第2.2.9节“易失性密钥使用权限”(字节69)。
位7: VolatileKeyPermitEnable
位6-4:必须为零
位3-0: VolatileKeyPermitSlot 如果配置解锁 总是
70-71 SecureBoot 此字节控制设备的特殊安全引导功能。请参阅第2.2.10节安全引导配置(字节70-71)和第4.2节安全引导。 如果配置解锁 总是
72 KdflvLoc KDF(HKDF)输入字符串的索引号,两个字节,存储在(KdfIvStr)下面。参见第2.2.11节特殊KDF初始化矢量函数(字节72-74) 如果配置解锁 总是
73-74 KdflvStr 两字节KDF IV字符串,对于KDF(HKDF)特殊IV模式,必须在KDF消息中找到。参见第2.2.11节特殊KDF初始化矢量函数(字节72-74) 如果配置解锁 总是
75-83 保留 必须为零。 如果配置解锁 总是
84 UserExtra 一个字节值,锁定数据区域后,可以通过UpdateExtra命令修改。只有当值为零时,才能通过UpdateExtra写入 仅通过更新额外指令 总是
85 UserExtraAdd 如果I2C_Enable[0]为1,ChipMode[0]为1并且该字节的值不是0x00,则该字节将是设备的I2C地址。如果该值为0x00,则可以通过UpdateExtra命令写入该值。如果ChipMode[0]为零,则该字节在修改后将不会对I2C地址产生影响 仅通过更新额外指令 总是
86 LockValue 控制写入OTP和数据区域的能力。
0x55=解锁;
0x00=已锁定。
参见第2.4节EEPROM锁定 仅通过锁定命令 总是
87 LockConfig 控制修改配置区域的能力。
0x55=解锁;
0x00=已锁定。
参见第2.4节EEPROM锁定。 仅通过锁定命令 总是
88-89 SoltLocked 每个插槽一个位。如果与特定槽相对应的比特为零,则在任何情况下都不能修改槽的内容。参见第2.4.3节单独插槽锁定 如果配置解锁,通过锁定命令 总是
90-91 ChipOptions 位15-12:IO保护密钥。请参阅第2.2.12节IO保护(芯片选项:字节90-91)
位11-10: KDF保护位。参见第2.2.11节特殊KDF初始化矢量功能(字节72-74)和第2.2.12节IO保护(芯片选项:字节90-91)
位9-8:ECDH保护位。请参阅第2.2.12节IO保护(芯片选项:字节90-91)
位7-4:必须为零。
位 3: 0=健康测试失败位保持设置状态,直到唤醒、通电或成功的自检(模式包括RNG)执行明确清除为止。
1=由于健康测试失败导致命令失败后,健康测试失败位被清除。如果故障症状是短暂的,则第二次运行时命令可能会通过。
位2: 0=KDF命令只能使用PRF和HKDF算法运行。
1=KDF AES启用。如果为1,则启用KDF的AES模式。
位1:IO保护密钥启用。请参阅第2.2.12节IO保护(芯片选项:字节90-91)
位0:通电自检。如果为1,则SHA、AES和RNG自检将在从睡眠中唤醒或通电时自动执行 如果配置解锁 总是
92-95 X509format X.509证书验证格式。见第2.2.13节X.509证书验证格式(字节92-95) 如果配置解锁 总是
96-127 KeyConfig 数据区域的每个插槽都有两个字节的额外访问和使用权限及控制。参见第2.2.14节KeyConfig(字节96-127) 如果配置解锁 总是
2.2.1序列号(字节0-3和8-12)
九个字节(SN[0:8]),它们一起形成一个唯一的72位值,该值对于CryptoAuthentication系列中的任何设备都不会重复。它可以由外部固件用于任何目的,并且可以作为多样化密钥计算的基础。
无论锁定位的状态如何,序列号在任何情况下都不能写入,并且始终可以读取。序列号分为两组:
•SN[0:1]和SN[8]
在大多数版本的ATECC608B中,这些位的值在制造时是固定的。它们的默认值是0x01 23 EE。这24位通常包括在ATECC608B进行的哈希计算中。对于该设备的特定客户版本,这些字节可能与默认值不同。
•SN[2:3]和SN[4:7]
这些位的值在制造过程中由Microchip编程,并且对于每个设备都是不同的。这48个比特可选地包括在由ATECC608B进行的一些密码计算中。
2.2.2修订号(字节4-7)
Microchip用于提供制造修订信息的四个字节的信息。这些字节可以自由读取,但系统软件决不能使用它们,因为Microchip可能会不时对它们进行修改。
2.2.3 I2C地址(字节16)
当设备配置为使用I2C接口时,字节16或85包含此ATECC608B将响应的设备地址。选择哪个字节,取决于芯片模式的第一位(字节19)。
在配置区域在插入终端系统之前被锁定并且系统中有多个ATECC608B设备的情况下,可能需要在一组ATECC608B设备中进行选择。这可以通过使用UpdateExtra命令将非零值写入位置85来实现。一旦写入85,ATECC608B必须关闭电源或进入睡眠状态。在唤醒或通电时,它将响应字节85中编程的地址。
不管ChipMode[0]的值如何,只要字节85包含零值,ATECC608B将使用字节16中的I2C地址。一旦字节85被写入0以外的值,就不能再写入它。没有对ATECC608B进行编程以响应设备地址0的方法。
不管地址的来源如何,地址字节的LSb总是被ATECC608B忽略。实际的I2C地址是一个7位的值。这存储在位I2C_ADDRESS[7:1]中。默认的7位I2C地址为0x60。
笔记  为了防止当ChipMode[0]为1时被篡改,Config.UserExtraAdd字节必须在装运之前或在包含设备的程序集的初始安装过程中写入。有关其他使用情况,请咨询您当地的Microchip FAE。
2.2.4 GPIO控制(字节16)
当设备配置为在单线接口模式下操作时,这些位用于控制GPIO引脚(见第8节。通用I/O引脚)。
Bit 描述
7-4 SignalKey。如果GPIO_Mode为01,则为GPIO授权密钥的插槽号。对于所有其他模式,必须为0000
3 GPIO验证模式。在授权模式之间进行选择。如果GPIO_Mode不是01,则必须为零。
0=授权输出模式。当在SignalKey中的插槽上成功执行授权时,SCL引脚切换到与其通电状态相反的状态(见第8节)。通用I/O引脚)。
1=入侵检测模式。永久锁存是通过授权设置的,如果SCL失败则清除。
2 GPIO默认值。当配置为输出时,SCL引脚通电时的默认状态。
1-0 GPIO模式
00=禁用。SCL引脚未使用,应在电路板上拉低。
01=授权模式。第3位决定设备操作。
10=输入。Info命令返回的SCL引脚上的当前逻辑值。
11=输出。SCL可以由Info命令驱动为HIGH或LOW。
2.2.5计数器匹配密钥(字节18)
ATECC608B中的计数器匹配功能提供了一种改变第一单调计数器(计数器0)可递增极限的机制。密钥使用可以连接到计数器[0](见第4.4.5节高耐久性单调计数器),以防止在计数器达到极限时使用该密钥。
如果此字节中的计数器匹配启用位为零,则计数器匹配功能被禁用,并且计数器必须在密钥被禁用之前达到其自然极限。
此字节中的CounterMatchKey字段定义了包含要与当前计数器值进行比较的值的键槽。将限制值写入此插槽时,需要遵守一些限制:
•忽略密钥插槽中值的最低有效5位。这意味着限制修改的频次是32次迭代。极限值应写成32位数字,最低有效5位为0,净值不大于第4.4.5节“高耐久性单调计数器”中定义的最大计数。
•为了提供可靠的操作,此4字节(32位)值应在键槽的第二个4字节中重复。
•CounterMatchKey插槽不得设置IsSecret位。可以接受并允许在该插槽的写入命令上同时要求加密和MAC。
2.2.6芯片模式(字节19)
此字节控制设备的一些基本定时和I/O功能。字节中的五个高位7-3提供了对用于密码命令的时钟的可选控制。5位的合法值为:
•0b00000(默认值):不划分时钟
•0b00101:将时钟除以约3
•0b01101:将钟除以约8
这5位的任何其他值都不能确保产生可靠的操作。通过划分内部时钟频率,以增加命令执行时间为代价来减少部件的工作电流。参见第10.4.2节命令执行时间和表9-5。请注意,看门狗计时器间隔不受时钟分频器设置的影响。
位 2:将看门狗计时器的长度设置为1.3s或13s。为了获得最大的安全性,Microchip建议使用两个间隔中较短的一个。然而,将时钟分频器设置为最大值0b01101可能需要将该位设置为“1”。
位1:此位控制SDA和SCL缓冲器是使用VCC相关电平还是固定电平来确定高和低状态。在上拉电阻器连接到与ATECC608B相同的VCC电源的系统中,建议使用VCC参考电平。然而,如果输入控制信号参考较低的电压电平,则固定的参考可以提供电平移位功能。
位0:如果此位设置为“1”,则I2C地址将在字节85而不是字节16中找到。有关详细信息,请参阅UpdateExtra命令一节。
2.2.7 SlotConfig(字节20-51)
16个SlotConfig元素用于为ATECC608B设备内的16个插槽中的每个插槽配置访问保护。每个配置元素由16个比特组成,这些比特控制该特定时隙或密钥的使用和访问。当数据区域被锁定时,SlotConfig字段将根据下表进行解释。
当数据区域解锁时,这些限制通常不适用。那些未被配置为包含私钥的插槽可以自由写入,而不可以读取。
表2-6。 插槽配置位(每个插槽)。
Bit 名字 描述
15-12 WriteConfig 控制修改此插槽中数据的能力。参见表2-8、表2-9、表2-10、表2-11和第11.22节写入命令。
11-8 WriteKey 使用此密钥验证和加密写入此插槽的数据
7 IsSecret 0=此插槽的内容既不应包含机密数据也不应包含密钥。如果将任何ECC私钥的IsSecret设置为零,则GenKey和Sign命令将失败。
1=此插槽的内容是秘密的–禁止明文读取,禁止4字节读取和写入。如果EncryptRead为1,或者WriteConfig具有Always(0x00)以外的任何值,则必须设置此位,以确保设备的正确操作。
附加信息见表2-7。
6 EncrypteRead 0=可以进行明文读取。
1=使用ReadKey(此表中的位0-3)生成加密密钥,将使用Read命令中指定的过程对此插槽中的读取进行加密。不需要输入MAC。如果设置了此位,则还必须设置IsSecret(此外,请参见下表2-7)。
5 LimitedUse 0=没有使用限制。
1=存储在插槽中的密钥为“受限使用”,其使用由Counter0控制。参见第4.4.5节高耐久性单调计数器。
4 NoMac 0=存储在插槽中的密钥可供所有命令使用。
1=存储在插槽中的密钥用于验证,不能由MAC命令使用。当该密钥用于生成或修改TempKey时,MAC命令可能不会使用该值。
3-0 ReadKey 使用此KeyID可以使用“读取”命令加密从该插槽读取的数据。更多信息请参见表2-6中关于第6位的描述。
0=此插槽可以作为CheckMac复制操作的源。参见第4.4.6节密码检查。不要将零作为默认值。除非明确需要CheckMac复制操作,否则不要将此字段设置为零,无论是否有其他读/写限制。
包含私钥的插槽永远无法读取,此字段具有不同的含义:
位0:启用任意消息的外部签名。
位1:启用GenDig或GenKey生成的消息的内部签名。
位2:允许对该密钥进行ECDH操作。
位3:如果清除,则ECDH主秘密可以在清除中输出。如果设置了,则主密钥可以被写入到槽N|1中。如果位2为零,则忽略。
对于包含可验证公钥的插槽(PubInfo是一个,请参阅第2.2.14节KeyConfig(字节96-127)),此字段存储了应用于执行验证的密钥的ID。
2.2.7.1读取权限
根据下表,大多数数据槽的读取操作由IsSecret和EncryptRead的状态控制。ECC私钥在任何情况下都无法读取。
表2-7。 读取操作权限
IsSecret EncrypteRead 描述
0 0 始终允许从此插槽读取明文。设置为此状态的插槽永远不应用作密钥存储。一次可以读取4个或32个字节。
0 1 禁止。使用此代码的插槽无法保证安全性
1 0 从不允许从此插槽读取。设置为此状态的插槽仍可用于密钥存储。
1 1 使用下面“读取”命令部分中记录的加密算法对此插槽中的读取进行加密。加密密钥位于ReadKey指定的插槽中。禁止4字节的读取和写入。
2.2.7.2写入权限
4位WriteConfig字段由Write、DeriveKey、GenKey和PrivWrite命令解释,如表2-8、表2-9、表2-10和表2-11所示,其中“X”表示“不在乎”。
笔记  表格重叠;例如,代码0b0110表示可以使用Write命令以加密形式写入的插槽,并且也可以是以目标为源的未经授权的DeriveKey命令的目标。
KeyConfig字段中的KeyType(见表2-12)指示GenKey或DeriveKey命令是否可以在特定插槽上使用;GenKey仅用于ECC密钥,DeriveKey用于SHA-256密钥。
有关写入ECC私钥的特殊信息,请参阅第2.2.7.3节写入ECC私钥。ECC公钥被视为正常数据,本节介绍了这些插槽的写入权限。
表2-8。 写入配置位:写入命令
Bit 15 Bit 14 Bit 13 Bit 12 模式名称 描述
0 0 0 0 总是 始终允许在此插槽上进行明文写入。设置为“始终”的插槽决不能用作密钥存储。可以向该插槽写入4个或32个字节
0 0 0 1 pub无效 如果已验证的公钥存储在插槽中,则禁止写入。使用Verify(Invalidate)可在写入之前使其无效。除非插槽包含公钥,否则不要使用此模式。参见第4.3节公钥更新
0 0 1 X 从不 从不允许使用Write命令对此插槽进行写入。设置为never的插槽仍然可以用作密钥存储。
1 0 X X 从不 从不允许使用Write命令对此插槽进行写入。设置为never的插槽仍然可以用作密钥存储。
X 1 X X 加密 对此插槽的写入需要正确计算的MAC,并且系统必须使用WriteKey使用写入命令描述中记录的加密算法对输入数据进行加密。禁止向该插槽写入4字节
表2-9。 写入配置位:DeriveKey命令
Bit 15 Bit 14 Bit 13 Bit 12 源密钥(1) 描述
0 X 1 1 父级 DeriveKey命令可以在没有授权MAC的情况下运行。(创建)
1 X 1 1 父级 DeriveKey命令需要授权MAC。(创建)
X X 0 X – WriteConfig字段中具有此值的插槽不能用作DeriveKey命令的目标。
笔记  DeriveKey命令执行的计算的源密钥可以是直接在参数2(目标)中指定的密钥,也可以是SlotConfig[参数2]中的密钥。WriteKey(父级)。
IsSecret位控制内部电路,这些电路对于读和/或写必须加密或完全禁止的插槽具有适当的安全性。还必须为要用作关键点的所有槽设置该值,包括使用DeriveKey命令创建或修改的槽。具体而言,若要启用正确的设备操作,必须设置此位,除非WriteConfig为Always。一个例外是CounterMatch插槽的IsSecret必须设置为0,但可以具有任何合法的WriteConfig值。四字节访问通常被禁止到设置有该位的时隙和从该时隙访问四字节。
用于存储键值的插槽必须始终将IsSecret设置为1,将EncryptRead设置为0(禁止读取),以获得最大的安全性。对于固定键值,WriteConfig必须设置为Never。当以这种方式配置时,在数据区域被锁定后,就无法读取或写入密钥;并且它可以仅用于加密操作。
某些安全策略要求不时更新机密。ATECC608B通过以下方式支持此功能:特定插槽的WriteConfig必须设置为Encrypt和SlotConfig。通过将WriteKey设置为插槽ID,WriteKey必须指向同一插槽。然后可以使用标准的Write命令向该插槽写入新值,前提是使用旧(即当前)密钥值计算身份验证MAC。
2.2.7.3写入ECC私钥
ECC私钥通过KeyConfig的适当内容指定。KeyType和KeyConfig。PubInfo。它们永远无法使用Write和/或DeriveKey命令进行编写。相反,可以使用GenKey和PrivWrite来修改这些插槽。尝试在未配置为包含ECC私钥的插槽上执行GenKey或PrivWrite总是错误的。SlotConfig。WriteConfig对这些命令有以下解释:
表2-10。 写入配置位:GenKey命令
Bit 15 Bit 14 Bit 13 Bit 12 描述
X X 0 X GenKey不能用于将随机密钥写入此插槽。
X X 1 X GenKey可用于将随机密钥写入该插槽。
表2-11。 写入配置位:PrivWrite命令
Bit 15 Bit 14 Bit 13 Bit 12 模式名称 描述
X 0 X X 被禁止的 如果目标密钥槽具有此值,PrivWrite将返回一个错误。
X 1 X X 加密 写入此插槽需要正确计算的MAC,并且输入数据必须由系统使用SlotConfig加密。WriteKey使用PrivWrite命令描述中记录的加密算法。
2.2.8使用锁定(字节68)
此字节控制ATECC608B的传输锁定功能。启用此功能后,在设备以密码方式启用之前,禁止对设备进行一般用途的使用。锁定时,只允许使用Read、Nonce、CheckMac和SelfTest命令。
要启用该设备,主机系统应使用Nonce命令生成一个Nonce值。然后,应该使用SHA按照下面CheckMac命令中描述的顺序组合该nonce。生成的摘要应发送到CheckMac命令,其中源密钥指向UseLockKey。如果ATECC608B能够验证摘要,那么它将自动清除UseLockEnable并允许正常使用。
此字节中的位编码如下:
•位7-4:UseLockKey。可以与CheckMac一起使用的密钥的插槽ID,以实现芯片的完全使用
•位3-0:UseLockEnable。如果为0xA,则只允许使用Read、Nonce、CheckMac和SelfTest命令。如果有任何其他值,则此功能未启用,UseLockKey字段将被忽略,所有命令将正常完成。
为了获得适当的安全性,应遵守以下两种最佳实践:
•在KeyConfig中为UseLockKey设置ReqRandom位。这将要求使用在ATECC608B芯片内生成的随机数,通过与主机系统的单独事务来启用每个设备。如果未设置此位,则可以向每个设备发送相同的序列以启用它,从而使主机启用系统可能受到攻击并丢失该序列。
•将UseLockKey插槽配置为允许未经授权的DeriveKey(Roll)–WriteConfig=0b0010。在设备被解锁后,授权密钥可以通过与输入上的随机数(以主机可能希望的任何方式生成)的组合来销毁,从而防止将来使用的任何可能性。
2.2.9易失性密钥使用权限(字节69)
该字节控制ATECC608B的易失性权限功能。当为特定的密钥槽启用此功能时,在加密启用之前,将禁止通用该槽。许可状态存储在持久锁存器中,并在睡眠、空闲和活动模式期间保留。有关持久锁存的更多信息,请参阅第3.5节“持久锁存”。
此功能的一个用途是将特定的ATECC608B连接到板上的特定主机MCU。通电后,主机将在引导期间启用正常的密钥使用,并像以前一样继续操作。如果将ATECC608B从板上移除,那么在不知道共享密钥的情况下,如果如此配置,则ATECC608B上的剩余密钥将不可用。
用于促进易失性密钥权限的秘密应该是一个唯一的值,该值在板制造时存储在MCU和ATECC608B中。一种选择是将该密钥与用于IO保护的密钥共享。该密钥可以通过ATECC608B随机数生成器生成,并存储在密钥槽中,然后锁定槽。相同的值应存储在MCU内的安全位置。
此功能还可以允许在工厂启用包含电池的系统内的钥匙。如果设备已从系统中移除,则不允许使用钥匙。
对于这两种模式,主机系统可以使用Nonce命令启用如此配置的密钥,以生成Nonce值。然后,应该使用SHA按照下面CheckMac命令中描述的顺序组合该nonce。生成的摘要应发送到CheckMac命令,其中源密钥指向VolKeyPermitSlot。然后可以运行Info(模式=4)命令,将持久锁存写入值“1”。
该字节中的位编码如下:
•位7:VolKeyPermitEnable。如果为“0”,则此功能将被禁用,并且可以通过其他方式控制持久锁存。如果为“0”,则忽略VolKeyPermitSlot。
•位6-4:必须为零。
•位3-0:VolKeyPermitSlot。包含密钥的插槽,该密钥用于通过“信息”命令设置或清除“持久锁存”。
最佳实践是为VolKeyPermitSlot设置KeyConfig中的ReqRandom位。这将要求使用在ATECC608B芯片内生成的随机数,通过与主机系统的单独事务来启用密钥。如果未设置此位,则攻击者可以存储启用序列,并在不同的环境中重播。
2.2.10安全引导配置(字节70-71)
这两个字节控制设备安全引导功能的操作。通常,SecureBoot命令会利用这些配置位来确保执行正确的序列。有关设备支持的安全引导功能的完整描述,请参阅第4.2节“安全引导”。
Bit 描述
15-12 SecureBootPubKey。插槽号,包含用于验证代码签名的公钥。
11-8 安全引导信号摘要。包含存储的摘要或签名的插槽号,如果先前的安全引导已验证该摘要或签名,则该插槽号将在安全引导期间使用。
7-5 必须为零。
4 安全引导和不安全。如果为“1”,则必须加密SecureBoot命令的输入代码摘要,并且用于摘要加密的nonce必须使用ATECC608B随机数生成器。当输入被加密时,输出总是包括MAC。如果为“0”,则输入加密是可选的,并且仅通过SecureBoot命令的模式位进行控制。如果为“0”,则不需要使用ATECC608B随机数生成器。
3 SecureBootPersistentEnable。如果为1,则在成功执行SecureBoot命令时,将设置持久锁存。如果密钥使用通过KeyConfig中的PersistentDisable位与Persistent Latch绑定,则在安全引导成功完成之前,这些密钥将不可用。
2 必须为零。
1-0 SecureBootMode
00=安全引导功能已禁用。
01=完全安全引导(FullBoth)。摘要和签名都必须在启动时传递给芯片。
10=存储的安全引导(FullSig)。在第一次成功的安全引导之后,签名被存储,并且随后的引导不需要签名来传输
11=存储的安全引导(FullDig)。在第一次成功的安全引导后,将存储摘要,在随后的引导中,在不进行ECC验证的情况下比较摘要
2.2.11特殊的KDF初始化矢量函数(字节72-74)
如果配置了KDF命令计算的结果,则可以防止其通过IO保护字段(参见IO保护(ChipOptions:Bytes 90-91)一节)发送到清除中的主机MCU。虽然这是一种安全的使用方法,但对于HKDF的初始化矢量值来说,它并不是最佳的。当使用片上AES引擎时,这一点很重要,因为该命令要求在主机MCU的外部执行除ECB之外的任何模式的模式处理。
此特殊功能允许KDF命令绕过IO保护字段,并允许在满足以下所有条件的情况下将KDF结果放在清除的输出缓冲区中:
1。KDF算法必须是HKDF,并且模式应指定输出处于清除
2。输入字符串的长度必须至少与Config一样长。KdfIvLoc+2
3。从索引Config开始的两个字节。KdfIvLoc必须与Config中存储的两个字节相匹配。
KdfIvStr可以通过将索引值(Config.KdfIvLoc)设置为0xF0来禁用此功能,0xF0超过了输入缓冲区的大小,并且永远不会导致合法匹配。
2.2.12 IO保护(ChipOptions:Bytes 90-91)
ATECC608B提供了一种方法来保护其与主机之间的I/O传输,以执行ECDH、KDF、Verify和SecureBoot命令。其他命令为结果提供保护,如其他地方所述。
芯片选项字内的剩余位用于其他功能。本节仅包括与IO保护功能相关的那些位。
预计典型的实现方式将涉及在包含ATECC608B和主机的板的第一次加电时产生随机数。该共享机密将被写入IO保护密钥插槽和主机内相对安全的位置。一旦写入,它将在ATECC608B上被插槽锁定,以防止任何更改。在这样的实现中,每个板将具有不同的秘密来保护ATECC608B和主机之间的传输。因此,对一个系统的任何可能的攻击都无法直接转化为第二个系统。
对于ECDH和KDF命令,IO保护包括加密从ATECC608B传输到主机MCU的数据。对于验证命令,IO保护包括返回带有输出的验证MAC,以确保中间人没有修改芯片的结果。SecureBoot操作涉及加密和身份验证。
Bit 描述
15-12 IO保护密钥。用于IO保护的KeyID.SlotConfig。此密钥的NoMac必须设置为0。
11-10 KDF保护。KDF命令结果使用方式的限制,编码方式与上述ECDH相同。
9-8 ECDH保护。对ECDH命令结果使用方式的限制:
00=清除中的输出正常,尽管加密仍然可以在模式参数
01=输出正常,但结果必须加密。ECDH命令将忽略模式参数中加密位的状态。
10=结果必须存储在TempKey或EEPROM键槽中,禁止在总线上输出。
11=不要使用。
7-2 必须为零。
1 IO保护启用。
0=此功能被禁用,芯片将忽略下面的三个字段。
1=通过存储在IO保护密钥插槽中的密钥启用保护功能。
0 必须为零。
2.2.13 X.509证书验证格式(字节92-95)
大多数X.509证书太大,无法存储在ATECC608B的插槽中。然而,该设备确实提供了一种方法来存储X.509证书中包含的公钥,并在证书经过验证之前防止其使用。该序列通过SHA(公共)和Verify(验证外部)命令进行控制。
此格式部分中的四个单独字节与X.509证书格式相关联,该证书格式适用于存储在设备内的特定公钥。如果与特定公钥关联的字节值为零,则会忽略这些格式限制,并且可以使用Verify(Validate)验证该公钥。此数组中未使用的字节必须为零,否则,格式必须如下所示:
Bit 描述
7-4 TemplateLength。Verify(ValidateExternal)命令正确验证公钥所需的整个SHA序列中的块总数。
3-0 PublicPosition。必须在SHA序列中插入公钥的SHA块号,才能使用Verify(ValidateExternal)命令正确验证公钥。
2.2.14 KeyConfig(字节96-127)
除了SlotConfig之外,还使用16个KeyConfig元素来限制可以使用存储在特定插槽中的信息执行的操作。当数据区域被锁定时,KeyConfig元素将根据下表进行解释。当数据区域解锁时,这些限制不适用,但配置为包含私钥的插槽只能使用PrivWrite命令写入的情况除外。
表2-12。 KeyConfig位(每个插槽)
bit 名称 描述
15-14 X509id 配置区域(地址92-95)内X509格式数组的索引,对应于此插槽。
如果对应的格式字节为零,则公钥可以通过父级的任何格式签名进行验证。
如果相应的格式字节为非零,则验证证书必须具有一定的长度;存储的公钥必须位于消息中的某个位置,并且必须使用SHA()命令来生成消息的摘要。
如果插槽不包含公钥,则必须为零。
13 RFU 必须为零。
12 PersistentDisable 0=此密钥的使用与Persistentatch的状态无关。
1=在持久锁存模式、易失性密钥权限使用、安全引导或入侵检测下操作时,如果Persistentatch状态为零,则禁止对GenKey以外的所有命令使用此密钥。无论闩锁的状态如何,都允许使用GenKey。在持久锁存授权模式(GPIO模式Auth0和Auth1)下操作时,不应设置此位。
11-8 AuthKey 如果ReqAuth为一,则此字段指向在可以使用与此插槽相关联的密钥之前必须用于授权的密钥。
如果ReqAuth为零,则必须为零。
7 ReqAuth 0=无需事先授权。
1=在使用此密钥之前,必须在加密使用密钥之前成功完成使用AuthKey指向的密钥的事先授权。适用于所有密钥类型,包括公钥、私钥和密钥。请参阅“授权密钥”一节。
6 ReqRandom 此字段控制以下命令使用的随机数的要求:GenKey、MAC、CheckMac、Verify、DeriveKey和GenDig。
0=不需要随机数。
1=需要一个随机数。
5 Lockable 0= keyConfig和SlotConfig位控制修改权限。
1=可以使用“锁定”命令单独锁定此插槽。锁定后,任何命令都无法修改插槽。请参阅配置区域中的SlotLocked字段,以确定插槽当前是否已锁定。
适用于所有插槽,无论它们是否包含密钥。参见第2.4节EEPROM锁定。
4-2 KeyType 如果插槽包含ECC公钥或私钥,则下面的密钥类型字段必须设置为4。如果插槽包含任何其他类型的数据、密钥或机密,则必须将此字段设置为另一个值才能正确操作,如下所示。0-3=RFU(保留供将来使用)
0x4=P256 NIST ECC密钥
0x5=RFU)(保留供未来使用)
0x6=AES密钥
0x7=SHA密钥或其他数据
1 PubInfo 如果Private表示此插槽包含ECC私钥:
0=永远无法生成此密钥的公共版本。使用此模式可获得最高安全性。
1=始终可以生成此密钥的公共版本。
如果Private指示此插槽不包含ECC私钥,则此位可用于控制公钥的有效性。如果如此配置,则Verify命令将仅在签名已验证的情况下使用存储的公钥来验证签名。Sign和Info命令用于报告有效性状态。公钥有效性功能被所有其他命令忽略,仅适用于插槽8-15。
0=验证命令可以使用此插槽中的公钥,而无需验证。
1=只有验证了插槽中的公钥,Verify命令才能使用该插槽中的私钥。当由于任何原因写入此插槽时,块0的字节0的最高有效四位将被设置为0xA以使插槽无效。Verify命令可用于将这些位写入0x05以验证插槽。
如果此插槽包含Data或AES类型的密钥,则PubInfo位控制KDF命令是否将数据写入此插槽。如果为1,则允许KDF进行写入。如果为0,KDF可能不会写入此插槽。
0 Private 0=密钥槽不包含ECC私钥,无法使用Sign、GenKey和PrivWrite命令进行访问。它可能包含ECC公钥、SHA密钥、AES密钥或数据。
1=密钥槽包含ECC私钥,只能使用Sign、GenKey和PrivWrite命令访问。
有关选择字段的更多信息如下所述。
•Private
此位表示插槽包含ECC私钥,并且设备使用它将此插槽的使用限制为适当的ECC命令。
如果设置了此位,则SlotConfig。ReadKey用于启用或禁用对各种操作使用私钥。ReadKey[0]允许使用密钥对外部提供的数据进行签名,而ReadKey[1]允许使用密钥仅对GenKey或GenDig命令存储在TempKey中的消息进行签名。该机制允许远程实体知道特定的密钥值或插槽内容存储在ATECC608B设备内,并防止攻击者创建外部消息,该消息将模拟不存在的内部状态,并创建该状态的签名。
•PubInfo
对于公钥,此字段可用于遍历证书链以验证密钥。此功能是使用Verify命令实现的,验证与密钥一起存储在非易失性存储器中,这样以后使用公钥就不需要额外的验证。当写入包含密钥的插槽的任何部分时,这些密钥总是无效的。
对于私钥,该字段可用于在某些情况下通过防止生成与私钥相对应的公钥来提高安全性或隐私性。假设在生成私钥或将私钥写入设备时,公钥已存储在其他地方。生成随机密钥时会忽略此字段。ATECC608B包括一种遍历X.509证书链或简化内部格式链的方法。有关更多详细信息,请参阅SHA和Verify(ValidateExternal)命令。
如果KeyType是Data或AES,则PubInfo控制KDF命令是否可以将数据写入此插槽。如果为1,则允许KDF进行写入;如果为0,则不允许KDF写入。
•KeyType
使用ECC密钥(即GenKey、Sign、ECDH和Verify)的四个ECC命令将仅在该字段设置为合法ECC密钥类型之一的数据槽上运行。任何使用对称计算的尝试配置为ECC私钥的插槽上的命令(即CheckMac、DeriveKey、MAC或AES)将导致错误。
将成为对称计算命令的源或目的地的密钥应视情况设置为6(AES)或7(Data)的KeyType。如果使用任何其他KeyType尝试执行这些命令,则无法保证设备的正确操作。GenDig命令可以在除用于存储ECC私钥的插槽之外的任何插槽类型上操作。
•ReqRandom
此字段可用于防止重放授权和/或其他加密操作。在正常情况下,控制加密读取和/或写入的密钥应将此字段设置为1,以提供数据安全性。
如果此字段设置为1,则在执行CheckMac、GenDig、DeriveKey、Verify和MAC命令之前,Nonce命令必须使用随机数生成器(RNG)生成TempKey的内容。
如果GenKey用于生成存储在数据区插槽中的公钥或私钥的公钥摘要,则ReqRandom字段用于确保TempKey中的随机数包括RNG。
•ReqAuth
如果设置了此位,则在KeyConfig处对密钥进行事先授权。AuthKey必须在执行任何使用此密钥的加密命令(即CheckMac、DeriveKey、GenDig、GenKey、MAC、Sign或Verify)之前完成。DeriveKey命令只检查父密钥的使用授权,而不检查目标密钥,除非它与父密钥相同。
GenKey命令即使在生成新密钥时也会检查使用授权,以防止拒绝服务攻击。
授权状态存储在两个内部易失性寄存器中:
–AuthComplete。有效
–AuthComplete。KeyId
只要通电且设备未进入睡眠模式,这些寄存器就会保留。
这些寄存器是通过执行成功的CheckMac或Verify命令来设置的,该命令将被授权的密钥作为该命令的目标密钥。CheckMac必须在Mode[1]设置为1的情况下运行,或者Verify必须在存储模式下运行才能设置AuthComplete。有效的AuthComplete。KeyId设置为这些命令的KeyId参数中的值。CheckMac和Verify命令不会在授权尝试失败时清除这些位,除非密钥恰好也用作源密钥。
AuthComplete。在以下情况下,有效将被清除:
–设备进入睡眠模式或电源已断开。
–执行任何使用需要事先授权的密钥的命令,无论哪个插槽已被授权和/或哪个插槽需要对此密钥进行授权。如果存在多个状态或配置错误,无法正确执行命令,请执行AuthComplete。根据遇到的特定错误条件,可以清除有效,也可以不清除。
2.3 EEPROM一次性可编程(OTP)区
64字节(512位)的OTP区是EEPROM阵列的一部分,可用于只读存储。它被组织为两个块,每个块32个字节。一旦锁定,数据就无法修改,通常用于存储固定的型号、校准信息、制造历史或其他不应更改的数据。
在锁定配置区域(通过使用lockConfig)之前,OTP区域是不可访问的,既不能读取也不能写入。在配置锁定之后,但在OTP区域锁定之前(使用lockValue),可以使用Write命令写入整个OTP区域。在使用LockValue锁定数据/OTP区域之前,根本无法读取此区域。
一旦OTP区域被锁定,内容总是可以被读取,但永远不会被写入。尝试使用Write命令总是会返回一个错误,并使内存保持不变。OTP区域内的所有64个字节始终可用于使用4字节或32字节读取进行读取。
从Microchip工厂发货时,所有OTP字节的值均为0xFF。
2.4 EEPROM锁定
设备有两种单独的锁定状态:
•一种锁定配置区域(由LockConfig控制,字节87)。
•一个用于锁定OTP和数据区域(由LockValue控制,字节86)。
这些锁存储在配置区域的单独字节中,只能通过Lock命令进行修改。内存区域锁定后,无法解锁。从Microchip发货时,两个字节都设置为0x55(解锁)。
除了上述两个设备锁定选项外,还有一个单独的插槽锁定机制,可以为每个插槽进行可选配置。该锁定操作可以在芯片锁定操作发生之前或之后的任何时间发生。
设备应在系统制造商的网站上使用所需的配置信息进行个性化设置;之后,应该锁定配置区域。然后,在适当的情况下,应通过使用加密写入来执行将公共和秘密信息写入数据和OTP区域的所有必要写入,然后应锁定数据和OTP区域。
至关重要的是,在将数据和OTP区域释放到包含设备的系统现场之前,应将其锁定。未能锁定这些区域可能会允许修改任何密钥,并可能导致其他安全问题。
在锁定配置区域之前,任何读取或写入数据或OTP区域的尝试都会导致设备返回错误。
笔记  请联系Microchip以获取可选的安全个性化服务。
2.4.1配置区域锁定
根据表2-5,无论锁定状态如何,配置区域内的某些字节永远不能在字段中修改。区域内大多数剩余字节的写入权限由配置区域中的LockConfig字节控制,如下表所示。在本文档中,如果LockConfig为0x55,则表示配置区域已解锁;否则,它将被锁定。只能通过LOCK命令设置LockConfig字节。一旦配置区域被锁定,它就永远无法解锁,并且配置区域内的任何值都无法通过直接写入命令更新。某些配置值可以通过其他命令设置,例如在执行单个插槽锁定时的LOCK命令。始终可以读取配置区域内的值。
表2-13。 配置区域锁定
读访问 写访问
LockConfig0x55(解锁) 读 写
LockConfig!=0x55(锁定) 始终 <从不>(注意)
笔记  有关有限的例外情况,请参阅上面的2.2 EEPROM配置区域。
2.4.2数据和OTP区域锁定
一旦配置区域被锁定,就可以将机密和/或只读数据写入数据区域和OTP区的插槽中。当数据区域解锁时,大多数写访问限制都会被忽略。在本文档中,如果LockValue为0x55,则称OTP和数据区域都已解锁;否则,它们将被锁定。LockValue字节只能使用Lock命令进行设置。锁定数据/OTP区域并不意味着不能修改这些区域中的值。锁定表示插槽现在根据相关配置区域值设置的策略进行操作。一旦设置了LockValue字节,就永远无法清除它。
笔记  在锁定配置区域之前,既不能读取也不能写入OTP和数据区域。
表2-14。 数据区域访问限制
读访问 写访问
LockValue
0x55(解锁) <从不> 始终
LockValue!=0x55(锁定) 始终 <从不>
2.4.3单个插槽锁定
ATECC608B提供了一种机制,用于一次性锁定16个数据插槽中的任何一个。一旦插槽被单独锁定,则在任何情况下都不能再修改该插槽。该机制由配置区中的16位字段SlotLocked和16个keyConfig字中的16个可锁定位控制。SlotLocked和Lockable位可以在锁定配置区域之前使用Write命令自由写入。
•SlotLocked位
在锁定配置区域后,如果特定插槽的SlotLockedbit设置为零,则永久禁止通过PrivWrite、Write、GenKey和/或DeriveKey命令修改该插槽,而不管相应的Lockable、SlotConfig和/或KeyConfig位的状态如何。当SlotLocked为零时,即使数据区域已解锁,也无法写入相应的插槽。
•Lockable位
在配置区域被锁定后,特定插槽的可锁定位的状态控制是否允许锁定命令根据下表更改相应插槽的SlotLocked位。如果Lockable是一个,则Lock命令可用于在锁定数据区域之前或之后修改SlotLocked位。
表2-16。 配置区域锁定后的单个插槽锁定
SlotLocked 位 Lockable位 锁命令 PrivWrite、Write、DeriveKey、ECDH、KDF和GenKey命令 注释
0 0或1 否 否 不可写入
1 0 否 是 可写但不可锁定
1 1 是 是 可写且可锁定
可单独锁定的插槽可以包含机密信息或可读数据,可以通过以下两种方式之一使用:
•配置区域和不可锁定的数据插槽应由OEM以通常的方式初始化和锁定。锁定数据区域后,标记为可锁定的特定插槽可以进行修改,并在未来的某个时候单独锁定在字段中。
•配置区域锁定后,在将设备/组件转移给第二方(如分包商或分销商)之前,OEM可以对一些插槽进行个性化和锁定,第二方对剩余插槽进行个性化设置,然后在将设备运送到现场之前锁定数据区域。
当使用单独的插槽锁定机制时,Lock命令不提供CRC验证机制。如果插槽在锁定整个数据区域之前被锁定,那么整个区域的CRC验证通常是不可能的,因为这些插槽的内容将是未知的。需要锁定数据区域而无需CRC验证。锁定数据区域后,可以使用Read、CheckMac或MAC命令在单独锁定插槽之前验证插槽内容。
笔记  无论插槽的SlotLocked位的状态如何,都可以通过Verify命令验证公钥。
3.静态RAM(SRAM)存储器
该设备还包括SRAM阵列,用于存储输入命令或输出结果、随机数、中间计算值、临时密钥、SHA上下文等。SRAM的内容永远不能直接读取;仅由安全元件内部使用。每当设备进入睡眠模式或断电时,此存储器的全部内容都将无效。
3.1 TempKey (临时密钥)
TempKey是SRAM阵列中的主存储寄存器,可用于存储各种中间值。该寄存器的内容永远不能从设备中读取(尽管设备本身可以在内部读取和使用内容)。
TempKey的长度为64字节。KDF和Nonce命令能够写入该寄存器的两个32字节的一半;所有其他命令只能修改TempKey的前(下)32个字节。前32个字节或所有64个字节都可以是有效的。如果下32个字节无效,则设备不允许上32个字节有效。
与TempKey寄存器的数据部分一起的是一组标志,其指示关于数据源及其有效性的信息。Info命令可用于返回与该寄存器对应的一些状态/标志位的值,如下所示:
表3-1。 TempKey标志
名称 长度 描述
KeyID 4位 如果TempKey是由GenDig或GenKey生成的,这些位指示在其计算中使用了哪个密钥。这四个比特表示数据区的一个时隙。
SourceFlag 1位 TempKey中随机性的来源:
0=内部生成的随机数(Rand)。
1=仅输入(固定)数据,无内部随机生成(输入)。
Generator 4位 0=GenDig未生成TempKey。
1=TempKey的内容是由GenDig使用数据区中的一个插槽生成的(TempKey.KeyID将是有意义的)。
GenKeyData 1位 0=TempKey。KeyID不是由GenKey生成的。
1=TempKey的内容是由GenKey使用数据区中的一个插槽生成的(TempKey.KeyID将是有意义的)。
NoMacFlag 1位 1=TempKey的内容是使用SlotConfig。NoMac是一个,因此不能由MAC命令使用。如果在TempKey的计算中使用了多个槽,则如果SlotConfig。任何一个插槽都设置了NoMac。
Valid 1位 0=TempKey中的信息无效。
1=TempKey中的信息有效。
在本说明书中,这些标志通常被称为TempKey。SourceFlag,TempKey。GenDigData等等。当TempKey。Valid为0,无论任何其他标志位的状态如何,任何试图使用TempKey寄存器内容的行为都会导致错误。
在通电、睡眠、断电、看门狗过期或篡改检测期间,TempKey寄存器及其所有标志都被清除为零。当设备进入空闲模式时,TempKey和标志的内容将被保留。
一般来说,TempKey。只要在命令执行期间出于任何目的使用(读取)TempKey,则Valid和所有其他标志都将清除为零。当打算使用TempKey的命令遇到错误时,TempKey可能会被清除,也可能不会被清除,具体取决于情况。如果特定命令或命令模式/配置不使用TempKey,则它将永远不会被清除。KDF或AES命令从不清除TempKey。
将结果保留在TempKey中的命令将设置Valid标志和适用于所执行操作的任何其他标志。
3.2消息摘要缓冲器
消息摘要缓冲器是一个64字节的寄存器,当需要TempKey寄存器来保留不同的信息时,它用于将输入消息摘要传送到验证和签名命令。SHA命令可以将摘要直接写入此寄存器,以简化外部主机编程。
如果Verify命令的输出需要验证MAC,则此寄存器始终用于传递用于计算该MAC的随机数。随机数在消息摘要缓冲区内的位置取决于签名消息摘要是通过TempKey输入还是通过消息摘要缓冲区时输入。
Nonce命令可以将32或64字节的固定输入数据写入消息摘要缓冲区。
在通电、睡眠、断电、看门狗过期或篡改检测期间,消息摘要缓冲区将被清除为零。除Nonce和SHA命令外,消息摘要缓冲区通常在大多数命令执行后清除。它只能在一个命令中使用(读取),而无需重新加载,因为它在使用时总是被清除。
3.3备用密钥缓冲器
备用密钥缓冲器是一个32字节的寄存器,当需要TempKey寄存器来保留不同的信息时,KDF命令可以使用它来存储密钥。它可以通过Nonce命令写入固定的输入值,也可以通过KDF命令写入机密值。
在通电、睡眠、断电、看门狗过期或篡改检测期间,备用密钥缓冲区被清除为零。
备用密钥缓冲区的用途是从单个根密钥生成两个独立的基于SRAM的密钥。实现这一点的一种方法是使用KDF命令,输入设置为AltKeyBuf,输出设置为TempKey(Lo)。然后第二次运行KDF,输出设置为TempKey(Hi),导致两个不同的密钥存储在一个位置,在本例中为TempKey。TLS 1.3可能需要类似的流程。
3.4 SHA上下文缓冲区
SHA命令使用标准的三阶段流程:初始化、更新和完成。在许多情况下,更新阶段会运行多次。内部SRAM存储器用于存储这些阶段之间的中间状态,也称为SHA上下文。
该SHA上下文缓冲区既不被任何其他ATECC608B命令读取也不被写入,因此,无论任何其他命令的执行是否成功,都不会被中断。与设备中的所有SRAM内存一样,在通电、睡眠、断电、看门狗过期或篡改检测期间,它会被清除为零。
3.5持久锁存
ATECC608B有一个称为持久锁存的易失性存储器位,只要Vcc保持在2.0V以上,它就会保持其状态。通电时总是将其设置为零,并且可以使用下面描述的操作进行操作。持久锁存器的状态总是可以通过Info(模式=4)命令读取,无论其使用配置方式如何。
请注意,此位未存储在SRAM中,当设备进入睡眠模式时,SRAM将失去其状态。
根据配置区域的编码方式,此锁存器可能具有几种不同的功能:
•易失性密钥使用权限:在该模式下配置时,持久锁存器的状态用于启用或禁用已配置的键槽。可以使用Info(Mode=4)命令将锁存器的状态写入1或0。有关更多详细信息,请参阅第2.2.9节“易失性密钥使用权限”(字节69)。
•安全引导:此模式与以前的模式类似,即使用永久闩锁的状态启用或禁用钥匙槽,但闩锁是由SecureBoot命令而不是Info命令设置的。要将永久闩锁设置为安全引导模式,必须启用三种安全引导模式之一(SecureBootMode!=0b00),并且SecureBootPersistentEnable位必须设置为一。
•授权输出:在此模式下配置时,持久锁存器存储SCL焊盘驱动到的值。可以使用Info(模式=3)命令通过Config进行适当授权来更改锁存器的状态。GPIO控制。SignalKey。此功能的一个用途是根据启动时主机中运行的某个序列安全地启用或禁用外部硬件。
•入侵检测:在此模式下配置时,持久锁存器的状态反映SCL引脚是否在此电源循环期间的任何时候都被拉低。这样做的一个用途是连接到外部防篡改开关,该开关检测系统外壳、维护门等的未经授权的打开。典型的实现方式是通过开关将电池连接到VCC和SCL,使得当开关打开或防篡改线断开时,SCL变为0V。闩锁的状态可以通过Info(Mode=3)命令进行初始“武装”,并通过Config进行适当授权。GPIO控制。SignalKey。在此状态下,将启用/禁用密钥。
必须仅为上述用途之一配置持久锁存器。虽然可以将密钥使用权限和安全引导都配置为使用闩锁,但启用多个模式可能会导致与预期不同的行为。
笔记  在SWI模式下操作时,Config。如果使用安全引导或易失性密钥禁用功能,则I2C_Address[3:0]字段必须设置为0x0以禁用GPIO功能。当使用安全引导或易失性密钥禁用功能时,使用信息(模式=4)读取持久锁存器的状态。如果既不使用安全引导也不使用易失性密钥禁用,则使用信息(模式=3)读取GPIO引脚的状态。
4.安全信息
4.1加密标准
ATECC608B遵循各种行业标准来计算加密结果。以下各节对这些参考文件进行了说明。
4.1.1 SHA-256
ATECC608B根据以下站点中记录的算法计算SHA-256摘要:
http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
第10节列出了由ATECC608B处理的完整SHA-256消息。通用命令信息,用于使用该算法的每个特定命令。算法的大多数标准软件实现自动向该消息添加适当数量的填充和长度位,以匹配设备内部执行的操作。
SHA-256算法也用于加密,方法是获取哈希算法的输出摘要,并将其与纯文本数据异或以生成密文。解密是一种相反的操作,其中密文与摘要进行异或,结果为纯文本。
4.1.2 HMAC/SHA-256
ATECC608B可以使用EEPROM中存储的密钥,根据SHA-256计算HMAC摘要,如下所示:
http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf
4.1.3 TLS V1.2伪随机函数(PRF)
ATECC608B KDF(PRF。这是TLS1.3规范中使用的KDF。具体说明见:
tools.ietf.org/html/rfc5869
4.1.5椭圆曲线数字签名算法(ECDSA)
ATECC608B根据以下算法计算和验证椭圆曲线签名:
•ANSI X9.62-2005 www.ANSI.org/
•FIPS 186-4规范nvlpubs.nist.gov/nistpubs/FIPS/nist.FIPS.186-4.pdf
4.1.6椭圆曲线Diffie-Hellman(ECDH)
ATECC608B根据NIST特别出版物800-56A的建议执行ECDH密钥协议:
nvlpubs.NIST.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar2.pdf
为了符合800-56Ar2的要求,ATECC608B始终将输入公钥视为临时密钥。为了获得最佳安全性,ECDSA和ECDH都不应使用私钥。此限制可以通过正确设置SlotConfig[KeyId].readKey中的位来实现。
4.1.7高级加密标准(AES)
对称加密和解密(如果启用)通过AES命令实现,仅使用AES-128 per:
nvlpubs.nist.gov/nistpubs/FIPS/nist.FIPS.197.pdf
4.2安全引导
ATECC608B提供了一种机制来支持连接的MCU中的安全引导操作,这有助于识别主机CPU上安装了欺诈代码的情况。上电后,主机MCU内的引导代码将代码摘要和适当的签名发送到ATECC608B。如果签名使用存储在ATECC608B中的预先批准的代码验证公钥来验证该摘要,则向主机MCU返回指示成功的消息。
身份和通信密钥可以选择性地配置为在通电时禁用。如果安全引导验证成功,将启用这些密钥以供使用。如果已启用,则安全引导结果的状态将存储在持久锁存器中(SecureBoot.SecureBootPersistentEnable=1)。当为SecureBootMode启用持久锁存时,即使设备进入睡眠状态,它也不会丢失其值。除非ATECC608B断电,否则不需要重新运行安全引导操作。预计相同的电源轨将用于为主机MCU和ATECC608B供电。
如果安全引导验证失败,则ID/通信密钥将保持禁用状态,直到成功的摘要/签名对被发送到ATECC608B。
用于验证代码摘要签名的公钥存储在Config指示的插槽中。SecureBoot。SecureBootPubKey。通常,SlotConfig。此插槽的WriteConfig应设置为Never,因为代码签名密钥很少会更改。如果希望系统能够更新安全引导公钥,则该插槽的WriteConfig应设置为PubInvalid(0001),并且应采用第4.3节“公钥更新”中描述的公钥更新机制。
如果要在引导时验证的代码相对较小,则可以使用ATECC608B上的SHA计算引擎通过将代码字节发送到ATECC608B来计算代码摘要。对于许多系统来说,这可能太慢了,但是在一些分层引导的情况下,主引导代码本身可以充分优化,使其大小允许使用ATECC608B SHA引擎。
4.2.1安全引导速度优化
ATECC608B SecureBoot命令包括将签名和/或摘要存储在ATECC608B的受保护边界内以减少执行时间的选项。签名和/或摘要可以通过正常安全引导命令上的模式开关来更新,该正常安全引导指令执行签名的验证和签名/摘要在指定槽中的存储。
通过将需要发送到ATECC608B的IO块的大小从96字节限制到仅32字节,存储签名可以减少引导时间。
如果存储了摘要,则ATECC608B仅在输入阵列中的主机代码摘要与ATECC608B的槽中存储的摘要之间进行摘要比较。这通过消除ECC验证的计算延迟来减少引导时间。
必须设置SecureBootSigDig插槽配置,以确保只有SecureBoot命令才能写入指定的存储插槽:
•目标插槽(Config.SecureBoot.SigDig)不能通过slotLocked功能锁定
•目标插槽的写入配置(Config.SlotConfig.WriteConfig)通常应设置为“从不”,以避免可能对插槽进行欺诈性修改的情况。
•如果设备配置为存储签名,则指定的插槽必须在8-15之间。摘要可以存储在任何插槽中。
4.2.2安全引导线保护
在某些应用程序中,可能有必要保护系统免受对手的攻击,因为对手可能会切断ATECC608B和主机MCU之间的线路,以用欺骗性的“成功”信号代替验证操作的结果。
如果安全引导命令的模式参数如此配置或指示,则可以通过代码摘要与随机数摘要和IO保护秘密的XOR对输入代码摘要进行加密。
配置。SecureBoot。SecureBootRandNonce位可用于确保始终执行此输入加密,并且它使用由ATECC608B随机数生成的随机数。这样的流程可以防止来自较早时间点的消息重放被用作ATECC608B SecureBoot命令的输入。
如果如此配置或由安全引导命令的模式参数指示,则输出布尔值可以伴随着通过来自主机的输入随机数和IO保护密钥生成的MAC。通常,主机随机数将由MCU上的计数器或随机数生成器生成,其唯一要求是与以前的安全引导随机数相比是唯一的。
这两个功能:指定密钥槽的MAC保护启用和ECC验证输出的MAC验证在易失性密钥许可功能(见第2.2.9节易失性钥匙使用权限(字节69))和验证命令MAC输出中分别可用(如果未使用安全引导命令)。
除了防止中间人攻击外,这些序列还防止ATECC608B从一个板上移除并在另一个板或某些其他类型的系统中使用,因为新板将不包含初始板的MCU上包含的IO保护秘密。虽然预计攻击者可以通过一定的努力从MCU中提取IO保护机密,但对于每个受到攻击的板,都必须再次重复该过程。
4.3公钥更新
用于验证代码摘要或信任根链的密钥可以存储在ATECC608B上。将设备用于此存储可以防止某些类型的攻击,因为流氓软件无法用欺诈密钥覆盖公钥。
通常,这些根公钥存储在插槽和SlotConfig中。WriteConfig字段设置为Never。在这种情况下,任何软件都没有写入公钥槽的方法。然而,在一些环境中,可能需要能够在相应私钥被泄露的不太可能的情况下更新根密钥。
公钥更新的基本流程如下:
1.使用Parent密钥对相应的消息进行签名以验证(Invalidate),从而清除根公钥上的验证位。
2.使用Write命令将新的根公钥写入根公钥槽,它仍将被标记为无效,无法使用。
3.使用父密钥对适当的消息进行签名以验证(Validate),从而在根公钥上设置验证位并允许正常使用。
这两个密钥槽应配置如下:
•根公钥应存储在具有SlotConfig的槽中。WriteConfig设置为“PubInvalid”(0b0001)。
–KeyConfig。KeyType应设置为P256(4)。
–KeyConfig。PubInfo应设置为1
–KeyConfig。X509id应指向其中一个Config。X508格式化值为0的字节
–SlotConfig。ReadKey应指向父公钥。
•父公钥插槽应具有SlotConfig。WriteConfig设置为Never,
–KeyConfig。KeyType应设置为P256(4)
–KeyConfig。PubInfo应设置为0。
如果在父插槽上设置了keyConfig.reqRandom,则需要更新序列来使用ATECC608B上的RNG,从而防止在一个设备上工作的更新包在另一个设备中工作。如果reqRandom为零,则公共更新序列可以用于多个ATECC608B设备。
此流可以防止破坏性的恶意写入(拒绝服务),因为为了进行写入,需要父密钥的无效签名。在正常情况下,这样的签名永远不会存在,书写也永远不可。
4.4密钥使用和限制
EEPROM数据区中的任何插槽都可以用于存储密钥或私钥。有多种方式可以使用存储在设备内的密钥和/或限制其访问。有关其中一些概念,请参见以下第4.4.1节“多样化密钥”至第4.4.8节“授权密钥”。
应正确配置设备,以防止对所有密钥槽进行任何不必要的读写访问,包括设置IsSecret位。无论配置区域中的值如何,都不能从设备读取私钥。
除第4.4.7节传输密钥中记录的传输密钥外,所有KeyID参数的最高有效12位应为零。
4.4.1多样化的密钥
如果主机或验证实体有一个安全存储秘密的地方,或者包含一个ATECC608B设备,则可以使用设备中嵌入的序列号(SN[0:8])来多样化存储在客户端EEPROM插槽中的密钥值。通过这种方式,每个客户端设备都可以具有唯一的密钥,该密钥可以提供针对已知明文攻击的额外保护,并允许识别和列入黑名单的泄露序列号。
为了实现此操作,在个性化过程中,通过使用某种加密算法将根密钥与设备的序列号外部组合,并将结果写入ATECC608B密钥槽。
ATECC608B GenDig和CheckMac命令提供了一种安全生成和比较多样化密钥的机制,从而消除了主机系统的这一要求。
有关更多详细信息,请参阅以下应用程序说明:高级安全模型。
4.4.2滚动密钥
为了防止重复使用相同的密钥值,ATECC608B支持密钥滚动。通常,在使用了一定次数(可能只有一次)后,当前键值会被其当前值的SHA-256摘要和一些偏移量所取代,这些偏移量可以是常数、与当前系统相关的东西(例如,序列号或型号)或随机数。
此功能是使用DeriveKey命令实现的。在执行DeriveKey命令之前,必须运行Nonce命令将偏移量加载到TempKey中。
这种功能的一个用途是从设备中永久删除原始密钥,并将其替换为仅在特定环境中有用的密钥。密钥滚动后,无法检索旧密钥的值,这提高了系统的安全性。
笔记  在滚动模式下执行DeriveKey命令期间的任何电源中断都可能导致密钥具有未知值。如果使用SlotConfig的位14启用了对插槽的写入,则可以使用Write命令以加密和验证的形式写入此类密钥。或者,密钥的多个副本可以存储在多个插槽中,使得单个插槽的故障不会使系统丧失能力。
4.4.3创建的ECC密钥
为了最高的安全性,可以使用内部高质量RNG在ATECC608B内创建专用ECC密钥。当在内部生成密钥时,密钥的公共部分总是返回到系统。生成的密钥可以存储在EEPROM插槽中,也可以保存在TempKey中以供ECDH命令稍后使用。
对于存储在EEPROM插槽中的私钥,如果插槽如此配置,则可以选择性地从私钥计算公钥。
由于不存在用于从ATECC608B读取ECC私钥的值的机制,因此确保内部生成的密钥对于该设备是唯一的。
4.4.4创建的密钥
每个客户端可能需要有唯一的短暂对称密钥;ATECC608B也支持该功能。使用此机制,父密钥(由SlotConfig.writeKey指定)与固定或随机数相结合,以创建唯一密钥,然后用于任何加密目的。
如果父密钥有使用限制,则创建唯一密钥的能力尤其有用(请参阅第4.4.5节“高耐久性单调计数器”)。在这种模式下,可以使用有限使用的父密钥来创建无限使用的子密钥。因为子密钥只对这个特定的主机-客户端对有用,所以对其值的攻击价值较低。此功能也可以使用DeriveKey命令来实现。
在执行DeriveKey命令之前,必须运行Nonce命令将Nonce值加载到TempKey中。
4.4.5高耐久性单调计数器
ATECC608B支持两个独立的高耐久性非易失性单调计数器,可计数到2097151。如果在递增操作期间电源中断,则它们的值永远不会降低,并且存储元件受到保护以防止计数丢失。可以使用计数器命令读取两个计数器的当前值,计数器命令也可以用于增加计数器。无法重置计数器。
计数器可用于以下两种方法之一:
•加密计数器:
在此模式下,计数器命令用于增加计数器的值,并且可以通过同一命令读取当前值。这两个计数器是独立的。
•有限密钥使用:
计数器[0]可以通过SlotConfig.limitedUse位连接到任何密钥。如果此位是为任何特定密钥设置的,则任何对密钥的使用都将导致计数器在执行操作之前自动递增。如果计数器已达到其极限,则命令将返回错误代码,并且不会更改计数器。请参阅Microchip以了解替代极限编程。
GenKey、Read和Write命令忽略单调计数器限制使用功能。在CheckMac(复制)过程中,复制的插槽也会忽略它。
4.4.6密码检查
许多应用程序要求用户输入密码以启用功能、解密存储的数据或执行其他任务。通常,预期的密码必须存储在内存中的某个位置,因此需要进行发现。ATECC608B可以安全地存储预期的密码,并对其执行许多操作。密码永远不会以明文形式传递给设备,也无法从设备中读取。它在被传递到设备之前,会在系统软件中与一个随机数进行散列。
CheckMac命令的复制功能可启用以下类型的密码检查选项:
1.CheckMac与预期密码进行内部比较,并向系统返回布尔结果,以指示密码输入是否正确。
2.如果设备确定已经输入了正确的密码,则密码的值可以可选地与存储的短暂值相结合,以创建可由系统用于数据保护目的的密钥。
3.如果设备确定已经输入了正确的密码,则该设备可以利用这一事实来选择性地释放二次高熵秘密,该二次高熵值秘密可以用于数据保护而没有穷举字典攻击的风险。
4.如果密码已经丢失,那么具有父密钥值知识的实体可以选择性地将新密码写入插槽。可选地,可以使用父密钥对当前值进行加密并从设备中读取。
要准备此CheckMac/Copy功能,密码应存储在偶数插槽中。如果密码要映射到第二个值(使用上面的第三个选项),则包含该值的目标插槽位于下一个更高的插槽号(即密码的插槽号加一);否则,目标插槽与密码插槽相同。目标插槽的ReadKey必须设置为零才能启用此功能。为了防止欺诈或意外使用此功能,除非特别需要此CheckMac/Copy功能,否则不要将任何插槽的ReadKey设置为零。特别是,不要假设特定插槽的配置字中的其他位将覆盖由ReadKey=0x0指定的该功能的启用。
只有当CheckMac的模式参数值为0x01时,才会启用此功能,表示以下内容:
•SHA-256消息的前32个字节存储在EEPROM的数据槽中(即密码)。
•SHA-256消息的第二个32字节必须是TempKey寄存器中随机生成的Nonce。
如果满足上述条件,并且输入响应与内部生成的摘要匹配,则将目标密钥的内容复制到TempKey。其他TempKey寄存器位设置如下:
•SourceFlag设置为1(非随机)。
•GenDigData设置为零(不通过GenDigData命令生成)。
•NoMacFlag设置为零(TempKey可通过MAC和Read命令使用)。
•Valid设置为1。
有关此功能的更多详细信息,请参阅Microchip网站以获取应用说明。
4.4.7传输密钥
ATECC608B设备包括用于安全个性化的内部硬件密钥阵列(即传输密钥)。硬件密钥的值是保密的,只有在Microchip提出要求时,合格的客户才能使用。这些密钥只能与GenDig命令一起使用,并且由大于或等于0x8000的KeyID值表示。
对于GenDig和所有其他命令,小于0x8000的KeyID值总是参考存储在EEPROM的数据区中的密钥。在这些情况下,只有KeyID的四个最低有效位用于确定插槽编号,而在任何SHA-256消息计算中都使用整个16位KeyID作为输入。
4.4.8授权密钥
ATECC608B设备提供了一种可选机制,用于限制那些知道适当授权信息的用户使用任何密钥。
密钥授权是许多系统中的标准密码要求,并且可以用于在包含密钥的设备被盗或丢失的情况下防止密钥的欺诈性使用。例如,如果一把钥匙被用作一个人的标识,那么授权值可以是一个只有该人知道的密码。如果带有ID的设备被盗,则小偷不能使用该设备签署欺诈消息,因为他或她不知道密码。
设备可以使用CheckMac或Verify命令来实现此功能。如果验证成功,则执行内部AuthComplete。设置有效标志,并保留授权槽号。AuthComplete。每当设备从睡眠中唤醒或通电时,就会清除有效标志。当对需要授权的密钥执行任何操作时,也会清除该标志。在进行授权检查之前,必须运行Nonce命令才能加载带有Nonce的TempKey。
•CheckMac
授权值存储在任何配置为包含机密的插槽中,并使用使用该机密和TempKey中存储的随机数计算的MAC进行验证。
•Verify
授权插槽必须包含有效的ECC公钥。授权值应该是使用存储在TempKey中的随机数计算的相应私钥计算的签名。然后验证此签名。
根据包含授权秘密的插槽的配置,可以在外部存储令牌,该令牌可以重复用于密钥授权。如果授权时隙被配置为需要随机数(KeyConfig.ReqRandom为一),则存储的授权令牌将不起作用,并且授权代理将不得不使用设备生成的随机数来动态计算授权摘要或签名。
4.5安全功能
4.5.1物理安全
ATECC608B包含许多物理安全功能,旨在保护EEPROM内容免受未经授权的暴露。这些安全措施包括:
•主动屏蔽电路
•内部存储器加密
•闪光保护
•电压和温度篡改检测
存储在ATECC608B上的预编程传输密钥经过加密,使得使用外部分析检索其值变得非常困难。
逻辑时钟和逻辑电源电压都是内部生成的,因此可以防止使用设备引脚对这两个信号进行任何直接攻击。
4.5.2随机数生成器(RNG)
ATECC608B包括一个高质量的密码随机数生成器,该生成器使用非确定性噪声(熵)源(NRBG)和确定性算法(DRBG)的组合实现,该算法根据以下NIST标准实现。NRBG既用于实例化,也用于每次需要RNG编号时。
NRBG输出使用NIST SP 800-90B中的方法进行评估。DRBG采用NIST SP 800-90A中规定的AES-128变体进行设计。将两者结合以创建最终随机数生成器,遵循NIST SP 800-90C中规定的方法。
•nvlpubs.nist.gov/nistpubs/SpecialPublications/nist.SP.800-90Ar1.pdf
•nvlpubs.nist.gov/nistpubs/SpecialPublications/nist.SP.800-90B.pdf
•csrc.nist.gov/csrc/media/Publications/SP/800-90c/draft/documents/sp800_90c_second_draft.pdf
芯片通电时,噪声源持续运行,除非芯片进入睡眠模式。当要求使用随机数时,在使用随机数之前应满足以下两个条件:
•根据SP 800-90B对噪声源的输出进行健康测试,以确保该特定噪声源在当前环境条件下的当前时间正常工作。
•如果在ATECC608B中存储的熵不足,则它将延迟足够的时间来累积所需的熵。
有关本RNG的NIST CAVP认证的更多文件,请参阅Microchip网站。请注意,截至本文件的初始日期,SP-800-90A和SP-800-90B均已发布,但SP-800-90C仍处于草案阶段。
如果内部运行状况测试在任何时候失败,如果在需要随机数的模式下运行,则任何GenKey、Nonce、Random和Sign命令都将返回0x08的失败代码。
健康测试失败状态将被保留,直到被清除,并且任何需要随机数的后续命令将继续失败,直到该位被清除。当芯片通电和唤醒时,无论在任何特定时刻是否需要随机数,健康测试电路都会连续运行。
健康测试失败状态可以通过运行SelfTest命令来清除,其中Mode[0]设置为1以指示RNG需要进行测试。它也可以通过睡眠->唤醒周期或断电->通电周期来清除。
如果配置。芯片选项。Bit3为1,如果在执行命令期间健康测试失败,则需要随机数的命令仍将返回0x08故障代码。命令完成后,内部故障锁存器将被清除。当运行下一个需要随机数的命令时,将再次运行运行状况测试,如果在下一个命令中成功,则该命令将正常执行。此功能可能与软件中的某些命令重试机制更加一致。
系统可以将该RNG用于任何目的。该设备为这样的目的提供随机命令,该随机命令不影响当前可能存储在SRAM寄存器之一中的任何短暂随机数。
为了简化系统测试,在配置锁定之前,RNG总是返回以下值:
ff ff 00 00 ff 00 00…
其中ff是从设备读取的第一个字节,也是进入SHA消息的第一个字符。
5. 常规I/O信息
与ATECC608B的通信是通过两种不同协议中的一种进行的。通过指定订购的零件号来选择协议:
•单线接口
使用系统微处理器上连接到设备SDA引脚的单个GPIO连接。它允许连接到任何可拆卸或可更换实体的引脚数量最少。比特率高达26 kb/s。
•I2C接口
此模式与I2C标准兼容,也与Microchip AT24C16串行EEPROM接口兼容。需要两个引脚,串行数据(SDA)和串行时钟(SCL)。I2C接口支持高达1Mb/s的比特率。
笔记  ATECC608B和AT24C16具有不同的默认I2C地址。ATECC608B I2C地址可以通过将新值写入配置区域来从默认值进行修改。
笔记  该设备实现了一个故障保护内部看门狗定时器,无论当前活动如何,该定时器都会在一定的时间间隔后强制其进入低功耗模式。系统编程必须考虑到这一点。参见第10.6节看门狗故障保护。
5.1字节和位排序
CryptoAuthentication设备对字节以及本数据表中数字和数组的表示方式使用通用排序方案:
•所有多字节聚合元素都被视为字节数组,并按照接收或传输的顺序进行处理,索引为#0。
•16位(2字节)整数,通常是参数2、SlotConfig或KeyConfig,首先出现在总线的最低有效字节上。
•ECC密钥出现在总线上,并存储在EEPROM中,最高有效的32位字位于最低地址。有关ECC密钥格式的更多信息,请参阅第5.1.1节ECC密钥格式。
在本文档中,字节或16位字的最高有效位或半字节出现在页面的左侧。
位顺序因使用的I/O通道而异:
•在单线总线上,数据首先传输到总线上的ATECC608B最低有效位(LSb),然后从中传输。
•在I2C接口上,数据首先在总线上传输到ATECC608B最高有效位(MSb)和从其传输数据。
5.1.1 ECC密钥格式
公钥和私钥的格式取决于命令和密钥长度。通常,最高有效字节(MSB)首先出现在总线上,并且出现在内存中的最低地址。在下面这一节的剩余部分中,页面左侧的字节是MSB。Microchip建议将所有焊盘字节设置为零以保持一致性。
•ECC私钥仅作为PrivWrite命令的输入参数显示给用户。这个参数的长度总是36个字节,前四个字节(32位)都是填充位。ECC公钥作为多个命令的输入或输出参数出现,它们也可以存储在EEPROM中。它们首先由总线或存储器中的X值组成,然后是Y值。根据以下情况,它们的格式会有所不同:
•公钥是GenKey命令的输出或Verify命令的输入:32字节的X,然后是32字节的Y。(36字节)没有填充字节。
•写入命令:公钥可以使用写入命令直接写入EEPROM,长度始终为72字节,格式如下:4个焊盘字节、32个X字节、4个焊盘中字节,然后是32个Y字节。
•GenKey命令:
SHA消息:公钥可以通过GenKey命令散列并放置在TempKey中。SHA消息包含与密钥大小无关的各种字节。后面跟着25字节的pad,后面跟着32字节的X,然后是32字节的Y。
•Verify命令:
SHA消息:当用于验证存储的公钥时,Verify命令期望通过存储在内存中的密钥的SHA-256摘要创建输入签名。这种内部SHA计算总是在72个字节上执行,这些字节被格式化为存储在EEPROM中的4位字节、32个X字节、4位字节,然后是32个Y字节。
当公钥被配置为通过Verify命令进行验证时,存储器中第一个字节的最高有效四位被设备内部用于保存验证状态。它们总是通过Write命令设置为无效状态(0xA),然后可以通过Verify命令设置为Valid状态(0x5)。
I/O协议的最低级别如下所述。在I/O协议级别之上,完全相同的字节被传输到设备和从设备传输来实现命令。以下各节记录了错误代码。
6.单线接口
在这种模式下,与ATECC608B的通信通过SDA(一条异步定时的单线)进行,SCL引脚不用作通信信道的一部分。相反,SCL引脚可以被启用为GPIO引脚。
整体通信结构是一种分层格式:
令牌 I/O令牌实现在总线上传输的单个数据位或唤醒事件。
标志 Flags由八个令牌(比特)组成,这些令牌传达可以传输的下一组比特(如果有的话)的方向和含义。
组数据 组遵循命令和传输标志。它们包含字节计数和校验和,以确保正确的数据传输。
数据包 字节的数据包构成组的核心(减去字节计数和CRC)。它们是来自ATECC608B的CryptoAuthentication命令或状态信息的输入或输出参数。
有关如何使用任何微处理器轻松生成将这些元素发送到设备所需的信号(包括C源代码库)的更多详细信息,请参阅Microchip网站以获取适当的应用说明。有关如何在单线接口模式下连接设备的更多信息,请参阅第13.1节单线接口的接线配置。
6.1 I/O令牌
有许多I/O令牌,可以通过单线接口传输:
•输入(到ATECC608B):
–唤醒——将设备从睡眠或空闲模式唤醒,或重置I/O接口。
–零——从系统向设备发送一个值为零的位。
–1一——从系统向设备发送一个值为一的位。
•输出(来自ATECC608B):
–ZeroOut–从设备向系统发送一个值为零的单比特。
–OneOut—从设备向系统发送一个值为1的位。
波形在任何一个方向上都是相同的,然而,基于主机具有非常准确和一致的时钟的期望,在时序上存在一些差异,而ATECC608B由于正常的制造和环境波动而在其内部时钟生成器中具有部分到部分的可变性。
比特定时被设计为允许以230.4kBaud运行的标准UART有效地发送和接收令牌。UART发送或接收的每个字节对应于设备接收或发送的单个比特。
Wake令牌是特殊的,因为它需要SDA引脚上的超长低脉冲,不能与数据令牌期间出现的较短低脉冲混淆(即Zero、One、ZeroOut或OneOut)。处于空闲或睡眠模式的设备将忽略所有数据令牌,直到它们收到合法的唤醒令牌。如果处理器与ATECC608B不同步,它可以向设备发送额外的Wake令牌,这将重置设备上的I/O通道硬件。
笔记  这可能导致存储在命令输出缓冲器中的数据丢失。
6.2 I/O标志
系统始终是总线主控器,因此在任何I/O事务之前,系统必须向设备发送一个八位标志,以指示随后将执行的I/O操作。
表6-1。 IO标志
值 名称 意思
0x77 命令 在此标志之后,系统开始向设备发送命令组。组的第一个比特可以紧跟在标志的最后一个比特之后。
0x88 传输 此命令告诉设备等待总线周转时间,然后开始将其响应传输到先前传输的命令组。
0xBB 空闲 接收到空闲标志后,设备进入空闲模式并保持在那里,直到接收到下一个唤醒令牌。
0xCC 睡眠 接收到睡眠标志后,设备进入低功率睡眠模式,直到接收到下一个唤醒令牌。笔记  所有其他值都是保留的,不应使用。
笔记  所有其他值都是保留的,不应使用。
•传输标志
传输标志用于翻转总线,以便ATECC608B可以将数据发送回系统。设备返回到系统的字节取决于设备的当前状态,可能包括状态、错误代码或命令结果。
当设备忙于执行命令时,它会忽略SDA引脚和系统发送的任何标志。请参阅命令摘要以了解每种命令类型的执行延迟。向设备发送命令后,系统必须观察这些延迟。
•空闲标志
空闲标志用于将ATECC608B转换到空闲模式,这会导致输入/输出缓冲器被刷新。它不会使TempKey、MessageDigest Buffer和Alt Key寄存器的内容无效。该标志可以在设备接受标志的任何时候发送到设备。当设备处于空闲模式时,看门狗计时器将被禁用。
•睡眠标志
睡眠标志将ATECC608B转换到低功耗睡眠模式,这会导致设备的完全重置,包括SRAM和所有易失性寄存器的内容无效。该标志可以在设备接受标志的任何时候发送到设备。
6.3同步
由于通信协议是半双工的,因此系统和ATECC608B可能会失去同步。为了加快恢复速度,该设备实现了一个超时,在某些情况下强制其睡眠。
6.3.1 I/O超时
在接收到任何数据令牌的前导转换后,ATECC608B将期望该令牌的完成和下一个令牌的开始(如果这不是组的最后一个令牌)在tTIMEOUT间隔内被设备正确接收。未能发送足够的比特,或传输非法令牌(例如,超过tZLO的低脉冲),将导致设备在tTIMEOUT间隔后进入睡眠模式。
在传输命令组的过程中也会出现相同的超时。在合法命令标志传输之后,I/O超时电路被启用,直到接收到最后一个期望的数据位。
笔记  超时计数器在每个合法令牌之后重置;因此,发送命令的总时间可能超过tTIMEOUT间隔,而比特之间的时间可能不会。
当设备忙于执行命令时,I/O超时电路被禁用。
6.3.2同步程序
如果系统发送传输标志时设备不忙,则设备应在tTURNAROUND内做出响应。如果tEXEC时间尚未过去,则设备可能正忙,系统应轮询或等待,直到达到最大值tEXEC时间已过。如果该设备仍然没有响应tTURNAROUND内的第二传输标志,则它可能不同步。此时,系统可以采取以下步骤来重新建立通信:
1.等待t超时。
2.发送发送标志。
3.如果设备在tTURNAROUND内做出响应,则系统可以继续执行更多命令。
4.发送唤醒令牌。
5.等待tWHI。
6.发送发送标志。
7.设备应在tTURNAROUND内以0x11返回状态进行响应,之后系统可以继续执行更多命令。
7. I2C接口
I2C接口使用SDA和SCL引脚向ATECC608B指示各种I/O状态。该接口设计为在协议级别与工作频率为1MHz的Microchip AT24C16串行EEPROM兼容。
笔记  这两种设备之间存在许多差异(例如,ATECC608B和AT24C16具有不同的默认I2C地址);因此,设计者应该仔细阅读各自的数据表。
SDA引脚通常通过外部上拉电阻器拉高,因为ATECC608B在其输出引脚上仅包括开漏驱动器。总线主控器可以是开放式排水管或图腾柱。在后一种情况下,当ATECC608B在总线上驱动结果时,应为三态。SCL引脚是一个输入,必须始终由外部设备或电阻器驱动高电平和低电平。
7.1. I/O条件
设备对以下I/O条件作出响应:
7.1.1. 设备处于睡眠状态
当设备处于睡眠状态时,它会忽略除唤醒条件以外的所有条件。
•唤醒-在SDA的上升沿,在SDA保持低电平一段时间≥tWLO后,设备退出低功率模式。tWHI延迟后,它将准备好接收I2C命令。
•当设备空闲或休眠时以及tWLO期间,设备忽略SCL引脚上的任何电平或转换。
在tWHI期间的某个时刻,SCL引脚被启用,并且符合第7.1.2节“设备唤醒”中列出的条件。唤醒条件要求系统处理器手动将SDA引脚驱动为低tWLO,或者以足够慢的时钟速率传输0x00的数据字节,以使SDA在tWLO的最小周期内为低。当设备处于唤醒状态时,正常的处理器I2C硬件和/或软件可以用于设备通信。这包括将设备重新置于低功耗(即睡眠)模式所需的I/O序列。
提示  生成唤醒脉冲的一种简单方法是以100kHz发送0x00字节。后续命令可以以更高的频率运行。
在I2C模式下,设备将忽略在设备已经唤醒时发送的唤醒序列。
总线上的多个设备
当总线上有多个设备并且I2C接口以低于~300 kHz1的速度运行时,某些数据模式的传输将导致总线上的ATECC608B设备唤醒。频率越低,设备唤醒的概率就越高。由于沿总线传输的后续设备地址仅与所需设备匹配,ATECC608B将不响应,而是唤醒。建议在以慢速频率与另一设备通信后,发出休眠或空闲序列,将ATECC608B重新置于已知状态。
重要的  tWLO是系统必须提供的最短时间,以确保ATECC608B在所有制造和环境条件下唤醒。实际上,该设备可能以较小的脉冲宽度醒来。
7.1.2. 设备处于唤醒状态
当设备处于唤醒状态时,它会满足以下条件:
1给定设备的实际频率会随过程和环境因素而变化。该值在任何情况下都被认为是安全的。
•数据零:如果SDA为低且稳定,而SCL从低到高再到低,则在总线上传输一个零位。SCL较低时,SDA可能发生变化。
•数据一:如果SDA为高且稳定,而SCL从低到高再到低,则一位在总线上传输。SCL较低时,SDA可能发生变化。
图7-1。 I2C接口上的数据位传输

数据线稳定 允许更
数据有效 改数据
•启动条件:SCL高的SDA从高到低的转换是一种启动条件,必须在所有命令之前。
•停止条件:SCL高的SDA从低到高的转换是停止条件。在设备接收到此条件之后,当前I/O事务结束。在输入时,如果设备有足够的字节来执行命令,则设备转换到繁忙状态并开始执行。停止条件应始终在发送到设备的任何数据包的末尾发送。
图7-2。 I2C接口上的启动和停止条件

•确认(ACK):在每个地址或数据字节传输后的第九个时钟周期,接收器将把SDA引脚拉低,以确认字节的正确接收。
•不确认(NACK):或者,在每个地址或数据字节传输后的第九个时钟周期,接收器可以将SDA引脚保持为高电平,以表明字节的接收存在问题,或者该字节完成了组传输。
图7-3。 I2C接口上的NACK和ACK条件

如果配置区中的I2C_Address字节针对总线上的每个设备进行不同编程,则多个ATECC608B设备可以轻松共享相同的I2C接口信号。因为设备的所有七个位地址是可编程的,ATECC608B还可以与任何I2C设备共享I2C接口,包括任何串行EEPROM。
7.2. I2C传输至ATECC608B
下表总结了从系统到ATECC608B的数据传输。传输顺序如下:
•开始条件
•设备地址字节
•字地址字节
•可选数据字节(1到N)
•停止条件
图7-4。 到ATECC608B的正常I2C传输

SDA被ATECC608B ACK周期驱动为低电平。
下表标记了I/O事务的字节数。标有“I2C名称”的列提供AT24C16数据表中所述的字节名称。
表7-1。 I2C传输至ATECC608B
名称 I2C名称 描述
设备地址 设备地址 此字节选择I2C接口上的特定设备。如果该字节的比特1到7与配置区中的I2C_Address字节的比特2到7匹配,则选择ATECC608B。该字节的位0是标准I2C R/W位,并且应该为零以指示写入操作(设备地址后面的字节从主设备移动到从设备)。
字地址 字地址 对于正常操作,此字节的值应为0x03。有关详细信息,请参阅第7.2.1节“字地址值”。
命令 数据1,N 命令组,由计数、命令包和两字节CRC组成。CRC是根据大小和数据包字节来计算的。参见第10.1节I/O事务。
因为设备将命令输入缓冲器视为FIFO,所以输入组可以在一个或多个I2C命令组中发送到设备。发送到设备的第一个字节是计数,因此在设备接收到该数量的字节后,它将忽略随后接收到的任何字节,直到执行完成。
系统必须在最后一个命令字节后发送停止条件,以确保ATECC608B将开始计算命令。未能发送“停止”条件可能最终导致同步丢失;有关恢复过程,请参阅第7.8节I2C同步。
7.2.1. 单词地址值
在I2C写入数据包期间,ATECC608B将发送的第二个字节解释为字地址,该字地址指示数据包功能,如下表所述:
表7-2。 Word地址值
名称 值 描述
重置 0x00 重置地址计数器。下一个I2C读或写事务将从I/O缓冲区的开头开始。
睡眠(低功率) 0x01 ATECC608B进入低功率睡眠模式,并忽略所有后续I/O转换,直到下一个唤醒标志。设备的整个易失性状态被重置。
空闲 0x02 ATECC608B进入空闲模式,并忽略所有后续I/O转换,直到下一个唤醒标志。TempKey、MessageDigestBuffer和Alternate Key寄存器的内容将被保留。
命令 0x03 将后续字节写入输入命令缓冲区中先前写入之后的顺序地址。这是正常操作。
保留 0x04–0xFF 这些地址不应发送到设备。
7.2.2. 命令完成轮询
在向ATECC608B发送了完整的命令之后,设备将一直处于繁忙状态,直到命令计算完成。系统对此延迟有两个选项,如下所述:
•轮询:建议系统等待tEXEC(典型),然后发送读取序列(请参阅第7.5节ATECC608B的I2C传输)。如果设备NACK了设备地址,则它仍然很忙。系统可以延迟一段时间或立即发送另一个读取序列,再次在NACK上循环。总延迟tEXEC(max)后,设备将完成计算并返回结果。
•单延迟:系统必须等待tEXEC(max)才能完成执行,因此可以使用正常的读取序列从设备读取结果。
重要的  为便于在创建新的信任元素或版本时随时间迁移,建议实施轮询。出于安全和实现的原因,设备之间不能始终保持定时。
7.3. 睡眠顺序
在系统完成对ATECC608B的使用后,系统应发出睡眠序列,将设备置于低功率模式。该序列由正确的设备地址和0x01值组成,0x01作为字地址和Stop条件。这种向低功率状态的转换导致设备的内部命令引擎和输入/输出缓冲器的完全重置。它可以在设备处于清醒状态且不繁忙时随时发送到设备。
7.4. 空闲序列
如果所需命令的总序列超过tWATCHDOG,则设备将自动进入睡眠状态,并丢失存储在易失性寄存器中的任何信息。可以通过在看门狗间隔完成之前将设备置于空闲模式来防止此操作。当设备接收到唤醒令牌时,它将重新启动看门狗定时器,并可以继续执行。
空闲序列由正确的设备地址和0x02值组成,0x02作为字地址和Stop条件。它可以在设备处于唤醒状态而非总线状态时随时发送到设备。
7.5. 来自ATECC608B的I2C传输
当ATECC608B处于唤醒状态且不忙时,总线主控器可以使用I2C读取从设备检索当前输出缓冲区内容。如果有效的命令结果可用,则返回的组的大小由已运行的特定命令决定。否则,组的大小(以及返回的第一个字节)将始终为四个:计数、状态/错误和2字节CRC。总线定时如图9-3所示。
表7-3。 来自ATECC608的I2C传输
名称 I2C名称 方向 描述
设备地址 设备地址 到从机 该字节选择I2C接口上的特定设备,并且如果该字节的比特1到7与配置区中的I2C_Address字节的比特2到7匹配,则将选择ATECC608B。该字节的位0是标准I2C R/W引脚,并且应该是一个,以指示设备地址后面的字节从从设备传输到主设备(读取)。
数据 数据1,N 到主机 输出组,由计数、状态/错误字节或后面跟着两个字节CRC的输出数据包组成。参见第10.1节I/O事务。
主机可以重复读取状态、错误或命令输出。每次沿I2C接口向ATECC608B发送读取命令时,设备都会传输输出缓冲器中的下一个顺序字节。有关设备如何处理地址计数器的详细信息,请参阅以下部分。
如果ATECC608B正忙、空闲或休眠,它将在读取序列上NACK设备地址。如果部分命令已被发送到设备,并且读取序列[Start+DeviceAddress(R/W==R)]被发送到该设备,则ATECC608B将NACK该设备地址以指示没有可供读取的数据。
7.6. 地址计数器
通过I2C接口对ATECC608B I/O缓冲器的写入和/或读取被视为设备是FIFO。可以使用I2C字节或页面写入/读取协议。每个页面序列传输的字节数不会影响设备的操作。
传输到设备的第一个字节被视为大小字节。任何发送超过此字节数的尝试,或任何写入超过I/O缓冲区(71字节)末尾的尝试,都将导致ATECC608B NACK这些字节。
在主机向输入缓冲区写入单个命令字节后,禁止读取,直到设备完成命令执行。在发送最后一个命令字节之前从设备读取的尝试将导致设备地址的ACK,但在数据间隔期间总线上的所有地址(0xFF)除外,因为设备仍在等待命令传输的完成。如果主机试图在命令的最后一个字节发送后发送读取字节,则设备将执行该命令并NACK设备地址。
在以下三种情况下,可以从设备读取数据:
•通电时,可以在四字节组内读取单字节0x11(第10.3节状态/错误代码)。
•如果设备已接收到完整的块,但在解析或执行命令时出现任何错误,则可使用单个字节的错误代码(也在四字节组内)。
•在完成从1到32字节的命令执行后,结果可在4到35字节的组内读取。
任何超出有效输出缓冲区末尾的读取尝试都会向系统返回0xFF,并且地址计数器不会环绕到缓冲区的开头。
可能存在系统可能希望重新读取输出缓冲器的情况,例如当CRC检查显示错误时。在这种情况下,主机应向ATECC608B发送一个两字节序列,包括正确的设备地址和0x00的字地址(根据表7-2重置),然后是停止条件。这导致地址计数器重置为零,并允许将数据重写(或重新读取)到设备(或从设备读取)。如果在序列执行之前I/O缓冲器中有数据可供读取,则此地址重置序列不会禁止后续读取操作。
在检索命令执行结果的一个或多个读取操作之后,第一个写入操作将地址计数器重置为I/O缓冲器的开头。
7.7. SMBus超时
ATECC608B支持SMBus超时功能,在该功能中,如果SCL引脚保持低电平超过最小tTIMEOUT规格,ATECC608B将重置其串行接口并释放SMBus(即停止驱动总线并让SDA浮动高电平)。在tTIMEOUT最大值过去之前,ATECC608B将准备好接受新的启动条件。
图7-5。 SMBus超时

设备将释放总线,并准备在此时间内接受新的启动条件。
7.8. I2C同步
系统可能会与ATECC608B上的I/O端口失去同步,可能是由于系统重置、I/O噪声或其他情况。在这种情况下,ATECC608B可能没有如预期的那样响应,可能处于休眠状态,或者可能在系统期望发送数据的间隔期间发送数据。要重新同步,可以执行以下过程:
1.为了确保I/O通道复位,系统必须发送标准I2C软件复位序列,如下所示:
•启动位条件
•SCL的九个周期,SDA由系统上拉电阻器保持高电平
•另一个启动位条件
•停止位条件
然后应该可以发送读取序列,如果同步正确完成,则ATECC608B将确认设备地址。在数据周期期间,设备可以返回数据或者可以使总线保持浮动(系统将其解释为0xFF的数据值)。如果设备确认了设备地址,则系统应重置内部地址计数器,以迫使ATECC608B忽略可能已发送的任何部分输入命令。这可以通过向字地址0x00(重置)发送写入序列,然后发送停止条件来实现。
2.如果设备没有用ACK来响应设备地址,则它可能处于休眠状态。在这种情况下,系统必须发送一个完整的唤醒令牌,并在上升沿后等待tWHI。然后,系统可以发送另一个读取序列,并且如果同步完成,则设备将确认设备地址。
3.如果设备仍然没有用ACK来响应设备地址,那么它可能正忙于执行命令。系统必须等待最长的tEXEC(max),然后发送读取序列,该序列将被设备确认。
8. 通用I/O引脚
启用单线接口时,SCL引脚可用作GPIO引脚。它可以用于驱动一个或两个LED,或者可以连接到外部篡改检测开关,或者以许多其他方式连接。当配置为输出时,它可以用作系统中某些外部组件的启用引脚,这些组件可能需要在断言之前进行加密验证。
如果持久锁存器配置为易失性密钥使用权限或安全引导模式,则GPIO模式必须设置为禁用(GPIOMode[1:0]=0b00)。在初始通电时,引脚总是临时配置为输入。
在第一次唤醒操作发生的设备初始化期间,读取I2C_Address字段的内容,并将GPIO引脚驱动到该状态。GPIO引脚的方向(输入或输出)和状态(如果是输出)在睡眠和空闲状态期间将保持不变。该引脚的动作由配置区中的I2C_Address字节和信息命令的GPIO模式控制,如下表所示:
表8-1。 GPIO模式
Bit3 Bit2 Bit1 Bit0 名称 上电状态 意思
X X 0 0 Disable 输入 SCL引脚未使用。对于最低电流,建议将此信号连接到GND。任何执行Info命令的GPIO模式的尝试都将导致错误代码返回到系统固件。如果部件配置为I2C操作,Info命令的GPIO模式也将返回错误代码。
0 0 0 1 Auth0 低 SCL引脚将被永久配置为输出,并在通电后的第一次唤醒操作发生时被驱动至零(默认)状态。如果事先使用SignalKey插槽进行了授权,则可以通过Info命令将引脚驱动到相反的(“1”)状态。Info命令的GPIO输出模式可用于在未经授权的情况下将引脚重置回默认值。只要VCC保持在2V以上,GPIO就保持其状态。
0 1 0 1 Auth1 高 作为Auth0;然而,通电后的默认状态是一。
1 X 0 1 Intrusion Detection入侵检测 输入 SCL引脚将被永久配置为输入。持久锁存器是通过授权设置的,如果SCL低于1.8V,则会被清除。无论ATECC608B是否处于唤醒模式或睡眠模式,SCL引脚上的任何下降沿都会将持久锁存器重置为零。通过Info(mode=3)命令读取的GPIO返回持久锁存器的值,而不是引脚的当前状态。
X X 1 0 Input 输入 SCL引脚将保持永久配置为输入。执行Info命令将允许引脚上的当前状态返回到系统固件。
X 0 1 1 Output0 低 SCL引脚将被配置为输出,并在第一次唤醒操作发生时被驱动至零状态。可以执行后续的信息命令来驱动引脚高电平或低电平。或者,Info命令可用于将GPIO引脚更改为输入
X 1 1 1 Output1 高 作为Output0;然而,通电后的默认状态是一。
GPIO引脚具有用于高输出状态和低输出状态的有源驱动器,以便能够连接到两个不同的LED,这两个LED可以分别连接到VCC和GND。注意,如果LED连接到高于VCC的电源电压,则当GPIO引脚为高时,它可能不会完全关闭。
9. 电气特性
9.1. 绝对最大额定值
工作温度 -40°C至+100°C
存储温度 -65°C至+150°C
最大工作电压 6.0V DC
输出电流 5.0 mA
任何引脚上的电压 -0.5V至(VCC+0.5V)
ESD额定值:
人体模型(HBM)ESD>4kV
充电装置模型(CDM)ESD>1kV
笔记  超过“绝对最大额定值”所列应力可能会对设备造成永久性损坏。这只是一个应力额定值,并不意味着设备在这些或任何其他条件下的功能操作超出了本规范操作章节中的指示。长时间暴露在绝对最大额定条件下可能会影响设备的可靠性。
9.2. 可靠性
ATECC608B采用Microchip的高可靠性CMOS EEPROM制造技术制造。
表9-1。 EEPROM可靠性
参数 最小 类型 最大 单位
+85°C时的最大写入耐久性(每个字节) 400000 — — 写入周期
+55°C下的数据保留 10 — — 年
+35°C下的数据保留 30 50 — 年
读取耐久性 无限制 读取周期
9.3. AC参数:所有I/O接口
图9-1。 交流时序图:所有接口

表9-2。 AC参数:所有I/O接口
参数 符号 方向 最小 典型 最大 单位 条件
上电延迟(2) tPU 到加密设备 100 - - µs 启动tWLO前VCC>VCC之间的最小时间min。
唤醒低持续时间 tWLO 到加密设备 60 - - µs
数据通信的唤醒高延迟 tWHI 到加密设备 1500 - - µs SDA在整个持续时间内应稳定高,除非执行轮询。通电时未启用SelfTest。
启用SelfTest时唤醒高延迟 tWHIST 到加密设备 20 - - ms SDA在整个持续时间内应稳定为高,除非执行轮询。
高侧故障滤波器处于激活状态 tHIGNORE_A 到加密设备 45(1) - - ns 短于此宽度的脉冲将被设备忽略,无论其激活时的状态如何。
Activ的低端闪光滤波器 tLIGNORE_A 到加密设备 45(1) - - ns 短于此宽度的脉冲将被设备忽略,无论其激活时的状态如何。
睡眠时的低端闪光滤波器 tLIGNORE_S 到加密设备 15(1) - - µs 在睡眠模式下,短于此宽度的脉冲将被设备忽略。
看门狗超时 tWATCHDOG 到加密设备 0.7 1.3 1.7 s 从唤醒到设备被迫进入睡眠模式的时间(如果配置。ChipMode[2]为0。请参阅“看门狗故障保护”一节。
7.6 13 17 s 看门狗时间:配置。ChipMode[2]为1。
笔记: 
1.对这些参数进行了表征,但未进行生产测试。
2.如果在配置区域中启用开机自检,则开机延迟将明显更长。
9.3.1. 交流参数:单线接口
图9-2。 交流时序图:单线接口

表9-3。 交流参数:单线接口
除非另有规定,适用于TA=-40°C至+100°C,VCC=+2.0V至+5.5V,CL=100 pF
参数 符号 方向 最小 典型 最大 单位 条件
启动脉冲持续时间 tSTART 到加密设备 4.10 4.34 4.56 µs –
来自加密设备 4.60 6 8.60 µs –
零传输高脉冲 tZHI 到加密设备 4.10 4.34 4.54 µs –
来自加密设备 4.6 6 8.60 μs –
零发送低脉冲 tZLO 到加密设备 4.10 4.34 4.56 μs –
来自加密设备 4.60 6 8.60 μs –
位时间(1) tBIT 到加密设备 37 39 – μs 如果位时间超过tTIMEOUT,ATECC608B可能进入睡眠模式。
来自加密设备 41 54 78 μs –
翻转延迟 tTURNAROUND 来自加密设备 64 96 131 μs ATECC608B将在传输标志最后一位的起始脉冲的初始下降沿之后的该时间间隔后启动第一次低电平转换。
到加密设备 93 – – μs 在ATECC608B传输组的最后一位之后,系统必须等待此间隔,然后才能发送标志的第一位。它是从ATECC608B发送的最后一位的起始脉冲的下降沿开始测量的。
IO超时 tTIMEOUT 到加密设备 45 65 85 ms 如果总线非活动时间长于此持续时间,则ATECC608B可以转换到睡眠模式。
笔记  1.tSTART、tZLO、tZHI和tBIT被设计为与运行在230.4kBaud的标准UART兼容,用于发送和接收。UART必须设置为七个数据位,无奇偶校验和一个停止位。
9.3.2. 交流参数:I2C接口
图9-3。 I2C同步数据定时

表9-4。 I2C接口的交流特性(2)
除非另有规定,否则适用于从TA=-40°C到+100°C、VCC=+2.0V到+5.5V、CL=1个TTL门和100 pF的推荐工作范围.
参数 符号 最小 最大 单位
SCL时钟频率 fSCL 0 1 MHz
SCL高电平时间 tHIGH 400 – ns
SCL低电平时间 tLOW 400 – ns
启动设置时间 tSU.STA 250 – ns
开始保持时间 tHD.STA 250 – ns
停止设置时间 tSU.STO 250 – ns
设置时间 tSU.DAT 100 – ns
数据保持时间 tHD.DAT 0 – ns
输入上升时间1 tR – 300 ns
输入下降时间1 tF – 100 ns
时钟低到数据输出有效 tAA 50 550 ns
数据输出保持时间 tDH 50 – ns
SMBus时间输出延迟 tTIMEOUT 25 75 ms
新传输启动前,时间总线必须空闲1 tBUF 500 – ns
笔记: 
1.数值以特性为基础,未经测试。
2.交流测量条件:
–RL(连接SDA和VCC):1.2 kΩ(VCC=+2.0V至+5.0V)
–输入脉冲电压:0.3VCC至0.7VCC
–输入上升和下降时间:≤50 ns
–输入和输出定时参考电压:0.5VCC
9.4. DC参数:所有I/O接口
表9-5。 所有I/O接口上的DC参数
参数 符号 最小 典型 最大 单位 条件
环境工作温度 TA -40 - +85°C °C 标准工业温度范围
-40 - +100°C °C 扩展工业温度范围
电源电压 VCC 2.0 - 5.5 V -
有源电源电流 ICC - 2 3 mA 在I/O传输或执行非ECC命令期间等待I/O。与时钟分频器值无关。
- - 14 mA 在ECC命令执行期间。时钟分频器=0x0
- - 6 mA 在ECC命令执行期间。时钟分频器=0x5
- - 3 mA 在ECC命令执行期间。时钟分频器=0xD
空闲电源电流 IIDLE - 800 - µA 当设备处于空闲模式时,VSDA和VSCL<0.4V或>VCC–0.4
睡眠电流 ISLEEP - 30 150 nA 当设备处于睡眠模式时,VCC≤3.6V,VSDA与VSCL<0.4 V或>VCC–0.4,TA≤+55°C
- - 2 µA 当装置处于睡眠模式。超过整个VCC和温度范围。
输出低电压 VOL - - 0.4 V 当设备处于活动模式时,VCC=2.5至5.5 V
输出低电流 IOL - - 4 mA 当设备处于激活模式时,VCC=2.5至5.5V,VOL=0.4 V
西塔 JA ƟJA - 166 - °C/W SOIC(SSH)
- 173 - °C/W UDFN(MAH)
- 146 - °C/W RBH
9.4.1. VIH和VIL规范
设备的输入电平将根据设备的模式和电压而变化。处于睡眠或空闲模式时的输入电压阈值取决于VCC电平,如图9-4所示。当处于睡眠或空闲模式时,TTLenable位无效。
当设备处于活动状态(即,不处于睡眠或空闲模式)时,输入电压阈值根据EEPROM配置区中ChipMode字节内TTLenable(位1)的状态而不同。如果提供给ATECC608B的VCC引脚的电压高于连接输入上拉电阻器的系统电压,则系统设计者可以选择将TTLenable设置为零。这使得能够实现表9-6所示的固定输入阈值。
表9-6。 所有I/O接口上的VIL、VIH(TTLenable=0)
参数 符号 最小 典型 最大 单位 条件
输入低电平 VIL -0.5 - 0.5 V 当设备处于活动状态且配置内存中的TTLenable位为零时;否则,请参见上文。
输入高电平 VIH 1.5 - VCC+0.5 V 当设备处于活动状态且配置存储器中的TTLenable位为零时;否则,请参见上文。
图9-4。 睡眠和空闲模式下的VIH和VIL

当公共电压用于ATECC608B VCC引脚和输入上拉电阻器时,TTLenable位必须设置为1,这允许输入阈值跟踪电源,如图9-5所示。
图9-5。 VIH和VIL在所有I/O接口上激活且TTLenable=1时

  1. 通用命令信息
    10.1. I/O事务
    ATECC608B使用I2C和单线接口(SWI)协议与主机微控制器进行通信。安全命令被发送到设备,并在以下方式构建的事务中从设备接收响应:
    表10-1。 I/O事务格式
    Byte 名称 意思
    0 计数 要传输到(或从)组中设备的字节数,包括计数字节、数据包字节和校验和字节。因此,计数字节必须始终具有值(N+1),其中N等于数据包中的字节数加上两个校验和字节。对于具有一个计数字节、50个数据包字节和两个校验和字节的组,计数字节必须设置为53。最大值(和计数值)为155字节,最小值为4字节。超出此范围的值将导致设备返回I/O错误。
    1到(N-2) 数据包 命令、参数和数据或响应。有关一般命令包信息,请参见第10.2节“命令包”或第11节。每个命令的特定参数的详细命令说明。
    N-1、N 校验和 CRC-16计数和数据包字节的验证。CRC多项式为0x8005。在开始CRC计算之前,CRC寄存器被初始化为零。在传输了计数和数据包的最后一位之后,内部CRC寄存器的值必须与块中的校验和字节相匹配。传输的第一个CRC字节(N-1)是CRC值的最低有效字节,因此组的最后一个字节是CRC的最高有效字节。
    ATECC608B被设计为使输入组中的计数值与命令参数中指定的大小要求一致。如果计数值与数据包内的命令操作码和/或参数不一致,则ATECC608B根据特定命令以不同的方式进行响应。响应可以包括错误指示,或者可以静默地忽略一些输入字节。
    10.2. 数据包
    数据包的分解如表10-2:
    表10-2所示。 命令数据包
    Byte 名称 意思
    0 操作 代码命令代码。参见第10.4.1节命令摘要。
    1 参数1 第一个参数;始终在。
    2-3 参数2 第二个参数;始终在。
    0-155 数据 数据可选的剩余输入数据。
    在ATECC608B接收到组中的所有字节之后,设备转换到忙碌状态并尝试执行命令。设备繁忙时,无法从设备读取状态和结果。在此期间,设备的I/O接口忽略I2C和单线接口(SWI)SDA输入信号上的所有转换。
    10.3. 状态/错误代码
    该设备没有专用的状态寄存器,因此输出FIFO在状态、错误和命令结果之间共享。设备的所有输出都作为完整的组返回到系统,其格式与输入组相同:
    •计数
    •数据包
    •两字节CRC
    设备接收到输入命令组的第一个字节后,系统无法从设备读取任何内容,直到系统将所有字节发送到设备。
    在唤醒和执行命令后,系统可以检索设备的输出寄存器中的错误、状态或结果字节。当该组的长度为四个字节时,返回的代码详见下表10-3。某些命令在成功执行时返回的字节数超过4个。生成的数据包描述列在命令部分中。
    CRC错误总是在任何其他类型的错误之前返回。它们表示发生了I/O错误,并且命令可能会重新发送到设备。如果发生多个错误,则不会在其余错误之间强制执行特定的优先级。
    表10-3。 四字节组中的状态/错误代码
    状态描述 错误/状态 描述
    命令执行成功 0x00 命令执行成功。
    Checkmac或Verify 比较错误 0x01 Checkmac或Verify命令已正确发送到设备,但输入响应与预期值不匹配。
    解析错误 0x03 命令已正确接收,但无论ATECC608B的状态(易失性和/或EEPROM配置)如何,长度、命令操作码或参数都是非法的。在重新尝试之前,必须更改命令位的值。
    ECC错误 0x05 ECC处理过程中发生计算错误,导致结果无效。重试该命令可能会导致成功执行。
    自检错误 0x07 存在自检错误,芯片处于故障模式,等待清除故障。
    健康测试错误 0x08 存在随机数生成器健康测试错误,芯片将无法执行后续需要随机数的命令,直到清除为止。
    执行错误 0x0F 命令已正确接收,但设备在当前状态下无法执行。在重新尝试之前,必须更改设备状态或命令位的值。
    唤醒后,第一个命令之前 0x11 指示ATECC608B已接收到正确的唤醒令牌。
    看门狗即将过期 0xEE 在看门狗计时器过期之前,没有足够的时间执行给定的命令。系统必须通过进入空闲或睡眠模式来重置看门狗定时器。
    CRC或其他通信错误 0xFF 命令未被ATECC608B正确接收,必须由系统中的I/O驱动程序重新传输。没有尝试分析或执行该命令。
    10.4. 命令摘要和执行时间
    10.4.1. 命令摘要
    以下命令由ATECC608B执行:
    表10-4。 命令操作码、简短描述和执行时间
    命令 操作码 描述
    AES 0x51 执行AES-ECB加密或解密功能。计算伽罗瓦域相乘。
    CheckMac 0x28 验证在另一个加密身份验证设备上计算的MAC。
    计数器 0x24 读取或递增单调计数器之一
    衍生密钥 0x1C 从目标或父密钥派生目标密钥值。
    ECDH(密钥协商) 0x43 使用存储的私钥和输入的公钥生成ECDH预主密钥。
    GenDig 0x15 从随机或输入种子和存储值生成数据摘要。
    GenKey 0x40 生成ECC公钥。(可选)生成ECC私钥。
    Info 0x30 返回设备状态信息。
    KDF(密钥衍生) 0x56 实现PRF或HKDF密钥派生功能
    锁定 0x17 防止对设备的区域或插槽进行进一步修改。
    MAC 0x08 使用SHA-256根据密钥和其他内部数据计算摘要(响应)。
    Nonce 0x16 生成一个32字节的随机数和一个内部存储的Nonce。
    PrivWrite 0x46 将ECC私钥写入数据区的插槽中。
    随机 0x1B 生成一个随机数。
    读取 0x02 从设备读取4或32个字节,无论是否进行身份验证和加密。
    SecureBoot 0x80 通电时验证代码签名或代码摘要
    SelfTest 0x77 测试各种内部加密计算元素
    Sign 0x41 ECDSA签名计算。
    SHA 0x47 计算SHA-256或HMAC摘要,供系统通用。
    UpdateExtra 0x20 在配置区域被锁定后更新配置区域内的字节84或85。
    验证 0x45 ECDSA验证计算。
    写入 0x12 向设备写入4或32字节,无论是否进行身份验证和加密。
    10.4.2. 命令执行时间
    在执行正确接收的命令期间,设备将很忙,不会对引脚上的转换做出响应。设备繁忙的时间间隔取决于命令参数、设备状态、环境条件和其他因素。
    下表显示了假设无错误条件、典型模式设置和芯片状态下命令的典型和最大执行时间。某些模式可能更快,而其他模式可能更慢。
    表10-5。 执行时间(毫秒)
    命令 条件 时钟分频器0x00 时钟分频器0x05 时钟分频器0x0D 3
    典型 最大 2 典型 最大 2 典型 最大 2
    AES 模式=0x0(AES-ECB加密) 1 1.5 1 1.5 1 1.5
    CheckMac 模式=0x06(使用临时密钥) 8 9 8 9 8 9
    计数器 模式=0x00(读) 0.5 0.5 0.5 0.5 0.5 0.5
    衍生密钥 模式=0x00 15 17 15 17 15 17
    ECDH 目标=TempKey 40 47 120 140 450 500
    GenDig 模式=0x02(数据) 7 8.2 7 8.2 7 8.2
    GenKey(第一个)1 模式=0x04(创建,ECC)
    目标=TempKey 46 60 110 135 385 428
    GenKey(第二个)1 模式=0x04(创建,ECC)
    目标=TempKey 40 58 105 127 380 421
    Info 模式=0x0(DevRev) 0.4 0.5 0.4 0.5 0.4 0.5
    KDF 模式=0x10(PRF) 75 88 75 88 75 88
    锁定 模式=配置,检查CRC 19 22 19 22 19 22
    MAC 模式=0x06(TempKey的前32个字节) 7 9 7 9 7 9
    Nonce(第一)1 模式=0x00(随机) 16 19 16 19 16 19
    Nonce(第二)1 模式=0x00(随机) 11 15 11 15 11 15
    PrivWrite 模式=0x00(未加密写入,数据区解锁) 32 37 32 37 32 37
    随机(第一)1 模式=0x000(数据区已锁定) 13 15 13 15 13 15
    随机(第二)1 模式=0x000(数据区已锁定) 7 10 7 10 7 10
    读取 模式=0x82(32字节,ClearText) 1.8 2.0 1.8 2.0 1.8 2.0
    Secure Boot 模式=0x05(Full,No Encrypt,No MAC) 35 40 107 124 414 465
    SelfTest 模式=0x3F(所有算法) 161 180 460 505 1730 1900
    标志(第一个)1 模式=0x03(外部) 66 80 141 170 462 500
    标志(第二个)1 模式=0x03(外部) 60 70 135 160 456 590
    SHA 模式=0x01(更新,64字节) 1 1.2 1.5 1.85 4.6 5.7
    UpdateExtra 模式=0x00(字节84) 8 9 8 9 8 9
    验证 模式=0x02(外部的,ECC曲线) 32 37 105 118 416 460
    写入 模式=0x82(32字节,明文) 18 20 18 20 18 20
    在典型的轮询配置中,建议主机软件延迟上表中的典型间隔,然后开始轮询以确定实际命令完成情况。该表中的三列对应于芯片模式配置字节的时钟分频器字段的合法值。在大多数情况下(但不是所有情况),失败的命令将相对较快地返回。
    笔记: 
    1.这些命令使用随机数生成器(RNG)。在任何唤醒/功率循环中首次调用RNG时,NIST实例化序列将有额外的时间。RNG的后续用途不需要重新运行。(First)表示该延迟适合于在加电或唤醒之后但在生成任何随机数之前的该命令的第一次执行。(Sub)sequent表示这种延迟适用于已经生成随机数的情况。
    2.最大执行时间基于典型配置,并不代表最坏情况下的最大时间。请参阅下面的警告,以更好地理解为什么这些时间可能会超过这些值。
    3.对于时钟分频器模式0x0D中的某些命令,必须通过设置Config将看门狗定时器设置为较大的值。芯片模式。Bit2=1。
    警告:不要将此表中的数字用于导致错误的软件超时。这些延迟表示命令的典型配置的最坏情况时间。根据模式、芯片状态和/或配置,实际执行时间可能更短或明显更长。当使用时钟分频器00进行配置时,超时间隔必须至少比上表中列出的典型值多50ms。其他时钟分频器值将需要额外的时间。要估计软件超时值,请使用公式tmax+sf*50,其中tmax=表中所示的给定命令和时钟分频器模式的最坏情况时间。“sf”是每个命令的比例因子,通过将目标时钟分频器模式的典型时间乘以时钟分频器0x00的典型时间来计算。
    以下情况可能导致命令的执行时间比表10-5所示的时间更长:
    •某些模式表示额外的计算;例如,与非MAC版本的命令相比,输出验证MAC需要额外的时间。
    •在某些情况下,芯片的当前状态可能需要执行额外的操作,这可能会增加执行时间。
    •唤醒/通电后生成的第一个随机数将花费额外的时间进行DRBG实例化操作,如上表所示。
    •一些命令可以写入EEPROM而不是内部SRAM寄存器。根据要写入的页数和/或内部元素,这将需要额外的时间。
    •每个插槽的有限使用功能要求在使用密钥之前增加内部单调计数器。根据当前计数的不同,额外的执行时间可能会有很大的变化。计数器命令也可以递增其中一个单调计数器。
    •各种内部安全序列包括随机延迟。在统计上不常见的基础上,累积计算延迟可能比典型的要长得多。
    10.5. 地址编码
    读取和写入命令包括参数2中的单个16位地址,该地址指示要访问的存储器位置。在所有情况下,数据都是在4字节的字边界上访问的。字地址可以通过取字节地址并丢弃最低有效的两位来创建。
    “读取”和“写入”命令支持4字节或32字节的访问。当访问32个字节时,偏移量(即字地址的最低有效三位)必须存在于参数中,但它们在参数中的值被忽略,并且假设它们为零(即所有32个字节的访问都是块对齐的),操作继续进行。
    10.5.1. 区域编码
    参数1中的值控制命令访问的区域。请参阅第2.4.1节“配置区域锁定”,以获取有关控制每个区域的锁定和解锁状态的更多信息。所有其他区域值都是保留的,不应使用。
    表10-6。 区域编码(参数1)
    区域 参数1值 大小 读 写
    配置 0 1024位
    128字节
    4块 始终可用 部分,解锁时。
    从不,锁定时。
    从不被加密
    OTP 1 512位
    64字节
    2块 从不,解锁时。
    总是,在锁定时。 使用Write解锁时所有内容都是可写的。锁定时,不允许写入。
    数据 2 9664位
    1208字节
    16插槽 从不,解锁时;否则,由IsSecret和EncryptRead控制。 解锁时全部可写。
    锁定时,写入由WriteConfig控制。
    表10-7。 配置和OTP区域的地址编码(参数2)
    区域 Byte1 Byte0
    未使用 未使用 块 偏移
    配置 Bits0-7 Bits5-7 Bits3-4 Bits0-2
    OTP Bits0-7 Bits4-7 Bits3 Bits0-2
    表10-8。 数据区的地址编码(参数2)
    区域 Byte1 Byte0
    未使用 块 未使用 槽 块
    数据槽0-7 Bits1-7 Bits0 Bits7 Bits3-6 Bits0-2
    数据槽8 Bits4-7 Bits0-3 Bits7 Bits3-6 Bits0-2
    数据槽9-15 Bits2-7 Bits0和1 Bits7 Bits3-6 Bits0-2
    在每个区域内,都有各种访问限制,如下表所示:
    表10-9。 合法块/槽值
    区域名称 合法块 合法槽 注释
    配置 0-3 - 低于16(块0,偏移量16)的地址永远无法写入。无法使用写入命令写入84-87的地址。允许4字节和32字节的读/写
    OTP 0-1 - 当OTP解锁时,两个块中的所有偏移都可用于4或32字节的读取。如果OTP区域被锁定,则不允许写入OTP。
    数据 0-1 0-7 所有插槽中的所有偏移都可用于读取和写入。只有在SlotConfig。IsSecret为零。
    0-12 8
    0-2 9-15
    在下表中,address是要传递给Read和/或Write命令的值,作为使用32字节Read或Write访问特定块中数据的地址参数。大小是在该特定块中实现的EPROM字节的数量。
    要使用四字节读取或写入命令访问块中的第一个字,请使用表10-10中所示的地址;否则,地址字段的最低有效三位应包括要访问的字地址。在包含少于32个实现的内存字节的块中允许32字节的访问。额外的字节在读取时将作为零返回,在写入时将被忽略。
    表10-10。 数据区域地址值
    块0 块1 块2 块3
    槽 地址 大小 地址 大小 地址 大小 地址 大小
    0 0x0000 32 0x0100 4 - - - -
    1 0x0008 32 0x0108 4 - - - -
    2 0x0010 32 0x0110 4 - - - -
    3 0x0018 32 0x0118 4 - - - -
    4 0x0020 32 0x0120 4 - - - -
    5 0x0028 32 0x0128 4 -
    6 0x0030 32 0x0130 4 - - -
    7 0x0038 32 0x0138 4
    8 0x0040 32 0x0140 32 0x0240 32 0x0340 32
    9 0x0048 32 0x0148 32 0x0248 8 - -
    10 0x0050 32 0x0150 32 0x0250 8 - -
    11 0x0058 32 0x0158 32 0x0258 8 - -
    12 0x0060 32 0x0160 32 0x0260 8 - -
    13 0x0068 32 0x0168 32 0x0268 8 - -
    14 0x0070 32 0x0170 32 0x0270 8 - -
    15 0x0078 32 0x0178 32 0x0278 8 - -
    示例:
    要完成插槽9第53至56字节的四字节读取,字地址为:
    •第53字节是块1中的第21字节(53除以32为1,53减去32为21)。
    •第21个字节位于字节偏移量0x14,即字偏移量0x05(0x14除以4为0x05)。
    •根据表10-7,读取命令的地址参数为00000001 0 1001 101或0x014。

10.6. 看门狗故障保护
在ATECC608B接收到唤醒令牌之后,看门狗计数器在tWATCHDOG之后在设备内启动,无论I/O传输或命令执行是否正在进行,设备都进入休眠模式。除了将设备置于睡眠或空闲模式,然后再次唤醒它之外,没有其他方法可以重置计数器。
看门狗定时器被实现为一种故障保护机制,无论系统侧或设备内部发生什么,包括任何I/O同步问题,功耗都会自动降至超低睡眠水平。
当设备转换到睡眠模式时,设备重置存储在SRAM和内部状态寄存器中的值;然而,如果该设备通过适当的I/O序列被明确地置于空闲模式,则该设备保留SRAM寄存器的内容。
通常,如果所有命令序列需要存储在SRAM寄存器中的状态,则它们必须在tWATCHDOG内完成。如果需要实现比看门狗间隔更长的命令序列,系统软件可以使用这种空闲模式机制来确保序列能够成功完成。
如果在看门狗定时器执行前(约100毫秒)剩余时间不足的情况下尝试执行命令,设备将返回看门狗超时错误代码,而不尝试执行该命令。此功能可防止在看门狗计时器重置设备时仅部分执行命令的情况。特别地,有限使用计数器总是在执行密码计算之前递减;因此,中止的命令可能会导致剩余计数减少,而系统无法获得结果。在中止命令后,设备将永远不会处于不可用状态。
由于某些网络序列的扩展特性,ATECC608B提供了一个扩展的看门狗间隔,通过配置区ChipMode字节启用。为了获得最高的安全性,Microchip始终建议缩短看门狗的间隔时间。还要注意,看门狗间隔的长度不受ChipMode控制字节中设置的任何时钟分频器的影响。有关更多详细信息,请参阅第2.2节EEPROM配置区。
11.详细的命令说明
11.1. AES加解密命令
AES命令有以下三种执行模式:
加密ECB:输入时需要16个字节的明文,在输入块上执行AES加密操作,输出的16个字节是加密结果。加密ECB用于大多数AES操作模式。
解密ECB:输入时预期有16个字节的密文,对输入块执行AES解密操作,输出的16个字节为明文结果。解密ECB用于CBC和其他一些AES操作模式。
Galois字段相乘(GFM):将参数2之后输入的前16个字节作为H,将第二个16个字节用作输入数据,并计算要在AES-GCM AEAD功能中使用的GFM。此模式不涉及机密或存储在芯片上的任何内容。如果选择此模式,则忽略剩余的模式位。
如果时隙具有64个有效字节,则AES密钥可以位于密钥时隙内的4个可能位置中的任何一个,或者如果时隙具有32个有效字节则可以位于2个可能位置之一。此选择由模式字节的位7:6控制。
AES命令是通过配置区域中字节13的位0启用的。如果为1,则启用该命令;如果为0,则禁用该命令。此配置字节不能写入字段中。
表11-1。 输入参数
名称 大小 注释
操作码 AES 1 0x51
参数1 模式 1 位7-6:在KeyId指向的源字段中使用此16字节AES块作为AES密钥。如果源字段没有64个有效位,并且选择了其中一个上键,则返回错误。
位5-3:保留以备将来使用,必须为零。
位2-0:保留所有其他值,不使用
如果 011,计算输入数据上的伽罗瓦字段乘法(GFM)
如果 001,AES-ECB 解密
如果 000,AES-ECB 加密
参数2 KeyID 2 EPROM中的密钥槽,用作AES计算中的密钥。如果为0xFFFF,则TempKey是AES密钥的来源。当处于GFM模式(模式=0x03)时,此参数将被忽略。
数据 输入 16或32 AES操作的16字节输入数据。
32字节的数据用于GFM操作,前16字节为H,后16字节为输入数据。
表11-2。 输出参数
名称 大小 注释
响应 1或16 如果AES操作成功,则AES ECB或GFM输出的输出为16字节。如果操作失败,则输出为一个字节的错误代码。
11.2. CheckMac命令(MAC运算)
CheckMAC命令计算将在不同的ATECC608B、ATECC508A或ATSHA204A设备上生成的MAC响应,然后将结果与输入值进行比较。它返回一个布尔结果,指示比较的成功或失败。
在运行此命令之前,可以选择运行Nonce和/或GenDig命令,以在TempKey中创建密钥或Nonce值。输入模式参数确定密钥(SHA消息的前32字节)和质询/随机数(SHA信息的第二32字节)的来源。如果KeyConfig[KeyID]。ReqRandom是一个,RNG必须在Nonce命令的执行过程中使用,否则该命令将返回错误。
如果在使用密钥之前KeyConfig需要授权,则可以通过在模式[1]设置为零的情况下执行此命令来实现此授权功能。TempKey之前必须通过nonce命令加载了nonce。如果KeyConfig[KeyID]。ReqRandom是一个,RNG将在该Nonce命令的执行过程中使用。如果CheckMac成功,则执行内部AuthComplete。将设置有效标志和AuthComplete。内部保留的KeyID。有关更多详细信息,请参阅第4.4.8节授权密钥。
如果比较匹配,则可以将目标EEPROM插槽值复制到TempKey中。如果KeyID为偶数,则目标槽为KeyID+1或目标槽为KeyID。要进行复制,CheckMac的模式参数的值必须为0x01或0x05,并且目标密钥的SlotConfig.readKey必须为零。无论SlotConfig的值如何,都将进行此复制。限制用于目标插槽。
表11-3。 输入参数
名字 大小 注释
操作码 CheckMac 1 0x28
参数1 模式 1 位7-3:必须为零。
位2:如果设置了模式[0]或模式[1],则此位的值必须与TempKey.sourceFlag中的值匹配,否则命令将返回错误。
位1: 0=在第一个SHA块中使用密钥[KeyID]。
1=使用TempKey。
位0: 0=SHA消息的第二个32字节取自输入的ClientChal参数。
1=消息的第二个32字节取自TempKey。
参数2 KeyID 2 内部密钥用于生成响应。忽略KeyID的除位0:3以外的所有位。
数据1 ClientChal 32 质询已发送给客户端。如果Mode[0]为1,则会忽略此参数的值。(这32个字节必须仍然出现在输入流中)。
数据2 ClientResp 32 客户端生成的响应。
数据3 ClientData 13 响应计算所需的剩余常量数据
表11-4。 输出参数
名字 大小 注释
结果 1 如果ClientResp与内部计算的摘要匹配,则返回值为零的单个字节;值为1(如果不匹配)
将使用SHA-256算法散列的消息由以下信息组成:
32字节 key[KeyID]或TempKey(取决于模式)
32字节 ClientChal或TempKey
4字节 OtherData[0:3]
8字节 零
3字节 OtherData[4:6]
1字节 SN[8]
4字节 OtherData[7:10]
2字节 SN[0:1]
2字节 OtherData[11:12]
11.3. 计数器命令
Counter命令从位于配置区域内的设备上的两个单调计数器之一读取二进制计数值。计数器可能具有的最大值为2097151。任何超过此值的计数尝试都将导致错误代码。计数器设计为即使在计数操作期间电源中断也不会丢失计数。在某些功率损失情况下,计数器可能会增加一个以上的值。
Counter [0]可能附在某些密钥上以限制其使用;计数器[1]从未连接到任何密钥。当Counter[0]附加到密钥时,计数器将随着每次使用密钥而递增,直到计数器达到其最大值,此时将不再允许使用密钥。
计数器匹配功能允许计数器[0]在计数器中的值与Config:CountMatchKey EEPROM键槽中的值匹配时停止递增。Counter[1]不支持CounterMatch。
密钥的合法使用次数也可以通过在配置时将Counter[0]初始化为非零值来控制。有关详细信息,请联系Microchip。
表11-5。 输入参数
名称 大小 注释
操作码 计数器 1 0x24
参数1 模式 1 位7-1:必须为零。
位0: 0=读取指定计数器的值。
1=增加指定计数器的值。
参数2 密钥ID 2 要递增的计数器。只有零和一是合法值。
表11-6。 输出参数
名称 大小 注释
计数 1或4 通常,这将是计数器的当前二进制值。
如果KeyID指向一个无效的计数器ID,将返回一个分析错误。
如果请求的增量失败,将返回Exec错误。
11.4. DeriveKey命令(衍生密钥配置命令)
该设备使用SHA-256将密钥的当前值与TempKey中存储的随机数进行组合,并将结果放入目标密钥槽中。SlotConfig[TargetKey]。必须设置Bit13,否则DeriveKey将返回错误。如果KeyConfig指示插槽包含ECC私钥,如果Configuration区域尚未锁定,或者TargetKey插槽使用SlotLocked单独锁定,DeriveKey总是返回错误。
如果SlotConfig[TargetKey]。Bit12为零,将与TempKey组合的源密钥是命令行中指定的目标密钥(滚动密钥操作)。如果SlotConfig[TargetKey]。Bit12是一,源密钥是目标密钥的父密钥,可在SlotConfig[TargetKey]中找到。WriteKey(创建密钥操作)。
在执行此命令之前,必须运行Nonce命令才能在TempKey中创建有效的Nonce。如果KeyConfig。ReqRandom是源密钥的一个,此nonce必须是使用内部RNG创建的,否则将返回错误。在所有情况下,模式[2]都必须与TempKey的状态相匹配。SourceFlag或命令将返回一个错误。
如果SlotConfig[TargetKey]。Bit15已设置,输入MAC必须存在,并已按如下方式计算:
SHA-256(ParentKey,Opcode,参数1,参数2,SN[8],SN[0:1]),其中ParentKey ID始终为SlotConfig[TargetKey].WriteKey。
如果执行滚动键操作和KeyConfig[TargetKey]。ReqAuth是一个,必须使用KeyConfig[TargetKey]执行适当的授权。执行DeriveKey之前的AuthKey。如果执行创建密钥操作和KeyConfig[ParentKey]。ReqAuth是其中之一,必须使用KeyConfig[ParentKey]执行适当的授权。执行DeriveKey之前的AuthKey。
如果需要输入MAC和KeyConfig[ParentKey]。ReqAuth是其中之一,必须使用KeyConfig[ParentKey]执行适当的授权。执行DeriveKey之前的AuthKey。
如果操作中涉及父密钥(设置了SlotConfig[TargetKey].Bit12或SlotConfig[TargetKey].Bit 15)和SlotConfig[ParentKey]。还设置了LimitedUse,如果Counter[0]已达到其极限,DeriveKey将返回一个错误。DeriveKey始终忽略目标密钥的LimitedUse。
笔记  如果源密钥和目标密钥相同,则如果在写入操作期间电源中断,则存在密钥值永久丢失的风险。如果配置位允许,则可以使用基于父密钥的经过验证和加密的写入来恢复密钥值。
表11-7。 输入参数
名称 大小 注释
操作码 DeriveKey 1 0x1C
参数1 模式 1 位7-3:必须为零。
位2:此位的值必须与TempKey中的值匹配。SourceFlag或命令将返回一个错误。
位1-0:必须为零。
参数2 TargetKey 2 要写入的密钥槽
数据 MAC 0或32 用于验证操作的可选MAC
表11-8。 输出参数
名称 大小 注释
成功 1 一旦成功完成,ATECC608B将返回一个零值。
写入目标插槽的密钥是以下消息的SHA-256的结果:
32字节 目标或父密钥(取决于SlotConfig[12])
1字节 操作码
1字节 参数1
2字节 参数2
1字节 SN[8]
2字节 SN[0:1]
25字节 零
32字节 TempKey.value
该命令的数据流如图11-1所示。
图11-1。 DeriveKey命令的数据流

11.5. ECDH命令(密钥协商)
ATECC608B上的ECDH命令计算ECDH算法以创建共享秘密。
私钥有两种可能的来源,由Mode[0]位控制:
•TempKey:必须事先执行GenKey命令才能生成新密钥并将其加载到TempKey中。TempKey在输入上使用后将被清除,但如果它是输出目标,则可能会被重新验证。
•EEPROM密钥插槽:插槽的类型必须是ECC私钥。SlotConfig中的位2。必须设置私钥的ReadKey才能启用ECDH操作,否则此命令将返回错误。
结果有三个可能,由位模式[3:2]控制:
•输出缓冲区:输出可能被加密,见下文。
•TempKey:TempKey中以前的任何值都将无效。生成的TempKey只能由KDF或AES命令使用。
•EEPROM密钥插槽:目标插槽不能是ECC私钥,并且必须将WriteConfig字段设置为ALWAYS。目标插槽不得为SlotLocked。主机处理器可以通过执行对目标槽的加密读取来加密预主密钥。
如果模式参数的目标字段是COPY(00),则芯片以与ATECC508A兼容的方式操作:根据源密钥的ReadKey字段的值,结果被放置在输出缓冲器或KeyID | 1插槽中。在这种情况下,WriteConfig检查将被取消。这是允许输入和输出均为EEPROM的唯一方法。
如果模式字节指示结果将进入输出缓冲区,则根据IO保护配置,可以选择各种选项:
如果配置。ChipOptions.ioProtEnable为0,无论模式[1](输出加密)的状态如何,结果都将被置于清除的输出缓冲区中。
如果配置。ChipOptions.ioProtEnable为1,则出现以下可能性:
•如果Config.Chip.ECDHprot为2(STORE),将返回一个错误,因为配置禁止输出端口上的结果。
•如果Config.Chip.ECDHprot为1(ENCRYPT),无论模式[1](输出加密)的状态如何,输出都将被加密。
•如果Config.Chip.ECDHprot为0(CLEAR),如果设置了模式[1],输出将被加密,否则将在清除中返回到主机。
表11-9。 输入参数
名称 大小 注释
操作码 ECDH 1 0x43
参数1 模式 1 位7-4:保留以供将来使用,必须为零。
位3-2: 11=结果进入输出缓冲器。
10=结果进入TempKey。
01=结果进入KeyID指定的EEPROM插槽。
Config.SlotConfig[KeyID]。WriteConfig必须为ALWAYS(0000)。
00=兼容复制模式。结果将进入输出缓冲区或KeyID+1。
根据Config.SlotConfig[KeyId].ReadKey[3]。
位1: 0=如果允许,输出处于清除状态。
1=强制输出加密。
位0: 0=源密钥为EEPROM插槽。
1=TempKey包含私钥。
参数2 KeyID 2 如果Mode[0]为0,则在ECDH计算中使用的私钥。
数据1 X 32 用于ECDH计算的公钥的X组件。
数据2 Y 32 用于ECDH计算的公钥的Y分量。
表11-10。 输出参数
名称 大小 注释
响应 1或32 如果ECDH操作成功,并且目的地是输出缓冲区,则此字段包含共享机密(预主机密)。否则为0x00的成功代码,或者如果发生任何错误,则为错误代码。
OutNonce 0或32 如果输出已加密,则用于加密的nonce
输出缓冲区加密通过以下方式实现:
1.IO保护密钥槽的前32个字节(Config.ChipOptions[位12-15])被复制到SHA256缓冲器。
2.内部RNG生成32字节的随机数(nonce),并且仅将前16个字节附加到SHA256缓冲器。
3.这个SHA256缓冲区被散列,摘要与明文预主密钥进行异或。
4.输出缓冲器由加密的预主密钥和来自步骤2的32字节随机数组成。注意,随机数的第二个32字节被芯片忽略,并且仅为了与KDF加密方法兼容而返回到主机。
11.6. GenDig命令(利用芯片中数据槽或配置区或OTP页或单调计数器的值,产生临时密钥Tempkey)
GenDig命令使用SHA-256将存储的或输入的值与TempKey的内容相结合,TempKey在执行此命令之前必须是有效的。存储的值可以来自数据槽之一、配置区、OTP页之一、单调计数器,也可以从硬件传输密钥阵列中检索。生成的摘要保留在TempKey中,可以通过以下四种方式之一使用:
1.它可以作为MAC、Sign或CheckMac命令使用的消息的一部分包含在内。因为MAC响应输出包含GenDig计算中使用的数据和MAC命令中的密钥,所以它用于验证存储在数据和/或OTP区域中的数据。
2.随后的读取或写入命令可以使用摘要来为数据提供身份验证和/或机密性,在这种情况下,它被称为数据保护摘要。
3.该命令可以通过使用来自传输密钥数组的值来用于安全个性化。由此产生的数据保护摘要将由Write使用。
4.输入值(通常是来自远程设备的随机数)与当前TempKey值相结合,以创建一个共享的随机数,在该随机数中,两个设备都可以证明包含RNG。
如果区域是两个(即Data),并且KeyID小于0x8000,则GenDig命令设置TempKey。GenDigData为一和TempKey。KeyID到输入KeyID;否则,TempKey。GenDigData设置为零。如果KeyConfig.KeyID设置了ReqRandom,并且数据区域被锁定,TempKey寄存器中的值必须最初是通过Nonce命令使用随机数计算的;否则,GenDig将失败。无论结果摘要是如何计算的,都永远无法从设备中读取。
如果TempKey.Valid无效,此命令返回错误。命令完成后,TempKey。设置有效位,指示摘要已加载并准备好使用。TempKey。执行下一个命令时,有效位被清除。有关更多详细信息,请参阅第3.1节TempKey。
对于小于0x8000的所有KeyID值,设备使用KeyID的最低有效四位来确定从EEPROM的数据区检索键值的插槽号。大于0x8000的KeyID值参考密钥存储在设计的掩码中。只有当存储在TempKey中的nonce值是使用板载RNG生成的时,才能使用这些密钥。在任何情况下,作为设备输入的KeyID的所有16位都用作SHA-256计算中的参数2。
当在GenDig输入上指定的密钥设置了NoMac位时,GenDig可用于生成与使用DeriveKey命令在客户端CryptoAuthentication设备上生成的密钥相匹配的临时密钥。设置了NoMac位的密钥表示设备充当主机的情况。在这种情况下,通常包含在SHA计算中的操作码和参数字节被输入流中的字节所取代。
表11-11。 输入参数
名称 大小 注释
操作码 GenDig 1 0x15
参数1 区域 1 如果0x00(配置),请使用KeyID指定配置区域的四个256位块中的任何一个。如果KeyID的值大于3,则该命令将返回一个错误。
如果0x01(OTP),请使用KeyID指定OTP区域的第一个或第二个256位块。
如果0x02(数据),KeyID指定数据区域中的插槽或硬件阵列中的传输密钥。
如果0x03(Shared Nonce),则KeyID指定消息生成中输入值的位置。
如果0x04(计数器),KeyID指定要包括在消息生成中的单调计数器ID。
如果0x05(密钥配置),则KeyID指定将在消息生成中包含配置信息的插槽。
所有其他值都是保留的,不得使用。
参数2 KeyID 2 要使用的插槽的标识号,选择较低或较高的OTP块或消息顺序用于共享Nonce模式。
数据1 OtherData 0、4或32 使用NoMac密钥时用于SHA计算的四个字节的数据,32个字节用于“Shared Nonce”模式,否则忽略。
表11-12。 输出参数
名称 大小 注释
成功 1 成功执行后,ATECC608B会返回一个零值。
如果区域为“Shared Nonce”且KeyID[15]为零,则用于创建新TempKey的SHA-256消息体由以下字节组成:
32字节 输入其他数据参数
1字节 操作码(始终为0x15)
1字节 模式
1字节 KeyID的LSB
1字节 零
1字节 SN[8]
2字节 SN[0:1]
25字节 零
32字节 TempKey.value
用于创建生成的新TempKey的SHA-256消息体由以下字节组成:
32字节 TempKey.value
1字节 操作码(总是0x15)
1字节 模式
1字节 KeyID的LSB
1字节 零
1字节 SN[8]
2字节 SN[0:1]
25字节 零
32字节 输入其他数据参数
如果区域是Data and SlotConfig[KeyID]。NoMac就是其中之一,用于创建新TempKey的SHA-256消息体由以下字节组成:
32字节 Data.sslot[KeyID]
4字节 OtherData
1字节 SN[8]
2字节 SN[0:1]
25字节 零
32字节 TempKey.value
如果区域为Counter,则用于创建新TempKey的SHA-256消息体由以下字节组成。计数器模式仅在ATECC608B上受支持。
32字节 零
1字节 操作码
1字节 参数1
2字节 参数2
1字节 SN[8]
2字节 SN[0:1]
1字节 零
4字节 Counter[KeyID](计数器命令报告的二进制值)
20字节 零
32字节 TempKey.value
如果区域为“密钥配置”(0x05),用于创建产生的新TempKey的SHA-256消息体由以下字节组成:
32字节 零
1字节 操作码
1字节 模式
2字节 参数2
1字节 SN[8]
2字节 SN[0:1]
1字节 0x00
2字节 SlotConfig[KeyID]
2字节 KeyConfig[KeyID]
1字节 SlotLocked:KeyID
19字节 零
1个字节 0x00
32字节 TempKey.value
在所有其他情况下,用于创建TempKey的消息如下:
32字节 OTP[KeyID]或Data.sslot[KeyID]或TransportKey[KeyID]
1字节 操作码
1字节 参数1
2字节 参数2
1字节 SN[8]
2字节 SN[0:1]
25字节 零
32字节 TempKey.value
11.7. GenKey命令(产生密钥)
GenKey命令执行以下三个操作中的一个或多个:
1.私钥创建:创建一个新的随机私钥。如果KeyID参数为0xFFFF,则私钥将写入TempKey。在这种情况下,TempKey以前的任何内容都将被销毁。TempKey中产生的私钥只能由ECDH命令使用。否则,GenKey命令会将生成的密钥写入KeyID参数指定的插槽中。
2.公钥计算:根据存储在KeyID参数定义的插槽中的私钥生成ECC公钥。这种命令模式可以用来避免以牺牲重新生成公钥所需的时间为代价将公钥存储在设备上。
3.摘要计算:GenKey还可以将KeyID参数引用的公钥与TempKey中存储的当前值相结合,计算得到的消息的SHA-256摘要,并将该摘要放回TempKey中。该摘要可以用作内部签名的消息,也可以用作MAC计算的组件。在进行摘要计算之前,TempKey必须有效。如果KeyConfig。设置了ReqRandom,TempKey必须使用内部RNG创建。
可以使用从插槽中的私钥计算的公钥或使用已存储在插槽中的公钥来执行摘要计算操作。在后一种情况下,将对公钥槽进行适当的事先授权和有限使用检查,而不会进行下面所示的其余检查。当GenKey用于计算公钥槽上的摘要时,它会忽略公钥的有效性状态。
除上述摘要生成操作外,此命令指示的插槽必须通过KeyConfig进行配置。Private以包含ECC私钥和SlotConfig。IsSecret必须设置为1,否则此命令将失败。如果KeyConfig。KeyType不指示此设备支持的ECC曲线,此命令也将返回错误。在锁定配置区域之前,此命令将始终返回一个错误。
一旦数据区域被锁定,将执行以下附加限制:
•私钥创建:
–相应SlotConfig的Bit 13必须设置为1。
–如果KeyConfig。ReqAuth设置为1,这是使用KeyConfig的预先授权。必须已执行AuthKey。
•公钥生成:
–KeyConfig。GenPub必须设置为1。
–如果KeyConfig。ReqAuth设置为1,这是使用KeyConfig的预先授权。必须已执行AuthKey。
以下内容适用于所有私钥创建操作,无论数据区域是否已锁定:
•此命令只写入创建指定类型私钥所需的字节。插槽中的其余字节不受此命令的影响。
•当创建随机密钥并将其写入数据区域时,无论KeyConfig区域内GenPub位的值如何,GenKey命令始终返回公钥。
•如果相应的SlotLocked位为零,则此命令返回一个错误。
•生成的密钥不可接受的统计概率很小,在这种情况下,该命令将返回包含ECC故障代码的单个字节(见表10-3)。在这种情况下,必须重新运行该命令,并在随后的迭代中正确生成密钥。
表11-13。 输入参数
名称 大小 注释
操作码 GenKey 1 0x40
参数1 模式 1 见表11-15。
参数2 KeyID 2 根据命令的模式指定GenKey密钥的目标或源插槽。如果为0xFF,则目标为TempKey。
数据 OtherData 3 如果KeyID指向公钥,则这些字节将替换消息计算中的参数1和参数2。
表11-14。 输出参数
名称 大小 注释
响应 1或64 公钥X和Y坐标。如果生成的私钥不可接受,则为ECC故障代码。
表11-15。 模式编码
位 意思
7-5 必须为零。
4 0=KeyID指向私钥,并且模式[2]和模式[3]控制设备操作。
1=KeyID必须指向公钥,并且GenKey仅在TempKey中创建摘要,而不进行任何公钥生成操作。如果设置了模式字节的比特2和比特3,则忽略该比特。
3 0=未创建PubKey摘要。
1=设备基于KeyID中的私钥创建PubKey摘要,并将其放置在TempKey中。
2 0=当前存储在插槽中的私钥用于生成公钥。
1=生成随机私钥并将其存储在KeyID指定的插槽中。KeyType必须在此KeyID的KeyConfig区域中指示ECC密钥,否则将返回错误。
1-0 必须为零
当GenKey命令要计算PubKey摘要时,以下消息用作SHA-256算法的输入:
32字节 TempKey
1字节 操作码
1字节 参数1
2字节 参数2
1字节 SN[8]
2字节 SN[0:1]
25字节 零
64字节 公钥的X和Y坐标
11.8. 信息命令
Info命令根据模式的值从设备访问一些静态或动态的四字节信息。模式参数的非法值将导致解析错误响应。
表11-16。 模式编码
参数1 模式 注释
0 修订版本(1,2) 返回表示设备修订号的单个四字节字。这个词可以用来识别设备,但不能用于任何加密计算,因为值可能会不时变化。
1 密钥有效性 如果存储在param指定的密钥槽中的ECC私钥或公钥有效,则返回一个值,但如果密钥无效,则返回零。对于PubInfo为零的插槽中的公钥,此命令返回的信息没有用处。对于KeyType不指示支持的ECC曲线的插槽,此信息没有意义。
2 状态 返回各种动态状态信息,如下所示:
总线上的第一个字节:
位7: TempKey。NoMacFlag
位6: TempKey。GenKeyData
位5: TempKey。GenDigData
位4: TempKey。源标志
位3-0: TempKey。KeyID
总线上的第二个字节:
位7: TempKey。有效
位6-3:AuthComplete。KeyID:对其执行授权的插槽ID。
位2: AuthComplete。有效:已执行有效的授权序列。
位1: 0
位0: 0
总线上的第三个和第四个字节都是零。
3 GPIO 当设备处于任一单线接口模式时,访问GPIO引脚。具体操作由参数2控制如下:
位15-2:必须为零。
位1: 0=GPIO被配置为输入。1=GPIO被配置为输出。
位0:输出被驱动到的状态。如果位1为零,则忽略。
始终返回当前状态的第一个字节,后面跟着0x00的三个字节。
4 易失性密钥 允许如果参数2[1]为0,则返回持久锁存器的当前状态。如果参数2[1]为1,并且Config。如果设置了VolKeyPermission[7],则仅当先前使用Config中指定的密钥执行了有效的授权操作时,才将参数2[0]写入持久锁存器。VolKeyPermit[3-0]
注意:
1.ATECC608B的初始修订值为0x00 0x00 0x60 0x03。第三个字节(0x60)表示该设备是一个ATECC608设备。(0x03))或更大的第四字节中的值将指示它是ATECC608B。第四字节中小于此值的值表示该设备是ATECC608A。
2.此命令报告的修订号与配置区域中显示的RevNum不同。
表11-17。输入参数
名称 大小 注释
操作码 信息 1 0x30
参数1 模式 1 见表11-16。
参数2 参数 2 使用取决于模式。
数据 – 0 忽略
表11-18。输出参数
名称 大小 注释
响应 4 由模式或错误代码指定的信息。
有关GPIO模式的更多信息如下:
•如果Config。I2C_Address设置为禁用,或者如果Config:I2C_Enable[0]设置为I2C模式,GPIO模式总是向系统固件返回错误代码。
•如果Config。I2C_Address设置为授权模式,操作取决于I2C_Address[3]。如果此位为零,则设备处于授权输出模式。如果有,则设备处于入侵检测模式。
–授权输出模式:无论参数2[1]的状态如何,在成功执行时,Info命令都会返回输出引脚的当前状态。如果参数2[1]表示输出,并且参数2[0]与默认输出状态(I2C_Addres[2])匹配,则将输出设置为默认值;否则,如果AuthComplete。有效值为1和AuthComplete。KeyID与SignalKey匹配,将输出设置为与默认状态相反的状态。
–入侵检测模式:无论参数2[1]的状态如何,在成功执行时,Info命令都会返回Persistent Latch的当前状态。如果参数2[1]指示输出和AuthComplete。有效值为1和AuthComplete。KeyID与SignalKey匹配,将持久锁存设置为参数2[0]。
•如果Config。I2C_Address设置为Input,GPIO引脚的当前状态返回到系统固件,而不改变GPIO引脚方向。如果参数2[1](驱动器状态)设置为1(输出),则此命令将返回错误。
•如果Config。I2C_Address设置为Output,GPIO驱动器的方向将设置为将参数2[1]匹配为0(输入)和1(输出)。如果配置为输出,则参数2[0]中的值将被驱动到引脚。无论参数2中的值如何,GPIO引脚的当前状态都将在输出响应参数中返回给系统。
11.9. KDF命令(生成衍生密钥)
KDF命令实现许多密钥派生函数(KDF)中的一个。通常,此函数将源键与输入字符串组合,并创建结果键/摘要/数组。目前支持三种算法:PRF、HKDF和AES。
•PRF
TLS 1.2及更早版本中指定的用于会话建立的KDF。该芯片支持多种变体,包括用于主密钥生成、会话验证(完成消息)和密钥材料生成(包括AEAD套件)的方法。
•AES
如某些协议中所使用的。在单个输入数据块上计算AES-ECB。输出的上16个字节被填充为0,因此结果总是32个字节。
•HKDF
当前为TLS 1.3指定的KDF。
输入密钥可以是TempKey、Alternate key Buffer或EEPROM插槽。在任何一种情况下,输入存储位置的长度可以是32或64字节,尽管实际的KDF模式也可以根据算法仅使用16或48作为密码密钥。
KDF的输出结果可以是32或64字节,可以在输出缓冲器中返回到系统,写入TempKey或Alternate Key buffer,或存储在EEPROM插槽中。只有当32字节的低位区域已经有效时,32字节的KDF结果才能写入TempKey的高位32字节区域。
如果输出在输出缓冲区中返回到系统,则可能会根据模式参数对其进行加密。如果Config。Chip_Options为ENCRYPT,无论输入模式如何,输出都将被加密。如果Config。Chip_Options为STORE,输出必须进入TempKey或EEPROM。如果输出是加密的,它后面总是一个32字节的随机数。
只有当KeyConfig[KeyID].type为数据且KeyConfig[KeyID]时,才能将目标写入EEPROM。PubInfo为1,SlotConfig[KeyID]。WriteConfig为“始终”。
参数1和参数2控制KDF操作的源和目标,并且对于所有三种方法都是通用的。每种方法都有不同的计算方法;因此,存在驱动内部计算阶段的第三个Param3(Details)。Details参数后面是计算所需的任何数据。
表11-19。 输入参数
名称 大小 注释
操作码 KDF 1 0x56
参数1 模式 1 控制KDF函数的密钥源和目标位置。(见表11-21)。
参数2 KeyID 2 如果源或目标在EEPROM中,则EEPROM中的插槽位置
参数3 细节 4 有关计算的更多信息,取决于算法。(见表11-22、表11-23和表11-24。)
数据 消息 <128 系统输入值
表11-20。 输出参数
名称 大小 注释
OutData 1,32,64 如果结果仍在设备内,则输出KDF函数或成功代码。
OutNonce 0,32 如果输出是加密的,则由ATEC608B生成32字节的随机数。
表11-21。 模式编码
位 意思
7 必须为零。
6-5 算法:0是TLS PRF。1是AES。2是HKDF。3已预留
4-2 KDF结果的目标:
0:将KDF结果写入TempKey。
1:将结果写入TempKey的上块,不影响下块。
2:将KDF结果写入EEPROM插槽。使用KeyID输入参数的MS字节。
3:将结果写入备用密钥缓冲区。
4:将KDF结果放入输出缓冲区。如果配置。ChipOptions许可。
5:将KDF结果放入用IO保护密钥加密的输出缓冲区。
6-7:保留,不得使用。
1-0 KDF输入密钥的来源:
0: 从TempKey获取KDF密钥,长度为32或64字节。
1: 从TempKey的上块获取KDF密钥,长度为32字节。
2: 从EEPROM插槽中获取KDF密钥。使用KeyID输入参数的LS字节。
3: 从备用密钥缓冲区中获取KDF密钥。
表11-22。 PRF的详细参数编码
位 名称 描述
31-24 DataLen 输入参数的长度(TLS行话中的Label|Seed),以字节为单位。
23-11 零 所有位必须为0。
10-9 Aead 如果00,没有特殊的Aead处理。
如果为01,则TargetLen必须为1才能生成64个字节。前32个字节指向目标,而该目标不得输出;第二个剩余的32个字节进入输出缓冲区,从不加密。10,11 Forbidden,将返回一个解析错误。
8 TargetLen 要放置在目标位置的32字节块的数量。
0=32字节
1=64字节
7-2 零 所有位必须为0。
1-0 KeyLen 以16字节块为单位的源密钥的长度。
0=16字节
1=32字节
2=48字节
3=64字节
表11-23。 AES的细节参数编码
位 名称 描述
31-2 零 所有位必须为0。
1-0 KeyLoc AES密钥位于源密钥材料内的Src[KeyLoc*16]处。如果源密钥只有32个字节,则KeyLoc必须是0或1。
KDF命令中的HKDF功能旨在支持TLS 1.3和其他协议中规定的必要密钥派生操作。它总是使用模式和细节参数中指定的密钥和消息来计算HMAC-SHA256的单次迭代。此命令的多次迭代可用于实现HKDF提取并根据HKDF规范扩展功能。64字节的结果可以通过分别写入TempKey寄存器的上半部分和下半部分来创建。
如果Detail参数的MsgLoc字段中指示了特殊的IV函数,则将检查输入缓冲区中的消息,以确保它包含将被视为IV计算的适当字符串。如果从索引Config.kdfInvLoc开始的输入缓冲区中的两个字节与存储在Config.kdfEvLoc的两个匹配。KdfIvStr,此模式允许忽略输出限制,并在清除中返回结果。另请参阅第2.2.11节特殊KDF初始化矢量函数(字节72-74)。
可以指定输入键、消息和输出键三个都指向TempKey。这种组合是被禁止的,其结果可能是不可预测的。
表11-24。 HKDF的详细参数编码
位 名称 描述
31 零 必须为0。
30-24 DataLen HKDF的长度(以字节为单位)。如果此值为零,则消息将为32字节的0。如果MsgLoc!=2(输入参数),小于16的值将被命令拒绝,并且不会将结果输出到选定的KDF输出位置。
23-12 零 所有位必须为0。
11-8 msgKey 消息的钥匙槽(如果在EEPROM中)。
7-3 零 所有位必须为0。
2 ZeroKey 如果为1,则密钥为32字节的0。
1-0 MsgLoc 消息的位置。
00=EEPROM插槽
01=TempKey
10=输入参数
11=特殊初始化矢量功能
对于所有算法,输出缓冲区加密以类似于ECDH命令的方式实现,如下所示。如果IO保护功能未启用(Config.ChipOptions[1]),如果模式参数中指示输出加密,ATECC608B将返回错误。
1.IO保护密钥槽(Config.ChipOptions[15:12])的前32个字节被复制到SHA256缓冲器。
2.内部RNG生成32字节的随机数,并将该随机数的前16个字节附加到SHA256缓冲器。
3.对SHA256缓冲区进行散列处理,并将摘要与明文KDF结果的前32个字节进行XOR运算。如果结果中只有16个字节,则输出缓冲区将仅包含这16个字节并且SHA摘要的第二个16个字节将被忽略。
4.如果输出中有超过32个字节,则通过IO保护密钥的SHA256散列(32个字节)创建新的摘要,然后是来自步骤#2的随机数的第二个16字节。得到的摘要与结果的下一个32字节进行XOR运算。
5.输出缓冲区由加密的KDF结果和32字节的随机数组成。即使只使用了前16个字节,也会输出随机数的所有32个字节。
11.10. 锁定命令
锁定命令可防止将来对配置和/或数据和OTP区域进行修改。如果设备是这样配置的,则此命令可用于锁定各个数据插槽。如果指定区域已经锁定,则此命令将失败。
在锁定配置和/或数据和OTP区域之前,ATECC608B可以选择性地使用CRC-16算法来验证指定区域的内容。该计算使用与在输入和输出组上计算的CRC相同的算法。锁定单个插槽时,此摘要(CRC)总是被忽略。
•配置区域:使用地址87处的LockConfig的当前值,在配置区域内的所有128个字节上计算CRC。如果比较成功,LockConfig将设置为值00。
•数据和OTP区域:时隙内容以数字顺序连接,以创建CRC算法的输入。配置为包含ECC私钥的插槽从不包括在摘要CRC计算中。OTP区连接在最后一个数据时隙之后,并计算CRC值。如果比较成功,则LockValue将设置为值00。
如果模式[7]为零,并且输入摘要与设备上计算的不匹配,则返回错误,并且必须重复个性化过程。
对于包含必须验证的公钥的插槽,在写入和/或验证时,设备会修改最高有效的四位。摘要CRC是使用当前值计算的。
锁定数据/OTP区域不会锁定其配置设置为单独锁定的单个插槽。锁定数据/OTP区域后,可以使用模式[1:0]=0b10并指定要在模式[5:2]中锁定的插槽来单独锁定这些插槽。在锁定之前,此插槽可以按照插槽和密钥配置值指定的权限进行更新。一旦锁定了单个插槽,就不允许对指定插槽进行额外更新。
表11-25。 输入参数
名称 大小 注释
操作码 锁 1 0x17
参数1 模式 1 见表11-27。
参数2 KeyID 2 指定区域的摘要(CRC),或者如果设置了模式[7],则必须为0x0000。
数据 忽略 0 –
表11-26。 输出参数
名称 大小 注释
成功 1 成功执行后,ATECC608B会返回一个零值。
表11-27。 模式编码
位 意思
7 摘要检查位。锁定单个数据槽时会忽略此位。
0=在锁定区域之前验证汇总值。
1=检查区域摘要是否被忽略,并且无论区域的内容如何,区域是否被锁定。Microchip不建议使用此模式。
6 未使用,必须为零。
5-2 如果模式[1:0]的值为0b10,则要锁定的插槽编号;否则,这些位必须为零。
1-0 00=配置区域将被锁定。
01=数据和OTP区域将被锁定。
10=要锁定数据区域中的单个插槽。
11=非法值,设备将返回错误。
11.11. MAC命令
MAC命令计算存储在设备中的密钥的SHA-256摘要、质询和设备上的其他信息。此命令的输出就是此消息的摘要。如果消息中包含设备的序列号,则表示响应是“多样化的”。
使用此命令的正常命令流如下:
1.运行Nonce命令以加载输入质询,并可选择将其与生成的随机数组合。此操作的结果是设备内部存储的随机数。
2.可选地,运行GenDig命令以将设备中存储的一个或多个EEPROM位置与随机数组合。结果存储在设备内部。此功能允许使用两个或多个密钥作为响应生成的一部分。
3.运行此MAC命令,将步骤一(以及步骤二,如果需要)的输出与EEPROM密钥相结合,以生成输出响应(即摘要)。
或者,任何时隙中的数据(不必是秘密的)都可以通过相同的GenDig机制累积到响应中。这具有验证存储在该位置中的值的效果。
表11-28。 输入参数
名称 大小 注释
操作码 MAC 1 0x17
参数1 模式 1 控制消息中使用设备内的哪些字段(见表11-30)。
参数2 KeyID 2 内部密钥将用于生成响应。KeyID[3:0]仅用于选择插槽;然而,在SHA-256消息中使用了全部16个比特。
数据 challenge 0或32 要被摘要的消息的输入部分,如果模式[0]为一,则忽略该部分。
表11-29。 输出参数
名称 大小 注释
响应 32 SHA-256摘要
将使用SHA-256算法散列的消息由以下信息组成:
32字节 密钥[KeyID]或TempKey(见表11-30)
32字节 challenge或TempKey(见表11-30)
1字节 操作码(总是0x08)
1字节 模式
2字节 参数2
8字节 零
3字节 零
1字节 SN[8](从不清零)
4字节 SN[4:7](或零,见表11-30)
2字节 SN[0:1](从不归零)
2字节 SN[2:3](或0,见表11-10)
表11-30。 模式编码
位 意思
7 必须为零。
6 0=相应的消息位全部设置为零。
1=在消息中包括48位SN[2:3]和SN[4:7]。
5-3 必须为零。
2 如果设置了模式[0]或模式[1],则模式[2]必须与TempKey中的值匹配。SourceFlag或命令将返回一个错误。
1 0=SHA消息的前32个字节是从其中一个数据槽加载的。
1=前32个字节用TempKey填充。
0 0=SHA消息的第二个32字节取自输入质询参数。
1=第二个32字节用TempKey中的值填充。建议所有用户使用此模式。
11.12. Nonce命令(一个临时使用的数据缓冲)
nonce命令通过将内部生成的随机数与系统的输入值相结合,生成一个nonce供后续命令使用。结果随机数内部存储在tempkey中,生成的随机数返回系统。
输入值是为了防止对主机的重放攻击而设计的,它必须由系统从外部生成,并使用此命令传递到设备中。它可以是任何持续变化的值,如非易失性计数器、当前实时时间等,也可以是外部生成的随机数。
为了给后续的加密命令提供随机数值,根据下面列出的信息将输入数字和输出随机数散列在一起。得到的摘要(即随机数)总是存储在TempKey寄存器TempKey中。已设置Valid和TempKey。SourceFlag设置为Rand。该随机数然后可以由随后的ATECC608B命令使用。在外部系统需要知道实际随机数值的情况下,通常需要软件从外部计算该摘要值并将其存储在外部,以完成这些命令的执行。
或者,如果后续命令需要固定的nonce,也可以在直通模式下运行此命令。在这种情况下,输入值(32或64字节)被直接写入TempKey、Alternate Key Buffer或Message Digest Buffer而不进行修改。不执行SHA-256计算,TempKey。SourceFlag设置为Input(如果写入TempKey)。如果在这种模式下操作并使用重复输入的数值,则该设备无法提供防止重放攻击的保护。
在锁定配置区域之前,RNG产生0xFF FF 00 00 FF FF00 00的值,以便于测试。该测试值与上述方式的输入值相结合。
表11-31。 输入参数
名称 大小 注释
操作码 Nonce 1 0x16
参数1 模式 1 控制内部RNG或固定写入的机制,如表11-33所示。
参数2 0 2 位15:
0=OutData要么是RNG的输出,要么是零的单个字节。
1=在散列计算输入(消息)和命令输出参数中,RandOut都被TempKey取代
位14-0:
必须为零。
数据 NumIn 20、32、64 来自系统的输入值。
表11-32。 输出参数
名称 大小 注释
OutData 1或32 如果Mode[1:0]为3,则RNG的输出、计算的随机数或值为零的单个字节。
如果Mode[1:0]为零或一,参数2[15]为零,则输入NumIn参数必须为20字节长,用于创建TempKey内部存储的随机数的SHA-256消息体由以下内容组成。命令完成后,TempKey。SourceFlag设置为Rand。
32字节 来自随机数生成器的Randout
20字节 来自输入流的NumIn
1字节 Opcode(始终为0x16)
1字节 模式
1字节 参数2的LSB(必须始终为0x00)
如果Mode[1:0]为零或一,参数2[15]为一,则输入NumIn参数必须为20字节长,用于创建TempKey内部存储的随机数的SHA-256消息体由以下内容组成。在执行此命令之前,TempKey必须有效,并且其余TempKey标志的值保持不变。
32字节 TempKey
20字节 NumIn来自输入流
1字节 Opcode(始终为0x16)
1字节 模式
1字节 参数2的LSB(必须始终为0x00)
如果模式[1:0]为三,则此命令在直通模式下运行,TempKey加载NumIn。模式[5]确定是32字节还是64字节被写入TempKey。不执行SHA-256计算,不向系统和TempKey返回数据。SourceFlag设置为Input。
表11-33。 模式编码
位 意思
7-6 写入目标。忽略此字段,因为模式[1:0]为直通。
00=目标是临时密钥
01=目标是消息摘要缓冲区
10=目标是备用密钥缓冲区
11=无效
5 0=32个字节被写入目标。
1=来自输入的64个字节将被写入目标,该目标必须是TempKey或Message Digest Buffer。
除非模式[1:0]为直通,否则此位将被忽略。
4-2 必须是000。
1-0 00或01=将新的随机数与NumIn组合,存储在TempKey中。模式[7:5]被忽略。
10=无效。
11=在直通模式下操作,并使用NumIn写入目标。
11.13. PrivWrite命令(ECC私钥写入)
PrivWrite命令用于将外部生成的ECC私钥写入设备。
重要:为了获得最佳安全性,Microchip建议不要使用PrivWrite命令,而是使用GenKey(创建)命令从RNG内部生成私钥。
此命令指示的插槽必须通过KeyConfig进行配置。Private以包含ECC私钥和SlotConfig。IsSecret必须设置为1,否则此命令将返回错误。如果插槽已被单独锁定,此命令也将返回一个错误。
私钥数据总是以36字节整数的形式发送到设备。它首先被传递到设备MSB。前四个字节(32位)必须为零。
在锁定数据区域之前,此命令可用于写入插槽内容,而不考虑SlotConfig值和/或生成TempKey的方法。输入数据可以基于区域字节进行加密,也可以不基于区域字节对输入数据进行加密;如果输入数据是纯文本,则忽略MAC,但如果它是加密的,则MAC必须存在并正确计算。在锁定配置区域之前,此命令将始终返回一个错误。
一旦锁定数据区域,就需要完成以下写入操作:
•SlotConfig。IsSecret必须是一个。
•SlotConfig.WriteConfig必须设置为Encrypt,以指示写入需要加密。当WriteConfig设置为任何其他值时,无法写入插槽。
•当WriteConfig被设置为任何其它值时,不可能写入插槽。TempKey必须有效,其内容必须使用GenDig命令生成,并且在GenDig执行期间使用的KeyId必须与SlotConfig.WriteKey匹配。
•区域[6]必须设置为表明输入数据已按如下方式加密:
–前32个输入字节必须通过将其值与TempKey中的当前值异或进行外部加密。接下来的四个字节必须通过将其值与SHA-256(TempKey)的前四个字节异或进行外部加密。
•输入验证MAC必须按如下方式计算:
–SHA-256(TempKey、Opcode、参数1、参数2、SN[8]、SN[0:1]、<21字节的零>、36字节的PlainTextData)KeyConfigReqRandom,KeyConfig。ReqAuth和KeyConfig。此命令将忽略AuthKey,因为GenDig命令将检查它们的父加密密钥。
表11-34。 输入参数
名称 大小 注释
操作码 PRIVWRITE 1 0x46
参数1 区域 1 位7:必须为零。
位6: 0=输入数据未加密:仅当数据区域解锁时才合法。
1=使用TempKey对输入数据进行加密。
位5-0:必须为零
参数2 KeyID 2 要写入的键槽。
数据1 值 36 无法关闭临时文件夹:要写入插槽的信息可能已加密。无论密钥大小,密钥都必须为36字节长。
数据2 MAC 32 验证EEPROM写入操作的消息验证码。
表11-35。 输出参数
名称 大小 注释
成功 1 成功完成后,ATECC608B会返回一个零值。
11.14. 随机数命令
Random命令生成一个随机数供系统使用。随机数是通过内部NIST 800-90 A/B/C随机数生成器生成的。
在配置区域被锁定之前,RNG产生一个32字节的值0xFF、0xFF、0x00、0x00,0xFF,0xFF、x00、0x00…以便于测试。
表11-36。 输入参数
名称 大小 注释
操作码 RANDOM 1 0x1B
参数1 模式 1 位7-1:必须是零。
位0:被设备忽略
参数2 0 2 必须是0x0000。
数据 0 –
表11-37。 输出参数
名称 大小 注释
RandOut 32 随机数输出值。
11.15. 读取命令
Read命令从设备的一个存储区读取字(一个4字节字或一个32字节的8字块)。数据可以选择性地在返回到系统之前被加密。有关数据区字节和字寻址信息,请参阅第10.5节地址编码。
如果从一个槽中读取到Config. EncryptRead被设置了,则必须在执行此命令之前运行GenDig命令才能生成将用于加密的密钥。SlotConfig中指定的密钥。ReadKey必须已在GenDig计算中使用。该设备通过将从EEPROM读取的每个字节与来自TempKey的相应字节异或来加密要读取的数据。不允许对配置和/或OTP区域进行加密读取。
笔记  KeyConfig.ReqRandom,KeyConfig.ReqAuth和KeyConfig. AuthKey,在此命令中将被忽略,因为GenDig命令将检查它们的父加密密钥。
要读取的字节地址在传递到设备之前应除以四(去掉最低有效的两位)。如果正在读取32个字节,则忽略输入地址的最低有效三位。超出指定区域末尾的地址会导致错误。
以下限制适用于三个区域:
•配置区域:无论LockConfig的值如何,使用此命令始终可以读取此区域内的单词。
•OTP区域:如果OTP区域已解锁,此命令将返回一个错误。一旦锁定,可以使用4或32字节读取来读取整个OTP区域。
•数据区:如果数据区未锁定,则此命令返回错误;否则,相应SlotConfig字内的值控制对数据时隙的访问。如果SlotConfig。如果设置了IsSecret并尝试读取四字节,则设备会返回一个错误。如果设置了EncryptRead,则此命令将按照上面指定的方式加密数据。如果设置了IsSecret并清除了EncryptRead,则此命令将返回一个错误。如果IsSecret已清除,EncryptRead已清除,则此命令将在清除中返回所需的插槽。
部分数据块在加密之前总是零扩展到32字节。
表11-38。 输入参数
名称 大小 注释
操作码 读 1 0x02
参数1 区域 1 位7:0=4字节被读取
1=32字节被读取
位6-2:必须是零
位1-0:在配置、OTP或数据中进行选择。参见第10.5节地址编码。
参数2 地址 2 区域内要读取的第一个单词的地址。参见第10.5节地址编码。
数据 – 0 –
表11-39。 输出参数
名称 大小 注释
内容 4或32 指定内存位置的内容。
如果读取数据区域,并且在相应的SlotConfig字中设置了EncryptRead位,则会采取以下操作来加密数据:
•所有TempKey寄存器位必须正确设置如下,否则此命令将返回错误:
TempKey.Valid1
TempKey.GenDigData
1
TempKey.KeyIDSlotConfig.ReadKey
TempKey.SourceFlag
“Rand”
•将内存区域中的数据与TempKey进行异或运算。作为内容返回。
11.16. SecureBoot命令
SecureBoot命令支持外部MCU或MPU的安全引导。一般方法是,系统内的引导代码将使用该设备来帮助验证随后要执行的应用程序代码。
•将要执行的所有代码的摘要与签名一起发送到芯片。该摘要/签名对使用存储在设备中的公钥进行验证,并返回指示成功或失败的布尔值。
•有一个选项(模式==FullStore)允许将签名或验证摘要存储在芯片内的插槽中,以通过限制IO和/或计算时间来加快引导时间。此模式通过设置Config来启用。SecureBoot。SecureBootMode设置为10或11。要使用此配置模式,主机必须首先执行一个特殊的FullCopy验证命令模式,设备在该模式下接收摘要和签名。如果签名已验证,则签名或摘要将存储在Config指示的插槽中。SecureBoot。然后允许SigDig和命令模式的FullStore。
•FullCopy要写入的插槽可以配置为需要事先授权,以防止某些类型的拒绝服务攻击。如果公钥也配置为需要授权,则安全启动FullCopy模式将始终失败。这两个密钥中只有一个可以配置为需要授权。
返回代码可以使用来自主机的随机数进行MAC处理,使用IO保护机密来防止篡改主机和ATECC608B之间的线路。
如果通过将SecureBootPersistentEnable设置为1进行配置,则设备可以在通电时禁用各种密钥,直到完成正确的安全引导操作,之后这些密钥将继续可用,直到下次断电,即使设备在通电周期中进入睡眠状态。这是通过KeyConfig中的PersistentDisable位和持久锁存器来实现的,即使ATECC608B进入睡眠模式,持久锁存也会保持其状态。
安全引导操作通常被实现为限制对某些密钥和系统功能的访问,直到成功的安全引导发生为止。通电时通常是执行安全引导操作的时候。如果模式[6]设置为1,则SecureBoot命令不会执行安全引导检查,但会锁定后续的安全引导重试。一旦发生此锁定,任何后续的SecureBoot命令都将返回执行错误,直到发生新的电源循环。如果尚未设置模式[6],则可以在给定的电源循环期间执行额外的SecureBoot命令。一旦成功的安全引导完成,或者如果配置位SecureBootPersistentEnable为零,则忽略模式[6]。
如果持久锁存用于捕获安全引导成功的时间,则SecureBoot命令的任何后续操作都不会导致永久锁存重置。实现此模式是为了在系统已经运行后导致安全引导失败,从而防止Denialof Service攻击。
表11-40。 输入参数
名称 大小 注释
操作码 SecureBoot 1 0x80
参数1 模式 1 位7:如果为1,则必须对输入摘要进行加密,并将验证MAC附加到输出。如果配置。SecureBoot。设置了SecureBootRandNonce,此位对于Full、FullCopy和FullStore模式是必需的。不得为其余模式设置。
位6:如果为1,则安全引导功能可能会被禁止,直到下一次电源循环。
位3-5:必须为零。
位0-2:见表11-42。禁止使用表中未列出的所有值。
参数2 参数2 2 必须是零。
数据 数据 32,96 取决于模式:
Full,FullCopy:整个代码映像的32字节摘要,后面是64字节签名,由Config中的公钥验证。SecureBoot.pubKey。如果请求MAC,则对代码摘要进行加密。
FullStore:整个代码映像的32字节摘要。如果请求MAC,则对代码摘要进行加密。
表11-41。 输出参数
名称 大小 注释
成功 1 如果0x00,则比较成功完成,并产生匹配。如果为0x01,则表示计算已完成,但提交的值不匹配。其他错误代码表示命令编码、数学计算等方面的其他问题。
MAC 0或32 如果指示输出MAC,如果Match为1(验证成功),则MAC计算如下。如果输入模式参数指定不需要mac,则此参数为零长度。
表11-42。 模式编码
值 名称 意思
7 FullCopy 与Full相同,只是在验证成功时将摘要或签名复制到目标插槽。
6 FullStore 使用存储在密钥槽中的签名或摘要以及Config指示的公钥(如果需要)验证整个代码映像的输入代码摘要。SecureBoot.pubKey。MAC可以选择性地在成功时替换输出。
5 Full 使用输入流中的签名和Config指示的公钥验证整个代码映像的输入代码摘要。SecureBoot.pubKey。MAC可以选择性地在成功时替换输出。
4-0 保留 保留,未使用这些值。
如果模式参数允许MAC,并且设置了MAC请求位,则不存在解析或执行错误,并且通过签名验证或保存的摘要匹配来接受摘要,则不会返回成功码和匹配字节;相反,32字节的MAC将在输出参数中。主机软件必须检查返回字节的计数,因为MAC的第一个字节可以是0x00到0xFF之间的任何值,这本身不会指示任何状态,如下所示。
如果该模式指示要计算MAC,则输入代码摘要(也称为消息)将通过与存储在TempKey中的随机数串接的IO保护密钥的SHA256摘要进行异或来加密。如果配置。SecureBoot。如果设置了SecureBootRandNonce,则TempKey必须由Nonce命令使用随机模式生成。该IO保护密钥/TempKey摘要随后被重新用作输出MAC计算的一部分,如下所示。
如果设备要在Full、FullCopy或FullStore(Sig)代码模式下计算验证MAC,则必须提前运行Nonce命令,以确保TempKey中有可用的Nonce。如果设置了Config.SecureBoot.SecureBootRandNonce位,则Nonce命令必须在需要包含ATECC608B RNG的模式下运行。MAC将计算为以下消息的SHA-256摘要:
32字节 IO保护密钥的内容
32字节 Nonce.TempKey的前32个字节
计算上述两个元素的SHA256摘要,将摘要与输入的加密代码摘要(消息)异或,创建明文代码摘要
32个字节 IO保护密钥摘要和Nonce,如上面所示
32个字节 明文消息。输入缓冲区的前32个字节
64个字节 签名作为通过的输入缓冲区或从插槽,每个模式
4个字节 输入参数(Opcode,mode,参数2)
如果FullStore(Dig)中的设备要计算验证MAC,则必须提前运行Nonce命令,以确保TempKey中有一个随机数。MAC将被计算为以下消息的SHA-256摘要:
32字节 IO保护密钥的内容
32字节 Nonce。TempKey的前32个字节
计算上述两个元素的SHA256摘要,将摘要与输入的加密代码摘要(消息)异或以创建明文代码摘要
32个字节 IO保护密钥摘要和Nonce,如上面所示
32个字节 明文消息。输入缓冲器的前32个字节
4个字节 输入参数(操作码、模式、参数2)
11.17. 自检命令
对ATECC608B芯片内的一个或多个密码引擎进行测试。部分或全部算法将根据输入模式参数进行测试。
可以在EEPROM中设置Config.ChipOptions.powerUpSelfTest位,在这种情况下,SHA、AES和RNG测试将始终在通电或从睡眠中唤醒时运行。芯片无法配置为在唤醒/通电时自动运行ECC功能。
如果任何自检失败,无论是在通电、唤醒还是通过此命令自动调用,芯片都将进入芯片操作受限的故障状态。存储的故障状态总是在唤醒或电源循环时清除。请注意,自检失败(错误代码:0x07)与健康测试失败(错误码0x08)不同。
当处于故障状态时,允许以下操作:
•读取配置区域
•此自检命令。如果重新运行某个特定测试并在随后的尝试中通过,则故障寄存器中的该位将被清除。如果所有位都被清除,则ATECC608B恢复正常命令操作。
•通过调用模式参数为0的自检命令,可以读取故障寄存器的当前状态。
•任何其他命令,或读取任何其他区域,都将返回0x07的错误代码。使用SelfTest(0)确定故障原因。
表11-43。 输入参数
名称 大小 注释
操作码 自检 1 0x77
参数1 模式 1 可以设置多于1个比特。要测试所有算法,模式参数应为0x3F。如果模式为0x00,则返回此电源循环中存储的任何故障的当前值。
位7-6:必须为零
位5:如果为1,测试SHA算法
位4:如果1,测试AES算法-加密、解密和GFM
位3:如果是1,测试ECDH和公钥生成算法
位2:如果不是1,测试经合组织签名和验证算法
位1:必须是零
位0:如果有1,测试RNG、DRBG算法
参数2 参数2 2 必须是零。
表11-32。 输出参数
名称 大小 注释
成功 1 如果0x00,则所有请求的测试都运行无故障。如果非零,则以与模式参数相同的方式编码失败测试的位图,其中0x01表示测试失败。
11.18. SHA命令
计算SHA-256或HMAC/SHA摘要,供主机系统通用。SHA计算是在内部ATECC608B存储器(上下文缓冲器)的一个特殊部分中执行的,该部分不由任何其他命令读取或写入。任何任意命令都可以毫无问题地穿插在SHA命令的各个阶段之间。此SHA上下文在通电和唤醒时无效。在大多数情况下,如果在执行SHA命令的过程中发生错误,则上下文将被保留而不会更改。SHA/HMAC摘要的计算如下所示:
SHA/HMAC文摘的计算如下:
•启动:初始化SHA-256计算引擎和初始化内存中的SHA上下文。此模式不接受任何消息字节。
•HMAC_Start:初始化内存中的SHA上下文,并使用存储的32字节密钥进行初始HMAC计算。密钥必须配置为合法才能与MAC操作一起使用,并且在KeyID参数中指定。如果KeyID为0xFFFF,则HMAC密钥将取自TempKey。此模式不接受任何消息字节。此模式不支持32字节以外的密钥长度。
•更新:在这种模式下,可以多次调用该命令,以向SHA或HMAC消息添加字节。此模式的每次迭代都必须包括一条1-64字节的消息。
•公共:公共是更新模式的一种变体,其中来自指定EEPROM插槽的64字节ECC公钥包含在SHA256 HASH中。
•结束:SHA-256或HMAC计算完成,结果摘要被放入输出缓冲区。成功执行“结束”命令后,存储的SHA上下文将无效。如果在模式参数中如此指定,则还可以将摘要复制到TempKey或Message digest缓冲区中。0到64个字节可以被传递到命令中,作为在计算摘要之前要使用的最终消息字节。
如果SHA上下文是用HMAC_Start启动的,则使用传递到HMACstart阶段的密钥ID完成HMAC计算,并将得到的摘要放入输出缓冲器中。在该计算过程中,密钥从ATECC608B存储器重新加载,如果在HMAC_Start和End阶段之间密钥存储位置发生任何变化,则结果将不正确。
存储的SHA上下文可以从芯片中卸载(Read_context)并存储在主机存储器中,以允许同时计算多个SHA摘要。存储在主机存储器中的上下文稍后可以多次或仅一次被写回到ATECC608B。可以在Init或Update模式之后读取上下文,但一旦执行了End阶段,就无法再读取上下文。主机不得以任何方式操作存储的上下文,否则结果可能不正确。
•Read_Context:从ATECC608B读取可变长度上下文,同时使上下文在芯片内有效。输出数据参数的总长度总是从40到99个字节,并且可以根据输出分组中的长度字段来确定,或者计算为40加上输出中第一个字节的最低有效六位。HMAC上下文不允许使用此模式(即,如果上下文是用HMAC_Start初始化的,或者如果公钥已通过公共模式添加到上下文中)。
•Write_Context:从主机向ATECC608B写入SHA256上下文,以完成后续的更新操作。此上下文必须先前已使用read_context模式从芯片中读取。ATECC608B根据先前Read_context命令生成的数据参数的前4个字节来确定上下文的大小。
此命令还可以选择性地生成一个摘要,供Verify(ValidateExternal)用于验证存储的公钥,这允许在使用X.509格式签名时加快未来的签名验证。为了实现这一点,可以在SHA(结束)迭代之前插入SHA(公共)迭代,并且存储在由参数2指定的槽中的64字节公钥将被添加到消息中。如果指定的插槽不包含公钥,或者如果SlotConfig。NoMac已设置为公钥槽。
只有当SHA(public)迭代发生在Config指示的块号处时,Verify(ValidateExternal)才会成功验证存储的公钥。SHA(更新)命令序列中的X509format.publicPosition(X509format[3:0]),以及传递给SHA命令的块总数是否与Config中的值匹配。X509格式。TemplateLength(X509格式[7:4])。此限制防止生成非标准X.509模板,该模板可能会将插入的公钥推入模板的未检查区域。
出于实现原因,此SHA命令的总消息长度限制为2^28字节。
表11-45。 输入参数
名称 大小 注释
操作码 SHA 1 0x47
参数1 模式 1 位7-6:除“Finalize”外被忽略,当它被解释为:
00=将结果摘要同时放入输出缓冲区和TempKey
01=将结果文摘同时放入输出缓冲器和消息摘要缓冲区
10=不使用
11=仅将结果摘要放入输出缓冲区时
位5-3:必须为零。
位2-0:见表11-47。禁止使用表中未列出的所有值。
参数2 长度 2 Message参数中的字节数。如果模式为“HMAC_start”,则HMAC密钥的KeySlot;如果模式为”Public“,则为Public key。
数据 消息 0-64,40-99 “更新”或“完成”模式操作中最多包含64字节的数据。如果为“Write_Context”,则最多可提供99个字节。
表11-32。 输出参数
名称 大小 注释
响应 1或32或40-99 SHA256摘要如果模式是最终确定模式之一,否则为零表示成功或错误代码。如果Read_Context,则为40到99字节。
表11-27。 SHA模式编码
名称 位2-0 注释
开始 0 初始化内部SHA256上下文内存。不接受任何消息字节(长度必须为零)。
更新 1 将消息参数中的1-64个字节添加到内存中的当前SHA上下文中。
结束 2 完成SHA-256或HMAC计算,并将摘要放入输出缓冲区。可选地,在完成之前在上下文中包括1-64个字节。
公共 3 将64字节的公钥从EEPROM插槽添加到上下文中。
HMAC_Start 4 使用HMAC(SHA-256)的初始化值加载内部SHA上下文,读取HMAC密钥并将其散列到上下文中。长度字段指定用于HMAC计算的密钥,0xFFFF表示使用TempKey。不接受任何消息字节(长度必须为零)。
Read_Context 6 从要存储在主机内存中的设备中读取当前上下文。
Write_Context 7 HMAC_Start 4 Read_Context 6 Write_Context 7将上下文写入(恢复)到ATECC608B上下文存储器中。写入的字节来自Read_Context命令输出。
11.19. 签名命令
签名命令使用ECDSA算法生成签名。KeyID指定的插槽中的ECC私钥用于生成签名。
消息可以是外部生成的,也可以是内部生成的,如下所述:
•外部消息生成(模式[7]为1)
-系统从外部编译要签名的信息,并使用外部哈希算法计算该信息的摘要。然后,必须使用Nonce命令将此摘要加载到TempKey或消息摘要缓冲区中。
–必须使用SlotConfig启用外部签名。ReadKey[0],否则此命令将返回错误。
•内部消息生成(模式[7]为0)
–要签名的消息是内部生成的。此模式的典型用途是对内部生成的随机密钥进行签名该消息包括GenDig或GenKey命令(存储在TempKey中)的输出,以及根据以下描述的各种其他状态信息。如果TempKey无效,或者不是使用GenDig或GenKey生成的,则此命令将返回错误。
–必须使用SlotConfig启用内部签名。ReadKey:1,否则此命令将返回错误。
–如果数据区域尚未锁定,则内部签名将始终生成错误代码。
此命令指示的插槽必须通过KeyConfig进行配置。Private以包含ECC私钥和SlotConfig。必须将IsSecret设置为1,否则此命令将失败。
执行此命令时,芯片忽略KeyConfig. ReqRandom。如果模式指示消息是内部生成的,则GenDig或GenKey命令将询问相应的ReqRandom位,并且如果作为这些命令的输入的TempKey不是从RNG源导出的,则返回错误。
设备无法正确生成临时密钥的统计概率很小,在这种情况下,该命令将返回包含ECC故障代码的单个字节(见表10-3)。如果重新提交,该命令通常会成功。
表11-48。 输入参数
名称 大小 注释
操作码 签名 1 0x41
参数1 模式 1 见表11-50
参数2 KeyID 2 用于生成签名的内部存储的私钥。KeyConfig[KeyID]中指定的曲线。将使用KeyType。
表11-32。 输出参数
名称 大小 注释
响应 64 由R和S组成的签名或错误代码。
表11-27。 模式编码
位 意思
7-5 1 00x=根据TempKey中的当前值以及如下所示的密钥槽配置信息生成要签名的内部消息。将SN位设置为
001x=生成如下内部消息,并包括存储的48位序列号(SN[2:3]和SN[4:7])
1x0=要签名的消息在TempKey中
1x1=要签署的消息在message Digest Buffer中
4-1 所有位必须是零。
0 0=验证(Validate)将使用生成的签名
1=验证(Invalidate)将使用该生成的签名。
在所有其他情况下,此位必须为零。
笔记:

  1. 该领域的“x”表明比特模式可以是0或1。根据以下信息生成的内部签名超过55字节。信息的第一个方面是Genkey或Gendig在TempKey上提供的关键摘要信息。这封信还包括有关TempKey Calculation所用关键信息的整理。这项55字节的信息被创建如下:
    笔记:如果在Nonce和Sign commands之间存在多个GenKey或GenDig commands,则只会签署最后一个关键用途的配置。
    “SlotLocked”字段中指向TempKey计算中最后一个键的位置位于下面列出的字节LSB中,无论该插槽是单独锁定还是不锁定。
    如果一个筹码包含一个关键的公共关键,而这一关键指标必须在被Verify使用之前进行评估,并且有效性为0x05,那么PubKey的估值将为0x01。在所有其他情况下,将为0。
    32字节 TempKey(必须由GenKey或GenDig生成)
    1字节 操作码
    1字节 模式
    2字节 参数2
    2字节 SlotConfig[TempKeyFlags.KeyID]
    2字节 KeyConfig[TempKeyFlags.KeyID]
    1字节 TempKeyFlags(b0-3:KeyID,b4:sourceFlag,b5:GenDigData,b6:GenKeyData,b7:NoMacFlag)
    2字节 归零
    1字节 SN[8](从不归零)
    4字节 SN[4:7](或零,请参阅模式)
    2字节 SN[0:1](从不置零)
    2字节 SN[2:3](或0,请参阅模块)
    1字节 SlotLocked:TempKeyFlags。KeyID
    1字节 PubKey Valid(或零,见上文)
    1字节 0x00
    使用SHA-256算法对该消息进行散列处理,并将其传递给ECDSA签名计算引擎。
    11.20. UpdateExtra命令(修改用户自定义的I2C地址的值)
    UpdateExtra命令用于在配置区域被锁定之后更新配置区域(位置84和85)内的两个额外字节的值。对于I2C芯片,根据Config.ChipMode.Bit0的状态,字节85可以用作I2C地址。
    这些字节本质上是一次性写入字节:一旦它们被写入非零值,就无法再写入。
    •如果模式参数指示地址84处的UserExtra:
    –如果UserExtra中的当前值(配置区域的字节84)为零,则UpdateExtra用NewValue的LS字节写入该字节并返回成功。
    –如果UserExtra中的当前值为非零,则该命令返回执行错误。
    •如果模式参数指示地址85处的UserExtraAdd:
    –如果UserExtraAdd中的当前值(配置区域的字节85)为零,则UpdateExtra用NewValue的LS字节写入该字节并返回成功。
    –如果UserExtraAdd中的当前值为非零,则该命令返回执行错误。
    表11-51。 输入参数
    名称 大小 注释
    操作码 UpdateExtra 1 0x20
    参数1 模式 1 位7-1:必须为零。
    位0: 1=更新配置字节85
    0=更新配置字节84
    参数2 NewValue 2 LSB: 可选择写入配置区域中的位置84或85的值。
    MSB:必须是0x00。
    数据 – 0 –
    表11-32。 输出参数
    名称 大小 注释
    成功 1 如果内存字节已更新,则此命令返回值0x00;否则,它将返回一个执行错误。
    11.21. 验签命令
    Verify命令接受ECDSA[R,S]签名,并在给定输入消息摘要和公钥的情况下验证该签名是否正确生成。在所有情况下,签名都是对命令的输入。
    可以从Verify命令返回可选的MAC,以击败任何中间人攻击。如果验证计算表明签名是根据输入摘要正确生成的,则将基于存储在TempKey中的输入随机数和存储在ATECC608B和主机MCU中的IO保护秘密的值来计算MAC。MAC输出只能在外部和存储模式下生成。必须为MAC计算启用IO保护功能。有关MAC消息的具体详细信息,请参阅下文。
    Verify(验证)命令可在四种不同模式下运行:
    1.外部模式
    要使用的公钥是命令的输入。在运行此命令之前,必须使用Nonce命令将消息写入TempKey。在这种模式下,设备仅加速公钥计算并返回布尔结果。
    2.存储模式
    要使用的公钥位于KeyID EEPROM插槽中。消息以前存储在TempKey或消息摘要缓冲区中。如果以下配置检查KeyID处的公钥成功,则执行公钥验证计算,并向系统返回布尔结果;否则,该命令将返回一个执行错误。
    –如果KeyConfig[KeyID]。PubInfo是其中之一,密钥之前必须使用Verify命令进行过验证。
    –如果KeyConfig[KeyID]。如果设置了ReqAuth,则必须使用基于KeyConfig. AuthKey中的密钥的Verify或CheckKey命令执行先前的密钥授权。
    –如果KeyConfig[KeyId].KeyType表示设备不支持ECC曲线,或表示“不是ECC密钥”,此命令将失败。
    –此模式用于设置KeyConfig。其他一些槽中的AuthKey字段指向KeyID。如果验证成功,则执行内部AuthComplete。将设置有效标志和AuthComplete。保留了KeyID。参见第4.4.8节授权密钥。
    -Data1和Data2必须为32字节,Data3和Data4的长度必须为零。
    3.验证和无效模式
    验证和无效方式用于验证或无效存储在KeyID处的EEPROM中的公钥。签名被输入到设备,部分消息在TempKey中。在SlotConfig[KeyID]中找到正在验证的公钥。ReadKey和ECDSA Verify消息由KeyID和TempKey组成,格式如下所述。只能验证KeyID 8–15;因此,如果KeyID为0–7,则此命令将返回一个错误。
    –如果ECC验证通过,则KeyID处的公钥的块0的第一个字节的最高有效四位将被设置为0x5用于Validate,0xA用于Invalidate。参见第5.1.1节ECC密钥格式
    -无论LockValue字节和/或与该插槽对应的SlotLocked位的状态如何,都会进行Key(in)validation。
    –如果与指定键对应的X509格式字节为非零,则Verify命令将返回一个错误。
    OtherData[17]:Bit0表示要操作的密钥的有效性。它必须是“0”(无效)才能允许Validation操作,或者是“1”(有效)才能允许Invalidation操作。如果OtherData[17]:Bit0与Validate/Invalidate模式中的Mode[2]不匹配,则此命令将返回错误。
    Data1和Data2的大小与存储模式相同。
    4.验证外部模式
    验证外部模式用于在使用X.509格式证书时验证存储在EEPROM中KeyID处的公钥。消息摘要必须为TempKey。消息摘要必须是TempKey。TempKey必须是使用SHA(Public)命令生成的,并且该计算的密钥必须与KeyID相同。在SlotConfig[KeyID]中找到正在验证的公钥。ReadKey和ECDSA Verify消息由KeyID和TempKey组成,格式如下。只有KeyID 8–15可以验证,因此如果KeyID为0–7,则此命令将返回错误。
    –如果ECC验证通过,则KeyID处的公钥的块0的第一个字节的最高有效四位将被设置为0x5。参见第5.1.1节ECC密钥格式。
    -无论LockValue字节和/或与此插槽对应的SlotLocked位的状态如何,都会进行密钥验证。
    –如果指定密钥对应的X509格式字节为零,Verify命令将返回一个错误。
    –Data1和Data2的大小必须分别为32字节。Data3和Data4的长度都必须为零。
    无论何种模式,如果公钥存储在EEPROM插槽和KeyConfig中。如果为该时隙设置了ReqRandom,则TempKey中的值必须使用ATECC608B中的随机数生成器生成。在这种情况下,消息摘要缓冲区可能不会用于消息。
    表11-53。 输入参数
    名称 大小 注释
    操作码 Verify 1 0x45
    参数1 模式 1 模式[2:0]
    000=存储模式
    001=验证外部模式
    010=外部模式
    011=验证模式
    100-110=不使用
    111=无效模式
    模式[4:3]:必须为零。
    模式[5]:如果为1,则要验证的消息来自消息摘要缓冲区,否则消息在TempKey中。忽略,除非模式[2:0]为000或010。
    模式[6]:必须为零。
    模式[7]:如果为1,则将在输出中附加一个验证MAC。忽略,除非模式[2:0]为000或010。
    参数2 KeyID 2 如果模式[2:0]为存储模式,则KeyID包含包含要用于验证的公钥的插槽编号。KeyConfig[KeyID]。KeyType确定要使用的曲线。
    如果Mode[2:0]为ValidateExternal Mode,则KeyID包含包含要验证的公钥的插槽编号,该公钥必须由以前的SHA(public)命令指定。用于执行验证的父密钥存储在SlotConfig[KeyID]中。ReadKey和KeyConfig[ParentKey]。KeyType确定要使用的曲线。
    如果模式[2:0]为外部模式,KeyID包含用于验证签名的曲线类型。此字段中的值与配置区域内keyConfig字中的KeyType字段编码相同。
    如果Mode[2:0]是Validate或Invalidate模式,KeyID包含要验证的公钥所在插槽的编号。用于执行(in)验证的父密钥存储在SlotConfig[KeyID]KeyProp中。ValidateKey。SlotConfig[ParentKey]。AlgoInfo确定要使用的曲线。
    数据1 R 32 待验证ECDSA签名的R成分。
    数据2 S 32 待验证ECDSA签名的S成分。
    数据3 X 0或32 如果模式[1:0]为外部,则用于验证的公钥的X组件。
    数据4 Y 0或32 如果模式[1:0]为外部,则用于验证的公钥的Y组件。
    数据5 其他数据 0或19 如果是验证模式,则字节用于生成验证消息。在此模式下,X和Y的长度必须为零,并且此参数紧跟在输入参数流中的S之后。对于所有其他模式,长度必须为零。
    表11-54。 输出参数
    名称 大小 注释
    响应 1 如果可以使用公钥验证消息的签名,则返回零值。如果签名不匹配,则返回值1;如果存在某种形式的解析或执行错误,则返回另一个错误代码。
    如果设备要计算验证MAC(即设置模式[7]),则将其计算为以下消息的SHA-256摘要:
    32字节 IO保护密钥的内容
    32字节 消息。如果Mode[5]为0,则从TempKey开始,否则为消息摘要缓冲区的前32个字节
    32字节 系统nonce。如果模式[5]为0,则消息摘要式缓冲区的前32个字节,否则为消息摘要式缓冲器的后32个字节
    64字节 签名作为数据1/2传递到设备
    4字节 输入参数(操作码、模式、参数2)
    用于ECDSA验证操作的消息取决于以下模式:
    •存储、外部模式
    TempKey或消息摘要缓冲包含消息的SHA-256摘要,取决于模式[5]。
    •ValidateExternal 模式
    TempKey包含消息的SHA-256摘要。
    •验证或无效模式
    TempKey包含位于KeyID的PublicKey的摘要。它必须是通过KeyID插槽使用GenKey命令生成的。然后,该设备基于与Sign(Internal)命令相同的格式生成一条消息,只是参数和状态字节是从输入参数OtherData复制的。该消息的格式如下:
    32字节 TempKey(必须由GenKey生成)
    1字节 Sign-Opcode
    10字节 OtherData[0:9]
    1字节 SN[8]
    4字节 OtherData[10:13]
    2字节 SN[0:1]
    5字节 OtherData[14:18]
    此消息使用SHA-256进行散列处理,并用作ECC验证操作的消息输入。
    11.22. 写入命令
    Write命令将一个4字节字或一个32字节的8字块写入设备上的一个EEPROM区域。根据此插槽的WriteConfig字节的值,数据可能需要在发送到设备之前由系统加密。此命令不能用于写入配置为ECC私钥的插槽(请参阅PrivWrite)。
    以下限制适用于使用此命令在区域内写入:
    •配置区域:如果配置区域被锁定或设置了区域[6],则此命令将返回错误;否则字节按请求写入。任何写入永久禁止写入的字节的尝试(见第2.2节EEPROM配置区域)都会导致命令错误,而不会对EEPROM进行任何修改。
    •OTP区域:如果OTP区域未锁定,则可以使用此命令写入所有字节。如果OTP区域被锁定,则永远不允许写入OTP区域。
    •数据区域:如果数据区域未锁定,则所有区域中的所有字节都可以用纯文本或加密数据写入。锁定数据区域后,WriteConfig字节内的值控制对数据槽的访问。如果此插槽的WriteConfig位设置为Always,则必须将输入数据传递到清除中的设备。如果SlotConfig的Bit[14]设置为1,则必须对输入数据进行加密并计算输入MAC。如果使用SlotLocked单独锁定插槽,则此命令总是返回一个错误。
    只有在满足以下所有条件的情况下,才允许在数据区域中进行四字节写入:
    •SlotConfig.IsSecret必须为零。
    •SlotConfig.WriteConfig必须始终为。
    •输入数据不得加密(即区域[6]必须为零)。
    •必须锁定数据/OTP区域。
    在OTP区域中永远不允许进行四字节写入。
    两个输入地址字节按照第10.5节地址编码中所述的方式形成。最低有效的三位,地址[0:2],指示块中的字,或者如果正在写入整个32字节块,则忽略它们。地址[3:6]包含写入数据区域的插槽号或配置和OTP区域的块号。对于数据区域,地址[8:9]用于指示插槽内的块。超过指定区域大小的地址值会导致命令返回错误。
    对于插槽8到15,如果KeyConfig。PubInfo表示插槽包含可验证的ECC公钥,然后当写入插槽中的任何块时,通过将0xA写入插槽的块0的字节0的最高有效四位,密钥将无效。如果KeyConfig。PubInfo为零,则插槽的块0的字节零的最高有效四位用输入参数的数据写入。
    如果KeyConfig.PubInfo为1并且ECC公钥已验证,如果WriteConfig设置为0001(PubInvalid),则写入将失败。在写入之前,请使用Verify(Invalidate)使公钥无效。
    在配置区域被锁定之前,任何写入OTP和/或数据区域的尝试都会导致设备返回错误代码。写入数据区域时,如果相应的SlotLocked位为零,则无论OTP/数据区域是否已锁定,此命令都会返回错误。
    11.22.1. 输入数据加密
    输入数据可以被加密以防止在个性化或系统操作期间窥探总线。系统通过将明文与TempKey中的当前值异或来加密数据。收到后,设备将输入数据与TempKey异或,以在写入EEPROM之前恢复纯文本。
    无论何时对数据进行加密,都需要授权输入MAC。此MAC计算如下:
    SHA-256(TempKey、Opcode、参数1、参数2、SN[8]、SN[0:1]、<25字节零>、PlainTextData)
    在锁定OTP/Data区域之前,区域[6]用于向设备指示输入数据是否加密。在锁定OTP/数据区域之后,忽略区域[6],并且仅使用与正在写入的插槽相对应的SlotConfig的位14来确定输入数据是否被加密。
    如果指示数据加密,则在调用此命令之前,TempKey必须有效,并且它必须是GenDig的结果。具体来说,这意味着TempKey。Valid和TempKey。GenDigData必须同时设置为一。GenDig用于创建TempKey并存储在TempKey中的最后一个插槽。KeyID必须与SlotConfig中的匹配。WriteKey。在数据锁定之前,任何密钥都可以用于生成TempKey,并且GenDigData位被忽略。
    KeyConfig.ReqRandom,KeyConfig。ReqAuth和KeyConfig。此命令将忽略AuthKey,因为GenDig命令将检查它们的父加密密钥。
    当在时隙0到7和9到15的末尾对部分块执行加密写入时,所有32个字节的输入都必须发送到设备,未使用的btis仅用作MAC计算的一部分。它们的值不会影响EEPROM的最终内容。
    表11-55。 输入参数
    名称 大小 注释
    操作码 写 1 0x12
    参数1 区域 1 位7: 0=4字节将被写入。
    1=32个字节将被写入。
    位6: 0=输入数据处于清除状态。
    1=输入数据已加密。锁定数据区域后,此位将被忽略。
    位5-2:必须为零。
    位1-0:在配置、OTP或数据中选择。参见第10.5.1节区域编码
    参数2 地址 2 要在区域内写入的第一个单词的地址。参见第10.5节地址编码。
    数据1 值 4或32 可以对要写入区域的信息进行加密。
    数据2 MAC 0或32 用于验证地址和数据的消息身份验证代码。
    表11-56。 输出参数
    名称 大小 注释
    成功 1 成功完成后,ATECC608B会返回一个零值。
  2. 兼容性
    12.1. 微芯片ATECC608A
    ATECC608B旨在提供比ATECC608A增强的安全配置文件,同时保持向后兼容性。以下详细介绍了设备的更改和增强功能。没有更改任何配置位字段。为ATECC608A定义的配置在功能上与ATECC608B设备相同。
    更正、增强
    ATECC608B设备中已更正或增强以下项目:
    •现在提供两个温度范围:
    –标准工业温度范围:-40℃至+85℃
    –标准工业气温范围:-40°C至+100°C
    •在总线上有多个设备的低I2C频率下运行将不再产生总线争用问题。
    •修改Verify、SecureBoot、Lock和Read命令的命令计时。
    •新的封装选项:三引线接触式封装和WLCSP,适用于合格客户。(请联系Microchip销售以获取WLCSP选项。)
    12.2. 微芯片ATECC508A
    ATECC608B被设计为与ATECC508A设备完全兼容,以下列出的功能除外。如果ATECC608B配置正确,为ATECC508A编写的软件将与ATECC608B一起工作,无需任何必要的更改,但以下列出的功能除外。
    笔记  ATECC608B中配置区的大多数元素在位置和值上与ATECC508A相同。然而,可能需要更改存储在LastKeyUse字段中的初始值,以符合本文档中对这些字节的新定义。该字段包含时隙15限制使用函数的初始计数,该函数在ATECC608B中通过单调计数器得到支持。
    注意:命令的执行时间在ATECC608B和ATECC508A之间发生了变化。如果已实施轮询,则这些更改不会引起问题。如果使用了固定时间,则必须根据需要进行评估和更新。
    ATECC608B与ATECC508A的新功能
    •具有IO加密和身份验证的安全引导功能
    •KDF命令,支持PRF、HKDF、AES
    •AES命令,包括加密/解密
    •AES的GCM AEAD模式的GFM计算功能
    •更新的NIST SP800-90 A/B/C随机数生成器
    •具有上下文保存/恢复功能的灵活SHA/HMAC命令
    •显著缩短了SHA命令执行时间
    •易失性密钥许可可防止设备传输
    •传输密钥锁定可在交付过程中保护编程设备
    •计数器限制匹配功能
    •SRAM中的短期密钥生成,也支持ECDH和KDF
    •验证命令输出是否可以使用MAC进行验证
    •ECDH的加密输出
    •增加了自检命令,可选的自动通电自检
    •内置X.509证书密钥验证的未对齐公钥
    •增加执行时间时可选的功率降低
    •数据(秘密)区域锁定后的可编程I2C地址ATECC608B与ATECC508A相比消除了功能
    •删除了HMAC命令,通过新的更强大的SHA命令替换
    •消除了OTP消耗模式,现在是只读的
    •暂停命令以及UpdateExtra中的相关Selector功能被取消
    •插槽15特殊限制使用被取消,取而代之的是标准单调计数器限制使用
    •SHA命令在摘要计算过程中不再使用TempKey,TempKey中的结果在整个SHA操作中保持不变。然而,TempKey仍可用于初始化HMAC_Start的SHA或存储最终摘要
    12.3. 微芯片ATSHA204A、ATECC108A
    ATECC608B通常与所有ATSHA204/A和ATECC108/A设备兼容。如果配置得当,它可以用于当前使用这些设备的大多数情况。有关ATSHA204A和ATECC108A兼容性限制,请参阅ATECC508A数据表。
  3. 机制
    13.1. 单线接口的接线配置
    使用单线接口可以将ATECC608B连接到主机,只需使用一个引脚(SDA)即可双向传输数据。此接口不使用SCL引脚,SCL引脚必须接地。
    为了防止内部二极管正向偏置并在系统中的电源平面上汲取电流,SDA引脚上的电阻器上拉必须连接到与VCC引脚连接的同一电源或较低电压轨。
    如果SDA的信号电平不同于VCC电压,请参阅本文件第9.4节“直流参数:所有I/O接口”,以确保信号电平在睡眠模式下将过大的漏电流降至最低。如果ATECC608B设备在物理上远离总线主设备,并且总线主设备的电源电压不同于ATECC608B的电源电压,则可能发生这种情况。如果SCL引脚不用于GPIO功能,Microchip建议将其配置为输入并连接到地,以防止睡眠期间出现漏电流。
    图13-1。 单线接口的3线配置

13.2. 寄生功率模式的接线配置
当使用SWI接口操作时,ATECC608B可以在寄生功率模式下操作。此模式通过SDA信号向设备提供电源,并将其存储在本地电容器上。该模式的实现确实需要额外的肖特基二极管来对电容器充电,并在SDA信号被拉低或被驱动为低时阻止电容器的放电。见图13-2。
为了最大限度地减少在寄生功率模式下操作ATECC608B所需的电流,建议将除法器设置为最高的除法器值,这将导致最低的功率。有关各种可能的设置和电源模式,请参阅第2.2.6节芯片模式(字节19)和表9-5。
作为Microchip整体安全功能的一部分,所有加密设备的零件标记都是故意模糊的。包装顶部的标记没有提供任何关于实际设备类型或设备制造商的信息。包装上的字母数字代码提供制造信息,并将随组装批次而变化。包装标记不应作为任何进货检验程序的一部分。
图13-2。 寄生功率配置

主机微控制器上的I/O信号必须是CMOS图腾柱驱动器。I/O提供的电流量必须大于或等于ATECC608B所需的最大电流,如第9.4节“DC参数:所有I/O接口”所示。在最初给系统通电时,电容器C1将需要通过主机微控制器I/O通过驱动该信号HIGH来充电。具体充电时间将取决于I/O上的上拉驱动器的强度和电容器C1的大小。在命令被发送到ATECC608B之后,SDA信号必须由微主机保持为高电平,直到命令完成。当ATECC608B正在传输时,SDA信号将被电阻器R1拉高并被ATECC608B拉低。建议使用1 kΩ 电阻器用于寄生功率模式下的R1。
14. 包装标记信息
作为Microchip整体安全功能的一部分,所有加密设备的零件标记都是故意模糊的。包装顶部的标记没有提供任何关于实际设备类型或设备制造商的信息。包装上的字母数字代码提供制造信息,并将随组装批次而变化。包装标记不应作为任何进货检验程序的一部分。
15. 包装图纸
15.1. 8引线SOIC
15.2. 8焊盘UDFN
15.3. 3导线触点
16. 修订历史
微芯片网站
Microchip通过我们的网站www.Microchip.com/提供在线支持。此网站用于使文件和信息易于向客户提供。部分可用内容包括:
•产品支持–产品介绍和勘误表、应用程序说明和示例程序、设计资源、用户指南和硬件支持文档、最新软件版本和存档软件
•一般技术支持–常见问题解答(FAQ)、技术支持请求、在线讨论组,Microchip设计合作伙伴计划成员列表
•Microchip业务——产品选择和订购指南、最新的Microchip新闻稿、研讨会和活动列表、Microchip销售办事处、分销商和工厂代表列表
产品变更通知服务
Microchip的产品更改通知服务有助于让客户了解Microchip产品的最新情况。当与感兴趣的特定产品系列或开发工具相关的更改、更新、修订或勘误表出现时,订阅用户将收到电子邮件通知。
要注册,请访问www.microchip.com/pcn并按照注册说明进行操作。
客户支持
Microchip产品的用户可以通过以下几个渠道获得帮助:
•分销商或代表
•当地销售办公室
•嵌入式解决方案工程师(ESE)
•技术支持客户应联系其分销商、代表或ESE以获得支持。
当地销售办事处也可为客户提供帮助。本文档中包含销售办事处和地点的列表。
技术支持可通过以下网站获得:www.microchip.com/support
产品识别系统
要订购或获取信息,例如定价或交货信息,请咨询工厂或上市销售办事处。
零件号 -XX X XX -X
设备 封装 温度范围 I/O型 磁带和卷轴
微芯片设备代码保护功能
请注意Microchip设备上代码保护功能的以下详细信息:
•Microchip产品符合其特定Microchip数据表中包含的规范。
•Microchip相信,在正常条件下以预期方式使用时,其产品系列是安全的。
•有一些不诚实且可能是非法的方法被用来试图破坏微芯片设备的代码保护功能。我们认为,这些方法要求以超出Microchip数据表中包含的操作规范的方式使用Microchip产品。如果不侵犯Microchip的知识产权,很可能无法实现违反这些代码保护功能的尝试。
•Microchip愿意与任何关心其代码完整性的客户合作。
•无论是Microchip还是任何其他半导体制造商都无法保证其代码的安全性。代码保护并不意味着我们保证产品“牢不可破”。代码保护是不断发展的。我们Microchip致力于不断改进我们产品的代码保护功能。试图破坏Microchip的代码保护功能可能违反了《数字千年版权法》。如果此类行为允许未经授权访问您的软件或其他受版权保护的作品,您可能有权根据该法案起诉要求救济
法律通知
商标
质量管理体系
全球销售和服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值