PBOC流程解析(三) 脱机数据认证

POS规范 -- IC卡操作流程 2016/09/09

脱机数据认证在特定条件下是可选的

(一)文档说明

以动态数据认证DDA举例:处理流程如下

描述如下:

(二)资料解析

实际数据举例

已得到数据: AIP:7C00(采用DDA认证) IC卡公钥证书 及发卡行证书(查阅上一篇帖子查看具体数据)

根据AID(4F)及PKI(8F)来选择终端里面已经存在的(通过IC卡参数下载得到)认证中心公钥列表。

1)上面我们选定到

B0627DEE87864F9C18C13B9A1F025448BF13C58380C91F4CEBA9F9BCB214FF8414E9B59D6ABA10F941C7331768F47B2127907D857FA39AAF8CE02045DD01619D689EE731C551159BE7EB2D51A372FF56B556E5CB2FDE36E23073A44CA215D6C26CA68847B388E39520E0026E62294B557D6470440CA0AEFC9438C923AEC9B2098D6D3A1AF5E8B1DE36F4B53040109D89B77CAFAF70C26C601ABDF59EEC0FDC8A99089140CD2E817E335175B03B7AA33D

2)用CA公钥解发卡行公钥证书得

6A02621758FF12240016620101B001EAF41933A1D4BC378288BE52C8FB858CE76594976019DD24CF805D8FCA407EADB05A500E33043DC0837440689155B3D29DC86323BB623D16761FC650E70A2BDA90D9762FAA3082FADD0BE9460A25B4DE28B9ADF0E728C9528D5A99C5F6CA8EA0B94EA75FE0BAD9A8F7AD8A06271B5516122319411777FE93F617B8CACDD6CE1AC1E08DF5E3C0F556ABA373E2D4F1BDC87858C8F47CDD300570CB265D48E9C70BBC

分析下发卡行公钥证书如下:

(第七部分)表6  从发卡行公钥证书恢复数据的格式 
字段名  			长度  			描述  	                    格式 
恢复数据头  		1  			十六进制,值为‘6A’  b 
证书格式			1			十六进制,值为‘02’  b 
发卡行标识  		4 			主账号最左面的3-8个数字(在右边补上十六进制数‘F’) cn8 
证书失效日期		2			MMYY,在此日期后,这张证书无效  n4 
证书序列号  		3			由认证中心分配给这张证书的,唯一的二进制数  b 
哈希算法标识  		1  			标识用于在数字签名方案中产生哈希结果的哈希算法 b 
发卡行公钥算法标识	1  			标识使用在发卡行公钥上的数字签名算法  b 
发卡行公钥长度 		1  			标识发卡行公钥的模的字节长度  b 

分解如下:
6A  		恢复数据头
02    		证书格式  值为‘02’
621758FF	发卡行标示    4个字节
1224    	证书失效日期
001662		证书序列号
01		哈希算法标示
01    		发卡行公钥算法标示
B0    		发卡行公钥长度
01    		发卡行公钥指数长度
EAF41933A1D4BC378288BE52C8FB858CE76594976019DD24CF805D8FCA407EADB05A500E33043DC0837440689155B3D29DC86323BB623D16761FC650E70A2BDA90D9762FAA3082FADD0BE9460A25B4DE28B9ADF0E728C9528D5A99C5F6CA8EA0B94EA75FE0BAD9A8F7AD8A06271B5516122319411777FE93F617B8CACDD6CE1AC1E08DF5E3C0F556ABA373E2 
D4F1BDC87858C8F47CDD300570CB265D48E9C70B   //哈希值
BC   		恢复数据结尾

上面我们只得到发卡行公钥前面的140个字节(总长度是B0(176)减去公钥余数长度36个字节得到前面140个字节) 我们组合一下得到完整的发卡行公钥为

