MiFare - MiFare卡的UID和序列号有什么区别?

16
我需要使用WinSCard读取MiFare卡的序列号。我能够从MiFare卡中读取7B UID。
混淆的是,我不知道UID和MiFare卡的序列号是否相同?!!
我已经在谷歌上搜索了这个问题,但只有部分成功。我在stackoverflow上也找到了一个question,但没有帮助。
我在NXP在线文档中发现了一份document,它说UID和序列号是不同的。(第3页,第5行)
有一个OmniKey的应用程序可以读取卡的序列号,它也只返回UID。
NXP文档说UID <> Serial Number,而其他标准的OmniKey应用程序则返回UID作为序列号
我已经开始为这个问题拔光头发了。如果有人能帮忙,我将非常感激。

3
MiFare标签没有可读的序列号,只有UID。你感到困惑的原因是,并非每个人都知道UID是什么,但每个人都知道序列号是什么。因此,UID经常被错误地称为序列号。NXP试图澄清这一点,但却通过暗示序列号存在而增加了更多的困惑。顺便说一下,来自NXP的文件非常误导。 - Nils Pipenbrinck
那么唯一可读的ID只有这个UID吗?我可以使用WinSCard读取UID。如果序列号不可读,提供它们的意义是什么呢?#只是好奇 :-) - jparthj
4
那份文档的完整引用是“UID 不是‘序列号’,而是唯一标识符。没有推荐的方法可以将字节数组转换为整数。”他们指出将其转换为数字不是他们定义的内容,并且可以用不同的方式进行转换(例如小端 vs. 大端)。 - Eric
3个回答

19
每张智能卡都包含一个带有唯一永久识别号(UID)的集成芯片,该号码在制造过程中烧入。这个UID通常被称为卡片序列号(CSN)。卡片序列号未加密,符合ISO标准的任何读卡器都可以读取卡片序列号。
编辑1: Mifare卡序列号是ISO 14443-3A中定义的唯一标识符。标准中定义了3种UID类型 - 单个(4字节)、双倍(7字节)和三倍(10字节)。仅在Mifare卡的第一个版本中,UID是4字节,但现在已经迁移至7字节。
编辑2: 这可能对你有所帮助...
What is the difference between a 4 byte UID and a 4 byte ID?

一个4字节UID是一种由卡片制造商使用受控数据库分配的标识符。该数据库确保不会重复使用单个标识符。相反,4字节ID是一种可以在产品生产期间分配给多个非接触式芯片的标识符,以便可以在一个特定的非接触式系统中部署具有相同标识符的多张卡。


是的,我知道这一点。但是NXP官方文件说UID和序列号是两个不同的东西。所以我很困惑。 - jparthj
我已经访问了你在答案中提到的链接。但是该链接并没有包含“UID = Serial Number?”的答案 :-( - jparthj
一个国家的身份证UID是所有卡片的相同数字吗?例如,我用两张不同的身份证进行检查,得到了相同的数字6f648407。 - Maximiliano Cesán

5
在这种情况下,区分的关键在于“序列号”意味着数字是连续的,因此是按顺序分配的。
MIFARE卡有唯一的识别号码(简称UID),这些号码是由内部规则生成的,并不一定是顺序的。这意味着,如果您看到一个UID为01020304050607的卡片,这并不意味着至少已经生产了那么多张卡片。
如果您看到有人提到“卡片序列号”,其实他们是指UID。
唯一可能会令人困惑的是,MIFARE卡可以被配置为在激活时返回随机ID。如果是这种情况,每次激活卡片都会得到不同的“UID”。在这种情况下,您需要读取块0中包含的数据(您需要知道扇区0的密钥)以获取卡片的真实UID。

1
感谢您的努力,但我的问题仍然存在。:( - jparthj
@Eduardo,你关于“真实UID”的评论似乎与此处给出的答案截然相反,当卡片配置为返回随机ID时,链接的答案建议扇区0是随机UID或静态UID。 - Tung

0

对于DesFire卡:

  1. UID类似于以太网MAC地址。它由芯片制造商从数据库中分配。为卡创建应用程序的每个人都可以访问UID。
  2. 卡序列号是特定于加载到卡上的应用程序的。只有通过加密密钥,该应用程序才能访问它。如果卡上加载了多个应用程序(不太可能但有可能),则每个应用程序都可以具有不同的CSN。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接