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

How to prevent access to the state database outside the chaincode process

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

这意味着我需要防止在链代码进程之外访问状态数据库。

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

How to prevent access to the state database outside the chaincode process

您需要确保两件事:

  • 链码读取的数据不能在链码外使用
  • 链码读取的数据不能被更改,如果被更改则可以被检测到。

第一个问题可以通过加密数据来缓解,第二个问题可以通过让链码在它写入的每个项目上附加一个 MAC(消息认证码)标签来缓解,并验证MAC 它读取的任何项目的标签,如果标签无效则 return 一个错误。

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

also if I am publishing the database as a docker image, how do I make sure that the peer uses that specific database image, and not a tampered one.

如果链代码在其中嵌入了 MAC 键,那么您发布的数据库映像将包含链代码未生成的记录(因此,没有附加适当的 MAC 标签到它)然后它会被检测到。

问题是恶意管理员还可以向对等方提供一个有效的数据库容器,但来自过去。

您可以研究另一个选项 Fabric Private Chaincode,它使用英特尔 SGX TEE(可信执行环境)功能。