今年年初以来,一个消息的传出震惊了整个IC卡行业。最近,德国和美国的研究人员成功地破解了NXP的Mifare1芯片的安全算法。Mifare1芯片主要用于门禁系统访问控制卡,以及一些小额支付卡,应用范围已覆盖全球。因此这项“成果”引起了不小的恐慌,因为一个掌握该破解技术的小偷可以克隆任何一个门禁卡,从而自由进出政府机关大楼或公司办公室;可以批量的克隆或伪造各种储值卡大肆购物而不被发现。国内发行的这种卡,估计有几亿张在投入使用,它的安全性涉及到众多的运营单位和持卡人的利益。近日,有研究人员宣布MIFARE 系列产品的安全性存在薄弱环节,在他的研究室里,通过研究读写器和卡之间的通信数据,找到了这种卡的加密算法和认证通信的协议,并有两种方法可以得到MIFARE class逻辑加密卡的分区密码。通过这种方法,破坏者可以使用非常廉价的设备在40ms内就可以轻易获得一张M1卡的密码。面对这种灾难性的事实,有些公司宣称他们有办法弥补这一漏洞,用户可以继续使用这种卡片而不必担心。那么,M1卡的破解真的有那么大的破坏力么,目前的一些“安全”手段真的有效么。回答这一问题,我们需要先从了解Mifare1系列卡片的结构和安全认证机制开始。

  Mifare系列非接触IC卡是荷兰Philips公司的经典IC卡产品(现在Philips公司IC卡部门独立为NXP公司,产品知识产权归NXP所有)。它主要包括在门禁和校园、公交领域广泛使用的Mifare one S50(1K字节)S70(4K字节),以及简化版Mifare Light升级版MifarePro 4种芯片型号。这几种芯片中,除Mifare Pro外都属于逻辑加密卡,即内部没有独立的CPU和操作系统,完全依靠内置硬件逻辑电路实现安全认证和保护的IC卡。其主要结构如图所示:

  

  在Mifare 1芯片结构中,Authentication & Access Control 认证与访问控制单元用于完成卡片的密码认证,控制各个数据扇区的读写权限;Crypto Unit数据加密单元就是其认证和加解密运算的算法引擎。Mifare系列IC卡是NXP公司的专利产品,它采用了一种NXP特有的加密算法来完成认证和加解密运算。由于这种算法是NXP特有且不公开的算法,Mifare系列IC卡采用了一种特殊的手段来实现在不公开算法的前提下完成认证,即将同样的算法引擎放置在NXP出产的专用Mifare读写基站芯片中(如常用的RC500和RC531),认证过程由基站芯片“代替”用户系统与Mifare芯片之间完成。这一认证过程就是常常被Mifare系列芯片宣传的“三重认证”,其实质就是基站芯片与Mifare芯片之间相互传递随机数以及随机数的密文,通过对随机数密文的解密比对实现对卡片的认证。Mifare芯片所引以为豪的“数据加密传输”也是由基站芯片加密后传送给Mifare芯片的。这个过程可以简化为下图所示:

  

  如图所示,M1卡所宣称的三次认证及输入加密传输等安全特性指的是M1卡与RC500等NXP基站芯片(或兼容芯片)之间的认证和加密。由于NXP对M1卡与基站芯片间的通讯协议和加密认证机制严格保密,因此从这里进行破解难度很大。然而不幸的是,最终这个算法和机制还是被破解了。研究人员找出了算法和通讯协议中的漏洞,可以轻易地通过几十次试探攻击(约40ms)就能够获得一张卡片的所有密钥。事实上,在Mifare芯片的兼容产品出现的那一天起,这个秘密就已经不是秘密了,因为完全兼容,实际就意味着已经掌握了这个算法。

  在Mifare1卡片安全问题暴露后,一些公司公开宣称已经有了解决的办法,其中的法宝就是所谓“一卡一密”,也就是每一张卡片的每一个扇区的密钥都不相同,使用CPU卡装载系统根密钥,根据Mifare1卡的唯一序列号计算子密钥,防止一张卡片被破解而影响整个系统。其实这种解决方案在Mifare1卡破解之前就已经出现。那么,一卡一密真的能解决Mifare1的安全问题么,我们还是要从Mifare1卡的认证机制着手进行分析。

  我们已经知道,Mifare1卡的认证实质上是卡与基站芯片之间的认证。常用的RC500等基站芯片已经为业界广为熟知,它的接口和通讯协议都是公开的。在基站与Mifare1卡认证前,需要通过LoadKey命令将Mifare1卡的密码装载到基站芯片中。这一过程是一个明文写入的过程,是由终端设备(如读卡器)主控单片机传送给RC500的,并且单片机对RC500的命令传输是非加密的。如下图所示:

  

  这样就可以通过截获单片机与RC500之间的通讯来获取M1卡的密钥。而要做到这一点,一个使用过RC500的对单片机技术稍微了解的技术人员都能够轻而易举的实现。

  那么,在读卡器中安装SAM卡,通过SAM卡计算卡片密钥实现一卡一密是否就安全了呢。想法非常美好,然而结果却非人所愿,这样的做法不但没有增加安全,反而更加加大了安全漏洞。如下图所示:

  

  三重认证

  如图所示,M1卡通过SAM卡实现一卡一密本质上是将SAM卡内的主密钥通过对M1卡的卡号分散后得到M1卡的子密钥,但是这个子密钥仍然要通过终端单片机明文传送给RC500芯片完成对M1卡的认证。更为严重的是SAM卡送出的是Mifare1卡的明文密码,黑客只要获得一张SAM卡,就能够通过它获得所有卡片的密码,连破解手段都不用。

  此外,在M1卡消费密码被泄露的情况下,即使采用了联机充值的方法,也无法保障运营商的利益,因为在此情况下,盗窃者使用伪造的M1卡,完全可以不用系统的充值密码,而直接采用M1卡的缺省密码对卡片进行“充值”,然后用真实的消费密码在终端上消费。在此情况下,即使采用了黑名单机制也难以避免运营商和授卡商户遭受损失,因为黑名单机制是一种事后防范机制,防止的是再次发生同一伪卡的交易,而在M1卡小额消费日益普及的今天,盗窃者只需将伪卡使用一次,就足以获得比一张伪卡成本高得多的收益。

  这样,我们可以假设一下几种情况:

  外部人员作案:

  作案人盗取一个正式使用的终端设备,通过线路截获方式获取单片机发送给RC500的密钥,从而破解M1卡的密钥。

  作案人盗取终端内的PSAM卡,通过向PSAM卡发送密钥分散指令的方式得到每一张M1卡的子密钥。

  内部人员作案:

  终端设备的开发人员利用工作之便盗取终端内的M1卡密钥明文或经过单片机发送给RC500的M1卡密钥明文。

  发卡机构工作人员利用工作之便截取PC机通过M1卡读卡器发送给M1卡的密钥明文。或直接操作PSAM卡盗取密钥明文。

  系统开发人员利用工作之便盗取PSAM卡密钥明文。

  无论哪种可能,都会对整个系统的安全造成致命的影响。实质上,这种一卡一密的做法是借用了CPU卡认证机制中的一卡一密概念,然而它在有意无意间忽略了一个非常重要的事实,即CPU卡和逻辑加密卡是完全不同的两种卡片,它们的认证机制完全不同。CPU卡由于内部具有CPU处理器和操作系统COS,认证的过程完全是在用户卡与SAM卡之间进行的,认证过程中传送的是随机数和密文,读卡器基站芯片只是一个通讯通道;认证过程不能复制;使用的算法是公开算法,其安全性是基于CPU卡对密钥的保护而非对算法的保护。密钥在用户卡和SAM卡内都不能读出,而且密钥的安装是通过密文进行,系统上线后即使是发卡人员和开发人员也无法得到密钥明文,从根本上保证了系统的安全性。正是由于意识到了M1卡潜在的安全性问题,建设部才多次开会推广使用CPU卡。双界面CPU卡更是由于其应用的灵活性和对金融规范的支持得到了各方的赞赏。

  当然,一个系统的安全性不仅仅取决于采用了哪种卡片和哪种安全机制,而且通过系统设计上的安全手段也能够弥补一些卡片安全上的不足。一个产品的安全性不能依赖于某一个方面的单个安全,更多的应从一个系统的整体的逻辑上去完善安全、把可能出现的不安全特征通过整体的系统完善起来.针对原有不安全的系统进行改造。例如在建设部的IC卡规范中对于M1卡的一卡一密就规定了在SAM中计算卡片密码前必须校验卡中的MAC认证码,这在很大程度上降低了盗用SAM卡的可能性。然而遗憾的是大部分M1卡应用系统并没有采用类似的补救手段,而且这种手段也不能完全杜绝克隆卡、伪造卡的使用。黑名单等防范手段虽然有效,但毕竟属于事后防范,难以从根本上解决问题。特别是在当前Mifare1卡片被破解的背景下,简单的采用打补丁的方法更是一种掩耳盗铃的行为。

  对于一个IC卡应用系统而言,卡片的安全性好比一座摩天大厦的基础,针对一种卡片的安全机制必定制定相应的保护措施以保护这个基础。而当卡片的安全性发生了根本的变化时,原有的保护措施已经失去了效果,整个大厦的基础发生了动摇,此时再采取补丁措施,无异于给大厦地面上的结构进行加固,措施再好也难以改变基础动摇这一事实。根本的解决之道就是重新打牢基础,从根基上完善系统的安全保护体系。

  同MIFARE1卡相比,非接触CPU卡是一种真正意义上的“智能卡”。CPU卡内集成电路中包括中央处理器(CPU)、只读存储器(ROM)、随机存取存储器(RAM)、电可擦除可编程只读存储器(EEPROM)等主要部分,犹如一台超小型电脑。具有信息量大、防伪安全性高、可脱机作业,可多功能开发等优点。CPU卡采用强大而稳定的安全控制器,增强了卡片的安全性,而非接触传输接口又能满足快速交易的要求(如公交的快速通过)。CPU卡采用了多种芯片级防攻击手段,基本上不可伪造;CPU卡所特有的内外部认证机制以及以金融IC卡规范为代表的专用认证机制,能够完全保证交易的合法性;在认证和交易过程中,CPU密钥是不在线路上以明文出现的,它每次的送出都是经过随机数加密的,而且因为有随机数的参加,确保每次传输的内容不同,保证了交易的安全性。在认证和交易过程中所使用的密钥都是在安全的发卡环境中产生并密文安装到SAM卡和用户卡中,整个过程密钥不外露。CPU卡的应用防火墙功能可以保障同一张卡中不同应用的安全独立性。对安全性要求较高的金融行业都以CPU卡作为下一代银行卡的标准。采用非接触式CPU卡可以杜绝伪造卡、伪造终端、伪造交易,最终保证了系统的安全性。

  同时,非接触CPU卡的大容量存储空间又可以满足预期的大金额消费应用所要求的更多客户信息的存储。而这时安全就不仅仅是存储在卡内的电子货币的安全,还包括个人信息的安全,非接触式CPU卡的安全机制可以为此提供良好的保障。

  由于非接触式CPU卡具有以上无可比拟的优点,非常适用于电子钱包、电子存折、公路自动收费系统、公共汽车自动售票系统、社会保障系统、IC卡加油系统、安全门禁等等众多的应用领域。非接触CPU卡将逐步取代逻辑加密卡而成为IC卡的主要选型。在M1卡被破解的形势下,采用非接触CPU卡取代M1卡是解决M1卡危机的最终解决方案。

  MIFARE卡被破解的消息在今年年初被披露以来,一石激起千层浪。众多Mifare的用户开始担心自己系统的安全。通过系统的分析M1卡破解的原理及带来的影响,我们可以得出结论:M1卡确实已经不再安全,基于M1卡的系统的安全基础已经动摇,我们必须采取行动,选择适当的产品替换M1卡,重新加固即将倒塌的安全基石。

  同MIFARE1卡相比,非接触CPU卡是一种真正意义上的“智能卡”。CPU卡内集成电路中包括中央处理器(CPU)、只读存储器(ROM)、随机存取存储器(RAM)、电可擦除可编程只读存储器(EEPROM)等主要部分,犹如一台超小型电脑。CPU卡采用了多种芯片级防攻击手段,基本上不可伪造;CPU卡所特有的内外部认证机制以及以金融IC卡规范为代表的专用认证机制,能够完全保证交易的合法性;在认证和交易过程中,CPU密钥永远不会外露,它每次送出的都是经过加密的随机数。在认证和交易过程中所使用的密钥都是在安全的发卡环境中产生并密文安装到SAM卡和用户卡中,整个过程密钥不外露。CPU卡的应用防火墙功能可以保障同一张卡中不同应用的安全独立性。对安全性要求较高的金融行业都以CPU卡作为下一代银行卡的标准。采用非接触式CPU卡可以杜绝伪造卡、伪造终端、伪造交易,最终保证了系统的安全性。

  由于非接触式CPU卡具有以上无可比拟的优点,非常适用于电子钱包、电子存折、公路自动收费系统、公共汽车自动售票系统、社会保障系统、IC卡加油系统、安全门禁等等众多的应用领域。非接触CPU卡将逐步取代逻辑加密卡而成为IC卡的主要选型。

  以Mifare1为代表的非接触逻辑加密卡与CPU卡相比,非接触逻辑加密卡与非接触CPU卡同属非接触IC卡,但这两种卡片是完全不同档次的卡。

  以下对MIFARE I卡与非接触CPU卡做一比较:

  

 
