EMV技术学习和研究-脱机数据认证之DDA
来源:互联网 发布:安卓数独源码 编辑:程序博客网 时间:2024/05/02 16:49
有了前面对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的数据之后,通过内部认证命令将数据提供给卡片,卡片会返回签名后的动态数据。
举个例子
- 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
- 特别说明:之前有一位入行有几年的哥们问我一个问题,为什么卡片返回数据的TLV中T是80,L应该是90,为什么多了一个81?
- 其实建议大家了解下什么叫做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内核程序,有机会取到数据可以分享给大家。
作者:小旭
- EMV技术学习和研究-脱机数据认证之DDA
- EMV技术学习和研究(五)脱机数据认证之DDA
- EMV技术学习和研究-脱机数据认证之SDA
- EMV技术学习和研究(四)脱机数据认证之SDA
- PBOC/EMV之DDA(动态数据认证)
- PBOC/EMV之DDA(动态数据认证)
- EMV技术学习和研究(十三)CDA认证
- PBOC2.0 脱机数据认证SDA和DDA
- EMV技术学习和研究
- PBOC/EMV之静态数据认证(SDA)与动态数据认证(DDA)
- PBOC/EMV之静态数据认证(SDA)与动态数据认证(DDA)
- PBOC/EMV之静态数据认证(SDA)与动态数据认证(DDA)
- PBOC/EMV之静态数据认证(SDA)与动态数据认证(DDA)
- PBOC/EMV之静态数据认证(SDA)与动态数据认证(DDA)
- PBOC2.0安全系列之—脱机认证之动态数据认证(DDA)
- EMV技术学习和研究-处理限制
- EMV技术学习和研究-持卡人验证
- EMV规范(五)——脱机数据认证
- 第五周项目二之对象作为数据成员
- sencha延迟加载速度(1)
- 狂省两行代码
- [省选前题目整理][POJ 3461]Oulipo(KMP)
- Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭
- EMV技术学习和研究-脱机数据认证之DDA
- 公钥和私钥
- 算法学习笔记 二叉树和图遍历—深搜 DFS 与广搜 BFS
- vsftpd服务器的安装与详解
- sencha延迟加载速度(2)
- 第五周项目:体验常成员函数
- (R语言)简单操作,数值与向量
- EMV技术学习和研究-处理限制
- 第五周 项目2-对象作为数据成员