如何使用NFC Core在iOS 13上对NFC NTAG216标签进行密码保护

bprjcwpo  于 2023-06-25  发布在  iOS
关注(0)|答案(2)|浏览(173)

我正在尝试使用iOS 13对NFC NTAG 216贴纸进行密码保护。我需要NFC标签是可读的任何人,但我想限制写到NFC标签,除非你有预设的密码。根据标记的规格,这应该是可能的,但编写NDEF标记的API似乎非常有限。我发现NDEF标记的API主要限于编写完整的消息负载。我还发现,根据Apple文档https://developer.apple.com/documentation/corenfc/nfciso15693tag/3043817-writesingleblock,NFCISO 15693 Tag API确实允许一些低级操作
有谁能给予我一个提示,如何在iOS 13中使用NFC Core对NDEF 216标签进行密码保护?看到NTAG 216规格表,我们应该使用PWD和PACK参数,但我不知道如何将这些写入贴纸,只有选择写入完整的消息有效载荷?
我想要的行为:
1.用户收到空NFC标签
1.用户使用ios应用程序将数据写入NFC标签
1.用户可以选择一个密码来保护标签不被覆盖
然后过一段时间,用户将需要自己更新标签,所以我想要这个行为
1.用户输入解锁NFC标签的密码
1.用户通过敲击芯片上的手机解锁芯片
1.用户现在向芯片写入新数据
1.用户现在可以使用相同的或新的密码再次锁定芯片--无需选择
任何对正确方向的帮助都是非常感谢的

mcdcgff0

mcdcgff01#

您可以在iOS中使用以下方法向NTAG发送任何命令:

func sendCommand(data: CmdData, completionHandler: @escaping(Data?, Error?) -> Void) {
    tag?.sendMiFareCommand(commandPacket: data, completionHandler: { (data, error) in
        completionHandler(data, error)
    })
}

其中,参数数据是命令APDU,标签对象是NFCMiFareTag类型。

命令APDU将password & PACK写入NFC Tag:

1.密码(FF FF FF FF FF):[写入cmd:CMD|联系方式|数据] -> A2 E5 FF FF FF FF

  1. Package (01 02):[写入cmd:CMD|联系方式|数据] -> A2 E6 01 02 RFU RFU
    注:可以简单地写入00 h来代替RFU,也可以通过以下步骤保留值:
  • 读取页面E6 h---->您将收到16字节(4页)数据----->取出前4字节,这将是E6页上的数据---->将第0和第1字节替换为要写入的PACK值----->使用上述写入命令将更新的4字节数据写入E6 h。

激活保护

一旦密码和PACK值被配置到NFC标签上,下一步将是通过定义读/写访问必须从哪个页面认证来激活保护。为此:

  • 读取页E3 h--->将前4个字节复制到data[]
  • 用第一个用户页号04 h覆盖索引3处的AUTH 0值,这意味着从04 h开始的任何页都需要身份验证才能进行读访问(默认情况下)

访问读保护页面

1.用户输入PWD & PACK以解锁标签

  • 使用以下命令,使用输入的数据验证标签:
  • 验证:[命令(1Bh)|PWD] --> 1B FF FF FF FF
  • 标记将以PACK值响应,可以通过将其与PACK值进行匹配来验证,以获得额外的安全性
  • 现在标记处于身份验证状态,数据可以写入标记。**注意:一旦标签离开字段,身份验证状态将重置。因此,您必须在同一会话中验证和写入数据。
  • 除非需要改变PWD/PACK,否则不需要进一步的动作,因为每次会话完成时标签都返回到受保护状态,即从外地出来。

您可以参考NTAG 213/215/216 Data sheet

kfgdxczn

kfgdxczn2#

NTAG 216是Mifare Ultralight标签
使用https://developer.apple.com/documentation/corenfc/nfcmifaretag/3043838-sendmifarecommand
如果您查看数据表https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf
第8.8.1节
32位PWD和16位PACK需要编程到配置页面中,参见第8.5.7节
https://stackoverflow.com/a/44546511/2373819详细介绍了在相同类型的标签上设置和使用密码,而这是Android的概念相同。
使用普通超轻写入命令A2h将PWD写入E5h页(页地址用于NTAG 216),并将PACK写入E6h的字节0和1。
再次使用普通的ultralight write命令对页面E3h的字节3配置第一个受密码保护的页面(您可能希望4h作为第一个页面)
再次使用普通的ultralight write命令在页E4h中写入正确的位,以启用正确级别的保护和其他参数(您可能希望首先读取此页以获取当前值)
苹果网站上的文档似乎对CRC的理解是错误的,请参阅https://stackoverflow.com/a/60463724/2373819,以获取在iOS上发送到Mifare Ultralight标签的示例。
只是一个注意,我还没有真正尝试过设置密码与iOS。

相关问题