MIFARE I卡
非接触CPU卡
相关国际标准
ISO14443 Type A
ISO14443 Type A/B
载波频率
13.56 MHz
13.56 MHz
传输数率
106 Kbps
106 Kbps
发送信号调制
ASK 100%(信号有断续)
ASK 10%(TypeB信号连续)ASK 100%(TypeA信号有断续)
存储空间/分区
最大4K字节,固定扇区,分块管理
2K/8K/16K可选,文件管理,灵活设计
访问权限控制
只读/只写/读写/加/减
对不同文件类型灵活设计认证方式
密钥长度/个数
6字节密码,分扇区控制
16字节密钥,可多级多个密钥组合控制
加密/认证算法
专用不公开硬件逻辑算法(已被破解)
通用公开软件或硬件加速算法(金融标准)
读写/安全模块
算法内置密钥外送。认证方式为卡片与专用基站芯片认证(认证通讯协议已破解)
通用读写模块透明传输,配合SAM密钥算法,认证在双方卡内部进行,传输中为加密后的随机数
交易流程
简单不规范,需自定义防拔流程
有银行标准规范,也可由用户灵活设计,内置防拔流程
一卡多用
困难,不方便
完全支持一卡多用,灵活、安全、方便
 
 

  通过分析,我们可以看出,使用CPU卡代替Mifare1卡是彻底解决Mifare卡危机的根本途径。然而,对于数量众多的Mifare1卡应用系统,我们如何能够以最小的投入最快的速度完成这一升级转换呢,是否需要将系统推倒重来呢。其实大可不必。上文我们讲到,一个系统的安全不仅仅依赖于采用了哪一种卡。一个卡系统往往由多个子系统构成,其中受到Mifare1卡破解影响的只是直接与卡相关的很少的几个部分,我们只需要对这些部分进行改造升级就完全可以保障我们系统的安全稳定运行。

  以安防门禁系统为例,在一个门禁管理系统中,主要包括以下几个部分

  

  管理中心是一个软件平台,负责负责整个系统的协调、指挥工作,主要功能包括:规定和调整系统设置要求并实行;负责监控主要的进入口和公共场所;负责处理门禁系统发生的警报;负责提供对事件记录;负责发卡注册。

  门禁控制单元是硬件平台,是类似于通道管理性质的各类控制器,如:门锁控制器、电梯控制器、停车场控制器和考勤终端等(可扩充功能),都属于门禁控制单元。门禁控制单元是管理中心设置的各种管理手段的执行设备。

  门禁系统中门禁单元设备的标准配置如下图。

  

  读卡器是门禁控制系统当中的卡识别设备,将用户刷卡信息传送给控制器和管理系统,供控制系统进行判断处理。

  电门锁、闸机等是门禁系统的执行机构,执行对门、通道的开关控制。

  在整个门禁管理系统中,门禁IC卡是安全管理的基础核心。此次M1卡被破解,正是将门禁系统的最核心的安全控制打破,使门禁卡的复制伪造成为可能。要解决门禁系统的安全问题,需将M1卡替换为CPU卡。而整个系统中与卡片有直接交互的只有两个地方:后台系统中的发卡子系统和最前端的识别系统,即门禁读卡头。对于绝大多数门禁系统而言,门禁读卡头只是将卡片卡号读取出来通过控制器送到后台系统,系统通过卡号及后台授权情况进行控制。这样我们在进行系统升级改造时,只需要改造门禁读卡头和发卡子系统,使之能够识别读写CPU卡,并对CPU卡完成认证,其他系统和软件都无需改动,即可快速完成从M1卡到CPU卡的迁移。

  具体方案如下:

  1、更换门禁读卡器,使用支持CPU卡的门禁读卡器。由于门禁读卡器与控制器之间的通讯接口有统一的规范,这种更换改造很容易实现。

  2、对原系统中的发卡子系统进行改造,更换读卡器,使之能够发CPU卡。由于各个门禁厂商的软件平台都不同,因此这项改造需要原门禁系统厂商配合完成。

  3、如果直接改造发卡系统软件有困难,可以开发新的CPU卡发卡子系统,与原系统后台数据库对接,实现CPU卡发卡。此种方式实现相对简单,但需要了解原系统的数据库接口,仍需要原厂商的一些支持。不过,许多门禁管理软件支持直接输入卡号的发卡方式,这就为系统改造创造了非常便利的条件。

  与门禁系统相似,城市公交一卡通系统虽然更为复杂,但系统中的清分清算等主要部分都并不与IC卡直接关联。如图所示:

  

  在一卡通系统中,与卡直接相关的子系统包括:发卡子系统、消费终端、卡务管理子系统;对发卡子系统的改造主要是将初始化M1卡流程改造为初始化CPU卡;卡务管理子系统的改造也相对简单,实现CPU卡读写操作即可;决定改造是否成功的关键是消费终端的升级改造,不仅需要能够读写CPU卡,而且要将M1卡的交易流程升级为CPU卡标准交易流程,对系统开发商而言需要有足够的对CPU卡应用的经验和理解。

  同方股份有限公司是国内知名的智能卡应用开发服务和产品提供商,是国内最早从事CPU卡研制和应用开发的公司之一。早在1998年清华同方研发中心与清华大学计算机系共同成立的智能卡COS研究小组开发的《金融IC卡操作系统ZTCOS1.0》就获得了中国人民银行银行卡检测中心颁发的《中国金融集成电路卡PBOC1.0检测证书》。公司紧跟世界最先进的IC卡技术,是国内在ISO14443 TypeB非接触标准产品和应用开拓者和领先者。公司承建的沈阳城市一卡通系统是国内最早最大规模的城市CPU卡一卡通应用项目,至今双界面CPU卡实际发卡量已经突破350万张,在国内城市通卡领域有着巨大的影响力。同方股份有限公司依托在非接触智能卡多年的开发和应用经验,致力于城市一卡通应用系统开发和相关产品研制,已形成了非接触CPU卡、读卡终端在内的完整的非接触CPU卡产品体系。公司开发的双界面CPU卡已获得了《中国金融集成电路卡PBOC2.0检测证书》。面对非接触智能卡应用蓬勃发展的机遇,同方股份有限公司正深入开拓市场,加速新产品的开发研制,助力于中国非接触智能卡行业的腾飞。

