是否可以在 NFC 卡中实现令牌队列?

2024-03-11

这个问题专门针对 MIFARE Ultralight C/EV1、或 MIFARE DESFire EV1、甚至 NTAG 卡。我想实现一个令牌系统,以便每次普通用户读取其中一张卡时,他们都会获得一个可用令牌;该令牌将从他们正在读取的 NFC 卡中“弹出”。换句话说,每次读取 NFC 芯片时,它都会从卡的存储中发出不同的可用令牌。这可以实施吗?


更新2020/06/07>

NTAG 424 https://www.nxp.com/products/rfid-nfc/nfc-hf/ntag/ntag-for-tags-labels/ntag-424-dna-424-dna-tagtamper-advanced-security-and-privacy-for-trusted-iot-applications:NTAG424DNA支持“安全动态消息传递”,这可能适用于您的用例。您可以使用“动态部分”存储任何 NDEF 消息,该部分可以选择加密和身份验证。

引用第 9.3 节NTAG 424 数据表 https://www.nxp.com/docs/en/data-sheet/NT4H2421Tx.pdf:

安全动态消息传递 (SDM) 可保护机密性和完整性 数据交换,无需事先进行身份验证。 NT4H2421Tx 支持 SDM 用于读取 PICC 上的标准数据文件之一。安全动态 消息传递允许增加数据读取的安全性,同时仍然能够使用 标准 NDEF 读卡器。典型的用例是 NDEF 保存 URI 和一些元数据,其中 SDM 允许传递此元数据的机密性和完整性 保护后端服务器。

但请注意,该解决方案不能抵抗某些特定的尾部重放场景,引用:

使用 SDM 时,必须考虑安全动态消息传递带来的残余风险。由于 SDM 允许自由读取受保护的 消息,即无需任何预先的读者身份验证,任何人都可以读出 信息。这意味着潜在的攻击者也能够读取并存储一个或多个 多条消息,并在稍后的时间点向验证者播放它们。 如果这种残余风险对于系统的用例来说是不可接受的,那么遗留的共同风险 身份验证(使用质询响应协议)和后续安全消息传递 应该应用。这需要使用自己的应用程序并在外部运行 标准 NDEF 读取操作。 SDM 可以应用其他风险缓解措施来限制剩余风险,而不需要完全 删除它:

  • 在验证端跟踪每个标签的 SDMReadCtr。拒绝 SDMReadCtr 值 以前看过或者乱序播放的。这是最低要求 验证者应实施。

  • 通过要求定期呈现标签来限制攻击者的时间窗口(例如,在 每天至少一次)与之前的缓解措施相结合。

  • 多次读出受 SDM 保护的文件。这不能防止 攻击者也多次读出有效标签并播放收到的 以相同的顺序响应。

(请注意,上述遗留相互身份验证协议是我在下面的原始答案中描述的)

有一个有趣的实现后端服务器的项目 https://github.com/icedevml/ntag424-backend (with 标签个性化说明 https://github.com/icedevml/ntag424-backend#how-to-setup-sdm).

原答案如下:


Common 不可编程智能卡通常提供以下其中一项(或某种组合):

  • 熔丝位-- 一个存储区域,其中各个位的值只能以一种方式更改(从零到一或从一到零,但不能同时更改两者)

  • 单调计数器-- 存储在卡上的整数值,在个性化后只能在一个方向上更改(增加或减少,但不能同时增加或减少)

  • 电子钱包-- 一个整数值,可以由一个实体减少并由另一个实体增加(两个实体都通过不同的密钥证明自己)

这些函数都没有直接提供任何不可预测的标记(参见注释 1)。

另一方面是你的“令牌收集者”必须拥有一个允许卡写入访问的密钥(以便能够修改计数器/钱包)——这使他们能够轻松耗尽所有剩余的保险丝位或计数器/钱包值(有效地导致其他“令牌收集器”的拒绝服务条件)。访问控制不能细粒度到仅允许单个令牌收集(这可能是您想要的)。

