【问题标题】:Contactless javacard security implementation with NFC device使用 NFC 设备的非接触式 javacard 安全实现
【发布时间】:2015-03-24 11:37:46
【问题描述】:

假设一名员工使用 NFC 安卓设备通过读取固定在墙上的非接触式 javacard 来报告他的位置,每个人都可以访问。

  1. 员工用智能手机扫描 javacard,只发送时间戳
  2. 非接触式 javacard 接收时间戳,添加其 UID 并使用存储的公钥加密并发送回
  3. Android 接收到加密消息并将其中继到保存私钥的服务器(可能由于缺乏连接而留在队列中)
  4. 服务器解密消息并检查信息是否有效并返回报告。

具有双接口的 JCOP31 Java 卡是否足够匹配?

整个想法是不惜一切代价避免卡/标签克隆。

我从未做过任何类型的 javacard 实现,我很想听听您对这一系列事件和架构的反馈。

【问题讨论】:

  • 问题是您的 javacard 小程序无法访问其硬件物理 UID...
  • 它必须在其生命周期的某个预个性化阶段将 UID 存储在 EEPROM 中。
  • 您能否扩展预个性化阶段?
  • 好吧,在将非接触式卡放到野外并将 UID 上传到 Javacard 小程序的持久内存 (EEPROM) 之前,您必须通过一些受信任的设备读取 UID,因为您无法访问来自您的小程序的 UID(这是一个硬件属性)(因为它无法退出其软件沙箱)。
  • 警告:似乎在您的协议中,任何人都可以要求签名,并且可以接受任何时间戳。只是一个小小的旁注:)

标签: nfc javacard


【解决方案1】:
  1. 对于这个用例来说,签名实际上就足够了,因为您只需要一个真实的时间戳,但我想不需要加密。

  2. Oncard Key Generation 是执行此操作的正确方法。

  3. UID 可用于 jc-applet 中的 JCOP(jcopx,您需要询问 NXP 此功能需要哪个版本)。

【讨论】:

  • 对于这个特定的用例,我应该将现有的私钥存储在卡中,而不是在卡上生成它们,对吧?
  • 不,您应该在安装过程中生成密钥对并将公钥作为响应发送出去。这样,私钥只存在于卡上,永远不会离开它。否则,您必须确保在密钥生成设备上将私钥导入卡后安全删除
  • 啊好的我明白了,在安装过程中我会得到公钥并稍后将它保存在服务器中,以验证消息是否有效。
  • 我认为他的意思是你必须在卡的个性化中交换信息:导出公钥或导入私钥,所以你也可以在那里输入 uid,因为 jcopx 包只符合支持它的卡。事实上,我认为您可以输入任何类型的标识符,甚至是一个字符字符串,然后将其包含在签名中。所以你签署了时间戳和一个自格式化的 id,所以你没有 uid 的限制。
  • 是的,我就是这个意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多