一种基于区块链和IPFS的安全遥感图像数据共享系统及方法

文档序号:37436007发布日期:2024-03-25 19:33阅读:19来源:国知局
本发明涉及计算机区块链和网络安全领域,特别是涉及一种基于区块链和ipfs的安全遥感图像数据共享系统及方法。
背景技术
::1、近年来,随着航天技术与对地观测技术的迅速发展,一些研究所、地面中心等机构采集了大量的遥感图像数据。并且随着卫星通信能力的发展,卫星数据的采集能力逐渐增强,数据的大小逐渐增大,数据更新频率逐渐升高。为将数据利用率最大化,拥有遥感图像数据的机构之间共同搭建数据共享系统的需求日益提升。但是,机构之间独立性较强、信任程度较低,传统的遥感图像数据共享方式存在信任问题和共享效率低下问题,不能满足当下的实际需求。同时遥感图像数据因其价值高,隐私保护等安全需求应得到保证。2、区块链技术又称分布式账本技术,其本身是一个p2p网络,拥有去中心化、可溯源、不可篡改等优秀特性,是密码学和安全领域的重大突破。利用区块链技术可以低成本地建立参与方之间的信任关系并提高共享效率,保证数据传输的安全性。3、星际文件系统(inter-planetary file system,简称ipfs)作为一款旨在实现去中心化数据共享的分布式文件系统被持续关注,其使用的数据切分、冗余备灾等方案有效提高了系统的可用性和可靠性。4、虽然目前基于区块链和ipfs的数据共享方案中,授权验证大多采用链上中心节点或中心节点群认证的方式,能够有效且简单地实现授权验证功能。但是在卫星遥感数据共享需求下仍存在以下问题。5、首先,拥有遥感图像数据的机构具有独立性强、信任性弱的特点,采用中心化的数据共享方案可能会产生增加成本、单点故障、信任危机等问题,阻碍合作的进行。因此,需采用一些措施使得在不可信的环境下,各个机构可以很好的协同合作,数据共享。6、其次,在系统实际运行环境中,由于遥感图像数据本身的多样性,一些价值较高的数据具有访问控制需求、权限管理需求。当前基于区块链的共享系统中存在选举中心节点或者权力中心的节点组,这样无法保证共享系统的全员参与,同时也无法保证各机构共享的遥感图像的权限管理。联盟区块链选择bcos有助于通过简化系统部署和管理过程进一步降低成本,但由管理员节点负责用户进出将导致平台维护方始终处于在线状态,以及各节点的投票结果将暴露给链上其他用户,所以需要对数据访问权限控制做优化。7、最后,由于遥感图像的高价值特性,明文数据不适合直接上传至ipfs进行存储,而是需要设计方案保证数据的隐私安全。同时由于遥感图像本身存在着数据体积大的特点,导致使用目前常用的属性加密技术直接对数据本身加密的开销很大,无法达到预期效率。技术实现思路1、针对现有技术的不足,本发明设计一种基于区块链和ipfs的安全遥感图像数据共享系统及方法。2、一种基于区块链和ipfs的安全遥感图像数据共享系统,由五部分组成,分别为数据提供者、数据请求者、认证中心、以用户为基本单位组成的联盟链网络、参与共享的用户提供的存储服务组成的ipfs专有存储系统;3、数据提供者userpro是在系统中共享遥感图像数据的用户,会根据遥感图像数据共享协议对遥感图像数据进行加密处理,然后将数遥感图像数据共享到系统中,方便数据请求者获取;4、数据请求者userreq是在系统中请求遥感图像数据的用户;userreq通过区块链与userpro交互获取遥感图像数据;5、认证中心ca是为系统中用户颁发身份证明、区块链和ipfs证书的实体,ca还需要配合生成和更新用于门限签名的密钥;6、区块链网络bc是由参与系统的每个用户提供节点组成的联盟链,是系统运行的基础网络,用户所有操作都会借助区块链网络在系统中传播和实现;通过区块链网络中的共识协议,所有节点都会参与到网络中信息或数据的检查和存储工作,智能合约的运行和事件生成也通过区块链实现和存储存证,保证用户操作结果的可信性和公开性;7、所述遥感图像数据共享协议;对于遥感图像数据本身的多样性特征,设计了访问控制策略、数据验证策略以及请求申诉三个策略;并在协议运行流程中加入信誉作为激励;同时在协议的各个阶段,引入数据隐私保护方案,利用对称加密算法与非对称加密算法在加解密速率、密钥是否固定不变两方面不同的特点,混合使用对称加密和非对称加密并结合上述协议的三个策略,保证数据共享协议流程数据访问、数据传输、数据存储的安全性;8、遥感图像数据共享协议的工作流程包括以下五个阶段,分别为系统准备阶段、协商认证阶段、数据登记阶段、数据请求阶段和请求申诉阶段,每个阶段中用户均额外对消息使用ecc私钥进行签名,以保证消息的不可抵赖;9、系统准备阶段:该阶段是系统的初始化阶段;系统搭建完毕后,需要对系统中的参数进行设置、部署所需智能合约,并对系统中的初始用户进行设置;10、协商认证阶段:该阶段包含两种情况,分别为系统外的用户进行准入认证并加入联盟链网络和ipfs的流程,以及新加入系统的用户或系统中用户为更改权限进行的授权验证流程;11、数据登记阶段:该阶段是数据提供者向链上登记数据,并增加数据提供者设置数据访问权限的过程;12、数据请求阶段:该阶段是数据请求者请求数据、数据提供者提供ipfshash和aes一次性密钥的阶段;数据请求者请求数据时,数据共享合约会在这个阶段调用访问管理合约检验权限后再继续共享流程;13、请求申诉阶段:该阶段是在共享流程结束后发生纠纷时进行申诉的阶段;如果数据提供者恶意发送错误的ipfshash及aes密钥或提供与描述信息不符的数据,从而造成共享纠纷,此时需要进行申诉,同时还要防止恶意的数据请求者诬陷数据提供者;14、所述ipfs分布式存储系统是由系统中用户提供存储服务组成的,包含用户提供的ipfs节点实体ipfsnode,负责遥感图像数据的存储和下载;ipfs会对数据进行切分备份存储并分发节点到区块链,返回给用户对应的ipfshash;15、一种基于区块链和ipfs的安全遥感图像数据共享方法,基于上述一种基于区块链和ipfs的安全遥感图像数据共享系统实现,具体包括以下内容:16、步骤1:首先是系统的准备初始化阶段,需要定义参数、部署合约以及对系统中的用户进行初始设置;系统中的用户既作为数据提供者userpro,也作为数据请求者userreq,并提供服务成为区块链网络中的一个节点,生成该用户唯一的区块链地址addr;系统准备阶段的具体流程如下:17、步骤1.1:定义参数:初始化门限签名所需的公开参数;参数包括两个阶为p的乘法循环群g1、g2,g1、g2分别是g1,g2的生成元,e是双线性映射:g1*g2→gt,h1:{0,1}*→g1是一个安全的单向哈希函数;此外还需设置7个参数,分别为信誉基础值baserepu、各权限对应信誉值perrepui、数据共享成功增加信誉值sharerepusucc、申诉过错方扣除信誉值appealrepuerror、正确投票增加信誉值voterepucor、恶意投票扣除信誉值voterepuincor、用户禁用和启用阈值banthreshold,用户根据对系统的信任程度协商定义参数;其中,baserepu为用户信誉值基数,perrepui与用户的权限有关,权限越高的用户知名度越高,对应的perrepui也越大;其次,为了有效限制系统中用户的行为,appealrepuerror要大于sharerepusucc,voterepuincor要大于voterepucor;banthreshold定义为用户账号的最低信誉值,关乎用户账户是否禁用;此外,需要向ca定义用户现实能力与系统权限的映射关系,经过ca机构对用户现实能力进行评定,给出用户在系统中所应给予的权限;18、步骤1.2:部署合约:为了实现系统的数据共享功能,在区块链网络搭建完成后,系统开发者需要部署四个合约,分别为数据共享合约sharesc、信誉管理合约repumansc、权限管理合约permansc和访问管理合约accmansc;sharesc提供获取数据描述信息、数据登记、数据请求的功能,repumansc根据其他三个合约的调用实现信誉设置及更新的功能,以及判断用户是否能够在系统中正常工作,repumansc是组织和管理授权验证流程,完成用户的权限存储与请求验证功能;accmansc实现了访问权限管理策略,判断用户申请数据是否满足权限要求;19、步骤1.3:初始用户设置:为初始用户生成用于门限签名的密钥:ca负责门限密钥的生成工作;首先,ca会选取一个随机数xr∈zp作为主私钥msk,并计算作为主公钥mpk;然后,在zp上随机选择t-1阶多项式p,满足p(0)=xr,其中系统中用户useri向ca申请门限密钥,useri用于门限签名使用的私钥xi=p(i),公钥同时设置初始用户的权限和信誉值repuinit=baserepu+perrepui;zp为个数是p的有限域,nuser为用户个数;20、步骤1.4:系统中的用户均使用相同ecc密钥生成接口构造ecc公私钥对(pk,sk),pk在区块链上完全公开;21、步骤2:系统中协商认证流程分为准入认证与授权验证,准入认证是系统外用户加入系统的流程,需要进行授权验证的用户usernp共有两种:一是新加入系统还没有权限的用户usernew需要通过授权验证为自己获取权限;二是系统中原有的用户useroriginal想要修改自身的权限,需要通过授权验证将自己的权限修改为另一个权限;授权验证是系统中的用户被授权时需要进行的流程;基于离散对数知识签名的授权验证策略使用权限管理合约permansc对两种情况做出了统一规范,只需要调用相同函数就实现两种不同的授权目标;协商认证阶段具体流程如下:22、步骤2.1:系统外用户useroutside向所有系统内用户发送请求,系统内用户构造门限签名后,useroutside聚合为完整门限签名并发送至ca;ca在验证门限签名正确性后,会发送区块链和ipfs证书,此时useroutside加入系统;23、步骤2.2:获取授权验证的公私钥:由于usernp请求授权时的信息具有敏感性,其中包含该用户的保密等级和机构功能信息;因此,usernp不能将敏感信息向系统中其他成员暴露;此时,usernp向ca提交请求申请授权验证公私钥,ca在通过申请后生成授权验证的公私钥对(ysok,xsok),该公私钥对即在不泄露用户授权敏感信息的前提下,证明用户被授权;授权验证公私钥是根据计算得到的,其中g3是以n为阶的乘法循环群g3中的一个生成元,xsok是g3中的一个元素,g3与n均是公开参数;ca在向usernp传输(ysok,xsok)后,将公开ysok对应的权限per;24、步骤2.3:根据知识签名生成算法,生成授权验证的知识签名:usernp在收到(ysok,xsok)后,需要生成授权验证的知识签名(c,s)作为授权验证证据;首先,usernp生成一个随机数r(0<r<n),r是通过伪随机数算法生成的;然后,生成所需验证权限perneed的消息mnp,计算得到mnp'=h2(mnp),其中h2:{0,1}*→{0,1}n是一个安全的单向哈希函数;最后,得到c=h2(mnp′|ysok||g3||g3r),s=r-cxsok,构造的(c,s)为一个能被验证的知识签名,即是本次授权验证的证据;25、步骤2.4:发起授权验证请求:usernp使用自己的ecc私钥sknp对(c,s)进行签名,得到signsok;然后,usernp将用perneed构造消息的哈希值mnp'以及知识签名(c,s)作为参数调用权限管理合约permansc的授权验证函数authveri(mnp',ysok,(c,s),signsok);26、步骤2.5:记录并发起投票:permansc在接收到usernp发起的请求后首先使用usernp的ecc公钥pknp对signsok进行验证,通过后会记录相应内容至合约内的授权验证表tableav,启动倒计时器,并为其生成唯一编号idav;在完成记录后,会从调用permansc合约的链上交易中获取发起授权验证请求的用户区块链地址addrnp,并将idav、addrnp、ysok、mnp'、(c,s)通知区块链网络中的其他已有权限并且正常启用的用户userhp;27、步骤2.6:验证知识签名并投票:区块链网络中的其他已有权限并且正常启用的用户获取到本次请求的idav、addrnp、ysok、mnp'、(c,s),会验证知识签名的正确性,即验证usernp提供的(c,s)的正确性;如果usernp提供的(c,s)能够满足c=h2(mnp′||ysok||g3||g3sysokc),则证明usernp提供的(c,s)是合法的签名,进而证明usernp是(ysok,xsok)的拥有者,此时确认本次授权验证的正确性;在对usernp发起的请求判断完毕后生成投票内容votecontentav,表明是否通过本次验证;然后,使用自己的ecc私钥对(idav,votecontentav)进行签名得到signav后调用permansc的投票回调函数avcallback(idav,votecontentav,signav),完成本次投票;28、步骤2.7:根据授权验证投票记录算法,接收并记录投票:permansc在收到的votecontentav后,首先查询用户权限表tableup验证的状态,状态为可用statusable时表示是没有被禁用的正常用户;然后,使用的ecc公钥验证signvote的正确性;之后,根据votecontentav修改tableav中关于本次请求的信息;当收到votecontentav为通过时,会将对应的通过总数numpass增加1,并记录投出确认票的编号当收到的votecontentav为不通过时,会将对应的不通过总数numfail增加1,并记录投出不通过票的编号29、步骤2.8:根据授权验证结果判断算法,对验证结果判断:当达到倒计时器时间或收到全部投票时,本次投票流程结束;如果通过票数超过全部已有权限且正常启用的用户总数nhp的2/3,且usernp在系统中没有原始权限,则为该用户生成唯一编号idnp,与addrnp、per一同记录至合约内的用户权限表tableup并设置usernp状态为启用状态statusable,然后将usernp的addrnp、per作为参数调用repumansc的initrepu,为其设置初始信誉值;如果usernp本次请求的目的是为了修改权限,则直接修改为per;如果不通过票数超过nhp的2/3,则请求不通过;最后将授权验证结果resultav公布到区块链中;30、步骤2.9:根据授权验证流程中的信誉分更新算法实现信誉值变更:permansc在得到resultav后,需要生成变更信誉值的用户编号集合idset并生成变更类型updatetype;首先,将votecontentav与resultav结果不符合的用户编号与未投票的用户编号生成一个需要扣除信誉分的集合idsetredrepu并设置updatetype为投票错误voteerror类型;其次,将votecontentav与resultav相符的用户编号生成需要增加信誉分的集合idsetaddrepu并设置updatetype为投票正确类型votecorrect;最后,permansc将idset与updatetype作为参数,调用repumansc的信誉值变更函数updaterepu(idset,updatetype);repumansc在收到permansc的信誉值变更通知后,会根据参数修改用户在用户信誉表f中记录的信誉值;当原始信誉值currepui高于用户禁用或启用阈值banthreshold,修改后repui高于banthreshold时,repumansc会调用permansc的用户状态改变函数changestatus(id,status),传递iduser并设置status为disable;当currepui低于banthreshold,修改后repui比banthreshold高时,repumansc会调用permansc的用户状态改变函数changestatus(id,status),传递iduser并设置status为able;已经被禁用的用户无法参与授权验证投票,因此在该阶段不会有用户被恢复启用状态;31、步骤3:数据请求者userreq向系统发起数据请求并获取数据;使用动态数据访问权限管理策略实现了系统中的用户均能成为userreq获取登记的数据;数据请求阶段的具体流程如下:32、步骤3.1:首先需要将数据进行加密预处理与上传:userpro在登记data前,首先要生成一次性aes密钥ak,并对data进行aes加密得到密文ciphdata;然后,userpro将ciphdata上传至ipfs,ipfs经过切分存储返回ipfshash值ih;然后根据访问权限设置函数对上链的数据进行权限设置,如果iddata在访问权限表tableaccess中不存在并且调用地址为sharesc的地址,则将iddata、addrpro、accessdata添加到表中;而后才能获取数据描述信息并发起数据请求:userreq通过数据共享合约sharebc获取链上所有数据的描述信息,并向其中的一个数据发起请求;此时,userreq需要使用自己的ecc私钥skreq对目标数据的iddata进行签名得到signreq,并使用iddata和signreq作为参数,发起数据请求;33、步骤3.2:发起权限检验:当userreq向sharebc发起数据请求后,sharebc会首先验证signreq;验证通过后,sharebc会将userreq的addrreq与iddata作为参数调用accmansc中的访问权限检验函数percheck(iddata,addrreq);34、步骤3.3:访问管理合约检验权限:利用访问权限检验函数进行访问权限检验,accmansc在接收到sharebc调用percheck发送的权限检验请求后,将addrreq作为参数调用permansc的权限查询函数selectper(addrreq),该函数根据addrreq查询tableup获取userreq的权限perreq和idreq;然后,将perreq与tableaccess中iddata对应的accessdata比较,当perreq大于accessdata中的accesslb或accesswl中包含idreq时,userreq通过权限检验;最后,将检验结果resultpc返回给sharebc;sharebc在得到accmansc检验通过的结果后继续流程,否则中止流程;35、步骤3.4:ipfshash及aes密钥传递:是userpro和userreq之间交互ih与ak的过程,userpro在将(ih||ak)使用userreq的ecc公钥pkreq加密得到ciphshare后,需要对ciphshare使用ecc私钥skpro进行签名得到signshare,并将idshare、ciphshare与signshare一同发送给sharebc;sharebc在使用存储的用户公钥验证signshare无误后,根据idshare查询并通知userreq;36、步骤3.5:更新信誉分:在userreq收到sharebc传递的ciphshare之后,数据请求结束;sharebc将生成只有idpro的idset,并设置updatetype为sharecomplete,调用repumansc的changerepu函数实现;更新分数时使用repui=currepui+sharerepusucc进行计算,为userpro增加信誉值作为激励;37、步骤3.6:下载并解密数据:userreq使用skreq解密ciphshare,得到(ih||ak),即可下载和解密ciphdata,得到userreq请求的数据data;38、步骤4:当userreq发现userpro提供的ih和ak不正确或data与desc不符时,发起申诉,由系统中所有正常的权限用户决定申诉是否成功;39、步骤4.1:发起申诉请求:在userreq收到使用pkreq加密的(ih||ak)后,将使用skreq对密文进行解密,得到明文的ih和ak;此时,可能发生userpro传递的ih无法正确下载ciphdata、使用ak无法正确解密ciphdata或data与userpro上传的desc不符纠纷情况;userreq提供由(ih||ak)组成的申诉证据proofappeal,并对(idreq,proofappeal)使用skreq签名得到signappeal,然后调用访问管理合约accmansc的请求申诉函数reqappeal(idshare,proofappeal,signappeal);而恶意的userreq也有可能诬陷userpro提供的ih与ak不正确或data与userpro上传的desc不符并调用reqappeal发起申诉;40、步骤4.2:合约发起申诉通知:accmansc在收到申诉请求后,将使用userreq的ecc公钥pkreq验证signappeal;验证通过后,accmansc将为本次申诉生成唯一编号idappeal,与idreq、idpro一同存储至请求申诉表tableappeal中,并启动倒计时器;最后,将idshare、idappeal、proofappeal、pkreq上链通知所有具有权限的正常用户对该申诉进行检查;41、步骤4.3:验证申诉证据并投票:链上除userreq和userpro具有权限的正常用户在接收到accmansc发出的申诉后,从proofappeal中获取(ih||ak),并使用pkreq进行加密得到密文ciphshare',与idshare对应userpro提供的ciphshare进行比对,如果结果不符,则证明userreq提供证据有误,生成申诉不通过的votecontentappeal;如果ciphshare'与ciphshare相符,则根据ih下载数据ciphdata,并使用ak解密,如果出现无法下载、无法解密或与data的描述信息desc不符的情况,则证明userpro提供的内容有误,则生成申诉通过的votecontentappeal,否则生成申诉不通过的votecontentappeal;最后,使用自己的ecc私钥对(idappeal,votecontentappeal)进行签名得到signavote,调用accmansc的申诉投票回调函数appealcallback(idappeal,votecontentappeal,signavote);42、步骤4.4:接收并记录投票:accmansc在接收到的投票后,会首先检查投票者是否属于链上正常权限用户,如果不属于则丢弃投票;然后,使用的ecc公钥验证signavote的正确性,如果signavote不正确,则直接丢弃投票;之后,判断votecontentappeal中包含的内容是否为通过,如果内容为通过,则将idappeal对应的申诉请求中通过票数numpass增加1,否则将不通过票数numfail增加1,并记录的编号43、步骤4.5:申诉结果判断:accmansc在收集到全部投票或倒计时器结束时,如果通过票数超过nhp的2/3,本次申诉成功;如果不通过票数超过nhp的2/3,则申诉不成功;然后,accmansc将resultappeal公布到链上,通知所有用户;44、步骤4.6:信誉分更新:accmansc判断申诉结果后,会将需要生成变更信誉值的用户编号集合idset并生成变更类型updatetype;此时,只需生成扣除信誉分的集合idsetredrepu并设置updatetype为投票错误类型voteerror,以及需要增加信誉分的集合idsetaddrepu并设置updatetype为投票正确类型votecorrect,调用repumansc的信誉值变更函数changerepu;此外,如果resultappeal为成功,则生成只包含idpro的idsetredrepu,设置updatetype为数据错误类型shareerror;如果resultappeal为失败,生成只包含idreq的idsetredrepu,设置updatetype为申诉错误类型appealerror;然后,调用changerepu,为申诉过错方扣除信誉分;45、步骤5:最后,针对架构中的隐私泄露风险,对遥感图像数据共享协议中涉及到的user身份签名验证、授权验证和数据访问管理分别使用了bls门限签名、基于离散对数的知识签名及智能合约的全体用户投票和基于aes密钥、ecc密钥和ipfshash密文来保护数据安全;46、身份认证隐私保护是通过bls门限签名完成的;如果外部敌手a不发送准入认证请求而直接试图伪造完整签名,则a需要构造出主私钥msk;然而,msk是在zp上随机选取的一个整数,具有密码学意义上的伪随机性,故a无法得知msk;并且,由于离散对数困难问题,通过主公钥mpk推测msk也是不可能的;假设a没有收集到足够的签名而无法聚合签名,想要伪造其他用户的签名,则a需要猜测这些用户的私钥;然而,a无法得知随机的t-1阶多项式p,无法计算用户的私钥,而通过用户的公钥推测用户的私钥同样是不可能的,进而a无法伪造其他用户的签名来构造出完整的门限签名;47、授权验证隐私保护是通过离散对数的知识签名及智能合约的全体用户投票完成的;如果系统中的敌手a在没有私钥xsok的情况下,想要伪造知识签名获得权限,则其需要根据ysok的值和公式计算出私钥xsok,或者找出符合c=h(m||ysok||g3||g3s*ysokc)的(c,s);对于大数n,如果不知它的因式分解,想要在有限时间内计算以n为阶的乘法生成群g3上的离散对数是不可能的,所以a不可能在没有xsok的情况下伪造知识签名;假设系统中的敌手集合sa,|sa|=na,其中一个敌手ai想要与其他na-1个敌手{ak}合谋获取更高权限,此时,ai将提供一个无法验证的知识签名(c′,s'),与其合谋的{ak}将恶意声称(c′,s')有效;由于na<1/3*n,而认证通过的阈值为2/3*n,所以ai无法通过授权验证;当敌手合谋破坏其他用户的认证流程时,过程与敌手合谋获取更高权限相同;此外,系统还会为恶意用户扣除信誉值,当信誉值降低到阈值后会禁用用户,保证其作恶的次数是有限的;48、数据访问的隐私保护通过叠加不同的加密算法加密算法实现;在共享流程中,数据请求者需要将加密使用的aes密钥和ipfshash传递给数据请求者,这个过程选择使用160位的ecc非对称加密技术进行隐私保护;ecc加密的安全性基于椭圆曲线上的离散对数难题,因此在无法获取ecc私钥的前提下,aes密钥和ipfshash的密文被破解的概率相当于破解ecdlp的概率;然而,目前还没有能在可接受时间内破解ecdlp的攻击算法,即aes密钥和ipfshash使用ecc加密实现隐私保护是安全的。49、本发明的有益效果为:50、本发明通过构建基于区块链的隐私保护遥感图像数据共享架构,使用区块链和ipfs分别作为底层网络和存储系统,通过区块链的去中心化、可溯源、不可篡改等特性提供了数据机构间的信任基础,创造可信的共享环境且有效降低架构的共享成本。设计了一个安全遥感图像数据共享协议,引入基于离散对数知识签名的授权验证策略与基于智能合约的动态数据访问权限管理策略,使用智能合约实现了用户访问控制与数据访问校验功能,为各方参与提供了权限认证能力,低开销地进行数据访问控制,并限制恶意用户的作恶能力。同时针对数据共享过程中得不同内容引入了不同的密码学技术,而非全部使用同一种手段,以此可以灵活、有效的保障系统中的数据隐私安全。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1