经常有人问到一个问题:“怎么在合约里实现链上数据的读取权限?”
这样的需求背后,是开发者想把一些数据上链,让智能合约管理和运算,以达成业务上的共识,但又不希望数据公开可见,避免链上其他未授权参与者读取,导致信息泄露。
最直观的实现思路,就是在合约代码里写一段过滤逻辑,判断调用者满足某些条件(如在白名单里)才允许返回数据,否则拒绝。
我们设定一个案例:有一个积分联盟链,链上参与者有Alice、Bob、Carl、Dave等多方以及他们的家人,每个人的积分余额希望设定只有自己和家人可见,其他参与者不可见。
客户端通过区块链的应用级接口,发送请求到某个节点,调用智能合约的get方法查Bob的积分,智能合约写了权限控制逻辑,拒绝越权访问。
因为智能合约在每个节点上的运行逻辑是一致的,因此无论请求发往哪个节点,结果都一样。这看起来貌似没啥问题,但实际是否也是如此?
这里先说结论:这是个“治标不治本”的做法,并不能确保数据不泄露。
Genesis Mining运营主管:无论交易费用如何,比特币都是很好的价值存储手段:针对比特币及其区块链网络是否能在不需要第二层解决方案的情况下作为一种价值储存手段被主流采用,比特币采矿公司Genesis Mining运营主管Philip Salter表示,无论交易费用如何,比特币都是一种很好的价值存储手段。费用越高,能够有效转移的最小价值也就越大。然而,如今比特币被更多地视为一种价值储存手段,而非数字现金。Philip Salter认为,这种观念的转变仍可能引发一些问题。他说:“几年前,由于交易费用实际上为零,所以1美元的存储和传输是可行的。目前,发送一笔交易很容易花费15美元,所以再发送1美元是不明智的。如果这一趋势继续下去,由于更多的比特币使用和更高的比特币价格,它将禁止普通金额的价值转移,它将只会成为非常大金额的有效价值存储。”Salter补充道:“这就是为什么我认为第二层解决方案不仅对于比特币作为货币的使用是必要的,而且对于比特币作为价值储存手段的长期可行性也是必要的。”(Cointelegraph)[2021/1/22 16:48:07]
现在开始我们要用“多中心、去信任”的思维重新去审视这个案例。
伏泰昊:JUST主动思考如何在波场上建立完善的DeFi体系:据最新消息显示,波场大航海时代4.0全球线上发布会正在进行中,JUST项目负责人伏泰昊在发布会中表示:“JUST旨在打造基于波场TRON的稳定币借贷平台,一个好的金融产品离不开下面应用层的稳定输入与输出,会有多个协议与应用的交叉集合,长期来看,JST代币作为整个治理体系的代币,我们会提供多种底层借贷协议和报价协议等,为用户提供全面的金融服务。作为DeFi明星项目,JUST不仅致力于开拓波场的稳定币市场,也在主动思考如何在波场上建立完善的DeFi体系。”[2020/7/7]
我们先分析下:链上数据是怎么存储?在什么情况下会被泄露呢?
区块链网络节点分布在不同参与者的环境里,出于区块链的数据一致性特性,每个节点都持有一份完整的数据副本。无论这个数据库是LevelDB/RocksDB这样的文件型数据库,还是Mysql这样的关系型数据库,数据都会落到每个节点的数据库实例里。
也就是说Bob的积分余额,在所有的节点硬盘上都存了一份,在MySQL数据库工具里看,大概这个样子:
动态 | 芬兰海关对如何处理缴获的比特币感到困惑:金色财经报道,芬兰财政部下属的海关一直在考虑如何处理几年前从贩手中缴获的1666枚比特币。据悉,芬兰海关不想拍卖没收的比特币,因为可能会将其返还给犯罪分子。这些比特币在没收的时候价值不到70万欧元(约合76万美元)。根据Coin360的数据,截至目前,这1666枚比特币的价值接近1500万欧元(超过1550万美元)。据报道,该机构最初计划在2018年拍卖这些资金,但最终以“反”为由冻结了这些比特币。报告指出,除了持有超过1500万美元的比特币外,芬兰海关还持有一些价值数百万欧元的山寨币。[2020/2/26]
如果链上(小概率地)存在某个有点儿区块链技术经验的参与者,暗戳戳地怀揣“恶意”(也就是俗称的拜占庭玩家),他可以用工具打开本地的数据库,直接查询Bob的余额。这样,用合约去防止数据泄露的控制逻辑就会完全被绕过。就这么简单。
另外,区块链的数据不仅与合约相关,还和交易记录密切相关。
在发送交易的时候,交易参数会包含一部分或全部数据(如Alice给Bob转账100),交易会打包进区块,最终也写入节点数据库里。
动态 | 火币中国CEO与马来西亚总理讨论区块链将如何在马来西亚落地:据雅虎财经消息,近日,火币中国CEO袁煜明与马来西亚总理马哈蒂尔(Mahathir Mohamad)就“如何在制造业和能源行业中应用区块链”以及“区块链将如何在马来西亚落地”进行了讨论。[2019/5/29]
对区块和交易数据的查询一般不会用合约逻辑实现,于是,仅仅在合约里写过滤逻辑并无法防止这些数据的读取。拜占庭玩家可以在本地数据库里遍历区块数据,获取交易历史明细,从头到尾回放交易流水,得知现在Bob的余额是300。
从整个技术栈来看,拜占庭玩家用工具访问本地数据、遍历区块和交易都算是小意思了,他甚至可以修改区块链系统代码,从区块链网络接口、程序内存、智能合约引擎等层面切入,从协议包、区块、交易流水、合约上下文、状态数据等环节嗅探和拦截到明文数据,即使数据落盘是加密的,密钥也在节点持有人手里,他照样能解开。
所以,从区块链底层代码入手去控制读数据的权限,同样也是不管用的,毕竟开源的代码,谁都可以改,俗话说:“坏人会武术,谁都挡不住”,而懂技术的“坏人”更是无所不能、防不胜防。
美国银行分析师解释比特币如何像常规货币:据CCN报道,美国圣路易斯联邦储备银行内容策略师Christine Smith认为,比特币不像人们想象的那样异乎寻常,比特币的两个用例是作为价值和货币存储的,史密斯论证比特币与普通货币没有区别的三大理由:
1.比特币和美元都没有实物资产支持;
2.“稀缺”是美联储货币体系稳定战略的核心,因为“为了保持其价值,货币必须供应有限”,而比特币的数量也是有限的。
3.比特币“纯粹的电子现金对等版本可以让在线支付从一方直接发送到另一方,而无需通过金融机构”,这与现金花费方式有相似性,即“不需要中间人处理交易”。[2018/5/1]
总之,区块链强调“分享”和“一致性”,只要明文数据在链上广播,别人就有无数种方法去获取。无论是在合约层还是底层代码,几乎所有的读控制逻辑都像窗户纸一捅就破,像马其诺防线一样形同虚设。
看到这里,有人可能会问:读数据如此不设防,那区块链上的“写”权限还有意义吗?回答是:有的。
回到积分这个例子,我们设定Alice是积分管理员,她才能发起转移积分的交易,然后Bob也只接受Alice给自己的积分。转移积分的交易需要经过全网共识,所有共识节点会检查合约里写的规则,不符合就拒绝签名,越权交易无法得到共识,则数据不会被修改。
这时即使有少量的拜占庭节点,无论在本地节点怎么折腾,也篡改不了全网数据。
“写”交易追求共识,所以客户端发交易(sendTransaction或sendRawTransaction)时,要打上数字签名,区块链系统验证签名,确认是哪个外部账户发过来的交易,可以进行严格地校验和准确地追溯。
“读”操作更强调共享,读数据的操作其实并不经过共识流程,在自己的节点翻翻数据就行了。通常区块链系统在读接口(call)并不用严格填写发送者,也无需打上数字签名,所以,在合约的读方法里判断外部账户,其实是无效的。
综合以上种种分析,可以得出结论:在链上实现读控制并不是简单的事情。
如果对读控制逻辑考虑不足,那么效果将是:你在自己的节点上读一下数据来测试验证,表象看起来OK,你以为岁月静好,却不知道在一个拜占庭玩家那里,数据已经被翻得底朝天了。
考虑到多方协作中的去信任化,追求数据共享、公开、透明的取向,一般来说,如果是关键的、不能泄露的敏感数据,一定要慎重上链,能上链的,一定是大家说好可以分享的“最大公约数”。
事实上很多区块链系统里的交易和余额等状态都是全网可见的,所谓的匿名性或隐私性,只是用公私钥和地址体系代替了明文账户,这个级别的“匿名”,在业务模型复杂且强调全面隐私的金融、政务等领域并不适用。
那么我们还有什么方法,在兼顾共享、透明、开放的同时,适当地控制数据可见性呢?
第一个思路是与链外治理结合,约定责权利边界。我在合约、接口层面做好权限设计和实现,保证在我的业务系统里不泄露数据,我的区块链应用层、展示界面、报表、日志、数据库等环节都不会被越权访问,消除我内部操作风险。
至于别人的节点,我管不着,那是他们的责任,谁泄露滥用数据,就重罚谁(取证、举证其实挺难的)。这种逻辑其实有点“各扫门前雪”的意思,在这种模式下,我的敏感数据还是不能上链给到别人。
第二个思路是引入密码学。这里举几个例子。
非对称加密:上链的数据用接受方的公钥加密,则只有接收方才能用自己的私钥解开。
密码信封:上链数据采用某个口令加密,口令通过链外信道给到接收方,只有知道口令的接收方才能解密。
属性加密:数据采用属性加密算法进行加密,符合指定属性(如具备管理员属性)的才能解密。这些方案的考量在于运算、传输、存储的开销都会大一点,另外加密的数据不支持明文运算,难以实现复杂的业务合约逻辑。还要注意的是,即使加了密,本质上数据的全部信息还是都上链了,随着时间推移,计算能力和算法(如量子密码)的进化,存在被暴力破解的可能性,或者因为密钥泄露/太简单被猜到,链上的数据又无法撤回,就有被昭告天下的风险。
第三个思路是仅摘要上链,数据明文根本就不上链。
其实,区块链的作用并不一定是全面掌握数据和执行复杂的业务规则,而是凭借多方见证的公信力,验证数据的准确性、完整性,并起到存证和追溯的作用,事实上现阶段很多区块链系统主要是这么个逻辑,客观上已经能起到信任的锚点作用。
如果需要明文数据,再通过摘要里的寻址信息去链外系统获取数据,在这个环节上做精细的权限控制,并和链上摘要进行互验。
但,数据不上链还是有点不甘心呀,区块链这么创新的理念,智能合约这么强大的功能,怎么充分发挥呢?
这就要讲到隐私计算了,包括但不限于零知识证明、同态加密、安全多方计算、联邦学习等一系列重武器,可以做到隐秘数据、身份的同时,对加密数据进行加减乘除运算、逻辑运算、排序、统计分析,更进一步还可以做到“前台匿名,后台可审计”的效果,以符合监管合规要求。这就是在区块链上实现“可用不可见”的最终奥义。
限于篇幅,这里不展开隐私计算的细节,可以参考WeDPR隐私保护相关的开源场景方案,尤其是其中的几个场景,如VCL区块链可验证密文账本,可以用于解决前面提到的积分案例里的一些隐私问题。
WeDPR隐私保护相关开源场景方案:
https://fintech.webank.com/wedpr/
VCL区块链可验证密文账本:
https://sandbox.webank.com/wedpr/confidentialpayment/#/start
结语
本来只是想聊聊“怎么写合约读权限”这样一个小问题,结果变成了长篇。
其实面对区块链编程和开发时,真的不能像写单机或集群软件那样考虑问题,而要充分考量多方参与、去信任环境下的协作关系,在共享、透明、可追溯的基本哲学之上,关注隐私保护诉求,掂量数据的重要性和敏感性,再深入到技术栈,考虑各种算法的功效和成本、综合现在和未来的风险和收益以选择合适策略,这样才能全面保护数据和隐私,安全地发展业务,维护自身和用户权益。
来源 | FISCO BCOS开源社区
标签:区块链比特币BOBALI以下哪个不是区块链区块的结构比特币BTC跌破26000美元BOBARealio Netwrok
现在,越来越多的著名的传统艺术家和摄影师正在进入 NFT 领域。Gamble 是一位拥有数十年经验的知名摄影师,他拍摄的照片经常出现在《生活》和《纽约客》等知名版物.
1900/1/1 0:00:001.DeFi总市值:1472.99亿美元 DeFi总市值数据来源:Coingecko2.过去24小时去中心化交易所的交易量:47.
1900/1/1 0:00:00今年NFT的火热让国内互联网大厂看到了机会,于是纷纷布局NFT业务,阿里腾讯相继开发了相应的NFT平台,并通过平台卖出了不少的NFT艺术藏品,但是随着国家对NFT炒作泡沫的重视.
1900/1/1 0:00:0011月9日盘中,比特币再创历史新高,首次突破68000美元/枚。截至目前,报68406美元/枚,日内涨幅4.6%。从突破前高至67000美元关口到68000美元,BTC仅仅用了4个小时.
1900/1/1 0:00:00MakerDAO最近宣布与Aave合作实施DAI直接存款模块(D3M),以最大限度地减少通过Aave借入DAI的不确定性.
1900/1/1 0:00:00互联网时代有一个显著特征,那就是——「创作者」越来越多,他们会在互联网上制作和分享内容,吸引人们关注,有些人甚至会以此谋生.
1900/1/1 0:00:00