apdu - 手动生成AC密码

标签 apdu emv mastercard

我正在尝试手动生成 AC,我有一个生成 AC 的工具,但我想自己生成它以了解其算法。

我的计算对于 Discover 卡来说没问题,但对于 MasterCard 却失败了。据我了解,用于生成AC的数据取决于标签8C - CDOL1,我们通过Gen AC命令+ AIP + ATC向卡提供该标签。

AIP 和 ATC - 由 ICC 内部访问。

用于生成 AC 的数据是:-

data part of Gen AC command + value of tag 82 + value of tag 9f36 + 80 + optional 00 to make it multiple of 8.

这是我的逻辑,可能是我使用了错误的数据来计算 A.C,这就是为什么我的测试工具得到不同的结果。

终端提供的数据
授权金额 - 000000000201
金额,其他 - 000000000000
终端国家代码 - 0826 - 英国
终端验证结果 - 00 00 00 00 00
交易货币代码 - 0826 - 英镑
交易日期 - 15 04 28
交易类型 - 00 - 商品和服务
不可预测的数字 - 30 90 1B 6A
终端类型 - 23 - 有人值守,仅限离线。由商家经营
数据验证码 - 00 00
ICC 动态号码 - 1E AB C1 26 F8 54 99 76
CVM 结果 - 00 00 00

使用 CDOL1 生成 AC 80AE 40 00 2B 0000000002010000000000000826000000000008261504280030901B6A2300001EABC126F8549976000000 该命令返回 9F26。 我用于计算的数据是:-

0000000002010000000000000826000000000008261504280030901B6A2300001EABC126F85499760000003800000180 [数据是8的倍数]

其中 3800 是 AIP,0001 是 ATC,80 是 Padding [ Padding method 2 EMV] 这是我的逻辑,有人告诉我应该更多地关注哪里来生成与我的工具生成的相同的 AC。

最佳答案

万事达卡应用密码 (AC) 的生成比其他卡方案更复杂。

  1. 卡可以使用不同的 ICC session key 派生 (SKD) 方法:

    • 万事达卡专有 SKD,其中涉及应用程序交易计数器 (ATC) 和不可预测的数字 (UN);
    • EMV2000 方法,仅涉及 ATC - 请参阅EMV 4.0,第 2 册
    • EMV 通用 session key (CSK) 方法,仅涉及 ATC - 请参阅EMV 4.2,第 2 册
  2. 数据对象 (DO) 可以具有不同的附加值或修改值集:

    • 卡验证结果 (CVR) 可以是 6 或 4 个字节。
    • 可以包含来自发行人应用数据 (IAD) 的离线计数器。
    • 可以包含最后的在线 ATC 值。

可以通过密码版本号 (CVN) 和应用程序控制位来检测所使用的方法和数据变体。 CVN 是 IAD 标签 0x9F10 的子字段。

详细信息是专有的,可供万事达卡成员(member)使用。

要深入了解它,请查看“M/Chip 卡应用加密算法”和 M/Chip 卡应用引用。

关于apdu - 手动生成AC密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776602/

相关文章:

python - 如何在 python 中创建 sha1 哈希

encoding - 是否可以将万事达卡虚拟借记卡编码为物理卡?

json - 如何获得当前的万事达卡汇率(买入/卖出货币)?

javacard - 全局平台 Java 卡安全通道示例

protocols - 来自智能卡的响应状态字 0x61xx 是什么意思?

java - 读取 Visa emv 卡时总是得到 6a82 和 6d00

php - 万事达卡支付集成服务无法在 PHP 中运行

java - 如何使用 Selenium for Java 自动设置 'https://stage.masterpassteststore.com/configuration'?

c - 如何将数据写入 Mifare classic 标签

java - 如何构建与 Verifone 或 Ingenico EMV 设备配合使用的桌面应用程序