在超级账本结构智能合约中传递解密密钥?

时间:2019-09-04 09:52:41

标签: encryption hyperledger-fabric

我的结构网络有许多Client对象,这些对象已使用PGP加密。网络上的对等组织具有与之关联的安全私钥,一些(但不是全部)组织可以根据其授权者解密Client对象。

例如。 Client对象看起来像这样

Client {
    ID: "abcdef",
    AuthorizedPartners: ["ABC", "Partner X", "1234"],
    Encrypted: "<PGP ENCRYPTED STRING>"
}

重要的是只有AuthorizedPartners可以解密Client.Encrypted字段中的数据,而其他人则不能。

Encrypted字段的解密版本是ClientInfo对象,其中包含有关客户端的某些信息,例如:

ClientInfo {
    Name: "Ryder",
    PhoneNum: "+1234567890",
    Email: "abc@example.com"
}

我以前的更新信息的方法涉及建立同行组织:

  1. 使用ID获取客户端数据。
  2. 解密Client.Encrypted字段并将其建模为ClientInfo
  3. 更新ClientInfo
  4. 重新加密ClientInfo并用它替换Client.Encrypted
  5. 调用智能合约更新Client.Encrypted字段

当然,此方法不允许智能合约进行任何验证,因为它无法自行解密信息。

我想以一种更好的方式来解决这个问题,那就是让智能合约以某种方式解密信息本身。例如,如果我们想更改与Client关联的电话号码,我可以

  1. 调用智能合约功能UpdateClientPhoneNum(id, newNum, decryptionKey)
  2. 智能合约使用提供的Client.Encrypted来解密decryptionKey
  3. 合同更新Phonenum字段
  4. 合同使用它已经可以访问的所有AuthorizedPartners的公钥重新加密客户端
  5. 将更新的信息放在链上

现在,我的问题是,像这样安全地将解密密钥传递给智能合约吗?如果没有,我还能如何实现这一流程?谢谢

0 个答案:

没有答案