面向医疗应用场景的区块链与可搜索加密技术

原文来自:Chen et al. - 2019 - Blockchain based searchable encryption for electronic health record sharing

【翻译】

基于区块链的可搜索加密电子健康记录共享

摘要:电子病历/电子健康档案EHRs数据泄露可能会侵犯病人的私隐(如:医疗健康状况)。

一般来说,电子病历中的大部分数据一旦上传到系统后,就不再需要改变;因此,可以采用区块链技术来便于这些数据的共享。不同的医疗参与机构和个人(如医生、医院、医疗实验室和保险公司)可以更信任地访问存储在区块链上的电子病历。

本文提出了一种针对电子病历(EHRs)的基于区块链的可搜索加密(SE)方案。电子病历的索引是通过复杂的逻辑表达式来构造并存储在区块链中,以便数据使用者可以利用这些表达式来搜索索引。因此只有索引被迁移到区块链上以方便传播,所以数据所有者可以完全控制谁可以看到他们的EHRs数据。区块链技术的使用确保了EHRs指标的完整性、不可篡改性和可追溯性。

最后,本文从两个方面评估了该方案的性能,即从EHRs中提取文档id的开销和在以太坊中的智能合约中进行交易的开销。

1. 介绍

电子健康档案(EHR)是一个收集个人健康相关信息的集合,包括健康状况(如疾病)、药物、医疗图像和个人信息(如姓名、年龄、性别、体重和账单信息)。这些数据通常是敏感的,需要防止未经授权的访问;因此,医疗系统面临的最大挑战之一是安全共享医疗数据(即不会导致患者数据泄漏)。

共享医疗数据的一种常见或简单的方法是,在将医疗数据上传到公共或社区云服务器之前,为EHR构建索引并对其进行加密。这种方法的缺点是,不同的数据提供者有自己的创建索引的方法,这反过来又妨碍了不同医疗组织和个人之间的数据共享。此外,云服务器可能不是完全可信的。目前文献中也没有研究出一种适用于所有搜索方案的通用验证机制,并且缺少有效的对策来惩罚行为不端的服务器或用户。

基于区块链的解决方案是一种可行的方法,它能够构建加密算法,以确保数据完整性、标准化审计和一些正式的数据访问合约。因此,本文提出了一种基于区块链的可搜索加密电子病历共享方案。这个方案旨在协助不同医疗机构以安全的方式共享医疗记录。我们提出的解决方案不仅为患者带来了便利,而且还允许研究人员之间有效地共享医疗信息。资料使用者可确保收到准确/正确的查询结果,并知道在进行审计或其他调查时,任何恶意活动(例如由恶意伺服器所进行的活动)均可被识破。为了使医生和研究人员能够在不披露患者个人信息的情况下获取患者的健康数据,应该在信息共享之前使用脱敏(desensitization)技术

与Hu等人的方法类似,我们的方案也通过智能合约引入了公平性,以实现利益上的公平的搜索机制。在我们提出的方案中,每个参与者都被平等对待,并被激励进行正确的计算。这样,一个诚实的人总能得到他应得的,而一个恶意的人什么也得不到。

在我们的方案中,只把搜索索引(index)添加到区块链,以方便EHR的查找,而实际的EHR数据则以加密后的形式存储在公共云服务器中。当用户希望访问这些EHR时,他们需要向数据所有者进行身份验证,以获得授权和解密密钥。通过这种机制,数据所有者可以完全控制谁可以查看他们的数据。本文的贡献总结如下:

- 提出了一种基于区块链的可搜索加密电子病历共享方案。具体来说,我们演示了在我们的应用程序中使用诸如以太坊[2]上的智能合约的潜力。

- 与[1]方案不同的是,我们的方案利用复杂的布尔(Boolean)表达式来提取EHRs,从而构造索引。具体来说,[1]中的方案只支持单个关键字搜索,但我们提出的方案支持复杂查询,从而允许不同的医疗代理请求访问权限并与获取医疗记录。换句话说,我们提出的方案更加实用和稳健。

- 我们的方案采用了智能合约,旨在追踪在多用户环境下各参与方的经济获利(包括交易费用)。它确保数据所有者只要展示脚本就能得到报酬(该脚本允许其他用户搜索数据库)。同时,其他用户只要支付一定的费用,就能够获得准确的搜索结果。该属性保证了数据所有者和用户之间的公平性。

