支付申请-EMV

Payment Application - EMV

我正在为 Android 开发支付应用程序。我已经阅读了所有四本 EMV 书籍(4.3 版),它们用于实现与终端通信的协议。我还从 Mastercard 购买了终端模拟器套件来测试我的应用程序。

有了这个模拟器,我可以从我的真实物理借记卡中读取数据,以获取发行者 public 密钥证书等信息。我将这些信息放入我的应用程序中 "simulate" 一张卡。但是有些数据我没有通过终端模拟器收到,例如用于生成应用程序密码的发行者主密钥。

所以我的问题是是否有可能获得丢失的数据?也许它可以在线使用?还是必须与发卡行合作? 很抱歉这个一般性问题,但我真的很感谢你给我的每一个提示!谢谢!

我可以说您正在尝试在 Android 上创建一个 NFC 钱包并尝试在 MasterCard 的模拟器上对其进行测试吗?

不是所有东西都可以从卡中取出,否则每个人都会开始克隆,市场就会充斥着假卡:)

EMV 交易的安全性受到密码保护。每笔交易都使用密钥携带不同的密码。检查 this and

但无论是 Secure Element Wallet 还是 HCE,Issuer Master Key 都不会直接加载到钱包中。在安全元件的情况下,受信任的服务器连接到钱包并共享从发行者主密钥派生的卡密钥,并且在交易期间,会话密钥是从卡密钥生成的,使用该卡密钥将生成密码。当它是 HSE 时,您将主要只存储会话密钥,因为它不如 SE 安全。您可以存储一对每次使用的会话密钥或一个可以多次使用的会话密钥,- 全部取决于您的实现。

But there is some data I don't receive through the terminal simulator like the Issuer Master Key for generating the Application Cryptogram.

您只能从卡中读取某些数据,例如 AFL 下的个性化记录,而密码密钥等敏感信息永远无法从卡中读取。

Real Process is like:-

1 - 卡使用其 AC 密钥生成密码,并将密码发送到主机进行验证,

2 - 主机使用其密钥计算密码,如果两个密码匹配则成功。

正如您所说,您正在使用您的实时借记卡,实际上几乎不可能猜出其中的 AC 密钥是什么。

希望对您有所帮助。

颁发者主密钥生成并保存在颁发者的主机 HSM 中。每张发行的卡都加载了从发行人主密钥派生的密钥。因此,每张卡都有自己的派生密钥。由于密钥用于应用密码计算并且 AC 必须是可信的,因此密钥永远不会被读取(如果可以,EMV 的安全性就会被破坏)。因此,发行人不会与任何人共享发行人主密钥,而只会将其保存在 HSM 中!