我们真的需要一个验证的公证人吗?

时间:2017-11-16 03:59:07

标签: corda

冒着听起来天真的风险,我问自己"是否需要验证公证人?",考虑到它的所有问题 - 事务和依赖关系泄漏,状态模型的暴露,仅举几例。 我听到的答案与潜在的攻击有关,其中一个不诚实的节点试图窃取其他人的资产。例如,在合法交易中,partyA向partyB出售了某些资产S,并受到Move合约的约束。紧接着,partyA创建了一个自签名事务,该事务将S转回给自己,但是假冒合同中的虚假合同甚至不运行分类帐事务验证()。但当他调用FinaltyFlow来满足简单的公证人在分类账上提交交易时,它将失败verifyContracts(),因为S指定Move合约,该合约应该说所有者partyB必须签署虚假交易。 所以这并不能说服我需要一个验证公证人。 显然,我一定错过了什么。有人可以开导我吗?

感谢。

\肖恩

1 个答案:

答案 0 :(得分:4)

正如您所说,验证公证人的优势在于它可以防止恶意方“楔入”某个状态 - 也就是说,创建一个消耗他们所知道的未消耗状态的无效事务。虽然交易无效,但非验证公证人不会意识到这一点,并将该状态标记为已花费。

这是无效的,这个无效的交易会导致FinalityFlowverifyContracts()的调用失败。但是,我们无法强制恶意节点使用FinalityFlow向公证人发送内容。如果恶意节点有足够的动机,他们可以手工构建无效的事务哈希,并将其直接发送给公证人。例如。

但是,请注意,在非验证公证的情况下,仍有多层防止楔入的保护:

  • 恶意方必须知道他们想要楔入的状态。由于Corda中的信息仅在需要知道的基础上分发,因此该节点只会知道一小部分未消耗状态
  • 如果状态被意外楔入,节点可以向公证人显示无效的交易。在看到交易无效后,公证人会将该状态重新标记为未消费
  • 由于Corda是一个获得许可的网络,公证人可以记录提交交易的每个人的合法身份。如果恶意节点提交无效交易以消费状态,则会知道其身份,并且可以根据管理网络参与的协议在平台之外解决争议

另一方面,SGX解决了与验证公证人相关的数据泄漏问题。如果交易验证发生在新交所飞地内,则验证公证人不会获得有关他们正在验证的交易内容的信息。

最终,验证和非验证公证人之间的选择归结为与给定部署相关联的威胁模型。如果您在确定参与者不会故意更改节点代码或恶意行为的情况下使用Corda,则不需要验证公证人。

但是如果你假设有人会试图作弊并且愿意编写自己的代码来做到这一点,那么验证公证人会提供额外的保护层。

所以Corda提供了选择:

  • 如果您相信参与者相对较少,请选择向公证群展示更多内容......
  • 如果你认为向公证人透露过多的风险是一个更大的问题,选择向公证集群揭示更少

(如果你对每个人都是偏执狂,请使用SGX!)