EMV交易流程 - 04. 脱机数据认证

0. 前言

脱机数据认证,Offline Data Authentication,缩写为ODA,是终端用来验证卡片有效性的手段。
ODA分为三种,SDA,DDA和CDA;准确的讲,CDA也是DDA的一种,在DDA的基础上进行了增强。
  • SDA: Static Data Authentication
  • DDA: Dynamic Data Authentication
  • CDA: Combined DDA/Application Cryptogram Generation

1. 作用

终端使用卡片交互特征(AIP)以及终端本身的能力来决定使用哪种ODA。从优先级的角度来讲,CDA > DDA > SDA。

SDA

  • 终端从卡片中读取出发卡行证书及签名数据,使用CA公钥PCA恢复出发卡行公钥PI
  • 终端使用恢复的发卡行公钥PI解密卡片签名数据
  • 终端将解密结果与卡片静态数据进行比对,保存比对结果

DDA

  • 终端从卡片取出发卡行证书及IC卡证书,使用CA公钥PCA恢复出发卡行公钥PI,使用恢复的发卡行公钥PI恢复出IC卡公钥PICC
  • 终端向IC卡发送内部认证命令(INTERNAL AUTHENTICATE)请求一个动态签名;卡片连接内部认证命令中的终端数据和在IC卡动态数据中指定的卡片数据,由卡片私钥SICC对该数据进行数字签名并返回给终端
  • 终端使用IC卡公钥PICC对数字签名进行验证

CDA

  • 终端从卡片取出发卡行证书及IC卡证书,使用根CA公钥PCA恢复出发卡行公钥PI,使用恢复的发卡行公钥PI恢复出IC卡公钥PICC
  • 终端向卡片发出应用密文命令(GENERATE AC);卡片响应该命令
  • 卡片连接终端通过另外的命令送来的数据及自己的响应数据,由卡片私钥SICC对该数据进行数字签名并返回给终端
  • 验证卡片生成动态签名。这一步在联机处理过程中执行。如果验证失败,交易拒绝

2. DDA详解

由于SDA已经处于被淘汰状态中,而CDA事实上的使用并不是特别多。现在主流的认证方式还是DDA。下面对DDA做一个比较详细的解释。

2.0 背景知识:公私钥体系

密钥体系有两种,对称密钥(如DES,AES等)和非对称密钥(如RSA,ECC等)。
所谓的对称密钥,就是加密方和解密方使用同样的密钥,或者很容易由一个密钥推导出另一个密钥。显而易见,这里任意一方发生密钥泄漏,就会轻易导致加密内容泄漏。另外,在多方加密会话中,密钥管理复杂性显而易见。如果有ABC三方,想要保持两两私密通信,则需要AB,AC,BC三组密钥,且密钥的传输必须通过另外的安全通道。
非对称密钥可以解决这个问题。根据定义,每个参与方产生自己的公私钥对,私钥自己安全保留,公钥则可以通过公开渠道散发出去。公钥加密的信息只能用对应的私钥解密,反之亦然。
  • 用途一,加密:在上面的情况下,A、B、C各自产生自己的公钥和私钥。私钥自己保留,公钥发布出去。如果A要跟B通信,则用B的公钥进行加密,B收到密文后用自己的私钥解密即可。
  • 用途二,签名:如果A想要让大家都相信这段信息确实是自己发的,不是别人伪造的,它可以用自己的私钥加密某段数据,并把明文一起发送出去。B收到加密数据后,用A的公钥解密,然后与原文进行比对是否一致,即可证明
当然 ,在实际的使用中,经常性把加密和签名进行结合使用,再结合上散列算法,可以极大的减少开销并防止攻击。

2.1 密钥体系

enter image description here

公私钥

一共存在三组公私钥,分别属于ICC,Issuer,CA。
在卡中存储IC卡私钥。终端可以通过终端管理系统获得CA的公钥。

证书

在卡中存储
  1. 经CA公钥签名的发卡行证书
  2. 经发卡行公钥签名的IC卡证书

