使用智能合约保存的数据如何存储在以太坊区块链中

问题描述 投票:0回答:1

我对智能合约的数据如何存储在以太坊区块链中感兴趣。比如我有这个结构体,里面还存储了用户的密码

    struct UserInfo {
        string password;
        uint256 blockTime;
        address userAddress;
    }

存储在私有映射中

mapping(address => UserInfo) private users;

我还有一个函数,如果用户位于此映射中,则返回密码

    function getPass() public view returns (string memory){
        require(users[msg.sender].userAddress == msg.sender, "User does not exist");

        return users[msg.sender].password;
    }

很明显,如果某个用户想要通过此智能合约获取另一个用户的密码,他将无法做到这一点,因为他不会通过此检查

require(users[msg.sender].userAddress == msg.sender, "User does not exist");
。 但是,如果用户安装了完整节点,并且相应地在本地拥有整个区块链,那么他是否能够以某种方式读取智能合约保存的数据呢?

我在solidity文档中找了这个但没有找到,所以我问chatgpt,他说“区块链是一个分布式数据库,存储在区块链中的所有数据对网络中的所有参与者都是可用的。有权访问与网络同步的完整节点的用户将能够查看所有数据,包括位于区块链中的所有智能合约的状态。” 事实证明,用这种方式在区块链上保存机密数据是不可能的(

ethereum blockchain solidity
1个回答
0
投票

你是对的。直接将敏感信息存储在 ETH 区块链或任何其他公共区块链上通常并不安全。由于区块链技术的透明性,所有有权访问全节点的人都可以看到所有数据。您的智能合约逻辑可防止通过访问控制(例如您已实施的访问控制)对某些数据进行未经授权的访问,但实际数据仍然可见。例如,即使由于访问控制检查,用户无法通过“getPass”功能访问其他用户的密码,他们仍然可以检查区块链的状态并直接查看存储的密码,而无需与智能合约交互。为了防止这种情况,在将敏感数据存储在区块链上之前对其进行加密是一个好主意。然而,加密带来了安全隐患和漏洞的风险。

© www.soinside.com 2019 - 2024. All rights reserved.