美国驾照签名密钥竟被公开恢复
Keys Not Included: recovering the signing keys for US driver's license barcodes

加州DMV率先公开了驾照PDF417条码的签名验证方法,而纽约和弗吉尼亚等州虽然早已在卡片上植入了ECDSA数字签名,却从未公开验证所需的公钥。我通过数学方法,利用多张样本卡成功恢复了这些州被隐藏的公钥,证明其签名机制完全可被第三方验证。IDEMIA和Canadian Bank Note等厂商早已具备这项技术,但除加州外,其他州并未选择公开。这并非技术障碍,而是缺乏公开验证的意愿。
技术从来不是障碍,它早已完成并躺在产品目录中,真正的障碍是愿意接受验证的态度。
HN 评论区
137- yencabulator
> 如何使用 DMV 的公钥来验证加州身份证是否真实。
但这并不是签名所保证的内容。签名只说明卡片上的文本信息组合是*某人*的有效驾照。签名甚至不包含照片!它只是将伪造行为限制在使用真实人物的身份上。
对比 https://en.wikipedia.org/wiki/Biometric_passport,那种护照实际上包含带有签名的数字照片。
- bzmrgonz
人们认为公开公钥是件坏事,这真让人困惑。这本来就是公钥的用途。当然,我们现在面临着后量子计算机的威胁,某些国家行为体也在收集密钥,但量子计算机将颠覆太多领域,到时候身份验证甚至根本不再重要。
- dmurray
这是一项出色的调查,但我有两个小瑕疵要指出:
> ZNB 字段并非为空也不是垃圾数据:它包含一个格式良好的 71 字节 DER ECDSA 签名,经过正确的 Ascii85 编码,具有正确的前缀和合理的长度。但它瞬间就通过了密码学检查失败,因为它是由别人的密钥签名的。
这似乎值得怀疑!我推测伪造者是从另一张卡片上使用了真实的签名,所以密钥是对的,但数据是错的。像作者那样逆向工程过程并自行生成密钥,对伪造者来说毫无价值。
> 我构建了一个小演示,用于检查加州、纽约和弗吉尼亚州的签名:拍摄条形码照片并在此处检查。
这没错,但应该附带一点警告。真正的验证器还需要额外检查编码数据是否与卡片正面的人眼可读数据匹配。
- KingMachiavelli
除非照片本身也在条形码中且经过签名,否则这一切几乎毫无意义。你只需要泄露几百张真实身份证,就能覆盖所有可识别的特征(头发、眼睛、肤色、大致身高和体重)。如果每年泄露几十万张,你现在甚至无法标记泄露的身份证而不产生误报。
一张假照片加上有效的条形码就能通过所有当前的检查,对吧?除非你们仍然进行某种我认为并不存在的专有照片二次查找。
- bob1029
我认为 mDL 在某些行业(例如银行业)将会是一件大事。Apple 在 WWDC25 上宣布了一个围绕此的生态系统。很快我们将进入这样一个世界:你走进银行开设或维护账户时会发生以下情况:
1. 银行通过电子邮件/SMS 向客户发送一个链接
2. 客户拿出 iPhone,打开任何电子邮件/消息软件并点击链接
3. 链接将客户带到银行拥有的专门设计的页面,该页面触发原生操作系统进程以打开 Apple Wallet 并在获得同意后收集所需的 ID 详情。
https://developer.apple.com/videos/play/wwdc2025/232
https://www.w3.org/TR/digital-credentials
这可能是更优越的安排,因为它最终可以建立一条一直延伸到签发机构(例如阿拉巴马州)的强大加密信任链。目前这条链上存在一些缺口,但我看不出随着时间的推移无法将其弥补的理由。
- daft_pink
也许我们应该为 IDEMIA 覆盖的 31 个州以及 Canadian Bank Note 覆盖的所有州发起请愿,要求将此项功能添加到身份证中。
我无法想象我居住的伊利诺伊州(据我所知,Apple Wallet 的推出使用的是 IDEMIA)会不想添加这项功能。
- samsullivan
应该归功于 Verifiable Credential 库的作者。这里不该归功于供应商。
数字验证对于我们拥有的对象将变得比以往更重要,而不是那些代理这些对象的物品(目前 ID 的主要功能)。身份欺诈之所以成为问题,是因为所有权与松散的 SIN/DL 记录绑定在一起。
使用物理介质代表所有权只是将负担转移给了国家,并允许社会工程和欺诈持续存在。
- RockRobotRock
我曾经有一张假身份证,而它能被扫描是一个巨大的卖点。所有便利店都会扫描,而且似乎并不在乎你是否看起来未成年。我只被拒绝过两三次,通常是在酒吧和餐厅。