我正在构建一个将保存敏感用户数据的系统。
这意味着我需要防止在链码过程之外访问状态数据库。
如果我将数据库发布为docker映像,也要如何确保对等方使用该特定数据库映像,而不是被篡改的映像。
如何防止在链码之外访问状态数据库过程
您需要确保两件事:
第一个问题可以通过加密数据得到缓解,第二个问题可以通过使链码在其写入的每个项目上附加一个MAC(消息身份验证代码)标签,并验证其读取的任何项目的MAC标签来缓解,如果标签无效,则返回错误。
值得一提的是,您应该对密文进行MAC处理,而不要对MAC进行加密(先加密,然后进行MAC)。
如果我将数据库发布为docker映像,我该如何做确保对等方使用该特定的数据库映像,而不是被篡改的一个。
如果链码中嵌入了MAC密钥,那么您发布的数据库映像将包含链码未产生的记录(因此,未在其上附加适当的MAC标签),它将被检测到。
问题是,恶意管理员还可以从过去提供对等方有效的数据库容器。
您可以研究的另一个选项是Fabric Private Chaincode,它使用英特尔SGX TEE(受信任的执行环境)功能。