本体技术视点 | 我该怎么信赖“朋友的朋友”?

引言
上次我们讲到 Celo 中采用了<地址,公钥>关系映射的方式,方便用户进行转账等操作。具体来说,Celo 把用户的电话号码和公钥进行了绑定。而电话号码和公钥的绑定关系可以用来帮助用户确定与之交互的其它用户是否值得信赖。
用户可以根据一些条件,比如是否是自己好友、是否有转过帐等其它特定方法对他通讯录里面的人进行信任评价或评分,这些信任评价都在用户本地,即用户手机上等进行维护,并不会分享给其它人。这就事实上形成了一个去中心化的信任网络,每一个用户自己维护对其他用户的信赖度。之所以说这个信任网络去中心化,是因为不存在对整个信任网络的单点存储,也没有单点可以访问整个信任网络。我们今天就来简单聊聊 Celo 的去中心化聚合声誉评价体系。
声誉评价算法 EigenTrust
Celo 的去中心化聚合声誉评价体系是在 EigenTrust 的基础上改进得来。EigenTrust 是 P2P 系统中颇负盛名的信任度算法之一。它利用信任传递的关系,根据节点的历史交互行为,由节点之间的相互信赖度的本地声誉值计算出全局声誉值。
我们稍微具体地介绍一下该算法。
(EigenTrust:https://nlp.stanford.edu/pubs/eigentrust.pdf)
在 P2P 数据分享系统中,每个节点可以对与之交互的节点进行评价。
比如:
若一个节点 i 从另一节点 j 获取到了有效的数据,可以对其赋予正面评价(+1);
反之,若获取到非法数据,则可给予负面评价(-1)。
评价记录在节点 i 本地。在多次进行数据交互后,节点 i 对节点 j 的评价  s_{ij} 可以简单的定义为多次交互的评价之和。为了将评价同步到整个网络中,往往需要依赖于中心化的可信服务来收集并统计节点声誉。
EigenTrust 是一个对本地声誉评价进行聚合的算法。该算法假设节点对向其提供有效数据的节点具有较高信任度,进而信任其声明的本地评价。该算法的基本思路是:一个节点的全局声誉值为该节点从其他节点获得的评价值的加权,权重则为做出评价的节点自身的声誉。本地评价会经过归一化处理,防止恶意节点提高非法的高评价。评价聚合时,节点首先向其信任的朋友节点询问关于其他节点的信任度,即节点 i 对节点 k 的信任度为其所有朋友节点 {j} 对 k 的评价的加权。这种传递方式可以递归进行下去,即节点 i 询问其朋友节点的朋友节点。
当递归深度较大时,i 将能够得到关于整个网络的信任度。每个节点仅需计算与其交互的节点的信任度,并发布到网络中。所有节点报告的信任度即可聚合成为全局声誉。
Celo 的改进思路
EigenTrust 的信任传递是靠将本地声誉得分传送给其它节点实现。为了防止恶意节点提供虚假数据,在 EigenTrust 中每个节点的信任度由其他节点(评分管理节点)计算,且计算节点不止一个,以作为比对。在社交支付场景中,这样的一个解决方案可能不是特别理想,因为这要求交易信息的共享。因此,在 Celo 中,这种计算还是由节点本身来做,但会采用零知识证明等方式附加一个正确计算的证明。
另外考虑到恶意行为的影响,EigenTrust 中预设了一组受信节点(pre-trusted peers)。在 Celo 中,将不会采用这样的全局受信节点方式,而是采用个性化的方式,即每个节点站在自己的视角上为其它节点计算个性化全局声誉评分,这可以通过用户将自己通讯录中的可信联系人作为 pre-trusted peers,在此基础上运行传统 EigenTrust 算法来实现。
结 语
在区块链中,去中心化声誉评价体系在交易、去中心化数据交换和去中心化身份应用等有着重要作用。在本体信任生态中,声誉体系也是网络中的一个重要组成部分,将本体信任网络和本体业务应用结合起来。
一方面,通过受信者声誉评价为应用验证者导流,提升应用对于用户交互体验的设计,更好地服务用户;另一方面,用户使用不同的业务应用,应用作为施信者为受信者用户提供信任背书,良好的声誉可以帮助用户得到更多更好的服务,受信者通过持续地积累本体生态中的声誉,促进整个生态应用的用户质量良性发展。