解惑: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位


不可读


可读


可读


不可读


招商银行


全卡号


不可读


可读


可读


开头末尾两位


中国银行


全卡号


不可读


可读


可读


不可读


工商银行


全卡号


不可读


可读


可读


不可读


农业银行


全卡号


不可读


可读


可读


不可读

那么这些信息,是如何实现的呢?首先看银行卡号,银行卡号在芯片卡内以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个城市的公交卡。随着电子商务的深入,在线支付需求扩大,促使发行虚拟卡的行业越来越多,虚拟卡时代的到来,也意味着物理卡片的消亡。

解惑:NFC手机如何轻松读取银行卡信息?,布布扣,bubuko.com

时间: 2024-10-02 23:57:41

解惑:NFC手机如何轻松读取银行卡信息?的相关文章

使用NFC读卡器读取银行卡信息

使用NFC读卡器  ACR122u 使用ACR122u Tool 软件发送spdu指令即可 一些运行结果 如上所示,银行卡的卡号,有效期,卡主姓名,身份证号,进期消费记录均可读出

HCE对金融、交通、通讯、智能卡行业的巨大影响 电子虚拟智能卡 Android version4.4 NFC手机

HCE模式,可以使得软件模拟智能卡,产生电子虚拟智能卡. HCE(Host-based Card Emulation)是一个模拟智能卡的软件,在Android中以软件形式存在(例如:apk).HCE的特点是模拟智能IC卡(ISO 7816-4),可用于金融.交通.通讯等行业应用,HCE是软件模拟的智能IC卡,所以也会有AID,可以模拟现有实体卡片的功能. 对金融.交通.通讯.智能卡等行业产生巨大影响,就如同电子信息和互联网技术的发展对传统媒体(纸质报纸.实体唱片)等的影响一样. HCE是基于NF

NFC手机

NFC手机 NFC手机内置NFC芯片,比原先仅作为标签使用的RFID更增加了数据双向传送的功能,这个进步使得其更加适合用于电子货币支付:特别是RFID所不能实现的,相互认证和动态加密以及一次性钥匙(OTP)都能够在NFC上实现.NFC技术支持多种应用,包括移动支付与交易.对等式通信及移动中信息访问等. NFC手机具有三大功能,卡模式.读模式和点对点模式. 1.卡模式 是指NFC手机模拟成一张卡,通过下载不同的应用模拟成不同的卡,用于付款和购票,用于电子票证.为了确保NFC手机的安全性,NFC手机

JS读取UserAgent信息并做判断

JS读取UserAgent信息并做判断 userAgent信息可以由navigator.userAgent拿到.例子: <script type="text/javascript"> document.writeln("navigator.userAgent: " + navigator.userAgent + "<br />"); document.writeln("navigator.appName: &qu

JavaWEB中读取配置信息

第一种方法是使用java.io和java.util包,缺点是路径的概念要清晰, 例子: Properties prop = new Properties(); InputStream in = getClass().getResourceAsStream("/common.properties"); try { prop.load(in); pool = new JedisPool(config, prop.getProperty("pay.redis.url"))

iOS通过app读取通讯录信息(整理)

iOS通过app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和AddressBook两个包,并且引入头文件 #import <AddressBook/AddressBook.h> #import <AddressBookUI/AddressBookUI.h> 具体实现如下: -(void)readAllPeoples { //定义通讯录名字为addressbook ABAddressBookRef tmpAddressBook = nil; //根据系统版本

基于C++的WMI应用编程初探-读取BIOS信息

虽然VBScript等脚本语言实现WMI编程更加方便,但有些时候我们还是不得不使用C++来编程,比如说要追求更好的性能或者是一个基于C++的项目中需要这样的功能等等. 下面是用C++实现WMI编程的基本步骤,在这里,我们通过读取BIOS信息来演示如何实现.可以对照参考: http://www.qingfengju.com/article.asp?id=60(通过一个具体实例来理解WMI脚本编程-读取BIOS信息). 1.初始化COM WMI提供的API是基于COM的,所以必须首先执行CoInit

PHP文件操作 之读取目录信息

//定义一个函数 读取目录信息的函数 function dirInfo($dirName) { //判断目录是否存在 if (!file_exists($dirName)) { die('目录不存在!'); } //判断是否是目录 if (!is_dir($dirName)) { die('您所遍历的不是目录!'); } //打开目录 $d = opendir($dirName); //判断打开目录是否成功 if (!$d) { die('打开目录失败!'); } //读取目录 while ($

读取proc信息的可扩展实现

需求 1. 将内存.线程数等信息注册到zk上进行监控 2. 统计信息,为下一步做负载均衡做准备. 实现 本文只解决问题1. 从网上查询了下,这些信息可以从proc文件系统中获取,如果不知道proc的,可以Google下. 网上有读取proc信息的lib——libproc,即 procps, 据说htop等实现就是基于它的. 我下载下来了,include和lib都生成了,好不容易找到一篇教程,结果在 stackoverflow上,见有人说有内存泄露,需要如下方法做. int main(int ar