zoukankan      html  css  js  c++  java
  • 数据上链的原则与方式

    由于区块链技术众所周知的不可篡改的特性,很多人就将区块链作为一个数据库来使用,在传统项目进行区块链改造的过程中,将所有本来存入传统RDBMS(关系数据库)的数据,全部改成存入区块链中,以为这就是区块链项目了。实际上,我们在对传统项目进行链改的过程中,由于区块链的特殊特性,并不能作为传统数据库使用,而是要将关系数据库、区块链结合,进行业务分析,将能上链的,有必要上链的数据进行区块链上链改造。那么到底哪些数据适合上链,哪些数据不适合上链,到底用什么方式上链?

    一、哪些数据不适合直接上链

    1. 大文件不直接上链。

    比如视频、图片等。主要是因为区块链作为一种分布式账本技术,在多个节点(甚至所有节点)都在本地存储了区块链完整的历史数据。如果我们将1GB的视频直接上链,那么这个视频将会在每个节点都占用1GB的磁盘空间,而且一旦上链是无法删除该交易的,所以我们还不能去删除该数据,强行删除将会导致区块链数据不完整,新节点加入同步并检查历史账本数据时将会因为数据丢失而校验失败。所以我们一般来说区块链都会限制交易的大小和区块的大小,比如我们要求每个交易不能超过1MB,每个区块不能超过8MB,从而杜绝大文件直接上链导致的磁盘急剧膨胀的问题。如果我们的大文件有上链的需求,可以采用哈希上链的方式,要么直接计算哈希值,然后将哈希上链,要么结合IPFS去中心化存储技术,将大文件存储到IPFS网络中,然后IPFS会给出一个特殊的哈希值,将该哈希值上链。

    2. 机密、敏感数据不直接上链。

    比如合同内容、订单内容。因为我们的区块链账本是分布式存储在各个节点的,所以如果我们将机密敏感的数据直接上链了,那么所有节点都会同步到上链的数据,在他们本地节点就可以查看上链后的敏感机密信息。如果有上链的需求,我们可以将数据存储在私有的数据库或者IPFS中,然后哈希上链,也可以通过密码学的方法进行加密,然后密文上链。

    3. 大量、冗余重复的数据不直接上链。

    比如系统日志。一般系统日志如果开到DEBUG级别,每秒几千几万笔日志记录是很正常的,而且这些日志的价值信息很低,基本都是很细节的,冗余重复的日志。而区块链本身是一个性能有限的网络,一般TPS都是在千级别,能做到上万TPS的都已经是很厉害的了。而如果我们将大量冗余重复的数据上链,那么将会占用大量带宽,导致真正有价值的数据淹没在日志交易中,排队等待打包,从而影响我们正常业务的运行。而且大量日志上链也会导致区块链磁盘占用快速膨胀,对所有节点的存储也是挑战。我们如果有日志上链的需求,一般可以按批次,将日志进行IPFS存储、计算哈希,或者通过一种叫KSI(无密钥签名基础设施)的方式,对批量日志建立哈希树,将哈希根上链。

    二、哪些数据适合上链

    1.有价值含义的数据上链。

    比如积分、票据、礼品卡、游戏金币、游戏道具等。区块链天然可用于构建价值网络,在区块链中可以很容易的支持通证(Token)的创建、流转、销毁等操作。一般通证分为两种:同质化通证(fungible Token)和非同质化通证(NFT全称是non-fungible Token)。通证并不是公有链独有的技术,在联盟链中,也可以通过合约实现这两种通证。

    同质化通证用于表示同一种类型的,彼此没有区分的价值符号,比如你有1000个国航里程积分和我有1000个国航里程积分是没有区别的,我们都可以去兑换相同的礼品,其价值是一样的。所以某商家的积分、某游戏金币都可以用同质化通证在区块链上实现。

    非同质化通证用于表示彼此之间有区别,具有唯一性的符号。比如游戏道具,不同的道具可能具有不同的属性,从而在游戏中具有不同的表现。

    对于这些有价值,而且可以看得出来是有流通需求的数据,就可以用通证来表示。

    2. 有共享需求的数据上链。

    比如黑名单共享。行业中经常有数据共享的需求,比如在银行之间希望能够共享信用黑名单,如果在一个人在某个银行失信,进入了银行的黑名单,那么其他银行肯定也不愿意贷款给这个人。于是银行之间可以建立区块链,每个银行将黑名单共享到区块链中,利用区块链共享账本的特点,所有上链数据同步到每个银行的区块链节点中。当然出于隐私保护和法律法规的要求,我们不会直接明文上链,可以通过一些密码学的方法,将黑名单数据在各个银行之间共享,同时也保证不泄露更多隐私信息。

    3. 有协同处理需求的数据上链。

    比如商品溯源。一件商品从生成出厂到后面经过总经销商、分销商、各个物流公司、零售商才会到达消费者手中,如果是跨境贸易,那么中间还会经过海运、海关等环节,中间经手的环节多,参与方又是独立的不同的公司和政府部门,所以我们想要知道每件商品到底经过了哪些环节,每个环节花费了多久的时间,从而进一步的优化流程;消费者想要知道购买的商品是否是仿冒品,中间经过哪些环节,那么就需要将物品的溯源做好。商品溯源的一大难点就在于中间经手的环节太多,而且是不同的公司,所以一个中心化的系统很难处理。而区块链分布式账本的特点,可以为每个环节的公司和政府部门建立节点,他们只需要将自己的系统对接本地的区块链节点,在业务流转过程中,通过区块链实现各个环节公司的协同。

    4. 有审计要求的数据上链。

    比如核心数据操作日志。在传统中心化系统中,我们将商家评分、消费者评价、企业信用评估分等存储到数据库中,平台系统根据数据库中的数据决定是否优先展示,是否给予批贷款等,所以这些数据是非常核心,非常重要的。真是由于这些数据的重要性,所以也带来了一种黑产:修改信用评分、删除差评等。究其原因是因为中心化数据库系统中的数据是可以被修改,可以通过系统漏洞或者行贿数据库管理员,由管理员修改了核心数据。而采用区块链技术,我们将核心数据上链,基于区块链不可篡改的特点,即使是IT管理员也无法篡改这些上链数据。所有修改都会留痕,并被审计,所有黑客攻击篡改行为和内部人员的数据修改行为都无所遁形。

    三、数据上链的方式

    1.原文上链。

    这种主要适用于只上链一个字段的情况,比如我们做了一个许愿的DAPP,就是用户将自己的心愿写到区块链上,而这个心愿可能就是几个字,也可能是长篇大论,但不管怎么样,他可以认为就是一个文本字符串,而我们的上链操作就是将整个字符串直接上链存储。

    2.格式化后上链。

    这种主要适用于业务数据上链的场景,比如企业要将自己生成的所有产品上链,而产品本身具有很多属性,比如:材质、总量、类型等等。企业可以将产品的所有要上链的属性构建成XML对象或者JSON对象(个人更推荐使用JSON对象),然后将格式化(序列化)后的产品对象上链。不推荐使用protobuf、rlp等数据库不支持的序列化方法,一般很多NoSQL数据库是支持JSON对象的索引的,所以如果我们存入的是JSON对象,那么还可以直接对存入的对象进行各种条件的检索。

    3.哈希摘要上链。

    这种主要用于文件上链的场景。前面说到,区块链不适合将大文件直接上链,而哈希算法可以将大文件计算出一个固定长度的摘要。(比如SHA256算法,算出来32字节的摘要)使用哈希摘要可以保证原始数据不会被篡改,因为文件一旦被篡改,那么算出来的哈希值和链上的哈希值不匹配。而为了预防文件存储在某个服务器硬盘上,万一服务器硬盘坏了,那么数据就永远丢失了这种情况,我们可以采用IPFS这种分布式存储技术。IPFS负责将大文件切割成很多个小块,然后将小块分散存储在多台服务器中,从而避免了单机故障造成文件丢失的可能。同时IPFS在文件分割和存储的同时,也会计算出一个哈希摘要,我们可以将该哈希摘要上链(可能还需要对哈希进行加密),在获得文件准确的哈希值,就可以通过IPFS获得原始文件。

    4.加密后上链。

    这种上链方式好主要适用于不希望其他方看到的机密敏感数据。加密一般采用对称加密,而加密的密钥每个文件都不一样,我们可以将密钥用上链方的公钥进行加密,这样只有私钥持有方才能解密出对称密钥,然后再用对称密钥解密链上数据。为什么不直接用数据持有者的公钥加密呢?因为一方面对称加密的性能远远高于非对称加密,另一方面,如果我们希望将某个链上数据共享给另一方,那么他只需要解密对称密钥,然后将该密钥用对方的公钥加密上链,这样对方就可以使用自己的私钥解密出对称密钥,然后用对称密钥解密出文件。

    四、数据上链为我们带来什么安全优势

    1.所有上链数据基于密码学数字签名,上链数据不可被第三方篡改,不可抵赖。

    这是基于区块链交易的基本特性,数据要上链就得通过交易,而交易要被广播和打包到区块中,就必须要有数字签名。而数字签名保证了交易数据无法被第三方篡改,也保证了上链数据必然是私钥持有者签名的,不可伪造,不可抵赖。

    2.基于多参与方的共识算法,防止单方面作恶,修改自己链上历史数据。

    区块链作为分布式账本,在记账时,需要多方进行共识,只有共识通过才会被记账,而无论采用哪种共识算法,都需要保证单方或者少数节点的作恶行为不会影响整个链的数据。而基于区块链的链式数据和区块头中包含区块所有交易的默克尔根的特点,保证了历史数据无法被篡改。这里的无法篡改和基于签名的无法篡改是两种情况。数字签名保证的是原始数据不会被第三方篡改,但是如果一个文件只是由我用自己的私钥签名了,那么我是可以修改文件的内容,然后再用我自己的私钥重新签名,生成一个新的合法的签名文件的。而区块链的共识算法就是如果我已经把A文件签名并上链了,那么我自己都不能把A文件改成A1后重新签名,神不知鬼不觉的把A替换成新的A1。

    3.基于分布式技术,每个节点具有完整全账本,防止单机故障和数据丢失。

    因为我们上链的数据具有多个副本,每个全账本节点都保留了完整的区块链数据,所以不存在单机故障导致整个区块链网络无法正常运行或者因为硬盘故障导致链上数据丢失的可能性。

    4.基于联盟链的节点准入、TLS加密通讯、通道隔离等技术,保证了数据的传播范围可控,防止数据被窃取。

    这里主要说的是联盟链技术,联盟链属于许可链,和开发的任何人都可以访问的公有链相比,联盟链是受限访问的,即使联盟链节点部署在互联网中,但是由于节点准入的限制,并不是任何人下载了节点运行的区块链程序就能接入联盟链网络的,而且节点与节点之间的通讯是通过TLS加密的,所以即使黑客截取了网络包,也无法知道区块链网络中传输的内容,从而保证了数据的安全。通道隔离技术是指Fabric中的Channel的概念,相当于子链,不同的数据共享范围,就对应不同的通道,只有同一个通道中的数据才能被访问,所以如果有ABC3方组成的联盟链,AB通道中的数据C是看不到的,AC通道中的数据B是看不到的,也就进一步的控制了数据传播的范围。

    【本文章出自博客园深蓝居,转载请注明作者出处,如果您觉得博主的文章对您有很大帮助,欢迎支付宝(studyzy@163.com)对博主进行打赏。】
  • 相关阅读:
    JVM 重排序
    Dispatcher & Redirect
    Struts2-ActionContext
    eclipse+tomcat+maven debug的时候总是出现source not found /Edit lookup path...的问题解决方案
    web Listener
    优质博客
    IDEA中jdk设置
    chrome json插件
    IDEA快速复习
    MarkDown编辑器下载
  • 原文地址:https://www.cnblogs.com/studyzy/p/14346880.html
Copyright © 2011-2022 走看看