一种基于区块链智能合约实现的可搜索加密文件数据方法与流程

文档序号:18453691发布日期:2019-08-17 01:26阅读:1128来源:国知局
一种基于区块链智能合约实现的可搜索加密文件数据方法与流程
本发明属于可搜索加密
技术领域
,利用区块链技术设计支持动态更新的可搜索加密方案。
背景技术
:云计算的广泛普及与应用,使得个人用户可以将文件存放在云计算服务商提供的远程服务器上以降低本地资源开销。而这类服务器通常被认为是诚实而好奇的,因此为了保护个人隐私,需要将文件加密后存储,使得只有拥有加密密钥的用户才能解密。而可搜索对称加密技术(searchablesymmetricencryption,简称sse)使得文件拥有者可以在密文上进行关键词检索,得到目标密文文件,在保护隐私数据的同时不会损失太多查询效率。现有的可搜索密文技术研究工作通常认为云服务器是诚实的,即会遵守预先设计的协议。但是在现实世界中,一个恶意的云服务器可能会只返回部分查询结果,或者利用这些数据用作其他的计算。一些相关的研究工作在于研究可验证的加密搜索技术来检验服务器发回的结果是否完整。但目前为止这类可验证技术只支持一些简单的查询操作。导致这些欺骗行为的主要原因在于中心化的服务器拥有所有的数据,并且在没有监督的情况下执行这些协议。如果将上述的可搜索加密技术部署在去中心化的分布式系统上,系统的一致性原则可以将恶意服务器的影响消除。区块链是借由密码学串接并保护内容的串连交易记录(区块)。每一个区块包含了前一个区块的加密散列、相应时间戳记以及交易数据。区块链具有去中心化,难以篡改的特性。区块链采用共识机制来保证分布式数据的一致性,常用的共识机制有工作量证明、权益证明、和拜占庭容错等。智能合约是存储在区块链上的程序,由各个节点运行,需要运行程序的人支付手续费给节点的矿工或权益人。以太坊是一个开源的有智能合约功能的公共区块链平台。以太坊能确保数据一致性以及智能合约程序可以在没有中心协调者的情况下被所有网络中的计算机复制和处理。以太坊是公开并且无需许可的,任何人可以连接以太坊网络创建交易以及智能合约并且验证它们。以太坊属于公有链,而以超级账本为代表的联盟链因为其完备的权限控制和安全保障而被主流机构和市场认可。超级账本首次提出和实现的完备权限管理、创新的一致性算法和可插拔的框架,对于区块链相关技术和产业的发展都产生深远了的影响。而运行在超级账本中的智能合约被称为链码(chaincode),可以编写链码程序从而指定各节点执行相应的操作。区块链因为其去中心化和不可篡改的特性,可以很好的解决在传统可搜索加密领域难以克服的恶意云服务器的问题。我们可以利用智能合约,将可搜索加密的方案编写成智能合约程序,让区块链中的节点执行,因为区块链对每一笔交易都需要达成共识(破坏共识的成本高),因此总能保证我们的可搜索加密方案被正确的执行以得到正确的结果。但需要根据区块链智能合约特点设计合适的可搜索加密方案。技术实现要素:本发明利用区块链去中心化和难以篡改的特性,提供一种利用区块链智能合约来设计可搜索加密方案的方法,解决了传统方案难以解决的恶意云服务器问题,保证密文搜索结果的正确性。本发明采用如下方案:一种基于区块链智能合约实现的可搜索加密文件数据方法,其特征在于,包括数据持有者:对需要存储的文件进行预处理处理并生成加密文件数据发送给区块链智能合约;区块链智能合约:接收数据持有者发送的预处理后的数据,根据说明书描述的方案,处理数据,将加密的文件索引数据存储在区块链中,以便于后续的查询等操作。在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述数据持有者初始化阶段具体包括:数据持有者先对需要存储的文件进行处理,数据组织为键值对的形式,键为文件的id,值为该文件中包含的关键字的数组;1)数据持有者初始化一个空的链表l,和一个空的字典,同时随机生成三个密钥k,ka,kd;2)对数据库中的每个关键字w,k1=f(k,1||w),k2=f(k,2||w);(这里f代表hmac-sha256函数,散列消息鉴别码哈希函数,用k密钥对字符串加密产生一个固定长度的值做为认证标识,||代表字符串连接符);令c=0;(db(w)代表包含有关键字w的文件id数组,p代表一组文件中包含文件的个数);将每个关键字对应的文件db(w)分成α+1个块,最后一个块填充至p个实体;对每一个分成的块,令并随机生一个密钥r;令l=f(k1,c),c在每次循环中自增(g表示hmac-sha256函数,代表异或操作);最后将元祖(l,d,r)以字典序列加入到列表l中;3)设edb=l,并将edb分为n块,然后数据持有者将分块后的数据分次发送给智能合约。在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述数据持有者搜索阶段具体包括:搜索时,k,ka,kd为步骤1初始化时生成的密钥,w为需要搜索的关键字;搜索阶段根据关键字w搜索出包含该关键字的文件id;1)k1=f(k,1||w),k2=f(k,2||w);2)3)令c=0,并根据数据规模估计r和每次的迭代步长step;4)循环r次,每次将搜索标记(searchtoken)发送给智能合约,每次循环中c的值自增step。在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述数据持有者的增加阶段具体包括:增加新的文件时,增的的是一个新文件的id和新文件中包含的关键字数组wid;增加操作用到的参数有k,ka,kd;1)初始化空列表la;2)对每个wid中的关键字w,a)k1=f(k,1||w),k2=f(k,2||w),并随机生成密钥r;b)c=get(σ,w),如果c为空,c=0;c)d)将元祖(l,d,r,iddel)加入到la中;3)将la发送给智能合约。在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述数据持有者的删除阶段具体包括:在删除文件时,删除的是文件的id和该文件包含的关键字数组wid;删除文件用到的参数kd;1)初始化一个空的列表ld,对wid中的每个关键字w,令将iddel添加到ld中,并发送给智能合约。在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述智能合约的设置阶段具体包括:输入的参数为数据持有者发送给智能合约的分块edbi,智能合约初始化两个空字典γ,γa和一个空列表iddel;对每一个接收到的分块edbi,将edbi还原为(l,d,r),并将(l,d||r)添加到γ中去。在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述智能合约搜索阶段是根据数据持有者发送的搜索标记来搜索存储在区块链上的加密文件数据;具体步骤如下,1)循环直到get操作返回空或循环变量i>step;a)l=f(k1,c),d,r=get(γ,l),c和i分别自增1。2)将得到的拆开,得到包含该关键字的文件,(id1,id2...idp);3)如果将idj作为结果返回;4)如果γa没有搜索的话,将上述步骤在γa字典中重复一遍,利用搜索.在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述智能合约增加阶段是根据数据持有者发送的la,将la还原为(l,d,r,iddel)的数组,并对其中的每一个元祖,如果iddel∈iddel,re[i]=1,(i为循环控制变量,每次自增1),再将iddel从iddel中删除;否则re[i]=0,将(l,d||r)添加到γa中;将re数组作为结果返回。在上述的一种基于区块链智能合约实现的可搜索加密文件数据方法,所述智能合约删除阶段是根据数据持有者发送的ld,判断iddel是否在ld中,若不在则将iddel添加到iddel中。本发明针对传统密文搜索技术中难以克服的恶意云服务器的问题,利用区块链去中心化、难以篡改的特性,使用以太坊和超级账本中的智能合约实现了适合于区块链的密文搜索方案,能够保证密文搜索结果的正确性。附图说明图1是本发明的系统模型图。图2是本发明中数据持有者初始化数据阶段流程图。图3是本发明中区块链智能合约初始化数据阶段流程图。图4是本发明中数据持有者搜索阶段流程图。图5是本发明中区块链智能合约搜索阶段流程图。具体实施方式密文搜索是在加密文件上进行关键字匹配搜索文件,本发明利用区块链的去中心化、难以篡改的特性,结合区块链智能合约特性,设计了适合区块链的密文搜索方案,可以让用户根据关键字在加密后的文件索引中搜索得到包含改关键字的文件索引。区块链的特性保证了密文搜索的结果的正确性,克服了在传统方案中恶意云服务器产生结果错误的问题。本发明提供一种利用区块链智能合约实现的正确的密文搜索方案。本发明的区块链智能合约部分分为基于以太坊的公共链方案和基于超级账本的私有链两种方案,方案的流程类似但在不同的平台上做了实现。参考图2,对本发明的流程进行一个具体的阐述,如下:首先,需要先生成数据文件,将文件数据处理为该文件包含的关键字的键值对形式,例如在文件id为id1的文件中,包含关键字w1,w2,...,wn。将用户的文件处理成以上的形式再执行之后的步骤。数据持有者方的操作用python语言实现,一个空的数组l和空字典σ,然后再随机生成三个密钥,这里使用random函数随机产生一个0—10000的数字,再将其转换成二进制数串,以此作为密钥k,ka,kd。接着对上步生成的数据库,对其中的每个关键字w,进行和其关联的文件id数据进行加密,具体操作如下。对每个关键字w,先将其分别和字符‘1’和‘2’连接,用作后续生成不同的数字签名。利用hashlib和hmac模块,对拼接后的字符串利用密钥k,进行hmac-sha256加密,分别得到密文记为k1,k2。用db(w)代表数据库中该包含该关键字w的所有文件。可以利用原始数据进行进一步处理得到。因为原始数据库(我们这里采用enronemail数据集作为测试)往往包含文件个数较多,且每个文件包含的关键字较多,而区块链智能合约目前的技术单次处理的数据有限,因此需要将包含一个关键字w的文件id进行分批次操作。用p代表一次操作包含的文件数,这里测试时使用的p值为20。令于是将一个w对应的所有文件分为α+1块,最后一块需要填充至p个实体,用标号为0来填充。对分割后的每一个块,将其中的p个文件id字符连接为并且随机生成一个密钥r,这里随机的方法也是利用先用random函数随机产生数字,再转换为该数字的二进制串。用令l=f(k1,c),c为循环控制变量,在每次循环迭代中自增1,代表异或操作。这里为两个字符串的异或,需要将两个字符串填充至一样的长度,因为数与0异或为其本身,因此这里用字符0填充至两个字符串中较长的长度。其次,这里对两个字符的异或采用的是先将字符转换成对应的ascii码的十进制数,再将两个数进行异或,对得到的数字,转为ascii码,作为结果返回。得到异或的字符串可以在智能合约上利用相同的数字签名还原得到这是整个方案中关键的一步。再讲(l,d,r)作为一个元素加入到列表l中。每个(l,d,r)存储了加密的包含关键字w的文件id的信息。这些数据需要发送给智能合约,将文件的信息加密后存储在区块链上,以便于智能合约的方案在密文上搜索。这些数据利用python的json模块写入本地json文件,注意在存储时将大量的(l,d,r)元祖分批次,存储到多个json文件中,这里将500个元祖存到一个json文件中,再将多个json文件发送给智能合约。当数据初始化完后后,下面介绍当需要搜索时,数据持有者生成搜索标记的详细过程。搜索过程简要描述为,根据所的关键字w,搜索出所有包含该关键字的文件id。搜索的过程在区块链上以执行智能合约的方式进行,而搜索的凭据是在数据持有者方生成。数据持有者生成搜素标记,详细步骤如下。首先同样和初始化时一样,对要搜索的关键字w,用密钥k对1||w和2||w进行hmac-sha256进行数字签名,得到k1,k2,再用ka密钥对1||w和2||w进行hmac-sha256进行签名,得到用于搜索是否是在后续增加的文件。同样再用kd对w进行同样的加密操作,这一步是为了对删除的文件进行区分。然后开始循环,令c=0,根据数据规模估计r,和每次迭代的长step,将发送给智能合约用于智能合约的搜索方案,同样这里也是讲每次搜索的searchtoken以json文件的形式存储,智能合约能方便的读取json格式的数据。这里的c用于在搜索时找到该c值和关键字w对应的文件,因为每个关键字对应的文件id数不同,所以这里规模r可以稍大一些保证大量文件也能一一检索到,而step代表一次搜索中检索的文件id个数,测试时设为5,一次操作可以较少而分多次执行。本发明的方案是支持动态更新数据库的,区块链支持保存新的数据,而且动态更新在搜索技术中是非常有必要的,因为在用户实际使用中本身就有在后续增加数据的需求。当新增文件时,我们默认的是增加一个文件id,和其中包含的所有关键字数组wid。在数据持有者端增加操作和初始化操作时类似,以k、ka为密钥对1||w和2||w分别进行加密得到k1,k2,再用kd对w进行加密得到随机生成密钥r。其中在增加操作,数据持有者需要维护一个本地的字典σ,用于记录该关键字是否已经被添加过。具体操作如下,在σ中找到键为w的值c,若为空则c=0。同样用对c进行加密得到l,d由该文件id和异或得到,这里异或也是字符串的异或,需要额外的处理。增加操作比初始化操作多了用于确认该文件是否被删除。动态更新的另一部分是数据持有者的删除操作,删除操作删除的是某个文件id,和该文件包含的关键字数组wid。对wid中的每个关键字w,对w用密钥kd,使用加密得到再以次作为密钥加密文件的id得到iddel。将所有的iddel存到数组ld,将该数组存成json文件发送给区块链的智能合约。以上是我们方案在数据持有者方的操作,生成给区块链智能合约的执行后续操作的数据凭证,以支持区块链上的密文搜索方案。智能合约上的操作是依据这些标记以执行去中心化的密文上搜索,下面介绍在区块链上的具体的执行步骤。我们的发明分别在以以太坊为代表的公共区块链和以超级账本为代表的私有链上做了实现。首先先介绍在以太坊上的步骤。在以太坊上做实现时,需要考虑到以太坊上执行智能合约时需要消耗以太坊的gas,而以太坊上的操作受到gaslimit的限制,因此对于对大量文件的密文处理时,需要注意到分批次执行。以太坊可以利用testrpc框架在本地搭建一个虚拟的以太坊环境,用于执行智能合约。而以太坊中的智能合约需要用solidity编写,智能合约在完成后需要部署(migrate)到testrpc框架中,数据持有者发送给智能合约的json数据,在testrpc框架中可以用javascript脚本读取json数据,并作为参数在调用智能合约时传递给solidity智能合约。而又注意到在我们方案中使用的加密函数hmac-sha256在solidity中没有内置的函数,因此本发明参考标准实现,自己实现了solidity版本的hmac-sha256数字签名函数。结合以太坊的实际情况(gaslimit)数据持有者在执行中的一些参数设置如下,p=8,代表8个文件的id连接在一起,而一次区块链的transaction最多包含70个实体,即列表l中包含70个加密后的数据发送给区块链。而在每次搜索操作中,参数r和step分别设置为4和47,因为在每个关键字的搜索在4个交易(transaction)中就可以完成。首先先介绍初始化存储加密文件数据的以太坊智能合约部分。在testrpc框架中先用javascript脚本读取json数据文件,格式为(l,d,r)格式的数组形式。首先先完成智能合约的初始化函数,以(l,d,r)三个字符串作为数组,将文件存储到区块链中。在智能合约中初始化一个字典数据类型γ,将l作为键,d||r作为值存入到γ中。而一个文件数据库,包含的文件和关键字数据较多,如之前所述需要分为多次,多次执行初始化的智能合约。同时,初始化一个为空的γa,用作之后的添加数据存储。再详细介绍智能合约的搜索方案,在智能合约中搜索时,根据数据持有者生成发送的json数据,形式为同样以javascript脚本读取json数据,并将这五个参数作为输入调用搜索的以太坊solidity智能合约。具体步骤如下,初始化循环变量i=0,循环结束条件为i>step,(step这里实验中采用的是47,需要根据不同的文件数据库来调整至合适的值。)另一终止条件为get操作得到空值时。循环中第一步,利用自己实现的solidity的hmac-sha256函数,以输入参数k1为密钥,加密c,得到l。因为在数据初始化阶段,以太坊虚拟机中存储了γ,是以l为键,d||r为值的键值对数据,因此如果存在l为键的数据,在字典γ上的get操作可以得到d||r,再进一步分割字符串,分别得到d和r。以输入参数k2为密钥,加密r,用表示。将d进行字符串异,该操作与前文提到的相同,先将字符转化为对应的ascii码十进制值,以数值进行异或,得到十进制数,转换为相应的ascii字符。因为异或操作的特殊性,具有这样的性质,所以因为d是由文件id组合或得到的,所以这里用d和异或能够得到文件id组合因为在实验时参数p为8,根据p将id串分为8个单独的文件id。继续循环,自增c和i。循环结束后,会得到多个文件的id,对每个文件id判断是否在iddel中,因为iddel数组用于标记文件是否已经被删除。若不在则将那些文件id作为结果返回给用户,即包含用户搜索的关键字w的所有文件的索引值。同时还需要在γa中重复以上的操作,γa中存储是在增加操作中新增的文件数据。以上操作,因为以太坊区块链的去中心化,能保证最后的结果被所有的节点所承认,即结果一定是根据我们的智能合约设计的方案执行得到的,就解决了在云服务器密文搜索中恶意服务器不会完整地执行预先设计的方案而导致的返回错误结果,而用户不自知的问题。而完整的密文搜索方案需要支持动态更新,包含增加删除阶段。下面介绍以太坊智能合约方的增加文件数据操作。数据持有者发送的数据为(l,d,r,iddel)的数组,调用以太坊智能合约的方式也是在testrpc框架中以javascript脚本读取数据持有者发送的json数据,将其作为调用以太坊智能合约的输入。对于每个这样的数据,循环判断iddel是否存在于以太坊中的iddel,若存在使re[i]=1(i为从0开始的循环变量),然后将iddel从以太坊的iddel数组中删除,即表示该数据被删除后又重新添加。若不存在,则re[i]=0。对于l,d,r和初始化阶段相同,将l作为键,d||r作为值添加到γa中。re数组是以太坊智能合约返回给数据持有者的结果,数据持有者根据re数组,对re中等于0的项,对应的索引i,找到发送searchtoken中wid数组的第i个关键字w,数据持有者本地维护的字典σ,通过get(σ,w)得到c,对c加1,然后将(w,c)插入到σ中。该步骤保证的是对于删除过的文件在之后又重新添加的问题。以上步骤实现了以太坊智能合约根据数据持有者发送的增加文件的加密json数据,将数据存储在以太坊中,实现了文件数据库在以太坊区块链上的动态更新。以太坊中的删除文件操作,流程和之前的相同,在testrpc框架中利用javascript脚本读取删除持有者发送的删除文件加密数据ld,对于ld数组中的每一个iddel,判断其是否存在于以太坊中的iddel中,若不存在则添加到其中。以上是在以以太坊为代表的公开区块链中的加密文件搜索方案描述,因为公共区块链的特性,任何人都可以加入,因此为保证所有节点之间的一致性,以太坊中的共识原则以权益证明为代表,这导致了这类公共区块链的效率较低。而且对于大型数据库,文件数据非常之多时会产生较大的开销,在以太坊中是用gas表示,所以公共区块链虽然能带保证结果的正确性,保护数据隐私,但因为其共识算法的特性,导致其效率较低,且开销较大。因此针对此问题,本发明在基于身份认证的私有链以超级账本为代表上做了加密文件搜索方案。私有链是基于身份认证的,只有在通过身份认证的节点才能加入到区块链,而链上的所有节点同样需要达成共识,以保证智能合约执行的正确性。而在私有链上的共识性原则只需要保证这些经过身份认证的节点之间的结果一致性,在超级账本中采用的一致性kafka集群实现,通过kafka对交易信息进行排序,在内部分成多个角色以实现数据一致性。kafka是一个分布式的流式信息处理平台,目标是为实时数据提供统一的、高吞吐、低延迟的性能,因此超级账本的效率较高,单位时间内处理的消息数量远超过公共区块链。在同样能保证搜索结果正确的前提下,具有较高的密文搜索效率和搜索时较低的开销,因此目前超级账本能够做到工业中实际场景可用的密文搜索方案。下面详细介绍在超级账本区块链中的加密文件搜索方案。我们以超级账本farbic项目为框架,在本地搭建farbic框架的测试环境,以实现高效的私有区块链的加密文件搜索方案。首先需要在本地搭建farbic环境,依据开源的farbic项目,利用docker容器在本地运行farbic项目的镜像。farbic项目中包含几种角色,客户端、endorser节点、committer节点、orderer节点、和ca(证书管理)节点。我们只需要关注farbic中的智能合约部分,其他节点主要涉及超级账本的系统内部的数据一致性等底层逻辑。在farbic中,智能合约又被称为链码(chaincode),利用go语言实现。我们采用的环境包含两个peer节点,即一个私有链上有两个运算节点,虽然模拟环境下的节点数目较少,但是我们方案的重点在于文件加密搜索方案的原型,因此我们把重点放在与chaincode的实现上。chaincode包含package、install、instantiate、upgrade四个生命周期,分别代表链码的打包、部署到系统中、初始化、和更新等四个生命周期。链码(chiancode)需要实现init、invoke函数,在invoke函数中根据传入参数来区分调用的函数。在farbic框架中,我们的方案中数据持有者端所进行的操作与在以太坊中方案的操作一样,同样加密后的数据以json形式发送给超级账本,而在farbic框架中使用命令行的方式调用链码,以键值对字符串的形式传递给链码以达到调用特定函数的目的。首先,链码的init函数中初始化一些整个方案中可能会用到的参数,例如整个方案中使用的密钥长度、文件id的长度、初始化空的列表以后续存入加密数据等等操作。命令peerchaincodeinstantiate调用的是链码的init函数,传递的参数如’{“args”:[“init”,””]}’,init表明调用的函数,而在之后的参数可以为具体的数字代表密钥长度和文件id长度等。并在链码中对数据进行初始化,将这些数据保存在farbic区块链账本中,调用的是stub.putstate接口。在farbic框架中账本可以理解成一个键值型数据库,以变量名为键,变量的值需要转换成字节数组。可以在state上进行增删改查等操作,这样的结构使得在farbic区块链中读取和存入数据很快。需要注意到,由于数据持有者发送的数据都是json数据,而账本中存储的数据需要以字节数组的格式,这里需要进一步转化。方案在实现上使用了go语言中的结构体作为中间转换的桥梁。go语言的链码在获得json数据字符串后,可以利用定义相同结构的结构体,将数据存储为结构体,再将字符串转换成字节数组存入区块链的state账本中。下面详细介绍每个步骤的过程。在farbic的初始化数据库阶段,同样收到多个(l,d,r)结构的json数据。在farbic框架中先定义脚本,读取json文件,存储为字符串变量。再调用peerchaincodeinvoke函数来具体调用链码中的setup函数。这里因为数据库的文件较多,json文件包含的数据较多,因此一次调用链码并不能将所有的加密数据进行初始化,所以这里将json文件分为多个小的json文件,在实验中我们以500个(l,d,r)json数据为参数调用一次链码的初始化函数。多次调用后,可以将所有加密文件数据保存到区块链账本中。存储的形式以l为键,d||r为值存储到farbic的state中。这里数据以以json形式的字符串传递给chinacode链码,在chaincode中利用go语言json包的unmarshal函数,将json字符串存到结构相同的结构体中。对于farbic上的搜索阶段,接收数据持有者发送的搜索标记,处理的流程和在以太坊中的流程相同。在这里因为chaincode使用的是go语言,使用的加密函数使用的是go语言中自带的crypto/sha256库中的hmac-sha256函数。其余步骤均与以太坊中的方案一样,只是编程语言使用go语言实现。在后续的动态更新操作也是和以太坊中的方案一样。在调用时调用的是invoke函数,传入“add”或者“delete”代表增加或者删除操作。下面展示在不同规模的数据库上,以太坊和超级账本farbic中我们的文件加密搜索方案的效率的不同。首先下表是四个不同规模的文件数据库,包含不同的文件数量和不同的关键字个数。数据库标号(w,id)对个数不同的关键字个数加密后数据大小db1100763226735.4mbdb23006175498014.1mbdb35005677592421.3mbdb4100014112391239mb四个不同规模的数据库上执行方案,分为数据持有者方和以太坊区块链中的方案和超级账本farbic中的方案,包括初始化、搜索和更新三个操作所消耗的时间如下表:可以看出,在私有链超级账本上的方案各项操作的时间都要比在以太坊上的操作高效很多,但以太坊公有链的特性保证了其更加的安全,所以在安全性和效率之间需要一个权衡。本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属
技术领域
的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1