电子护照背后的密码学技术解析

本文深入解析电子护照的技术架构,包括其文件系统设计、密码学保护机制、威胁模型分析,以及从基础访问控制到现代增强协议的安全演进过程,揭示了电子护照如何保护个人数据安全。

电子护照背后的密码学

您是否知道,大多数现代护照实际上是嵌入式设备,包含完整的文件系统、访问控制机制,并支持多种密码学协议?这类护照上会显示一个电子机读旅行证件(eMRTD)的小符号,在其嵌入式文件系统中以数字方式存储与传统护照小册子中印刷的相同个人数据。除了允许某些国家的旅行者跳过边检对话外,这些证件还使用密码学来防止未经授权的读取、窃听、伪造和复制。

图1:芯片内置符号(ICAO Doc 9303 第9部分)

这篇博客文章描述了电子护照的工作原理、其威胁模型中的威胁,以及它们如何使用密码学来防范这些威胁。它还讨论了将电子护照用于新型应用(如零知识身份证明)的影响。与许多使用寿命长的广泛使用的电子设备一样,电子护照及与其交互的系统支持不安全的传统协议,这使护照持有人在标准和新型使用场景中都面临风险。

电子护照基础

护照作为官方身份证明文件,主要用于国际旅行。国际民用航空组织(ICAO)定义了电子护照的标准,电子护照(如"芯片内置"符号所示)包含一个存储数字信息的非接触式集成电路(IC)。本质上,芯片包含一个具有某些访问控制功能的文件系统,以保护数据免遭未经授权的读取。电子护照的完整技术细节在ICAO Doc 9303中规定;这篇博客文章将主要关注规定逻辑数据结构(LDS)的第10部分和规定安全机制的第11部分。

图2:电子护照逻辑数据结构(ICAO Doc 9303 第10部分)

文件系统架构很直接,包含三种文件类型:作为根目录的主文件(MF);作为子目录或应用程序的专用文件(DF);以及包含实际二进制数据的基本文件(EF)。如上图所示,有些文件是强制性的,而其他文件是可选的。这篇博客文章将重点介绍eMRTD应用程序。其他应用程序是LDS 2.0的一部分,它将允许数字存储旅行记录(数字印章!)、电子签证和额外的生物特征(这样您就可以只更新照片而不必获取全新护照!)。

eMRTD应用程序如何工作

下图显示了eMRTD包含的文件类型:

图3:eMRTD应用程序内容(ICAO Doc 9303 第10部分)

有包含通用或安全相关数据的通用文件;所有其他文件是所谓的数据组(DGs),主要包含个人信息(其中大部分也印刷在您的护照上)和一些稍后会变得重要的额外安全数据。所有电子护照必须包含DG1和DG2,其余的是可选的。

图4:LDS中的数据组(ICAO Doc 9303 第10部分,第七版)

将DG1和DG2的内容与护照主页进行比较,可以看出大部分书面数据存储在DG1中,照片存储在DG2中。此外,页面底部有两行字符称为机读区(MRZ),其中包含DG1数据的另一个副本以及一些校验数字,如下图所示。

图5:带有机读区的护照示例(ICAO Doc 9303 第3部分)

深入威胁模型

电子护照在一个简单的威胁模型下运行,该模型根据物理访问权限对攻击者进行分类:持有护照的人与未持有护照的人。如果您在护照附近但未持有它,您应该无法执行以下任何操作:

  • 从该护照读取任何个人信息
  • 窃听护照与合法终端之间的通信
  • 判断它是否是特定护照以便追踪其移动

即使您确实持有一个或多个护照,您也不应能够执行以下操作:

  • 伪造包含不真实数据的新护照
  • 制作护照的数字副本
  • 读取指纹(DG3)或虹膜(DG4)信息

电子护照使用短距离RFID进行通信(ISO 14443)。您可以在10-15厘米的距离内与护照通信,但在几米的距离内窃听是可能的。因为电子护照是嵌入式设备,它们需要能够抵御攻击者物理访问设备的攻击,例如复杂的侧信道攻击和故障注入攻击。因此,它们通常经过认证(例如,根据通用标准)。

我们在此重点关注针对护照电子组件的威胁。护照有许多物理对抗措施,例如在特定类型光线下变得可见的视觉效果。即使有人能够破坏防止复制护照的电子安全措施,他们仍然需要击败这些物理措施才能制作护照的完整副本。也就是说,有些系统(例如在线系统)仅与护照进行数字交互,因此它们根本不执行任何物理检查。

密码学机制

最早的电子护照缺乏大多数密码学机制。马来西亚于1998年发行了第一本电子护照,这早于2003年首个ICAO eMRTD规范。比利时随后于2004年发行了第一本符合ICAO标准的eMRTD,这又早于2005年规定的首个保密性密码学机制。

虽然我们可以只关注最先进的密码学实现,但电子护照会流通很长时间(通常为5-10年),这意味着传统系统与现代解决方案继续并存运行。这意味着通常有许多旧护照在流通,它们不支持最新最好的访问控制机制。同样,并非所有检查系统/终端都支持所有协议,这意味着护照可能需要支持多种协议。下文讨论的所有协议在ICAO Doc 9303第11部分中有更详细的描述。

