带你揭开ATM的神秘面纱
相信大家都用过ATM取过money吧,但是有多少人真正是了解ATM的呢?相信除了ATM从业者外了解的人寥寥无几吧,鄙人作为一个从事ATM软件开发的伪专业人士就站在我的角度为大家揭开ATM的神秘面纱吧。以下纯属个人所知,如有错误概不负责。废话不多说,以下开扒:
1、ATM有没有可能出假钞?
答:完全有可能,想必大家也从各种新闻上看到过有人从ATM取出假钱的报道吧,这种新闻对于我们ATM从业者来说早就不是啥新鲜事了。
要解释ATM为啥子会出假钞就要从ATM的分类开始了,广义的ATM一般分为三类:取款机(ATM)、存款机、存取一体机(CRS或CDM),其中存取一体机我们也称之为”循环机”,意思是这种机器我们存进去的票子可以被其他人取出来。目前天朝市场上大多数机器都是取款机和存取一体机,存款机的数量很少及罕见,至少本人木有见过。
为啥要给大家介绍ATM的分类呢?玄机就在这个地方,就拿当前市场上最常见的取款机和存取一体机为例吧,其中取款机出来的钞票机器是不验钞的,也就是不管真钞假钞一股脑都往外出,而存取一体机有个东东叫验钞模块,这个东东可是高科技,不是啥公司都能做出来的,据我所知目前国内还只有一家公司完全掌握这项技术,所以从存取一体机里面出来的钞票一般假不了(99.99%,当然也不排除有些假钞的工艺太高超了)。
通过上面的介绍想必大家已经有了初步的了解吧,所以大家不到万不得已还是不要到取款机去取钱了。什么,不知道怎么分辨这两种机器?自己抬头看啊,ATM机上方都会有标识机器类型的,反正大家记住一点尽量用能存钱的机器去取钱。
2、ATM用的是什么操作系统?
答:Unix?Linux?如果我告诉你是Windows你会不会大吃一惊,我想很多人都会的。事实上现在市面上99%ATM机上的操作系统都是WinXP,还有极少部分机器的系统是WinNT和OS2,不过这些极少数的非主流很快就会被淘汰掉,谁让人家XP是主流呢。不过由于微软马上要停止对XP进行技术支持,预计明年起新增的机器都默认配置Win7系统的。
3、ATM安全么?
答:这个不用太担心,暂时还是很安全的。
既然知道ATM机上安装的是Windows系统,很多人肯定会说Windows这么多漏洞,那ATM肯定很不安全了,那我再告诉你ATM是从来不会更新系统补丁的,也就是系统的漏洞比我们想象的多得多。听到这些估计很多人要崩溃了,其实大可不必的啦,因为ATM的网络是一个独立的局域网,是不会连接到互联网上的,再高的高手想要攻击ATM也是不太可能的,所以国外什么黑客轻松控制ATM疯狂吐钱的报道可信度并不高,除非他们能接入到ATM连接的这个局域网去,再说要是能连接到这个网络我这个伪专业人士也能控制ATM疯狂吐钱的,所以那些天天吐槽ATM不安全的人可以洗洗睡去了。
4、ATM机的配置是不是都很高?
答:非也非也,现在市面上奔三奔四CPU、256RAM的机器比比皆是。你想想要是你要买个电脑只用来登个QQ看个网页的话有必要搞个骨灰级游戏玩家的配置么?ATM机无非就是跑个ATM软件,再装个杀毒软件啥的,普通家用机的配置完全毫无鸭梨。
5、为嘛我从存取一体机里面取出来的票子在同一台机器上却存不进去?
答:不用大惊小怪,这个非常正常。前面说过从存取一体机里面取出来的钱一般假不了,也就是说你取出来的钱99%是真钞,但为啥子就是存不进去呢?这是因为存取一体机存款一般都要比取款验钞要严格不少,所以出钞验证为真钞,存钞验证为不可识别钞票的情况是再正常不过的了,也许只是因为钞票缺了一个小角啥的,可以放心的拿出去花掉。
6、ATM取款时倒着输密码会不会报警?
答:明确告诉各位:不会。最近这个谣言在网络上传的轰轰烈烈的,尽快各位砖家叫兽反反复复出来辟谣,但还是有人会相信,这个东东只要自己仔细想想也知道是假的,比如说我把密码设成123321,那我每次做交易都会自动报警,警察蜀黍那不得累死了。事实上只要倒着的密码与实际密码不相同(当然也不建议设置顺序和倒序相同的密码),ATM上只会显示密码错的提示。
今天先简单八一八ATM软件相关东西吧。一般讲ATM软件业内都称之为ATMC,即ATM Client,能够在多种厂商的机器上运行的ATMC也被成为跨平台ATMC,这里的跨平台不是我们常说的跨操作系统,因为ATMC都是运行在Windows平台下的,所谓的跨平台只不过是能够兼容各厂商的各种型号的硬件设备。既然ATMC是在Windows下运行的,那开发ATMC程序的语言无非就那么几种:C++、C#或者Java,目前来说以使用C++的居多,毕竟大部分ATM的配置都不高,为了效率考虑还是用C++比较保险。
目前国内市场上ATMC软件占用率前两名的公司分别为深圳紫金和美国NCR,两者的占有率不相伯仲。其中深圳紫金占据了建行、交行、光大、兴业等中大型银行以及其他小银行若干,市场分割大概在30%左右;NCR则占据了工行、中行两大行和部分中小银行的份额,这两家公司基本上占据了国内50%~60%的市场。国内的话还有一家公司的实力也不容小觑,就是中国最大的ATM设备制造商广电运通,其在软件方面的实力也是非常不错的,前段时间刚将广发拿下,但由于市场已基本成形,要想抢占更大的份额也有些力不从心了。农行的话据说目前还没有上跨平台ATMC,ATM软件还是由各个ATM厂家负责开发。
貌似有不少人对ATM的安全机制比较感兴趣,今天就先介绍一下ATMC软件的密钥管理机制吧。
一般来讲ATMC用到的密钥有MasterKey、PinKey和MacKey,其中MasterKey(主密钥)主要用来解密后台下发的密钥,PinKey用来加密用户密码,MacKey用来计算报文Mac的。所有这些密钥当中尤以MasterKey最为重要,它主要负责解密后台下发的Pinkey和MacKey,解密使用的算法为3DES,MasterKey一般在ATM安装时手工输入(也有部分银行通过后台下发的)。PinKey和MacKey均由后台下发,且每天至少需要更新一次这两个密钥。由于ATM与后台主要通过TCP\IP报文进行通信,传输的报文有可能被截取,因此后台下发的报文中Pinkey和MacKey都已经使用MasterKey进行3DES加密,ATMC接收到Pinkey和Mackey后需要使用本地的MasterKey分别进行3DES解密后才能得到真正参与加密运算的PinKey和MacKey。实际上不管是MasterKey还是PinKey和MacKey,ATMC软件都是不允许记录和保存的(较早之前默认是由软件保存的,后来央行发文明令禁止该做法),在获取到这些密钥后首要的事情就将其是写到ATM的密码键盘里面,所有的加解密工作其实都由密码键盘完成的,这也就是传说中的硬加密,密码键盘其实就相当于一个小型的加密机。
客户在插卡输密码后密码键盘会根据ATMC软件送入的账号信息对输入的密码进行加密,生成PinBlock并返回给ATMC,生成PinBlock算法网上到处都是,我就不再累述了,ATMC会将这个PinBlock放置于交易报文中供后台校验密码。
MacKey的作用主要用于生成MAC校验值,这玩意其实与MD5差不多,主要用于防止报文在传输过程中被恶意篡改。ATMC在组装好一条交易报文后将整条报文(全报文加密)或关键域(关键域加密)传入密码键盘计算MAC,ATMC将密码键盘加密完毕后的MAC校验值添加到报文的特定位置(一般位于报文末尾),这样一条完整的报文就组好,可以发送到后台了。后台可以根据报文中的PINBLOCK和MAC校验值来确认用户密码是否正确和报文是否被篡改,后台接收到ATMC发送的报文后也会使用加密机计算一遍MAC校验值,如果计算出来的校验值与ATMC上送的校验值一致,则说明报文未被篡改,否则就会直接拒绝该笔交易。
以上呢就是ATM的加解密机制简要介绍,由于文笔不好,估计有不少人都看晕了,我再画个简单的流程图帮助大家理解:
带你揭开ATM的神秘面纱的更多相关文章
- 性能再提升70%?大咖前瞻带你揭开.NET6的神秘面纱!
本月初微软官宣.NET 6 的RC1即将在11月正式发布,这意味着.NET6正式版跟我们见面的时间又近了一步.在之前的.NET6预览版本中,微软加入了大量新功能特性,而在最终版本中将不再额外加入新的内 ...
- 揭开Future的神秘面纱——结果获取
前言 在前面的两篇博文中,已经介绍利用FutureTask任务的执行流程,以及利用其实现的cancel方法取消任务的情况.本篇就来介绍下,线程任务的结果获取. 系列目录 揭开Future的神秘面纱—— ...
- SparkSQL大数据实战:揭开Join的神秘面纱
本文来自 网易云社区 . Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景. Join背景介 ...
- 从一个Demo开始,揭开Netty的神秘面纱
本文是Netty系列第5篇 上一篇文章我们对于I/O多路复用.Java NIO包 和 Netty 的关系有了全面的认识. 到目前为止,我们已经从I/O模型出发,逐步接触到了Netty框架.这个过程中, ...
- ASP.NET 运行时详解 揭开请求过程神秘面纱
对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...
- 揭开Future的神秘面纱——任务执行
前言 此文承接之前的博文 解开Future的神秘面纱之取消任务 补充一些任务执行的一些细节,并从全局介绍程序的运行情况. 系列目录 揭开Future的神秘面纱——任务取消 揭开Future的神秘面纱— ...
- 揭开Future的神秘面纱——任务取消
系列目录: 揭开Future的神秘面纱——任务取消 揭开Future的神秘面纱——任务执行 揭开Future的神秘面纱——结果获取 使用案例 在之前写过的一篇随笔中已经提到了Future的应用场景和特 ...
- 揭开HTTPS的神秘面纱
摘自:https://www.cnblogs.com/hujingnb/p/11789728.html 揭开HTTPS的神秘面纱 在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了 ...
- 揭开Redis的神秘面纱
本篇博文将为你解开Redis的神秘面纱,通过阅读本篇博文你将了解到以下内容: 什么是Redis? 为什么选择 Redis? 什么场景下用Redis? Redis 支持哪些语言? Redis下载 Red ...
随机推荐
- 对sizeof的思考
一.sizeof的特点(与strlen比较) 1.sizeof是运算符,strlen是函数,这意味着编译程序在编译的时候就把sizeof计算过了,所以sizeof(x)可以用来定义数组维数. 例如 i ...
- SQL & PL/SQL 模块总结
SQL 1. 各种function 2. merge 3. connect by PL/SQL 1. pl/sql 寄出 2. 游标 3. procedure 4. function 5. packa ...
- JavaScript的严格模式
js除了在普通的常规模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).严格模式支持IE9+ Chrome FireFox 等主流浏览器. ...
- web设计经验<八>20个设计新手常犯的排版设计误区
很多同学问设哥,为什么别人字体就那么随意放一下就辣么好看,其实排版可有大学问,不是随意放就好看.这就如同配色一样,也有千变万化的学问.相信大家看完Designschool这篇头条热文,一定倍有收获. ...
- js call与apply的区别-Tom
.apply和.call方法是在函数原型中定义的两个方法(因此所有的函数都可以访问它)允许去手动设置函数调用的this值,他们用接受 的第一个参数作为this值,this 在调用的作用域中使用.这两个 ...
- JavaWeb学习总结(十三)--数据库连接池
一.数据库连接池的概念 用池来管理Connection,这可以重复使用Connection.有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Co ...
- boost中的智能指针
进行本地线程管理的 thread_specific_ptr 指针: 可以看这里:http://www.kingofcoders.com/viewNews.php?type=newsCpp&id ...
- HTML5Canvas标签
- Spring的线程池ThreadPoolTaskExecutor使用案例
1.Sping配置文件 <!-- 线程池配置 --> <bean id="threadPool" class="org.springframework. ...
- jdk1.6安装
下载jdk1.6 进入oracle官网,依次选择 Downloads-->Java SE-->拉倒网页最底部,点击Previous Releases - Java Archive后的DOE ...