2.2 交易流程

  • 1. 恢复PICC: 终端从卡片取出发卡行证书及IC卡证书,使用CA公钥PCA恢复出发卡行公钥PI,然后使用恢复出的PI恢复出IC卡公钥PICC
  • 2. 请求动态签名: 终端向IC卡发送内部认证命令(INTERNAL AUTHENTICATE)请求一个动态签名;卡片拼接内部认证命令中的终端数据和在IC卡动态数据中指定的卡片数据,由卡片私钥SICC对该数据进行数字签名并返回给终端。拼接格式参见EMV Book 2, Table 15
  • 3. 验证动态签名: 终端使用IC卡公钥PICC对数字签名进行验证

2.2.1 恢复PICC

首先恢复PI;参与方CA公钥和发卡行公钥证书
 [2018-08-01 14:28:58]
 DDA: Issuer Public Key Recovery
 ****************************************
 CA PK Modulus:
ACD2B12302EE644F3F835ABD1FC7A6F62CCE48FFEC622AA8EF062BEF6FB8BA8BC68BBF6AB5870EED579BC3973E121303D34841A796D6DCBC41DBF9E52C4609795C0CCF7EE86FA1D5CB041071ED2C51D2202F63F1156C58A92D38BC60BDF424E1776E2BC9648078A03B36FB554375FC53D57C73F5160EA59F3AFC5398EC7B67758D65C9BFF7828B6B82D4BE124A416AB7301914311EA462C19F771F31B3B57336000DFF732D3B83DE07052D730354D297BEC72871DCCF0E193F171ABA27EE464C6A97690943D59BDABB2A27EB71CEEBDAFA1176046478FD62FEC452D5CA393296530AA3F41927ADFE434A2DF2AE3054F8840657A26E0FC617
 Issuer's Public Key Certificate:
