What is Equivocation in Byzantine Fault Tolerance?

Equivocation: a faulty processor that lies (inconsistently) to two correct processors. 

指一个错误节点对两个正确节点发出不一致的信息,而这两个正确节点分别认为所有的正确节点都收到了一致的信息

比如有n=3f个节点,其中有f个错误节点,当这f个错误节点中有一个节点发出信息a给f个正确节点(集A),发出信息b给另外f个正确节点(集B),当所有2f个正确节点都认为所有正确节点都收到了相同的信息,这个错误节点equivocation成功.

那么正确节点如何判断所有正确节点都收到了相同的信息呢?通过广播,每个节点把自己收到的信息广播给其它节点,因为有n个节点以及f个错误节点,那么正确节点认为,只要我收到的信息和n-f-1个节点(除开自己)收到的信息是一致,那就认为所有正确节点收到了相同的信息.此时只需要f个错误节点给A广播a,则A中每个节点收到了2f-1个a,f个b,又n-f-1=2f-1,所以A集中的所有节点都认为所有正确节点统一了信息.同理,在给B集所有节点广播b之后,b也会认为所有正确节点统一了信息. 其实不然,错误节点equivocation成功.

要避免就最简单的办法就是使n-f-1>f+k-1,n-f-1>f+p-1,k,p分别为集合A,B的大小.比如,当n=3f+1时,n-f-1=2f>2f-1.

其次还可以在发信通道上想办法,让节点之间相互监视,以达到给两个正在监视错误节点的正确节点发不一致的信息,会被正确节点检查出来

posted on 2012-08-22 15:19  york_hust  阅读(236)  评论(0编辑  收藏  举报