首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从iPhone6解密APDU响应

从iPhone6解密APDU响应
EN

Stack Overflow用户
提问于 2015-02-18 06:24:58
回答 3查看 1.7K关注 0票数 0

我在我的android手机上发送了以下APDU命令,来自一个android应用程序,

发送: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框架的-> paymentAuthorizationViewController方法的-> payment.token字符串中得到的响应进行了比较,两者完全不同。因此,我想这不是苹果支付的象征性回应。我担心的是,

  1. 这是加密的卡数据本身吗?我能直接解密得到卡的细节吗?(毕竟,苹果会轻易公布卡片的细节吗?)
  2. 我的最终要求是接受来自iPhone6的安卓手机中的NFC支付。那么,我的APDU是否要求从iPhone6 (护照簿)获得卡片数据?

任何想法都是值得感激的。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-11 05:11:10

我试过在这个链接的帮助下

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

真的很管用。它直接从iPhone给出设备帐号。不需要解密就可以得到这个设备帐号。

如何使用这个库

链接下载库

使用下面的代码

代码语言:javascript
复制
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。因此,只需两个步骤,集成库->,将卡片细节->转发到支付网关。通过这种方法,您不需要发送任何私钥到网关,只需发送卡的详细信息,就像您为正常的卡支付处理。
票数 5
EN

Stack Overflow用户

发布于 2015-02-18 07:17:16

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

APDU由您发送:

00 A4 04 00 07 A0 00 00 03 10 100

P1=0x04表示您要按DF名称选择MF,而P2=0x00则表示要返回FCI信息。

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

你的答复如下:

6f->其FCI模板(即控制参数和管理数据集)。

> 6F标签长度,这些字节为6F标签数据84 07 A0 00 00 10 A5 9F 38 1B 9F 66 04 9F 02 06 9F 03 06 9F 095 95 05 5F 02 02 05 9F 03 049 F 01 049 F 4E 14 BF 0C 0D 9F 4D 02 01 9F 5A 05 08 08 40 40 90 00

DF名称的84表示标记

07是长度

A0 00 00 00 03 10数据值,即DF名称

A5是用误码编码的专有信息的标记。

2E是长度

9F 38 1B 9F 66 04 9F 02 06 9F 06 9F 03 06 9F 02 95 05 5F 2A 02 03 0C 01 9F 37 04 9F 4E 14 BF 0C 0D 9F 02 01 9F 5A 05 08 08 40 90 00>A5标签值

票数 3
EN

Stack Overflow用户

发布于 2015-02-18 07:47:41

这是加密的卡数据本身吗?我能直接解密得到卡的细节吗?

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

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

代码语言:javascript
复制
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/):

代码语言:javascript
复制
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生成一些动态事务加密/事务授权代码。然后,可以使用这些数据清除事务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28577293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档