0C39FBBD8BFA33AEBD8E209518DD33E7046AC4CDFDA8DED4D439677F87B125868B83BBCF2B616F2DA735536AA55C24BC3A95738734CF88C9DA44B9827924FCAFEEC188858E294ED2F5C21554EF630D925B40876C64EF9994487B1B75CF0BE0CA9A8F5074E295061344247EB90837207AAA586A0DB362DB9E0BCBD8932B2C73D4A2CECB088BA4CDC6467E0BC323C89E300AF5185F0F3398F10C5DC08CCF695648A11779A02EB6701A3FE61C32E6E7AC4D0B3C1D7F4D00D71442871DBC0862CA8D9636DF31DFBBFEE35C18AA0E3D9FE04A142FF351E07A1D9C1325F6F5EF6121F8047D8E10FC946833599085B65BB934C79C591E6C434285FF
 ----------------------------------------
 Recovered Data:    6A02421329FF12270375D40101F801CF69881AA8DD782588F5EA595D5646C2417A0F9847212945BD84CCFECB48DA15B3B0751AD83118FD0DB270D7CF006BB6DDBCAAC530421C892D6D5582C121AE2B056A96A36B7481799E3D82CD57724C7E22CD97A0459BFD44E9E138158813CF66A9A15AD6461B25F462535EE0137864B029827403E04D1229DDDA9710F47CD97EFC366D5640F5A4860E4EE98B52FA8AC662C96486355FE6774D393BD43D018FB5DB139341E95D6BAAB409D0028AF8026F2B93DAB5710053BA3EFDBD6227264D1C89C854CCE054986AF0D9FCDB47C541AFA0D6AA48CB7BF652505218360B8619901FB7052D2C0703C8BC
 Data Header:     6A
 Data Format:     02
 Issuer Identifier:    421329FF
 Certificate Expiration Date:   1227
 Certificate Serial Number:   0375D4
 Hash Algorithm Indicator:   01
 Issuer Public Key Algorithm Indicator:  01
 Issuer Public Key Length:   F8
 Issuer Public Key Exponent Length:  01
 Issuer Public Key:    CF69881AA8DD782588F5EA595D5646C2417A0F9847212945BD84CCFECB48DA15B3B0751AD83118FD0DB270D7CF006BB6DDBCAAC530421C892D6D5582C121AE2B056A96A36B7481799E3D82CD57724C7E22CD97A0459BFD44E9E138158813CF66A9A15AD6461B25F462535EE0137864B029827403E04D1229DDDA9710F47CD97EFC366D5640F5A4860E4EE98B52FA8AC662C96486355FE6774D393BD43D018FB5DB139341E95D6BAAB409D0028AF8026F2B93DAB5710053BA3EFDBD6227264D1C89C854CCE054986AF0D9FCDB47C541AFA0D6AA48
 Hash Result:     CB7BF652505218360B8619901FB7052D2C0703C8
 Data Trailer:     BC
 Decoded Data Length:    248
 ----------------------------------------
 Recovered Data validation:
 ----------------------------------------
 Step 1: CA PK Modulus and Issuer's Public Key Certificate having the same size: Passed
 Step 2: Recovered Data Trailer check:  Passed
 Step 3: Recovered Data Header check (0x6A): Passed
 Step 4: Certificate Format check (0x02): Passed
 Step 5: Hash Input Data:   02421329FF12270375D40101F801CF69881AA8DD782588F5EA595D5646C2417A0F9847212945BD84CCFECB48DA15B3B0751AD83118FD0DB270D7CF006BB6DDBCAAC530421C892D6D5582C121AE2B056A96A36B7481799E3D82CD57724C7E22CD97A0459BFD44E9E138158813CF66A9A15AD6461B25F462535EE0137864B029827403E04D1229DDDA9710F47CD97EFC366D5640F5A4860E4EE98B52FA8AC662C96486355FE6774D393BD43D018FB5DB139341E95D6BAAB409D0028AF8026F2B93DAB5710053BA3EFDBD6227264D1C89C854CCE054986AF0D9FCDB47C541AFA0D6AA486DCCF886E00029C08CD05FF28C3397ABE271B0E5148AD2C97992B60A08691370C4FC075703
 Step 6: Hashing Result:   CB7BF652505218360B8619901FB7052D2C0703C8
 Step 7: Hash Result Comparison:  Passed
 Step 8: Issuer Identifier check:  Skipped (DIY)
 Step 9: Certificate Expiry Date check:  Passed
 Step 10: RID revocation check:   Skipped (optional DIY)
 Step 11: PK Algorithm Indicator check:  Passed
 Step 12: Issuer Public Key Modulus:  CF69881AA8DD782588F5EA595D5646C2417A0F9847212945BD84CCFECB48DA15B3B0751AD83118FD0DB270D7CF006BB6DDBCAAC530421C892D6D5582C121AE2B056A96A36B7481799E3D82CD57724C7E22CD97A0459BFD44E9E138158813CF66A9A15AD6461B25F462535EE0137864B029827403E04D1229DDDA9710F47CD97EFC366D5640F5A4860E4EE98B52FA8AC662C96486355FE6774D393BD43D018FB5DB139341E95D6BAAB409D0028AF8026F2B93DAB5710053BA3EFDBD6227264D1C89C854CCE054986AF0D9FCDB47C541AFA0D6AA486DCCF886E00029C08CD05FF28C3397ABE271B0E5148AD2C97992B60A08691370C4FC0757
 ----------------------------------------
 Issuer's Public Key Module Recovery succeeded.

然后使用恢复出来的PI,恢复出PICC
输入:IC卡证书,发卡行公钥,静态数据以及AIP。其中静态数据参与项由AFL指定
 [2018-08-01 14:41:14]
 DDA: ICC Public Key Recovery
 ****************************************
 Issuer PK Modulus:
CF69881AA8DD782588F5EA595D5646C2417A0F9847212945BD84CCFECB48DA15B3B0751AD83118FD0DB270D7CF006BB6DDBCAAC530421C892D6D5582C121AE2B056A96A36B7481799E3D82CD57724C7E22CD97A0459BFD44E9E138158813CF66A9A15AD6461B25F462535EE0137864B029827403E04D1229DDDA9710F47CD97EFC366D5640F5A4860E4EE98B52FA8AC662C96486355FE6774D393BD43D018FB5DB139341E95D6BAAB409D0028AF8026F2B93DAB5710053BA3EFDBD6227264D1C89C854CCE054986AF0D9FCDB47C541AFA0D6AA486DCCF886E00029C08CD05FF28C3397ABE271B0E5148AD2C97992B60A08691370C4FC0757
 ICC's Public Key Certificate:
