文章目录
- 前言
- 一、概述
- 二、证书与私钥
- 三、认证协议
- 四、认证消息
- 五、时序要求
- 六、协议流程示例
-
- (一)、简单流程
- (二)、带缓存的流程
- (三)、带缓存和吊销的流程
- [(四)、先挑战(Challenge First)流程](#(四)、先挑战(Challenge First)流程)
- 七、参考资料
前言
无线充电是无需物理导线连接,通过电磁场隔空传递电能的技术,其中Qi基于电磁感应技术,使用发射端(Tx)线圈通高频交流电产生交变磁场为接收端(Rx)线圈感应磁场生成电流,整流后为电池供电。
本文介绍Qi-v1.3.3-authentication的内容。
一、概述
本规范定义一套接收端验证发射端身份的认证协议。在本规范语境中,认证是具备防篡改能力的身份核验手段,接收端可通过认证信任发射端完全遵循 Qi 规范工作。本 1.0 版认证协议依托 Qi Specification Communications Protocol 定义的数据传输通道收发消息。
认证机制允许厂商自定义设备准入策略;在实际商用场景中可提供安全保障。例如手机厂商若担心劣质充电器损坏设备、带来安全隐患,可设置策略限制从未认证充电器取电。
本规范设计思路与 USB 认证规范高度对齐,市面上多款产品会同时兼容两套标准。
除本规范外,WPC 厂商协议包含认证相关法律条款与落地要求,涵盖密钥安全存储、证书吊销规则。
(一)、密码学标准参考
无特殊说明时,所有标准以 2018 年 1 月 1 日发布版本为准:
ECDSA
ANSI X9.62-2005
NIST FIPS 186-4 第 6 章
ISO/IEC 14888-3 第 6.6 节
NIST P-256, secp-256r1
NIST FIPS 186-4 附录 D
ISO/IEC 15946
SEC1
SEC2
SHA-256
SHA-256 - NIST-FIPS-180-4
ISO/IEC 10118-3
SP800-90A
SP800-90B
USB Authentication
X.509
ITU-T X.509
ISO/IEC 9594-8
IETF RFC 5280
(二)、密码算法要求
本文全部密码原语安全等级为 128 位。
密钥生成、认证交互均需密码学安全随机数。随机数需满足:不存在复杂度低于
的算法可区分其与真随机。
采用 NIST SP800-90A 合规伪随机发生器、搭配 SP800-90B 标准 256 位熵源种子,即可满足要求。
(三)、安全总览
认证协议安全性核心依赖私钥保护,配套安全评估机制。
本规范采用基于 X.509 证书的认证机制,接收端可自主制定与发射端交互策略。
示例:接收端核验发射端未通过认证时,可选择不启用宣传的全部大功率功能。
接收端可选择周期性重新发起认证,确认发射端未被替换。
(四)、对现有生态的影响
协议对存量设备的影响取决于厂商策略,核心变量为旧版发射端兼容规则:
策略 1:允许旧充电器全功率工作 ------ 对现有生态影响极小;
策略 2:限制 / 禁用旧充电器大功率 ------ 生态改动幅度大。
(五)、证书吊销支持
若接收端实现认证功能,则应当支持证书吊销机制。
吊销清单一般离线更新(固件升级、产线写入),厂商无需在线实时维护吊销列表;但接收端需频繁更新吊销清单,不能仅在固件升级时刷新。
带联网功能设备(智能手机)更新吊销清单难度低;手环等无直连网络设备更新受限,厂商设计时需考虑清单更新方案。
备注:支持可更新吊销清单意味着产品需搭载可现场改写非易失存储器。
二、证书与私钥
(一)、证书链
本节要求适用于 0 号、1 号槽位存储的证书链;2、3 号槽位证书规则由发射端厂商自行定义。
一条完整证书链由 3 张证书组成(见下表):
根证书(Root Certificate):WPC 根 CA(WPC Root Certificate Authority)签发的自签名证书;为节省传输,证书链内仅存放根证书 SHA256 哈希,不携带完整根证书;
厂商 CA 证书(Manufacturer CA Certificate):由 WPC 根 CA 签发,标识设备生产厂商;
产品单元证书(Product Unit Certificate):由厂商 CA 签发,唯一标识单台无线充电发射设备。
厂商 CA 证书中包含公钥,用于校验产品单元证书签名;产品单元证书携带发射端设备公钥,用于认证交互校验。
证书强制约束:
每个产品单元证书应通过使用例如产品单元的RSID号(wpc-qi-rsid)来标识唯一的功率发射器产品单元。
每个功率发射器产品单元应拥有唯一的公钥。
同一功率发射器产品单元的不同槽位中包含的产品单元证书可以包含相同的身份和公钥,前提是这不会引入安全漏洞。
制造商可以拥有多个制造商CA证书,例如用于标识不同的生产设施或产品系列。这些制造商CA证书中的每一个应包含与唯一私钥相关的唯一公钥。
注: 鼓励使用多个制造商CA证书,以分割产品单元的数量,从而限制当某个制造商CA证书被吊销时造成的连带影响(吊销由该制造商CA证书签名的所有产品单元的连带影响)。
制造商应使用与制造商CA证书关联的私钥来签署产品单元证书。
WPC根证书颁发机构应确保所有制造商CA证书包含唯一的公钥。
填充在槽位0和槽位1中的证书链应使用X.509证书。

Length:证书链总字节数;
Root Certificate Hash:根证书 SHA256 摘要,固定 32 字节;
Manufacturer CA Certificate:标识厂商;
Product Unit Certificate:标识单台发射设备。
(二)、证书
所有证书必须满足:
采用 X.509 v3 ASN.1 标准结构;
ASN.1 二进制 DER 编码;
密码算法见下表。

证书所有字段、扩展均采用大端存储;厂商 CA、产品证书存在最大长度限制:
产品证书最大长度:MaxProdCertSize;
厂商 CA 证书最大长度:MaxManufacturerCertSize。
1、文本格式
X.509 证书内所有 ASN.1 文本对象(目录字符串、通用名称、显示文本)统一使用 UTF8String 编码;任意文本字段长度不超过 64 字节(不含 DER 类型、长度编码字节)。
2、证书属性与扩展项(OID 对象标识符)
基本约束扩展(OID 2.5.29.19)
厂商 CA 证书必须携带该扩展,标记为关键扩展;cA 字段置 true,路径长度限制 pathLenConstraint=0;
产品单元证书禁止携带本扩展。
有效期
notBefore 和 notAfter 字段指示维护证书有效性信息的时间间隔。对于产品单元,应忽略有效期时间。
证书的 notBefore 和 notAfter 有效期时间应使用ASN.1 GeneralizedTime(适用于任何年份),或ASN.1 UTCTime(适用于2050年之前的年份)。
对于制造商CA证书,建议 notBefore 字段为"19700101000000Z"(1970年1月1日00:00 UTC,即POSIX纪元时间)。建议 notAfter 字段为"99991231235959Z"(9999年12月31日23:59:59 UTC,用于表示未知的过期时间,如IETF-RFC-5280第4.1.2.5节所定义)。使用建议的 notBefore 和 notAfter 值将最大化与证书处理栈的兼容性。
WPC Qi 策略扩展(wpc-qi-policy)
WPC Qi策略扩展是制造商CA证书的自定义扩展,用于符合本规范的产品。该值是一个二进制对象,在本版本规范中保留。wpc-qi-policy 的值列在WPC成员网站的Qi规范页面上。
二进制对象编码为ASN.1 DER OCTET STRING,固定大小为 QiPolicySize 字节。
制造商CA证书应包含此扩展。产品单元证书不应包含此扩展。
WPC Qi RSID 扩展(wpc-qi-rsid)
WPC Qi吊销顺序标识符(RSID)扩展是产品单元证书的自定义扩展,用于符合本规范的产品。该值是一个二进制对象,用于存储每个产品单元唯一的顺序标识符,从而支持基于范围的批次吊销。wpc-qi-rsid 的值列在WPC成员网站的Qi规范页面上。
二进制对象编码为ASN.1 DER OCTET STRING,最大大小为 MaxQiRSIDSize 字节。RSID值对每个产品单元是唯一的,范围为最小值1到最大值 MaxQiRSIDSize 字节。
产品单元证书应包含此扩展。制造商CA证书不应包含此扩展。
WPC对象标识符的ASN.1模式
以下ASN.1模块定义了WPC管理的对象标识符以及用于WPC Qi认证的证书扩展模式。

3、制造商CA证书
制造商CA证书使用ITU-T X.509(10/2016)第7.2节Public-Key Certificate中定义的ASN.1结构。
制造商CA证书的TBSCertificate组件仅实现下表中所示的ASN.1字段。


4、产品单元证书
产品单元证书使用ITU-T X.509(10/2016)第7.2节Public-Key Certificate中定义的ASN.1结构。
产品单元证书的TBSCertificate组件仅实现下表中所示的ASN.1字段。



5、根CA证书
根CA证书使用ITU-T X.509(10/2016)第7.2节Public-Key Certificate中定义的ASN.1结构。
根证书的TBSCertificate组件仅实现下表中所示的ASN.1字段。


6、附加属性和扩展
X.509 v3中定义的附加证书属性和扩展不允许出现在制造商CA证书或产品单元证书中。
7、约束
QiPolicySize = 0x04 字节
MaxQiRSIDSize = 0x09 字节
MaxManufacturerCertSize = 0x200 字节
MaxProdCertSize = 0x200 字节
(三)、证书链槽位
证书链驻留在称为槽位(slots)的位置中。每个槽位应要么为空,要么包含一条完整的证书链。功率发射器不应包含超过4个槽位。
槽位0和槽位1(可选)应仅用于以WPC根证书为根的证书链,不应包含任何其他证书链。制造商可以使用槽位2和槽位3存放任何额外的证书链。如果使用,槽位2和槽位3应从槽位2开始按顺序填充。

制造商依赖的证书链不需要按照相关定义的结构来组织。例如,它们可以是X.509v3格式并采用ASN.1 DER编码,或它们可以以制造商依赖的方式签名。如果制造商依赖的证书链与槽位0和/或槽位1中的证书链共享公钥/私钥对,则其构建方式应为公钥/私钥对提供至少与存储在槽位0和槽位1中的证书链所要求相同级别的安全性。对制造商依赖的证书链及其使用的格式和协议的保护应达到或超过定义的、存储在槽位0和槽位1中的证书链、格式和协议的保护级别。
证书与私钥写入发射端流程不在本规范定义范围内。
(四)、发射端私钥
功率发射器中的每条证书链对应一个功率发射器私钥,其对应的公钥在相关联槽位的产品单元证书中得到认证。功率发射器应能够访问该私钥。功率发射器应以充分保护密钥机密性的方式存储私钥,如WPC制造商协议所述。
制造商不应将与一个功率发射器产品单元关联的私钥用于任何其他功率发射器产品单元或制造商CA证书。
(五)、其他私钥
每个制造商CA证书关联一个唯一的公钥/私钥对。与制造商CA证书关联的私钥用于签署证书链中的下一个证书。制造商应以充分保护密钥机密性的方式生成、配置和存储私钥。
制造商不应将与一个制造商CA证书关联的私钥用于任何其他制造商CA证书或产品单元证书。
三、认证协议
功率接收器可以执行三种操作:
向功率发射器查询证书链摘要(Digest)。
从功率发射器读取证书链。
向功率发射器发起挑战(Challenge)以验证其真实性。
功率接收器可以根据实现所需认证延迟的需要,发起任意数量或任意少的这些操作。此外,功率接收器可以以任意顺序发起这些操作。例如,功率接收器可以先挑战功率发射器,然后如果目标证书链的关键信息尚未缓存,再发起证书链读取。
(一)、摘要查询
接收端发送GET_DIGESTS请求,读取发射端各槽位证书链 SHA256 摘要。
流程规则:
发射端无异常时,返回DIGESTS响应报文;
若出现错误,发射端返回对应ERROR错误报文;
接收端收到摘要后,对比本地缓存记录:若存在匹配摘要,可跳过证书读取步骤,缩短认证耗时。
(二)、证书链读取
接收端发送GET_CERTIFICATE分段读取请求,获取指定槽位证书链全部 / 部分字节。
异常处理规则:
若请求偏移、读取长度超出证书链总字节范围,发射端返回INVALID_REQUEST错误;
其余各类故障统一返回对应ERROR响应;
无异常时,返回携带证书链分段数据的CERTIFICATE响应报文。
(三)、认证挑战
接收端发送CHALLENGE质询报文,携带 128 位随机数 Nonce,要求发射端使用本机私钥完成数字签名。
规则:
发射端正常则返回CHALLENGE_AUTH签名响应;
出现故障返回对应ERROR报文;
兼容性约束:支持多版本认证协议的接收端,必须保证质询请求与响应的协议版本一致,防范降级攻击。
(四)、错误与告警
请求非法(INVALID_REQUEST)
发射端收到字段格式、参数不合法的认证请求,统一回复INVALID_REQUEST类型 ERROR 报文。
不支持的协议版本(UNSUPPORTED_PROTOCOL)
请求头携带的认证协议版本超出发射端支持范围时,返回该错误:
错误数据字段填写发射端支持的最高协议版本;
接收端后续交互必须使用该版本。
设备繁忙(BUSY)
发射端当前时序无法满足认证响应时限要求,返回 BUSY 错误,接收端等待后重试。
未定义错误(UNSPECIFIED)
除以上三类故障外,其余未知异常统一返回该类型 ERROR 报文,错误数据段置 0。
四、认证消息
认证消息用于传递与认证相关的信息。功率接收器和功率发射器均不应在认证消息之后添加任何填充字节,即认证消息的第一个字节应为数据流(Data Transport Stream)的第一个字节,认证消息的最后一个字节应为数据流的最后一个字节。
认证消息有两种类型:认证请求(Authentication requests)和认证响应(Authentication responses)。
(一)、认证消息头
所有认证消息均以一个字节的头部开始,其格式应如表10所示。头部后面可以跟随有效载荷。

认证协议版本(Authentication Protocol Version)
此字段标识所使用的认证规范版本。下表显示了此字段的有效值。产品不应使用其不支持的规范修订版本对应的认证协议版本值。

功率接收器应在新建连接时发送给功率发射器的第一个认证请求的认证协议版本字段中,指示其支持的最高协议版本。如果功率接收器收到错误代码为 UNSUPPORTED_PROTOCOL 的 ERROR 响应,则它应在后续所有认证请求中使用 ERROR 响应中错误数据(Error Data)字段所指示的版本。
如果功率发射器收到的认证请求中,认证协议版本字段的值低于其支持的最高版本,则它应在所有认证响应中使用该较低版本。
在所有情况下,消息的格式应与认证协议版本字段中所给的认证协议版本对应的规范相匹配。
消息类型(Message Type)
此字段标识认证请求或认证响应中的认证消息类型值之一。
(二)、认证请求
认证请求由功率接收器用于向功率发射器发送命令和/或检索数据。认证请求类型列于下表。
功率接收器不应在收到前一个认证请求的响应或超时之前发送另一个认证请求。

1、GET_DIGESTS
此请求用于检索证书链摘要。功率接收器可以一次请求任意数量的摘要。GET_DIGESTS 请求的格式定义于下表。

认证消息头(Authentication Message Header)
此字段标识认证协议版本和消息类型。它应设置为 0x19。
槽位掩码(Slot Mask)
此字段标识所请求证书链存储的槽位。b0 置为 ONE 表示请求槽位0中存储的证书链摘要,b1 置为 ONE 表示请求槽位1中存储的证书链摘要,以此类推。
注: 可以通过单个命令请求多个证书链摘要。
2、GET_CERTIFICATE
此请求用于读取目标证书链的一个片段。GET_CERTIFICATE 请求的格式定义于下表。

认证消息头(Authentication Message Header)
此字段标识认证协议版本和消息类型。它应设置为 0x1A。
OffsetA8, Offset70
这两个字段组合形成从证书链起始位置的字节偏移量,读取请求从此偏移量开始。偏移量值为 OffsetA8 × 256 + Offset70,记作 GET_CERTIFICATE/Offset。尝试读取超出证书链末尾应导致功率发射器返回错误代码为 INVALID_REQUEST 的 ERROR 响应。
偏移量值大于等于 0x600 时,PTx 应进行调整,返回相对于产品单元证书第一个字节的数据(即如同产品单元证书从 0x600 开始)。
因此,偏移量值在 0x600 至 0x7FF 范围内表示 PTx 从证书链的以下偏移量处发送字节:

上述意味着(在示例实现中)偏移量值调整如下:

LengthA8, Length70
这两个字段组合形成读取请求的长度(字节数)。长度值为 LengthA8 × 256 + Length70,记作 GET_CERTIFICATE/Length。尝试读取超出证书链末尾应导致功率发射器返回错误代码为 INVALID_REQUEST 的 ERROR 响应。长度值为 0x000 表示 PTx 应发送尽可能多的剩余字节。
上述意味着(在示例实现中)长度值调整如下:

注: 如果 GET_CERTIFICATE/offset >= 0x600,此公式无效。
Slot Number
这是目标证书链存储的槽位编号。此字段的值应标识在 DIGESTS 响应消息或 CHALLENGE_AUTH 响应消息中被标识为存在的证书链之一。
3、CHALLENGE
此请求用于发起对功率发射器产品单元的认证。CHALLENGE 请求的格式定义于下表。

认证消息头(Authentication Message Header)
此字段标识认证协议版本和消息类型。它应设置为 0x1B。
槽位编号(Slot Number)
这是用于认证的证书链所存储的槽位编号。此字段的值应标识在 DIGESTS 响应消息或 CHALLENGE_AUTH 响应消息中被标识为存在的证书链之一。
注: 槽位0中始终存在一条证书链。
随机数(Nonce)
这是功率接收器选择的128位二进制随机数。用于生成随机数的RNG应满足 SP800-90A 和 SP800-90B 的要求。
(三)、认证响应
功率发射器使用下表中列出的响应类型来响应认证请求。

1、DIGESTS
功率发射器使用 DIGESTS 响应发送证书链摘要,并报告哪些槽位包含有效的证书链摘要。DIGESTS 响应的格式定义于下表。

认证消息头(Authentication Message Header)
此字段标识认证协议版本和消息类型。它应设置为 0x11。
已填充槽位掩码(Slots Populated Mask)
当且仅当槽位编号 K 包含针对认证协议版本字段中协议版本的证书链时,此字段中位置 b_(K+4) 的位应设置为 ONE。
注: 槽位0中始终存在一条证书链,因此此掩码中的位 b4 始终设置为 ONE。
已返回槽位掩码(Slots Returned Mask)
当且仅当满足以下条件时,此字段中位置 b_K 的位应设置为 ONE:
槽位编号 K 包含针对认证协议版本字段中协议版本的证书链,且
在对应的 GET_DIGEST 请求中槽位编号 K 被设置为1。
如果没有这样的槽位,则此掩码中的所有位应设置为 ZERO。
返回的摘要数量应等于此字节中置位位的数量。摘要应按槽位编号递增的顺序返回。
返回的摘要(Digests Returned)
对于已返回槽位掩码中位非零的证书链,其32字节SHA-256摘要序列,按槽位编号递增的顺序排列。如果已返回槽位中的所有位均为零,则不存在返回的摘要字段。在上表的字节偏移中,n 表示返回的第 n 个摘要。
2、CERTIFICATE
此响应由功率发射器用于发送所请求的证书链片段。CERTIFICATE 响应的格式定义于下表。

认证消息头(Authentication Message Header)
此字段标识认证协议版本和消息类型。它应设置为 0x12。
证书链片段(Certificate Chain Segment)
证书链片段应包含所请求证书链中从对应 GET_CERTIFICATE 请求中请求的偏移量开始的请求片段的一部分(或整个片段)。此证书链片段的长度应小于或等于对应 GET_CERTIFICATE 请求中请求的长度(LengthA8 × 256 + Length70),且大于或等于1。
3、CHALLENGE_AUTH
功率发射器使用 CHALLENGE_AUTH 来响应 CHALLENGE 请求。CHALLENGE_AUTH 响应的格式定义于下表。

认证消息头(Authentication Message Header)
此字段标识认证协议版本和消息类型。它应设置为 0x13。
最高认证协议版本(Maximum Authentication Protocol Version)
功率发射器支持的最高认证协议版本。
已填充槽位掩码(Slots Populated Mask)
当且仅当槽位编号 K 包含针对认证协议版本字段中协议版本的证书链时,此字节中位置 b_K 的位应设置为 ONE。
槽位0中始终存在一条证书链,因此此掩码中的位 b0 始终设置为 ONE。
证书链哈希最低有效字节(Certificate Chain Hash LSB)
正在提供挑战响应的证书链的32字节SHA-256哈希值的最低有效字节。
签名 r 值(Signature r value)
此字段应包含从表20指定的 TBSAuth 的 SHA-256 哈希值生成的非确定性 ECDSA 数字签名的256位 r 值。详见 ANSI X9.62-2005。
签名 s 值(Signature s value)
此字段应包含从下表指定的 TBSAuth 的 SHA-256 哈希值生成的非确定性 ECDSA 数字签名的256位 s 值。详见 ANSI X9.62-2005。

前缀(Prefix)
前缀字段应包含 'A' 的 ASCII 表示,即 0x41。
证书链哈希(Certificate Chain Hash)
证书链哈希字段应保存正在提供挑战响应的证书链的 SHA256 哈希值。
挑战请求(Challenge Request)
挑战请求字段应包含 CHALLENGE 请求消息的 B0 ... B17,即此 CHALLENGE_AUTH 所响应的请求。
4、Error
此响应由功率发射器用于传输错误信息。ERROR 响应的格式定义于下表。

认证消息头(Authentication Message Header)
此字段标识认证协议版本和消息类型。它应设置为 0x17。
错误代码(Error Code)
定义于下表
错误数据(Error Data)
定义于下表


五、时序要求
(一)、接收端时序要求
下表显示了功率接收器应对认证请求消息应用的超时值。对于 Qi Specification Communications Protocol中定义的数据传输层,计时从承载认证请求的数据流(Data Transport Stream)中发送的最后一个ADC/结束数据包开始时开始。

注: 超时值基于以下考虑:
功率发射器需要一些时间来准备其响应
功率发射器使用 ADT/1 数据包发送其响应
功率接收器每250ms至少发送一个 DSR 数据包
认证响应包含20%的通信错误开销
如果功率接收器在第一个认证请求的超时时间内未收到认证响应,它应该重试该请求最多五次。如果最后一次重试后仍然超时,功率接收器应该遵循其对应于功率发射器不支持认证功能的策略。
如果功率接收器在后续认证请求(即不是第一个认证请求的重试)的超时时间内未收到认证响应,它应将其视为错误。在这种情况下,它不应重试该后续认证请求,而应立即遵循其对应于功率发射器不支持认证的策略。
(二)、发射端时序要求
功率发射器应满足表25中定义的时序要求。对于Qi Specification Communications Protocol中定义的数据传输层,计时从承载认证请求的数据流中发送的最后一个ADC/结束数据包开始时开始。

功率接收器不应在相应的时序值到期之前尝试通过发送 DSR/poll 数据包来检索认证响应。这样做可能导致功率发射器发送 BUSY 认证响应。发送后者所需的时间会延迟预期认证响应的检索。
注: 如果功率发射器无法在相关的功率接收器超时值内完成其认证响应的发送,则视为未通过时序要求,前提是功率接收器至少每250ms发送一个 DSR 数据包。
六、协议流程示例
本章提供了合适的高级流程的资料性示例。这些示例并非排他性的;符合本规范的其他流程也是可行的。这些流程省略了细节,例如在等待认证响应时超时的行为以及ERROR响应的处理。这些示例还假设功率接收器仅处理功率发射器槽位0中的证书链。如果制造商希望功率接收器处理其他槽位中的证书链,制造商应相应地调整这些流程。
(一)、简单流程
下图展示了既不高缓存先前已验证功率发射器的摘要和公钥,也不支持吊销的功率接收器的行为。
注: 此功率接收器不发送 GET_DIGESTS 认证请求,因为它不缓存摘要。

接收端判断发射端支持认证功能;
直接发送GET_CERTIFICATE请求,读取 0 号槽完整证书链;
接收CERTIFICATE证书响应,解析完整证书链;
校验整条证书链签名合法性;
签名校验失败:流程终止,判定证书无效;
签名校验通过:继续执行质询流程;
发送CHALLENGE质询报文,携带随机 Nonce;
接收CHALLENGE_AUTH签名响应;
校验 ECDSA 签名有效性:
签名无效:认证失败,流程退出;
签名有效:发射端认证通过,可正常大功率充电。
(二)、带缓存的流程
下图展示了缓存(在非易失性存储器中)先前已信任的功率发射器的摘要和公钥的功率接收器的行为。这使得功率接收器可以跳过发送 GET_CERTIFICATE 认证请求,直接进入发送 CHALLENGE 认证请求。如果证书链被复制并部署在假冒的功率发射器中,即使缓存中找到匹配项,挑战也将失败。

检测发射端支持认证;
发送GET_DIGESTS,读取全部槽位证书哈希摘要;
对比本地缓存:
缓存无匹配摘要:执行完整证书读取流程,读取、校验证书链;校验通过后将摘要 + 公钥存入缓存;
缓存存在匹配摘要:跳过读证书,直接发送质询报文;
发送CHALLENGE质询;
接收并校验质询签名:
签名不合法:认证失败;
签名合法:设备认证完成;
若本次为新设备,校验通过后将证书摘要、公钥写入非易失缓存。
补充:若不法厂商复制证书链至仿冒充电器,即便摘要匹配,质询签名校验依然会失败,无法通过认证。
(三)、带缓存和吊销的流程
下图展示了缓存(在非易失性存储器中)先前已信任且支持吊销的功率发射器的摘要和公钥的功率接收器的行为。此信息通常包括制造商代码、产品类型和产品单元序列号。

读取证书链摘要,匹配本地缓存;
无匹配摘要:读取并校验完整证书链;
证书签名校验通过后,查询本机吊销清单:
证书在吊销列表:直接判定发射端非法,终止流程;
证书未被吊销:发送质询报文完成最终签名核验;
质询签名合法则认证通过,并更新本地缓存。
(四)、先挑战(Challenge First)流程
下图展示了缓存(在非易失性存储器中)先前已信任且支持吊销的功率发射器的摘要和公钥的功率接收器的另一种行为。
此行为从功率接收器发出 CHALLENGE 认证请求开始。CHALLENGE_AUTH 响应包含证书链哈希的最低有效字节(LSB)。功率接收器检查其摘要缓存,尝试查找具有匹配 LSB 的一个或多个摘要。如果没有这样的摘要,功率接收器按第一次遇到该特定功率发射器的情况处理。如果有匹配项,功率接收器尝试使用匹配摘要对应的公钥验证 CHALLENGE_AUTH 签名。如果验证成功,功率接收器检查证书是否已被吊销。如果证书未被吊销,功率接收器判定响应方可信。如果验证失败,功率接收器使用与 CHALLENGE_AUTH 响应中返回的哈希 LSB 匹配的下一个摘要重试。如果所有这些验证都失败,功率接收器按第一次遇到该特定功率发射器的情况处理。
当功率接收器确定这是第一次遇到该特定功率发射器时,它检索证书链、验证证书链、检查其是否已被吊销,然后尝试使用产品单元证书中包含的公钥验证先前返回的 CHALLENGE_AUTH 签名。
此方法的优点是,在功率接收器与该特定功率发射器第一次相遇之后,两个设备之间仅发生一次认证请求和响应通信。

确认发射端支持认证,直接下发CHALLENGE质询;
接收CHALLENGE_AUTH响应,提取证书链哈希最低字节;
在本地缓存中匹配拥有相同哈希末尾字节的记录:
无匹配缓存:走完整证书读取、校验、吊销查询流程;
存在多条匹配缓存:依次使用缓存公钥校验签名;
校验成功 → 校验证书是否吊销,无吊销即认证完成;
全部缓存公钥校验失败 → 视为全新设备,读取完整证书;
全新设备读取完整证书链、校验签名、检查吊销清单;全部合规后缓存摘要与公钥。
七、参考资料
Qi-v1.3.3