“Mifare DESFire EV1”智能卡的读卡器真的需要知道卡的密钥才能对卡进行身份验证吗?

信息安全 验证 智能卡 NFC
2021-08-16 19:18:11

我正在尝试了解用于访问控制和支付的非接触式智能卡系统的安全性。该卡是实施ISO 14443的Mifare DESFire EV1(请参阅此文档集)。

我已经阅读了有关从智能卡中提取私钥的侧信道攻击(请参阅带模拟解调的加密 RFID 的侧信道分析)。他们很成功,但似乎很难执行。

据我了解此类卡的身份验证过程,读卡器和卡都必须通过质询 - 响应程序证明他们对密钥的了解(该协议不是公开的,但已在论文Cloning Cryptographic RFID Cards for 25中进行了逆向工程$在第 3.2 章中。)。所以所有的读取设备也必须知道密钥。但是可能有来自许多供应商的许多读卡器(例如咖啡机、收银机上的小型 USB 读卡器、门禁控制面板……),它们真的都有密钥吗?是否有关于如何存储密钥的标准?在某些情况下,卡可能会通过网络进行身份验证,但我知道有些设备可以离线工作。

我希望它们是一个很有前途的攻击媒介,因为咖啡机供应商通常不太关心安全性。有没有描述成功攻击的论文?或者这些读卡器中是否只有一个类似的芯片,其中密钥以相同的方式存储?

3个回答

编辑:好的。由于要求“简短回答”,这里是“执行摘要”,这里是:

问题:“所以所有的阅读设备也必须知道密钥。但是可能有来自许多供应商的许多读卡器(例如咖啡机、收银机上的小型 USB 读卡器、门禁控制面板……),它们真的都有密钥吗?是否有关于如何存储密钥的标准?”

回答:“是的。除了远程/服务器发起与 DESFire 卡的通信外,所有读卡器也必须知道密钥。是的 - 密钥的存储方式有标准 - 使用安全访问模块 - MIFARE SAM(当前为 AV2 模型)。

下面的所有内容如果不感兴趣可以忘记;)

基本上有两个 MIFARE 卡系列:MIFARE Classic 和 DESFire(以及类似的衍生产品)。此外,还有 MIFARE Plus,它最初针对 MIFARE Classic 市场(如果配置为完全支持,则它完全支持),具有两种额外的安全操作模式,可为 MIFARE Classic 基础设施增加更多安全性,达到类似于DESFire。

在这些 MIFARE 系列中使用了许多身份验证协议,有些非常相似,但有时在小细节上有所不同,这可能导致读取基础设施无法处理其他协议,即使它们最初看起来非常相似......

对于您关于 DESFire EV1 的问题,更重要的是:读卡器端安全的基本方法是使用所谓的“安全访问模块”(SAM),这是专门的智能卡,为读卡器/终端提供安全相关功能。SAM 拥有所有密钥,还具有执行安全协议的引擎,用于卡和读卡器之间的安全通信。就 DESFire EV1 的使用而言,这是阅读器安全的锚点。我也可能为每张卡单独派生密钥,因此它们不会对所有卡的身份验证和加密协议使用相同的密钥。通过使用来自主机的附加加密协议或通过批量离线上传(例如从 USB 记忆棒),可以将 SAM 模块中的密钥安全地上传到现场 SAM。

一些基于 RSA 的协议也支持签名/验证,以确保在不使用共享密钥协议的情况下对某些操作进行身份验证。

SAM 设计巧妙,在安全性方面非常可靠,因此将这样的 SAM 模块放入自动售货机可支持所需的所有安全性。即使是由远程主机发起的 DESFire 卡修改,也可以安全地建立,因为 SAM 可以充当“安全代理”,通过建立一个通向主机的安全通道和另一个通向卡的通道,提供“重新加密代理”在中间。当然,SAM 是作为“客户端”和任何命令交换的标准卡,因此读卡器必须通过在参与方之间发送、接收、转发 APDU 来支持这些协议。SAM 还支持与阅读器芯片的直接连接,充当透明代理。