BFDF53A181242769883034AF4A8757CCC11BC976DA16ADB934D3536825489A865BCAAF7A00B8DD9CA94EAB349954B7FB2FBB24168C69FD3C3D011B19DFFC3EBB90E3880399A2E423C55CE9DB2FCC1688FD09851C2F34CBEF4194AC2977EBF62B416228992B62A5649C448CDFCD68B8A253FB80F6FCB07A524C93544E666EA738A07031B684CC2909D00F66F44A66FB9EC55A67B0316DA5E496DC88125E9EB536E74963D64ADA2E463A7FC74698FB62E8731CA17FD64C22BEA051B5209868181DFCEDB2B80468FB2D9B69D09309AA03833E6A51914998D96A0FB76CABA310AD80B95A37A6DA77252BF80A0808D80497DE5039C777DC2133A3
 ----------------------------------------
 Recovered Data:    6A044213291056350226FFFF122700192B01018001D6BFB6B18A7FC25CE73D93BFC4816142E008AA5952EC506317835ACA64F9EA7FE210200BAA4829977BAEE5219B02002EEB4006B585B1D5729F1445FE7A79A8FB1FD6B74D56573BE87464DF859D0DDA2D25A8C48A8EB88E99440637D414B6046AAE702169A86141D16116DA97129AEFD7D73EDF4A1ACC42E8B5FBC1A3C3589839BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB06B1113F2DDB23FC16A3B526EC42E2B608CF1169BC
 Data Header:     6A
 Data Format:     04
 Issuer Identifier:    42132910
 Certificate Expiration Date:   1227
 Certificate Serial Number:   00192B
 Hash Algorithm Indicator:   01
 ICC Public Key Algorithm Indicator:  01
 ICC Public Key Length:    80
 ICC Public Key Exponent Length:  01
 ICC Public Key:    D6BFB6B18A7FC25CE73D93BFC4816142E008AA5952EC506317835ACA64F9EA7FE210200BAA4829977BAEE5219B02002EEB4006B585B1D5729F1445FE7A79A8FB1FD6B74D56573BE87464DF859D0DDA2D25A8C48A8EB88E99440637D414B6046AAE702169A86141D16116DA97129AEFD7D73EDF4A1ACC42E8B5FBC1A3C3589839BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 Hash Result:     06B1113F2DDB23FC16A3B526EC42E2B608CF1169
 Data Trailer:     BC
 Decoded Data Length:    248
 ----------------------------------------
 Recovered Data validation:
 ----------------------------------------
 Step 1: Issuer's PK Modulus and ICC Public Key Certificate having the same size: Passed
 Step 2: Recovered Data Trailer check:  Passed
 Step 3: Recovered Data Header check (0x6A): Passed
 Step 4: Certificate Format check (0x04): Passed
 Step 5: Hash Input Data:   044213291056350226FFFF122700192B01018001D6BFB6B18A7FC25CE73D93BFC4816142E008AA5952EC506317835ACA64F9EA7FE210200BAA4829977BAEE5219B02002EEB4006B585B1D5729F1445FE7A79A8FB1FD6B74D56573BE87464DF859D0DDA2D25A8C48A8EB88E99440637D414B6046AAE702169A86141D16116DA97129AEFD7D73EDF4A1ACC42E8B5FBC1A3C3589839BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB035F24032306305A0842132910563502269F0D05A8884488009F0E0510101800009F0F05A8C8C498008E0E000000000000000042035E031F025F280207105F25031806019F0702AB809F4A01829F080200963C00
 Step 6: Hashing Result:   06B1113F2DDB23FC16A3B526EC42E2B608CF1169
 Step 7: Hash Result Comparison:  Passed
 Step 8: Issuer Identifier check:  Skipped (DIY)
 Step 9: Certificate Expiry Date check:  Passed
 Step 10: PK Algorithm Indicator check:  Passed
 Step 11: ICC Public Key Modulus:  D6BFB6B18A7FC25CE73D93BFC4816142E008AA5952EC506317835ACA64F9EA7FE210200BAA4829977BAEE5219B02002EEB4006B585B1D5729F1445FE7A79A8FB1FD6B74D56573BE87464DF859D0DDA2D25A8C48A8EB88E99440637D414B6046AAE702169A86141D16116DA97129AEFD7D73EDF4A1ACC42E8B5FBC1A3C3589839BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 ----------------------------------------
 ICC's Public Key Module Recovery succeeded.

