如何从Hyperledger Fabric重新计算私有数据哈希



我需要重新计算私有数据的哈希值来证明数据的完整性。当使用私有数据收集时,私有数据存储在SideDB中,并根据文档将数据的哈希存储在账本上。基本上,问题分为两个子问题:

  • 如何访问私有数据的哈希值?
  • 使用哪种方法来重新计算保存在账本上的哈希?

提前谢谢。

我将Hyperledger Fabric v1.4.2与私有数据一起使用。我以弹珠为例。

我希望能够计算私有数据哈希并验证它是否与分类帐中保存的哈希相对应。

获取 SHA256 哈希(使用 Fabric 1.4.x 合约 API(请使用:

let pdHashBytes = await ctx.stub.getPrivateDataHash(collectionA, readKey);
let actual_hash = pdHashBytes.toString('hex');

您可以计算在 Ubuntu 上编写的私人数据,如下所示。

echo -n "{"name":"Joe","quantity":999}" |shasum -a 256

并验证它们是否匹配。这就是使用私有数据方法和验证模式的机制。现在让我们添加有关盐渍机制的信息,如本文其他地方所述。

对于私有数据的大多数使用,您很可能会使用随机盐,这样私人数据就不会在许可的区块链网络中(在商定的各方之间(受到暴力攻击。盐在与私有数据相同的瞬态字段中传递。并且(稍后(,在重新计算私有数据哈希时,它需要包含在私有数据本身中。见 https://hyperledger-fabric.readthedocs.io/en/release-1.4/private-data-arch.html#protecting-private-data-content

不要使用它,私人数据是安全漏洞。

令我惊讶的是,以前没有人提到过这一点,所以我想我最好在造成更多损害之前现在指出这一点。

私有数据背后的逻辑很简单,它将数据放在本地嵌入式数据存储中,并将该数据的哈希放在区块链上。

问题是加密哈希不是一种加密机制,任何使用相同哈希算法(这也是非常标准化的(哈希的相同数据将始终获得相同的哈希!这正是哈希函数的设计目的,这就是为什么我们在数字签名中使用哈希来允许任何人验证签名数据的原因。

但是,这也意味着任何人都可以通过使用字典攻击来"解密"哈希背后的数据。

哈希很便宜,普通笔记本电脑CPU核心上每个哈希的成本约为3微秒,基本上我可以在单个笔记本电脑CPU核心上一小时内创建10亿个候选哈希,并将它们与Hyperledger Fabric DLT上的哈希进行比较。

我只是在谈论在我的笔记本电脑上使用单核,甚至不是笔记本电脑的 50% 的功率

为什么危险?因为如果攻击者连接到区块链系统,攻击者知道被哈希处理的数据范围(等,交易ID,项目名称,银行名称,地址,手机号码(,因此您可以轻松创建字典攻击以获取哈希背后的真实数据。

如何为每个要散列的数据添加盐?嗯,这是Hyperledger Fabric没有做的一件事。

为了辩护,Hyperledger没有实施盐,因为很难将盐传递给交易对手。你不能使用DLT来传递盐值,因为攻击者会看到它,所以你必须与对手方创建另一个P2P连接。如果您需要与所有交易对手建立联系,那么首先使用区块链有什么意义?

可怕的是,这么多人正在使用这个整体的安全性。

最新更新