- 我们所提出的以区块链为基础的解决方案,亦能确保数据使用者在无须额外验证的情况下,得到准确的搜索结果。同时,由于只有索引被保存到区块链,所以对实际EHRs的访问需要经过数据所有者的身份验证。因此,数据所有者可以完全控制允许谁看到他们的数据。

在实际环境中,EHR数据需要脱敏,以删除个人信息,如姓名、身份和其他识别信息。本文主要研究了如何从电子病历中构建电子病历索引并将其部署到智能合约中。数据所有者可以很容易地使用传统的对称密钥加密技术对相关的EHR数据进行加密,然后将加密后的数据外包给一些分散的文件存储网络,如星际文件系统(Inter Planetary file System, IPFS)。

本文章节组织如下:相关工作将在第2节中讨论。相关背景资料见第3节。第4节描述了系统模型和设计目标。第5节给出了该方案,第6节给出了该方案的安全性和性能评价。最后,在第7节给出结论。

2. 相关文献

由于云服务器不是完全可信的,因此数据在上传到公共云之前应该进行加密。为了对加密数据进行搜索,提出了大量的有关可搜索加密方案的研究,如可搜索对称加密(SSE)方案[3]。

第一个SSE方案由Song等人提出,是一个基于单关键字的非交互式SSE方案。具体来说,该方案扫描所有加密的文件,并将这些文件与加密搜索的关键字进行比较,以确定关键字是否存在于扫描的文件中。一个关键的限制是缺乏效率,特别是当数据量很大的时候。自从这一开创性的工作,许多其他不同的功能SSE方案已在文献中提出。这类方案包括多关键词SSE方案[5 - 8]、动态SSE方案[9-12]和可验证SSE方案[13-17]。

在大多数现有的方案中,云服务器被建模为诚实但好奇的一方,诚实地执行指定的协议。实际上,恶意服务器可能会返回不完整的搜索结果或修改后的数据。为了解决这个问题,文献中提出了一些可验证的SSE方案[13-17],用于检查搜索结果和数据的正确性和完整性。然而,这些可验证的SSE方案高度依赖于某些特定结构。

更重要的是,大多数可验证的SSE方案只检测恶意行为,却没有建立惩罚不诚实服务器的机制。换句话说,恶意服务器可能通过欺骗用户而获得经济利益。例如,服务器收到用户的付款,但没有完全执行搜索协议,因此用户可能无法获得预期的搜索结果。因此,需要一种更可靠的具有内置公平机制的SSE方案。我们建议有兴趣的读者查阅[3],以了解有关的SSE方案及其特性的最新研究。

在本文的背景下,对于基于云的电子健康记录(EHR)应用程序,存储数据通常是私人提供的(以保护隐私和安全性)。然而,这可能会妨碍用户之间的数据共享。例如,如果医学研究人员希望观察乙肝患者的症状以确定或探索可能的治疗方法,他需要从不同的云中单独请求访问(大量)电子病历。在实践中,这可能具有一定困难。

2011年初,Li等人[18]提出了一种细粒度(fine-grained)的授权方案,允许用户通过本地的可信认证获得访问权限去进行数据搜索。他们提出了两种基于层次谓词加密(HPE)的授权私有关键字搜索(APKS)方案,从而对公共云中的加密EHR数据进行搜索。他们的方案提供了许多功能,例如多维度、多个关键字搜索,具有简单的范围查询、授权和撤销搜索功能。

2014年,Xhafa等人提出了一种基于匿名-ABE的模糊关键字搜索方案,用于混合云环境。他们使用私有云作为代理,将EHR数据安全地部署到公共云上。他们还采用了基于属性的加密(ABE)来实现细粒度的访问控制。采用基于通配符(wild card)的方法实现模糊关键字搜索,并采用基于符号的试遍历算法提高搜索效率。

2016年,Liu等人[20]提出了一种基于云的EHR共享系统,该系统支持模糊关键字搜索。他们的搜索方案帮助医生(或其他用户)快速检索症状包含查询关键字的EHR。采用ABE算法对用户进行属性认证。Guo等人提出了一种基于ABE的关系型数据库细粒度授权方案。最近,Yang等人提出了一种动态SSE方案,支持EHR数据的前向隐私和授权可验证性。作者利用云存储和物联网(IoT)来方便远程患者监测。

