Shell's Home

fork两问

Feb 1, 2013 - 1 minute read - Comments

问题1 以下代码。 int main() { fork(); fork(); fork(); printf("---n"); return 0; } 编译后执行./a.out | wc -l,输出多少? 问题2 以下代码。 int main() { fork(); printf("b"); if (fork() == 0) { write(1, "a", 1); }else{ write(1, "c", 1); } return 0; } 编译后执行./a.out,输出多少? 答案 第一个是8,因为pipe会继承。 第二个是cabcbbab,结果不恒定,原因比较复杂。至少应当能看懂2个a2个c4个b,c先出ab后出最后一个是b。

修正问题,让debian testing使用lxc

Jan 23, 2013 - 1 minute read - Comments

目前debian testing里面的lxc是无法运作的。原因是live-debconfig这个包只在sid中存在,而lxc是借助这个包来做系统初始化设定的。没有设定就结束初始化会挂掉系统。 解决方法如下: dget -x http://ftp.de.debian.org/debian/pool/main/l/lxc/lxc_0.9.0~alpha2-4.dsc 可能因为没有key而无法解压,用dpkg-source -x解压开内容即可。 aptitude install autotools-dev docbook2x libapparmor-dev libcap-dev linux-libc-dev 然后进入目录,dpkg-buildpackage -rfakeroot -d进行编译。 退出目录,dpkg -i lxc…进行安装。 到/usr/share/lxc/packages/,wget http://ftp.cn.debian.org/debian/pool/main/l/live-debconfig/live-debconfig_4.0~a15-1_all.deb。 然后再执行常规操作。 lxc-create -n vm0 -t debian lxc-start -n vm0 启动正常了。 在debian wheezy 3.2.0-4-686-pae下测试通过。

封抢票插件究竟封的谁

Jan 19, 2013 - 1 minute read - Comments

12306抢票插件被工信部封杀的事情相信大家都听说了,具体我就不细说了。 首先说明一下我的立场。我不需要春节回老家,用不着。所以我也不抢火车票。你们不用质疑我吃不着葡萄说葡萄酸,也不用骂我仗着技术欺负你们。我只是把我看到的和想到的说出来,仅此而已。 我先简单说一下,抢票插件的工作机理。需要说明的是,由于我自己不用,封杀后也比较难找到渠道弄一份来。我是通过作者叙述反推和猜测工作机制的。如果有问题,请联系我,我尽量修改。 此事合不合理 个人认为,12306抢票工具,主要简化了铁道部系统登录,刷票,购票的过程,使这个过程更加简洁。就我个人理解而言,抢票插件是针对铁道部的12306定制的一个http工具组。他的主要功能,就是在铁道部不合理的UI上,加了一层包装,方便用户使用,仅此而已。 为什么这么说?我们反过来看,站在程序员的角度,如果要恶意抢票,有什么办法? 使用phantomjs。phantomjs是一个headless browser,每个phantomjs实例大约是20M内存,可以模拟一个独立的浏览器。如果网络撑的住的话,一台8G内存的机器,最多可以开启400个会话,模拟400个浏览器同时登录。由于12306没有限制一个IP可以登录几个人,因此在phantomjs上面写抢票插件,可以做到400个浏览器同时刷票的效果。 使用python开发定制化爬虫。这个是我的专长领域,我用这种技术对多个网站做过爬虫,抓上面的内容。采用这种技术的情况下,每个实例大约消耗8M内存。因此上面的机器可以支撑1000个浏览器。 把程序改用go写,并且将程序并行化。我没这么做过,不过大致估算了一下,租个4G内存的云主机,大约可以支持2000个以上的会话,相当于2000人同时抢票的效果。按照盛大云的价格来算,租个10天用来抢票只要160块,即使是个人也可以轻易租上百台,相当于20W个人同时抢票。 以上估算有两个问题,一个是校验码,一个是支付。 校验码通常使用OCR可以解决,铁道部的校验码本身重码率就很高,内容识别出来就等于知道答案。而OCR,对于有经验的程序员来说,只是成功率问题而已。 退一步说,OCR不解决也不是什么问题。OCR和支付让人工来做,其余事情系统自动处理。这样的系统也不是没有。 好吧,你们想象一下看看,以上一个系统,是怎么样一个存在?20W人同时抢票,你觉得自己胜算几何? 当然,你会反驳说花个近2W租服务器写程序有什么了不起的。是没什么了不起的,不过如果你抢不到票,花10块帮你抢票你做不做?一天只要抢200张票就够服务器开销哦。只要抢个400张票就可以满足开发成本哦。你觉得20W人连续不断抢票,一天抢不到1000张么?你太天真了。 这才是真正不合理的事情。 这些事情,抢票插件都没做。 封的住么? 我很怀疑这件事。别人不说,我专长就是写python爬虫。所以很明白,你要封掉爬虫,从技术上很难,得从业务上下手才行。至于行政手段,脑子进水了吧。 为什么?拿前几天的一个小事来说吧。我想看小说,某个网站允许看,但是只有会员才能下。没办法,我拿chromium调试了一下,然后写了个python脚本爬下来50多M的小说。加起来总共也没花10分钟。然后我去网络上问了一下谁有兴趣,把程序传给他们,就不管了。 看,爬虫就是这么简单的一件事情。 而且还有github在。如果要联合几个朋友写个爬虫,每人一个页面,我估计也是几个小时内可以完工的。 行政手段?那最多只能让普通用户找不到可用的插件,却不会让程序员写不出可用的代码,更不会让心存恶意的人止步。 密码学常说,不能指望对方不了解你的机制来保护安全(术语称为黑盒机制)。必须让所有人都能够看到过程。在这种情况下,你的信息仍然是安全的,那才是真正的安全。 当你的网站不安全,抓几个用漏洞的人来处分掉就假装网站安全了?你的改进呢?你的补丁呢?你是鸵鸟么? 铁道部的网站,就是这么个黑盒。明明大部分程序员都可以很容易的爬来爬去,却禁止让一般民众接触到这个事实,假装这件事情不存在。 事情的后果 也许有人说了,既然都写的出,你为什么不写一个?上面说了,我没必要抢火车票。再说,大部分抢火车票的程序员有好用的插件,为什么还要自己写一个? 现在,我假定普通人再也不能通过简简单单的装个插件抢火车票了。你们没发现这意味着什么么?这意味着有知识和能力者,和普通人,被彻底的分开了。尽管以前,有技术的翻墙,没技术的被墙。我们仍然可以假装这个事情和我们没有关系,可以假装这个世界仍然很美好。但是今天,有技术有知识有资本的仍然可以凭借技术弄票,没技术的就只能干瞪眼。 这是更大的不公,而且可以产生恶意的寻租。 原本程序员写个刷票程序是没什么好处的。虽然刷票快,但是普通民众也可以装个刷票工具来刷票。你那20W刷票大军碰到全国的刷票机器,恐怕也得缩着。既然普通人不能使用插件了,只能用浏览器慢慢的刷。那么,允许我大胆的猜一下——职业刷票者的黄金时代到了。 租个云主机,然后用专用的程序帮别人刷票。通过淘宝先交易,付定金,拿身份证,刷票卖。整个流程链太成熟了。现在唯一的麻烦——普通人自己有刷票工具——都不存在了,真完美。 别以为做技术的多清高,真清高就不会有做木马的了。 封掉插件便宜了谁 在讨论抢票插件前,先弄明白,谁在用抢票插件?是大多数不会技术的普通民众。谁在消费抢票插件?是各大浏览器厂商。这本就是不应存在的东西,你见过有刷秒杀的工具,你见过刷淘宝的工具么? 浏览器厂商为什么拿抢票插件当卖点?因为那玩意做的烂,你还不能不用。 封掉抢票插件便宜了谁?我不知道,反正不是每个买不到票的人。 此事不合理和不合法 而且,此事开了一个很不好的先河。网络不是法外之地,要封人也要讲一个合理合法。先不说抢票插件的合理性,单从合法性而言就显然不对。工业和信息化部作为行业管理部门,主要是管规划、管政策、管标准,指导行业发展,但不干预企业生产经营活动。你什么时候见过一家公司做了个产品,工薪部上去指手画脚的? 除非这个产品影响了整个行业生态。就像当初的QQ和360。 抢票插件哪里影响到计算机行业生态了?他只是影响了12306这一家网站的稳定性吧。如果因为网站的稳定性就可以让工信部出手约谈的话,那搜狗爬虫乱爬我网站,我写了robots.txt他也不管,这事工信部管不管啊?电信给我访问里插广告,这事情工信部又管不管啊?