With a 可编程智能卡您可以(半)轻松地实现您需要的任何操作语义——看看 Java Card(不过可编程智能卡更昂贵)。


假设您的“令牌收集器”在读取卡时在线,那么最简单的方法可能是仅使用该卡来证明“令牌收集器”位于其附近并在服务器上生成“令牌”。

为了证明与卡的接近度,“令牌收集者”将使用他/她的 NFC 手机在服务器和卡之间中继相互验证命令。为此,他/她不需要知道任何卡密钥。

任何具有相互身份验证功能的智能卡(例如 Ultralight-C 或 DESFire)都可以在这种情况下使用(参见注释 2 和 3)。

DESFire 的通信看起来与此类似:

祝你好运!


注1:实际上有些卡可以为其电子钱包生成不可预测的“余额证书”,但我不知道有任何CL卡支持此功能。

注 2:具有基于密码的身份验证的卡不适合,因为“令牌收集者”可以轻松拦截发送到卡的密码。 MIFARE Classic 不适合,并且加密密钥需要直接加载到读卡器(无法中继)。

注 3:请注意,通过执行此中继身份验证,您授予“令牌收集器”绑定到相应密钥的所有访问权限(尽管他/她不知道会话密钥的值)。因此,Ultralight-C 不是一个好的选择,因为从技术上讲,您将给予他/她对卡的完全访问权限。同样,不要使用 DESFire 卡主密钥进行中继身份验证 - 使用 2 个应用程序密钥(具有只有您知道的随机值)创建一个新应用程序,并使用第二个密钥(不是应用程序主密钥)进行中继身份验证。请记住也要更改卡主密钥。

