分类: 嵌入式
2012-12-25 16:15:17
PBOC/EMV里有两个非常重要的概念, SDA(static data authentication)和DDA(dynamic data authentication),分别叫做静态数据认证和动态数据认证. 这两个认证都是脱机下(off-line)的认证. 业内人都知道磁卡和IC卡迁移的一个很重要的原因就是安全问题.
举两个磁卡犯罪的例子:
1 磁卡本身的构造原理使得它的数据非常容易被非法修改, 你肯定不愿意有人非法修改你卡上的数据, 当然如果是在你的余额后面加几个0就另当别论了.
2 相信下面要举的这个例子, 很多人都听过: 犯罪分子要用两个设备, 读卡器和针孔摄像机. 他们把读卡器与银行原来的读卡器固定一起,插卡口对齐, 当我们取钱时把卡插进去时, 我们的卡上的信息就被他们的读卡器读出, 然后他们用一张空白的卡就可以把我们的卡复制出来. 针孔摄影机的作用就是当我们取钱时窃取我们的密码. 卡有了, 密码也有了,剩下的步骤就是取钱了.
SDA可以解决上述第一个问题, 它实现的原理是数字签名. 简单的说, 过程如下: IC卡的里的数据先签个名, 怎么签名呢? 当然不是用笔直接上面写个名字. 它的做法是用Hash为这些数据生成一个简短表示做为该数据的摘要, 然后,把这个摘要加密,得到一个"签名". 再把数据和加密后的签名发给终端. 终端在这一头先把收到的数据Hash,得到一个签名, 然后再把收到的加密签名解密,又得到一个签名, 比较两个签名,就可以知道数据有没有被修改过,如果数据被修改过, 两个签名是不同的. 验证不会通过.
DDA除了具有SDA的功能外,它最强大的地方就是解决上述第二种犯罪. 它实现的原理如下: 与SDA相比, 它的签名是动态的. SDA的签名在卡发行时就定好的, 它加密所用的私钥是发卡行的私钥(如果你不理解私钥和公钥的概念, 建议先看一下密码学的相关知识). 而DDA每次用来的签名的数据是当前交易中的一些动态数据, 签名加密所用的私钥是IC卡私钥, 这个私钥贮存在IC卡的一个安全区域里(这个很重要). 终端这一头有与之相对应的用来解密的公钥. 那么怎么实现防复制呢?
举个例子说, 张三的卡被李四复制了一张, 李四拿着这张卡去取钱. 在交易时,IC卡会生成一个动态的签名给终端确认, 关键的地方就在这里, 这个动态的签名需要一个私钥来加密, 而这个IC卡私钥贮存在IC卡里的安全区域里,李四不可能知道, 李四随便选一个私钥来加密签名, 所以在终端这一头的验证肯定是通不过的,因为公钥和私钥已经不对应了. 那么交易肯定会被强制中止, 张三卡里的钱也就不会被李四取走.
DDA实在是太强大了, 可以想像如果以后我们用的***全部都是有DDA功能的IC卡, 将极大减少金融犯罪. Visa和master 公司已经宣布2011年之后, 欧洲所有银行发行的具有脱机功能的IC卡都要使用DDA