不小心撞上Linux Kernel的一个bug

前天晚上在京东买了一台电脑,昨天傍晚送到,花了一晚上的功夫才把它装好。

早上起来开始装操作系统,没想到openSUSE 11的光盘插进去,选择Install,然后在加载Kernel的第一步就死掉了。选择文本的安装模式一看,提提示 BUG Int 14 : CR2 ffb41000。

上网查了一下,14号中断原来是给换页错误用的。首先被怀疑的就是4G内存。回到BIOS关闭Memory remap,问题依旧。

用Google搜索了一下英文的内容,发现有人和我有同样的问题,而且还是同样的主板:ASUS P5QL-PRO。看下去,原来这是Linux Kernel的一个bug。如果某块数据在某页第一个字节结束的情况下,Linux错误的把页卸载了。恰好,ASUS P5QL-PRO的DMI表就满足这个情况。

打电话给ASUS的技术支持,询问是否有办法调整这一问题,没想到差点被雷死。她说:“P5QL是一款家用型的主板,华硕家用型的主板都是按Windows平台设计的。”

这下晕了,还好,似乎只有2.6.26的核受到影响,我还有得用。

微软帝国的反击

好吧好吧,我承认我无聊,讨论黑屏事件这么无聊的话题。

董正伟不是说微软使用黑客手段入侵中国用户的电脑,应该罚款上年度在中国10%的营业额或者20亿美元吗。那微软应该该去报案称所有被黑屏的和不少还没有被黑屏的用户使用黑客手段入侵Windows Update中心。要是再和某家银行合作一下,干脆直接报案他们盗窃金融机构算啦。

PS,微软中国一年的营业额的10%有1亿美元吗?

自问自答:据估测,微软中国2007年的营业额为8亿美元。

再一次PS,两个疑惑:

  1. 要是我在自己电脑上装上虚拟机,然后装上七八个Windows XP,算是违反了微软的EULA吗?
  2. 仅在虚拟机上装一个OEM版的Windows XP算是违反EULA吗?如果不算,那么OEM版的Windows XP无法在虚拟机上安装我可以找Microsoft调换或者退货吗?

Turn to openSUSE

前天晚上,无意中发觉电脑开了一大堆端口,挨个检查那些连接上来的ip,居然有一个是什么中国黑客联盟之类的网站,直接Fn+F5关掉电脑的无线准备重装系统。

想了想,干脆就装个Linux吧,好久没用了。反正除了网银,没什么是必需要靠盖茨大叔的,大不了在Linux上装个虚拟机跑Windows。

没想到这个Linux装得这么漫长,直到现在我才能用中文写博客。先是刻了一张openSUSE 11的盘,没想到最后校验没通过。上网查了一下如何裸装Linux,结果被玩弄了。把iso解压在移动硬盘上,用刚刻盘引导,从硬盘目录安装。前面一切正常,复制文件的时候终于倒下了。当时怀疑是iso文件已经损坏了。

第二天起来继续,用朋友的电脑下了iso的MD5,校验结果居然通过了,看来是盘片的问题了。重新刻了一张装上。

让我没有想到的是,安装程序默认是没有把数据写到MBR的,我的分区布局又有点奇怪,重启=瘫痪。

再来一次,结果进去了之后死活不听话,设置的Manual却偏偏要按DHCP工作。导致网关和DNS服务器都是错误的。

最后终于搞定了,下了一个scim的src包,configure/make/make install下来确始终无法切换输入法。干脆rm -R,去packages.openSUSE-comunity.org装预编译的包反而工作得很好。

终于,我又可以站在这个和大家打招呼了。

std::cout << “Hello World!” << std::endl;

冬天来了

我还在InforSense的时候,大概是6月份的样子,最终Boss,Prof. Yike Guo先生给全公司发了一封信,大概是说鉴于现在极端严峻的金融环境,公司需要削减开支等等。

而现在,Ron Conway,著名的天使投资者,这个月早些时候给他参股的公司写了一封提醒削减开支的信。最后还附上了他在2000年写的同样的信。值得一读。

