解惑: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手机,不同的银行卡可以读取的信息不尽相同,根据网友测试,结果如下:
银行卡 |
卡号显示 |
卡内余额 |
电子钱包余额 |
笔交易 |
身份证号 |
广州银行 |
后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
文/yanxin8原创,获取更多信息请移步至yanxin8.com...
解惑:NFC手机如何轻松读取银行卡信息?的更多相关文章
- 解惑:NFC手机怎样轻松读取银行卡信息?
自支付宝钱包8.0推出了NFC新功能,仅仅要将支持NFC功能的手机靠近公交卡.银行卡等带有芯片的IC卡上,可迅速读取卡内剩余金额.卡的信息,还能够给卡进行充值,很贴心有用. 可是非常多网友表示担忧,要 ...
- 使用NFC读卡器ACR122u读取银行卡信息
使用NFC读卡器 ACR122u 使用ACR122u Tool 软件发送spdu指令即可 一些运行结果 如上所示,银行卡的卡号,有效期,卡主姓名,身份证号,进期消费记录均可读出
- NFC手机
NFC手机 NFC手机内置NFC芯片,比原先仅作为标签使用的RFID更增加了数据双向传送的功能,这个进步使得其更加适合用于电子货币支付:特别是RFID所不能实现的,相互认证和动态加密以及一次性钥匙(O ...
- NFC手机上基于软件的卡模拟 重大利好还是安全噩梦?(转)
Software Card Emulation in NFC-enabled Mobile Phones: GreatAdvantage or Security Nightmare? Michael ...
- ios读取通讯录信息
ios读取通讯录信息 (2012-05-22 14:07:11) 标签: ios读取通讯录 it iphone如许app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和Add ...
- JS读取UserAgent信息并做判断
JS读取UserAgent信息并做判断 userAgent信息可以由navigator.userAgent拿到.例子: <script type="text/javascript&qu ...
- 如何检测NFC芯片型号?NFC手机即可!
拿到了NFC标签之后,因为很多项目中的需求,用户需要对自已的NFC芯片进行选型,也就需要判断NFC芯片的类型?芯片是原装进口还是国产兼容的?芯片内存有多少?芯片存储内部结构如何......,而且用户还 ...
- CEF与JavaScript交互读取电脑信息
CefSharp中c#和JavaScript交互读取电脑信息 介绍 CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目.与主要关注 ...
- ASP.NET Core的配置(1):读取配置信息
提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...
随机推荐
- 一步一步学习Unity3d学习笔记系1.2 单机游戏和网游的数据验证概念
这一次的笔记的主要内容是单机和网游的数据存储,数据验证方式,在游戏的时候除了控制角色的行动,还涉及到用户角色的升级,经验,金钱赚取,道具购买,技能升级 等等一些数据的交易, 那么单机游戏和网游的区别如 ...
- Adobe AIR and Flex - 实现堆栈容器
1.需求描述: 在对云平台的监控中,我们经常需要在一张图上可视化的描述集群下的物理机所虚拟的虚拟机使用情况,以及超卖情况.那么传统的chart图就不满足我们的需求了,那么要实现这样一个定制化的char ...
- 慕课网-安卓工程师初养成-2-7 Java中变量的使用规则
来源:http://www.imooc.com/code/1242 不得不接受的变量小脾气: 1.Java 中的变量需要先声明后使用 2.变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值 ...
- PMP考试--成本管理中常用的概念
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 净现值(NPV) Net Present Value 在项目计算期内,按行业基准 ...
- 常见行为:仿真&重力&碰撞&捕捉
一.UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架.可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象,重力.弹性碰撞等,游戏开发中很常见,例如愤怒的小鸟. 二.UI ...
- 洛谷P2738 [USACO4.1]篱笆回路Fence Loops
P2738 [USACO4.1]篱笆回路Fence Loops 11通过 21提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 ...
- java学习之(接口)
使用接口 接口不能用于创建实例,但接口可以用于声明引用类型变量.当使用接口来声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象.除此之外,接口的主要用途就是被实现类实现.归纳起来,接口主要有 ...
- centreon 降低rrd磁盘读写
参考 https://documentation.centreon.com/docs/centreon/en/2.7.x/faq/performance.html 修改rrdcached配置 vim ...
- 用代码给TABLE 添加字段,设置属性并编译
AOTTableFieldList AOTTableFieldList ,TableFieldNode; TableName tableName = "SML_InventTableExt& ...
- com.google.inject.CreationException: Guice creation errors
错误的原因:xml文件中方法名重复或错误