EAF41933A1D4BC378288BE52C8FB858CE76594976019DD24CF805D8FCA407EADB05A500E33043DC0837440689155B3D29DC86323BB623D16761FC650E70A2BDA90D9762FAA3082FADD0BE9460A25B4DE28B9ADF0E728C9528D5A99C5F6CA8EA0B94EA75FE0BAD9A8F7AD8A06271B5516122319411777FE93F617B8CACDD6CE1AC1E08DF5E3C0F556ABA373E2
+(92标签 公钥余数)20CF86C702825B7A3DD811C5F0F61D6EED533458FEFE81C931AB58910BE9A2033E85C191
结果为:EAF41933A1D4BC378288BE52C8FB858CE76594976019DD24CF805D8FCA407EADB05A500E33043DC0837440689155B3D29DC86323BB623D16761FC650E70A2BDA90D9762FAA3082FADD0BE9460A25B4DE28B9ADF0E728C9528D5A99C5F6CA8EA0B94EA75FE0BAD9A8F7AD8A06271B5516122319411777FE93F617B8CACDD6CE1AC1E08DF5E3C0F556ABA373E220CF86C702825B7A3DD811C5F0F61D6EED533458FEFE81C931AB58910BE9A2033E85C191

这里还是注意下验证我们是否恢复正确.上面从发卡行公钥证书里面得到 需要校验的哈希值 D4F1BDC87858C8F47CDD300570CB265D48E9C70B

哈希元数据 就是上面`去掉开头跟结束的字节 去掉哈希值   加上公钥余项 加上公钥指数`
02621758FF12240016620101B001EAF41933A1D4BC378288BE52C8FB858CE76594976019DD24CF805D8FCA407EADB05A500E33043DC0837440689155B3D29DC86323BB623D16761FC650E70A2BDA90D9762FAA3082FADD0BE9460A25B4DE28B9ADF0E728C9528D5A99C5F6CA8EA0B94EA75FE0BAD9A8F7AD8A06271B5516122319411777FE93F617B8CACDD6CE1AC1E08DF5E3C0F556ABA373E220CF86C702825B7A3DD811C5F0F61D6EED533458FEFE81C931AB58910BE9A2033E85C19103
得到 D4F1BDC87858C8F47CDD300570CB265D48E9C70B 计算准确

3)用发卡行公钥 恢复IC卡公钥证书得

6A046217587500007634227F1224FCD4D0010180019CE20F9BFDD65612A086B22CD885438EFE114C03540530E461801E603D0135B043B7473BED721CB10F6B6AE52571A4D20D2E60DF6EE866925D6DD2895E7B6C15100FC6B710C037D18DF36FA593DDF92287AF3F0D8071A0A4B04642CB037E8CBAC77540B04CDAC20D1D44D3DDCFCB6873A81FC367A672A80D5B930787396F8C35BBBBBBBBBBBB4B7B34A48E753D37D4602944F7995DED5F9AA0F6BC

解析IC卡公钥证书:

6A
04
6217587500007634227F
1224
FCD4D0
01
01
80
01
9CE20F9BFDD65612A086B22CD885438EFE114C03540530E461801E603D0135B043B7473BED721CB10F6B6AE52571A4D20D2E60DF6EE866925D6DD2895E7B6C15100FC6B710C037D18DF36FA593DDF92287AF3F0D8071A0A4B04642CB037E8CBAC77540B04CDAC20D1D44D3DDCFCB6873A81FC367A672A80D5B930787396F8C35BBBBBBBBBBBB
4B7B34A48E753D37D4602944F7995DED5F9AA0F6  IC卡证书哈希值
BC	
解析: 上面没有取到9F48 IC卡公钥余项
首先得到几个术语: 
NIC 表示 IC卡公钥证书里面的IC卡公钥长度  上面为80=128
NI 是9F46的长度 为176
NCA 是90的长度 也为176
已知:
		如果NIC≤NI–42,这个字段包含了在右边补上了
		NI–42–NIC个值为‘BB’的字节的整个IC卡公钥。
		如果NIC>NI-42,这个字段包含了IC卡公钥最高位的
		NI–42个字节 
得到   128<176-42   那么实际我们的IC卡公钥长度是 174-42=134个字节了  后面补齐BB 也就是补了134-128=6个字节的BB

4)读IC卡公钥余项(9F48标签) 无 5)验证IC卡证书HASH输入项为:

04
6217587500007634227F
1224
FCD4D0
01
01
80
01
9CE20F9BFDD65612A086B22CD885438EFE114C03540530E461801E603D0135B043B7473BED721CB10F6B6AE52571A4D20D2E60DF6EE866925D6DD2895E7B6C15100FC6B710C037D18DF36FA593DDF92287AF3F0D8071A0A4B04642CB037E8CBAC77540B04CDAC20D1D44D3DDCFCB6873A81FC367A672A80D5B930787396F8C35BBBBBBBBBBBB
03
还有需要认证的静态数据 (AFL那里确认出来的)
5F24032411305A0A6217587500007634227F9F0702FF008E0C000000000000000002031F009F0D05D86004A8009F0E0500109800009F0F05D86804F8005F28020156
加上AIP (查看源码分析那里)
7C00
计算校验值为 4B7B34A48E753D37D4602944F7995DED5F9AA0F6 校验成功	

获取动态签名数据:(根据DDOL来组包发送命令)

举例 DDOL(9F49来判断) 其值为9F3704(这里就只要发送4个字节的随机数就行)00 88 00 00 04 719B5D0B 00 接收到报文是`80 8180(128个字节)

7F41264AC1A2188A414C5FBEE602311C6A0E13A567E4A7274AEAAD4CBDE4BDE870909EFB4CF8A51D92CCC646A97A6EE45CB2502635569E6333A2E28CA3A21C9CB4EA55DBAC58FB39966BB5C9D7364C60E3F76D664F0F926527CA8C93F4E2B1024C9A24BCB736BB909C38B9B89E2E5C1CFB4E14727FBF8E4A52492E184BEB609D9000`

用IC卡公钥

9CE20F9BFDD65612A086B22CD885438EFE114C03540530E461801E603D0135B043B7473BED721CB10F6B6AE52571A4D20D2E60DF6EE866925D6DD2895E7B6C15100FC6B710C037D18DF36FA593DDF92287AF3F0D8071A0A4B04642CB037E8CBAC77540B04CDAC20D1D44D3DDCFCB6873A81FC367A672A80D5B930787396F8C35BBBBBBBBBBBB

解密得到

6A
0501030218D7BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
33C24BD7923FE098DF6BA5E2B9F79397838517DB    校验值
BC

6)验证动态数据HASH

表16  需签名的动态应用数据(即哈希算法的输入) 
字段名  长度  描述  格式 
签名的数据格式  1  十六进制,值为‘05’  b 
哈希算法标识  1  标识用于产生交易数据哈希值和数字签名方案中哈希结果的哈希算法 b 
IC卡动态数据长度  1  标识IC卡动态数据的字节长度LDD  b 
IC卡动态数据  LDD  由IC卡生成和/或存储在IC卡上的动态数据  - 
填充字节  NIC–LDD–25  (NIC-LDD–25)个值为‘BB’的填充字节  b 
不可预知数  4  由终端生成的不可预知数  b 

所以输入数据是:
0501030218D7BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
719B5D0B(随机数)
得到哈希值是
33C24BD7923FE098DF6BA5E2B9F79397838517DB
跟返回的一致,校验成功

到这里我们DDA验证就完成了….

(三)源码片段分析

//(规范第7部分)
5)  将表12中的第2个到第10个数据元(即从证书格式直到IC卡公钥或IC卡公钥的最左边字节)从
左到右连接,再把IC卡公钥的余项(如果有)和IC卡公钥指数加在后面,最后是JR/T 0025.5
的9.3.1条指明的需认证的静态数据。如果静态数据认证标签列表存在,并且其包含非“82”的
标签,那么动态数据认证失败。 
if ((ptmp = emvget_appdata(0x9F4A, &len3))) //  "静态数据认证标签列表"; 
{
    /* if Static Data Authentication Tag List is present */
    if (len3 == 1 && *ptmp == 0x82) 
	{
        memcpy(calc + len2, emvget_appdata(0x82, NULL), 2);
        len2 += 2;
    } 
	else 
	{
        gret = SECERR_9F4AERR; goto __greturn;
    }
}

(四)常见问题及分析

1.脱机数据认证是可选的,如果未做脱机数据认证或者认证失败,在终端行为分析时根据卡片返回的 9F0D - 发卡行行为代码跟IC卡参数下载得到的DF13来匹配是否允许继续做交易。



扫描关注我

(转载本站文章请注明作者和出处 Undefined

Post Directory