上面描述的EHR搜索系统要么不支持数据共享,要么是为特定的构造/应用程序设计的。此外,这些方案大多使用ABE机制来执行细粒度的访问控制。由于不同的方案有不同的索引创建方法,因此即使基于ABE,也不是共享电子病历的通用方法。

最近在2017年,Li等人[23]提出了一种基于区块链的SSE方案,利用区块链作为一个点对点网络,以按使用量付费(pay-per-use)的方式存储用户数据。每个用户在这个去中心化系统中的地位平等,他(们)通过发起交易来请求其他用户来存储自己的数据,然后旷工把这些数据打包成块,并添加到区块链上来以此获得报酬,因此这些数据将存储在公共链中。是,该方案只支持单关键词搜索。

Hu等人提出了一种基于智能合约的SSE方案。在该方案中,用户文件的索引存储在p2p网络中的智能合约中,而这些文件可以存储到任何公共云存储系统中。他们引入了公平的概念,可以保证诚实的一方总是能得到他应得的,而恶意的一方什么也得不到。这种方法不需要任何验证,但它可以确保用户收到正确的搜索结果。他们实现了一个基于以太坊的原型方案,以说明在加密数据上分散搜索方案的实用性。但是,该方案也只支持单关键词搜索。

与[1]和[23]提出的方案不同,本文提出了一种基于区块链的EHRs可搜索加密方案。通过复杂的逻辑表达式来构造EHRs的索引,然后用户用这些表达式去搜索存储在区块链中的索引。

3. 背景

在这一部分,将描述以太坊上的智能合约、燃料系统以及常用符号。

3.1 以太坊的智能合约

智能合约(智能 contract)是由Nick Szabo[24]首先提出的,它是一个计算机程序,能够以代码的形式强制执行合约谈判。最近,一些加密货币利用加密算法和各种安全协议实现了不同类型的智能合约。智能合约并不一定与经典的合约概念相关,它可以是任何一种计算机程序。数字智能合约在不需要第三方的情况下,促进了交易的可靠执行,并且所有交易都是可追踪和不可逆转的。换句话说,智能合约提供了优于传统合约法的安全性,并降低了与合约相关的交易成本。

以太坊[2]是一个能够运行智能合约的去中心化平台。在以太坊中,智能合约能够在区块链或分布式分类帐上执行一些通用计算。由于区块链的特性,以太坊的所有操作都是透明和可靠的。以太坊是第一个内置图灵完备虚拟机的区块链实现。这意味着理论上,以太坊上的智能合约可以用于执行任何计算任务。

以太坊中有一个称为工人或矿工的实体,它能够验证和批准区块链中的所有交易。他们通过解决一个困难的密码难题,将所有新的交易添加到区块链中——这个过程称为新块的挖掘(挖矿)。一旦成功地挖掘了一个新块,矿工将获得新创建的加密货币;因此,这样的奖励激励了第三方实体去挖掘更多的区块。在以太坊上存储的数据和执行的计算在不同的矿工之间必须是一致的,且不能修改或否认。所有存储的数据和执行的计算对任何用户都是透明的。每个由特殊地址标识的智能合约由脚本代码、货币余额和键/值存储形式的存储空间组成。因此,以太坊能够充当一个可信的基础,它的正确性和可用性受到了信任,但在隐私方面不受信任。

3.2 燃料系统

在以太坊中,引入了燃料系统来防止出错或恶意程序占用计算资源,如死循环(dead loop)程序。它可以抵抗DoS攻击,并实现图灵完备的智能合约。在以太坊中,每笔交易都有一个有限的燃料消耗,当燃料消耗完时,系统即终止该交易。Gas是用以太币(ether)交换获得的,消费的燃料即是矿工的收入。

如Hu等人[1]所述:

合约脚本被编译成以太坊操作码并存储在区块链中。每个操作码将花费一定数量的预先定好的gas。当通过发起交易来启动智能合约时,发送方必须指定支持合约执行的可用“gas Limit”,以及对应的“gas Price”,即发送方愿意为每单位燃料支付的价格。只有当发送方的余额大于gas Limit * gas Price时,交易才会成功地包含在区块链中。

