信任的逻辑(一)
贝壳打算撰文一个系列,详细描述信任和信任系统。其中涉及很多博弈论,信息安全学的内容。欢迎拍砖。
首先是一个场景。一个管理组织,调查某种人占总人群的比例。不幸的是,有很多恶意的攻击方试图改变这个数据(增大或减小)。对于被调查人群来说,这个数字不准确会使得每个人都受到损失。那么,怎么去信任这个组织,来确认数据的正确性呢?
首先是管理组织造假的形态,一般来说有四种方法。一种是修改某个具体人物的属性,来增加或者减小总体比例。一种是向名单中添加不存在的人,来调整总体数字。一种是挑选某个属性的人组成名单。一种是睁眼说瞎话,名单正确但是统计数字和名单不吻合。
最简单的方法是公布名单,标明每个人是或不是。对于每个人,都可以独立验证自己在名单中的正确性,因此无法修改某个具体人物的属性。通过对名单公布出来的人进行逆向回访(是否存在,是否参与调查)来确认没有添加不存在的人。要求每个参与调查的人都"必须"包含在名单内,来避免挑选属性。名单的统计比例是公布的,可以独立核算的,因此名单无法造假。但是我们知道,很多情况下名单是不能公开的。例如,我们调查艾滋流行状况,如果这个名单公开真的就天下大乱了。那么如何来监督呢?
我们也许能想到最初的变形,这个组织不开放名单,而开放查询。每个人独立查询自己的属性,因此可以验证具体人物属性,也可以抵御挑选属性。但是对于其他两者,都无法成功防御。因此开放查询实际上对造假是没有抵抗力的。
而后,我们想到了一种中间方法,每个人可以凭借自己的姓名查询到自己的独立代号(ID,一般是一个数字),但是不能凭借独立代号查询到姓名。于是,我们可以独立的获得代号,从而防御修改人物属性和挑选属性的攻击,也可以防御统计修改。但是对于名单中添加不存在的人,则没有什么防御手段。组织可以向名单中添加一堆不存在的代号来增加总体数量。同时,这种方法其实还隐含了泄密的可能,因为其他知道你姓名信息的人(例如配偶),很容易查到你的属性。
所以,我们修改上文的方法,将通过名字查询代号改为调查时发放查询代号。这样可以杜绝泄密的可能性。而对抗添加代号则非常麻烦。总体不外乎两种手法——回访和鉴权。
回访是指通过任意指定名单中一些个体,要求其现身说明自身的属性。如果这个人不出现,或者未参与调查,或者属性错误,就可以确定出现了添加代号。但是很明显,为了保证隐私,这个方法无法工作。鉴权则是要由一个更高可信度的机构实行,对每个用户实行保密身份验证。