从iPhone6解密APDU响应

时间:2015-02-18 06:24:58

标签: android nfc apdu emv applepay

我从我的Android手机中的Android应用程序传输了以下APDU命令,

  

发送:00 A4 04 00 07 A0 00 00 00 03 10 10 00

通过NFC到iPhone 6并得到以下回复,

  

resp:6F 39 84 07 A0 00 00 00 03 10 10 A5 2E 9F 38 1B 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 9F 4E 14 BF 0C 0D 9F 4D 02 14 01 9F 5A 05 11 08 40 08 40 90 00

现在,我一直试图使用各种来源解密这个,但令人困惑的部分是要理解,这是PKPaymenttoken数据(我们在苹果支付响应中收到)还是只是加密卡数据来自iPhone 6的存折。

我将这个结果与我从PassKit-framework' s->获得的响应进行了比较。 paymentAuthorizationViewController方法' s-> payment.token字符串,两者完全不同。所以我猜它不是苹果薪酬的代币响应。我担心的是,

  1. 这是加密卡数据本身吗?我可以直接解密它以获取卡的详细信息吗? (毕竟,Apple会轻易地发布卡片详情吗?)

  2. 我的最终要求是通过iPhone在iPhone6的Android手机中接受付款。那么我的APDU请求是否正确从iPhone6(Passbook)获取卡数据?

  3. 任何想法都表示赞赏。感谢。

3 个答案:

答案 0 :(得分:5)

我在这个链接的帮助下尝试了

https://github.com/devnied/EMV-NFC-Paycard-Enrollment

它确实有效。它直接从iPhone提供设备帐号。获取此设备帐号无需解密。

如何使用此库

this链接

下载图书馆

使用以下代码

IProvider prov = new YourProvider();
// Create parser (true for contactless false otherwise)
EMVParser parser = new EMVParser(prov, true);
// Read card
EMVCard card = parser.readEmvCard();

您将在对象中获取卡片详细信息。

回答您的两个主要问题

  1. 这只是对APDU命令的响应,如果您使用我提到的库,您将直接获取通过任何网关付款所需的卡详细信息。

  2. 第一个答案也是第二个问题的答案,您可以使用该库从Android手机上阅读iphone 6。所以只需两个步骤集成库 - >获取卡详细信息 - >转发到支付网关。通过这种方法,您无需向网关发送任何私钥,只需像正常的卡支付处理一样发送卡的详细信息。

答案 1 :(得分:3)

它不是加密数据,只是FCI信息

APDU发送给您:
  00 A4 04 00 07 A0 00 00 00 03 10 10 00
P1 = 0x04表示您通过DF名称选择MF,P2 = 0x00表示返回FCI信息。

您的回复 6F 39 84 07 A0 00 00 00 03 10 10 A5 2E 9F 38 1B 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 9F 4E 14 BF 0C 0D 9F 4D 02 14 01 9F 5A 05 11 08 40 08 40 90 00

您的回复说明如下:
6F->其FCI模板(即一组控制参数和管理数据) 39-> 6F标签长度,这些字节是6F标签数据 84 07 A0 00 00 00 03 10 10 A5 2E 9F 38 1B 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 9F 4E 14 BF 0C 0D 9F 4D 02 14 01 9F 5A 05 11 08 40 08 40 90 00
84表示DF名称的标签
07是长度
A0 00 00 00 03 10 10数据值,即DF名称
A5是以BER-TLV编码的专有信息标签 2E是长度
9F 38 1B 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 9F 4E 14 BF 0C 0D 9F 4D 02 14 01 9F 5A 05 11 08 40 08 40 90 00-> ; A5标签值

答案 2 :(得分:3)

这是加密卡数据本身吗?我可以直接解密以获取卡的详细信息吗?

不,不。正如Anand在答案中正确指出的那样,这是响应您的SELECT(通过AID / DF名称)命令返回的FCI模板,该命令与状态字9000连接(表示成功)。

FCI模板是遵循基本编码规则(BER)的TLV(标签长度值)编码数据结构。所以你的FCI

6F 39 84 07 A0 00 00 00 03 10 10 A5 2E 9F 38 1B 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 9F 4E 14 BF 0C 0D 9F 4D 02 14 01 9F 5A 05 11 08 40 08 40

解码为(参见http://www.emvlab.org/tlvutils/):

6F [39]   File Control Information (FCI) Template
    84 [07]   Dedicated File (DF) Name
        A0000000031010    (full AID of the application that you just selected)
    A5 [2E]   File Control Information (FCI) Proprietary Template
        9F38 [1B]   Processing Options Data Object List (PDOL)
            9F66 04
            9F02 06
            9F03 06
            9F1A 02
            95 05
            5F2A 02
            9A 03
            9C 01
            9F37 04
            9F4E 14
    BF0C [0D]   File Control Information (FCI) Issuer Discretionary Data
        9F4D [02]   Log Entry
            1401    (Transaction log file with at most 1 record is available at SFI 0x14)
        9F5A [05]   Application Program Identifier (Program ID)
            1108400840

我的最终要求是接受付款[...]。那么我的APDU请求是否正确从iPhone6获取卡数据?

部分是的。选择应用程序后,您将需要执行EMV支付交易(遵循非接触式支付系统的EMV规范,您可以从http://www.emvco.com/获取它们)。但是,请注意,这并不像获取某些卡数据那样容易。您需要从非接触式卡"中检索一些静态卡数据。 (即iPhone)。此外,您还需要让iPhone生成一些动态交易密码/交易授权码。然后,您可以使用此数据清除交易。

相关问题