金融系列6《借贷记交易流程》

摘要:
这些信息由发卡行设定,包括应用优先权、应用名称和首选语言等。如此将所有AFL项处理完。读到的交易数据中可以识别的应存储在终端上供交易使用。对于AFL指明要用于脱机数据认证的记录,则将其数据加到脱机认证的数据列表中供脱机数据认证使用。2)由终端恢复发卡行公钥。

1.应用选择

终端发送SELECT命令给卡片,获取卡片支持的应用信息。这些信息由发卡行设定,包括应用优先权、应用名称和首选语言等。命令数据中可以包含PSE名(使用目录选择方法)、DDF名或请求的AID(AID列表选择方法)

//选择PSE文件
Send:00A404000E315041592E5359532E4444463031
--->:611C
 
Send:00C000001C
//选择PSE后回送的FCI: 6F(FCI模板)+84(DF名)+A5(FCI数据专用模板)+88(目录基本文件的SFI)+5F2D(语言选择,O)+9F11(发卡行代码表索引,O)+BF0C(发卡行自定义数据,O)
//IC卡返回:PSE9102
//如果选择失败,终端则直接改用AID列表选择方法
--->:6F1A+840E315041592E5359532E4444463031+A508+880101+5F2D027A689000
 
//根据88(目录基本文件的SFI,01),读取基本数据0001文件的第一条:
Send:00B2010C00
--->:6C1D
 
Send:00B2010C1D
//IC卡返回:PSE0101
--->:701B6119+4F08A000000333010101+500A50424F43204445424954+8701019000
 
//读取基本数据0001文件的第二条,返回6A83(未找到记录),说明0001文件下只有一条记录(每条记录列出一个应用)
Send:00B2020C00
--->:6A83
 
//选择标准借贷记文件
Send:00A4040008A000000333010101
--->:6147
 
Send:00C0000047
//选择借贷记应用后回送的FCI:6F(FCI模板)+84(DF名)+A5(FCI数据专用模板)+50(应用标签,O)+87(应用优先指示符,O)+9F38(PDOL数据对象列表,O)+5F2D(语言选择,O)+9F11(发卡行代码表索引,O)+9F12(应用优先名称,O)+BF0C(发卡行自定义数据,O)
//IC卡返回:PSE9102
--->:6F45+8408A000000333010101+A539+500A50424F43204445424954+870101+9F38099F7A019F02065F2A02+5F2D027A68+9F110101+9F120A50424F43204445424954+BF0C059F4D020B0A9000
 

2.应用初始化

终端发送到卡的GETPROCESSING OPTIONS命令包括PDOL指定的所有终端数据元。如果卡片支持PDOL,则应用选择时PDOL会被包含在SELECT响应里。如果卡片不允许执行所选择的应用,终端就退出当前应用处理,并返回应用选择过程再选择另一个应用。

//获取处理选项GPO:用来启动IC卡内的交易
//根据9F38(PDOL)的值,来拼装数据,如下:
//9F7A01:电子现金终端支持指示器,00(不支持电子现金处理)
//9F0206:授权金额,000000000001
//5F2A02:货币代码,0156
Send:80A800000B+8309000000000001000156
--->:6114
 
//GPO返回:80(Tag,接触)+应用交互特征(AIP)+应用文件定位器(AFL)
//7C(SDA+DDA+支持持卡人认证+支持终端风险管理+支持发卡行认证)+00
//根据GPO返回的AFL,从卡中读取数据
Send:00C0000014
--->:8012+7C00+08010200+10010401+20010300+280101009000

3.读应用数据

终端通过AFL决定要从卡片中读取哪些交易数据记录,每个AFL项(四个字节)代表了卡片一个文件中的连续记录。对每个AFL项(四个字节),从第1条记录开始,终端依次对每条记录向卡片发送一个读记录(READRECORD)命令读取记录数据,一直到最后一条记录。如此将所有AFL项处理完。读到的交易数据中可以识别的应存储在终端上供交易使用。如果读取到终端无法理解的数据,将其忽略。对于AFL指明要用于脱机数据认证的记录,则将其数据加到脱机认证的数据列表中供脱机数据认证使用。

AFL=08010200+10010401+20010300+28010100
08010200//0101~0102
10010401//0201~0104, SDA:0201
20010300//0401~0103
28010100//0501
//静态认证数据列表 = DGI0201 + TagValue["82"]
SDA_Value =5A0A6230360501000269314F5F3401008E0C000000000000000002031F009F0D05D86004A8009F0E0500109800009F0F05D86804F8005F24032412315F280201569F0702FF005F25031512137C00

4.静态数据认证

终端支持:非对称加密算法和哈希算法;至少支持六组认证中心公钥,公钥长度最大可至1984位;

SDA:验证卡内数据的正确性

DDA:验证卡内数据的正确性及卡的合法性

