人的生老病死

儿子四岁半,最近突然很关心生死之事

失火

上个月开始,每天都在跟我纠结,如果失火怎么办,会死吗?

我很认真的给他解释了,如果失火,会有消防车来灭火的;然后他又开始纠结,

  • 如果消防车没来怎么办?如果我们睡着,不知道失火了怎么办?如果火灾报警装置坏了怎么办?如果我们没听到报警怎么办?
  • 如果忘了关煤气怎么办?如果煤气灶的熄火保护坏了怎么办?
  • 如果忘了关电磁炉怎么办?如果电磁炉的电路保护坏了怎么办?
  • 如果汽车坏了着火了怎么办?如果在路上打不开车门怎么办?

又好气又好笑,同时,心里还有那么一丝丝的自豪。小家伙的逻辑思维能力相当的强,我每提出一个解决方案,他一定能想出一种例外的情形。然后我再提新的方案,他再提新方案的可能性,循环往复。

转世与死亡

在小家伙的理解里面,人死了后,一定是能够转世的。因为他经常说“爸爸,等你去世后,你再读幼儿园,就要巴拉巴拉……”“爸爸,等你去世后,你再xxx,你就xxx”

但是那段时间,他突然很敏感,经常说着说着就哭起来了。有一次,我们在聊天,发生了下面的对话

爸爸,你什么时候会死?’
我会和你一起长大,然后就慢慢的变老,然后某一天,就去世了

他突然就哭了起来,搂着我说“爸爸爸爸,我不要你死,我要你陪着我”。虽然我一直安抚他“爸爸还有很久才会死,还会陪你很多年”,他还是一直抽泣,很久才慢慢的好过来。

有的时候,他还会问“是不是死了以后就变成石头人,不能动了?”。得到我肯定的答复,他就很害怕,说“我不想死,也不想你死,我很害怕,不想变成石头人,不想在那里不能动”

现在的小孩子真是太聪明了,也太敏感。我自己在这个年龄,应该完全不会考虑这些问题吧。或者说,直到现在,我也没有考虑过这个问题。一切随波逐流,到了时间,自然就会去面对。那个时候,或恐惧,或坦然,或者像现在一样,深信“死后皆为虚无”,也或者充满了期盼,还会有另外的一种可能性。

Written with StackEdit.

EMV交易流程 - 02&03. 应用初始化与读应用数据

0. 目的

1. 应用初始化

根据上一个步骤,SELECT应用后返回的FCI,终端知道应该调用哪些参数来组成PDOL,发送给卡片。
输入:PDOL
取得:AIP,AFL,SW

80A8000004 83020344(6110)
// 上一条指令中,9F38 TAG带的值为9F1A02
  0344: Terminal Country Code
00C0000010 [800E3C00080202001001040018010301](9000)
[80]
  Application Interchange Profile (AIP): 3C00 //支持DDA和CVM
    Byte 1:
	  Bit 8:0 = RFU
	  Bit 7:1 = Support SDA
	  Bit 6:1 = Support DDA
	  Bit 5:1 = Support CVM
	  Bit 4:1 = Perform Terminal Risk Mgmt
	  Bit 3:1 = Support Issuer Authentication
	  Bit 2:0 = RFU
	  Bit 1:1 = Support CDA
    Byte 2:RFU
  Application File Locator (AFL)
    08 02 02 00
    10 01 04 00 
    18 01 03 01 
      18 - SFI //
      01 - Start Record
      03 - End Record
      01 - The record involved in ODA
//常用SFI
	08 - 01
	10 - 02
	18 - 03
	20 - 04
     

2. 读应用数据

指令本身很简单,就是根据GPO中得来的AFL信息开始读取数据文件。重点是读取的内容是什么。

注意:这里出现了一个电信卡中没有的文件类型“记录大小可变的线性文件”,所以在下面的log中可以看到终端会发送两次指令,第一次用来取记录长度,第二次才读到文件记录。

//常用P2
	0C - 01
	14 - 02
	1C - 03
	24 - 04
