当可以直接更改 couchdb 数据时,Hyperledger Fabric 中的数据如何安全

How your data is safe in Hyperledger Fabric when one can make changes to couchdb data directly

我想知道当管理员可以使用 Couchdb 直接提供的 FauxtoncURL 更改 Couchdb 中的最新状态时,您的数据如何安全。

据我了解Hyperledger Fabric提供不可变数据特性,最适合防止欺诈(区块链特性)。

问题是:- 我可以轻松更改 couchdb 中的数据,当我从 chaincode 中查询时,它会显示更改后的数据。但是当我使用 GetHistoryForKey() 查询 ledger 时,它并没有显示我对 couchdb 所做的更改。有什么办法可以防止这种欺诈行为?因为用户将始终看到最新状态,即来自 couchdb 而非来自 ledger

的数据

任何答案将不胜感激。

谢谢

您必须保护您的 couchdb 不被对等进程以外的进程修改,就像您通常必须保护您的文件系统或内存一样。

如果你让你的文件系统世界可写,其他用户可以覆盖账本内容。同样,如果您不对 couchdb 写入进行访问控制,那么您将失去不变性属性。

尽管这似乎有道理,但背书政策是您保护自己(系统)免受此类行为影响的一般手段。

这就是去中心化分布式系统的美妙之处。即使你或其他人改变了你的 database/ledger 的状态,它也不会与网络中其他人的状态相匹配,它也不会与交易块哈希匹配,从而使背书人的任何交易无效,除非你可以恢复实际网络参与者或订购者就分类账的状态达成一致。 要利用分类帐的不变性,您必须查询分类帐。查询数据库不利用区块链的力量,因此必须以类似于保护对任何其他数据库的访问的方式进行保护。

在 Hyperledger Fabric v1.2 中,每个节点都有自己的 CouchDB。因此,即使您直接从一个同行的 CouchDB 更改数据。背书将失败。如果背书失败,你的数据将不会写入世界状态和当前状态。

您不应将 CouchDB 端口公开到对等网络之外,以免数据被篡改。只有对等方的管理员才能访问 CouchDB,并且管理员没有动机篡改自己的数据。让我进一步解释...

Hyperledger Fabric 状态数据库类似于比特币未花费交易数据库,因为如果节点管理员篡改自己节点的数据库,节点将无法说服其他节点来自它的交易是有效的。在这两种情况下,数据库都可以看作是当前区块链状态的缓存。在这两种情况下,如果数据库损坏或被篡改,它可以在区块链的对等点上重建。对于比特币,这是通过 -reindex 标志完成的。对于 Fabric,这是通过删除状态数据库并重新启动对等节点来完成的。

在 Fabric 中,来自背书策略中指定的不同组织的节点必须 return 相同的链代码执行结果才能验证交易。如果账本状态数据在节点上被更改或损坏(在 CouchDB 或 LevelDB 文件系统中),那么链代码执行结果将在背书节点之间不一致,“坏”peer/org 将被发现,并且应用程序客户应该在提交 ordering/commit 的交易之前丢弃错误 peer/org 的结果。如果客户端应用程序无论如何都尝试提交背书结果不一致的交易,这将在验证时在所有对等点上检测到并且交易将无效。

这里你需要明白两件事

  1. 虽然一个peer的couchdb的数据可能被篡改了,但是你应该设置你的背书策略,使得它必须被所有peer背书。

  2. 你不能暴露你的couchdb被修改,我建议看Cilium

正如其他人所解释的那样 - endorsements/consensus 是关键。尽管可以从外部修改背书节点的账本状态——在这种情况下,该节点背书的所有交易都将被丢弃,因为其他背书节点将发送正确的交易(假设其他节点的世界状态也未被篡改)和共识将在这里发挥关键作用,帮助 select 正确交易。

最坏的情况是所有交易都会失败。

Hyperledger fabric 的世界状态(Ledger 状态)可以随时从区块链(交易日志)中重新生成。而且,如果对等节点出现故障,这种重新生成会自动发生。通过一些仔细的配置,可以构建一个自我修复的网络,其中出现故障的对等方会自动从灰烬中复活(双关语)。

这里要考虑的重点是八卦数据传播协议,它可以被认为是神秘的治疗师。网络中的所有对等点持续连接,并与网络中的其他对等点交换数据。

引用文档 -

Peers affected by delays, network partitions, or other causes resulting in missed blocks will eventually be synced up to the current ledger state by contacting peers in possession of these missing blocks.

和...

Any peer with data that is out of sync with the rest of the channel identifies the missing blocks and syncs itself by copying the correct data.

这就是为什么总是建议在网络和组织中拥有越来越多的支持同行。网络越大 - 恶意攻击就越难。

希望我能帮上点忙。参考 Link:https://hyperledger-fabric.readthedocs.io/en/release-1.4/gossip.html

"a state reconciliation process synchronizes world state across peers on each channel. Each peer continually pulls blocks from other peers on the channel, in order to repair its own state if discrepancies are identified."