智能卡的互联互通是一个老话题了,zui近因为举办了城市一卡通全国互联互通的会议而再次被媒体广泛提起。对于一卡通是否有必要实现全国互联互通,能否真正实现互联互通以及该以什么样的方式来互联互通,在此不作评论。仅就互联互通涉及到的一些密钥方面的内容进行一个简单的概括。
智能卡的关键功能就是利用其具备的数据加解密和数据的安全存储能力,来实现卡片和终端(后台)之间的身份认证,并建立一个安全的通道,便于数据交互,以完成各种应用所定义的交易流程。
另外,所谓的互联互通多指脱机交易,可以是跨地区的互联互通,也可以是跨行业的互联互通。对于联机交易原则上任何时候都可以通过网络连接到发卡主体的后台,不受地域影响,也就不存在互联互通的问题。
对称密钥及其分散
对于对称密钥来说,加密和解密的密钥是相同的。也就是说要想操作智能卡,利用智能卡实现某些交易,那么外界的终端或者后台必须清楚地知道智能卡里面存储的密钥是什么。当然zui简单的方式就是大家都使用相同的密钥,每张卡片、每个终端、每个后台都用这个密钥,各种交易就能够顺利完成。问题是这样做存在风险,只要任何一张卡片的密钥被破解整个系统就垮掉了。于是有了“一卡一密”的概念,也就是每张卡片的密钥各不相同,这样的话为了保证正常交易,后台或者终端就必须把所有卡片的密钥都存储在自己的数据库中。对于实际系统而言,这既不现实也不安全,所以需要进行密钥分散。
密钥分散的原则就是首先要生成一个主密钥,每张卡片的密钥都是利用卡片自身的*信息(比如卡号或者卡号再加上地区行业的编码等)和主密钥进行运算,zui后生成新的密钥,这个新密钥有两个特点:1)每张卡片的密钥各不相同,确保一卡一密;2)和卡片的*信息具有相关性,换句话说可以通过卡片的*信息结合主密钥推导出卡片里存储的密钥。这样只要终端或者后台知道这个主密钥,就能够通过卡片的*信息推导出每张卡片的密钥了,在脱机交易终端中这个主密钥通过SAM卡来保存,在后台也可以通过加密机来保存。
实际上如果全国各地的终端和后台系统都存储这个主密钥,而全国各地发行的卡片都是依据这个主密钥进行分散的,那么自然就是全国互联互通了。当然其中还涉及到后台的结算处理密钥的多级分散等,实际情况会复杂得多,但是如果单纯从对称密钥角度看,互联互通不过如此。
非对称密钥的互联互通
上面提到的对称密钥体系中整个系统的安全全都寄托在主密钥上,所以对于SAM卡的发行和管理也必须有严格的流程来控制。
非对称密钥算法中加密和解密使用的是不同的密钥,其中一个可以公开称作公钥,另一个必须保密称作私钥。这种非对称密钥算法的特点就是:1)公钥和私钥是严格配对出现的,不同的公钥一定对应着不同的私钥,反之亦然。并且不能根据公钥推导出私钥;2)所有知道公钥的人都可以对数据进行加密,但是加密后的信息只有拥有私钥的人才能解密;3)所有用公钥能够正确解密的信息,一定是来自私钥的拥有者,具有抗抵赖属性,私钥加密后的信息等同于私钥拥有者的签名(所以把私钥的加密过程也叫做“签名”,把公钥的解密过程也叫做“验签”)。
如果智能卡采用的是非对称密钥体系,卡片、终端、后台不需要一个统一的主密钥来推导每张卡片的密钥,每张卡片可以有自己的公私钥对,并且把各自的公钥数据公开给参与交易的各方即可完成正常的交易流程。为了保证交易的顺利进行,必须确保参与交易过程的各方所出示的公钥是真实有效的。于是需要一个机构(CA)来负责给这些参与方的公钥出具“盖章”的证明,也就是生成一个经过签名的公钥证书。这个签名是由机构的私钥来完成的,大家通过它的公钥能够验证签名的真伪,从而也验证了这些被签名的公钥的真伪,于是就能够保证后续身份认证的顺利进行。前提是大家都信任这个机构,对机构公钥的真实性不存异议。
那么要实现互联互通,只要卡片、终端、后台分别存储机构的公钥以及各自的公钥证书(对应的私钥是各自秘密存储的),并且各自的公钥证书必须经过机构的私钥来签名。在进行敏感信息交互之前,先读出彼此的公钥证书,并验证签名,然后就可以建立起彼此可信的安全数据通道,完成相关交易流程。虽然实际情况并没有这么简单,但是基本原理就是这些。
后记
简而言之,对于目前的城市一卡通或者社保卡而言,如果各个城市都是根据全国统一的密钥进行的SAM卡发行和用户卡密钥分散的,毫无疑问可以直接实现互联互通。如果A、B两个城市各自根据自己自定义的主密钥来发行SAM卡和分散用户卡密钥,要想实现二者的互联互通则需要它们在各自的终端里安装对方的SAM卡。