00B2020C(6C34)
00B2020C34[703257134155810006563008D19072012608038600000F5F201A4D4F20582E2F4A554E4348454D47202020202020202020202020(9000)
[70]
  [57]Track2 equivalent data: 4155810006563008D19072012608038600000F
  [5F20]Card holder name: 4D4F20582E2F4A554E4348454D47202020202020202020202020

00B20114(6C2F)
00B201142F [702D8F01099F32010392248CC2D5B98479D339D256C0FF736135E00352A1C69BE9DE6D326B3A6AAF77562C2AF302CF](9000)
[70]
  [8F]Certification Authority Public Key Index(PKI): 09
  [9F32]Issuer public key  exponent: 03
  [92]Issuer public key remainder: 8CC2D5B98479D339D256C0FF736135E00352A1C69BE9DE6D326B3A6AAF77562C2AF302CF

00B20214(6C0C)
00B202140C[700A9F4701039F49039F3704(9000)
[70]
  [9F47]ICC Public Key Exponent :03
  [9F49]Dynamic Data Auth DOL(DDOL): 9F3704

00B20314(6CFE)
00B20314FE 7081FB9081F854A5AA5C620846F4B720773CE789F8B00017826EA93CAC8A14683E45BFCA34A6E1C20FC5D5587E215EF8895B12DEB3FB1E208CFC4D37DA13C3DD760D799614F60081D37D74BA6E01435080FA386DCE888825B3DD4E43BCF5E77D627E6BBE467950BB85303928D707459C1C7AA317458ADC81D961394574A74E43BBCBFE3022F4E0E79CCD52B58658DF862631626B1F6BAD895E34ABE932F0F6050AEE2AEC8E2166BD6E587E427FE774817A04582CCD4B9DC69EE563CCA1F1A46C7B1435ED78BAE2A2BB9291DF7D90A781B93007FBA935EE9263D3B832215C63A0C07006867F43C94A8111585940837369E52E49769F69F02AF3580E949D94(9000)
[70]
  [90]Issuer public key certificate: 54A5AA5C620846F4B720773CE789F8B00017826EA93CAC8A14683E45BFCA34A6E1C20FC5D5587E215EF8895B12DEB3FB1E208CFC4D37DA13C3DD760D799614F60081D37D74BA6E01435080FA386DCE888825B3DD4E43BCF5E77D627E6BBE467950BB85303928D707459C1C7AA317458ADC81D961394574A74E43BBCBFE3022F4E0E79CCD52B58658DF862631626B1F6BAD895E34ABE932F0F6050AEE2AEC8E2166BD6E587E427FE774817A04582CCD4B9DC69EE563CCA1F1A46C7B1435ED78BAE2A2BB9291DF7D90A781B93007FBA935EE9263D3B832215C63A0C07006867F43C94A8111585940837369E52E49769F69F02AF3580E949D94
00B20414(6CFF)
00B20414FF 7081FC9F4681F860AA33139FA93A6477B780050A0D6AF423759289E7462446269FEA1982E35DA721BC315844E8A36257DEA83648FA13E73CDD38B649C5FADAA7A8990ADEB211FD72FDCE911A0A540D6900E04470D11DFE283FB0CF9D24410BF220BDD441BBC992EEDD41547C5F0E03D8356B471334C7CC20EC99E1D7372DDDFCD00B4C38559DE0113C1CF89EF2C781370CD2DD6214743441A8683E18F6F3F7FE8B95D62DCFD760B47F3CB77381C4BD1AF69187F7EF36FC42E8A7DE797F3A7DD56791740AF52997B168E766DDEF3C6091E49B9A7F000F221076B172DDADB83F2ABC73D6BC32546DCF95C115E09206804C2F93DFDAB9373D28C4F1D32D1B2235(9000)
[70]
  [9F46]ICC PublicKey Certificate: 60AA33139FA93A6477B780050A0D6AF423759289E7462446269FEA1982E35DA721BC315844E8A36257DEA83648FA13E73CDD38B649C5FADAA7A8990ADEB211FD72FDCE911A0A540D6900E04470D11DFE283FB0CF9D24410BF220BDD441BBC992EEDD41547C5F0E03D8356B471334C7CC20EC99E1D7372DDDFCD00B4C38559DE0113C1CF89EF2C781370CD2DD6214743441A8683E18F6F3F7FE8B95D62DCFD760B47F3CB77381C4BD1AF69187F7EF36FC42E8A7DE797F3A7DD56791740AF52997B168E766DDEF3C6091E49B9A7F000F221076B172DDADB83F2ABC73D6BC32546DCF95C115E09206804C2F93DFDAB9373D28C4F1D32D1B2235

00B2011C(6C3A)
00B2011C 3A70385A0841558100065630085F24031907319F0702FF005F280201885F25031711019F0E0524102800009F0F059868D4F8009F0D059868C4A800(9000)
[3A]
[70]
  [5A]Application Primary Account Number(PAN):4155810006563008
  [5F24]Application Expiration Date:190731
  [9F07]Application Usage Control(AUC):FF00
  [5F28]Issuer Country Code:0188
  [5F25]Application Effective Date:171101
  [9F0E]Issuer Action Code - Denial (IAC-Denial): 2410280000
  [9F0F]Issuer Action Code - Online (IAC-Online): 9868D4F800
  [9F0D]Issuer Action Code - Default (IAC-Default): 9868C4A800

00B2021C(6C44)
00B2021C44 70429F420201889F4401028C159F02069F03069F1A0295055F2A029A039C019F37048D178A029F02069F03069F1A0295055F2A029A039C019F37049F0802009A5F340100(9000)
[70]
  [9F42]Application Currency Code:0188
  [9F44]Application Currency Exponent:02
  [8C]CardRisk Management Data Object List1(CDOL1): 9F02069F03069F1A0295055F2A029A039C019F3704
  [8D]CardRisk Management Data Object List2(CDOL2): 8A029F02069F03069F1A0295055F2A029A039C019F3704
  [9F08]Application Version Number:009A
  [5F34]Application Primary Account Number Sequence Number(PANSN):00

00B2031C(6C26)
00B2031C2670248E18000000000000000002011E041E031F0200000000000000009F690701000000000000(9000)
[70]
  [8E]Cardholder Verification Method(CVM)List:000000000000000002011E041E031F020000000000000000
  [9F69]Card Authentication Related Data(fDDAdata):01000000000000

Written with StackEdit.

EMV交易流程 - 01. 应用选择

0. 目的

用来尽可能的保持终端和卡的互操作性。通过这个过程,唯一确定需要使用的应用。

  • 卡上应用列表由发卡行决定
  • 终端上应用列表由收单行或者商户决定

1. 建立候选列表

1.1 PSE选择方法

  • 终端发送SELECT指令,选择PSE(在EMV标准中固定为1PAY.SYS.DDF01)。卡片在FCI中会返回SFI
  • 终端使用SFI,发送READ RECORD指令,依次读取记录中的AID并进行匹配
  • SW = 6A 83,则停止
3B6800000073C8400000  //Reset, ATR
00A404000E 315041592E5359532E4444463031(6126) //Select PSE
00C0000026 [6F24840E315041592E5359532E4444463031A5128801015F2D0865](9000) //Get Response
  [6F]
    [84]DF Name: 315041592E5359532E4444463031	//1PAY.SYS.DDF01
    [88]Short File Identifier(SFI): 01
    [5F2D]Language Preference: 65737074656E6672	//esptenfr
    [9F11]Issuer Code Table Index: 01
00B2010C00 (6C2D) //Read SFI=01, 1st Record
00B2010C2D [702B61294F07A0000000031010500C56495341204352454449544F9F120C56495341204352454449544F870101](9000) //Get Response
  [70]Application Template
    [61]
      [4F]ADF Name: A0000000031010
      [50]Application Label: 56495341204352454449544F //VISA CREDITO
      [9F12]Application Preferred Name: 56495341204352454449544F
      [87]Application Priority Indicator: 01
00B2020C00 (6A83) //Read SFI = 01, 2nd Record

1.2 应用列表选择方法

这个方法就很简单了。终端把自己支持的所有AID都通过SELECT指令选择一遍,看哪个匹配就加入候选列表

1.3 匹配规则

分为完全匹配和部分匹配两种。由终端的ASI(Application Selection Indicator)决定采用哪种匹配方式。

完全匹配就是指终端AID和卡内AID要完全一致
部分匹配就是指终端AID可以只与卡内AID的前面几个字节完全一致

2. 最终选择应用

如果卡上由多个应用可以和终端进行交互,具体选用哪个应用,由终端和卡片共同决定

  • 应用包含Application Priority Indicator,Bit 8会决定是否需要用户允许才能选择此应用
  • 如果是多应用,且终端可以让用户选择,则终端按照优先级排序显示供用户选择;没有API或者优先级相同,由终端决定如何显示
  • 如果终端不支持用户选择功能,则终端自动选择最高优先级且API bit 8 = 0的应用

应用在终端上的呈现方式一般是Application Preferred Name中的内容

00A4040007 A0000000031010(6153)
00C0000053 [6F518407A0000000031010A546500C56495341204352454449544F8701019F38039F1A025F2D0865737074656E66729F1101019F120C56495341204352454449544FBF0C0E9F5A065201880188304203415581(9000)
[6F]
  [84]DF Name: A0000000031010
  [A5]
    [50]Application Label: 56495341204352454449544F
    [87]Application Priority Indicator(API): 01
    [9F38]Processing Options Data Object List(PDOL): 9F1A02
    [5F2D]Language Preference: 65737074656E6672
    [9F11]Issuer Code Table Index: 01
    [9F12]Application Preferred Name: 56495341204352454449544F
    [BF0C]File Control Information(FCI) Issuer Discretionary Data: 9F5A065201880188304203415581
	  [9F5A]520188018830
	  [42] 

附录1: 本节涉及重要TAG

4F ADF Name
50 Application Label
9F12 Application Preferred Name
87 Application Priority Indicator

附录2:常见支付机构AID

RID PIX
VISA A0 00 00 03 10 10
Mastercard A0 00 00 04 10 10
CUP A0 00 00 03 33 01 01 01/01 01 02
American Express A0 00 00 00 25 01
Discover A0 00 00 01 52 30 10
JCB A0 00 00 00 65 10 10
RuPay A0 00 00 05 24 10 10

Written with StackEdit.

EMV交易流程 - 00. 前言和总览

0. 前言

一直说要学习银行卡的技术,但是一直抽不出时间。上周终于找到空闲时间段,开始认真的看标准。目前已经把EMV 4.3看了一遍,对整体的交易流程有了初步的了解。但是更多细节上的东西,还是要边看边想边问。

总的来讲,我的目标不是做开发,所以很多太过细节的东西,我不会花太多的精力。但是,如果需要的时候,一定要能够想起来在哪个标准的大概位置。

1. 总览

整个EMV交易流程由如下构成

  • 01 应用选择
  • 02 应用初始化
  • 03 读应用数据
  • 04 脱机数据认证
  • 05 持卡人验证
  • 06 处理限制
  • 07 终端风险管理
  • 08 终端行为分析
  • 09 卡片行为分析
  • 10 联机处理
  • 11 发卡行脚本处理
  • 12 交易结束

其中只有应用选择是在EMV Book 1,其他都是在Book 3中定义。我的整个系列也是会按照这个结构来写。

当然,随着后面对技术标准阅读量的增加,一定会有勘误和增补,就不事先申明了。

2. 与电信卡异同汇总

ATR

金融卡的默认ATR为3B 6X 00 00 + History Byte
TA1一般不存在,所以波特率默认使用11,即 F=372/D=1
终端可以接受的TA1范围为“11”到“13”

路径

电信卡一定是以MF_3F00做为根目录。而在金融卡中,通过"应用选择",可以直接选取对应的应用。

3. 疑问汇总

文件结构

疑问:DDF和AEF到底是什么?为什么要设计这个东西出来?为什么不直接使用DF/ADF和EF的概念?

Written with StackEdit.