我正在尝试开发一种自定义的加密安全协议,用于通过RFID智能卡进行身份验证,我可以通过互联网找到有关如何将静态标签写入卡的通用信息。 对于我的项目,我需要读卡器向卡发送一个挑战随机数(固定长度的随机字节),然后卡应该发回使用硬编码密钥(例如使用 AES CBC)或哈希 HMAC 加密的挑战。
问题是:我如何对卡进行编程以执行此类行为?我可以编写代码来执行此操作,但是如何将其"闪存"到卡上。此外,阅读器的代码也不是问题(我想使用带有阅读器模块的Arduino)。
然后无源芯片是否有足够的功率来进行这种计算,或者最好使用有源芯片,考虑到距离会只有几厘米,例如在门后面?
被动标签不能这样做。那些只是持有他们吐出的序列号。
你需要一些更智能的卡。您基本上有两个选择:
1) 选择适合您需求的通用卡
您描述的身份验证方案使用非常广泛,并且几乎由所有通用智能卡实现,无论是使用接触式还是非接触式 (RF) 接口(或两者)。如果你这样做,你不需要用你自己的代码对卡进行编程,你只需要获取规格并通过发送适当的命令用你想要的键值初始化卡。实际上,使用这些卡,通常有通用工具可用于初始化它们。容易。
例如,Mifare(由恩智浦提供)使用非常广泛,很容易获得,而且卡很便宜(缺点:它肯定不是有史以来最安全的卡)。您可以在此处使用Mifare Classic(具有专有的恩智浦安全协议)规格(请注意,读卡器必须兼容)或Mifare UltraLightC,具有开放的3DES加密 - 此处的规格。还有其他变体(例如使用AES的Mifare Plus)。只是不要选择简单的Mifare Ultralight,它不提供身份验证手段。您将看到,对于所有这些类型的卡,都有一个内置的身份验证方案,可以在功能上满足您的需求(它实际上是一种相互身份验证,因此它比您需要的更多,但没关系)。
FeliCa(由索尼制造),ACOS3(由ACS制造 - 规格在这里)是其他可能性,尽管我对它不太熟悉。
2) 获取可编程卡
有一些,但非接触式并不容易找到,而且它们非常昂贵。您可以查找:
BasicCard(ZeitControl),具有双界面。这些卡可以在 Basic 中编程,并且有一些可用的套件(但我也不熟悉它)。
JavaCard(任何制造商),这是一个标准,但对于小批量来说很难找到。不过,一些网上商店似乎有一些。这些卡在Java中是可编程的(实际上是Java的一个子集)。有一些工具可用于开发阶段(例如,来自Oracle,甚至作为Eclipse插件)。然后,要在智能卡中加载自定义小程序,您需要熟悉GlobalPlatform,这是另一个(公开可用的)标准,描述了在智能卡中管理应用程序的方式。不过,这太宽泛了,无法在这里详细描述。你可以在互联网上找到资源,但这条路绝对是最难的。
请注意,NFC只是描述了通信方法,并没有说明另一端可用的智能。
需要更多的智能(您似乎在寻找的命令在ISO 7816-4中称为外部身份验证),但对您的范围问题没有帮助,因为场越弱,可用的功率就越少。通过门进行通信的想法仅适用于非常弱的门,以至于高科技电子保护不会提高整体安全性。标准场强(心脏起搏器和类似设备限制该距离)所能达到的最大距离,中间只有空气,通常大约 10 厘米。所以对我来说,你的读者似乎必须在外面,需要机械地加强以防止篡改本身。
(有帮助的是带有自己电源的"卡",因此该字段仅用于通信。据我所知,这主要是由一种外部套筒提供的。
dim没有提到的是所谓的本机卡的产品组,通常只有在制造商的重要支持下才能编程(保密协议,可能涉及费用),但幸运的是已经包含大多数用例的功能,在您的情况下是命令获取质询和外部身份验证。