2.4G网络冲突问题

Jan 9, 2013 - 1 minute read - Comments

由于2.4G是各个国家共同保留的一个非牌照频率,如果商家打算做什么无线通信的玩意,又不打算申请频率,那就只有用2.4G。因此,其实很多设备在无意中都在使用这个频率,他们之间会互相干扰的。 蓝牙 无绳电话 部分微波炉 无线网卡 无线门铃 深圳某地铁公司的信号闭塞系统。。。 某种设备的信号,对其他设备来说就是噪音。高速传输设备,尤其是wifi,在高噪音的环境下速度很慢。 因此,建议在复杂环境下的wifi用户尽速迁往5G频率。你家要是无线环境很干净(例如我这里,屋子电磁屏蔽好),那就不是很着急。

2013南方周末事件后续1

Jan 8, 2013 - 1 minute read - Comments

事实变化 首先和大家道歉。在上一篇《传播学角度分析2013南方周末事件》中,我提到一个事实,就是审稿的人自己动手。现在事情还原出来,并非如此。从描述来看,动手的还是报社总编和副总编。具体可以看《南方周末》编辑部披露2013新年特刊制作过程指违反编辑流程。这总算解我一个心头疑惑,为什么宣传部会干出这么蠢的事情,公然违反编审原则。 当然,这不是说他们不傻。要评价的话,大概就是40的智商可以升到60了。为什么?尽管没有自己动手,但是在审稿通过上严重违反流程,直接导致新闻事故。 什么是新闻流程 我曾经南方日报社出过差,貌似听过他们的编辑讲解采写流程。不过脑子里没印象了。现在脑子里记得是其他报业的采写流程,而且也不真切。要是有编辑看到里面有错,麻烦帮我纠正。 首先我们从采写说起。报业得到新闻线索,先是记者得去现场,这个称为采写。采写回来的稿件称为待编稿,然后就是编辑部的事情了。 编辑部有几种来源,记者采写,新华社稿件,还有对于大型事件,编辑可以自己写点评。无论哪种来源,编辑对原始材料进行编辑,交给版面主编审查。这一步主要是看文章方向,立意,尺度,如果不合格,就退回去再改。 编辑大约是下午2点-4点上班,要在晚上8点前搞定稿件。 通过版面主编审核的稿件,就是基本就初稿了。然后稿件会交给主编,校对,审读走流程。这个流程每个报业都不一样,我记得的流程是主编,审读,校对,不知道有没有错。流程走过后,稿子就会存在系统里面,由排版部门进行排版。根据版面的特性,排版部门也会有微调。例如删去几个字,保持行的利用率等。但是一般不做内容调整了。 排版大约是晚上9点到11点之间,最晚不能晚于12点。 排版后,好像会由版面主编,总编,和宣传部的人再看一遍,把握文章尺度和原则。如果这里过了,版面主编,宣传部的人,总编会在版面上签字,确认内容可以出版。这个叫签版,谁签版谁负责。这期间编辑不能走。因为如果出现问题,需要再修改。如果被枪毙,就需要用替换稿件填充。所以编辑要随时待命。 12点前,逐个版面签字确认后,就送印刷厂了。印刷厂最迟2点拿到稿子,大约4-6点左右完成印刷,然后6点前就要由物流发行到全市。迟了就是新闻事故。常规日报就是这样出出来的。 这次呢? 从更新一些的信息来还原,这次的事件,流程是这样的。 编辑写稿子,然后主编审核,给毙了。改了内容,和宣传部沟通后,给过了。到这里为止,和普通新闻稿件流程也没什么异常。 然后去排版,排版过了,宣传部还要修改。从这里开始,问题就来了。传统上说,如果一篇文章到了排版流程,还是有异议。主编一般会用备稿替换。但是题词这么大个东西,没法换稿子,编辑又放假。所以主编和副主编根据宣传部指令操刀,跳过新闻流程,直接改内容。结局就是这么一份四不像的玩意。 为什么不在修改后走流程呢?关键在于这个时间点。如果是晚上9-12点间,一切好商量。编辑还在,排版也在,校对都在。问题是时间一到,按照传统就OK了,大家都走人了。突然出现无法出版,要再召集大家回来走流程,就会拖过晚上2点的期限,导致来不及印刷,一样是新闻事故。 当然,我从南方系看到的时间表和我记忆中并不一样。不知道是因为休假的关系(休假的内容需要提前做好),还是因为南方报业的时间本身就不一致。但是无论如何,如果内容修改拖到照排之前,出新闻事故几乎是必然的事情。 问题在哪里? 从一开始就有问题。对于不能替换的内容,一定是事先定稿。要干预修改都应当在定稿期间做。哪里有重要报道到上印刷机前才开始修的。所以事情可以定性,这是一个新闻流程事故。问题是谁是始作俑者。 其次,万一出问题,也不应当强行修改。万不得已的情况下,删掉稿子,用备稿替换,重新编辑。当然这也是新闻事故,但是程度小很多,不至于搞到今天这样沸沸扬扬。然而对于特别重要版面,完全可能没有备用可选。 目前的问题是,具体情况到底如何?只有员工的回忆和披露,没有调查,没有真相。我也觉得事情中有些蹊跷的地方,无法自圆其说。然而,编辑们的要求是调查真相,而不是一味的推卸,这是理性诉求。相反,是不是有某大佬事情,现在尚没有定论。然而某些人对此大动干戈,才是让人感到他在欲盖弥彰的原因所在。 最后,对于引起群众热议的事情,不应当使用暴力手段。群众的特征是你不顺着他说,好事都能变成丑闻,何况原本就是丑闻。当然,以贝壳个人的分析,这未必是幕后的本意。很可能是事已至此,只能如此一搏以自救。