传统密码学

电子护照的传统保护机制提供了比它们所取代的(无保护)更好的安全性,尽管它们在保密性以及(在较小程度上)防止复制方面存在关键缺陷。

传统保密性保护:基本访问控制如何失败

为了防止窃听,您需要建立一个安全通道。通常,这是通过从某些共享知识派生共享对称密钥,或通过密钥交换来完成的。然而,护照不能拥有自己的静态公钥并通过通信通道发送它,因为这将允许追踪特定护照。

此外,只有当你持有护照时,才应该能够建立这个安全通道。那么,持有者与其他人有什么区别?持有者可以阅读包含MRZ的物理护照页面!

这使我们想到了与电子护照建立安全通道的原始解决方案:基本访问控制(BAC)。当您将护照照片页朝下放入机场的检查系统时,它会扫描页面并读取MRZ。现在,双方使用SHA-1作为KDF,从MRZ数据的一部分派生出加密和消息认证码(MAC)密钥。然后,他们交换新生成的挑战,并对这些挑战以及一些新的密钥材料进行加密然后MAC,以证明双方都知道密钥。最后,他们从密钥材料派生出会话密钥,并用它们建立安全通道。

然而,BAC未能实现其任何安全目标。静态MRZ只是一些个人数据,没有很高的熵,这使得它可以被猜测。更糟糕的是,如果您捕获一次护照和终端之间的有效交换,您可以通过计算大量未加固的哈希值来离线暴力破解MRZ。此外,知道MRZ的被动监听者可以解密与护照的所有通信。最后,护照必须同时检查MAC和挑战这一事实,为通过重放有效终端响应来允许追踪的预言机攻击打开了可能性。

防伪:第一次就做对了

防止伪造相对简单。护照包含一个称为文档安全对象(EF.SOD)的文件,其中包含所有数据组的哈希值列表,以及对这些哈希值的签名。该签名来自一个密钥对,该密钥对具有回溯到国家签名证书颁发机构(CSCA)的证书链。与CSCA证书关联的私钥是该系统中最有价值的资产之一,因为任何拥有此私钥的人都可以签发包含任意数据的合法护照。

读取护照、将所有内容与SOD进行比较以及验证签名和证书链的过程称为被动认证(PA)。这将证明护照中的数据是由签发国签名的。然而,它并不能防止复制现有护照:任何能够读取护照的人都可以将其数据复制到新的芯片中,并且它将通过PA。虽然此机制被列在传统机制中,但它满足了其所有目标,因此仍在未加更改地使用。

传统复制保护:它们有效,但存在一些问题

防止复制需要在护照中包含一些无法读取或提取的东西,例如密钥对的私钥。但是终端如何知道密钥对属于真正的护照?由于国家已经为PA签署了护照内容,他们可以将公钥放在其中一个数据组(DG15)中,并使用私钥对终端发送的挑战进行签名。这称为主动认证(AA)。在执行PA和AA之后,终端知道护照中的数据(包括AA公钥)已由政府签名,并且护照包含相应的私钥。

此解决方案有两个问题:AA签名未与安全通道绑定,因此您可以中继签名并假装护照在它不在的地方。此外,护照在不知道此消息语义的情况下对任意挑战进行签名,这通常被认为是密码学中的危险做法。

现代增强功能

扩展访问控制(EAC)修复了与BAC和AA相关的一些问题。它包括芯片认证(CA),这是一个更好的AA,以及终端认证(TA),它向护照验证终端身份,以保护对存储在DG3(指纹)和DG4(虹膜)中的敏感信息的访问。最后,密码认证连接建立(PACE,下文描述)完全取代了BAC,消除了其弱点。

芯片认证:升级安全通道

CA在某种意义上与AA非常相似,它要求国家简单地将公钥存储在其中一个DGs(DG14)中,然后使用PA进行认证。然而,护照不是对挑战进行签名,而是使用密钥对与终端执行静态-临时Diffie-Hellman密钥交换,并使用生成的密钥从BAC升级安全通道。这意味着知道MRZ的被动监听者在执行CA后无法窃听,因为他们没有参与密钥交换。

终端认证:保护DG3和DG4中的敏感数据

与用于签名的CSCA类似,每个国家都有一个国家验证证书颁发机构(CVCA),它为一个PKI创建根证书,该PKI授权终端读取该国护照中的DG3和DG4。终端为其公钥提供证书链,并使用其私钥对护照提供的挑战进行签名。CVCA可以授权文档验证器(DVs)读取DG3和DG4中的一个或两个,这被编码在证书中。然后DV向各个终端颁发证书。没有这样的证书,就不可能访问DG3和DG4中的敏感数据。

密码认证连接建立:修复基本问题

PACE背后的主要思想是,MRZ很像密码,没有足够的熵来保护其包含的数据。因此,它不应直接用于派生密钥,因为这将允许离线暴力攻击。PACE可以使用各种映射,但我们在下面仅描述最简单的映射,即通用映射。同样,PACE可以使用除MRZ之外的其他密码(例如PIN),但这篇博客文章重点介绍MRZ。

