Hyperledger fabric 如何防止在链码进程之外访问状态数据库

Hyperledger fabric 如何防止在链码进程之外访问状态数据库,hyperledger-fabric,hyperledger-chaincode,Hyperledger Fabric,Hyperledger Chaincode,我正在构建一个可以保存敏感用户数据的系统 这意味着我需要阻止任何对chaincode进程之外的状态数据库的访问 另外,如果我将数据库发布为docker映像,我如何确保对等方使用特定的数据库映像,而不是被篡改的数据库映像 如何防止在链码之外访问状态数据库 过程 您需要确保两件事: 链码读取的数据不能在链码之外使用 链码读取的数据无法更改,如果更改,则可以检测到 第一个问题可以通过加密数据来缓解,第二个问题可以通过让链码将MAC(消息认证码)标记附加到它写入的每个项目上来缓解,还可以验证它读取的

我正在构建一个可以保存敏感用户数据的系统

这意味着我需要阻止任何对chaincode进程之外的状态数据库的访问

另外,如果我将数据库发布为docker映像,我如何确保对等方使用特定的数据库映像,而不是被篡改的数据库映像

如何防止在链码之外访问状态数据库 过程

您需要确保两件事:

  • 链码读取的数据不能在链码之外使用
  • 链码读取的数据无法更改,如果更改,则可以检测到
第一个问题可以通过加密数据来缓解,第二个问题可以通过让链码将MAC(消息认证码)标记附加到它写入的每个项目上来缓解,还可以验证它读取的任何项目的MAC标记,如果标记无效,则返回错误

值得一提的是,您应该对密文进行MAC,而不是对MAC进行加密(先加密,然后是MAC)

另外,如果我以docker映像的形式发布数据库,我如何 确保对等方使用特定的数据库映像,而不是 篡改了一个

如果链码中嵌入了MAC密钥,则您发布的数据库映像将包含链码未生成的记录(因此,未向其附加适当的MAC标记),然后将检测到它

问题是,恶意管理员也可以向对等方提供有效的数据库容器,但这是过去的


您还可以研究另一个选项,即使用“英特尔SGX TEE”(可信执行环境)功能的选项。

oh不知道英特尔TEE的事情,当您说“加密数据”时,您的确切意思是什么?我是使用非对称加密并将密钥存储在某处,还是使用对称加密并将密钥保存在用户手中,或者像在这个问题中一样使用这两种加密方式