传播学角度分析2013南方周末事件

Jan 7, 2013 - 1 minute read - Comments

也许blog又要被封了。不过管它呢。总是计较封与不封,自我审查内容,和墙内何异? 题记 Freedom consists not in doing what we like, but in having the right to do what we ought. — Pope John Paul II 始末 不多评述,请看这里 评论 之所以我会特意上来写一篇,是因为这严重的违反了传媒理论。我说的不是传媒自由,或者舆论监督。中国历来没这东西,我已经不是很奇怪了。然而传统上,管理媒体的手段叫做“述而不作“。白话来说就是挑话说。有些事情说,有些事情不说。有些不能不说的事情往轻里说,有些没啥大不了的事情往重里说。这种伎俩在宣传上是常规手段,即使以新闻自由而著称的美国,也不能免俗。你看共和党的报纸有骂自己人的么?都是轻描淡写吧? 然而,挑话说的基础,就是说话的人和审稿的人必须分离,即编审分离。为什么分离?一方面,有一部分原因是因为审稿人并没有精力亲自操刀写所有的文章。然而另一方面,则是警惕一人稿的视角同一化问题。最后,也是最重要的。必须让编辑有权力不发稿件。如果编辑认为发稿件会严重影响他的声誉,他有权不发。如果稿子非发不可,往往会署名新华社稿,或者是化名稿。这是整个新闻系统的传统。 在此之上,才是传媒管理手段。大部分传媒管理手段都是通过指令的形式下发。例如XX事件不许报,XX事件要重点报。不要想当然的认为传媒管理手段是破坏新闻自由,天下新闻何其多,天天写你没兴趣的东西,报纸不亏才有鬼。传媒管理手段在任何报业都必然存在,只是中宣部利用传媒管理手段表达自己的意志而已。好一点的媒体,这些指令都是公开的。例如某个事件不许报,会有明令,哪个范围不许报。糟糕一点的就是黑审查,对外只是含糊的说,这些东西不合格。编辑就得漫天猜,这又踩着哪路神仙的线了阿。 本次事件和上述情况都不同。本次事件最恶劣的一点,就是强行删改作者稿件,还居然署原作者名。如果对稿件不满意,退。还不满意,删。这都是报业常态了。我们曾为报业做采编系统,业务逻辑中居然有三重审查系统。实际上只有第一重和质量管理有关,后两重都是意识形态管理。然而对内容不满,处理方式也是退稿,或者不让上。从来没听说过有业务需求是审稿者自己可以操刀修改稿件的。在系统中,唯一有权利又审稿又操刀的只有主编,而且主编操刀一般都会把名字列在首位,大半作者也觉得很光荣——如果不是被主编骂了个狗血淋头的话。 然而本次事件首开先例,审稿者自己操刀修改内容。这本就违反常规流程。更SB的是,丫居然还改出一堆错误。短短的150字按语,被人挑出数个错误。这操刀者的水准可想而知——我觉得他的小学语文老师应当剖腹自尽以谢天下。 得,既然出了新闻事故,总要有人负责吧。本来这种传媒责任是谁写谁负责,审查人员最多同责。然而作者很无辜阿——这TM不是我写的,写个新年题词还不多检查检查谨防出错阿。谁想到上面直接修改内容,还改出了错误。所以按道理说,让作者负责是不对的。不过估计这次上面拉不下脸,硬要搞作者,编辑们看不下去了。 ——想也知道,这种事情本来就不是自己问题。要是这么搞也可以,干脆别混了,反正哪天一个不小心也会流弹中到自己头上。编辑们必然人人自危。 现状 配合官媒态度,还有夺权发声明的强硬手段,这必然是幕后黑手在自救。如果事情是最上面授权,早就全国指令下去,一字也不会多说了。必然是上面觉得这事情办的很蠢,在考虑是否要和此人做切割。幕后黑手狗急跳墙,试图做成铁案,好让自己脱身。 审查之殇 未成年而夭则称殇,新闻审查已经是潮流,照例不应用殇字。然而和传媒比起来,审查和新闻管理手段确实如同小孩子一样。本次传媒对应上所犯下的最大错误是,使用传统媒体的手法处理新媒体,把听众当作没有思考能力的白痴来处理。这就如同白天却蒙着眼睛走路,捅到马蜂窝还不肯摘下一般可笑。 我曾在大学学传播学的时候,和老师讨论过传播路径和审查机制。当时的共识是,对具备中心路径的传播模式,会产生审查。审查的效果是消除广告和不实消息,问题是信息可能被操纵。离散的传播模式则没有审查,好处是信息比较全面,坏处是广告和不实消息比较多。 当时我就曾经想设计一种传播工具,具备消除广告和不实消息的能力,又不会被中心节点控制。作为结果,我给老师提出了一篇论文,论述了一种分布式系统——Diet。借助点对点信息传播模式工作,使用公钥签名信任体系鉴定个人。每个人和其他人会产生一些逻辑关系,每个人在阅读消息后,可以决定删除或者传递给下一个人。 是不是很眼熟?是的,当时我没有能力实现的系统,和今天的微薄非常类似。当然,我当时并没有提出140字限制。而且在新闻自由的美国也不用考虑中心节点消除的问题。所以微薄的形态和我想象中略有不同。然而微薄确实实现了一个无中心管理的自媒体群,而且随着用户的完善还会产生过程流。 如果审查继续下去,会不会有人把分布式的版本实现出来?我不知道。这太踩中宣部的线了。但是从理论上,这一工具完备,而且很难封锁。 然而从本质上,破除审查的,并不是工具,而是每个人在畏惧之前的一小步。我们都是凡人,要我们无所畏惧的抵抗,或者为别人奋斗是不可能的。然而在我们屈从别人的意志,自我审查,抹灭良心之前,可以向前走一小步。这是个人的一小步,然而会是社会前进的一大步。我们不需要英雄,我们更不能够把希望寄托在英雄身上。“让某个人带着时代的意志奋斗”这种话就和“你什么都别做就好”一样,是彻彻底底的谎言。我相信,谎言无法替代真相。哪怕我们最终不能获得成果,然而顺应自己的良心,向前走的这一小步是非常重要的。也许这一小步,能为别人,为你个人带来短暂的光明。