2.2.2 请求动态签名

[APDU Command]->[Card]:
Card Command : 00 88 00 00 04 
Input   Data : 95 D8 19 B0 // Terminal Data
Output  Data : 
Card  Status : 61 83 

[APDU Command]->[Card]:
Card Command : 00 C0 00 00 83 
Input   Data : 
Output  Data : 80 81 80 81 31 F1 6B 9F 48 CE 6E 04 A2 CC E4 95 D5 6F 4F CA D4 9E 04 26 BD 68 BA 
               2E B3 37 97 20 39 45 91 38 D7 BA B8 13 9D 90 7A A6 FB A0 40 EA 04 B1 CF 1A 3B 9F 
               F0 3D C0 2F D2 81 0F 36 73 92 AF 58 8F 97 BA 0B E2 5B 55 DD 2F E5 F6 5A F7 3D 0E 
               59 0D EA 58 DC 6E 35 41 10 E1 DA 66 BA F2 9E 2C 10 18 78 B8 49 91 F3 4C 20 44 13 
               43 61 E2 11 74 AD 66 6F C9 A8 CA 71 0C DC 1B 9A 17 5E DF A1 94 D1 E7 
Card  Status : 90 00 

2.2.3 验证动态签名

DDA: Signed Dynamic Application Data Verification
 ****************************************
 ICC PK Modulus:
D6BFB6B18A7FC25CE73D93BFC4816142E008AA5952EC506317835ACA64F9EA7FE210200BAA4829977BAEE5219B02002EEB4006B585B1D5729F1445FE7A79A8FB1FD6B74D56573BE87464DF859D0DDA2D25A8C48A8EB88E99440637D414B6046AAE702169A86141D16116DA97129AEFD7D73EDF4A1ACC42E8B5FBC1A3C3589839
 Signed Dynamic Application Data:
8131F16B9F48CE6E04A2CCE495D56F4FCAD49E0426BD68BA2EB337972039459138D7BAB8139D907AA6FBA040EA04B1CF1A3B9FF03DC02FD2810F367392AF588F97BA0BE25B55DD2FE5F65AF73D0E590DEA58DC6E354110E1DA66BAF29E2C101878B84991F34C2044134361E21174AD666FC9A8CA710CDC1B9A175EDFA194D1E7
 ----------------------------------------
 Recovered Data:    6A050103020003BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB0EBD39864696D0B0798B12370A11009D3BE89122BC
 Data Header:     6A
 Signed Data Format:    05
 Hash Algorithm Indicator:   01
 Dynamic Data length:    03
 ICC Dynamic Data:    020003 //此处是ATC,唯一的动态数据
 Pad Pattern:     BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 Hash Result:     0EBD39864696D0B0798B12370A11009D3BE89122
 Data Trailer:     BC
 ----------------------------------------
 Recovered Data validation:
 ----------------------------------------
 Step 1: Issuer PK Modulus and Signed Static Application Data having the same length: Passed
 Step 2: Recovered Data Trailer check:  Passed
 Step 3: Recovered Data Header check (0x6A): Passed
 Step 4: Certificate Format check (0x03): Passed
 Step 5: Hash Input Data:   050103020003BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB95D819B0
 Step 6: Hashing Result:   0EBD39864696D0B0798B12370A11009D3BE89122
 Step 7: Hash Result Comparison:  Passed
 ----------------------------------------
 DDA Validation Succeed.

DDA与CDA的异同

CAM 不同点
SDA 无需协处理器;不能防克隆
DDA 需要协处理器;可以检测克隆卡,但是不能防止中间人攻击
CDA 需要协处理器;在DDA的基础上,增加一次校验来防止中间人攻击
fDDA 用于非接的快速认证
Written with StackEdit.

人的生老病死

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

