日本的 IC 卡:既怪异又精彩
aruarian.dance ・ 2025-05-13 ・ 2235 words ・ 12 min
日本的 IC 卡:既怪异又精彩
在Hacker News, Twitter上讨论这篇文章
今年冬天我在日本的时候,给我留下深刻印象的一件事就是令人难以置信的公共交通系统。正如预期的那样,它高效而可靠,但车站的刷卡进出闸机速度快得令人怀疑。伦敦地铁的闸机使用 Google Pay 或任何其他非接触式卡的速度都远没有这么快——这是怎么回事?我花了一些时间研究是什么让日本的交通卡系统(IC cards)与西方相比如此独特,以及我一路学到的所有有趣的东西。
NFC 的基础知识
近场通信(Near-field communication,简称 NFC)是一组协议,允许两个设备在不实际接触的情况下,使用 13.56 MHz 的无线电波(由 ISO/IEC 14443 定义)相互通信。它被广泛使用:
- 当您使用非接触式借记卡、Apple Pay 或 Google Pay 时,您正在使用 EMV,代表 Europay, Mastercard, Visa (archive),它基于 ISO/IEC 14443 运行。
- 当您使用 Oyster card 进入伦敦地铁站时,您的卡使用 MIFARE DESFire 与闸机读卡器进行通信(但如果您使用的是支付卡,则使用 EMV)。请注意,地铁最初使用 MIFARE Classic,但"安全性...太糟糕了" (archive),导致卡片很容易被克隆,破坏了其安全性。
- 用于建筑物、门等的门禁系统 (archive) 倾向于使用 MIFARE Classic。例如,您的办公楼、健身房等。
等等...您刚才不是说 MIFARE Classic 的安全性很糟糕吗?有人可以克隆我的钥匙卡——或者更糟糕的是,甚至不需要钥匙卡就可以进入我的(任何东西)? 是的,而且它比您想象的更糟糕。这就是为什么它被认为是过时的,并且幸运的是,没有任何对安全性至关重要的东西真正使用 MIFARE Classic 了。我的意思是,您不担心有人闯入您的酒店房间,对吧?
关于日本(以及整个亚洲)的有趣之处在于,他们有自己类型的 NFC,基本上在西方不存在:FeliCa,这是 Sony 开发的标准,正式分类为 NFC type F(与 MIFARE,即 type A 相反)。事实上,FeliCa 是第一个出现的,它于 1988 年开发;而 Philips(现在的 NXP)的 MIFARE 是在 1994 年推出 的。FeliCa 最初并没有在日本得到广泛采用,而是在香港,通过其公共交通 Octopus cards 在 1997 年推出——后来 JR East 在 2001 年 11 月为 Suica 交通卡采用了 FeliCa,而 Rakuten 开始将 FeliCa 用于其 Edy 卡(这个名字让我想起了某些东西...)。在那之后,许多亚洲国家都采用了它,如越南和孟加拉国。它们在这些国家填补了与在日本相同的需求:非接触式预付卡和交通票。
像香港和东京这样的地方有_很多_通勤者,导致车站闸机周围非常拥堵。 Sony 意识到了这一点,并大力投资于其技术的性能——FeliCa 卡的广告通信速度高达 424kbps,与西方同类产品相比,闸机处理速度有了显着提高。比较一下通过地铁检票口的速度 和东京检票口的速度(此 HN 讨论 的一部分)——您几乎可以冲刺通过。这部分是因为交易只涉及卡和读卡器本身——读卡器不会与外部服务器通信来执行交易。这使得 IC 卡成为 stored-value cards——也就是说,它们将价值存储在自己身上,而不是将其价值存储在后端,后端完全由运营商控制。该卡还存储了最近交易的历史记录,您可以使用任何 NFC 读卡器来读取此信息,甚至可以使用手机。但是这种 stored-value 模型提出了一些关于安全性的有趣问题...我们稍后会回到这个问题 🤔
这些卡还具有一些额外的质量特性,例如冲突避免——读卡器可以检测到何时同时读取多个 FeliCa 卡,并在这种情况下阻止任何读取:
顺便说一句,为什么 Philips 能够领先 8 年,却仍然设计出一种比 FeliCa 既慢又不安全的卡?我不知道是疏忽、削减成本还是其他原因,但这导致了现实世界中真正的安全问题! 隐蔽性无法提供安全保障。
Osaifu-Keitai
Osaifu-Keitai (saifu,“钱包”;keitai,“手机”)是一个系统,让您可以使用手机作为 IC 卡,模拟 Suica、Pasmo 或其他任何东西。多年来,人们对 FeliCa、IC 卡、Osaifu-Keitai 之间的关系,以及这与 Apple 和 Google 的手机有何关系存在一些困惑。当我第一次开始阅读这个主题时,我也一头雾水,但我试图在这里收集我的发现以供将来参考。这很大程度上要归功于 FelicaDude (Reddit, Twitter),一位匿名的互联网陌生人,他几年前消失了,但似乎对 FeliCa 的工作原理有很多了解。我无法验证任何这些信息,但对我来说是有意义的;无论如何,没有人会在互联网上说谎,对吧?
现代智能手机都具有 NFC 硬件。为了让手机获得 NFC 功能认证,它必须支持 NFC-A、NFC-B 和 NFC-F (FeliCa)。 所有支持 NFC 的手机都支持 FeliCa。 使用 NFC-F,您可以使用手机与您拥有的现有物理 IC 卡进行交互。使用像 Suikakeibo 这样的应用程序,您可以做到这一点——这是我的 Xiaomi Redmi Note 13 Pro 的屏幕截图,我在其中点击我的 PASMO 卡并读取其存储的值和交易历史记录:
但是,仅支持 NFC-F 不足以将您的手机用作 IC 卡。 相反,这需要 Osaifu-Keitai 支持。 Osaifu-Keitai 最初由 NTT Docomo 开发,作为 feature phones 的一项功能,让您可以使用手机拨打电话并充当 IC 卡。 后来,通过利用手机上已经存在的 secure elements 来安全地存储加密密钥(Apple Pay,Google Pay,生物识别解锁),将其集成到智能手机中。 现代手机具有充当 IC 卡所需的硬件,但安全元素可能没有必要的密钥。 手机供应商(Apple,Google)可能为他们生成并放入设备上的每个密钥向 FeliCa Networks 付费(许可或其他)。 由于为不会在日本使用的设备生成密钥毫无意义,因此非日本 SKU 不具有 Osaifu-Keitai 功能。 因此,即使您 root 了手机并完全访问了安全元素,如果手机的安全元素没有密钥,您也无法将其用作 IC 卡。
安全性
当我第一次读到卡片将价值存储在自身上的事实时,我立刻想到,这绝对不安全吧? 在进一步阅读后,我认为这些卡实际上非常安全,而且我感到震惊的是,它是如何经受住时间的考验的(顺便说一句,从 1988 年开始!!!) - 认真地证明了如果你从一开始就正确地计划好事情,并且不要假装隐蔽性就是安全性,然后试图起诉那些指出你的系统有多糟糕的人,你能做得多好。 除了一篇论文详细介绍了一个收银员利用的一个 bug,该 bug 无论如何都被审计日志和香港 Octopus cards 的清算系统捕获之外,我几乎找不到任何关于成功攻击 FeliCa 的信息。 我看到的唯一真正令人担忧的问题是,加密是专有的,可能埋在一堆 NDA 下面,因此公众无法独立审计它。
一般来说,IC 卡不受以下影响:
- 克隆(无法读取密钥)
- 成功攻击另一张卡(每张卡都有自己的密钥)
- 重放攻击(在质询/响应中生成每个会话的唯一密钥)
一种可能的攻击向量是利用 Apple 的 IC 卡实现。 如果 iPhone 可以模拟 IC 卡,那么系统上的_某个地方_就有可以执行必要握手的代码,对吧? 但是,此握手的密钥存储在 Secure Enclave 中。 只有当您是 Mossad,NGO Group,或者另一个可怕的三字母机构时,您才能进入 SE; 如果您设法做到了这一点:
- 您可以做的远不止是欺骗日本的交通卡
- 您可能即将通过被雇用或出售零日漏洞赚取数百万美元的您选择的货币
- 您的寿命已大大缩短
另一个唯一的攻击向量是读卡器本身。 充值机和车站闸机可能容易受到某种攻击,但即使您可以成功地执行一次,它们(可能)会将交易日志发送到某个中央审计服务器,并且您的不当行为很容易被标记为异常。 这正是上面链接的论文中发生的事情。 一旦您的卡被标记,其 ID 可能会被添加到热列表中,该列表在运营商控制下的所有读卡器终端之间同步,并且如果读卡器检测到其热列表上的卡,它会立即拒绝交易。 如果您幸运的话,甚至可能会叫来一些执法人员。 读卡器设备在此热列表中的空间有限,所以也许您可以生成数百万张被标记的卡,填满热列表,然后使用您的原始/稍后被标记的卡之一而不被阻止? 我只是在胡思乱想,我不知道这会如何运作。 但无论如何,这是一个有趣的想法。
但是,离线终端是另一回事:自动售货机之类通常不由卡运营商维护,而是由使用运营商 IC 卡读卡器的第三方维护。 这些机器可能未联网,不同步热列表,也不发送审计日志——一个可行的攻击向量! 不幸的是,由于 几何问题,我无法将自动售货机带回家,因此我无法对此进行调查。
未来的想法
在研究 FeliCa 一段时间后,我提出了一些未来的想法,可以在这些想法中发挥我的想法。
我想为微型版本的火车站网络构建软件。 整个软件堆栈,从闸机级别(嵌入式微控制器编程)到车站控制器(也许可以探索一些与 CAN 总线相关的东西,以将多个闸机连接到单个车站),一直到控制平面,该控制平面跟踪跨车站的旅程,并提供交易的审计日志。 显然,这永远不会是旨在在真正的交通系统中使用的东西,但听起来像是一个有趣的业余爱好项目😁
除此之外,也许可以研究 FeliCa 到底_为什么_比其 NFC 通信竞争对手快得多。 它背后的物理原理是什么? 是否有改进速度的空间,并获得低于 100 毫秒的点击? 这与我的专业领域相去甚远,但如果该领域具有相关知识的人可以分享他们的见解或撰写自己的帖子,我确信这将是一篇有趣的读物!
我对学到的关于 FeliCa 的知识感到满意。 我根本不是 NFC、移动支付系统、密码学或网络安全方面的专家,但我至少已经能够瞥见这个不寻常的世界。 我想知道我是否能够在任何地方应用这些知识。 tech japan security