Hash 如何从Hyperledger结构重新计算私有数据哈希

Hash 如何从Hyperledger结构重新计算私有数据哈希,hash,hyperledger-fabric,hyperledger,Hash,Hyperledger Fabric,Hyperledger,我需要重新计算私有数据的散列,以证明数据的完整性。使用私有数据收集时,私有数据存储在SideDBs中,并根据文档将数据散列在分类账上。基本上,问题分为两个子问题: 如何访问私有数据的散列 使用哪种方法重新计算保存在分类账上的哈希 提前谢谢 我将Hyperledger Fabric v1.4.2用于私有数据。我以大理石为例 我希望能够计算私有数据散列并验证它是否与保存在分类账中的散列相对应。要获取SHA256散列(使用Fabric 1.4.x contract API),请使用: 您可以计算写

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

  • 如何访问私有数据的散列
  • 使用哪种方法重新计算保存在分类账上的哈希
提前谢谢

我将Hyperledger Fabric v1.4.2用于私有数据。我以大理石为例

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

要获取SHA256散列(使用Fabric 1.4.x contract API),请使用:

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

echo-n“{\“name\”:“Joe\”,“quantity\”:999}”shasum-a256

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


对于私有数据的大多数使用,您最有可能使用随机salt,这样私有数据就不会在许可的区块链网络(协议方之间)中受到暴力攻击。salt在与私有数据相同的瞬态字段中传递。并且(稍后),在重新计算私有数据散列时,它需要包含在私有数据本身中。请参见

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

这让我感到惊讶,以前没有人提到过这一点,所以我想我最好在更多的损害发生之前指出这一点

私有数据背后的逻辑很简单,它将数据放入本地嵌入式数据存储,并将该数据的散列放入区块链

问题是加密散列不是一种加密机制,任何人使用相同的散列算法(这也是非常标准化的)散列相同的数据都会得到相同的散列!这正是散列函数的设计目的,这就是为什么我们在数字签名中使用散列来允许任何人验证签名的数据

然而,这也意味着任何人都可以使用字典攻击来“解密”散列后面的数据

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

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

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

在要散列的每个数据中添加盐怎么样?这是Hyperledger Fabric没有做的一件事

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


有这么多人在使用这个安全系统真是太可怕了。

嗨,我也遇到了同样的问题。你成功地使它在你这边起作用了吗?谢谢你的回复。我知道这可能很危险,但这是为了学习。只是一个评论。使用JSON有效负载时应该小心。通常会创建一个对象并将其转换为JSON字符串,例如使用Node.js中的JSON.stringify将其写入分类账。但是,这些函数中的许多函数不能保证属性在最终字符串中的顺序。最后,对于同一个对象,可能会得到不同的字符串,从而得到不同的哈希值(一个是手动计算的,另一个是在分类账中)。
let pdHashBytes = await ctx.stub.getPrivateDataHash(collectionA, readKey);
let actual_hash = pdHashBytes.toString('hex');