由Mifare 1卡破解带来的危险以及应对方法的更多相关文章

  1. 破解简单Mifare射频卡密钥杂记

    先要了解一点大学城浴卡用的是什么卡,经查证是Mifare S50卡,也有叫ISO14443A的(协议名).本来想看看大学城浴卡有没有安全漏洞,没想到浴卡公司在安全性上几乎是蔑视我们大学生的智商,虽然被 ...

  2. 复制MIFARE Classic卡

    Mifare Classic 1K智能卡介绍及nfc-tools的使用 [原创]RFID安全之——ACR122U菜鸟初体验-『智能设备』-看雪安全论坛 复制MIFARE Classic小区门禁卡记录 ...

  3. 使用Proxmark3进行MIFARE Classic卡的安全测试

    使用Proxmark3进行MIFARE Classic卡的安全测试   Proxmark3的MIFARE安全测试是很多朋友都非常重视的一部分,所以我们特地以这个部分进行介绍,告诉大家如何当你完成前期操 ...

  4. M1卡破解(自从学校升级系统之后,还准备在研究下)【转】

    本文转载自: M1卡说明及使用proxmark3破解方法 看了网上写的一些关于M1卡的文章,多数有些误导之嫌.首先谈谈M1卡的规格,M1卡的容量为1KB,好多网上写8KB,这里其实是有个误区,应该是8 ...

  5. 警惕phpstudy等开发神器使用默认配置可能带来的危险

    0x00 前言 其实这个点早在之前,我就已经想到了,当时也觉得没啥就记在了我的印象笔记里. 而今天重新把这个点拿出来讲,主要是因为今天早上在温习nmap的时候,一不小心利用这个点,拿下了一位同事的电脑 ...

  6. 利用工具破解HTTP身份验证的多种方法

    https://www.hackingarticles.in/multiple-ways-to-exploiting-http-authentication/ 1)场景 利用Apache配置HTTP验 ...

  7. 基于webstorm卡顿问题的2种解决方法

    基于webstorm卡顿问题的2种解决方法:https://www.jb51.net/article/128441.htm

  8. 射频识别技术漫谈(11)——Mifare系列卡的共性【worldsing笔记】

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

  9. 射频识别技术漫谈(11)——Mifare系列卡的共性

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

