从CVM列表中解析EMV的CV规则

7

我已成功从EMV卡中检索出CVM列表。

0000 0000 0000 0000 4103 4203 1E03 1F02

从EMV规范书3中,前4个字节和后4个字节是金额,剩下的是CV规则,将它们作为CV规则4103 4203 1E03 1F02

该书还展示了如何解析CV规则,如下所示:enter image description here

我假设我需要将CV规则中的前两个字节转换为二进制并与上面的表格匹配?但为什么上面的表格有空单元格? 同时,是否能有人用简单的伪代码算法来解析这个问题呢?


检索 CVM 列表的命令是什么?请帮忙。 - Uma Achanta
2个回答

5
你是否参考了同一本书中的10.5.5 CVM处理逻辑部分?它有详细的内容,甚至包括流程图。
至于空位读取为RFU。
以下是如何解析您的样例:
41 03
41 => 0100 0001 如果此CVM不成功,则应用后续CV规则 由ICC执行明文PIN验证
03 如果终端支持CVM ---------------------------------------------------
类似地, 42 03
42 如果此CVM不成功,则应用后续CV规则 在线验证加密的PIN
03 如果终端支持CVM ----------------------------------------------------
1E03
1E 签名(纸质)
03 如果终端支持CVM
----------------------------------------------------
1F 02
1F 无需CVM
02 如果不是无人值守现金、手动现金或带有返现的购买

是的,我已经阅读了那一部分。我理解了流程,现在我需要解析CV规则。例如,对于CV规则“4103”,我知道“03”=“如果终端支持CVM”,这在表40中清楚地说明了。但是我该如何解析上表中的“41”呢? - unknown
1
我已经更新了我的原始答案,现在应该对你很清楚了。 - Adarsh Nanu

0

问:(DO)我需要将CV规则中的前两个字节转换为二进制并与上面的表匹配吗?

答:例如标签0x8E值中,您有:

  • 每个4字节长度的2个金额,总计8字节。
  • 4个持卡人验证(CV)规则的组,每个规则2个字节,总计8个字节CVM列表长度。在每个2个字节规则中:
    • 第1个字节是“持卡人验证方法(CVM)代码”,这是您请求中的二进制表。例如:HEX值需要转换为二进制格式。其中HEX 0x41 == 二进制b01000001。 然后将位数与CVM代码的表39进行匹配。
    • 第2个字节是“持卡人验证方法(CVM)条件代码”。该表在EMV规范中呈现了描述。

问:但是为什么上面的表格有空单元格?

答:因为在标签值之前有8个HEX字符,即两个每个4字节长的金额。然后是CVM规则列表。

问题:能否有人用简单的伪代码算法解析一下这个问题?

回答:可以参考解析CVM List标签0x8E的值的示例。

---
# Cheef's parser.
# Copyright (C) 2008-2017 Alexander Shevelev. https://iso8583.info/
# lib   : "/lib/EMV/" - Integrated Circuit Card Specifications for Payment Systems
# tool  : "TV"
# stat  : 18 nodes, 4 lookup tables, 100.00% passed (4/4)

TV:#"8E0000000000000000410342031E031F02" # EMV, Cardholder Verification Method (CVM) List
- tag: "8E"
- val:#"0000000000000000410342031E031F02" # Cardholder Verification Method (CVM) List.
  - AmountX: "00000000" # Amount X
  - AmountY: "00000000" # Amount Y
  - CVRs:#"34313033343230333145303331463032" # CVM List
    - S1:#"4103" # Cardholder Verification Rule
      - CVMCode: "41" # Cardholder Verification Method (CVM) Code
        # _1______ - Apply succeeding CVR if CVM fails
        # __000001 - ICC Plain PIN verification
      - CVMCondition: "03" # Cardholder Verification Method (CVM) Condition Code // If terminal supports the CVM
    - S2:#"4203" # Cardholder Verification Rule
      - CVMCode: "42" # Cardholder Verification Method (CVM) Code
        # _1______ - Apply succeeding CVR if CVM fails
        # __000010 - Online Enciphered PIN verification
      - CVMCondition: "03" # Cardholder Verification Method (CVM) Condition Code // If terminal supports the CVM
    - S3:#"1E03" # Cardholder Verification Rule
      - CVMCode: "1E" # Cardholder Verification Method (CVM) Code
        # _0______ - Fail cardholder verification if CVM is unsuccessful
        # __011110 - Signature (paper)
      - CVMCondition: "03" # Cardholder Verification Method (CVM) Condition Code // If terminal supports the CVM
    - S4:#"1F02" # Cardholder Verification Rule
      - CVMCode: "1F" # Cardholder Verification Method (CVM) Code
        # _0______ - Fail cardholder verification if CVM is unsuccessful
        # __011111 - No CVM required
      - CVMCondition: "02" # Cardholder Verification Method (CVM) Condition Code // If not cash or cashback

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接