关于民用航空上禁止使用电子设备的分析

Jan 5, 2013 - 1 minute read - Comments

适用对象 本文论述的电子设备,包括以下几类: 不显式使用无线信号通讯,仅在工作时被动发出噪声的电子设备 使用2.4GHz频段和5GHz频段的wifi类和蓝牙类短距离通信设备 使用800MHz和1800MHz频段的长距离通信设备 本文论述的设备,不包括非法无绳电话等设备。尤其是不要把非法无绳电话当作普通的无绳电话,那玩意使用伞状天线,覆盖范围最高可以达30公里,根本就是私人设的无线电基台。使用频率又和飞机一致,飞机从上面过,通信马上就被干扰了。 飞机无线系统的工作状态 飞机自身也是大型机电设备,也会显式的使用无线进行通讯和导航,或者做系统控制(但是下面某个事故案例表明,使用无线作为系统控制是不可能的,飞行中的系统控制必然使用有线)。 飞机主要会使用的无线用途包括两大类,通讯和导航。 根据我在这里找到的资料,飞机常规的通讯频率为118.000~135.975MHZ。同时,中国民用航空总局无线电管理委员会办公室的某份文件佐证了这一说法。因此,常规飞机的主要通讯频率为121.5MHz、243MHz两大频率段。 而导航则比较复杂。如果是GPS导航,一般的L1频率段是1575.42MHz,L2的频率为1228MHz。而近距离的多普勒雷达和机载天气雷达工作范围都在1-10cm波长下(这个受限于天气因素),频率大约是3GHz-30GHz。CAAC的文件规定,中国范围内的多普勒天气雷达的X波段为9300-9700MHz,C波段为5300-5700MHz,S波段为2700-2900MHz。 飞机对无线信号的耐受性 首先,如果飞机的通讯频率被大功率干扰,可能引发地面引导失效,造成严重后果。因此,飞机的通讯频率(121.5MHz、243MHz),GPS频率,都不允许同频率信号。 另外,如果干扰设备功率足够大,频率又处于比较高的位置。那么可能引发混叠现象,干扰低频设备的工作(不知道我有没有理解错误)。因此,在飞机上应当禁用任何高频率的大功率设备。 航飞安全禁令的来由 目前在各种航班上实行的安全禁令,是由FCC在1991年所规定的,并得到FAA的支持。然而,这一禁令最初针对的是上个世代的水壶型大哥大设备等,而且当时的飞行设备并没有经过专门考量,对民用的广泛分布的无线信号做出抵抗。由于当时基台密度比现在远低,因此这些设备的发射功率比目前的手机要大上很多,1-2W属于常态功率。因此FCC顾虑到,在飞机上使用手机可能对飞机的通信造成安全,从而影响顾客人身安全。因此,尽管没有明显而直接的证据,但是FCC仍旧颁布禁令,禁止在飞机上使用手机。 一点直接的佐证即是,飞机上并没有配置无线信号定位系统。如果手机真的对飞行安全形成了直接的威胁,那么飞机上必然会配置手持式无线信号定位装置,借助三角定位法找出未关闭的手机。从无线技术原理上说,这是做的到的。这种做法可以有效补强空乘人员寻找手机的漏洞。正是由于手机的威胁仅仅是间接证据推测,因此飞机上始终未曾配备这些设备。 这里体现的是一种谨慎原则,当某个新鲜事务可能对人类产生威胁时,如果没有明确证据表明“没有威胁”,则默认断言“存在威胁”。在面对未知的,新生的事务中,谨慎原则不止一次的拯救过人类。当然,与此相对的,也不止一次的由于过度谨慎而坑过爹。然而在综合双方带来的影响后,人类仍然坚持了谨慎原则。这本质上是对有利可图的商家,国家,或者其他掌握力量的个人或组织的警惕。 但是,在经过长时间的接触后,谨慎原则是否适用,可能会需要重新评估。如果坚守谨慎原则,第一件应当被禁止的事情不是飞机上的手机,而是汽车。全球每年死于车祸的人高达几十万,只要禁用掉汽车就没这个问题了。可是谁也不曾提出过禁止汽车上路(中国某些部门的新交通法规是个例外)。正是因为人们感受到,汽车对人类带来的好处远远大于造成的问题。 同样,电子设备是否可以用于飞机上,这个问题也需要随着电子工程的发展和电子产品深入人们的生活而重新评估。在这里可以毫不客气的说,由于电子产品已经深入了人们的日常生活,成为生活的一部分。如果无原则的坚持禁令,就是反人类。在这种情况下,需要考量的不是坚持还是不坚持禁令的问题,而是需要重新审视和设计,制造飞行器,使其可以满足人类随时进行通讯的基本需求。 对于不显式发出无线信号的设备 这类设备没什么好禁用的。不过这句话要说的比较严密,应当是加上限制,在设备本身辐射不大的情况下。显然,微波炉本身也不显式的发出无线信号,可是那玩意的电磁泄漏明显不适合在飞机上使用。 但是话说回来,有几个SB会把微波炉带上飞机的! 而且很大程度上,这类设备并不能真的“禁用”,因为不少人类生活严重依赖于电子设备,例如人工心脏起搏器,或者是电动轮椅,助听器。固然,航飞部门可以发布警告,提醒使用以上设备的人乘坐飞机的风险。但是不能在没有明显理由的情况下拒绝乘客,因为他们使用了助听器。 对于使用2.4G和5G频段的短距离通信设备 2.4G是国际规定的无线保留频段,使用这个频段不需要特殊的申请或者执照。因此,如果在2.4G引发了干扰,干扰源又是按照标准(<100mW)的,那么被干扰者只有自己摸摸鼻子认倒霉。例如深圳某地铁使用2.4G频段作为闭塞用,结果被干扰导致列车老停车,这就明显是设计者考虑不周。 频段上没问题了,我们再说说功率。常规的wifi设备功率都在50mW以下,而且一般功率只小不大。因为发射功率的增加是以增加耗电量为代价的,便携设备哪里来那么多电给你消耗。真正功率比较大的,常见的是用于蹭别人家网用的特制无线网卡,俗称“卡皇”。其功率从200mW到数瓦不等。部分设备甚至可以截听公里级别的wifi信号,功率超过手机。这部分违规设备应当严禁携带上飞机。 对于100mW以下的合法设备,不应当处于飞机无线管制的范围内。预计在可见的将来,针对近距离通讯设备的禁令就可能会解除。即飞机上的广播中,应当会去掉“请关闭手机的无线功能”等。作为作证,可以参考这条新闻,云南三架飞机将提供WIFI服务。如果不取消禁令,又自行提供wifi信号,岂不是自打嘴巴?当然,安全起见,在飞机的起飞和降落期间还是应当关闭wifi热点。 使用800M和1800M频段的通信设备 这个又要分的比较严密了。这类的设备主要分为两种,GSM和CMDA2000。严格来说,GSM的信道才是900MHz,1800MHz和1900MHz,CDMA2000的信道是上行1920~1980MHz,下行2110~2170MHz。功率都是1-2W左右。 然而GSM方式造成的干扰比CDMA方式严重的多。因为CDMA基于码分多址,而GSM基于时分复用。由于是时分复用,因此设备只能在许可时隙内发射信号,信号呈脉冲型。脉冲型的信号调制就坑爹了,因为脉冲信号的开始和结束时会对其他频率造成影响。关于这点我不知道怎么向没有高等数学基础的读者表达,大致理论是一个方波可以被变换为一系列正弦波的加成。 由于这一特性,因此FCC才会顾虑GSM对飞机通讯系统的干扰。 因此,我觉得航飞系统未来可能考虑解除CDMA的禁令,或者更进一步,在机内部署低功率CDMA基站。因为CDMA对其他信道的干扰小,而基站在附近产生的干扰更加小。在机内建立基站有几个好处。 降低手机辐射。非常悖论的,当手机无法接收信号的时候,其功率最大。因此一旦在飞机内建立基站,手机的发射功率就会受到控制。 将CDMA转为飞机可以容耐的地-空通讯,提供飞机上拨打电话的功能。当然,这个特性可以作为飞机服务加以运营。 至于GSM,貌似在可见的未来并不会纳入考量。 飞行模式 鉴于飞机上不允许使用手机,而智能机又迅速普及,很多厂家推出了“飞行模式”功能。飞行模式的原理,在于手机可以通过软件关闭GSM通讯模块和wifi/蓝牙通讯模块,从而使得设备从普通通讯设备变成不显式发出无线信号的设备。从原理上说,这确实是可行的。 然而很多航空并不买账,其机上禁令仍然包括“飞行模式”。 我不知道这基于一个什么样的理由,至少不是纯技术层面的理由。因为从技术上说,飞行模式的手机产生的干扰远比电脑低。根据某些报道,这可能是由于山寨手机厂出品的手机,并没有真的实现“飞行模式”,而是仍旧发射无线电,只是软件上禁止了接入和拨出。 不得不说,很多事情就坏在这些SB身上了。 关于飞机上的手机信号 即使在飞机上完全没有手机的情况下,也无法隔绝手机信号对飞机的影响。大功率基站在没有干扰的情况下,覆盖范围可达10公里,而飞机一般的飞行高度都在3公里-10公里之间。因此如果飞机围绕着一部基站盘旋,从飞机上完全可以进行手机通话。当然,如果飞机沿着径向行驶,那么会引起很强的多普勒效应(比火车速度快很多),从而造成拨打困难。所以说,运气好的情况下在空中开机居然还有信号,就是这个道理。作为例子,在911事件中,有部分乘客可以通过手机向外部传递信息。 鉴于此,也许在10年后,由于飞机的更新换代,老机型的淘汰。上飞机就不需要关闭手机了。 关于1991年某飞机因为手机反推装置打开的说明 网络上多半是流传1991年某英国航空,我找了一下空难列表,1991年反推事故的貌似只有劳达航空004号班机号空难(也称奥地利航空,不过好像被收购过,所以具体不明),具体可以看wikipedia页面。 根据下面给出的劳达航空004号班机的事故调查报告,我通篇找不到手机(mobile),或者干扰(intrusion)之类的字眼。事故原因分析貌似是说,因此由于某些照明电路的电路故障,导致反推装置启动。在系统改进中,也没有要求飞机上关闭手机的建议,只是建议飞机上的电子设备增加屏蔽装置,屏蔽电磁干扰。注意,这里屏蔽的目标不是无线通讯干扰,而是电路故障造成的电火花(hot short)。 同时,飞机也会频繁穿越积雨云之类的电磁异常区域。由于飞机上的控制系统异常重要,而飞机本身的电磁环境不稳定,因此使用无线控制飞机是不可行的。 关于在医院使用手机的问题 医院使用手机,电脑是一个需要慎重考虑的问题,因为确实有很多医疗设备使用了2.4G频段。甚至由于人体器官尺寸等原因,有很多医疗设备并不能自己选择工作频率。例如在深圳的地铁干扰问题上,医院的B超亦是干扰源之一,见这里。可以想见,如果将卡皇带到医院去使用,也可能对B超设备产生干扰。 但是,对上述新闻,我抱持怀疑态度。借助声波工作的B超为什么会发射如此强烈的电磁信号,而且信号频率居然高达2.4G。这本身就是件很奇怪的事。由于报道并没有列出关联信息,因此无从查起,姑且信之。