CDA:将动态数据认证(DDA)和应用密文生成结合起来,提供对卡内数据、卡片本身和交易安全的认证

在一个交易中,最多只执行一种脱机数据认证方法

1)由终端恢复认证中心公钥。

2)由终端恢复发卡行公钥。

3)由终端验证签名的静态应用数据。

金融系列6《借贷记交易流程》第1张

4.1 恢复发卡行公钥

//CA公钥索引 (8F) ——  由终端恢复发卡行的公钥对 CA_E, CA_N
//认证中心公钥指数必须等于3或2^16+1
CA_E = 03
//认证中心公钥模
CA_N =EB374DFC5A96B71D2863875EDA2EAFB96B1B439D3ECE0B1826A2672EEEFA7990286776F8BD989A15141A75C384DFC14FEF9243AAB32707659BE9E4797A247C2F0B6D99372F384AF62FE23BC54BCDC57A9ACD1D5585C303F201EF4E8B806AFB809DB1A3DB1CD112AC884F164A67B99C7D6E5A8A6DF1D3CAE6D7ED3D5BE725B2DE4ADE23FA679BF4EB15A93D8A6E29C7FFA1A70DE2E54F593D908A3BF9EBBD760BBFDC8DB8B54497E6C5BE0E4A4DAC29E5
 
//发卡行公钥证书(90)
CA_I =BED0C8FBB87D9ACDA831A02211E67ECC25BFEAD3D39FE625722CAC62BD1C35DC8D736B9096F2038B98A061372390B853FCC2A3CF63A87C8861973ECFFA3E3312E40092FA9B0F7909FE18B9E1F199E029436FCD1ABC8A9D310AFF63470AD3A454A7CBC2150E97C516001157D95B51CE72CFB01E3EC443F62C4A76C5CAB5D6E04738DDC3273939BCD556DEA6A9D8DBE4D534D504FB980146A3C58271BB883ECA0D077E0119D3193DE2E70D47D4128B21EB
 
//终端恢复发卡行公钥
//CA_O = DeRSA(CA_N, CA_E, CA_I)
CA_O =6A02623036FF12300009870101B001D5C5C2BFE845E14E75681F83973E1E4F9543E7FCCA49D13D82E35CD2F5B6CBDC5005CA3A7B8E92B52443AECE23C2D1BB57F76D43D0D9A339AFB4BE186CB82515EDCD9B6278BF42B31083944FC524412580680824E0A0F2FC5F41A969FC0F19B67F9054D41FF0D7D0600C8E1E51AA80B4EDBEA34411403B497A3D4C2E47BB77442F584ABF26D618B28374543D84182929FB4D1C5D5E92597CE8DB56D552F2E4F3BC
 
//组织摘要输入信息 + 发卡行公钥余项(如果有) + 发卡行公钥指数
//HashValueInfo = CA_O.Mid(2, CA_O.GetLength()- 42 - 2) + TagValue[_T("92")] + TagValue[_T("9F32")];
//HashV = SHA1(HashValueInfo)
HashV =84182929FB4D1C5D5E92597CE8DB56D552F2E4F3
[√]  发卡行公钥证书摘要信息比对结果一致..

字段名

长度

描述

格式

恢复数据头

1

十六进制,值为‘6A’

b

证书格式

1

十六进制,值为‘02’

b

发卡行标识

4

主账号最左面的3-8个数字(在右边补上十六进制数‘F’)

cn8

证书失效日期

2

MMYY,在此日期后,这张证书无效

n4

证书序列号

3

由认证中心分配给这张证书的,唯一的二进制数

b

哈希算法标识

1

标识用于在数字签名方案中产生哈希结果的哈希算法

b

发卡行公钥算法标识

1

标识使用在发卡行公钥上的数字签名算法

b

发卡行公钥长度

1

标识发卡行公钥的模的字节长度

b

发卡行公钥指数长度

1

标识发卡行公钥指数的字节长度

b

发卡行公钥或发卡行公钥的最左边字节

NCA-36

如果NI ≤NCA–36,这个字段包含了在右边补上了

NCA–36–NI个值为‘BB’的字节的整个发卡行公钥。

如果NI>NCA-36,这个字段包含了发卡行公钥最高位的

N CA–36个字节

b

注意:终端恢复发卡行公钥中发卡行标识必须正确, 证书失效日期必须大于5F24的值。

4.2 恢复签名静态应用数据

//发卡行公钥指数(9F32)必须等于3或2^16+1
_CA_E = 03
 