随机推荐

  1. gcc -lpthread 干什么用

    #include <stdio.h> #include <pthread.h> void *ThreadFunc(void *pArg)  //参数的值为123 { int i ...

  2. 随意记的一点 js 笔记

    1. 给未经声明的变量赋值在严格模式下会导致抛出 ReferenceError 错误(意思是,所有变量都必须用 var 去定义,不能在函数内部定义全局变量): 2. 在严格模式下,不能定义名为 eva ...

  3. PowerShell入门(一):PowerShell能干什么?

    原文链接:http://www.cnblogs.com/ceachy/archive/2013/01/30/WhatCanPowerShellDo.html PowerShell能干什么呢?就像序言中 ...

  4. Linux 二进制包安装MySQL的一些问题

    第一步:安装相关的依赖yum install perl-Data-Dumper 第二步:初始化mysql数据库的内部信息./scripts/mysql_install_db --basedir=/us ...

  5. 以程序的方式操纵NTFS的文件权限

    Windows NT/2K/XP版本的操作系统都支持NTFS格式的文件系统,这是一个有安全性质的文件系统,你可以通过Windows的资源管理器来设置对每个目录和 文件的用户访问权限.这里我就不对NTF ...

  6. delphi 实现vip126发邮件

    本例是 TSimpleThread , TSimpleList, IdhttpEx 网页模拟(POST)的综合运用. Demo只写了发送,但亦可收取,详见源码. (此源码写于2年前,那时还写得不好,请 ...

  7. VC使用双缓冲避免绘图闪烁的正确使用方法【转】

    使用内存DC绘图,然后实现双缓冲,避免绘图闪烁,这个小技术简单但很有效.但是仍然有很多人说使用了双缓冲,图片却仍然有闪烁,分析了几个这样的例子,发现 其实不是双缓冲的技术问题,而是使用者没有正确理解和 ...

  8. openNebula rgister img instance vms error collections

    1, 注册镜像报错信息 ERROR="Fri Nov 21 12:57:17 2014 : Error copying image in the datastore: Not allowed ...

  9. Android流式布局实现

    查看我的所有开源项目[开源实验室] 欢迎增加我的QQ群:[201055521],本博客client下载[请点击] 摘要 新项目用到了一种全新布局----Android标签流式布局的功能,正好一直说给大 ...

  10. 使用my97datepicker控件实现日期范围选择

    注:(2014-12-05内容修改:添加运行效果) 使用my97datepicker 控件,需要对日期的范围进行控制,本人自己写了一个js完成此功能,示例为当前日期到下一周周五之间的日期可选,其他日期 ...