用于访问控制的UID

时间:2014-01-06 14:48:49

标签: authentication nfc uniqueidentifier access-control mifare

我正在使用Mifare Ultralight C制作门禁系统。 我使用的方法是基于卡的UID。 我可以通过NFC阅读器阅读UID(Arduino UNO上的SeeedStudio屏蔽) 但是,UID不可靠,因为市场上有可写的UID卡。所以我认为我应该通过3DES认证来保护连接,然后阻止来自第一个序列号字节的0x00的读取。 这是实现访问控制的正确方法吗?

1 个答案:

答案 0 :(得分:1)

您无法阻止对UID的读取权限。 UID是ISO 14443的防冲突/标签枚举阶段的内在部分,因此标签将始终显示该信息。此外,Ultralight C仅允许从第3页到存储器末尾的读/写保护。

您可以做的是:

  1. 使用UID识别标签。
  2. 根据主密钥和标签的UID导出特定于标签的密钥。

    K 标签 = f key_derivation (UID 标签,K master

  3. 使用该密钥K 标记作为Ultralight C身份验证的3DES密钥。

  4. 保护(读取和写入)标签的整个数据存储器。
  5. 可能在标签上存储一些额外的认证信息(例如,通过UID的签名)。但是,您应该记住,在身份验证之后,读取操作既不加密也不受完整性保护。这意味着攻击者可以通过监听合法标签和合法读者之间的通信来检索存储在标签上的数据。此外,攻击者可能能够使用合法标记进行身份验证,然后拦截任何进一步的读取命令以返回操纵数据。基本上这意味着您应该避免在此类标记上存储任何受非完整性保护的权限信息。
  6. 最后:MIFARE Ultralight C当然不适合用于访问控制!