星期五, 十月 31, 2008
内向人如何建立自己的人际网络
想想你是否能够打一两个电话就找到你想要的东西。如果你有良好的人际网络,你应该就可以。通过投资时间建立人际网络,你在需要搞定事情的时候就可以节省时间。拥有良好人际网络的人不用耗费时间向不认识的人随机群发电邮、购买线索或行业名单、或者从上百的简历中挑出合适的应聘者。做出选择吧,你想现在花点时间呢还是以后再补?
遇到王子之前,你要吻很多青蛙。
一开始时你可能要盲目地选择参加的社交活动。你可能会在一个不喜欢的场合痛苦地呆上一个小时,但是从中可以学到哪些活动需要参加,哪些活动需要跳过。最终,你会找到一些你喜爱的人和活动。
不要花太多时间。
如果你把自己累坏了,你就再也不想去建立人际网络了。制定一个上限,一个月只参加一至两个活动。关系的建立需要很长时间,所以与少一点的圈子保持长期的关系比参加很多圈子却只能保持短暂关系好。
把酷的想法做出来。
内向的人通常不喜欢谈论自己——我们更喜欢谈论想法。影响自己去谈论一些自己做过的事情。不要自吹自擂,要切题。这样那些外向的人会谈论起你,传说你的成就。这会增加你在一些圈子里的信誉。我知道人们更喜欢你的好点子和知识,但这个世界只看你做了什么。
邀请别人共进午餐。
或者你可以下班之后请他们喝咖啡和啤酒。因为如果对方也是一个内向的人,他或她不会邀请你,所以你要做出邀请。
经常做你喜欢的事情。
我住在太空海岸(译者注:Space Coast)的时候,我参加了一个为企业主和投资者开设的创业者论坛圈子。我在其中学到了很多东西,但是那里的人们直到6个月之后才开始认出我、向我打招呼。作为一个23岁的人,和满屋子中年人在一起并不舒服,但你需要经常地露面,月复一月。
分析你的成果。
内向的人有很好的直觉、善于分析。那就利用这点长处。你的关系里什么是有用的,什么不是?你最大的阻碍是什么?
找出你人际网络中的关键点。
不要找一个销售人员,找一个认识很多销售人员的人,然后请那个人吃午饭。如果人际网络让你感到疲惫,那么找十个认识很多人的关键人物会比找到和保持五十个联系人好很多。找到合适的关键人要花很多时间。找那些因工作原因(无论出自什么理由)而要和很多人保持良好关系的内向的人。那些和你有着共同爱好的外向的人也是很好的选择。
不要只为了社交而去建立人际网络。
有一本书叫《永远不要独自吃饭》(译者注:Never Eat Alone)。对于外向的人来说,书上讲的都不错,但是我们内向的人不能为了社交而社交。随着你认识越来越多的人,专注于那些与你最合得来的人,不必过多的专注于认识新的人。
一开始的几次活动对我来说比较困难。有时我不知道该和新认识的人说些什么。如果有人以诸如“你如何看待以功利的观点做关于伦理的决定?”、“Sarbanes-Oxley法案有没有鼓励公司去做‘交易’。”的问题开始一段谈话,我会感觉好很多。我通常觉得想法观点比人本身有趣。但是,通过坚持,月复一月,我慢慢地懂得说一些巧妙的话,认识陌生人也觉得比以前舒服了。所以相信我,与人交往总会变得简单。
规则总是大多数人制定的,而外向的人占了大多数(我猜有70%)(译者注:MBTI人格理论认为当你比56%的人外向时你就可以算是外向的了,换句话说,该理论认为56%的人可以被认为是内向的)。人际网络是一把释放你潜能的重要钥匙。所以尽你的力去按照规则游戏,不然就不要干坐着抱怨没人把你的奇思妙想化为现实。我希望你可以从我的经验中学点什么,这样你就不用走一些我走过的弯路了。
星期四, 十月 30, 2008
HP总裁孙振耀退休时的一封信
我有个有趣的观察,外企公司多的是25-35岁的白领,40岁以上的员工很少,二三十岁的外企员工是意气风发的,但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽,最后大多跳到民企,比方说,唐骏。外企员工的成功很大程度上是公司的成功,并非个人的成功,西门子的确比国美大,但并不代表西门子中国经理比国美的老板强,甚至可以说差得很远。而进外企的人往往并不能很早理解这一点,把自己的成功90%归功于自己的能力,实际上,外企公司随便换个中国区总经理并不会给业绩带来什么了不起的影响。好了问题来了,当这些经理人40多岁了,他们的薪资要求变得很高,而他们的才能其实又不是那么出众,作为外企公司的老板,你会怎么选择?只要不高薪水的,要出位的精明强干精力冲沛的年轻人,有的是,为什么还要用你?
从上面这个例子,其实可以看到我们的工作轨迹,二三十岁的时候,生活的压力还比较小,身体还比较好,上面的父母身体还好,下面又没有孩子,不用还房贷,也没有孩子要上大学,当个外企小白领还是很光鲜的,挣得不多也够花了。但是人终归要结婚生子,终归会老,到了40岁,父母老了,要看病要吃药,要有人看护,自己要还房贷,要过基本体面的生活,要养小孩……那个时候需要挣多少钱才够花才重要。所以,看待工作,眼光要放远一点,一时的谁高谁低并不能说明什么。
从这个角度上来说,我不太赞成过于关注第一份工作的薪水,更没有必要攀比第一份工作的薪水,这在刚刚出校园的学生中间是很常见的。正常人大概要工作35年,这好比是一场马拉松比赛,和真正的马拉松比赛不同的是,这次比赛没有职业选手,每个人都只有一次机会。要知道,有很多人甚至坚持不到终点,大多数人最后是走到终点的,只有少数人是跑过终点的,因此在刚开始的时候,去抢领先的位置并没有太大的意义。刚进社会的时候如果进500强公司,大概能拿到3k -6k/月的工资,有些特别技术的人才可能可以到8k/月,可问题是,5年以后拿多少?估计5k-10k了不起了。起点虽然高,但增幅有限,而且,后面的年轻人追赶的压力越来越大。
我前两天问我的一个销售,你会的这些东西一个新人2年就都学会了,但新人所要求的薪水却只是你的一半,到时候,你怎么办?职业生涯就像一场体育比赛,有初赛、复赛、决赛。初赛的时候大家都刚刚进社会,大多数都是实力一般的人,这时候努力一点认真一点很快就能让人脱颖而出,于是有的人二十多岁做了经理,有的人迟些也终于赢得了初赛,三十多岁成了经理。然后是复赛,能参加复赛的都是赢得初赛的,每个人都有些能耐,在聪明才智上都不成问题,这个时候再想要胜出就不那么容易了,单靠一点点努力和认真还不够,要有很强的坚忍精神,要懂得靠团队的力量,要懂得收服人心,要有长远的眼光……
看上去赢得复赛并不容易,但,还不是那么难。因为这个世界的规律就是给人一点成功的同时让人骄傲自满,刚刚赢得初赛的人往往不知道自己赢得的仅仅是初赛,有了一点小小的成绩大多数人都会骄傲自满起来,认为自己已经懂得了全部,不需要再努力再学习了,他们会认为之所以不能再进一步已经不是自己的原因了。虽然他们仍然不好对付,但是他们没有耐性,没有容人的度量,更没有清晰长远的目光。就像一只愤怒的斗牛,虽然猛烈,最终是会败的,而赢得复赛的人则象斗牛士一样,不急不躁,跟随着自己的节拍,慢慢耗尽对手的耐心和体力。赢得了复赛以后,大约已经是一位很了不起的职业经理人了,当上了中小公司的总经理,大公司的副总经理,主管着每年几千万乃至几亿的生意。
最终的决赛来了,说实话我自己都还没有赢得决赛,因此对于决赛的决胜因素也只能凭自己的猜测而已,这个时候的输赢或许就像武侠小说里写得那样,大家都是高手,只能等待对方犯错了,要想轻易击败对手是不可能的,除了使上浑身解数,还需要一点运气和时间。世界的规律依然发挥着作用,赢得复赛的人已经不只是骄傲自满了,他们往往刚愎自用,听不进去别人的话,有些人的脾气变得暴躁,心情变得浮躁,身体变得糟糕,他们最大的敌人就是他们自己,在决赛中要做的只是不被自己击败,等着别人被自己击败。这和体育比赛是一样的,最后高手之间的比赛,就看谁失误少谁就赢得了决赛。
根源
你工作快乐么?你的工作好么?
有没有觉得干了一段时间以后工作很不开心?有没有觉得自己入错了行?有没有觉得自己没有得到应有的待遇?有没有觉得工作像一团乱麻每天上班都是一种痛苦?有没有很想换个工作?有没有觉得其实现在的公司并没有当初想象得那么好?有没有觉得这份工作是当初因为生存压力而找的,实在不适合自己?你从工作中得到你想要得到的了么?你每天开心么?
天涯上愤怒的人很多,你有没有想过,你为什么不快乐?你为什么愤怒?其实,你不快乐的根源,是因为你不知道要什么!你不知道要什么,所以你不知道去追求什么,你不知道追求什么,所以你什么也得不到。
我总觉得,职业生涯首先要关注的是自己,自己想要什么?大多数人大概没想过这个问题,唯一的想法只是——我想要一份工作,我想要一份不错的薪水,我知道所有人对于薪水的渴望,可是,你想每隔几年重来一次找工作的过程么?你想每年都在这种对于工作和薪水的焦急不安中度过么?不想的话,就好好想清楚。饮鸩止渴,不能因为口渴就拼命喝毒药。越是焦急,越是觉得自己需要一份工作,越饥不择食,越想不清楚,越容易失败,你的经历越来越差,下一份工作的人看着你的简历就皱眉头。于是你越喝越渴,越渴越喝,陷入恶性循环。最终只能哀叹世事不公或者生不逢时,只能到天涯上来发泄一把,在失败者的共鸣当中寻求一点心理平衡罢了。大多数人都有生存压力,我也是,有生存压力就会有很多焦虑,积极的人会从焦虑中得到动力,而消极的人则会因为焦虑而迷失方向。所有人都必须在压力下做出选择,这就是世道,你喜欢也罢不喜欢也罢。
一般我们处理的事情分为重要的事情和紧急的事情,如果不做重要的事情就会常常去做紧急的事情。比如锻炼身体保持健康是重要的事情,而看病则是紧急的事情。如果不锻炼身体保持健康,就会常常为了病痛烦恼。又比如防火是重要的事情,而救火是紧急的事情,如果不注意防火,就要常常救火。找工作也是如此,想好自己究竟要什么是重要的事情,找工作是紧急的事情,如果不想好,就会常常要找工作。往往紧急的事情给人的压力比较大,迫使人们去赶紧做,相对来说重要的事情反而没有那么大的压力,大多数人做事情都是以压力为导向的,压力之下,总觉得非要先做紧急的事情,结果就是永远到处救火,永远没有停歇的时候。(很多人的工作也像是救火队一样忙碌痛苦,也是因为工作中没有做好重要的事情。)那些说自己活在水深火热为了生存顾不上那么多的朋友,今天找工作困难是当初你们没有做重要的事情,是结果不是原因。如果今天你们还是因为急于要找一份工作而不去思考,那么或许将来要继续承受痛苦找工作的结果。
我始终觉得我要说的话题,沉重了点,需要很多思考,远比唐笑打武警的话题来的枯燥乏味,但是,天下没有轻松的成功,成功,要付代价。请先忘记一切的生存压力,想想这辈子你最想要的是什么?所以,最要紧的事情,先想好自己想要什么。
HP总裁孙振耀退休时的一封信(2)
什么是好工作
当初微软有个唐骏,很多大学里的年轻人觉得这才是他们向往的职业生涯,我在清华bbs里发的帖子被这些学子们所不屑,那个时候学生们只想出国或者去外企,不过如今看来,我还是对的,唐骏去了盛大,陈天桥创立的盛大,一家民营公司。一个高学历的海归在500强的公司里拿高薪水,这大约是很多年轻人的梦想,问题是,每年毕业的大学生都在做这个梦,好的职位却只有500个。
人都是要面子的,也是喜欢攀比的,即使在工作上也喜欢攀比,不管那是不是自己想要的。大家认为外企公司很好,可是好在哪里呢?好吧,他们在比较好的写字楼,这是你想要的么?他们出差住比较好的酒店,这是你想要的么?别人会羡慕一份外企公司的工作,这是你想要的么?那一切都是给别人看的,你干吗要活得那么辛苦给别人看?另一方面,他们薪水福利一般,并没有特别了不起,他们的晋升机会比较少,很难做到很高阶的主管,他们虽然厌恶常常加班,却不敢不加班,因为“你不干有得是人干”,大部分情况下会找个台湾人香港人新加坡人来管你,而这些人又往往有些莫名其妙的优越感。你想清楚了么?500强一定好么?找工作究竟是考虑你想要什么,还是考虑别人想看什么?
我的大学同学们大多数都到美国了,甚至毕业这么多年了,还有人最近到国外去了。出国真的有那么好么?我的大学同学们,大多数还是在博士、博士后、访问学者地挣扎着,至今只有一个正经在一个美国大学里拿到个正式的教职。国内的教授很难当么?我有几个表亲也去了国外了,他们的父母独自在国内,没有人照顾,有好几次人在家里昏倒都没人知道,出国,真的这么光彩么?就像有人说的“很多事情就像看A片,看的人觉得很爽,做的人未必。”
人总想找到那个最好的,可是,什么是最好的?你觉得是最好的那个,是因为你的确了解,还是因为别人说他是最好的?即使他对于别人是最好的,对于你也一定是最好的么?
对于自己想要什么,自己要最清楚,别人的意见并不是那么重要。很多人总是常常被别人的意见所影响,亲戚的意见,朋友的意见,同事的意见……问题是,你究竟是要过谁的一生?人的一生不是父母一生的续集,也不是儿女一生的前传,更不是朋友一生的外篇,只有你自己对自己的一生负责,别人无法也负不起这个责任。自己做的决定,至少到最后,自己没什么可后悔。对于大多数正常智力的人来说,所做的决定没有大的对错,无论怎么样的选择,都是可以尝试的。比如你没有考自己上的那个学校,没有入现在这个行业,这辈子就过不下去了?就会很失败?不见得。
我想,好工作,应该是适合你的工作,具体点说,应该是能给你带来你想要的东西的工作,你或许应该以此来衡量你的工作究竟好不好,而不是拿公司的大小,规模,外企还是国企,是不是有名,是不是上市公司来衡量。小公司,未必不是好公司,赚钱多的工作,也未必是好工作。你还是要先弄清楚你想要什么,如果你不清楚你想要什么,你就永远也不会找到好工作,因为你永远只看到你得不到的东西,你得到的,都是你不想要的。
可能,最好的,已经在你的身边,只是,你还没有学会珍惜。人们总是盯着得不到的东西,而忽视了那些已经得到的东西。
普通人
我发现中国人的励志和国外的励志存在非常大的不同,中国的励志比较鼓励人立下大志愿,卧薪尝胆,有朝一日成富成贵。而国外的励志比较鼓励人勇敢面对现实生活,面对普通人的困境,虽然结果也是成富成贵,但起点不一样,相对来说,我觉得后者在操作上更现实,而前者则需要用999个失败者来堆砌一个成功者的故事。
我们都是普通人,普通人的意思就是,概率这件事是很准的。因此,我们不会买彩票中500万,我们不会成为比尔盖茨或者李嘉诚,我们不会坐飞机掉下来,我们当中很少的人会创业成功,我们之中有30%的人会离婚,我们之中大部分人会活过65岁……
所以请你在想自己要什么的时候,要得“现实”一点,你说我想要做李嘉诚,抱歉,我帮不上你。成为比尔盖茨或者李嘉诚这种人,是靠命的,看我写的这篇文章绝对不会让你成为他们,即使你成为了他们,也绝对不是我这篇文章的功劳。“王侯将相宁有种乎”,但真正当皇帝的只有一个人,王侯将相,人也不多。目标定得高些对于喜欢挑战的人来说有好处,但对于大多数普通人来说,反而比较容易灰心沮丧,很容易就放弃了。
回过头来说,李嘉诚比你有钱大致50万倍,他比你更快乐么?或许。有没有比你快乐50万倍,一定没有。他比你最多也就快乐一两倍,甚至有可能还不如你快乐。寻找自己想要的东西不是和别人比赛,比谁要得更多更高,比谁的目标更远大。虽然成为李嘉诚这个目标很宏大,但你并不见得会从这个目标以及追求目标的过程当中获得快乐,而且基本上你也做不到。你必须听听你内心的声音,寻找真正能够使你获得快乐的东西,那才是你想要的东西。
你想要的东西,或者我们把它称之为目标,目标其实并没有高低之分,你不需要因为自己的目标没有别人远大而不好意思,达到自己的目标其实就是成功,成功有大有小,快乐却是一样的。我们追逐成功,其实追逐的是成功带来的快乐,而非成功本身。职业生涯的道路上,我们常常会被攀比的心态蒙住眼睛,忘记了追求的究竟是什么,忘记了是什么能使我们更快乐。
社会上一夜暴富的新闻很多,这些消息,总会在我们的心里面掀起很多涟漪,涟漪多了就变成惊涛骇浪,心里的惊涛骇浪除了打翻承载你目标的小船,并不会使得你也一夜暴富。“只见贼吃肉,不见贼挨揍。”我们这些普通人既没有当贼的勇气,又缺乏当贼的狠辣绝决,虽然羡慕吃肉,却更害怕挨揍,偶尔看到几个没挨揍的贼就按奈不住,或者心思活动,或者大感不公,真要叫去做贼,却也不敢。
我还是过普通人的日子,要普通人的快乐,至少,晚上睡得着觉。
跳槽与积累
首先要说明,工作是一件需要理智的事情,所以不要在工作上耍个性,天涯上或许会有人觉得你很有个性而叫好,煤气公司电话公司不会因为觉得你很有个性而免了你的帐单。当你很帅地炒掉了你的老板,当你很酷地挖苦了一番招聘的HR,账单还是要照付,只是你赚钱的时间更少了,除了你自己,没人受损失。
我并不反对跳槽,但跳槽决不是解决问题的办法,而且频繁跳槽的后果是让人觉得没有忠诚度可言,而且不能安心工作。现在很多人从网上找工作,很多找工作的网站常常给人出些馊主意,要知道他们是盈利性企业,当然要从自身盈利的角度来考虑,大家越是频繁跳槽频繁找工作他们越是生意兴隆,所以鼓动人们跳槽是他们的工作。所以他们会常常告诉你,你拿的薪水少了,你享受的福利待遇差了,又是“薪情快报”又是“赞叹自由奔放的灵魂”。至于是否会因此让你不能安心,你跳了槽是否解决问题,是否更加开心,那个,他们就不管了。
要跳槽肯定是有问题,一般来说问题发生了,躲是躲不开的,很多人跳槽是因为这样或者那样的不开心,如果这种不开心,在现在这个公司不能解决,那么在下一个公司多半也解决不掉。你必须相信,90%的情况下,你所在的公司并没有那么烂,你认为不错的公司也没有那么好。就像《围城》里说的,“城里的人拼命想冲出来,而城外的人拼命想冲进去。”每个公司都有每个公司的问题,没有问题的公司是不存在的。换个环境你都不知道会碰到什么问题,与其如此,不如就在当下把问题解决掉。很多问题当你真的想要去解决的时候,或许并没有那么难。有的时候你觉得问题无法解决,事实上,那只是“你觉得”。
人生的曲线应该是曲折向上的,偶尔会遇到低谷但大趋势总归是曲折向上的,而不是象脉冲波一样每每回到起点,我见过不少面试者,30多岁了,四五份工作经历,每次多则3年,少则1年,30多岁的时候回到起点从一个初级职位开始干起,拿基本初级的薪水,和20多岁的年轻人一起竞争,不觉得有点辛苦么?这种日子好过么?
我非常不赞成在一个行业超过3年以后换行业,基本上,35岁以前我们的生存资本靠打拼,35岁以后生存的资本靠的就是积累,这种积累包括人际关系,经验,人脉,口碑……如果常常更换行业,代表几年的积累付之东流,一切从头开始,如果换了两次行业,35岁的时候大概只有5年以下的积累,而一个没有换过行业的人至少有了10年的积累,谁会占优势?工作到2-3年的时候,很多人觉得工作不顺利,好像到了一个瓶颈,心情烦闷,就想辞职,乃至换一个行业,觉得这样所有一切烦恼都可以抛开,会好很多。
其实这样做只是让你从头开始,到了时候还是会发生和原来行业一样的困难,熬过去就向上跨了一大步,要知道每个人都会经历这个过程,每个人的职业生涯中都会碰到几个瓶颈,你熬过去了而别人没有熬过去你就领先了。
跑长跑的人会知道,开始的时候很轻松,但是很快会有第一次的难受,但过了这一段又能跑很长一段,接下来会碰到第二次的难受,坚持过了以后又能跑一段,如此往复,难受一次比一次厉害,直到坚持不下去了。大多数人第一次就坚持不了了,一些人能坚持到第二次,第三次虽然大家都坚持不住了,可是跑到这里的人也没几个了,这点资本足够你安稳活这一辈子了。
一份工作到两三年的时候,大部分人都会变成熟手,这个时候往往会陷入不断的重复,有很多人会觉得厌倦,有些人会觉得自己已经搞懂了一切,从而懒得去寻求进步了。很多时候的跳槽是因为觉得失去兴趣了,觉得自己已经完成比赛了。其实这个时候比赛才刚刚开始,工作两三年的人,无论是客户关系,人脉,手下,和领导的关系,在业内的名气……还都是远远不够的,但稍有成绩的人总是会自我感觉良好的,每个人都觉得自己跟客户关系铁得要命,觉得自己在业界的口碑好得很。其实可以肯定地说,一定不是,这个时候,还是要拿出前两年的干劲来,稳扎稳打,积累才刚刚开始。
你足够了解你的客户吗?你知道他最大的烦恼是什么吗?你足够了解你的老板么?你知道他最大的烦恼是什么吗?你足够了解你的手下么?你知道他最大的烦恼是什么吗?如果你不知道,你凭什么觉得自己已经积累够了?如果你都不了解,你怎么能让他们帮你的忙,做你想让他们做的事情?如果他们不做你想让他们做的事情,你又何来的成功?
等待
这是个浮躁的人们最不喜欢的话题,本来不想说这个话题,因为会引起太多的争论,而我又无意和人争论这些,但是考虑到对于职业生涯的长久规划,这是一个躲避不了的话题,还是决定写一写,不爱看的请离开吧。
并不是每次闯红灯都会被汽车撞,并不是每个罪犯都会被抓到,并不是每个错误都会被惩罚,并不是每个贪官都会被枪毙,并不是你的每一份努力都会得到回报,并不是你的每一次坚持都会有人看到,并不是你每一点付出都能得到公正的回报,并不是你的每一个善意都能被理解……这个,就是世道。好吧,世道不够好,可是,你有推翻世道的勇气么?如果没有,你有更好的解决办法么?有很多时候,人需要一点耐心,一点信心。每个人总会轮到几次不公平的事情,而通常,安心等待是最好的办法。
有很多时候我们需要等待,需要耐得住寂寞,等待属于你的那一刻。周润发等待过,刘德华等待过,周星驰等待过,王菲等待过,张艺谋也等待过……看到了他们如今的功成名就的人,你可曾看到当初他们的等待和耐心?你可曾看到金马奖影帝在街边摆地摊?你可曾看到德云社一群人在剧场里给一位观众说相声?你可曾看到周星驰的角色甚至连一句台词都没有?每一个成功者都有一段低沉苦闷的日子,我几乎能想象得出来他们借酒浇愁的样子,我也能想象得出他们为了生存而挣扎的窘迫。在他们一生最中灿烂美好的日子里,他们渴望成功,但却两手空空,一如现在的你。没有人保证他们将来一定会成功,而他们的选择是耐住寂寞。如果当时的他们总念叨着“成功只是属于特权阶级的”,你觉得他们今天会怎样?
曾经我也不明白有些人为什么并不比我有能力却要坐在我的头上,年纪比我大就一定要当我的领导么?为什么有些烂人不需要努力就能赚钱?为什么刚刚改革开放的时候的人能那么容易赚钱,而轮到我们的时候,什么事情都要正规化了?有一天我突然想,我还在上学的时候他们就在社会里挣扎奋斗了,他们在社会上奋斗积累了十几二十年,我们新人来了,他们有的我都想要,我这不是在要公平,我这是在要抢劫。因为我要得太急,因为我忍不住寂寞。二十多岁的男人,没有钱,没有事业,却有蓬勃的欲望。
人总是会遇到挫折的,人总是会有低潮的,人总是会有不被人理解的时候的,人总是有要低声下气的时候,这些时候恰恰是人生最关键的时候,因为大家都会碰到挫折,而大多数人过不了这个门槛,你能过,你就成功了。在这样的时刻,我们需要耐心等待,满怀信心地去等待,相信,生活不会放弃你,机会总会来的。至少,你还年轻,你没有坐牢,没有生治不了的病,没有欠还不起的债。比你不幸的人远远多过比你幸运的人,你还怕什么?路要一步步走,虽然到达终点的那一步很激动人心,但大部分的脚步是平凡甚至枯燥的,但没有这些脚步,或者耐不住这些平凡枯燥,你终归是无法迎来最后的那些激动人心。
逆境,是上帝帮你淘汰竞争者的地方。要知道,你不好受,别人也不好受,你坚持不下去了,别人也一样,千万不要告诉别人你坚持不住了,那只能让别人获得坚持的信心,让竞争者看着你微笑的面孔,失去信心,退出比赛。胜利属于那些有耐心的人。
在最绝望的时候,我会去看电影《The Pursuit of Happiness》《Jerry Maguire》,让自己重新鼓起勇气,因为,无论什么时候,我们总还是有希望。当所有的人离开的时候,我不失去希望,我不放弃。每天下班坐在车里,我喜欢哼着《隐形的翅膀》看着窗外,我知道,我在静静等待,等待属于我的那一刻。
原贴里伊吉网友的话我很喜欢,抄录在这里:
每个人都希望,自己是独一无二的特殊者
含着金匙出生、投胎到好家庭、工作安排到电力局拿1w月薪这样的小概率事件,当然最好轮到自己
红军长征两万五、打成右派反革命、胼手胝足牺牲尊严去奋斗,最好留给祖辈父辈和别人
自然,不是每个吃过苦的人都会得到回报
但是,任何时代,每一个既得利益者身后,都有他的祖辈父辈奋斗挣扎乃至流血付出生命的身影
羡慕别人有个好爸爸,没什么不可以
问题是,你的下一代,会有一个好爸爸吗?
至于问到为什么不能有同样的赢面概率?
我只能问:为什么物种竞争中,人和猴子不能有同样的赢面概率?
物竞天择。猴子的灵魂不一定比你卑微,但你身后有几十万年的类人猿进化积淀。
HP总裁孙振耀退休时的一封信(3)
入对行,跟对人
在中国,大概很少有人是一份职业做到底的,虽然如此,第一份工作还是有些需要注意的地方,有两件事情格外重要,第一件是入行,第二件事情是跟人。第一份工作对人最大的影响就是入行,现代的职业分工已经很细,我们基本上只能在一个行业里成为专家,不可能在多个行业里成为专家。很多案例也证明即使一个人在一个行业非常成功,到另外一个行业,往往完全不是那么回事情,“你想改变世界,还是想卖一辈子汽水?”是乔布斯邀请百事可乐总裁约翰·斯考利加盟苹果时所说的话,结果这位在百事非常成功的约翰,到了苹果表现平平。其实没有哪个行业特别好,也没有哪个行业特别差,或许有报道说哪个行业的平均薪资比较高,但是他们没说的是,那个行业的平均压力也比较大。看上去很美的行业一旦进入才发现很多地方其实并不那么完美,只是外人看不见。
说实话,我自己都没有发大财,所以我的建议只是让人快乐工作的建议,不是如何发大财的建议,我们只讨论一般普通打工者的情况。我认为选择什么行业并没有太大关系,看问题不能只看眼前。比如,从前年开始,国家开始整顿医疗行业,很多医药公司开不下去,很多医药行业的销售开始转行。其实医药行业的不景气是针对所有公司的,并非针对一家公司,大家的日子都不好过,这个时候跑掉是非常不划算的,大多数正规的医药公司即使不做新生意撑个两三年总是能撑的,大多数医药销售靠工资撑个两三年也是可以撑的,国家不可能永远捏着医药行业不放的,两三年以后光景总归还会好起来的,那个时候别人都跑了而你没跑,那时的日子应该会好过很多。有的时候觉得自己这个行业不行了,问题是,再不行的行业,做得人少了也变成了好行业,当大家都觉得不好的时候,往往却是最好的时候。大家都觉得金融行业好,金融行业门槛高不说,有多少人削尖脑袋要钻进去,竞争激励,进去以后还要时时提防,一个疏忽,就被后来的人给挤掉了,压力巨大,又如何谈得上快乐?也就未必是“好”工作了。
太阳能这个东西至今还不能进入实际应用的阶段,但是中国已经有7家和太阳能有关的公司在纽交所上市了,国美苏宁永乐其实是贸易型企业,也能上市,鲁泰纺织连续10年利润增长超过50%,卖茶的一茶一座,卖衣服的海澜之家都能上市……其实选什么行业真的不重要,关键是怎么做。事情都是人做出来的,关键是人。
有一点是需要记住的,这个世界上,有史以来直到我们能够预见得到的未来,成功的人总是少数,有钱的人总是少数,大多数人是一般的,普通的,不太成功的。因此,大多数人的做法和看法,往往都不是距离成功最近的做法和看法。因此大多数人说好的东西不见得好,大多数人说不好的东西不见得不好。大多数人都去炒股的时候说明跌只是时间问题,大家越是热情高涨的时候,跌的日子越近。大多数人买房子的时候,房价不会涨,而房价涨的差不多的时候,大多数人才开始买房子。不会有这样一件事情让大家都变成功,发了财,历史上不曾有过,将来也不会发生。有些东西即使一时运气好得到了,还是会在别的时候别的地方失去的。
年轻人在职业生涯的刚开始,尤其要注意的是,要做对的事情,不要让自己今后几十年的人生总是提心吊胆,更不值得为了一份工作赔上自己的青春年华。我的公司是个不行贿的公司,以前很多人不理解,甚至自己的员工也不理解,不过如今,我们是同行中最大的企业,客户乐意和我们打交道,尤其是在国家打击腐败的时候,每个人都知道我们做生意不给钱的名声,都敢于和我们做生意。而勇于给钱的公司,不是倒了,就是跑了,要不就是每天睡不好觉,人还是要看长远一点。很多时候,看起来最近的路,其实是最远的路,看起来最远的路,其实是最近的路。
跟对人是说,入行后要跟个好领导好老师,刚进社会的人做事情往往没有经验,需要有人言传身教。对于一个人的发展来说,一个好领导是非常重要的。所谓“好”的标准,不是他让你少干活多拿钱,而是以下三个。
首先,好领导要有宽广的心胸,如果一个领导每天都会发脾气,那几乎可以肯定他不是个心胸宽广的人,能发脾气的时候却不发脾气的领导,多半是非常厉害的领导。中国人当领导最大的毛病是容忍不了能力比自己强的人,所以常常可以看到的一个现象是,领导很有能力,手下一群庸才或者手下一群闲人。如果看到这样的环境,还是不要去的好。
其次,领导要愿意从下属的角度来思考问题,这一点其实是从面试的时候就能发现的,如果这位领导总是从自己的角度来考虑问题,几乎不听你说什么,这就危险了。从下属的角度来考虑问题并不代表同意下属的说法,但他必须了解下属的立场,下属为什么要这么想,然后他才有办法说服你,只关心自己怎么想的领导往往难以获得下属的信服。
第三,领导敢于承担责任,如果出了问题就把责任往下推,有了功劳就往自己身上揽,这样的领导不跟也罢。选择领导,要选择关键时刻能抗得住的领导,能够为下属的错误买单的领导,因为这是他作为领导的责任。
有可能,你碰不到好领导,因为,中国的领导往往是屁股决定脑袋的领导,因为他坐领导的位置,所以他的话就比较有道理,这是传统观念官本位的误区,可能有大量的这种无知无能的领导,只是,这对于你其实是好事,如果将来有一天你要超过他,你希望他比较聪明还是比较笨?相对来说这样的领导其实不难搞定,只是,你要把自己的身段放下来而已。多认识一些人,多和比自己强的人打交道,同样能找到好的老师,不要和一群同样郁闷的人一起控诉社会,控诉老板,这帮不上你,只会让你更消极。和那些比你强的人打交道,看他们是怎么想的,怎么做的,学习他们,然后跟更强的人打交道。
选择
我们每天做的最多的事情,其实是选择,因此在谈职业生涯的时候不得不提到这个话题。
我始终认为,在很大的范围内,我们究竟会成为一个什么样的人,决定权在我们自己,每天我们都在做各种各样的选择,我可以不去写这篇文章,去别人的帖子拍拍砖头,也可以写下这些文字,帮助别人的同时也整理自己的思路,我可以多注意一下格式让别人易于阅读,也可以写成一堆,我可以就这样发上来,也可以在发以前再看几遍,你可以选择不刮胡子就去面试,也可以选择出门前照照镜子……每天,每一刻我们都在做这样那样的决定,我们可以漫不经心,也可以多花些心思,成千上万的小选择累计起来,就决定了最终我们是个什么样的人。
从某种意义上来说我们的未来不是别人给的,是我们自己选择的,很多人会说我命苦啊,没得选择啊,如果你认为“去微软还是去IBM”“上清华还是上北大”“当销售副总还是当厂长”这种才叫选择的话,的确你没有什么选择,大多数人都没有什么选择。但每天你都可以选择是否为客户服务更周到一些,是否对同事更耐心一些,是否把工作做得更细致一些,是否把情况了解得更清楚一些,是否把不清楚的问题再弄清楚一些……你也可以选择在是否在痛苦中继续坚持,是否抛弃掉自己的那些负面的想法,是否原谅一个人的错误,是否相信我在这里写下的这些话,是否不要再犯同样的错误……生活每天都在给你选择的机会,每天都在给你改变自己人生的机会,你可以选择赖在地上撒泼打滚,也可以选择咬牙站起来。你永远都有选择。有些选择不是立竿见影的,需要累积,比如农民可以选择自己常常去浇地,也可以选择让老天去浇地,诚然你今天浇水下去苗不见得今天马上就长出来,但常常浇水,大部分苗终究会长出来的,如果你不浇,收成一定很糟糕。
每天生活都在给你机会,他不会给你一叠现金也不会拱手送你个好工作,但实际上,他还是在给你机会。我的家庭是一个普通的家庭,没有任何了不起的社会关系,我的父亲在大学毕业以后就被分配到了边疆,那个小县城只有一条马路,他们那一代人其实比我们更有理由抱怨,他们什么也没得到,年轻的时候文化大革命,书都没得读,支援边疆插队落户,等到老了,却要给年轻人机会了。他有足够的理由像成千上万那样的青年一样坐在那里抱怨生不逢时,怨气冲天。然而在分配到边疆的十年之后,国家恢复招研究生,他考回了原来的学校。研究生毕业,他被分配到了安徽一家小单位里,又是3年以后,国家第一届招收博士生,他又考回了原来的学校,成为中国第一代博士,那时的他比现在的我年纪还大。生活并没有放弃他,他也没有放弃生活。10年的等待,他做了他自己的选择,他没有放弃,他没有破罐子破摔,所以时机到来的时候,他改变了自己的人生。你最终会成为什么样的人,就决定在你的每个小小的选择之间。
你选择相信什么?你选择和谁交朋友?你选择做什么?你选择怎么做?……我们面临太多的选择,而这些选择当中,意识形态层面的选择又远比客观条件的选择来得重要得多,比如选择做什么产品其实并不那么重要,而选择怎么做才重要。选择用什么人并不重要,而选择怎么带这些人才重要。大多数时候选择客观条件并不要紧,大多数关于客观条件的选择并没有对错之分,要紧的是选择怎么做。一个大学生毕业了,他要去微软也好,他要卖猪肉也好,他要创业也好,他要做游戏代练也好,只要不犯法,不害人,都没有什么关系,要紧的是,选择了以后,怎么把事情做好。
除了这些,你还可以选择时间和环境,比如,你可以选择把这辈子最大的困难放在最有体力最有精力的时候,也可以走一步看一步,等到了40岁再说,只是到了40多岁,那正是一辈子最脆弱的时候,上有老下有小,如果在那个时候碰上了职业危机,实在是一件很苦恼的事情。与其如此不如在20多岁30多岁的时候吃点苦,好让自己脆弱的时候活得从容一些。你可以选择在温室里成长,也可以选择到野外磨砺,你可以选择在办公室吹冷气的工作,也可以选择40度的酷热下,去见你的客户,只是,这一切最终会累积起来,引导你到你应得的未来。
我不敢说所有的事情你都有得选择,但是绝大部分事情你有选择,只是往往你不把这当作一种选择。认真对待每一次选择,才会有比较好的未来。
选择职业
职业的选择,总的来说,无非就是销售、市场、客服、物流、行政、人事、财务、技术、管理几个大类,有个有趣的现象就是,500强的CEO当中最多的是销售出身,第二多的人是财务出身,这两者加起来大概超过95%。现代IT行业也有技术出身成为老板的,但实际上,后来他们还是从事了很多销售和市场的工作,并且表现出色,公司才获得了成功,完全靠技术能力成为公司老板的,几乎没有。这是有原因的,因为销售就是一门跟人打交道的学问,而管理其实也是跟人打交道的学问,这两者之中有很多相通的东西,他们的共同目标就是“让别人去做某件特定的事情。”而财务则是从数字的层面了解生意的本质,从宏观上看待生意的本质,对于一个生意是否挣钱,是否可以正常运作有着最深刻的认识。
公司小的时候是销售主导公司,而公司大的时候是财务主导公司,销售的局限性在于只看人情不看数字,财务的局限性在于只看数字不看人情。公司初期,运营成本低,有订单就活得下去,跟客户也没有什么谈判的条件,别人肯给生意做已经谢天谢地了,这个时候订单压倒一切,客户的要求压倒一切,所以当然要顾人情。公司大了以后,一切都要规范化,免得因为不规范引起一些不必要的风险,同时运营成本也变高,必须提高利润率,把有限的资金放到最有产出的地方。对于上市公司来说,股东才不管你客户是不是最近出国,最近是不是那个省又在搞严打,到了时候就要把业绩拿出来,拿不出来就抛股票,这个时候就是数字压倒一切。
前两天听到有人说一句话觉得很有道理,开始的时候我们想“能做什么?”,等到公司做大了有规模了,我们想“不能做什么。”很多人在工作中觉得为什么领导这么保守,这也不行那也不行,错过很多机会。很多时候是因为,你还年轻,你想的是“能做什么”,而作为公司领导要考虑的方面很多,他比较关心“不能做什么”。
我并非鼓吹大家都去做销售或者财务,究竟选择什么样的职业,和你究竟要选择什么样的人生有关系,有些人就喜欢下班按时回家,看看书听听音乐,那也挺好,但就不适合找个销售的工作了,否则会是折磨自己。有些人就喜欢出风头,喜欢成为一群人的中心,如果选择做财务工作,大概也干不久,因为一般老板不喜欢财务太积极,也不喜欢财务话太多。先想好自己要过怎样的人生,再决定要找什么样的职业。有很多的不快乐,其实是源自不满足,而不满足,很多时候是源自于心不定,而心不定则是因为不清楚究竟自己要什么,不清楚要什么的结果就是什么都想要,结果什么都没得到。
我想,我们还是因为生活而工作,不是因为工作而生活,生活是最要紧的,工作只是生活中的一部分。我总是觉得生活的各方面都是相互影响的,如果生活本身一团乱麻,工作也不会顺利。所以要有娱乐、要有社交、要锻炼身体,要有和睦的家庭……最要紧的,要开心,我的两个销售找我聊天,一肚子苦水,我问他们,2年以前,你什么都没有,工资不高,没有客户关系,没有业绩,处于被开的边缘,现在的你比那时条件好了很多,为什么现在却更加不开心了?如果你做得越好越不开心,那你为什么还要工作?首先的首先,人还是要让自己高兴起来,让自己心态好起来,这种发自内心的改变会让你更有耐心,更有信心,更有气质,更能包容……否则,看看镜子里的你,你满意么?
有人会说,你说得容易,我每天加班,不加班老板就会把我炒掉,每天累得要死,哪有时间娱乐、社交、锻炼?那是人们把目标设定太高的缘故,如果你还在动不动就会被老板炒掉的边缘,那么你当然不能设立太高的目标,难道你还想每天去打高尔夫?你没时间去健身房锻炼身体,但是上下班的时候多走几步可以吧,有楼梯的时候走走楼梯不走电梯可以吧?办公的间隙扭扭脖子拉拉肩膀做做俯卧撑可以吧?谁规定锻炼就一定要拿出每天2个小时去健身房?你没时间社交,每月参加郊游一次可以吧,周末去参加个什么音乐班,绘画班之类的可以吧,去尝试认识一些同行,和他们找机会交流交流可以吧?开始的时候总是有些难的,但迈出这一步就会向良性循环的方向发展。而每天工作得很苦闷,剩下的时间用来咀嚼苦闷,只会陷入恶性循环,让生活更加糟糕。
星期五, 六月 20, 2008
指导性架构设计原则
* 只要某一功能的缺失不会导致无法完成某个实际的应用程序, 就不新增该功能。
* 决定系统不做成什么样子, 与决定将它做成什么样子同样重要。 不去满足所有的需要,而是让系统具备可扩展性, 使其能够向上兼容。
* 尽可能抽象代码中的通用部分, 除非没有可以用来抽象的实例。
* 如果没有完全理解一个问题, 最好干脆不提供任何解决方案。
* 如果能用 10% 的工作完成 90% 的工作, 则选择较简单的解决方案。
* 尽可能隔离复杂性。
* 提供机制而非策略。 具体而言, 将用户界面策略交由客户去选定。
摘自 Scheifler & Gettys: "X Window System"
FreeBSD 开发手册
星期六, 十月 27, 2007
"Progmatic Unit Testing", 心得和自省
最主要的一个方面是关于测试代码本身的质量。测试代码应该与产品代码有同样的质量,因此要遵循 DRY 和正交性、低耦合的设计原则,而这一点在我之前的测试中做的很不好,以 Python Tree 来说,本来我想测试应该保证逻辑上的尽可能简单,因此为了保证测试覆盖面足够,结果包含了很多重复的语句,尤其是有时侯需要对一个变量(Tree Node)的几个方面做检查的时候,这些检查语句都要反复写,这就很不好。
在书中提到,最好从 TestCase 继承一个类,然后所有的其他所有的测试类都从这个继承基类再继承,这样可以在这个基类里面做 setUp() 和 tearDown(),并且可以自定义 assert/fail 函数。例如,对 Python Tree,我大可以这样定义:
class TestTree(unittest.TestCase):在 cutils 的 mirrord/fs_mirror 项目中也存在这个问题。这样导致我在单元测试上花费了太多的时间,特别是如果对产品代码做出改动,在单元测试中就需要改很多地方,也就是说,复用性不好!不够专业。
def assertValidTreeNode(node, value):
self.failUnlessEqual(node(), value)
...
class TestSetAttr(TestTree):
def testNotExisted():
self.root.branch = 1
self.assertValidTreeNode(self.root.branch, 1)
...
另一个重要的问题是”独立性“不好。这一点在做 cutils 的 mirrord/fs_mirror 的时候尤其明显。一个方面是对于环境的依赖,在 mirrord/fs_mirror 中,因为并发非常重要,所以在 test_mirrord 中需要测试这种不同的并发情况会产生的不同的结果,之前的做法就是调度一个实际的实例,然后进行一些 sleep/wait 来等待并发的状态变化。但因为并发状态会如何变化是不受控制的,在不同的主机上结果也可能完全不同,所以只能等的更久来保证状态一定会变化(实际上有时侯也难以完全保证),结果就是运行的时间很长。另外,这也导致了在编写的时候更难保持 DRY 和正交性、低耦合的原则,对进度很不利。
我当时还在找多线程/并发的单元测试方法,好像对于 Java 还有专门的这样的软件。但现在看来,其实并不需要,只要利用 Mock 对象,模拟出相同的接口,然后在里面可控的设置并发状态,这个问题应该很好解决。
在 caxes Tree 的顺序问题也反映了独立性不够,主要是必须保证以前的节点不会因为后面的操作而受到影响,之前的做法就是逐一检查,当然也就导致了重复,而且后面的操作受前面的影响,没有前面的操作,后面就无从谈起,但完全可以利用 fixture 做多个 TestSuite,每次使用 fixture 和 test case 的 setUp() 重建就好了,然后利用 fixture 和 test suites 重新调用前面的测试就可以了。
在 test_mirrord 也有顺序问题,因为并发状态不同,可能结果不同,那么测试 server thread 的时候和测试 monitor 的时候结果可能不同!我之前的做法显然是错误的,只是因为想不到好的办法,就将前面测试 monitor 的结果记录到文件中,在 测试 server thread 的时候调出来比较,这显然不正确,只不过一般机器的运行调度结果在一般情况下会一样,所以基本上不会出现 fail 而已。
关于测试的“彻底性”和"自动化"方面,应该做得还可以,不过因为复用性不好,比较烦琐。当然,书中提到的对测试覆盖和边界条件的检查的原则还是相当有价值的,我之前也很难说做的很好。
另外,使用数据文件的技巧也很有意思。
要重写了! '')
星期四, 十月 11, 2007
Some Distributed Design Principles
* As Ken Arnold says: "You have to design distributed systems with the expectation of failure." Avoid making assumptions that any component in the system is in a particular state. A classic error scenario is for a process to send data to a process running on a second machine. The process on the first machine receives some data back and processes it, and then sends the results back to the second machine assuming it is ready to receive. Any number of things could have failed in the interim and the sending process must anticipate these possible failures.
* Explicitly define failure scenarios and identify how likely each one might occur. Make sure your code is thoroughly covered for the most likely ones.
* Both clients and servers must be able to deal with unresponsive senders/receivers.
* Think carefully about how much data you send over the network. Minimize traffic as much as possible.
* Latency is the time between initiating a request for data and the beginning of the actual data transfer. Minimizing latency sometimes comes down to a question of whether you should make many little calls/data transfers or one big call/data transfer. The way to make this decision is to experiment. Do small tests to identify the best compromise.
* Don't assume that data sent across a network (or even sent from disk to disk in a rack) is the same data when it arrives. If you must be sure, do checksums or validity checks on data to verify that the data has not changed.
* Caches and replication strategies are methods for dealing with state across components. We try to minimize stateful components in distributed systems, but it's challenging. State is something held in one place on behalf of a process that is in another place, something that cannot be reconstructed by any other component. If it can be reconstructed it's a cache. Caches can be helpful in mitigating the risks of maintaining state across components. But cached data can become stale, so there may need to be a policy for validating a cached data item before using it.
If a process stores information that can't be reconstructed, then problems arise. One possible question is, "Are you now a single point of failure?" I have to talk to you now - I can't talk to anyone else. So what happens if you go down? To deal with this issue, you could be replicated. Replication strategies are also useful in mitigating the risks of maintaining state. But there are challenges here too: What if I talk to one replicant and modify some data, then I talk to another? Is that modification guaranteed to have already arrived at the other? What happens if the network gets partitioned and the replicants can't talk to each other? Can anybody proceed?
There are a set of tradeoffs in deciding how and where to maintain state, and when to use caches and replication. It's more difficult to run small tests in these scenarios because of the overhead in setting up the different mechanisms.
* Be sensitive to speed and performance. Take time to determine which parts of your system can have a significant impact on performance: Where are the bottlenecks and why? Devise small tests you can do to evaluate alternatives. Profile and measure to learn more. Talk to your colleagues about these alternatives and your results, and decide on the best solution.
* Acks are expensive and tend to be avoided in distributed systems wherever possible.
* Retransmission is costly. It's important to experiment so you can tune the delay that prompts a retransmission to be optimal.
From:
http://code.google.com/edu/parallel/dsd-tutorial.html
星期三, 七月 04, 2007
能够信赖你的电脑吗?
Posted by shentao at 2004-12-01 04:50 AM
http://gentoo.hsefz.com/linux/Linux%20Forum/public/794732524923/
没有警觉性的的眼睛太容易被蒙蔽了。
原文
http://www.gnu.org/philosophy/can-you-trust.cn.html
【本文是重要的 GNU 哲学页面, 请不吝於提供对於本文翻译的意见。 <chliu@gnu.org> 同时为了便於读者引用查找, 於中译文本上的每一段都附有参考标号。 我们也欢迎关於本文的各种讨论: <chinese-translators@gnu.org> 。】
Who should your computer take its orders from? Most people think their computers should obey them, not obey someone else. With a plan they call "trusted computing", large media corporations (including the movie companies and record companies), together with computer companies such as Microsoft and Intel, are planning to make your computer obey them instead of you. (Microsoft's version of this scheme is called "Palladium".) Proprietary programs have included malicious features before, but this plan would make it universal.
1 您的电脑应该听取谁的命令? 大部份的人认为他们的电脑应该服从他们而不是某个其他人。 经由一项他们称之为“可信赖的计算”(trusted computing)的打算, 大型的媒体公司(包括电影和录制公司) 以及像是 Microsoft 和 Intel 的电脑公司, 正打算要使您的电脑服从他们而不是您。 (这项方案的 Microsoft 版本称之为“安全装备”: Palladium 。) 私权的程序在以前就已经有包括了一些恶意的功能特色(features), 但是这项打算将会使其普遍化。
Proprietary software means, fundamentally, that you don't control what it does; you can't study the source code, or change it. It's not surprising that clever businessmen find ways to use their control to put you at a disadvantage. Microsoft has done this several times: one version of Windows was designed to report to Microsoft all the software on your hard disk; a recent "security" upgrade in Windows Media Player required users to agree to new restrictions. But Microsoft is not alone: the KaZaa music-sharing software is designed so that KaZaa's business partner can rent out the use of your computer to their clients. These malicious features are often secret, but even once you know about them it is hard to remove them, since you don't have the source code.
2 私权软件在本质上即表示: 您无法控制它要做些什么; 您不能研究源码或是更动它。 聪明的商人找出一些方法利用他们的控制, 来使您处於劣势的行为并不让人感到惊讶。 Microsoft 已经做过许多次了: 有一个版本的 Windows 被设计来将在您的硬碟上的所有软件回报给 Microsoft ; 一个最近在 Windows Media Player 上的“安全” 升级要求使用者同意新的限制(restrictions)。 但 Microsoft 并不孤单: KaZaa 这个音乐分享(music-sharing)软件被设计成, 使 KaZaa 的商业伙伴可以将您的电脑的使用出租给他们的客户。 这些恶意的功能特色通常是隐密的, 但是就算您发现到, 也很难将它们移除, 因为您并没有源码。
In the past, these were isolated incidents. "Trusted computing" would make it pervasive. "Treacherous computing" is a more appropriate name, because the plan is designed to make sure your computer will systematically disobey you. In fact, it is designed to stop your computer from functioning as a general-purpose computer. Every operation may require explicit permission.
3 在过去, 这些都是个别〔发生〕的事件。 “可信赖的计算”(Trusted computing)将可能使它变得普遍。 “背判了的计算”是一个较为合适的名称, 因为这项打算是设计用来确保您的电脑将会有系统地不服从您。 事实上, 它是设计用来使您的电脑无法作为一台通用的计算机(general-purpose computer)。 每一项操作都将会需要明确的许可〔才得以进行〕。
The technical idea underlying treacherous computing is that the computer includes a digital encryption and signature device, and the keys are kept secret from you. Proprietary programs will use this device to control which other programs you can run, which documents or data you can access, and what programs you can pass them to. These programs will continually download new authorization rules through the Internet, and impose those rules automatically on your work. If you don't allow your computer to obtain the new rules periodically from the Internet, some capabilities will automatically cease to function.
4 在「背判了的计算」底下的技术想法是: 电脑包括了一个数位加密(digital encryption) 以及签章(signature)装置, 而其键值(keys)对您来说则是〔无法取得的〕秘密。 私权程序将会使用这项装置来控制「您可以执行的其它程序」、 「您可以储存的文档或资料」以及「您可以传递的程序」。 这些程序将会持续地经由互联网下载新的认证规则(authorization rules), 并且自动地将那些规则加诸到您的工作上。 如果您不允许您的电脑定期地从互联网取得新的规则, 〔那么〕一些功能(capabilities)将会自动地停止作用(function)。
Of course, Hollywood and the record companies plan to use treacherous computing for "DRM" (Digital Restrictions Management), so that downloaded videos and music can be played only on one specified computer. Sharing will be entirely impossible, at least using the authorized files that you would get from those companies. You, the public, ought to have both the freedom and the ability to share these things. (I expect that someone will find a way to produce unencrypted versions, and to upload and share them, so DRM will not entirely succeed, but that is no excuse for the system.)
5 当然, 好莱坞(Hollywood)以及录制公司打算要将「背判了的计算」用到“DRM” (数位限制管理: Digital Restrictions Management)上, 这样一来下载的录像品(videos)和音乐就只能够在一台指定的电脑上播放。 分享将是完全的不可能, 至少使用您可能从那些公司下载的认证档案是如此。 您,也就是公众, 应当同时拥有自由和能力来分享这些事物。 (我期望将有某个人能找出一个制作出没有加密版本的方法, 并且上载分享它们, 这样子 DRM 将不会完全地成功, 但那不能作为这个体系〔合理化〕的藉口。)
Making sharing impossible is bad enough, but it gets worse. There are plans to use the same facility for email and documents--resulting in email that disappears in two weeks, or documents that can only be read on the computers in one company.
6 使得分享变得不可能已经是够糟的了, 但还有更糟的。 他们打算要使用同样的设施(facility)到电子邮件和文档上 -- 造成电子邮件会在两个星期内消失, 或是文档只可以在一间公司内的电脑上被阅读。
Imagine if you get an email from your boss telling you to do something that you think is risky; a month later, when it backfires, you can't use the email to show that the decision was not yours. "Getting it in writing" doesn't protect you when the order is written in disappearing ink.
7 设想如果您从您的老板那里收到一封电子邮件, 要求您去做一件您认为太过於冒险的事; 一个月后, 这事情与〔他的〕预期相反时, 您无法使用那封电子邮件来显示那个决定并不是您所作出的。 当这个命令是以会消失的墨水撰写时, “白纸黑字地写下来”并不足以保护您。
Imagine if you get an email from your boss stating a policy that is illegal or morally outrageous, such as to shred your company's audit documents, or to allow a dangerous threat to your country to move forward unchecked. Today you can send this to a reporter and expose the activity. With treacherous computing, the reporter won't be able to read the document; her computer will refuse to obey her. Treacherous computing becomes a paradise for corruption.
8 设想如果您自您的老板那里收到一封电子邮件, 陈述了一个违反了法律或道德的政策, 像是将您的公司的帐簿丢进碎纸机, 或是允许一个对您的国家的严重威胁继续进行而不受检查。 在今天您可以将这类事情送给〔新闻〕记者并揭露这个活动。 但是经由「背判了的计算」, 记者将无法阅读这份文档, 她的电脑将会拒绝服从她。 「背判了的计算」变成了舞弊的天堂。
Word processors such as Microsoft Word could use treacherous computing when they save your documents, to make sure no competing word processors can read them. Today we must figure out the secrets of Word format by laborious experiments in order to make free word processors read Word documents. If Word encrypts documents using treacherous computing when saving them, the free software community won't have a chance of developing software to read them--and if we could, such programs might even be forbidden by the Digital Millennium Copyright Act.
9 像是 Microsoft Word 的文书处理器, 可以在当它们储存您的文档时使用「背判了的计算」, 以确保没有与之竞争的文书处理器可以阅读它们。 今天我们必须费力地尝试来理解 Word 格式〔为何〕, 以制作出可以阅读 Word 文档的自由文书处理器。 如果 Word 在当它储存文档时使用「背判了的计算」, 自由软件社团将不会有机会开发出可以阅读它们的软件 -- 即便我们办得到, 这样子的程序甚至也会被“数位千禧年版权法案” (Digital Millennium Copyright Act)所禁止。
Programs that use treacherous computing will continually download new authorization rules through the Internet, and impose those rules automatically on your work. If Microsoft, or the US government, does not like what you said in a document you wrote, they could post new instructions telling all computers to refuse to let anyone read that document. Each computer would obey when it downloads the new instructions. Your writing would be subject to 1984-style retroactive erasure. You might be unable to read it yourself.
10 使用「背判了的计算」的程序, 将会持续地自互联网下载新的认证规则, 并且将这些自动地加诸到您的工作上。 如果 Microsoft 或是美国政府不喜欢在某份您所撰写的文档中所说的事, 他们可以发出新的指示, 告诉所有的电脑拒绝让任何人阅读那份文档。 每一台电脑在它下载了新的指示后都将会遵守。 您的著述将会受到有如小说《一九八四》中所描述的(1984-style) 「追溯既往而有效的删去」(retroactive erasure)。 【《一九八四》(1984)是英国作家乔治·欧威尔(George Orwell) 於一九四九年发表的科幻小说; 相对应的则是赫胥黎(Aldous Huxley) 於一九三二年所发表的《美丽新世界》(Brave New World) -- 它也是《勇敢 GNU 世界》(Brave GNU World)名称的由来。】 您有可能连您自己都无法阅读它。
You might think you can find out what nasty things a treacherous computing application does, study how painful they are, and decide whether to accept them. It would be short-sighted and foolish to accept, but the point is that the deal you think you are making won't stand still. Once you come depend on using the program, you are hooked and they know it; then they can change the deal. Some applications will automatically download upgrades that will do something different--and they won't give you a choice about whether to upgrade.
11 您也许会想: 您可以看穿「“背判了的计算”的程序在做的卑鄙事」, 研究〔使用它们〕将会付出什么代价, 然后再来决定是否要使用它们。 接受将会是短视而且愚蠢的, 重点在於您认为您所作出的协议并不会保持不变。 一旦您变得依赖於使用〔那些〕程序, 您就被套牢了(hooked), 而且他们清楚得很; 然后他们就可以更动这项协议。 一些应用程序将会自动地下载「将会做出某些不一样的事情的」升级 -- 而他们可不会给您一个是否要升级的选择。
Today you can avoid being restricted by proprietary software by not using it. If you run GNU/Linux or another free operating system, and if you avoid installing proprietary applications on it, then you are in charge of what your computer does. If a free program has a malicious feature, other developers in the community will take it out, and you can use the corrected version. You can also run free application programs and tools on non-free operating systems; this falls short of fully giving you freedom, but many users do it.
12 今天您可以经由不去使用它来避免被私权软件所限制。 如果您执行 GNU/Linux 或是其它的自由操作系统, 并且如果您避免在它上面安装私权应用程序, 那么您就换得了〔完全地掌握〕您的电脑做些什么〔的自由〕。 如果一个自由程序有一个恶意的功能特色, 在社团里的其他程序员将会把它除去, 然后您就可以使用修正过的版本了。 您也可以在不自由的操作系统上执行自由的应用程序和工具; 这并不足以给予您完全的自由, 但是有许多使用者这么做。
Treacherous computing puts the existence of free operating systems and free applications at risk, because you may not be able to run them at all. Some versions of treacherous computing would require the operating system to be specifically authorized by a particular company. Free operating systems could not be installed. Some versions of treacherous computing would require every program to be specifically authorized by the operating system developer. You could not run free applications on such a system. If you did figure out how, and told someone, that could be a crime.
13 「背判了的计算」 将自由操作系统和自由应用程序的存续置於危险的境地, 因为您将根本无法执行它们。 一些版本的「背判了的计算」, 将会需要操作系统被某个特定的公司明确地给予认证。 自由的操作系统将无法被安装。 一些版本的「背判了的计算」, 将会需要每一个程序都要被操作系统开发者明确地给予认证。 您无法在这样的一个操作系统上执行自由的应用程序。 如果您真的了解了要如何做, 并且告诉了某人, 那可能是一种犯罪行为。
There are proposals already for US laws that would require all computers to support treacherous computing, and to prohibit connecting old computers to the Internet. The CBDTPA (we call it the Consume But Don't Try Programming Act) is one of them. But even if they don't legally force you to switch to treacherous computing, the pressure to accept it may be enormous. Today people often use Word format for communication, although this causes several sorts of problems (see "We Can Put an End to Word Attachments"). If only a treacherous computing machine can read the latest Word documents, many people will switch to it, if they view the situation only in terms of individual action (take it or leave it). To oppose treacherous computing, we must join together and confront the situation as a collective choice.
14 已经有一些在美国法律上的提议: 要求所有的电脑都支持「背判了的计算」, 并且禁止将旧电脑连结到互联网上。 CBDTPA (我们称它为“消费就好,不要试著编写程序”法案: Consume But Don't Try Programming Act)就是其中之一。 但是即使他们并没有在法律上强制您切换到「背判了的计算」, 〔被迫〕接受它的压力还是很大。 今天人们通常使用 Word 格式来通信, 虽然这会造成许多类型的问题。 (请见 “我们可以终结使用 Word 附加档案”:We Can Put an End to Word Attachments) 〔但是〕如果只有「背判了的计算」的机器可以阅读最新的 Word 文档, 并且如果他们所看到的形势只是以个别的动作(接受或离开)来表现时, 许多人将会切换到它。 为了反制「背判了的计算」, 我们必须结合在一起面对这个形势, 以作为我们集体的选择。
For further information about treacherous computing, see
To block treacherous computing will require large numbers of citizens to organize. We need your help! The Electronic Frontier Foundation and Public Knowledge are campaigning against treacherous computing, and so is the FSF-sponsored Digital Speech Project. Please visit these Web sites so you can sign up to support their work.
16 要阻挡「背判了的计算」将会需要很大数目的公民组织起来。 我们需要您的帮助! 电子先锋基金会(Electronic Frontier Foundation) 和 公众知识(Public Knowledge) 正在发起对抗「背判了的计算」的活动, 由自由软件基金会资助的 数位言论工程(Digital Speech Project) 也有参与。 请拜访这些网站, 这样您就可以签名来支持他们的工作了。
You can also help by writing to the public affairs offices of Intel, IBM, HP/Compaq, or anyone you have bought a computer from, explaining that you don't want to be pressured to buy "trusted" computing systems so you don't want them to produce any. This can bring consumer power to bear. If you do this on your own, please send copies of your letters to the organizations above.
17 您也可以经由撰写给 Intel 、 IBM 、 HP/Compaq 或任何您从他那里购买电脑的人, 解释您不想要被强迫购买“可信赖”的计算系统, 因此您不希望他们制造任何这样子的系统。 这可以带给消费者维持〔自由〕的力量。 如果您自行采取行动, 请将您的信件副本送到上述的机构。
后记
- The GNU Project distributes the GNU Privacy Guard, a program that implements public-key encryption and digital signatures, which you can use to send secure and private email. It is useful to explore how GPG differs from treacherous computing, and see what makes one helpful and the other so dangerous.
18 GNU 工程散布了 GNU Privacy Guard (GNU 隐私守卫), 那是一个实现了公开键加密(public-key encryption) 以及数位签章的程序, 您可以使用来送出安全且秘密的电子邮件。 浏览一下 GPG 是如何与「背判了的计算」不同是有用处的, 并且看看那些对於某人有帮助的事物〔为什么〕对其他人是如此的危险。
When someone uses GPG to send you an encrypted document, and you use GPG to decode it, the result is an unencrypted document that you can read, forward, copy, and even re-encrypt to send it securely to someone else. A treacherous computing application would let you read the words on the screen, but would not let you produce an unencrypted document that you could use in other ways. GPG, a free software package, makes security features available to the users; they use it. Treacherous computing is designed to impose restrictions on the users; it uses them.
19 当某人使用 GPG 送给您一份加密的文档, 并且您使用了 GPG 来将它解码, 〔所得到的〕结果是一份您可以阅读、〔进一步〕传递、 复制甚至再次加密并安全地送给某个其他人的解密文档。 一个「背判了的计算」应用程序将会让您在萤幕上阅读这些文字, 但是不让您〔能够〕制作出一份可以让您以其它方式使用的解密文档。 GPG 这个自由软件包, 让「安全的功能特色」可以为使用者所取得; 他们使用它。 「背判了的计算」则是设计来将限制加诸到使用者身上; 它利用了他们。
- Microsoft presents palladium as a security measure, and claims that it will protect against viruses, but this claim is evidently false. A presentation by Microsoft Research in October 2002 stated that one of the specifications of palladium is that existing operating systems and applications will continue to run; therefore, viruses will continue to be able to do all the things that they can do today.
20 Microsoft 简报了 palladium 作为一种安全手段, 并且宣称它将会保护〔电脑〕免受病毒的侵袭, 但是证据显示这项宣称完全是站不住脚。 由 Microsoft Research (研究部门)在二○○二年十月所作的一场简报, 说明了 palladium 的其中一项规格是: 现存的操作系统以及应用程序将会继续地采用; 因此, 病毒也将能够继续地做它们今天能做的所有事情。
When Microsoft speaks of "security" in connection with palladium, they do not mean what we normally mean by that word: protecting your machine from things you do not want. They mean protecting your copies of data on your machine from access by you in ways others do not want. A slide in the presentation listed several types of secrets palladium could be used to keep, including "third party secrets" and "user secrets"--but it put "user secrets" in quotation marks, recognizing that this somewhat of an absurdity in the context of palladium.
21 当 Microsoft 在谈论到与 palladium 作连接的“安全”时, 他们指的「并不是」我们通常用来表示那个字的意思: 保护您的机器,使其免於受到您不想要〔的事物侵扰〕。 他们指的是保护在您的机器上的您的资料的拷贝, 使其免於被您〔自己〕以其他人不希望的方式进行存取(access)。 简报中的一个幻灯片列出了数个 palladium 可能用来维护的秘密类型, 包括了“第三团体(third party)的秘密”以及“使用者的秘密” -- 但是它将“使用者的秘密”放到引号中, 「似乎」将它认知为: 就 palladium 的〔开发〕脉络而言, 这实在有点荒谬。
The presentation made frequent use of other terms that we frequently associate with the context of security, such as "attack", "malicious code", "spoofing", as well as "trusted". None of them means what it normally means. "Attack" doesn't mean someone trying to hurt you, it means you trying to copy music. "Malicious code" means code installed by you to do what someone else doesn't want your machine to do. "Spoofing" doesn't mean someone fooling you, it means you fooling palladium. And so on.
22 简报中频繁地使用当我们谈到安全时, 经常会使用到的其它字眼, 像是“攻击”(attack)、 “恶意的代码”(malicious code)、 “欺骗”(spoofing)以及“可信赖的”(trusted)。 〔但是〕它们之中没有一个指的是我们通常用来表示的意思。 “攻击”并不是指某人试图要伤害您, 它是指您试图要复制音乐; “恶意的代码”指的是由您〔自己〕所安装的代码, 而这代码可能做得出某个「其他人」不希望您的机器去做的某些事; “欺骗”并不是指某人欺骗了您, 它指的是您玩弄了 palladium 。 诸如此类……。
- A previous statement by the palladium developers stated the basic premise that whoever developed or collected information should have total control of how you use it. This would represent a revolutionary overturn of past ideas of ethics and of the legal system, and create an unprecedented system of control. The specific problems of these systems are no accident; they result from the basic goal. It is the goal we must reject.
23 由一个 palladium 开发者先前所作的声明, 说明了它的基本根据是: 不论是谁开发或收集了信息, 应该都对「您如何使用它」具有完全的控制权。 这是对於过去「伦理」和「法律体系」的观念的一种革命性的推翻, 并且创造了一种前所未见的控制体系。 〔关於〕这些系统的特定问题并不是出於偶然; 它们是来自於〔有意识的〕基本目标。 而这目标正是我们必须拒绝的。
Copyright © 2002 Richard Stallman.
Verbatim copying and distribution of this entire article is permitted without royalty in any medium provided this notice is preserved.
【本文允许在无须支付版税, 且不变更文档内容的前提下刊登在任何形式的媒体中, 但需保留此声明。】
星期二, 三月 27, 2007
从 txt2tags 进一步认识标记语句
感觉上,TeX/LaTeX 的标记设计得不是非常清楚,所以为了达到形式与内容分离,需要花费大量的精力,自己定义模板,而效果也不是十分理想;为了实现各种功能,可能需要选择大量新的标记和新的模块包(\usepackage),使本身已经陡峭的学习曲线更加让人生畏;而且为了使 TeX/LaTeX 适应中文也相当麻烦(基本上没有什么软件的中文化不麻烦的,我想现在的编码方式还是有问题)。
后来决定转移到 xml docbook。xml 的标记设计相当的标准,而且 docbook 在一开始就实现了形式与内容的分离。通过样式文件 XSL 来改变目标文档(html/PDF 等)的外观,而作者集中精力于编写的内容。
不过我现在却在使用 txt2tags(.t2t 文件),最主要的一个原因是:简单(KISS)。它的标记非常的简单和直观,从人的感观来说,和编辑普通的 txt 文件没有太大区别,因此具有很强的可读性。使用 XML 的好处的确很多,但其学习曲线也颇为陡峭,在企业当中的现实往往是,让人们去花费精力学习 XML,他们可能会宁可选择 Micro$oft Word。使用 .doc 的弊端是很明显的,那就是你没办法版本化,或者说版本化的意义不大(无法比较,无法查知在什么时候、谁做了哪些改动),因而你无法获得集中管理的优势,在多人协作中将造成巨大的重复成本,因为你没办法同步文档。而使用 t2t,最多只需要半个小时的学习就可以开始使用了(看看 sample,实际上几分钟就可以了,倒是设置编辑器的语法高亮花的时间还多一点)——当然,有问题的时候你还是需要去查查手册,一些比较高级的功能也是需要深入学习才能了解(不需要深入太多)。
当然 t2t 的简单也有其局限性,虽然它的确基本上实现了内容与形式分离(因为实在是很简单),但它的标记太少,不适合比较复杂的文档,另外它缺乏 footnote 和 xref(文档应用)以及索引等功能。而且,它也没有明确的部分、章、节的划分,只是一个层次结构而已。
所以,实际上我心里还是比较倾向于 XML,不过考虑到现在公司的实际情况,而且我还需要能够对 xml 的编辑和使用加深一些学习,比如设置 vim 编辑器等,所以 txt2tags 还是一个不错的选择。
目前来看,我只能是在将来再将现在用 t2t 编写的文档转变为 xml docbook(还得找或者写程序,t2t 默认只支持 SGML),而不可能同时使用这两套系统,并且一旦我转变为 XML,就不大有希望再试听 t2t 了。最主要的原因是 txt2tags <=> xml docbook 的标记之间是一个一对多的关系,即一个 txt2tags 标记在 xml docbook 可以多个标记来表示。如果编写 xml docbook 的人使用了 docbook 才有的特性,这些特性要么不能显示,要么干脆会丢失,因为使用 t2t 的人在提交和转换的时候会导致这些信息丢失。
除非我改变 t2t 的标记,在其中保留一些诸如"<"screen">""<"/screen">"的 XML 标记,而扩充的 txt2tags 在处理的时候能够自动忽略这些标记,或通过一个映射表将其转换为某种它能够处理的标记。不过重点还是在 XML,即后台时间实现自动化处理以转换其他文档的还是 XML 文档,即增加了一层,由
txt2tags --> html/pdf/tex变为
txt2tags --> xml docbook --> html/pdf/tex。但是所有人仍然必须编辑 t2t 文件而不是同时编辑 t2t 和 xml 文件,否则是无法同步的。
这样做的目的是一方面在最大程度上保持了 t2t 的简单性,同时在 t2t 无法达到要求的时候采用 xml。
关于映射表,参考 txt2tags 源代码(python),可以发现它实际上做了一个标记的映射,将 txt2tags 的标记和其他格式文档的标记进行 dict map。不过它这个映射表是写在代码里面的,这使我考虑是否能将其写在外部,作为一种 schema 而存在。这样不仅能实现上面的转换要求,而且可以实现一些比如自定义标签的功能。
自定义标签?比如假设我已经编写了一个脚本可以处理这些 schema,并且可以做转换,那么我可能会使用如下的命令:
sh$ ctags schema text.t2t >text...当然还可以使用 html 等,不过我觉得不太好,因为既然 xml 最标准,那么为什么还要其他的呢?直接利用 xml 的威力就好了。并且对同一个 xml 文档,我还可以通过使用不同的映射关系来实现一些差别化的功能...
例如 xml 文件:
sh$ ctags xml.schema text.t2t >text.xml
那么一个 schema 可能的形式如下:
xml_tag_name, src_tag_start, src_tag_end, dst_tag_start, dst_tag_end如
verbatim, ``, ``, "<"verbatim">", "<"/verbatim">"
星期日, 十二月 31, 2006
Kerberos 的原理
Athena: 雅典娜,智慧与技艺的女神。
Euripides: 欧里庇得斯,希腊的悲剧诗人。
译文如下:
第一幕
在一个小工作间里。Athena 和 Euripides 正在相邻的终端上工作。
Athena: 嗨,这个分时操作系统实在太慢了。我根本无法工作,因为每个人都登上去了。
Euripides: 不要对我报怨。我只是在这工作。
Athena: 你知道我们需要什么吗?我们需要给每一个人一台工作,这样大家就不会担心计算机的速度了。并且,我们需要一个网络把所有的计算机都联起来。
Euripides: 好。那么我们差不多要一千台工作站?
Athena: 差不多吧。
Euripides: 你知道一台普通的工作站的硬盘有多大吗?那里放不下所有的软件。
Athena: 我已经有主意了。我们可以把系统软件放到服务器上。当你登录到工作站的时候,工作站会通过网络与其中一台服务器上的系统软件联系。这样的设置让一组工作站都使用同一份系统软件,并且利于系统软件的升級。只需改动服务器就可以了。
Euripides: 好的。个人的文件怎到办呢?在分时操作系统上,我可以登录并从终端上取走我的文件。我能到工作站上取我的文件吗?我要象PC用户一样把我的文件放到磁盘上去吗?我希望不。
Athena: 我想我们可以其它机器来存文件。你可以到任何一台机器上登录去取你的文件。
Euripides: 打印怎么办呢?每个工作站都要有自已的打印机吗?谁来付钱?电子邮件呢?你怎么把邮件送到所有的工作站上去呢?
Athena: 啊......很明显我们没钱为每个人配一台打印机,但我们有专门的机器做打印服务。你把请求送到服务器,它就为你打印。邮件也可以这样做。专门有一台邮件服务器。你如果想要你的邮件,就联系邮件服务器,取走你的邮件。
Euripides: 你的工作站系统听起来很不错。如果我有一台,你知道我要做什么吗?我要找出你的用户名,让我的工作站认为我就是你。然后我就去邮件服务器取走你的邮件。我会联上你的文件服务器,移走你的文件,然后...
Athena: 你能做得到吗?
Euripides: 当然!这些网络服务器怎么会知道我不是你?
Athena: 嗯,我不知道。我想我需要认真思考一下。
Euripides: 好吧。你想出来后告诉我。
第二幕
Euripides 的办公室,第二天早上。Euripides 坐在他的桌子旁边,读着他的邮件。Athena 来敲门.
Athena: 我已经想出怎样保护一个开放的网络系统,使象你那样不道德的人不能用别人的名字使用网络服务。
Euripides: 真的吗?坐吧。
她坐下了。
Athena: 在我开始描述之前,我可以为我们的讨论先做一个约定吗?
Euripides: 什么约定?
Athena: 好,假设我这样说:"我想要我的邮件,于是我与邮件服务器联系,请求它把邮件送到我的工作站上来。"实际上我并没有联系服务器。我用一个程序来与服务器联系并取得我的邮件,这个程序就是这个服务的客户端。但我不想每次与服务器交互的时侯说:"客户端怎样怎样"。我只想说:"我怎样怎样,"记住,客户端在代表我做所有的事。这样可以吗?
Euripides: 当然。没问题.
Athena: 好。那么我要开始阐述我所解决的问题了。在一个开放的网络环境中,提供服务的机器必须能够识别请求服务的实体的身份。如果我去邮件服务器申请我的邮件,服务程序必须能够验证我就是我所申明的那个人。
Euripides: 没错.
Athena: 你可以用一个笨办法解决这个问题:服务器让你输入你的口令。通过输口令的办法我可以证明我是谁。
Euripides: 那确实很笨拙。在像那样的系统里面,每一个服务器必须知道你的口令。如果网络有一千个用户,那每个服务器就要知道一千个口令。如果你想改变口令,你就必须联系所有服务器,通知它们修改口令。我想你的系统不会那么笨。
Athena: 我的系统没那么笨。它是象这样工作的:不光人有口令,服务也有口令。每个用户知道他们自已的口令,每个服务也知道它自已的口令。有一个认证服务知道所有的口令,用户的和服务的。认证服务把口令保存在一个单独的中央数据库中。
Euripides: 这个认证服务有一个名字吗?
Athena: 我还没想好。你想一个吧?
Euripides: 把死人送过冥河的人是谁?
Athena: Charon?
Euripides: 对,就是他。如果他不能证实你的身份的话,他就不会把你送过河。
Athena: 你瞎编,是不是想重写希腊神话。Charon 不关心你的身份,他只是确定你死了没有。
Euripides: 你有更好的名字吗?
停了一下。
Athena: 没有,真的没有。
Euripides: 好,那我们就把这个认证服务“Charon”。
Athena: 好,我猜我该描述一下这个系统了吧,嗯?
比如说我们想要一种服务:邮件。在我的系统里面你无法使用一种服务,除非 Charon 告诉服务你确实是你所申明的人。也就是说你必须得到 Charon 的认证才能使用服务。当你向 Charon 请求认证的时候,你必须告诉 Charon 你要使用哪一个服务。如果你想用邮件,你要告诉 Charon。 Charon 请你证明你的身份。于是你送给它你的密码。Charon 把你的密码和它数据库中的密码相比较。如果相等,Charon 就认为你通过了验证。 Charon 现在就要让邮件服务知道你通过了验证。既然Charon 知道所有服务的密码,它也知道邮件服务的密码。Charon 把邮件服务的密码给你,你就可以使用这个密码使邮件服务相信你已通过验证。问题是,Charon 不能直接给你密码,因为你会知道它。下次你想要邮件服务的时候,你就会绕过 Charon 使用邮件服务而不需要认证。你也可以假装某人来使用邮件服务。 所以不是直接给你邮件服务的密码,Charon 给你一张邮件服务的“票”。这张票含有你的名字,并且名字是用邮件服务的密码加密的。拿到票,你就可以向邮件服务请求你的邮件。你向邮件服务提出请求,并用你的票来证明你的身份。服务用它自已的密码来把票解密,如果票能被正确的解密,服务器将票里的用户名取出。服务把这个名字和随票一起送上的用户名进行比较。如果相符,服务器就认为你通过了验证,就把你的邮件发给你。
你认为怎么样?
Euripides: 我有些问题。
Athena: 我猜到了。请讲。
Euripides: 当服务解密一张票的时候,它如何知道它是被正确的解密的?
Athena: 我不知道。
Euripides: 也许你应该在票里包含有服务的名字。这样当服务解密票的时候,它就可以通过能否在票中找到自已的名字来判断解密是否正确。
Athena: 很好。那票就应该是这个样子:
(她把下面的东西写在了一张纸上)
票-{用户名:服务名}
Euripides: 那票就只包含用户名和服务名?
Athena: 用服务的口令加密。
Euripides: 我不认为这些信息就可以让票安全。
Athena: 什么意思?
Euripides: 假设你向 Charon 请求一张邮件服务的票。Charon 准备了一张有你名字“tina”的票。假设在当票从Charon 传给你的过程中我拷了一份。假设我让我的工作站相信我的用户名是”tina“。邮件客户程序认为我就是你。用你的名字邮件客户程序用偷来的票向邮件服务器提出请求。邮件服务器把票解密,认为它是合法的。票里的用户名和发送该票的用户名是匹配的。邮件服务器就会发给 我你的邮件。
Athena: 喔!那可不太好。
Euripides: 但是我想到了一个办法来解决这个问题。或者说部分解决。我想 Charon 应该在票中包含更多的信息。除了用户名,票还应包含请求票的用户的IP地址。这将给你增加一层安全性。我来演示。假设现在我偷了你的票。这票有你工作站的 IP 地址,并且这地址配不上我的工作站的地址。用你的名字我把偷来的票送给邮件服务器。服务程序把用户名和网络地址从票中解出,并试图匹配用户名和网络地址。用户名匹配可网络地址不匹配。服务器拒绝了这张票,因为它明显是偷来的。
Athena: 英雄,英雄!我怎么会没想到。
Euripides: 好了,这就是我要表述的。
Athena: 那么票应该是这个样子的。
她把下面的东西写在了黑板上。
票-{用户名:地址:服务名}
Athena: 现在我真的很激动。让我们来建一个 Charon 系统看看它是否工作!
Euripides: 没那么快。对于你的系统我还有些问题。
Athena: 好吧。(Athena 从她的椅子上探出了身子)快说。
Euripides: 听起来好像每次我想要得到服务我都要去取一张新票。如果我整天的工作,我可能不只一次的要取我的邮件。我每次取邮件都要去取一张新票吗?如果真是这样,我不喜欢你的系统。
Athena: 啊...我不明白为什么票不能被重用。如果我已经得到了一张邮件服务的票,我可以一次又一次使用它。当邮件客户程序用你的名字请求了服务,它就传了一份票的拷贝给服务。
Euripides: 好一些。但我仍有问题。你似乎暗示我每次使用还没有票的服务时,我都必须给 Charon 我的密码我登录后想取我的文件。我向 Charon 请求我的票,这意味着我不得不使用我的密码。然后我想读我的邮件。又向 Charon 发一次请求,我又要输一次我的密码。现在假设我想把我的邮件送去打印。我又要向 Charon 发一次请求。你知道了吧?
Athena: 啊,是的,我明白了。
Euripides: 并且如果这还不够糟的话,想想看:它好像是这样,当每次你要向 Charon 认证的时候,你就要用明文在网络上传输你的口令。像你这样的聪明人可以监视网络并且得到别人的口令。如果我得到你的口令,我就可以用你的名字来使用任何服务。
Athena 叹了口气。
Athena: 确实有严重的问题。我想我该回设计室去了。
第三幕
第二天一早,Athena 在咖啡间遇上了 Euripides。在 Euripides 倒咖啡的时候,Athena 拍了拍 Euripides。
Athena: 我有了一个新的 Charon 的版本来解决我们的问题。
Euripides: 真的吗?好快呀。
Athena: 好,你看,这些问题困扰了我一夜。
Euripides: 一定是你良心发现了。我们去那边的小会议室吧?
Athena: 好的。
两人去了小会议室。
Athena: 我要重新描述问题,但我要根据我们的需要进行适当的转换。
Athena 清了清嗓子。
Athena: 第一个限制:用户只输一次口令,在他们工作站启动的时候,这意味着当你需要申请新的服务的票时,不需输入你的口令。第二个限制:口令不能在网络上进行明文传输。
Euripides: 好的。
Athena: 我以第一项限制开始:你只需要输入你的口令一次。我创造了一个新的网络服务来解决这个问题。它叫做“票据授权”服务,这个服务把 Charon 的票给用户。使用它必须要有票:票据授权的票。票据授权服务其实只是 Charon 的一个版本,它可以存取 Charon 的数据库。它是 Charon 的一部分,可以让你通过票而不是口令来进行认证。总之,认证系统现在是象这样工作的:你登录到一个工作站,用一个叫 kinit 的程序与 Charon 服务器通讯。你向 Charon 证明你的身份,kinit 程序取得一张票据授权票。现在你想从邮件服务器上取你的邮件。你还没有邮件服务器的票,所以你用“票据授权”票去取邮件服务的票。你不需要使用口令去取新的服务票。
Euripides: 每次我想要另一种网络服务的时候,我都要去取一张“票据授权”票吗?
Athena: 不。记住,上次我们已经同意票是能被重用的。一旦你要用到票据授权票,直接用就可以了。
Euripides: 好,有道理。既然你能重用票,一旦你得到了某个服务的票,你就无需再去取了。
Athena: 对啊,那不好吗?
Euripides: 好的,我没话说,只要你在取得票据授权票的时候没有用明文在网上传输你的口令。
Athena: 如我所说,我已解决了这个问题。听起来好像是,当我说我要和 Charon 联系取得票据授权票的时候,你就要在网络上传输明文密码。但其实不是这样的。 实际上是,当你用 kinit 程序取得票据授权票的时候,kinit 没有把你的口令送给 Charon 服务器,kinit 只送你的用户名。
Euripides: 很好。
Athena: Charon 用用户名去查找你的口令。然后 Charon 就会组一个包含票据授权票的包。在送给你之前,Charon 用你的口令去把这个包加密。你的工作站收到了包。你输入你的口令。kinit 用你的口令对这个包进行解密。如果成功你就向Charon 成功的进行了认证。你现在有了票据授权票,你可以用这张票来取得其它的票。
这些奇思妙想怎么样?
Euripides: 我不知道...我正在思考。你知道你的系统一部分工作得很好。你的系统只需要我认证一次。以后,Charon 会给我服务的票而我需要关心。天衣无缝,天衣无缝。但服务票的设计还是有一些困扰我。服务票是可重用的。我同意它们应该能被重用,但重用的服务票,由于它们自身的性质,是非常危险的。
Athena: 什么意思?
Euripides: 这样看。假设你正在用一个不安全的工作站。在你登入后,你需要邮件服务票,打印票,和文件服务票。假设你无意中在你退出后留下了那些票。现在假设我登录到那个工作站并且发现了那些票。我想制造一些麻烦,于是我就用你的名字登录了。既然那些票上是你的名字,那我就可以取你的邮件,打大量的文件。这些完全是因为这些票被偶然的放在了那里。 并且我还可以把这些票拷走,永远的使用它们。
Athena: 但是这很好解决。我们可以写一个程序,在用户退出的时候把票销毁掉,这些票也主不能再用了。
Euripides: 那么很明显你的统应该有一个票据销毁程序,让用户依赖这样的机制是非常愚蠢的。你不能指望用户在他们退出的时候会销毁票据。并且甚至不能依赖销毁票据本身,看下面的情况。 我有一个程序可以监视网络并且拷内别人的服务票据。假设我想牺牲你。我等你登到工作站的时候,打开我的程序并拷贝一份你的票。我等你退出并离开。我把我的工作站的地址调整为你登录时用的地址。我让工作站认为我是你。我有你的票,你的用户名,你的地址。我可以用这些票来使用你的服务。
你离开工作站时销毁你的票已没并系。这些我偷来的票可以一直使用下去,因为你现在的票并没有可以使用多少次的期限,或可以使用多长的时间。
Athena: 哦,我明白你所说的了!票不能是永远合法的,因为它可能是一个非常大的安全隐患。我们应该限制每一张票可以用多长的时间,也许可以给每张票设一个有效期。
Euripides: 非常正确。我想票需要增加两项信息:生存期表示票多长时间内是合法的,和一个时间标记来说明 Charon 是什么时候发出这张票的。
Euripides 走到了黑板写下了如下的内容:
票{用户名:地址:服务名:有效期:时间戳}
Euripides: 现在当服务解开票时,它检查票的用户名,地址是否与发送者匹配,然后它用有效期和时间戳来检查票是否有效。
Athena: 很好。典型的票使用哪长的有效期呢?
Euripides: 我不知道。也许是一个典型工作站的工作周期。就八小时吧。
Athena: 那如果我在工作站呆的时间超过八小时,所有的票将会失效。包括票据授权票。那我就要重新向 Charon 作认证,在八小时以后。
Euripides: 是不是不合理?
Athena: 我想不是。好我们就定下来吧--票在八小时后失效。现在我有一个问题问你。假设我从网络上拷了你的票...
Euripides: (眨了眨眼睛)啊,Tina!你不会真的这样做吧?
Athena: 这只是为了讨论。我拷了你的票。现在我等你退出并离开。假设你有一个医生的约会或聚会要参加,你在两个小时后退出,并且你在退出之前销毁了你的票。
但我已经偷了你的票,它们还可以使用六小时。这给了我足够的时间用你的名义去取你的文件并打印一千份什么东西。 你看,时间戳工作的很好如果小偷选择在它失效以后来用的话。如果小偷能在它失效之前用...
啊,好...当然,你是对的。
Athena: 我想我们遇上了一个大问题了。(她叹了口气)
停了一下。
Euripides: 我想这意味着你今晚要忙了。再来点咖啡?
Athena: 为什么不。
第四幕
第二天早上在 Euripides 的办公室。Athena 来敲门。
Euripides: 你今早有黑眼圈了。
Athena: 好了,你知道的。又是一个漫漫长夜。
Euripides: 你解决了重演的问题了吗?
Athena: 我想是的。
Euripides: 请坐。
她坐下了。
Athena: 照旧,我重申一下问题。票是可重用的,在一个限定的时间内(八小时)。如果谁偷了你的票并在它失效之前使用,我们毫无办法。
Euripides: 确实如此。
Athena: 我们可以把这个问题理解为设计一种别人无法重用的票。
Euripides: 但这样的话你每次用新服务时都要取一张新票。
Athena: 对。但那是很笨的解决办法。(稍顿。)啊,我怎样继续我的讨论呢?(她沉思了一会儿)。
好的,我要重述一个问题,看有什么必须条件。网络服务必须能够证明使用票的人就是票上所申明的人。我来顺着认证的过程再走一遍,这样我就可以演示我的解决方案。我现在想用一个网络服务。我通过启动工作站上的客户端来使用它。客户端送三样东西给服务器:我的名字,我的工作站的网络地址,适当的服务票据。这张票包含了申请这张票的人的名字和他(她)申请时所使用的工作站的地址。它也包含了票的有效期和时间戳。所有这些信息都被服务的密码加密了。
我们现在的认证模式基于以下的测试:
服务能对票解密吗?
票在有效期以内吗?
票中的名字和地址与申请者的名字和地址匹配吗?
这些测试证明了什么?
第一个测试证明了票是不是来自 Charon。如果票不能被适当的解密,说明票不是来自真正的 Charon。真正的 Charon 会用服务的票来加密票。Charon 和服务是唯一知道服务密码的两个实体。如果票被成功的解密,服务知道它来自于真的 Charon。这个测试防止了有人伪造假票。
第二项测试检查票是否在有效期以内。如果过期,服务拒绝。这项测试阻止使用旧票,因为票可能是偷来的。
第三项测试检查票的用户名和地址是否匹配请求者的用户名和地址。如果测试失败,说明使用者使用了别人的票。这张票当然被拒绝。如果名字和地址匹配,这个测试证明了什么?什么也没有。票可以被偷走,用户名和网络地址都可以被改变,如果需要的话。正如我昨天指出的那样,票可以在有效期内被盗用。因为服务不能确定票的发送者是不是合法用户。
服务之所以无法判断是因为它没有与用户共享一个秘密。这样看。假如我正在埃尔斯诺尔(哈姆雷特中的城堡)值勤,你打算来和我换班。但除非你说出正确的口令,否则我不会与你换班的。我们共享了一个秘密。它可能是某人为所有值勤的人所设的。
于是昨晚我就在想,为什么 Charon 不能为合法用户与服务之间设一个口令呢?Charon 发一份口令给服务,同时发一份给用户。当服务从用户那里收到一张票,它可以用这个口令检验用户的合法性。
Euripides: 等一下。Charon 如何同时发两份口令?
Athena: 票据的拥用者从 Charon 的回应中得到口令,像这个样子:
她在黑板上写下了:
Charon 的回应-[口令|票]
服务从票中获取口令。票的格式如下:
票-{口令:用户名:地址:服务名:有效期:时间戳}
当你要请求服务时,客户端程序生成一个"验证器"。验证器包含了你的名字和你工作站的地址。客户端用口令把这些信息加密,口令是你请求票据时得到的。
验证器-{用户名:地址}用口令加密。
生成验证器以后,客户端把它和票一起送给服务。因为服务没有口令,所以它不能解密验证器。口令在票中,于是服务先解开票。
解开票以后,服务得到以下的东西:
票的有效期和时间戳;
票的拥有者的名字;
票拥有者的网络地址。
口令。
服务检查票是否过期。如果一切正常,服务就用口令去解验证器。如果解密没有问题,服务将会得到一个用户名和网络地址。服务用它们去和票里的用户名和网络地址去匹配,如果正确,那么服务认为票的发送者确实是票的真实拥有者。
Athena 暂停了一下,清了清喉咙,喝了点咖啡。
我认为口令验证器的机制解决了盗用的问题。
Euripides: 也许。但我想...攻击这个系统我必须有验证器。
Athena: 不。你必须同时拥有验证器和票。没有票,验证器是没有用的。解开验证器必须要有口令,服务必须解开票才会有口令。
Euripides: 好,我明白了,你是说当客户程序联系服务时,它同时送上票和验证器?
Athena: 是的,我就是这个意思。
Euripides: 如是真是这样,什么可以阻止我把票和验证器都偷走呢?我可以写一个程序,如果我拥有了票和验证器,我就可以一直使用它至有效期结束。我只需改变我的用户名和工作站的地址。不是吗?
Athena: (咬了咬她的嘴唇)是的。多沮丧啊。
Euripides: 等等,等等,等等!这不难解决。票在有效期内是可重用的,但那并不意味着验证器是可重用的。假设我们设计了验证器只可以被用一次。这可以吗?
Athena: 好,也许。我样来想一下,客户端程序生成验证器,然后把它和票一起送给服务。真的票和验证器比你拷贝的要先到。如果验证器只能被用一次,你的拷贝就失效了。 啊,这就对了。我样现在需要做的就是发明一和方法使得验证器只能被用一次。
Euripides: 没问题。我们把有效期和时间戳放在上面。假设每个验证有两分钟的有效期。当你想用一个服务时客户端生成验证器,标上当前的时间,把它和票一起送给服务。服务器收到了票和验证器,服务器解开验证器,它检查验证器的时间戳和有效期。如果验证器还没失效,所有其它的检查都通过了,那么服务器就认为你通过了认证。假设我通过网络拷贝了一份验证器和票,我必须改变我的工作站的网络地址和我的用户名,这差不多要用几分钟。那是非常苛刻的要求,我不认为是可能的,除非...嗯,有一个潜在的问题。假设不是在网络的转输中拷贝到票和验证器,我拷贝了一份原始的从 Charon 而来的包,这个包是你向Charon 请求时的回应。这个包,有两个口令在里面:一个是你的,一个是服务的。服务的口令隐藏在票中,我取不到,但另一个呢?那个你用来生成验证器的?如果我得到了口令,我就用它来建自已的验证器,如果我能建自已的验证器,我就能攻破你的系统。
Athena: 这就是我昨晚所想的,但是当我顺着票的处理过程一想,发现那样偷走验证器是不可能的。
你在一台工作站坐下,用 kinit 程序得到你的票据授权票。kinit 要求输入用户名,你输入以后,kinit 把它送给 Charon。Charon 用你的名字查找你的口令,然后生成一张票据授权票。作为处理的一部分,Charon 生成了一个你与票据授权服务共享的口令。 Charon 把口令和票据授权票一起送给你,并且在发关之前用你的口令将它加密。
Charon 送出了包。某人取得了这个包,但他们无能为力因为它是用你的口令加过密的。特别是,无人可以偷走票据授权服务的口令。 kinit 收到了票据包并要求你输入你的口令。如果你输入正确的口令,kinit 解开包取出了口令。现在你注意 kinit 的处理,你去取你的邮件。你打开邮件客户端。这个程序查找一张邮件服务的票但没有找到(你还没取过你的邮件)。客户端用票据授权票去申请一张邮件服务的票。客户端为票据授权的过程生成了一个验证器,并用票据授权的口令把验证器加密。客户端把验证器送给了 Charon,票据授权票,你的名字,你的工作站的地址,邮件服务的名字。票据授权服务收到了这些东西,并通过了认证检查。如果一切都通过,票据授权服务将会得到那个与你共享的口令。现在票据授权服务为你生成了一张邮件服务的票,在这个过程中生成了一个你与邮件服务共享的口令。票据授权服务把这些东西打成包送给你的工作站。包里有票和口令。在送包之前,票据授权服务用票据授权的口令把包加密。做完以后,包被送出去。这样邮件服务票的包通过网络被送了出来。假设网络上的某人将它复制了一份。他不幸的发现包是用票据认证的口令加过密的。既然无法解密,他就不能得到邮件口令。没有口令,他就不能使用任何在网络上传送的邮件服务的票。 现在我觉得我们是安全的。你认为呢?
Euripides: 也许吧。
Athena: 也许!你就只会说这个吗!
Euripides: (大笑)别在意。你现在应该知道我处理问题的方式了。我猜我和你昨晚都工作到了半夜。
Athena: 哼!
Euripides: 好的,大半夜。实际上,这个系统似乎是完全可行的。口令的方案解决了我昨晚想到的一个问题:相互验证的问题。
(稍顿)我说一下好吗?
Athena: (有点冷淡)请便。
Euripides: 你真好。(Euripides 清了清自已的嗓子)昨晚,当口令和验证器在我脑子里转的时候,我想去找出这个系统新的问题,我想我发现了一个很严重的问题。我下面就演示一下。
假设你厌倦了现在的工作,决定换一个。你想用公司的激光打印机打印求职信,把它们送给猎头和其它的雇主。于是你输入打印命令,命令去取得服务票,然后把票送到打印机。这是你认为它应该被送到的地方。实际上你并不知道你的请求被送到了正确的打印服务器。假设一些无耻的人--比如说你的老板--调整了系统,把你的请求送到了他办公室的打印机。他的打印服务不关心票的内容。它告诉你的工作站服务已准备好打印你的文件。打印命令被送到了假的打印服务器,你有麻烦了。我从相反的方向表达了相同的问题。用口令和验证器,Charon 能够保护的它的服务器防止错误的用户使用,但它不能保护它的用户使用错误的服务器。系统需要为客户端程序提供一种验证服务器的方法,在它向服务器发送敏感信息之前。系统必须允许交互验证。但口令的方案解决了这个问题。让我们回到打印服务器的场景。我想要打印客户程序确认它送交的服务是合法的服务。这就是程序要做的。我输入打印命令并给出一个文件名。这时我已经有了打印服务票和口令。客户程序用密码生成了一个验证器,然后把验证器和票送给了假设的打印服务器。客户端这时还没有送打印文件,它在等待从服务的返回。真的服务收到票和验证器,把票解密并得到口令,然后用口令解开验证器。这样服务端做完了所有的认证。测试已经确认了我的身份。现在服务程序要准备一个响应包来证实它自已的身份。它用口令加密了返回包,并把包送给了等待的客户端。客户端收到了包并试图用口令把它解开。如果包被正确的解开得到了正确的服务器响应信息,客户端程序就知道了这个服务器是合法的服务器。然后这时客户端向它发出打印命令。假设我的老板改变了一下系统使得他的打印机看起来好像是我想要用的那个。我的客户端送了票和验证器给它并等待它的响应。假冒的打印服务无法生成正确的响应因为它无法把票解开并得到口令。这样的话客户端就不会送打印命令给它因为客户端没有得到正确的响应。最后客户端放弃等待并退出。我的打印没有完成,但至少我的求职信不会放在我的对头的桌子上。
好啊,我想我们有了 Charon 认证系统的坚实的基础。
Athena: 也许。不管怎么说,我不喜欢 Charon 这个名字。
Euripides: 你不喜欢吗?什么时候?
Athena: 我从来都不喜欢,因为它的名字听起来没意义。有一天我和我荷迪斯(冥王)叔叔谈到了这个,他推荐了另一个名字:冥王的三个头的看门狗。
Euripides: 啊,你是说"Cerberus"。
Athena: 你说什么语言啊!"Cerberus"实际上是...
Euripides: 哦,不叫这个吗?
Athena: 当然,谁让你是罗马人!而我是希腊人,它是一条希腊的看门狗,它的名字是"Kerberos","Kerberos"是'K'打头的。
Euripides: 好吧,好吧,别发火。我同意这个名字。实际上,它有一个好的脖环。再见吧,Charon,欢迎你,Kerberos。
后记
这篇对话是于 1988 年写的,是为了帮助读者理解 Kerberos V4 的运行方式。经过了这么多年,它仍然非常好的服务于此。当我把这篇文章转换成 HTML 的时候,我惊讶的发现这个文档对 Kerberos V5 仍然非常有用。虽然很多东西改变了,但核心概念并没有变。实际上,Kerberos V5 对 Kerberos 只做了两处改变。
第一处改变是因为意识到验证器用少于五分钟的有效期不足以防止攻击者进行重演,如果攻击者是用一个程序自动的截取票和验证器并进行重演的话。在 Kerberos V5 中,验证器真正的只能用一次因为服务器用"重演缓冲区"保存了最近一次提交的验证器的信息。如果攻击者试图截取验证器并重用它,"重演缓冲区"会发现验证器已经被提交了。
第二个主要改变是 Kerberos 送给 kinit 服务票的时候,票不再是用用户的口令加密。它已经用票据授权服务的口令加过密了。票据授权服务的票被用来获取其它票的时候,它直接就被传输了。因此票不需要再用用户的口令加密一次。(服务器响应的其它部分,如口令,仍然是用用户的口令加密的。) 一个类似的改变也应用到票据授权服务协议;从票据授权服务返回的票也不再用票据授权服务的口令来加密了,因为它所包含的票已经被对应的服务的口令加过密了。举例来说,Kerberos V4 的包像这样:
KDC_REPLY = {TICKET, client, server, K_session}K_user
意思是:{}中的内容是用 K_user 来加密的。
TICKET = {client, server, start_time, lifetime, K_session}K_server
在 Kerberos V5 中,KDC_REPLY 现在看起来像这样:
KDC_REPLY = TICKET, {client, server, K_session}K_user
(注意:票已经不再用 K_user 来加密了)
当然,Kerberos V5 中还有许多新特性。用户可以在另一个网络中安全的提交他们的票;并且,用户可以把他们的一部分认证权转给服务器,这样服务器就可以作为用户的代理。其它的新特性包括:用更好的加密算法替换了 DES 加密算法,如三重 DES 加密。读者如果对 V4 与 V5 的变化感兴趣的话,可以读一下"The Evolution of the Kerberos Authentication System",作者是 Cliff Neumann 和 Theodore Tso。我希望你能对这篇介绍 Kerberos 协议的文章感兴趣。我祝愿你在未来的探索中更进一步。