相信大家都用过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的神秘面纱的更多相关文章

  1. 性能再提升70%?大咖前瞻带你揭开.NET6的神秘面纱!

    本月初微软官宣.NET 6 的RC1即将在11月正式发布,这意味着.NET6正式版跟我们见面的时间又近了一步.在之前的.NET6预览版本中,微软加入了大量新功能特性,而在最终版本中将不再额外加入新的内 ...

  2. 揭开Future的神秘面纱——结果获取

    前言 在前面的两篇博文中,已经介绍利用FutureTask任务的执行流程,以及利用其实现的cancel方法取消任务的情况.本篇就来介绍下,线程任务的结果获取. 系列目录 揭开Future的神秘面纱—— ...

  3. SparkSQL大数据实战:揭开Join的神秘面纱

    本文来自 网易云社区 . Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景. Join背景介 ...

  4. 从一个Demo开始,揭开Netty的神秘面纱

    本文是Netty系列第5篇 上一篇文章我们对于I/O多路复用.Java NIO包 和 Netty 的关系有了全面的认识. 到目前为止,我们已经从I/O模型出发,逐步接触到了Netty框架.这个过程中, ...

  5. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  6. 揭开Future的神秘面纱——任务执行

    前言 此文承接之前的博文 解开Future的神秘面纱之取消任务 补充一些任务执行的一些细节,并从全局介绍程序的运行情况. 系列目录 揭开Future的神秘面纱——任务取消 揭开Future的神秘面纱— ...

  7. 揭开Future的神秘面纱——任务取消

    系列目录: 揭开Future的神秘面纱——任务取消 揭开Future的神秘面纱——任务执行 揭开Future的神秘面纱——结果获取 使用案例 在之前写过的一篇随笔中已经提到了Future的应用场景和特 ...

  8. 揭开HTTPS的神秘面纱

    摘自:https://www.cnblogs.com/hujingnb/p/11789728.html 揭开HTTPS的神秘面纱   在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了 ...

  9. 揭开Redis的神秘面纱

    本篇博文将为你解开Redis的神秘面纱,通过阅读本篇博文你将了解到以下内容: 什么是Redis? 为什么选择 Redis? 什么场景下用Redis? Redis 支持哪些语言? Redis下载 Red ...

随机推荐

  1. spring常用的工具类

    spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类, 而不想把一个大大的spring工程给引入 ...

  2. oracle的正则表达式

    阅读目录 1.oracle(regular expression)简单介绍 2.oracle正则特殊字符 3.oracle正则字符簇 4.各种操作符的运算优先级 5.模拟测试例子 6.oracle对应 ...

  3. maven入门

    1.1.项目构建 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 项目构建过程包括 ...

  4. html5实现GIF动画!

     代码如下: <!DOCTYPE html><html>    <head>        <meta charset="utf-8"&g ...

  5. js 高程(三)学习感言(随时更新)

    1.读第二遍了,感觉第一遍白读了. 2.现在还处于初学...

  6. Python核心编程-基础2

    open() 和 file() 函数会同时存在, 完成相同的功能.一般说来, 我们建议使用 open() 来读写文件, 在您想说明您在处理文件对象时使用 file() , 例如 if instance ...

  7. \r\n在php中有什么用

    \t \r \n 这是不是表现在html上的,你要看源代码才能看到效果,直接显示页面换行用<br />就可以了.\t \r \n 的话,你要用函数nl2br 才能在html页面上看到.写日 ...

  8. 解决PhoneGap不支持viewport的几种方法

    前几天用phonegap编译GameBuilder+CanTK时,发现HTML里的viewport无效.CanTK根据devicePixelRatio检测设备的DPI,然后用viewport设置正确的 ...

  9. java的HashMap与ConcurrentHashMap

    好像今天没有什么源码读,那么就来看看java的这两种HashMap有啥不一样的地方吧,在这之前先普及一下HashMap的一些基本知识: (1)放入HashMap的元素是key-value对. (2)底 ...

  10. (18)odoo规范

    * 约定    # 命名会用  蛇形式或驼峰式        todo_task_stage 蛇形式        class TodoTask 驼峰式      变量名还是蛇形居多, 类名和方法名驼 ...