通过燃料系统,以太坊中的工人可以通过成功解决指定的密码难题获得经济报酬。如果一笔交易的gas Used使用量大于用gas Limitation限制,那么该交易将终止,并且已使用的燃料会支付给工人。当用户调用智能合约函数时,他必须声明帐户中有足够的gas,并愿意支付该金额。因此,开发人员应该部署一些有效的代码,以优化对用户所部署的协议的使用,并确保用户为提交给网络的交易支付适当的费用。

3.3 符号表示

本文使用的符号表示见表1。

两个伪随机函数定义如下,其中λ是安全参数。

f:{0,1}λ×{0,1}∗→{0,1}λ      g:{0,1}λ×{0,1}λ→{0,1}∗

4. 系统模型和设计目标

4.1 系统模型

在该方案中,有三个实体:数据所有者、用户和区块链。系统模型如图1所示。

数据所有者是创建EHRs的实体,该实体可以是人(例如,病人)或组织(例如,医院或诊所)。然后,数据所有者为各个EHR构建索引,并创建智能合约来描述如何搜索索引。完成后,数据所有者将智能合约和索引发送到区块链。之后,数据所有者使用对称加密算法对EHR进行加密,并将其存储在云服务器上。

用户是数据所有者授权的实体,用于搜索索引以获得所需的EHR。用户可以是人类(如医生)或组织(如医院、医学研究所或健康保险公司)。

区块链是存储索引和所有智能合约的实体。授权用户在区块链中搜索某些特定的EHR,智能合约随即产生正确的、不可篡改的结果,并且不需要用户进一步验证。

4.2 设计目标

该方案的设计目标与[1]中的方案相似。我们引入了区块链,以实现一个保密,公平,健全和可控的共享电子病历的可搜索方案。我们提出的方案主要有三个目标,即公平性、健壮性和保密性。

Fairness公平性。本文定义的公平性类似[1,25,26]。公平性保证了如果用户为查询任务付费,那么他就能收到准确的搜索结果;查询任务将由矿工执行,矿工通过正确运行协议来获得报酬。此外,为了访问EHRs,用户需要向发送搜索令牌的用户(即,数据所有者)付费。

Soundness稳健性。这意味着如果有一个不诚实的实体没有按照预先定义的方式执行协议,它将被检测到,并且不会得到任何报酬。在以前的方案中,这是通过使用验证方法来实现的。

Confidentiality保密性。在我们的方案中,由于新添加的文档是独立于之前的文档的,所以不存在向前隐私(forward privacy)问题。此外,我们的方案针对的是电子健康档案的索引,而实际的电子健康档案数据则储存于任何其他公共储存系统上,并且可通过任何加密方法来保护。因此,我们只需要保护查询表达式的机密性,使其不受敌手的攻击。

在我们的方案中,每个查询Q都是一个复杂的表达式,不同的查询之间是相互独立的。搜索算法将返回所有满足查询条件的文件标识符,我们假设这些文件标识符将通过一个安全通道(secure channel )传输给用户。此外,我们也可以加密这些文件标识符。

数据所有者调用BuildIndex算法,根据提取的标识符生成索引I。然后,数据所有者对所有明文文档进行加密,以获得加密的文档。加密的文档收集可以外包给任何分散的文件存储网络,比如星际文件系统(IPFS)[27]。

当用户希望搜索某些ehr时,他首先向数据所有者进行身份验证,并在授权后获得搜索令牌。然后,用户将利用令牌请求对智能合约进行搜索。智能合约将使用令牌搜索区块链以获得相应的结果并将结果返回给用户。方案结构如图3所示。这里,$Bowner和$Buser分别表示数据所有者和用户的存款帐户。$deposit表示用户将搜索区块链的存款货币。$offer表示每个搜索的价格,数据所有者将获得奖励。$gasPrice表示每单位燃料的价格。GLsrch和Gsrch分别表示调用Search()函数的燃料限制和成本。

在设置阶段,对数据所有者的奖励被预定义为$offer,而开采一个区块的成本被预定义为天然气量。时间限制应该是实际的,这样交易才能得到适当的处理。标识符打包方法类似于[1],它的灵感来自于[28]。这种机制可以确保每个事务消耗的天然气少于gasLimit。在以太坊中,每个事务都有一个消耗燃料的上限,称为gasLimit。