失火

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

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

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

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

转世与死亡

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

诗经·小雅·鹿鸣

呦鹿鸣,食野之。我有嘉宾,鼓瑟吹笙。
吹笙鼓簧,承筐是将。人之好我,示我周行。

呦呦鹿鸣,食野之蒿。我有嘉宾,德音孔昭。
视民不恌,君子是则是效。
我有旨酒,嘉宾式燕以敖。

呦鹿鸣,食野之。我有嘉宾,鼓瑟鼓琴。
鼓瑟鼓琴,和乐且湛。
我有旨酒,以燕乐嘉宾之心。

Written with StackEdit.

生命不息,折腾不止

防火墙越来越智能,现在的工具几乎都不能在用。各个商店全线下架VPN。
所以现在想要用StackEdit写个东西,在线实时保存都不行。
现在基本实现了电脑上的软件正版化和开源化,主要就是两个目的

  1. 支持工具开发
  2. 节省自己时间,不要把时间无意义的浪费在寻找各种破解上面。

第二点省下来的时间,全部在寻找翻墙软件上去。
还好,今天又找到了一个。前前后后花了大概两个小时在这上面。希望半年内不需要再花这个时间了。
具体方式请参考““如何翻墙”系列:扫盲 TOR Browser 7.5——关于 meek 插件的配置、优化、原理

Written with StackEdit.

有的时候,我也想称呼“你国”

有的时候,我也想称呼“你国”。
虽然,我很反感经常在知乎上看到的“你国”。
可是,修宪这件事让我真切的感觉到,那确实是“你国”或者“赵国”,而不是“我国”。
毕竟,皇上都快登基了不是。

Written with StackEdit.

UICC与USAT非常用特性-2:设备配对

前言

在很久很久以前,那个时候,中国联通还刚开始运营CDMA网络。联通研究院曾经提出过一个征求意见稿,要求卡商提案,怎么才能锁定UIM卡和对应的机器。当时提出的方案就是取设备的MEID进行绑定。
终于,ETSI决定把这个过程标准化了。

USAT Application Pairing

在Rel 12中,ETSI介绍了一个新的特性,叫做USAT Application Pairing。
通过搭配使用USIM上的文件以及USAT,可以限制特定设备使用这张USIM卡。

前提条件

  • 手机支持USAT PROVIDE LOCAL INFORMATION
  • USIM的UST n°102激活

方法

在TERMINAL PROFILE后,UICC应马上发送主动式命令,PRO_CMD_PROVIDE_LOCAL_INFORMATION,取得ME的IMEI或者IMEISV,然后与卡内EF_IWL进行比对。把比对结果写入EF_IPS并把取得的IMEI(SV)写入EF_IPD。
如果ME的IMEI(SV)不在范围内,或者ME不提供IMEI(SV),则USIM对任意鉴权请求均返回SW=6985。
如果在配对过程完成以前已经成功执行了鉴权,则UICC应该发起主动式命令PRO_CMD_REFRESH,模式为3G SESSION RESET。

Reference: TS131.102 $5.4.13 USAT application pairing procedure

The use of a USIM can be restricted to specific MEs using the USAT Application Pairing procedure and information stored in the USIM as specified in this specification and defined in 3GPP TS 33.187 [76].
To support the USAT Application Pairing procedure, the ME shall support USAT PROVIDE LOCAL INFORMATION command (IMEI or IMEISV), as specified in 3GPP TS 31.111 [12].
USAT Application Pairing is successful when the IMEI or IMEISV retrieved from the terminal belongs to a range of values the UICC is configured with in EFIWL.
EFIWL, EFIPS, EFIPD are defined in this document to support this procedure.
Written with StackEdit.

随记2018.02.01

1月30号,澎湃新闻的一篇关于汤兰兰的新闻,彻底击碎他们的媒体信任。从此这个媒体直接上了我的黑名单。

不管怎么说,这篇新闻只能体现出澎湃的两个可能:要么蠢,要么坏。不管是哪一种,都表示他们公司不值得任何的信任。

“豺狼当道,安问狐狸”。莫非,这个就是你们这些吃人血馒头的媒体的想法?

Written with StackEdit.