转载请注明出处
http://blog.csdn.net/pony_maggie/article/details/7436084
作者:小马
CDA其实是DDA的衍生方法. 所以它和DDA有很多相同的地方. 先简要说明一下CDA的几个要点:
1 它也执行SDA,这个和DDA是一致的.
2 它也执行DDA,更先进的技术总是向下兼容的.
3 它也用到签名的动态应用数据, 不过这个数据不是内部认证请求的,而是在GAC时终端请求的. 而且这个数据的组成除了一些和DDA相似的组成(DOL数据),还包括密文数据(TC或ARQC).
4 既然签名的动态数据多了卡片的密文数据,那最后的验证阶段也比DDA多了一些步骤,CDA还需要比较应用密文.
下面是详细的步骤:
第一步,取IC卡公钥
这个和DDA的方法是一样的,不再说明.
第二步,取签名的动态数据
通过GAC返回,当IC卡返回非AAC类型的密文时, 如果终端请求CDA,IC卡会返回这个签名的数据.
这个签名数据的产生也比DDA稍复杂一些,其实是原理是一样的,只不过需要参与签名的数据项增加了,也即用于产生哈希结果的数据项增加了. 如果是在第一次GAC产生CDA签名,那么参与运算的数据项包括PDOL中的数据,CDOL1的数据以及其它(比如数据头,长度等), 如果是在第二次GAC产生CDA签名,那么还要加上CDOL2中指定的数据项.
第三步,验证数据
前面说到了,最后一步数据的验证较DDA是多了一个应用密文的比较, 终端首先将将恢复的密文数据和GAC返回的密文数据比较. 如果不等,CDA就失败.
剩下的步骤和DDA是一样的.
既然CDA和DDA有很多机同的地方,那么它存在的意义在哪呢? 我说说自己的理解.
CDA和DDA的区别, 核心就在于CDA对卡片行为分析产生的应用密文做了一层加密保护,确保密文是来自于合法的卡片. 这个有点像我们在ATM上取钱时,输入的密码,经过加密后再传到银行的服务器. 银行的服务器解密后再验证密码的正确性.这样更安全了.
另外一点,CDA参与哈希运算的数据项增加了, 就表示这种认证机制更加严格了, 比如我就遇到过因为终端国家代码的值设置错误导致CDA失败的情况.
根据信息安全行业发展的规律来推测, CDA应该会慢慢淘汰SDA和DDA成为主流甚至是强制要求. 当然以后也可能会产生新的更加安全的数据认证机制.