"); //-->
IC卡应用中的安全设计考虑
目前IC卡已经在很多系统中普遍存在了,而且作为基本的安全信息载体,在系统中承担认证的作用,比如访问控制、网络认证、身份识别、电子支付等。
由于目前IC卡的种类繁多,虽然从严格的意义上讲只有具备CPU的IC卡才能算做真正的智能卡,但是由于行业应用的习惯性称呼多数的IC卡也多被叫做智能卡。在这里我们可以从已有的卡片种类来考虑具体怎么进行系统的安全设计。
一般的存储卡
对于一般的存储卡,因为没有任何密码的控制,只要了解通讯协议就可以自由读写,所以在系统设计时可以按照磁卡的安全机制来考虑。这样的系统更多地应该进行联机交易。并且每次交易后需要在对卡片的数据标记时间戳,而且需要进行联机密码校验,这样可以最大限度地满足系统的安全性需求。但是往往这样做的结果是整个系统变得非常复杂,IC卡的优势几乎没有体现出来,除非需要卡片本身存储大量的数据才会选择这种不加密的存储卡,不然的话还不如直接使用磁卡来得简单便宜。
逻辑加密卡
在一些低端的应用中最广泛的就是这种逻辑加密卡,一般来说逻辑加密卡由读写密码控制卡片数据的访问,有些卡片只有控制数据改写的密码,数据的读出是自由的。这种卡片的密码校验方式多数是明文的,也就是说,如果想要破解密码的话,在具备条件的情况下,通过线路监听就能够获得卡片的密码。所谓的线路监听是指通过示波器或者某些专用设备捕获读卡器和卡片之间的数据传输。所以这种卡片的安全性非常有限。目前多数的超市购物卡、食堂售饭卡、会员卡、门禁卡都是逻辑加密卡。包括很多城市的公共交通卡,即Mifare也是逻辑加密卡的一种,不过Mifare的密码验证方式更为复杂。
如果系统中使用了逻辑加密卡,就要保证卡片的应用环节不会出现被恶意监听的漏洞。同时要确保一卡一密,即每张卡片的密码不一样,这样才能更好地保证整个系统的安全,即便是某张卡片的密码被破译了,也不会危及整个系统。这说起来容易,但是真正做起来则需要在系统设计初期针对卡片发行、卡片应用、卡片风险管理等环节进行认证考虑。有些卡片的密码只有几个字节,比如最为流行的4442,所以想要保证每张卡片的密码都不一样的确需要认真考虑密码的分散模式。如果分散模式太过复杂,对于系统而言增加的也是成本开销,但是如果太简单容易造成安全隐患,同样也会带来损失。所以安全和复杂性之间的平衡点往往根据系统的不同而变化,始终牢记“任何安全都是相对的”。
同样在使用逻辑加密卡的系统中,也需要后台的辅助监督功能,比如黑名单的管理和更新、卡片异动的监控等,这样可以及早发现问题,避免对整个系统造成安全威胁。
CPU卡
因为CPU卡本身具有处理器,所以作为真正意义的智能卡,CPU卡的安全性明显高于逻辑加密卡。而且目前还有支持RSA以及生物识别功能的CPU卡,因此CPU卡的安全性得到了更大的提高。
在CPU卡中数据的安全一般都是通过密码验证、外部认证、MAC加密的方式实现的。密码验证和逻辑加密卡类似,多数情况下每次认证的密码都是相同的(也有密码动态加密认证的方式);外部认证则是利用Challenge Response 的方式每次认证的数据都是不同的;而MAC加密的方式则是保证数据的保密性和完整性。
在有些系统中,用户为了自己的安全要求设定了很多组密钥,不同组的密钥分别控制不同文件的读写。这样看起来貌似安全,用户也很得意自己的设计,觉得从安全的方面考虑了很多,几乎做到完美无缺。殊不知大多数的情况只是徒然增加产品的复杂性,并没有真正改善系统的安全。为什么?其实这时系统的安全主要受控于SAM卡以及后台的安全和用户卡发行系统的安全,和具体是否使用不同的密钥控制不同的文件关系很小。如果所有的这些不同的密钥都存储在一张SAM卡上,那么和用一个密钥控制所有的文件,效果完全一样。除非考虑不同的网点会布置不同的SAM卡,而不同的SAM卡会操作不同的文件,那么这种采取不同密钥控制不同文件的模式才有意义。现实情况往往是这些不同的密钥都安装在一张SAM卡上,然后每个网点的终端都安装这张SAM卡。
CPU卡的密码验证是最常见的安全认证方式之一,持卡人在终端输入密码,再由终端把密码打包成APDU传递给卡片,卡片根据密码的正确与否返回成功或者失败的标志。如果是明文密码验证,还是可以通过线路监听的方式截获密码的。稍微高级一点的是密码的动态加密认证,不仅实现了线路保护,而且每次终端和卡片传输的命令都不一样。
对于外部认证而言,终端先向卡片获取随机数,然后再根据卡片中存储的密钥对取出的随机数加密,再把加密后的数据送回卡片比较,卡片根据比较的结果决定终端是否具备某些权限。终端对随机数的加密可以通过嵌入在终端中的SAM卡完成(脱机方式),也可以直接向后台系统申请(联机方式)。
MAC加密方式之为了保证数据的完整性,在终端准备更新卡片数据时,先对整个命令计算一个类似于签名的MAC值,卡片收到命令后会判断MAC值是否正确,从而保证终端发来的数据是完整的,没有被篡改的。一般情况下会采取明文加MAC的方式,也有密文加MAC的情况。
外部认证和MAC一般都是基于DES或者3DES算法的,而支持RSA这样公钥算法的卡片,会采用证书、签名、RSA密文的方式进行卡片的认证。
对于CPU卡而言不应该因为卡片本身已经具备了一定的安全性,就完全依赖卡片而忽略系统的安全。针对一般存储卡和逻辑加密卡的系统安全措施同样可以用到CPU卡的系统中,还是那句话“安全是相对的”。
有些时候某些应用系统中使用的CPU卡具有足够的安全级别,甚至达到EAL5+的程度。但是系统本身却脆弱地不堪一击,其实,这种做法实在是舍本求末。设想即便把卡片的安全性,数据读写的权限设计的极其复杂,但是在终端和后台系统中却采用明文传输,忽视数据安全,最终同样会导致整个系统被攻破。而这恰恰是国内一些系统设计的现状。甚至包括一些网银系统,这就是为什么看起来很高级很安全的“网银盾”却防范不了网银风险的根本原因所在。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。