如何从 Javacard 制作 EMV 卡?

Posted

技术标签:

【中文标题】如何从 Javacard 制作 EMV 卡?【英文标题】:How to make an EMV card from a Javacard? 【发布时间】:2020-09-09 19:54:24 【问题描述】:

我将编写一个 Java Card 小程序来将我的卡转换为符合 EMV 的卡。

1- 问题是我该怎么做?

据我所知,有四个 EMV 规范称为 EMV Books,其中包含 EMV 卡的原理(芯片特性、文件结构以及 APDU 命令列表)。我是否需要任何其他规范来实现我的小程序,或者这些就是我所需要的?如果我需要其他一些规范,它们是免费提供的还是专有的?

2- EMV 卡是否有特定的 Applet AID?

EFT-Lab 提供了一个很好的小程序 AID 列表。正如您在下面看到的,有很多属于 Visa International(作为供应商)的 AID,它们都是“EMV”类型。为什么 Visa International 的 EMV 小程序有很多不同的 AID?这些小程序有什么区别?

3- 是否有任何开源的 EMV 小程序?有没有默认带有 EMV 小程序/包的 Java Card?

4- 接触式和非接触式 EMV 卡有什么具体区别吗? (我的意思是在文件结构或 APDU 命令中)

【问题讨论】:

【参考方案1】:

1- 问题是我该怎么做?

是的。执行规范。如果有任何其他要求(肯定会有),那么它们应该在规范中被引用。

2- EMV 卡是否有特定的 Applet AID?

因为它们提供特定的功能?您甚至可以在同一张卡上拥有多个应用程序。请注意,可以使用部分 AID 选择应用程序(请参阅借记卡和信用卡如何部分匹配)。 VISA 专用卡可能仅在内部使用,例如维修自动取款机时。

3- 是否有任何开源 EMV 小程序?有没有默认带有 EMV 小程序/包的 Java Card?

不太可能。这将是相当不可用的,因为它需要EMVCo security evaluation 才能被接受。因此,您需要某种支付结构来支付认证和审核费用。没有开源计划可能会预先支付现金。

通常这类实现需要技术来避免需要保密的漏洞;毕竟,智能卡不能提供完美的安全性。这与开源实现是垂直的。因此,如果有任何东西,它必须是出于学术兴趣而创建的(例如,用于测试协议的安全性、概念证明等)。

4- 接触式和非接触式 EMV 卡有什么具体区别吗? (我的意思是在文件结构或 APDU 命令中)

通常更多的是关于小程序的哪些部分可用或不可用。大多数小程序都可以在双模式下使用这一事实可能不言自明。

This paper 似乎很好地介绍了可能的差异。

【讨论】:

谢谢你亲爱的马丁。假设我已经在我的卡上编写了一个应用程序来将其转换为 EMV 卡。并且还假设我已经注册了这个小程序的 AID。问题是“POS/ATM 应用程序如何在不知道 AID 的情况下选择我的小程序?”。我是否需要要求 POS/ATM 开发人员在他们的应用程序中硬编码我的小程序的 AID? 可能是的,因为通常您会使用您指定的 EMV 之一。 AID 反映的是协议而不是发行者。 '不太可能。这将是相当不可用的,因为它需要接受 EMVCo 安全评估。 ——你知道如何使用谷歌吗?我发现至少有两个实现。 github.com/JavaCardOS/OpenEMV .... 至于可用性,这些主要是为了测试。此外,一些服务(我们城市的公共交通)支持any支付卡来放置您的预付车票。而不是将其放在借记卡上并在几个月内丢失卡...... 顺便说一句,还有一些不错的开源 javacard 列表,例如用于 applet SW 搜索的 JavaCard curated list。【参考方案2】:

有没有开源的 EMV 小程序?有没有 Java Card 默认是一个 EMV 小程序/包?

正在做一个类似的项目,发现this github repo。楼主说的:

这是一个完整的用于 javacard 2.2.1 的 EMV 小程序。

【讨论】:

以上是关于如何从 Javacard 制作 EMV 卡?的主要内容,如果未能解决你的问题,请参考以下文章

APDU读取文件java卡程序

POS EMV 卡密码更改

Javacard 如何在 CardImpl.class 中的 checkState() 中删除和重新插入卡而不引发异常

PDOL为EMV卡(APDU)生成“GET PROCESSING OPTIONS”(GPO)

需要从linux目录制作可启动的SD卡

EMV 标签 91 发行者身份验证数据 - 如何确定响应中标签的格式