美国部分州在驾照背面的 PDF417 条形码里加入了数字签名,却没有公开验证公钥。一份公开研究用 ECDSA 的密钥恢复性质,从几张真实证件里反推出了纽约、弗吉尼亚、北卡三州的签名公钥,并给出在线验证工具。这项研究的价值不在攻破签名,签名本身是安全的,问题在于只签名不公开密钥,等于让所有验证方无从下手。
条形码里签的是什么
美国驾照背面统一使用 AAMVA 标准的 PDF417 条形码,头部是签发机构编号,后面跟着数据元素。姓、名、出生日期、到期日、地址、证号这些字段用三字母代码标识,例如 DCS 是姓,DBB 是出生日期。
部分州在州专属子文件里加了签名字段。纽约的字段是 ZNB,弗吉尼亚是 ZVA,北卡是 ZND,加州的字段在 ZC 子文件里。签名算法是 ECDSA,曲线为 P-256,签名字段用 Ascii85 编码的 DER 结构存放,内含两个整数。
签名不覆盖照片。照片根本不在条形码里,所以拿着真证件的条码数据复制到假证件上,密码学检查仍然通过。签名证明的是数据由州签发,不证明持卡人是本人。
密钥恢复的原理
ECDSA 有个公开性质叫公钥恢复。给一条签名和它对应的消息,可以从数学上算出若干个候选公钥。单条签名给出的是一个很小的候选集合,拿多张同一州签发的证件取交集,就能锁定唯一公钥。
公钥本来就是公开物,恢复出来只能用于验签,不能伪造签名,因此这条路径在密码学上是无损的。难度集中在消息构造。签名覆盖哪些字节、字段顺序怎么排、签名字段自身怎么参与,这些没有文档。研究者尝试了数十万种字段顺序都没成功,最后确认的做法是把签名字段先用占位符填满,对整段数据签名,再把真实签名覆写进占位位置,验证时把占位符放回去再算哈希。
涉及哪些州与供应商
内置数字签名的五个州共用同一家制卡供应商,其中纽约、弗吉尼亚、北卡三州的公钥已被恢复,南卡和威斯康星的签名字段确认存在,密钥还没人做出来。
加州走的是另一条路。用的是可验证凭证条码规范,公钥通过去中心化标识符公开在官方域名下,还配了状态列表做吊销检查,验证方式有公开技术文档。加州自 2025 年 9 月底开始在新证上加入这类条码,官方要求验证方拒绝该日期之后签发、却不含条码的证件。
供应商格局方面,一家主要厂商覆盖约六成辖区。它的加州产品带有完整的公钥基础设施,但没有推广到其余州。
这对验证方意味着什么
想验签的机构现在有两条路。加州证件按官方文档对去中心化标识符做固定校验,验证前必须确认签名方就是官方标识,否则伪造者可以把密钥指向自己。纽约、弗吉尼亚、北卡三州的证件可以用已恢复的公钥在本地验签。
验证时要注意的边界
- 密钥会轮换,相关州不公布轮换时间表,真证件可能落入不匹配的判定。
- 未公开密钥的州暂时无法验证,只能依赖目视和物理防伪特征。
- 签名覆盖的字段里不含照片,身份核验还得靠别的环节。
制度层面的进展
这件事的核心矛盾是愿不愿意被公开验证。工程能力不是瓶颈,加州已经在最大的州把整套体系跑在生产环境里。研究者提出的诉求也很简单,在官网上放一页说明和各州公钥。
对做身份核验、酒店入住、金融开户的系统来说,这项能力值得提前跟踪。验证逻辑做成可配置,等某个州的密钥公开再接入,比一股脑上线更稳。
常见问题
- 恢复密钥意味着被破解了吗。不,公钥是公开信息,恢复只能验签。
- 普通人怎么用。目前主要给核验机构使用,个人没必要自行验证。
- 为什么有些州不做。公开材料里没有官方解释,签发与采购决策在州一级。