前面几章我们讲了秩序是什么、合法性是什么、为什么一座城能顶起整个系统。这一章要拆开一个更基础的零件——它是前面所有机制能跑起来的润滑油,也是整个系统上最大的一个洞。这个零件叫信任。
为什么一个系统离不开信任
先想一件小事。你早上买咖啡,扫码付了钱,转身就走。你没有要求店家先去银行核实这笔钱到账,店家也没有。你们俩都默认这笔交易成立了。这个"默认"就是信任在干活。
把这件事放大一万倍,就是一个文明。一座城里几万人,谁种粮、谁打铁、谁守门、谁收税,全靠一层层的"我不查你、你也不查我"在维持。如果每一笔交易、每一道命令、每一个头衔都要当场验证真伪,这个系统会卡死。
说人话:信任的本质,是省下验证的成本。你不用每次都亲自去查,就当它是真的——这样系统才跑得快。
这里得先给一个词一个准确的定义。
验证成本,就是"确认一件事是真的"要花的力气——时间、人力、金钱。你要确认送信的人真是国王派来的,得派人去王宫核对,来回好几天;你要确认城外那队人真是友军,得派侦察兵、要暗号、查旗号。这些力气就是验证成本。
信任的作用,就是把这个成本预付掉一次,之后长期免检。我信任你,意味着以后你来,我不再一遍遍查了。这在工程上有个几乎一样的东西——
信任链(trust chain),是计算机里的一种设计:系统不逐个检查每个部件,而是先确认一个"根"是可信的,然后凡是这个根担保过的,都直接放行。比如你的浏览器信任某个证书机构,于是这个机构签发过的成千上万个网站,浏览器都不再逐一盘问。一层担保一层,链条一路传下去。
文明也是一条信任链。天子担保他任命的官,官担保他手下的吏,将领担保他带来的兵。你见到一个盖着官印的文书,你信的其实不是这张纸,是纸背后那条"一直通到天子"的链条。
信任省下的成本,到底有多大
为了让你感觉到这层润滑油有多值钱,我们做个对比。
一支军队为什么能打仗?因为将军下一道命令,几万人不问理由就执行。士兵不会在冲锋前要求将军出示证据、证明这个命令符合国家利益。如果他们真这么干,这支军队一秒钟就散了。军队的战斗力,很大一部分就是建立在"不验证就服从"之上的。
一座城为什么能防守?因为守门的人手里有一套简单规则:自己人放进来,敌人挡在外面。他不需要审问每一个进城的人的人生履历,只需要几个低成本的信号——一张脸、一身制服、一句暗号、一面熟悉的旗。这些信号就是信任的凭证,验证它们几乎不花力气。
关键点来了:一个系统越高效,说明它省掉的验证越多;省掉的验证越多,说明它把越多的门,交给了"凭一个信号就放行"这套机制。
这句话你多读两遍。因为它同时说出了信任的两面——它是效率的来源,也正是麻烦的来源。
省下的验证,去哪了?没消失,变成了洞
这里是本章的核心,请慢一点看。
验证成本不会凭空消失。你今天不查,不是因为这件事真的不需要查,而是因为你赌它是真的。信任,本质是一个没有当场兑现的赌注。大多数时候你赢——对面真是友军,文书真是真的,命令真是国王下的。系统就这样一天天顺畅地跑着,让你越来越确信"不查也没事"。
但省下的那份验证并没有蒸发。它变成了一个洞,静静地待在那里。工程上给这种洞起了个准确的名字。
攻击面(attack surface),指一个系统所有"能被从外部下手的地方"的总和——每一扇门、每一个入口、每一处"只要满足某个条件就放行"的规则,都是攻击面的一部分。攻击面越大,能被人利用的缝就越多。
现在把信任和攻击面叠在一起看,你会看到一个让人不太舒服的结论:
你信任谁,谁就能不经检查地进入你的核心。而"不经检查"这四个字,正是攻击者梦寐以求的东西。
一个陌生人想混进城,很难——他触发所有的警报,接受所有的盘查,攻击面对他是关闭的。但一个被信任的人不一样。他手里握着那张免检的通行证。守门的信号系统对他说的是"放行",不是"盘查"。攻击者要做的,不是砸开这道门,而是变成那个被信任的人。
换句话说:最坚固的城墙,防的是不被信任的人。它从设计上就没打算防被信任的人——因为如果它连自己人都防,它就跑不动了。
这不是一个可以修的 bug
软件工程师看到这里,本能想问:那把验证补回来不就行了?让守门的人多查一道,不就把洞堵上了?
问题在于,验证和效率是一枚硬币的两面,你没法只要一面。
- 你想更安全,就得多验证;多验证,系统就更慢、更贵、更僵。
- 你想更高效,就得少验证;少验证,攻击面就更大、更脆。
没有一个设置能同时把两个都拉满。任何一个真实运转的系统,都在这条线上选了一个点——通常是偏向效率那一侧,因为一个天天自我盘查、谁都不信的文明,根本组织不起一支军队、一次远征、一个朝廷。它会输给那些更敢信任、因而跑得更快的对手。
于是历史上活下来、强大起来的系统,几乎都是高信任、低验证的系统。它们因为敢信任而强大,也因为敢信任而在某一个晚上,把最大的洞留给了一个恰好懂得利用它的人。
把这把钥匙攥在手里,去看下一章
我们不急着展开后面的故事,只把这一章拆出来的机制,压成两句话,交到你手里。
- 信任是省下来的验证。系统跑得越顺,说明它省下的验证越多,也就是它默认相信、不再当场核对的东西越多。
- 省下的验证不会消失,它变成攻击面。你信任谁,就等于给谁发了一张免检通行证;谁能拿到这张通行证,谁就能绕过所有城墙,直接站到你的核心里。
带着这两句话,去看接下来的两场戏。
一场发生在特洛伊城外。特洛伊战争——古希腊人流传下来的一场围城传说,被诗人荷马写进史诗,讲希腊联军围攻小亚细亚的特洛伊城十年。它到底有几分真、几分神话,我们后面专门有一章诚实地掰扯(这里先记住:它卡在传说和考古之间,别当成板上钉钉的历史)。但那只著名的木马,讲的正是本章的机制——攻击者没有砸墙,而是让守方把它当成"自己人",亲手拖进城里。
另一场发生在洛阳城里。董卓,东汉末年(约公元2世纪末)一个手握重兵的边将,后来火烧洛阳、祸乱朝廷。但请注意一个常被戏剧盖住的事实:他第一次进洛阳,不是打进来的,是被朝廷里的人召进来的——有人主动给了他那张免检通行证。这条线里《三国演义》的文学演绎和《后汉书》《三国志》的史实差得不少,我们也会分开讲。
两座城,一千多年、半个地球的距离,用的却是同一个洞:它们都太信任,于是都给了某个人一张不该给的通行证。门,不是被攻破的。门,是被打开的。
下一章,我们就去看这张通行证是怎么被递出去的。