它支持 2DES、3DES、AES、CRYPTO1、RSA 和一些标准算法的专有变体。

SAM 有更巧妙的“操作计数器”概念,有助于解决被盗和频繁使用的安全威胁:每次操作减少一个计数器。计数器必须通过主机启动的操作(在线或离线)定期增加。必须以某种方式(例如 USB 记忆棒)将加密和签名的“脚本”带到 SAM。还可以对密钥进行版本控制,以支持系统生命周期内的密钥安全翻转。

SAM 本身具有基于强密码学的访问控制逻辑,以执行设计的安全模型。精心策划和设计的密钥管理方案,支持系统的众多参与者之间的安全密钥分配。通常,初始 SAM 内容通过安全的 SAM 个性化和受控交付分发给指定的参与者(如自动售货机供应商),他们已经拥有一些身份验证密钥来获得对允许的 SAM/DESFire 卡操作的初始访问权限。如果这些密钥仅分配给特定玩家,则典型操作之一可以是认证密钥交换。

另一个对 UID、它的克隆等的评论:现代 MIFARE 产品支持访问 RandomUID 的单独命令,用于防冲突协议,以及用于识别卡的静态 UID(可选地还受身份验证和加密协议保护,提供“安全通道”)。这为系统设计人员提供了适当的工具来增强针对 UID 克隆或仿真的保护。但是许多“安全设计师”无论如何都非常懒惰,即使存在这些可能性也不会使用它们……

我知道的大多数系统确实使用网络连接通过质询-响应来验证卡。

我见过一些仅将卡的 UID 与存储值进行比较的离线设备。然而,这并不安全,因为您可以通过模拟 RFID 设备或简单地刷写特殊卡来复制这些 ID。

我同意你关于有前途的离线设备的看法。我已经通过发送一个已知的 UID 成功地欺骗了他们中的一些人。我什至不必深入了解协议栈,因为 UID 已经在防冲突层传输了。

如果您想更深入地研究这些东西,我建议您使用一些硬件设备。看到这些东西在行动中很安静很有趣:-)

最先进的解决方案是 PROXMARK http://hackerwarehouse.com/product/proxmark3-kit/

或者如果您只想复制一些卡片 http://www.instructables.com/id/RFID-Emulator-How-to-Clone-RFID-Card-Tag-/

我还在 eBay 上看到了一些不到 20 美元的钥匙圈设备,但现在找不到。

MIFARE DESFire EV1可以有多个应用程序 (28),每个应用程序可以有多个不同类型的文件 (32) (4)。卡本身有一个 PICC 主密钥,每个应用程序有 1 到 14 个密钥。每个应用程序的密钥用于控制对其文件的访问。

您的卡使用的每项服务都可以是并且可能是不同的应用程序。如果咖啡机密钥被泄露(应用程序 A),这并不意味着访问控制应用程序(应用程序 B)的密钥泄露在同一张卡中。

考虑卡上的咖啡机应用程序,它使用一个密钥 K1 来扣除信用,并使用另一个密钥 K2 为您的 DESFire EV1 卡添加信用。您用来获取咖啡并从卡中扣除信用的机器只需要密钥 K1,它不需要密钥 K2 来添加信用(这是在其他地方完成的)。所以如果你泄露了咖啡机的钥匙,你唯一能做的就是从卡里取钱,而不是增加你的信用。要添加信用,您需要为此提供密钥,这可能是在更安全的环境中在不同的地方完成的过程,甚至可能由人工操作员完成。

妥协的风险总是存在的,但可以通过巧妙地使用密钥和将服务分离到不同的应用程序中来减轻这种风险。也许你有 200 台咖啡机遍布整个办公区域,可以离线工作,但只需要 10 台就可以为卡充值,也许这甚至可以在线完成以增加安全性。

咖啡机可以使用安全访问模块来存储密钥。他们是否这样做,如果他们需要,那就是另一回事了。