您的位置:首页 > 其它

EMV技术学习和研究-脱机数据认证之DDA

2015-04-08 08:50 323 查看
有了前面对SDA的熟悉,接下来再研究DDA就会感觉比较轻松一点了。

用于动态数据认证的数据和SDA部分所描述的一样,也是基于SFI的来组织的。

特别说明一下:之前有一个地方一直是我理解上的一个误区,特地说明出来和大家分享一下,关于9F4A静态数据认证标签列表这个要素,从字面意思看应该是只有在SDA时才会有用,但是实际情况不是,虽然这个要素起了这么一个名字,但是在DDA当中也是会存在的,而DDA中主要用这个来做发卡行公钥恢复和IC卡公钥恢复,所以这个标签的作用主要是用来组建一组静态数据用于脱机数据认证。切不要以为因为它的名字叫做“静态数据认证标签列表”而忽略了在DDA中的应用。

DDA和SDA一样,首先需要恢复出发卡行公钥,这个和SDA的步骤一样,就不讨论了。

恢复出发卡行公钥后,DDA中还需要恢复IC卡公钥,这个步骤中,和恢复发卡行公钥类似, 恢复出IC卡公钥以后也需要利用恢复后得到的数据再加上用于脱机数据认证的数据(SFI那边获得的)进行HASH值的计算,计算结果与恢复出的结果一致,则恢复出的IC卡公钥合法可用。

前面的内容SDA和DDA大同小异,没什么差别,但是DDA从恢复完IC卡公钥后和SDA就有很大区别了,下面我们一步一步讨论。

第一步,动态签名的生成

读记录的时候,需要一个关键数据DDOL(9F49),这个数据是卡片告诉终端(如果卡片没有返回,终端也需要有默认值,如果都没有则交易终止;如果DDOL中不含有9F37不可预知数,则交易终止)卡片需要终端的哪些数据来做动态签名。

终端组织好DDOL的数据之后,通过内部认证命令将数据提供给卡片,卡片会返回签名后的动态数据。

举个例子

[html] view
plaincopy

send:10

00 88 00 00 04 55 7B D7 85 00

rec:150

80 81 90 4D 68 4E EC 02 08 57 2A FA 62 66 79

11 9E 79 39 07 87 09 AE D6 C5 B4 21 23 88 5E 93

B1 BE A8 C0 73 75 35 0C B9 21 78 00 EF 58 5B 25

D4 E9 56 A8 D4 63 F7 C3 8B C1 4A 62 1E 77 C5 2C

0B 85 09 B0 FA 46 21 3C C5 A0 BC A6 F1 D7 04 F4

83 78 27 FF 66 DD 7A AF 56 69 B3 7A 07 89 0E 2A

AF 4E E2 92 52 D4 26 F6 02 8D DC 10 1C 7B 06 04

F7 12 02 41 40 FC 0F 2A 48 BF A5 D6 2A 43 AF D6

3C C0 3B 3E 3B 05 BA F4 E0 2D 65 2F D4 C5 CC E7

B5 D2 7D D5 90 00

[html] view
plaincopy

特别说明:之前有一位入行有几年的哥们问我一个问题,为什么卡片返回数据的TLV中T是80,L应该是90,为什么多了一个81?

[html] view
plaincopy

其实建议大家了解下什么叫做EMV规范的TLV格式,并不仅仅是一个T+L+V,对于T和L都有一个规范来约束。

这个实例中DDOL只有一个数据不可预知数,所以内部认证指令,只是传送了四个字节55 7B D7 85。

卡片返回的数据时签名后的动态认证数据(tag为80时和tag为77时不一样的处理,与GPO是返回数据的处理类似),需要终端再利用IC卡公钥进行还原。还原后的数据中会有HASH。

然后终端利用还原后得到的数据,再加上DDOL构成一个规范要求的数据串,然后在做SHA1运算获得HASH值,对比

卡片返回的hash值和终端计算的是否一致,如果一致,证明DDA成功,再将HASH值保存到9F4C,则DDA已经结束了。

从分析来看,DDA其实是包含了SDA的过程,并且有了内部认证的处理,使得其安全性大于SDA,所以现在目前国内发行的卡基本上都是采用DDA作为脱机数据认证方式。

外面下大雨,没心情睡觉,就多写点闲话了,没时间的朋友,可以不用往下看了。

其实EMV和PBOC的东西并没有那么复杂,很多时候可能很多人并没有沉下心来去仔细看,我可能比较幸运,有机会从事相关开发,并且之前和现在也有一批优秀的同事,能够相互交流,互相沟通,所以目前对EMV和PBOC也算是比较熟悉,希望不懂EMV和PBOC的朋友,能够耐住性子慢慢看,多看几遍规范,再试着分析每一步的数据,就能够明白了。

比如恢复发卡行公钥这个处理,只要emv内核允许,可以增加更多的调试信息,几乎可以把每一个步骤数据的变化都分析出来,再看看文档就可以对整个流程了如指掌。我本来想把之前我积累的一些数据分享给大家,后来考虑到因为保密,所以还是取消了这个想法,毕竟通过数据可以看出代码的优劣和流程。后续,有时间我会重新一套EMV内核程序,有机会取到数据可以分享给大家。

作者:小旭
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: