作者的废话2014-11-27[IC]
好久都没写过废话了,真怀念啊~为什么那么喜欢写这个呢,那是因为可以随心所欲,为所欲为地写,完全不需要理会上下文,可以尽情地跑题,自由发挥,以至心情愉悦。最重要的,可以用工作时间来写,话说,这文写了一天半了。不知情的路人以为我在写工作报告,还写得这么认真^_^ 最近在做IC卡的项目呢,其实早些年也已经接触过IC卡的项目了,只是角色不一样,以前做的时候是搞网络系统那块的,关于通信用的报文格式之类,再者就是服务器上,那些钱怎么过账啊,对账啊,内部核算啊之类,而终端机、读卡器,也就是跟硬件卡通信那部分是别人负责,所以我了解得不多,而现在总算填补了我这个知识面或者说是认识面上的空白了。让我对目前基于信息货币的交易系统,整体上都有了一个了解。 电子银行不等于网上银行,电子银行是基于电子货币的银行。电子货币是指,货币以数据形式而存在。最理想的情况是,该货币会自己记录自己流过谁的手里,一旦这个货币被非法修改了,自身能发生不可逆转的错误。现实中,目前是不存在的。原因是暂时还没有一种靠谱的电子货币能做到这点,这意味着它们是可以被修改的。而网上银行不过是以数据形式通信和计价而已。它只代表货币的数量而不是货币本身。 嘛,先说哪个呢~ 考虑到读者们可能跟我不是一个职业的,或者说,就算是程序员,也分很多种,不一定是干这个的,干这个的,估计也不看我写的吹水文,所以,我就说些大家都关心的东东吧。关于IC卡的安全性问题。现在我就试着以解密者或犯罪者的角度思考一下,它是不是安全的。 首先,银行有不少于3套帐,一套在IC卡的芯片数据库里,一套在联机数据库里,一套在脱机数据库里。 IC卡取钱的时候,实际上是IC卡的芯片数据库和联机数据库的对账过程,只有两者一致,你的钱才取得出来。 然后为了防止IC卡和服务器的数据被非法修改,所以周期性地要手动地,用联机数据库比对脱机数据库。 所谓脱机数据库,就是不管黑客怎么厉害,都必须把自己的rou体打入银行最核心的地带,才有可能修改。 而且这些数据不会只放在一个物理位置上,它留了N个备份,由地方到上方都有。 这意味着,如果你能让IC卡的芯片数据库和联机数据库的数据相等,你就可以取钱,而当银行发现联机数据库和脱机数据库不相等的时候,就有人会来捉你。所以只有跨国犯罪者,才会在这个问题上动脑筋。当然我们现在只是探讨它是否安全,所以只考虑怎么取钱,怎么跑路的问题就不考虑了。 现在简单分为以下情况: 1,同时修改3套帐,并让所有数据相一致。这意味着除非你的帐号被盯上了,有专门的人员负责核查你的所有资金流动记录,并追查来源,否则不可能知道你帐号里的钱是无中生有的。但你不可能是一个普通人,你身后至少有一个跨国犯罪集团支撑,该集团的间谍,至少在各级银行的技术部都有人,而且级别还不能太低。但这种经营方式,成本太高了。而且你一次还无法转移太多的资产,因为大额资金调动,不会马上生效,银行肯定要追查资金来源的,那问题就会暴露出来。如果无法提现,那些数据不管怎么流动,只要不出国,最终还是能追回的。所以这种方案,只有在类似前苏联解体这类时代背景,这类高度整体腐败的大环境中才有可能执行。因为他们不需要外来间谍,他们自己就愿意这么做。 2,同时修改IC卡的芯片数据库和联机数据库。这意味着你可以去取钱,但倒计时也同时生效,你不会知道对方的办事效率有多高,但再怎么慢,2个月内一定有人来捉你,所以取了钱要马上出国,而且只能去那些战乱或边缘国家,先把自己的身份洗白了,再进行二次甚至三次移民。这种方案,我们下面再详细讨论是否有可能做到。 3,只修改IC卡的芯片数据库。嗯,如果是银行卡,你取不到钱的。如果是水电卡、饭堂卡和公车卡,都还可以考虑。因为这些卡一般都是脱机工作的。但金额不会多,而且很多甚至无法套现,所以你无足够资金跑路,将来做多了,说不定还是能捉到的。 4,不修改数据库,那用真实数据库吧。也就是复制别人的卡了。IC卡有很多种芯片,就算是同一种芯片,也可能使用不同的通信方式。一般地,我们找到一张软盘或光盘,里面的数据实际上已经全部以特定的物理方式表现在盘面上了,所以只需要把它扫描下来就能还原成数据。而IC卡却不一样,它是用芯片来存储数据的,也就是说,数据并不以物理方式暴露在物品的表面。要把它读出来,就要它自己提供主动通信才行。IC卡按其使用方式分为2大类,一类是接触式IC卡,一类是非接触式IC卡。两者的区别主要是供电方式和通信方式不同。接触式IC卡一般在卡面上露出金属质地的接触面,而非接触式IC则完全被塑料包裹着,当接收到射频信号时,会转化成自身的能源,供其运算,当它发现对方发出的信号符合其要求时,才会与之通信。所以,单就原理上说,复制的难度是相同的,没有指纹码,IC卡根本不会与外界交流数据。但由于接触式IC卡主要是早期研制的,设计时对抗性思想较不完善,所以较容易复制。而非接触式IC卡是新品,所以较难复制。接触式IC卡主要是技术很早就普及了,加上设备供应商的技术保密性太差,所以很多现成的读卡器都能完整地复制它们。而非接触式IC卡,其实也能通过探测真实IC卡与设备通信时,通过主动捉包,分析出信号后,用自己的设备模拟的。但问题是,这些后期研制的IC卡,设计时有了对抗性思维,知道你会这样对付它们,所以它们对外通信时,不会把整张卡的数据输出,导致你无法复制出一张100%相同的卡,而新复制的卡内部校验数据时,由于是不完整的,所以无法通过。所以相对来说,非接触式IC卡要比接触式IC卡安全得多。嗯,换个说法吧,单就技术上说,饭堂卡和公车卡就算不设密码,也比银行卡要安全得多。但按其保密性说,由于饭堂卡和公车卡通常采用最低成本的芯片,它的安全性自然要扣分的,加上设备供应商保密性太差,所以什么技术都不是秘密,反而就没银行卡安全了。银行为什么不换非接触式IC卡?个人认为是因为现成的ATM机和客户已经太多了,换起来是很高成本的。最后,即使把卡100%复制出来后,还得面对用户密码这个问题。这些卡如无密码,自然可直接使用。如果有密码,那情况又分为2种。一种是获知对方密码,一种是破解对方密码。获知主要是踩点跟踪和装摄像头,而破解密码的可行性,我们下面再详细讨论。 综上,我们以下需要讨论的问题有2个,一个是修改联机数据库的难度,一个是破解IC卡密码的难度。 关于联机数据库,并不是主要的议题,本文是写IC卡为主,所以在这里就随便地一笔带过吧。 联机数据库是运行在专用网上面的,这意味着黑客不管多厉害,都不可能坐自己家里去修改它。 方法有多种,最直接的就是踩点,即以间谍的方式进去机房控制室,把那里当自己家里一样用。 当然控制室不只一个人的,怎么摆平其他人就不在我们的讨论范围内了。 或者以外公司技术人员的名义找到银行的交换机的机房,在里面接自己的线,那就可以把专门网当作自己家的局域网一样用了。 当然机房也是有监控的,怎么混进去,就不在我们的讨论范围内了。 还有一种方法就是机房外部接线,如果线路架空的,关键部分通常带摄像头,而在地底下的,通常带感应器。 只要有物理线路接入,监控中心会马上知道,怎么对付他们,同样不在我们的讨论范围内。 像大风下雨什么的,出了一点小意外,以银行员工的工作态度,是不一定会在意的。 然后回到IC卡的问题上。 银行卡是每个人都有的,还有信用卡,社保(医保)卡,以及现在公车卡,饭堂卡,水费电费卡之类。这些东西,过去是ID卡,而现在的基本都是IC卡。 首先要说,卡的种类。按技术上划分,卡只有2种,一种是ID卡,一种是IC卡。 ID卡是指,卡上只记录了一个ID的卡,它通常是一种记忆卡,就是只能记忆不能运算。按其物理结构又分为多种,但所有的卡都有个共同点,就是不管它用什么方式来存储数据,但这些数据也只是为了记录一个唯一ID而已。学过阿拉伯数字的大大都明白,从0-999999,这里只有100万个唯一ID,意味着你占了,别人就不能用。但哪个发卡机构能像身份证一样规定我用了别人不能用?这意味着社会冲拆大量相同ID的卡,它们的ID相同而被不同的人持有,用来做不同的事情。所以这些卡是不能用来存钱的,因为太危险了。 IC卡是指,装了芯片的卡,又称为智能卡。它其实就跟U盘是差不多的东西,所不同的是,它的数据格式不是用户决定的,而是设备供应商决定的。而为了识别其发卡机构的唯一性,它有个由发卡机构定义的指纹码。最后才是个性化,它里面记录了持有者各种相关信息。由于持有者的信息被读到后要解释为原义,所以里面的信息只能用对称加密。这意味着IC卡的信息可能被明码试探,从而获知加密原理,可能被发卡机构以外的人员非法修改。所以IC卡又分为3种工作方式,分别是脱机、联机、混合。通常脱机方式是不让取钱的,因为这意味着发卡方只能在对方取走钱以后才能核查出来。所以几乎所有的大额消费卡类,至少是联机模式,要么是混合模式。所谓联机就是把IC卡当唯一ID卡来用,所有帐号信息均来自网络。所谓混合,就是你刷卡的时候,不仅要你卡上有钱,还要你在服务器里的帐号有钱才行。它会校对两者的信息,以防止你非法修改卡内数据,或非法入侵服务器。不管那边错了,你都取不了钱。 好了,说了那么多,那么IC卡是不是很安全呢? 答案是否的,实情是,它在某种意义上说,甚至比ID卡更危险。 在IC卡刚出生的时候,大家都觉得IC卡是唯一的,具有智能的,它能完爆ID卡几条街。情况就像WinXP刚出来的时候是没有病毒的,那是因为那些黑客还在研究Win9X系列,没适应WinXP,觉得它是新事物,过去的手段大多都用不了。然后微软说XP安全了,大家买XP吧。等XP普及了后,病毒只会比Win98更多,那是因为随着网络技术的普及,黑客的总数增加了。那么Win7Win8难道就没病毒了吗?病毒不是石头里爆出来的,要给黑客们更多的时间。 IC卡的安全,其实是建立在保密性的基础上的。 首先,IC卡其实只是一种带基础运算能力的存储设备,它里面的数据格式、加密方式、指纹码、用户密码等,都是不确定的。 这意味着每种IC卡的最终信息结构是不同的,在无情报基础上无法破解。 数据格式 加密方式 指纹码 用户密码=能用的卡 数据格式=x1 加密方式=x2 指纹码=y 用户密码=z 能用的卡=k 以上式子可以简单地表示成(x1 x2) y z=k 首先k是已知的,因为把IC卡塞到对应的机器里,能不能用马上知道了,但除非整套系统都是你家的,否则你不能随便试。被拉黑名单还是少事呢,吃牢饭就呜呜了~ 然后z也是已知的,因为你用来测试的IC卡肯定是你自己的,所以密码你可以随便设。然后你会问,你是想知道别人的密码啊,知道自己的有什么用?嗯,我的意思是,你想知道任意一个式子里的z这个未知数,你就先得获知x1/x2/y/k这4个变量才行,所以要先用已知的密码来推导。 接着,IC卡的加密机制和标准主要由国家密码管理局决定,但具体的细节却不是他们制订,而是由设备供应商和发卡机构协商解决。 一般情况下,x掌握在设备供应商手里,而y掌握在发卡机构手里。两者都是解密者无法知道的。 不管你多聪明,你都不可能用z和k推导出x和y,因为条件不足。 y,除非你派出间谍打入发卡机构内部,而且还要进入到他们的技术部门,找到最核心的文档,或是发卡机构自己腐败,内部泄漏机密,否则你不可能知道。 x,就难说了,因为设备供应商的数据格式和加密方式,除非那些特别大型的机构会自己订制外,很多都是用现成的,现成意味着相同,所以是有方法知道的。例如当你认识到某个IC卡系统的供应商是谁后,可以假装成他们的潜在客户,通过买他们的设备认识他们的技术人员,然后给点小费,以获得他们其它客户的信息。 呃,我说这些不是鼓励大大们犯罪,只是在讨论这些东西的安全性而已,毕竟我们都是最终用户嘛。今年新政策提出,以后银行破产,国家不埋单了,每个帐号最多赔50万,超过50万的有钱人,自己吃自己吧。嗯,扯远了,所以为了看出问题,我们要以犯罪者的角度思考嘛~ 现在假定你已经通过踩点知道了x,但不知道y,你拥有一张自己的卡z,那么理论上,你可以通过不断改变z来试探出y,但前提是k容忍你这么做。如果是银行的ATM机,k的容忍度就会很低,你不可能用这种方法试探出来。所以普通人是破不了银行IC卡的。 谁可以做到? 对k有无限容忍度的人可以做到,他们不是银行内部的小职员,因为即便银行内部人员也没有正式环境的设备可供测试,他们失败过几次就会受到上级关注,他们也不是设备供应商,因为设备供应商没有银行的核心数据库可供测试。只有银行主管技术的部门可以做到,但通常他们自己就已经拥有x和y的知情权,所以没必要做这种事,而且一旦出事,他们也是首先被怀疑的对象,所以他们那是高薪培养出来的保密意识。 综上,破解银行IC卡,不具备知情权的普通人是做不到的。 那么其它IC卡呢? 如果你确定那个设备没有联网使用,甚至不会记录你的个人信息,你可以随便试的,那k的容忍度就是无限的,这样的系统实际上已经被很多人破解出来了,而且估计已经在偷偷地卖,甚至光明正大地卖了。不过这些跟我们无关,因为损失的钱是系统拥有者的钱,而不是其它卡持有者的钱。能做到这点的人,通常是设备供应商的内部小职员,或是同行。他们最有可能自己拥有x,然后通过反复试探获得发卡机构的y,甚至连发卡机构的y都是他们自己帮忙设定的。
为什么我上面要把x拆分成(x1 x2)表示呢? 那是因为这2者通常都掌握在同一个群体手里,但它又是完全不同的2个东西。你知道y\z\k反过来,你只能推出x,而推不出x1和x2这2个分量,这意味着,你只能把卡当成黑盒子来读写通信,而不会知道里面实际上有什么。如果你把IC所存储的信息理解成一个无需知道的黑盒子,只考虑怎么跟它通信,那可以说它是x。如果你需要具体到知道它保存数据有哪些,你就得同时知道数据格式才行,在不知道加密方式的前提下,你是不可能破解出数据格式的。当然如果你本身就是知情者就另当别论。所以我说,能破解卡的人,通常是x的知情者,也就是供应商的内部人员。 综上,真卡和假卡通常都是同一帮人在造,他们的老板在帮助发卡机构造真卡,而手下绕过发卡机构卖假卡。 那么对我们自己,IC卡的危害有哪些呢? 最简单直接的危害就是小范围复制卡。 如果是大范围复制卡,造成大型事件,就是警方和发卡机构之间在忙活。但如果只是小范围,甚至只是针对个人的犯罪呢?那警察哥哥们不一定会在乎,发卡机构可能会认为你自己才是该负责的那个人,甚至不会有人赔偿你的损失。 复制一张IC卡的难度到底有多大? 前面已经说了,有些卡是无法复制的,而能够复制的卡,就是一张空白的IC卡,那是白菜价,不,是比白菜还便宜。工业成本也就几毛钱,来到你的手里,大概是1-2RMB。 说白了,就是把IC卡的数据读出来,再写入另一张IC卡而已。你不需要知道里面有什么,只需要100%复制过去就可以了。一个读写器的价格,大概是100-300RMB左右。而且很多其它用途的机器,甚至是手机,只要配合特定软件都能做到类似的事,所以甚至不需要专用设备。对于那些接触式IC卡,考虑到把读卡器装在终端机的读卡器入口外面,以蒙骗最终客户,外形需要订制,或是针对非接触式IC卡,通过跟踪你,在你PP后面隔住裤子或手袋按一下,需要一个距离,即更高的功率,价钱得提高一点,也不会超过1KRMB的。 但通过这种方法复制卡,复制方是不可能知道用户密码z的,原因前面已经说了,他们没有x和y,所以不可能破解出z。 综上,没有设用户密码的IC卡都是不可靠的,建议里面不要放太多钱,它们被偷走比你的钱包被扒掉还简单。在银行的终端里拿钱,记得看看头上有没有摄像头。如果有,一定要用身体进行遮挡,或干脆换一家。原则上,银行装摄像头的时候,是不能装在能看到你输入密码的手指的角度的,但国家那么大,笼子大了什么鸟都有。尤其是银行里的摄像头还不一定是他们自家的,就算是他们自己的,负责监控的职员的收入也不一定高到让他们自己满意。银行的高职谁会24小时泡在那里啊?以为可爱的小meimei们都是脱光了去取钱的么? 最后,最危险的,其实还是信用卡。 因为信用卡埋单的时候,需要刷卡和输入交易密码。如果遇到黑店,对方能记录你的IC卡完整的信息,并在你离开后写入另一张同银行的信用卡中。而且卡机在你输入交易密码的时候同时记录了你输入的信息,所以黑店会把大量的信用卡信息存起来,等过几个月,甚至过几年,一次集中使用,用完后,搞不好就换国籍了。 综上,信用卡里不要申请太高的信用额,建议不要自动还款,除非你用来还款那张银行卡的钱不多。因为信用卡里被盗的钱不是你的钱,是银行的钱,不管是否能追回来,所冻结的都是银行的流动资金,而银行卡里是你自己的钱,不管是否能追回来,都是冻结你自己的流动资金。至于经常改密码,虽然也能难住一些人,但对付信用卡密码有的是方法。虽然理想状况下,连续输错密码,信用卡会自己锁死。但也只是脱机锁死而已,即IC卡锁死的时候,银行实际上并没有锁死你的帐号,锁死状态只记录在卡里,对方拿原卡再复制一次就可以了,一张卡可以反复复制无数次,所以实际上是零成本的。尤其使用专用设备的时候,就连复制都省了,信用卡密码是可以无限试探的。在这个问题上,信用卡联机消费不会比脱机消费安全多少。因为你消费的时候虽然是联机消费,可只要你的卡本身支持脱机消费,你走了后,对方能在自己家里慢慢试。信用卡嘛,始终是个信用问题,交易双方都有信用,就啥事都没有了,所以说,别在不信任的店上贪方便。 结语,不能复制的卡只是少数,在没指纹码或用户密码的状况下,某些区域的数据不允许读写,所以无法完整复制,而多数卡还是可以复制的。银行卡就是那多数卡的一种,原因是它发行得够早,但它还是相当安全的,要取钱,一般情况下只能通过复制卡和盗取密码的办法。通常是直接在银行里ATM机上做手脚或人工监视ATM机,当然也可以买通监控中心的工作人员或外单位派来的设备维护人员。国情嘛,大家懂的。但取了钱很难捉不回来。当然,方法也不是没有,就是通过偷渡进入缅甸之类的低管国家。因为没鉴证,所以没人知道你到过,然后花点钱转换身份后再移民到目标国家,就没办法引渡了。但随着全球信息一体化的发展,以及随着中国对世界的影响力的加强,除非你移民前还整容了,否则还是要惶惶不可终日的。信用卡是不可信的,不过还好,它是无法直接套现的,在商品过剩的市场上。除了古董外,几乎没有东西可以买回来后以原价卖出去。而古董交易需要特殊途径,而且由于古董具有唯一性,即容易追查,增加了不少难度,这降低了它对犯罪者而言的吸引力。至于那些无密码的脱机卡则是完全不靠谱的东西,不过它们的金额通常都不大。所以花时间研究它们给自己用比较缺乏吸引力,而花时间把研究成果转化成商品,卖多了就容易被捉。所以结论是,国内犯罪的门槛不算低,大大们还是遵纪守法的好,想偷卡又不想出逃,最好的方法就是去别的不发达国家偷完再回国花。尤其是那些政权不稳定的国家,过几年,说不定连政府都换了,谁认得你啊。所谓兔子不吃窝边草,于国于己都是好事嘛^_^ 好了,到这里为止,本话题已经结束了,看看字数,貌似过万了~ 其实我的心地还算满善良的,我是很想为国家做点贡献的,可惜想为国家做贡献的人实在太多了,来来去去都没想到什么好的方法。芯片什么的,用起来不难,呃,就是不难才惨啊,啊猫啊狗个个都会,但研制又没我什么事。这社会真是不好混啊~