首先,双方使用MRZ数据(密码)派生出密码密钥。接下来,护照使用密码密钥加密一个随机数并将其发送给终端,如果终端知道密码,则可以解密它。终端和护照还执行临时Diffie-Hellman密钥交换。现在,终端和护照通过将随机数作为加法调整应用于(EC)DH共享秘密来导出椭圆曲线的新生成元。使用这个新的生成元,终端和护照执行另一个(EC)DH以获得第二个共享秘密。最后,他们使用这第二个共享秘密来派生会话密钥,这些会话密钥用于验证他们早先在协议中使用的(EC)DH公钥,并建立安全通道。图6显示了一个简化的协议图。

图6:PACE简化协议图

任何不知道密码的人都无法将协议进行到底,这将在最后一步当他们需要使用会话密钥验证数据时变得明显。在验证终端之前,护照不共享任何能够暴力破解密码密钥的数据。知道密码的非参与者无法派生会话密钥,因为他们不知道ECDH私钥。

威胁模型中的差距:为什么您不应该将护照交给任何人

在考虑维护护照保密性和真实性的潜在解决方案时,重要的是要考虑检查系统对您的护照做了什么,而不仅仅是护照支持的花哨密码学。如果检查系统仅执行BAC/PACE和PA,那么任何见过您护照的人都可以制作电子副本,并在与此系统交互时冒充您。即使您的护照支持AA或CA,这也是成立的。

另一个重要因素是追踪:规范旨在确保不知道护照PACE密码(在大多数情况下是MRZ数据)的人无法通过与其交互或窃听其与合法终端的通信来追踪该护照的移动。他们试图通过确保护照始终提供随机标识符(例如,作为A型或B型ISO 14443非接触式通信协议的一部分)以及公开可访问文件(例如,包含执行PACE所需信息的文件)的内容对于特定国家的每个公民都是相同的来实现这一点。

然而,当攻击者知道密码时,所有这些保护都失效了。如果您进入另一个国家并且边境管制扫描您的护照,他们可以将您的护照内容提供给其他人,使他们能够追踪您护照的移动。如果您入住意大利的一家酒店并且他们存储了您护照的扫描件并被黑客入侵,任何有权访问此信息的人都可以追踪您的护照。这种方法可能有点繁琐,因为它需要联系各种附近的非接触式通信设备,并尝试像它们是您的护照一样向它们进行身份验证。然而,有些人可能仍然选择将其纳入他们的威胁模型中。

一些国家在其签发的护照中声明,持有人仅在法定需要时才应将其交给他人。例如,在意大利的酒店,提供一份经过准备的护照照片页副本,其中大部分数据(如您的照片、签名和任何个人识别号码)已被编辑,就足够了。实际上,没有多少人这样做。

即使没有护照,威胁模型也没有提及追踪特定人群。国家通常购买大量相同的电子护照,这些护照包括一个IC和实现护照规范的嵌入式软件的组合。这意味着来自同一国家的人很可能拥有相同型号的护照,具有独特的指纹,包括通信时间、执行时间、支持的协议(ISO 14443 A型与B型)等特征。此外,每个国家可能对PACE使用不同的参数(支持的曲线或映射等),这可能有助于攻击者对不同类型的护照进行指纹识别,因为这些参数存储在公开可读的文件中。

零知识身份证明的安全和隐私影响

学术研究和行业应用中一种新兴的方法涉及将零知识(ZK)证明与身份文件结合使用,从而能够验证特定身份属性而无需透露完整的文件内容。这在理论上是个好主意,因为这将允许在无法定需要交出护照的情况下正确使用护照。然而,这存在安全影响。

首先,护照本身无法生成ZK证明,因此这必然涉及将您的护照暴露给证明者。让任何人或任何事物读取您的护照意味着您降低了相对于该实体的威胁模型。因此,当您向应用程序或网站提供您的护照以创建ZK证明时,您需要考虑他们将如何处理您护照中的信息。它会在您的设备上本地处理,还是会被发送到服务器?如果数据离开您的设备,它会被加密并且只在可信执行环境(TEE)内处理吗?如果是这样,这整个堆栈是否经过审计,包括针对恶意TEE操作员的审计?

其次,如果ZK证明服务依赖PA进行其证明,那么任何曾经见过您护照的人都可以在此服务上冒充您。完全安全需要AA或CA。只要存在任何仅依赖PA的服务,任何护照数据被暴露的人都容易受到冒充攻击。即使ZK证明服务没有在其证明中纳入AA或CA,他们仍然应该与护照执行其中一个程序,以确保只有合法的护照才能注册此服务。

最后,系统需要考虑当人们与他人共享他们的ZK证明时会发生什么。护照的好处是您不能轻易制作副本(如果使用了AA或CA),但如果我可以允许其他人使用我的ZK证明,那么身份识别的价值就会降低。

对此类系统进行安全审计非常重要,无论是从用户的角度还是从服务提供商的角度。如果您正在实现身份文件的ZK证明,请联系我们以评估您的设计和实现。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计