免疫学的核心问题只有一个:这是不是我。
每一个进入体内的东西都要被判一次,判错的代价极高:判”是我”而其实是病原,则感染;判”不是我”而其实是自身组织,则自身免疫。埃尔利希在二十世纪初把后者叫做”自体毒性之恐”(horror autotoxicus),把”绝不攻击自己”立为免疫系统的第一戒律。
这条戒律怎么落实?伯内特的克隆选择学说(1957)给了答案,而这个答案对本文极重要。
免疫系统不是先造出一套”识别非我”的规则,再照着执行。它是先随机造出巨量的识别可能性,再把不合格的删掉。
淋巴细胞的抗原受体由基因片段随机重组生成,可能的特异性数目是天文数字。这些前体细胞在胸腺(T 细胞)或骨髓(B 细胞)中经过筛选:与自身抗原结合过强的被清除(阴性选择),完全不能与自身分子有效结合的也活不下来(因未获阳性选择而凋亡,即所谓”因被忽视而死”)。两条路合起来,绝大多数前体细胞死在成熟之前——常被引述的比例在九成以上。
关键在这里:成熟的淋巴细胞库存里,没有任何一个字段记录”哪些特异性曾经存在过、又被删掉了”。
活下来的细胞就是全部。一个只看成熟库存的观察者,会看到一套”恰好不攻击自身、恰好能识别外来物”的识别系统,并很自然地认为这套系统是被设计成这样的,或者是逐步学出来的。他不会看到被删掉的那一大片,因为被删掉的东西在库存清单上不占位置。
这是守恒假定的免疫学版本,也是它在免疫学里被推翻的地方:识别能力的范围,不正比于库存的规模。库存是巨大删除之后的余数,而余数不携带被删者的信息。
第二处更尖锐。
免疫系统对某个东西不起反应,可以有两种完全不同的原因:它从未遇到过这个东西;或者它遇到过,并且主动地建立了对它的耐受。
从外部表型看,这两种情况一模一样:都是”没有反应”。但机制完全不同。中枢耐受是一次主动的清除,外周耐受要靠调节性 T 细胞持续维持——它需要细胞、需要信号、需要能量,是一件正在被做的工作,不是一件没做的事。妊娠是最清楚的例子:母体对携带一半父源抗原的胎儿不起排斥反应,这不是疏忽,是一整套耗费资源的主动机制。
于是免疫学给出了本文所需的第二件东西:“没有发生的那一次”分两种,一种是真的没有,一种是被做掉的,而只看结果的记录格式无法区分它们。
要区分,必须另开一条通道。免疫学开的是免疫组库测序:把选择之前的受体序列库与成熟后的库并排测,两者之差就是被删掉的那一部分。这条通道不看结果看过程,不看库存看差值。
还有第三件事。免疫学内部关于”判什么”的分歧一直没有停。自我/非我模型之外,马青格(Matzinger 1994)提出危险模型:免疫系统响应的不是”非我”,而是组织受损发出的危险信号;普拉德(Pradeu 等)提出不连续性理论:触发响应的是抗原模式的突然变化,而不是它属于哪一侧。
这三派之争的形状,恰恰是 T 与 N 的形状:一派认为存在一条现成的自我/非我界线(Σ 已完备给出),另一派认为这条界线本身是在每一次遭遇中被重定的(Σ 未完备给出)。免疫学没有靠哲学论证解决这个争论——它靠的是不断给出判据被改写的具体机制(共生菌群、母胎耐受、肿瘤免疫编辑),让”现成界线”这一侧不断退让。
这一点对本文有直接后果,第十节会用到。
第三家来自一个与前两家毫无交集的领域。
密码学里有一个基本构件叫承诺方案。它做的事情很像把一个数字写在纸上,装进信封,封好,交给对方。此后:
我不能再改这个数(绑定性,binding);
对方在信封被打开之前不知道这个数(隐藏性,hiding)。
这两条要求正是二律背反的两侧:绑定性说”这个值已经确定了”,隐藏性说”这个值尚未显露”。日常直觉认为二者当然可以同时成立——信封里的数确实已经定了,也确实还没被看见。
密码学的结论是:这两条不可能同时完美成立。
理由是干净的。若承诺是完美隐藏的,那么这个承诺值在信息上与任何被承诺的消息都不相关——也就是说,存在多个不同的消息可以打开成同一个承诺。既然存在,那么一个计算能力无限的承诺者就能找到它们,于是绑定性在信息论意义上必然失效。反过来,若承诺是完美绑定的(每个承诺只能对应唯一的消息),那么这个承诺就在信息上决定了消息,一个计算能力无限的接收者就能把它算出来,于是隐藏性在信息论意义上必然失效。
两侧各留一半,不能都要。这不是技术不够,是定理。
密码学里这类不可能结论有传统。克利夫(Cleve 1986)证明了两方之间不存在完全公平的抛硬币协议——总有一方可以中途退出并因此获得优势。公平性在这里也不是可以无限逼近的目标,而是有硬上限的。
要紧的是密码学如何处理这个不可兼得。
它没有去限制”使用范围”,也没有去宣称信封里的数既存在又不可知。它做的是:把”完备”这个词从对象的性质改成相对于检验者的性质。
于是有了计算意义上的绑定与计算意义上的隐藏:这个值对一个多项式时间的对手而言是绑定的、是隐藏的。同一个承诺,面对不同能力的检验者,“是否已经确定”这个问题有不同的答案。而这不是含糊其辞——它有精确的定量形式:绑定误差 ε_b 与隐藏误差 ε_h 各是一个数,且二者之间有可证明的下界关系。
这一步在哲学上的分量,值得停下来看清楚。康德面对二律背反时做的事情是给理性划界:这些问题超出了可能经验的范围,故理性在此没有裁决权。密码学面对结构完全相同的对立时做的事情是给检验者定级:这个值对谁而言已经确定。前者取消问题,后者把问题变成一个带参数的量。
后者显然更有用,而且它已经在跑:现代密码协议全部建立在这个相对化之上。
第三件事最直接地击中了守恒假定。
佩德森承诺(Pedersen commitment)这类构造有一个性质:承诺本身的长度是常数。无论被承诺的消息是一个比特还是一部长篇,先散列再承诺,承诺值都是固定的那么大。
也就是说:痕迹的厚度与被承诺物的厚度完全脱钩。
一个只看承诺值的观察者,无法从它的大小推出任何关于被承诺内容规模的信息——这恰恰是这个构造的设计目标,不是它的缺陷。而这正是守恒假定的反面:厚度不但不正比于发生量,而且被刻意设计成与发生量无关。
零知识证明(Goldwasser、Micali、Rackoff 1985)把这一点推到极致:可以让对方确信一个命题为真,而对方从整个交互中学不到任何别的东西。“确信已发生”与”记录下了什么”在这里被彻底分开了。
绑定与隐藏不可同时完美(定理,不是技术限制);
解法是把完备性相对化为检验者的能力,且相对化是定量的;
承诺的厚度与被承诺物的厚度可以完全脱钩,甚至是被设计成脱钩的。