注 4:DESFire EV2 具有命令中继保护功能,因此您必须测试它是否适用于您的场景。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 NFC 卡中实现令牌队列? 的相关文章

  • Java Web 应用程序可以访问远程工作站上的智能卡读卡器吗?

    我正在为我们现有的基于 Java 的 Web 应用程序之一开发一些新功能 该网络应用程序本身托管在我们的一台内部服务器上 可以通过我们工厂内多个计算机终端的浏览器进行访问 该应用程序用于在我们生产过程的各个阶段进行质量检查 目前 在进行每次
  • 树莓派 pico rfid rc522 (Micropython)

    我想使用 RPi Pico 从 mfrc522 Iduino RFID rc522 读卡器读取数据 但我不知道如何操作 我试图使用为此目的制作的 mfrc522 py MicroPython 库 阅读器正在通过 SPI 与 Pi 通信 我将
  • 在 iOS 13 中连接到 NFCTagReaderSession NFCISO7816Tag 标签并发送命令

    我正在研究 iOS 13 中新提供的 NFCTagReaderSession 我突然连接了会话标签并发送 apdu 命令进行通信 当我调用 connect 属性时 在连接时 发出蜂鸣声 它看起来需要 15 秒才能连接 它会显示一条错误消息
  • NFCTagReaderSession“缺少所需的权利”

    我正在深入研究 iOS 13 的新 CoreNFC 功能 并且正在努力让 NFCTagReaderSession 正常工作 设置我的权利并实例化 NFCTagReaderSession 和委托后 我尝试通过调用来启动会话nfcTagRead
  • NTAG212 Mifare Ultralight 带身份验证

    我是 NFC Android 新手 我已经被困了好几天试图获取第 4 页到第 7 页NTAG212 Mifare Ultralight 带身份验证 我已经有了 PWD 和 PACK 来做PWD AUTH基于NTAG212 Docs 我采用这
  • 更改 MIFARE Classic 中扇区的身份验证密钥

    根据埃文的回答这一页 https forums tessel io t change auth code 1091 为了更改扇区的身份验证密钥 我们需要覆盖该扇区的第四个块 最后一个块 中的密钥 默认密钥始终为 FF FF FF FF FF
  • SIM卡认证

    我是 SIM 卡新手 我正在尝试使用 Gemalto JCardManager 金雅拓开发人员套件的一部分 和 Gemplus USB 智能卡读卡器对 SIM 卡进行身份验证 显然 我拥有所有必要的密钥 kic kid 和 kik 但我无法
  • 在 Android 上使用 NFC 软件卡模拟控制完整的 APDU

    我正忙于开发一个应用程序来模拟 Nexus 7 上使用 CM10 1 与 ACR122U102 读取器 写入器的正常 APDU 通信 我发现这个博客是关于软件卡模拟 http nelenkov blogspot nl 2012 10 emu
  • 扩展 APDU 和 T=0/1 通信协议

    我有一个 JCOP V2 4 2 R3 java 卡 它的数据表中提到 该卡支持T 1 and T 0通信协议 我还有一个 ACR38 智能卡读卡器 它支持 T 0 和 T 1 协议 我与一张卡成功进行了 T 0 通信 并且与该卡成功进行了
  • NFC 广播接收器问题

    我希望我的应用程序仅在激活时侦听 nfc 标签 为此 我尝试如下注册一个 nfc 侦听器 但没有成功 IntentFilter filter new IntentFilter android nfc action TECH DISCOVER
  • SCardEstablishContext 内存泄漏

    我们在某些 Windows 安装上突然出现智能卡 API 问题 调用 SCardEstablishContext 函数时似乎存在内存泄漏 可以在控制台应用程序中重现该问题 代码示例位于http www pinvoke net default
  • 两个 NFC 标签分别链接到项目中的两个不同活动?

    我正在做一个 NFC 应用程序 想知道这种情况是否可能 假设我在一个项目中有 2 个 NFC 标签和 2 个活动 写入NFC A以打开Activity A 方法是将NFC A中的MIME类型写入为 application com examp
  • NfcAdapter.getDefaultAdapter(this) 返回 null 但 NFC 可以工作

    我的应用程序在后台和前台使用 NFC 读取 对于用户信息 我在活动中使用 CountDownTimer 120 1000 5 1000 和方法 onTick long l 每 5 秒检查一次 NFC 状态 有时 在 Android 4 2
  • 使用 Android 应用程序访问 SIM 卡?

    我想知道是否可以使用 Android 应用程序访问 SIM 卡 你可以像这样获取 IMEI 但这是你想要的吗 只是一个例子 mTelephonyMgr TelephonyManager getSystemService Context TE
  • 作为 Windows 服务运行时的 PCSC.InvalidContextException

    我一直在使用 pcsc sharp 库开发一个小型智能卡扫描仪应用程序 该应用程序作为控制台应用程序运行时工作正常 代码如下 using System using System Collections Generic using Syste
  • WebUSB 和 RFID 读取器

    我想知道是否有人有让 RFID 读取器通过 WebUSB 工作的经验 我使用的阅读器是https www parallax com product 28340 https www parallax com product 28340 根据我
  • 智能卡 CMS 解密

    我在用着充气城堡管理我的项目的加密功能 我设法使用CMS用于加密和解密 两个密钥都存储在我的文件系统中 a cert and a p12 这是我实际使用的两个函数 private static byte CmsEncrypt byte me
  • 如何在 Fragment 中使用 onNewIntent(Intent Intent) 方法?

    我正在尝试从我的设备使用 NFC 硬件 但是 问题是当我注册 Activity 来接收 Intent 时 PendingIntent pendingIntent PendingIntent getActivity this 0 new In
  • Android 操作系统上的 NFC 堆栈

    有人可以帮助我了解 NFC Android 堆栈的当前状态吗 随着OS 2 3发布了小型 NFC 支持 仅限于 NXP 标签读取 后来 Google 增强了 API 所以在OS 2 3 3支持更广泛的标签 并且还可以使用 p2p 我的问题是
  • ACR122 - 卡模拟

    如何让 NFC 非接触式读卡器 ACR122U 充当标签 卡模拟模式 招股说明书声称该设备可以进行卡模拟 但 SDK 似乎没有提供此功能的示例或文档 有人知道怎么做这个吗 是否需要额外的软件 请注意 我的目标平台是 MS Windows 提

随机推荐