Read more »

面试的保密协议

很多公司在招聘时都会要求同学们对面试、笔试的内容保密。虽然有时只是一句话,但那也是一个保密协议。签上你的大名就意味着你必须遵守诺言、严守秘密。

究竟可不可能合法的绕开保密协议呢?我们仅仅就法律的角度来探讨一下这个问题。

我觉得下面的方案是可行的:

面经发布者和面经查看者签订一份协议,发布者授予查看者代理人的身份以处理和该面试公司之间的事务。作为代理人,理所当然地不是“无关的第三方”,也理所当然的可以询问他的当事人关于面试的内容。这应当是合法的。

量子密码学与中间人攻击

最近有关量子密码学的新闻很多,cnBetaSolidot都有。量子密码学是一个很有意思的东西,如果你仅仅应为看到“量子”二字而跳过这篇文章的话,我非常遗憾。当然,我不是从事这个方面研究的,所掌握的知识可能已经过时,若有谬误还请多多谅解。

对于量子密码学,大家似乎存在两大误区。

第一,“任何密码技术刚推出的时候都声称其是无法破译的,但最终都会被破译”。其实驳斥这个观点很简单,早在量子密码学被提出之前,我们就有无法破解的加密技术,一次一密乱码本。

第二,“量子密钥分配技术能够抵御任何攻击,其传输环节是完全用量子物理约束的”。这个问题就是我们今天的话题。

首先让我们来简单地回顾一下量子密钥分配技术。

在这个技术中,出场的角色包括:发送端、接收端。他们之间存在一条私有线路和一条公有线路。私有线路是一根光纤,而公有线路通常就是Internet。

众所周知,光是一种横波,通过起偏器,我们可以让它偏振起来。

在私有线路中,发送端可能发送四个方向的偏振光“|-\/”(分别是垂直、水平、和位于45度的倾斜)。这四种方向可以分为垂直水平和倾斜方向两种模式(分别记为”+×”),两种模式各有两种方向分别表示0和1。发送端每发送一位都先随机选择一种模式,根据这一位是0或是1再继续的确定光的偏振方向。

光子沿着通道传递到了接收端,一直保持原有的振动方向。而接收端一次只能选择+和×两种探测模式中的一种,无法同时探测两种模式。

如果发送模式和接收模式不同会怎样?不妨设光的振动方向是-,而接收器的模式是×。此时,光子各有50%的几率转变为\与/方向。这一点是量子密钥分配技术的基石,即为了测定光子是否在-方向振动,光的方向可能会被改变,以保证光子在穿过检偏器后要么|振动,要么-振动,即使它以前的偏振方向是倾斜。

因为接收方并不知道每个光子的振动方向,就有可能选择了错误的模式并得到错误的结果。接收方通过公有线路把自己的发送模式告诉发送方,发送方指出其中哪些部分是正确的。发送方和接收方忽略那些接收器设置错误的位。

此时,如果没有人干扰私有线路中的光子的话,发送方和接收方就应该拥有相同的数据了。为了检验这一点,他们在公有线路中比较其中的一半。如果有差异,说明光纤中存在监听者。他干扰了光子的振动方向。如果无错,就抛弃这些位,用剩下的位作为一次一密乱码本的密钥。1

假如有监听者,他的存在一定会导致最后一步的校验操作失败。因为他事先也不知道应该如何设置接收器模式。其中那些错误的设置会导致他被发觉。任何光纤中的窃听者都会修改光子的偏振方向。2


现在,我们来考虑一下中间人攻击。中间人攻击的发起者是比监听者更厉害的角色。前面设想的监听者仅仅能在私有线路上设置光子振动方向检测器和读取公有线路上的全部通讯。但中间人不但能够做到这些,还可以修改公有线路上的通讯。因此他可以向发送方假装自己是接收方,而在接收方面前假装自己是发送方。

中间人在私有线路上也随机地选择+和×中的一种模式,即使这会导致接收方收到的光子偏振方向被修改。