//发卡行公钥模 = 发卡行公钥的最左边字节 + 发卡行公钥的余项(如果有)
//_CA_N = CA_O.Mid(30, CA_N.GetLength() - 72) +TagValue[_T("92")];
_CA_N =D5C5C2BFE845E14E75681F83973E1E4F9543E7FCCA49D13D82E35CD2F5B6CBDC5005CA3A7B8E92B52443AECE23C2D1BB57F76D43D0D9A339AFB4BE186CB82515EDCD9B6278BF42B31083944FC524412580680824E0A0F2FC5F41A969FC0F19B67F9054D41FF0D7D0600C8E1E51AA80B4EDBEA34411403B497A3D4C2E47BB77442F584ABF26D618B28374543D776CA628A371A4E09CE3C1FB1B49852381E38B167A69E44866421CC66B55D5727A916D65
 
//签名的静态数据(93)
_CA_I =6B4EC2C144B1A46D42608253C157A53008D9626D70EB593294271ADF5BE8B76A57D38C82DD9B2BBBD02C6C91C046C80818D6A606ADC1FC6E2989BE0AB2CFCEE89B62EC7F132B5AFBFC65D46A7A26FD1A49586158F640169985C5BB74975585BCFC38CEFB63CB9D25EEFB3D067F418FB0C225BC86702732153FBD36FF2CE8A51F8B0116B45DE91FD5B68861383033D99FAB9B235C5D0EB2CDE256E23040FBC4ECF2EEB765192AEEAE011AE022241EFB8E
 
//恢复签名静态应用数据
//_CA_O = DeRSA(_CA_N, _CA_E, _CA_I);
_CA_O = 6A03016230BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB286C6208DA7D7B7659DF24FA3129490FCDAE43EDBC
 
//数据验证代码(9F45),由发卡行分配的代码
TagValue["9F45"] = 6230
 
//BB = ('B', CA_N.GetLength() - 52);
//HashValueInfo = _CA_O.Mid(2, 8) + BB +SDA_Value;
//HashV = SHA1(HashValueInfo);同一张卡相同
HashV =286C6208DA7D7B7659DF24FA3129490FCDAE43ED
[√]  静态签名数据Hash值比对一致......

字段名

长度

描述

格式

恢复数据头

1

十六进制,值为‘6A’

b

签名数据格式

1

十六进制,值为‘03’

b

哈希算法标识

1

标识用于在数字签名方案中产生哈希结果的哈希算法

b

数据验证代码

2

由发卡行分配的代码

b

填充字节

NI–26

填充字节由NI–26个值为‘BB’的字节组成

b

哈希结果

20

需认证的静态应用数据的哈希值

b

恢复数据结尾

1

十六进制,值为‘BC’

b

注意:如果静态数据认证标签列表存在,并且其包含非‘82’的标签,那么静态数据认证失败。

文/yanxin8原创,获取更多信息请访问http://yanxin8.com/441.html


C++EMVEP/EDJavascriptMFCMIFAREnoteCardPBOCphpQPBOCWordPresswp插件创意发明发现小众软件常识教程旗舰版智能卡注册码游记社保算法美文职场金融面试题地图


免责声明:文章转载自《金融系列6《借贷记交易流程》》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[InstallShield]如何在不同的Script文件之间共享全局变量利用分支限界法求解单源最短路(Dijkstra)问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java加解密算法--常见加解密算法

什么是加密算法?百度百科给出的解释如下: 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。 简单来说,就是把某一段数据(明文),按照...

fingerprint2 计算浏览器指纹分析

介绍 浏览器指纹简单来说就是获取浏览器一些具有辨识度的信息,计算得到的值,以此指纹信息可以对应此用户。辨识度的信息可以是 UA、时区、地理位置或者是你使用的语言等其他的参数,信息越多并且信息的区别度越大,越能决定浏览器指纹的准确性。 直接使用 fingerprint2 库 <script src="https://cdnjs.cloudflare.c...

GDB下查看内存命令(x命令)

http://blog.csdn.net/allenlinrui/article/details/5964046 可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示: x/<n/f/u> <addr> n、f、u是可选的参数。 n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个...

2、k8s api访问-token、RBAC、证书

1、token方式使用k8s restful api思维导图 https://liumiaocn.blog.csdn.net/article/details/100518110 token方式使用k8s restful api思维导图 2、apiserver认证 2.1、Kubernetes apiserver认证 Kubernetes apiserve...

一致性hash算法

一致性哈希算法的应用 一致性哈希算法在分布式缓存领域的 MemCached,负载均衡领域的 Nginx 以及各类 RPC 框架中都有广泛的应用 一致性哈希算法解决的问题 普通的哈希表算法一般都是计算出哈希值后,通过取余操作将 key 值映射到不同的服务器上但是当服务器数量发生变化时,取余操作的除数就会发生变化,所有 key 所映射的服务器几乎都会改变,这对...

PKI/CA工作原理及架构

https://www.jianshu.com/p/c65fa3af1c01 相关概念 PKI:Public Key Infrastructure,公钥基础设施。 CA:Certificate Of Authority,认证中心。 数字证书:提供了一种发布公钥的简便途径; 一个数字证书包括:拥有者身份信息、公钥、CA数字签名、有效期等其他信息。 数字...