支付宝体系的问题

Dec 31, 2012 - 1 minute read - Comments

今天和几位朋友讨论了一下支付宝的问题,又查了一下case,发现支付宝的问题不仅是那么简单而已。先不吐槽支付宝的问题了,赶快出验证和方案。 在被人恶意补卡的情况下是否安全 关于恶意补卡,这里有个例子。简单来说,就是知道你的身份证和手机号,去异地营业厅用假身份证补手机卡。然后用手机卡获得支付宝系统,再套现。 贝壳分析了自己的系统,如果恶意补卡的话,对于200以上的消费转账,会要求输入宝令。宝令是绑定在手机而非卡上的,所以攻击者会无法消费。而要取消宝令就必须输入宝令,通过手机卡无法取消。因此攻击者即使补贝壳的卡,也无法进行200以上的消费。 但是如果你用的是U盾,那问题就没那么简单。在支付宝的设计中,手机是可以解除U盾绑定的。所以U盾不能对抗恶意补卡。 结论:如果仅仅是200而已,我可以认为这个系统是安全的。 在手机丢失的情况下是否安全 如果手机丢失,问题就更加严重。支付宝密码,支付密码均会被找回,宝令本身就在手机里,因此支付宝的支付系统全面沦陷。支付宝内资金肯定不保。问题是卡上资金。 贝壳绑定了两张卡,浦发和招商,先从快捷支付检查起。检查浦发的卡发现,对支付宝默认开了20000的签约支付额度,当场汗就下来。对于快捷支付来说,这太高了。速度改成300。对于超过300的,依然可以通过网银验证来支付,比较安全。 招行的快捷支付我从头到脚就没看到签约这回事,貌似必须进行网银支付。那就需要我的卡号有效期密码什么的。我觉得这个不大可能出问题。 再检查浦发的普通支付,这需要登录浦发的网上银行。浦发网银是通过手机加密码验证的,基本可以保证转账汇款的安全。 结论:目前调整的结果,一次损失300左右。 网银的一点隐忧 目前网银的密码都太弱了。浦发只有6位数字,招行也只有8位数字字母。难道就不能设定强一些的密码么? 浦发可能是要和卡本身的密码兼容,将手机作为补强。可是手机也会掉啊。一旦手机掉了,整个安全性就由6位数字密码保护。这和掉银行卡一样严重。 建议 移动和联通关闭身份证显示,尤其是最后四位! 无论哪种级别,使用支付宝一定要打开宝令。目前只有宝令可以有效对抗补卡攻击。 在智能机上又绑定网银的,就不要乱装软件,更不要root/越狱。 中国移动的补卡修改流程。如果当前卡处于激活中,先持续警告旧卡24小时后再激活新卡。 移动至少应当允许客户自行选择“这个手机号码极端重要,不得实行异地补卡,不得显示个人信息,复机/补卡间隔需要在24小时以上”的增强选项。 理论上说,移动应当可以推进二代身份证验证能力。使得补卡业务实行时,必须凭借二代身份证验证身份后进行。杜绝假身份证。 支付宝的密码找回功能降速。从开始找回,发短信和邮件通知,到完成找回密码至少要一小时,最好要24小时才能找回密码。或者允许可以设定“我自愿将找回密码时限改为24小时”以增强安全性。