接收方会在公有线路上发送接收器的设置模式。此时中间人修改这些数据,把它变成自己的设置模式。发送方会把这些模式中错误的部分发送给接收方,中间人读取这部分数据就知道了自己设置错了哪些位。中间人修改这份数据,让接收方保留那些和中间人模式相同的位。这样,中间人和发送方保留了一份的数据,也和接收方保留了另一份数据。在最后的核对工作中,中间人只要修改核对用的数据包,就能保证发送方和接收方无法察觉有人窃听了私有线路。

至此,我们可以得出结论,量子密钥分配技术仍然无法抵御中间人攻击,依然需要在公有线路上使用签名技术。这意味着这部分是可以被攻破的,至少它不是被量子物理约束的。当然,即使是目前的Internet环境,中间人攻击也是很难发起的,但比起被物理学决定的不可能来说,还是容易多了。

注意,这种攻击不是我发现的,我只是说指出别人的结论--量子密钥分配协议的安全性仍然需要一种签名算法来保证,如果使用签名算法被破译了,那么量子密钥分配协议就会被入侵。关于这个结论的真实性,可以参照Answers.com和Wikipedia.org中有关Quantum cryptography和man-in-the-middle attack的内容。

注1:这部分具有增强的协议,发送方和比较方不是简单地比较一半的位,而是若干指定位的亦或值,重复比较N次。最后只需要抛弃每组比较集合的第一个位即可。

注2:和大部分的密码学一样,这只是一个概率问题。当数据量很大的时候,他仅有极低可能不被发觉。比如计算机浮点数向下溢出的几率(约10-308)不被发觉。

鼠标轨迹查看器

无聊之中写了个小程序,用来查看鼠标通常在屏幕上的活动范围,命名为Mouse Trace Viewer吧。

  1. 解压后执行mtv.exe,最小化即可。
  2. 记录的鼠标移动数据会以二进制格式保存在Points文件中。
  3. 每次运行mtv.exe时会检查是否存在Points文件,若存在,则将其转换输出成一张png格式的图片。
  4. 由于需要时用Windows API的全局钩子函数,应当会被一些杀毒软件和防火墙拦截。
  5. 应该会需要Microsoft Visual C++ 2008 Redistributable Package,可以在微软网站上下载

附上一张效果图。

Sample Image Of Mouse Trace Viewer

最后,鼠标轨迹查看器的下载地址是:[bin] [src]

Update Oct. 18, 2008:  窗口最小化按钮执行最小化到系统托盘区操作

Update Oct. 18, 2008:  程序启动时就隐藏到系统托盘区

微软笔试系统的校验码

今天看到有人说那个判断小猫小狗的校验码系统被破译。突然想起上周末的微软笔试来。可能很多同学都知道由于微软没有做好压力测试,那天的在线考试最后变成了笔试。但是你们可能不知道的是,登陆时的图片校验码也很有型--图片的内容就是图片的文件名。强烈怀疑那天系统登陆不进去就是因为有人开了朔雪

求职测试准备3

题目:

有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠。

最近爱上EMC的测试了:)

解答:

网上一堆答案,搞得及繁琐无比,让我来化简吧。

设有x只老鼠,7天后有死亡和存活两种状态,因此能够提供的信息量为2x。解2x>1000即可。

求职测试准备2

题目:

地面上有N个硬币,若干机器人在处理这些硬币。机器人首先随机选择一个硬币,若此硬币正面向上,则将其抛出;若此硬币反面向上则直接将其翻转。问最后硬币正反比例的情况。

据说题目来自EMC面试

解答:

假设最后硬币正反比例会稳定。设地面共有N个硬币,最终有Np个硬币正面向上。

稳定时,则每次机器人将一个硬币由正面翻为反面的概率应当等于它将一个硬币由反面翻为正面的概率。

则 1/2 * p = 1-p

解得 p = 2/3

检验硬币是否会稳定:初始时讨论p > 2/3和p < 2/3两种情况,易证p依概率收敛到2/3。