解惑:NFC手机如何轻松读取银行卡信息?
自支付宝钱包8.0推出了NFC新功能,只要将支持NFC功能的手机靠近公交卡、银行卡等带有芯片的IC卡上,可迅速读取卡内余额、卡的信息,还可以给卡进行充值,非常贴心实用。
但是很多网友表示担忧,要是别人用手机紧贴着我的银行卡,那么信息不就轻易泄露了,这样会威胁我的资金安全吗?并有不少伪专家宣称,NFC手机有可能成为黑客的“提款机”,可以实现转账操作,风险很大,网友表示很担心。真实情况是什么样的呢?让我从专业的角度,给大家道出内幕。
NFC(近场通信,NearFieldCommunication),又称近距离无线通信,是由非接触式射频识别(RFID)及互联互通技术整合演变而来,在单一芯片上结合感应式读卡器、感应式卡片和点对点的功能,能在短距离内与兼容设备进行识别和数据交换。由飞利浦半导体(现恩智浦半导体)、诺基亚和索尼共同研制开发,其基础是RFID及互联互通技术。
自从2006年诺基亚推出第一部NFC手机开始,现在越来越多的智能手机已支持NFC技术。比如,诺基亚Lumia系列、三星Galaxy及Note系列、索尼Xperia系列、HTCOne系列以及国内小米手机3、Oppo、魅族等部分手机,均已支持NFC技术。有传言iPhone6将增加该功能。
NFC手机能够读取信息的距离,直接决定了获取银行卡号的难易程度。根据网友的测试,发现只要距离超过5cm,就无法读出银行卡信息。所以如果你担心你的信息被窃,那么建议将卡片装入钱包中,信息被窃的可能性就会降低。
用安装有支付宝钱包的NFC手机,不同的银行卡可以读取的信息不尽相同,根据网友测试,结果如下:
银行卡 |
卡号显示 |
卡内余额 |
电子钱包余额 |
近10笔交易 |
身份证号 |
广州银行 |
后4位 |
不可读 |
可读 |
可读 |
不可读 |
建设银行 |
全卡号 |
不可读 |
可读 |
可读 |
开头末尾两位 |
交通银行 |
后4位 |
不可读 |
可读 |
可读 |
不可读 |
招商银行 |
全卡号 |
不可读 |
可读 |
可读 |
开头末尾两位 |
中国银行 |
全卡号 |
不可读 |
可读 |
可读 |
不可读 |
工商银行 |
全卡号 |
不可读 |
可读 |
可读 |
不可读 |
农业银行 |
全卡号 |
不可读 |
可读 |
可读 |
不可读 |
我个人用了多家银行数据测试,发现部分银行卡是无法正常识别,经过反复修改数据发现,支付宝钱包是通过读取0201DGI中的数据,识别银行卡号,发送指令00B2011444,所以只要0201的长度不等于44H,多数卡片都会返回6CXX,就无法正确识别卡片。但这不符合PBOC3.0规范要求的,PBOC3.0第五部分B.12 读记录C-APDU/R-APPDU中要求le为00,也许是支付宝有意而为之,只针对合作伙伴的卡片吧。
那么这些信息,是如何实现的呢?首先看银行卡号,银行卡号在芯片卡内以5A标签存在,一般会存放在0201DGI中,如果发送指令00B2011400即可读出这条以70模板开始的记录数据,例如返回7081885F24032412315F25031506225A0A6230910299000378541F9F0702FF008E0E000000000000000042031E031F009F0D05D8609CA8009F0E0500100000009F0F05D8689CF8005F280201569F080200308C1B9F02069F03069F1A0295055F2A029A039C019F37049F21039F4E148D1A8A029F02069F03069F1A0295055F2A029A039C019F37049F2103,根据TLV模板规则解析,即可得到数据如下:
标签 |
定义 |
长度 |
数据 |
5F24 |
应用失效日期 |
03 |
241231 |
5F25 |
应用生效日期 |
03 |
150622 |
5A |
应用主帐号 |
0A |
6230910299000378541F |
9F07 |
应用使用控制 |
02 |
FF00 |
8E |
CVM列表,借贷记 |
0E |
000000000000000042031E031F00 |
9F0D |
IAC默认借贷记 |
05 |
D8609CA800 |
9F0E |
IAC拒绝借贷记 |
05 |
0010000000 |
9F0F |
IAC联机借贷记 |
05 |
D8689CF800 |
5F28 |
发卡行国家代码 |
02 |
0156 |
9F08 |
应用版本号 |
02 |
0030 |
………….. |
………….. |
………….. |
………….. |
同理,身份证号9F61标签也可以读取到,一般写入到DGI0102中,可以通过00B2020C00读取,这条记录会返回证件号9F61,姓名5F20,证件类型9F62等。
电子现金余额在卡内用9F79标签标识,长度为6字节,目前最大值为1000元即000000100000,由卡内数据9F77(电子现金余额上限)限制,单笔交易最大额度由9F78(电子现金单笔交易限额)限制。当你的电子钱包余额小于9F6D(电子现金重置阈值)时,卡片会自动从主账户圈存金额至9F79。这里介绍的这些数据都可以通过GET DATA指令获取,例如非接触下发送80CA9F7900,即可获取电子现金余额。但卡内余额是不能够获取的,只有输入联机PIN码,联机情况下才可以。
再来看看交易日志,银行芯片中如果有9F4D(交易日志入口), 那么卡片将会自动记录日志,JR/T 0025推荐此值为0B0A,0B表示循环交易日志文件的SFI,此值范围应在11-30之间,0A表示交易日志文件中的记录个数为10条。在PBOC3.0规范第五部分表B.27中提到9F4D是O(可选的),也就是说如果卡片不需要记录日志,那就没必要写入9F4D。
交易日志格式在个人化数据中用9F4F标签标识,在银联模板中推荐了多组值,例如此值为9A039F2103 9F0206 9F0306 9F1A02 5F2A02 9F4E14 9C01 9F3602,格式为Tag+Length,表示记录日志中应包含:交易日期(9A),交易时间(9F21),授权金额(9F02),其它金额(9F03),终端国家代码(9F1A),交易货币代码(5F2A),商户名称(9F4E),交易类型(9C),应用交易计数器(9F36)。此值由银行根据需要自定义。终端可以通过取数据(GET DATA)命令获取9F4F的值,在非接界面下发送80CA9F4F00即可。
那如何读出记录呢?终端会通过发送读指令获取日志,记录的读取权限为自由,例如发送指令00B2015C00,获取第一条记录,根据PBOC3.0规范第五部分B.12中定义,前两个字节00B2固定,分别为CLA,INS。第3个字节01表示记录号,也就是需要读取第几条记录。5C为我们读取的记录文件标识,我们9F4D中定义为0B,那么0B*8+4=5C。例如我读取第一条记录返回140708095515000000010000000000000000015601566368696E61756E696F6E7061792E616263643132010003,根据上面所列tag解析得到:
标签 |
定义 |
数据 |
9A |
交易日期 |
140708 |
9F21 |
交易时间 |
095515 |
9F02 |
授权金额 |
000000010000 |
9F03 |
其它金额 |
000000000000 |
9F1A |
终端国家代码 |
0156 |
5F2A |
交易货币代码 |
0156 |
9F4E |
商户名称 |
6368696E61756E696F6E7061792E616263643132 |
9C |
交易类型 |
01 |
9F36 |
应用交易计数器 |
0003 |
目前PBOC3.0规范第13部分中还增加了圈存日志记录, 圈存日志文件的短文件标识符和记录个数在圈存日志入口数据元(DF4D)中规定。 DF4D的第一个字节定义了圈存日志记录文件的短文件标识符, 圈存日志记录文件的短文件标识符取值范围应在11-30之间,JR/T 0025推荐圈存日志的短文件标识符为12 (即0x0C) ,圈存日志入口数据元应在选择应用的时候返回, 由卡片在ADF的FCI中的BF0C模板中返回,和交易日志数据元返回一样。DF4D的第二个字节定义了圈存日志记录个数。卡片应支持至少存储十条圈存日志。根据系统商数据,目前除银联提供的数据DF4D为0C14,即最多记录20条日志外,其它系统商提供的数据均为0C0A,即记录10条圈存日志。
圈存日志格式在DF4F中定义,此值可以通过Get Data命令获取,发送指令80CADF4F00。PBOC3.0规范第13部分表11中推荐此值为DF4F0E9A039F21039F1A029F4E149F3602,如下:
标签 |
定义 |
长度(字节) |
9A |
交易日期 |
3 |
9F21 |
交易时间 |
3 |
9F1A |
终端国家代码 |
2 |
9F4E |
商户名称 |
20 |
9F36 |
应用交易计数器(AT C) |
2 |
圈存日志提供两种读取方法,可以逐条读取,例如发送00B2016400读取第一条记录,64为我们读取的记录文件标识,我们DF4D中定义为0C,那么0C*8+4=64。也可一次性读取全部圈存日志,此目的是为了在自助设备或者发卡行柜台获取由MAC保护的完整圈存日志,以便发生账户差错时为调账提供参考。发送的指令只需第3字节为00即可,00B2006400。
所以上表所显示的内容完整性,数据的多少,都是可以由NFC手机软件操控的。金融IC卡中写入的大部分数据都可以自由读取,但不用担心卡片会被复制,因为目前的金融卡中82(应用交互特征)都支持DDA(动态认证),动态认证中需要卡片私钥参与认证,私钥是不能被读取的,所以卡片不会被完整的克隆。
金融IC卡为了交易方便,快捷,大部分银行在接触电子现金及非接触QPBOC环境下,都选择免输脱机PIN,只需签名或免签就可以完成交易。持卡人验证方法是由卡内数据8E决定的。
终上所述,如果芯片银行卡被未经授权的人使用NFC手机读取信息,可能导致银行卡号、证件号码,姓名等相关隐私信息被窃取,但这些信息并不能直接导致银行卡资金被盗。目前BCTC送检已经建议银行个人化数据中尽量避免出现姓名和证件号码等内容,这些信息可以由银行后台去关联。
目前PBOC3.0卡片已经陆续发行,在14部分增加了Q扩展应用,包括地铁应用,公交应用,高速公路不停车收费,停车收费咪表应用,铁路(高铁)应用等,这些应用的交易日志也是可以自由读取的。随着社会的发展,技术的进步,持有类似NFC手机终端的用户会持续增加,那么用户信息的安全性就显得越来越重要。如果银行还想继续和顾客一起愉快的玩耍,那就必须考虑到顾客的担忧,毕竟他是你的上帝。
2014年3月14日中国人民银行支付结算司叫停了虚拟信用卡和二维码支付业务。主要因为虚拟信用卡,定位监管上存在模糊地带,而且触动了银联的利益。但第三方支付企业仍在茁壮成长,并且在鼓励发展互联网金融的大背景下,二维码支付和虚拟信用卡仍有恢复的可能。2014年5月27日,支付宝宣布将启动“未来医院计划”,也就是“手机医院”,市民可以在家用手机挂号、支付宝付费,到医院直接进诊室就诊,只需在家关注手机“实时叫号”,就可轻松看病。2014年6月18日,支付宝在首届城市建设信息技术产品博览会上,对外宣布了“未来公交”计划,并联手住房和城乡建设部IC卡应用服务中心, 发布了城市一卡通应用,它能让用户把随身的手机变成一张通行全国35个城市的公交卡。随着电子商务的深入,在线支付需求扩大,促使发行虚拟卡的行业越来越多,虚拟卡时代的到来,也意味着物理卡片的消亡。
本博文刊登在《卡技术与安全》杂志 副刊《支付e时代》8月刊 http://blog.sina.com.cn/s/blog_7f5c42650102uze4.html