假设|id| = e、p∗e≤λ,p是一个系统参数选择的数据所有者。我们使用连接将多个文件标识符打包成一个。为了确保机密性,id的钻头长度应小于λ的安全参数。因此,我们有p≤λ/ e, e是位长度的文件标识符。

在搜索阶段,每笔交易的成本包括两部分,即对数据所有者的奖励(即$offer)和对工作者的奖励(即Gsrch×$gasPrice)。在预定的T1时间限制内,数据所有者可以从活板门生成中获得奖励。否则,用户的搜索请求将过期,用户的押金将被退还。注意,每个合约在以太坊中都有一个惟一的地址。智能合约利用搜寻令牌及预先储存的索引,执行搜寻演算法及储存搜寻结果(即,文件标识符)到其状态,该状态包括数据所有者在内都是公共的。

该方案只考虑查询的准确性,不考虑对各电子病历数据的访问。这可以通过使用现有的文件共享方案来实现,例如使用ABE算法来实现细粒度的访问控制[18,19,29]。

6. 安全性分析和性能评估

6.1 安全分析

公平性:这一目标是通过使用区块链的激励机制来实现的。在以太坊中,每个用户都贡献了自己的计算能力,向区块链添加新的块,并从完成的工作中获得奖励(例如,经济上的奖励)。换句话说,所有的交易都是通过购买天然气来支付的。恶意操作将被检测到,不诚实的用户将得不到任何回报。然而,现有的可验证的可搜索加密方案[13-17]不支持此属性,因为用户在服务器开始搜索之前就已经付费了。他们收到搜索结果后发现这些结果是不正确的。然而,目前尚无有效的对策来惩治失信主体。此外,用户指定的时间限制T1可以从交易应在此时间内完成这方面保证公平性;否则,用户的押金将被退还。

稳健性:在本方案中,区块链的一致性特征可以保证用户不需要验证就可以获得可靠正确的搜索结果。只要智能合约在以太坊上正确运行,搜索结果将以合约状态永久公开存储。以太坊网络中的每个节点都可以检测到搜索结果的任何变化。

机密性:我们的方案中查询表达式的机密性证明类似于[1]。由于没有更新操作(添加和删除),所以与[1]的方案相比更简单。我们还利用模拟器S与对手a之间的真实理想仿真博弈,引入两个有状态泄漏函数L = (L1, L2)

6.2 绩效评估

本节将介绍绩效评估的结果。我们提出的方案将区块链应用于EHRs,并使用条件表达式提取文档id来构建索引,而不是像[1]中建议的那样构建基于单个关键字的索引。建议方案所涉及的开支主要来自提取电子健康档案内的文件id,以及在以太坊进行的智能合约交易。在展示我们的评估结果之前,我们将首先对我们提出的方案和Hu等人提出的[1]方案进行比较总结。从查询功能上看,该方案支持复杂的布尔表达式和范围查询,而Hu等人的方案只支持单关键词搜索。如前所述,由于电子健康档案内的数据一般在上传到系统后不会改变;因此,我们不需要考虑动态数据更新操作。此外,我们的方案是专门为EHRs设计的,不像Hu等人的方案中假定的一般设置。两种方案的索引结构均为反向索引,并将索引存储到智能合约中。另外,两种方案都支持多用户设置。在构建索引时,本文提出的方案将从EHRs中提取布尔表达式,而Hu等人的方案将从用户数据中提取单个关键字。因此,两种方案的索引构建开销是不同的。

6.2.1 提取电子病历期间产生的费用

实验在Intel core i5-7200U 2.5 GHz处理器,8gb内存,Windows 10(64位)操作系统上进行,采用Python 2.7和MongoDB 3.4 enterprise edition实现编码。由于没有公开的EHR数据库,所以我们选择了来自加州大学欧文分校(UCI)机器学习知识库[31]的Nursery data set作为测试数据集。该数据集也在之前的可搜索加密工作中使用过,比如[18]。托儿所数据集有八个分类属性和一个类属性,每个属性最多有5个值。在求值过程中,每个属性被视为一个关键字字段,每个属性值被视为一个关键字。原始数据集总共包含12960条记录。还将文档标识字段添加到托儿所数据集中,这允许我们在每次MongoDB查询之后提取文档标识。