移动的一点漏洞

Dec 30, 2012 - 1 minute read - Comments

今天支付宝的那个问题,支付宝的人和我说。 猜到就是手机保存账户名可以找回密码的问题。。对于快捷用户明年会要求手机+证件找回密码,减低200以上的资损风险。所以现在我客户端使用后都删除用户名纪录,为了安全。那个token的想法挺好的! 我就考虑,是否可以通过手机获得身份证呢? 首先,利用手里的手机,得到自己的手机号。然后查询所在地,在对应的移动网站上(例如上海移动)找回密码,然后登录移动网站。进入个人信息管理,需要手机验证码。输入验证码,可以看到部分身份证。包括头4位和尾4位。普通身份证是18位的,分组方式6+8+4。隐藏掉的10位中有8位是生日,一般手机里都能找到,并不困难。 因此,实际需要得到的就是2位。而这两位又不是任意的,和个人出生地有关。具体到我的身份证上,有了前四位后,两位只有17种可能。我看了其他一些人的情况,运气差的情况下,这两位只有一两种可能,例如1405,山西省晋城市,只有00/01/02。全试一遍就可以了。 更新:同事反应,联通的网站更二,直接就显示了完整身份证。。。 更新2:同样漏洞,在招商银行的手机应用上也爆了出来。。。

支付宝的一项设计问题

Dec 30, 2012 - 1 minute read - Comments

话说最近,贝壳成批更新了一些密码。在更新到网络支付系统的时候,心血来潮做了个分析。感觉网银系统很不安全。尤其是支付宝的手机客户端。我们下面以一个实际例子说明一下支付宝系统(其实远不止支付宝)的问题。 情况说明 贝壳的支付宝系统做了手机和淘宝帐号绑定,开启了手机动态口令,无线支付,和手机宝令三项功能。由于可以从淘宝或者支付宝登录,因此设定了70bit以上的高强度密码,1年更换一次。支付密码强度略弱,是30bit级别的,一年更换一次。支付宝账户安全等级高。使用支付宝的系统包括两台电脑和一台手机,一台是linux,一台是受限windows,只安装特定软件,不浏览和安装风险网页。总体来说,这个安全结构在支付宝用户中都是有数的。 风险在于支付宝手机客户端上,贝壳在评估的时候发现,支付宝手机客户端可以记录密码。这是一个非常具有风险的事情。因此贝壳模拟评估了一下,假如你丢失了手机,会发生什么事情。 低于200的支付 首先,由于支付宝客户端保存了密码,因此你可以很容易的登录支付宝。上面有绑定快捷支付的话(这是贝壳的常态,相信也有很多人有绑定,或者账户内有余额),在200以下就可以直接支付给对方,不需要任何额外验证。贝壳绑定的浦发银行发出了提款警告,但是很可惜,由于手机在恶意者手上,这一行为没有任何用处。 当然,常识告诉我们,如果你丢了个手机只损失200,这个问题可以忽略不计。 超过200的支付 如果超过200,则需要支付密码和手机验证码。在这个例子中,手机验证码是没有用处了,主要的保护就在支付密码上。然而,支付宝客户端具有找回支付密码的功能。幸好,他是基于身份证的。贝壳的身份证不是每个人都知道,因此在超过200的时候是安全的。 是否还有可能,从支付宝中恢复原始密码呢?因为有原始密码,就可以用网页访问支付宝,使用手机来恢复支付密码。关于这点,直到撰文为止,贝壳没有确认。 然而,问题其实远比这个简单。在没有支付宝密码的情况下。你可以申请忘记密码。然后支付宝会要求你输入你的账号来恢复密码。帐号?我记得在支付宝客户端上有记录。。。果然,输入帐号后,贝壳收到了支付宝的验证码。输入验证码后,贝壳重设了支付宝密码。在这一过程中,贝壳绑定的邮箱收到了警告——不过依然很可惜,唯一能够即时提示的手机现在在恶意者手中,主人一无所觉。 然后就是很没有新意的重设支付密码过程,借助手里的手机,我们完整的得到了整个支付宝的所有权,并且可以提光绑定了快捷支付的整张信用卡。在这里的唯一阻碍就是信用卡开卡行的支付限额。超过限额后需要使用密码和手机验证码来解除(浦发),手机验证码可以无视,密码是未知的。 结论 粗算了一下,丢一台手机,在一个小时内没有察觉,大约会造成4000元-4500元的损失,这还没有算手机。如果发卡行没有设定限额,最高大约是10W元。 我们来细数一下,整个过程里面的问题。 手机客户端不应当保存用户名密码,尤其是涉及资金的问题 对于频繁登录的问题,可以允许客户绑定一个手机token来解决。token等效于密码,但是不能做所有涉密操作,不能修改安全性,找回密码等。客户需要可以通过安全手段查看当前有多少个手机绑定了token,并且可以删除。贝壳之所以认为支付宝的系统有弱点,就是因为找遍整个支付宝系统,找不到删除token的地方。不能删除的token等于没用。 丢失密码的找回需要更加慎重 单纯的手机找回密码是有风险的,当然,单纯的邮箱找回也有。一种方法是同时验证手机和邮箱可以立刻找回密码,否则需要等待一定时间(例如几个小时,等待主人发现手机丢失)。 但是这仍然有风险。一般android里都会绑定邮件接收吧,借助这个很容易收到邮件。设计一个安全的密码找回方案并不是那么容易的,看来只有多等几个小时的方案略安全一些了。 同时这里也提醒一下。如果你在银行挂失银行卡找回密码的时候,觉得业务很方便。贝壳建议你立刻更换银行。在找回密码时越麻烦的银行,才是越安全的。 基于手机的核心验证体系 这是关键中的关键。我们可能会设计一个安全机制,里面有一步两步三步,必须全部通过才能操作资金。然而实际使用中,如果这三步都是依赖于同一个设备,那就对安全性没有任何提升——没有人敢保证手机不会丢失吧。钱包丢失最多损失几百,手机丢失呢? 目前,整个网银系统(不止是支付宝)都越来越多的依赖于手机。在手机越来越智能的今天,其可靠性实际上正在变差。手机可能丢失,也可能被安装恶意软件(尤其是root/越狱过的手机)。我们可以列出当手机丢失,或者安装了高权限的恶意软件时,会发生的安全问题。 个人信息泄密,包括朋友通讯方式,备忘,生日,身份证号码,家庭地址等。其中有些就涉及安全。 支付宝密码和支付密码可以重设(即,泄露)。 宝令丢失。 网银验证码无意义。 支付宝警告无意义。 网银警告无意义。 实际上,这不是支付宝的问题,而是用户在选择和设计自己的安全系统时,无意中造成的问题。 解决方案 暂时还没有太好的方案。 首先期待支付宝将手机登录改为token,取消密码保存,隐藏用户名,用户可以删除token,以解决直观的威胁。 期待手机丢失时快速发现的应用/功能。如果能在5-10分钟内停机,可以有效的解决手机丢失造成的风险。(贝壳向中国移动确认了,当手机停机后,是不能收取短信的) 当确实发生手机丢失时,应当首先立刻停机(因为停机速度快),然后向银行挂失(凡是绑定了手机的银行都要),然后以最快速度修改所有密码。 涉及资金的系统要多考虑一下,设计安全结构的时候要注意,如果有多于一个的方法进入系统,安全性决定于最弱的那个系统。如果所有步骤的安全性都依赖于手机,那么要考虑,丢了手机的时候会发生什么。