此外,还将属性的原始含义调整到EHRs的相应字段。为了评估从MongoDB提取满足特定表达式的文档id的开销,需要评估包含1000、2000、3000、4000、5000个EHR文档的五组数据集。

对于不同大小的EHR文档,不同年龄段的分布是相似的,20-40岁年龄段的人数最多。5000份EHR文档的年龄分布如图4所示。由于数据集的大小很小,性别没有进一步划分。疾病域被查询,但它包含相同的疾病。提取不同大小文档的所有EHR标识符的开销如图5所示。从1000和5000个文档中提取EHR标识符的时间分别约为0.138 s和0.471 s。因此,从MongoDB中提取文档id是非常有效的。

6.2.2 以太坊执行智能合约期间产生的开销

本方案使用的智能合约与[1]相同;因此,性能也是相似的。在[1]中,数据所有者为一台配置了4个Intel core i7-3770、16gb RAM和Ubuntu 16.04.2操作系统的机器,实验使用Python的solid和JavaScript实现。为了避免超过gas Limit,将加密的数据库分成n个子集合,通过n个事务发送给智能 contract。包号设置为p = 8,每次搜索最多完成t = 4个事务,每个事务最多返回步骤= 47个条目。在[1]中使用了安然邮件的数据集,这些数据集汇总在表4中。与我们的方案类似,关键字是我们的条件表达式。在局部模拟的以太坊网络测试RPC上,块的挖掘时间设置为0。我们将对不同数据集上每个阶段的时间开销和事务数感兴趣的读者转到[1]。与现有的集中式搜索方案不同,智能合约的时间开销远远高于数据所有者的时间开销。这是因为存储所有数据需要数千个事务,每个事务平均花费4秒左右。对于每个具有不同数量匹配记录的定位文档的搜索时间如图6所示。从图中可以看出,较大的结果集产生的搜索开销较低,而对于较大的数据集,搜索算法的速度较慢,因为挖掘出的块越多,加载时间越长。在正式的以太坊测试网络Rinkeby上,由于平衡的限制,实验在最小的数据库DS1上进行。根据参数p = 8和t = 4,数据库DS1有350个事务。挖掘的平均块时间是15秒,完成整个设置阶段需要88分钟。这意味着时间主要花在智能合约上,而不是传统的SSE方案中的数据所有者。在接收到一个搜索令牌后,在一次交易中,100个、210个和290个匹配的文档的搜索时间分别约为20秒、21秒和23.5秒。在两个事务中,430个匹配文档和515个匹配文档的搜索时间分别为39.5 s和40 s。在三次交易中,对630份和708份匹配文档的搜索时间分别为57秒和56秒。可以看出,搜索时间随着匹配文档和事务的数量而增长。

6.2.3 其他管理费用

索引构造的过程包括提取文档标识符并将这些标识符打包以包含在智能合约中。因此,索引构建的时间开销由两部分组成。然而,如果不能访问公开可用的EHR数据库或合作医院,我们就无法评估我们所提议的方法的实际性能。从我们的评价来看,该指标构建是有效的。对于5000个文档,提取EHR标识符的时间大约是0.471 s,将它们附加到智能合约的15个事务为p = 8和step = 47。在实践中,时间开销主要发生在智能合约上,因此对于数据所有者来说是有效的。与活板门生成相关的开销包括t和step的估计,这将确定事务的数量和两个伪随机函数。因此,开销与文档的数量无关,并且是恒定的。在搜索过程中产生的开销(见图6)主要取决于事务的数量,而这主要是由智能合约上的操作决定的。

7. 结论

区块链是一个相对较新的趋势,它在民用和军事领域都有大量的应用前景。受Hu等人的方法启发。[1],基于区块链提出了一种基于搜索加密的电子病历共享方案。利用区块链中指定的智能合约来代替集中式服务器,我们可以在不需要任何验证机制的情况下实现可靠和机密的搜索方案。利用区块链,提议的方案获得了公平,因为诚实的用户(而不是恶意的实体)将得到奖励。通过安全性分析和性能评价,证明了该方案的可行性和有效性。未来的研究包括实现所提出方案的概念验证,并在现实环境中对其进行评估,例如在作者的智能校园环境中。这将使我们能够评估它在现实环境中的效用,以及它在不同机构和国家的可伸缩性。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值