面向联盟链的RFID流通高效保护模型

2022-08-10 08:12
计算机应用与软件 2022年7期
关键词:阅读器证书标签

印 聪 杨 璐 吴 斌

(苏州大学 江苏 苏州 215006)

0 引 言

射频识别(Radio Frequency Identification,RFID)技术作为物联网发展的关键技术,在没有物理接触的情况下,通过无线电信号实现对目标数据的读取。RFID技术的广泛使用,是促进物联网技术发展的重要推动器。然而,RFID技术凸显的安全隐患越来越严重,尤其是非法阅读器可以任意地对标签进行数据读取,导致用户的隐私泄露和企业的数据安全问题。由于RFID行业内对于标签成本低的要求,标签的计算存储能力无法满足复杂的标签认证逻辑。因此,文献[2-10]针对RFID不同应用场景设计了标签隐私安全解决方案。周世杰等[1]对RFID的保护技术做了归纳,将其分为以下三类:

(1) 基于改变标签与具体目标关联的方法。文献[2]使用kill标签来改变标签和具体目标关联。文献[3]提出在标签上设置物理开关,以物理接触方式实现睡眠与唤醒。该方法如若攻击者获得了标签,就失去了保护功能,同时物理开关也会增加标签设计难度和制造成本。此类物理方法较多应用于与消费者个人隐私相关的服装制造业,但通常在有效性较好的同时受制于标签的高成本设计缺陷。

(2) 基于改变输出唯一性的方法。由于标签总是向阅读器返回固定的标识符信息(如96位的EPC编码),学者们提出采用标签重命名及密码学认证的方法来从根源上解决RFID隐私难题。首先,文献[4]基于两项攻击假设提出最小密码技术,通过穷举搜索完成标签对阅读器的认证。但是受制于标签存储容量,以及该方法可能会受到中间人攻击和重放攻击,复杂的协议在工业界也很难实现。随后,文献[5-8]根据前人密码学研究方法的启发,纷纷提出基于加密、重加密、随机Hash Lock的标签解决方案。基于密码学认证的方法是目前学术界解决RFID隐私的热点,其在适用范围和有效性方面均有突出的表现。

(3) 基于隐藏标签的方法。数据处理能力受限、无线数据读取及RFID返回标识符的唯一性,造成了标签隐私难题的必然性。从隐藏标签的角度出发,文献[9]提出的阻塞器的思想是通过技术手段,妨碍阅读器对标签的访问,以造成通信信道的软阻塞和主动干扰。该方法结合二叉树算法来进行,在无线信号较强的场景下有很好的应用。另外,文献[10]访问控制功能实现的RFID Guardian平台对隐藏标签的设计也有突出的贡献。

上述研究大多从三大角度探讨和解决RFID中用户个人偏好信息的隐私威胁。RFID隐私保护涉及面很广,问题很多,呈现一种与应用高度相关、资源约束严峻等独有的特征。抛开RFID的应用场景去谈RFID标签的安全问题,不仅不能解决安全隐患,而且毫无意义。随着RFID应用的推广,在物流、商品销售、供应链管理等领域都会涉及RFID隐私问题[1]。因此,选取特定应用场景来探讨标签隐私问题是很有必要的。本文专注于RFID应用系统中的物流领域。

在传统的RFID“标签-阅读器-后端系统”形式的物流系统中,采用RFID等物联网采集设备将流通产品的初始数据从供应链源头采集至物流系统中。这种模式没有考虑恶意阅读器对标签数据的非法记录问题,如果恶意阅读器在没有审查机制的情况下对数据进行非法记录,就会导致供应链源头数据的造假,同时在供应链的流通过程中也会泄露了企业对于产品部分敏感流通数据的隐私。例如在产品运输环节中,恶意阅读器可能将错误的位置信息提供给货物调度中心的数据库;零售环节中,未经认证的恶意阅读器会恶意篡改产品的库存等信息。因此,恶意阅读器对于物流信息的非法记录会导致整个供应链产生严重的安全隐患。本文研究的侧重点并非标签产品的物流溯源,而是在于保证物流源头数据的真实可靠,使得标签产品数据免受非法阅读器的恶意访问。因此,本文涉及的物流部门中将不会涉及监管部门和消费者,仅涉及供应商、生产商等源信息录入部门以及配送商、零售商等流通部门。

本文基于联盟区块链技术,结合具体的RFID物流场景,设计了面向联盟链的RFID标签高效保护模型(TDBPC模型)。依托于联盟链的Fabric-CA数字证书技术,将阅读器是否合法映射成联盟链中的客户端是否持有访问区块链网络的CA证书,只有持有部门中的CA机构颁发的证书,阅读器客户端才有权限将标签的流通信息写入区块链中。主要创新点包括以下三个方面:(1) 针对RFID产品流通领域,基于联盟区块链Fabric技术提出TDBPC模型。应用Fabric的CA证书,防止潜在恶意阅读器对区块链网络中的产品流通数据的非法写入。(2) 创建了TDBPC模型中标签信息初始录入、合法阅读器信息更新等智能合约,健壮了联盟链系统。(3) 在防范了恶意阅读器攻击的基础上,TDBPC模型具有通信和计算上的高效性。

1 相关背景

1.1 RFID隐私安全

所谓的RFID标签安全问题,是指由于用户因携带有不安全的RFID标签导致个人或组织的秘密或敏感信息泄露[11]。RFID系统由标签、阅读器和后端系统组成,如图1所示。通常情况下,在不设计较好的隐私保护协议的情况下,容易出现跟踪攻击和罗列攻击。本文基于物流领域,将传统的后端系统改造为联盟区块链网络,基于联盟链的严格准入机制(CA证书机制),实现产品的安全高效流通。

图1 RFID标签隐患示意图

1.2 基于区块链的物流系统设计

区块链具有去中心化、时序数据、集体维护、可编程和安全可信等特点[12]。由于区块链网络中所有节点共同维护不可篡改的账本,特别适用于具有动态性的海量设备的物联网环境中。区块链早期在互不信任的参与者之间维护一套不可篡改的分布式记账系统,随着研究者对区块链的深入探索,大机构在以太坊和hyperledger联盟链平台做了较多的业务尝试。以太坊大多采用PoW、PoS等基于证明的共识算法来实现公链和私链的排序服务,而Hyperledger针对联盟组织业务的共识容错和效率要求,大多采用Kafka、Raft和类Pbft的共识。同时,Hyperledger因其通道的设计,将组织间的业务隔离开来,提供了更细粒度的隐私保护机制。表1分别从几个维度比较了两个平台的区别。

表1 eth和fabric平台比较表

目前,联盟企业进行信息上链一方面有较快交易速度和较低交易成本的要求,另一方面物流领域也需要相关部门的监管。因此,以较被认可的Hyperledger Fabric项目为代表的这类联盟链很适用于物流领域,文献[13]将区块链技术应用于供应链领域,研究了如何增强供应链的弹性,并探讨了结合区块链的供应链应用的各类风险和具体应用场景。诸如国内蚂蚁区块链、趣链科技、华为区块链等较大的区块链平台也基于Hyperledger Fabric进行试验和改进。

将应用联盟链于物流系统中,通常各参与方会使用终端采集设备如RFID将产品初始信息录入到区块链系统中,但是现有研究中对初始信息录入的数据安全性讨论较少。文献[14]提出双层架构的溯源许可链共识机制,在不同层上使用不同的共识机制,以此提高溯源系统的效率。但是并没有考虑RFID非法阅读器在数据采集过程中对数据造假的可能性。文献[15]提出的双链溯源系统虽然在保证物流系统的高性能的同时,私链的建立使得恶意节点出现的可能大大减少,但是在供应商、经销商等信息采集部门对恶意RFID隐患的讨论较少。随后,文献[16]指出,物流追溯体系设计的产品种类多、产品链长,单纯的联盟链架构在流程和理论处仍有一定的局限。本文单独解决供应商、生产商、配送商、零售商等用户层使用RFID等采集设备录入信息的安全隐患,应用Fabric的CA机制存在高准入机制的优势,不仅可以实现供应链上企业的高效业务协同,还可以解决阅读器的恶意读取难题。

本文系统基于Fabric联盟链进行开发,以去中心化的方式实现链上信息可追溯。以CA证书颁发的形式隔离非法阅读器客户端对数据的非法读取,不仅为企业节约成本,而且保护了企业的隐私。

2 TDBPC模型设计

本文针对具体RFID产品流通领域,结合Fabric联盟链及chaincode智能合约对传统RFID后端数据库进行改进,旨在保护联盟企业对于敏感流通数据的保护。

为了更好地介绍本文提出的TDBPC模型的细节,需要对模型提前建立以下假设:

(1) 每一个标签和阅读器都有由区块链网络生成的唯一id,分别为tAdd和rAdd。阅读器凭rAdd通过客户端录入或更新标签数据,只有持有该组织CA证书的rAdd才有权限操作区块链数据。

(2) 假定阅读器和标签之间的信道不是安全的,而阅读器和后端系统(区块链网络)的信道是安全的。

2.1 基于区块链的物流系统设计

本模型中涉及的通信符号及含义如表2所示。

表2 符号说明表

1) fabric为RFID物流系统中的任意一个标签和阅读器提供唯一的标签id和阅读器id,同时为节点中的标签和阅读器用户进行编号,Ti∈tAdd,Ri∈tAdd。

2) TDBPC联盟链系统中涉及四个部门,分别为供应链中的生产商、批发商、配送商和零售商。本文将每个部门作为区块链网络中的1个组织,各个组织根据业务需要颁发给合法的阅读器用户CA证书。各个组织记为D={D1,D2,D3,D4},Di∈D。

3) 哈希值h,以及交易的时间戳t,均通过数字签名的方式用来验证阅读器和交易的合法性。

2.2 模型设计

面向联盟链的RFID标签高效保护模型的网络拓扑如图2所示。

图2 TDBPC模型的网络拓扑图

其中,供应商和生产商等企业作为供应链的源头,负责收集携带有标签的产品信息,产生原始数据,通过调用智能合约交易向联盟链其他节点进行广播交易。自供应商和生产商录入标签信息完成后,携有标签的产品进入物流的流通环节。

为了区分访问链上标签产品数据的阅读器是否合法,本文引入了Fabric中的CA认证机制,CA认证机制模块在Fabric中主要负责身份管理[17],完成数字证书验证、签名与验证、私钥管理等功能。将阅读器是否有权限访问抽象成是否持有各部门中CA证书。只有通过该部门注册得到CA证书,并且验证数字证书校验通过,阅读器客户端才能有权限对peer节点发起txs交易查询,peer节点安装并调用chaincode合约发起对账本中的标签数据的查询以及更新并返回给阅读器账户。基于fabric-CA的准入机制的设计,非法阅读器用户将无权访问标签产品流通信息。

2.2.1 CA证书颁发

携带有标签的产品在供应商和生产商将标签产品初始信息tag_info录入完成之后,即这批产品已经面向供应链开始流通,各个部门根据自己业务的需要,在各组织中为合法的阅读器用户颁发CA证书。例如,生产商有用阅读器读取标签完成流水线生产工序的需要,因此生产商会为一批阅读器用户颁发证书,表示为reader_valid=[R1,R2,R3,…]。其余部门如供应商、配送商和零售商也都有自己的需要,每一个部门根据各自组织的root-CA颁发合法的访问证书。

在我们的设计中,使用Fabric提供的BCCSP加密服务完成CA工作,证书的颁发过程和验证数字签名的过程如图3所示。

图3 证书颁发与验证签名步骤

TDBPC模型中,CA证书颁发是各组织颁发给合法的客户端的,也就是颁发给阅读器账户。大致步骤描述如下:

步骤1阅读器Ri将明文F发给某一组织的CA机构CAi,CAi对证书明文F做h()哈希运算得到数字摘要h1=SHA256(F)。

步骤2CAi用自己的私钥SCAi用RSA算法将h1加密,得到密文F′=RSA1024(h1)。此时CA结构和阅读器用户之间有了一整套完整的数字证书Cer=,颁发给合法的阅读器用户Ri。

步骤3验证阅读器客户端持有的数字证书是否合法,用CAi的公钥解密密文得到h2=RSA1024(F′),再用证书明文F计算一次SHA256得到密文h1=SHA256(F)。

步骤4计算得出的h1和h2的值进行对比,如果有h1==h2,则证书校验通过,说明该阅读器客户端持有的是CAi颁发的证书。

以阅读器用户判断是否持有该组织颁发的证书,来决定阅读器客户端是否拥有向peer节点发起交易提案并获得账本中的敏感流通数据的权限。从而从准入机制的角度杜绝了恶意阅读器的隐私攻击,奠定了面向RFID流通中的联盟链高效运作的基础。

2.2.2合约设计

面向RFID流通的联盟链高效保护模型共有四类参与者。针对每一类参与者职责的不同,设计了不同功能的智能合约,提供给peer节点安装和执行。各部门职责示意图如图4所示。

图4 各部门合约职责示意图

联盟链的智能合约主要包括以下三个功能。

1) 供应及生产信息录入。供应企业和生产企业作为供应链的源头企业,负责使用物联网采集设备如RFID对标签产品的初始信息进行录入。供应企业负责产品的原材料名信息、原材料工厂信息、原材料细节等信息的初始采集。生产部门在得到供应企业的原材料后,生产产品在流水线上由工人进行产品的组装或生产。在生产过程中使用RFID对产品进行扫描可以防止工序的紊乱,保证产品的计划生产。

当供应和生产部门的读写器对产品扫描完成后,根据是否持有CA证书来决定读写器用户是否具有将数据上链的权限。供应信息批次录入建模为,生产录入信息建模为。供应信息写入伪代码如算法1所示,生产信息写入与之类似。

算法1InitTag()算法

输入:原材料名rawName,原材料工厂rawFactory,原材料加工信息rawInfo,写入数据的阅读器地址Ri。

输出:供应信息输入成功或失败。

1. List[] SupReader;

//供应部门颁发的合法CA的阅读器集合

2. Procedure InitTag()

3. if rawName==null‖Ri∉SupReader then

4. return FALSE;

5. end if

6. raw.name=rawName;

7. raw.fac=rawFactory;

8. raw.rawInfo=rawInfo;

9. raw.reader=Ri;

10. return TRUE

11. end Procedure

2) 产品配送。配送商可以通过RFID阅读器读取区块链中的标签数据内容,并将内容和配送信息进行核对。同时,配送中将RFID标签更新为最新的产品存放地点和在库状态。同样地,记录上链之前需要检查阅读器的合法性。伪代码如算法2所示。

算法2UpdateTagLoc ()算法

输入:配送地址deliveryLoc,配送信息deliveryInfo,在库状态stateTag,写入数据的阅读器地址Ri。

输出:供应信息输入成功或失败。

1. List[] delReader;

//配送部门颁发的合法CA的阅读器集合

2. stateTag=0;//初始默认不在库

3. Procedure UpdateTagLoc ()

4. if deliveryLoc==null‖Ri∉delReader then

5. return FALSE;

6. end if

7. del.loc=deliveryLoc;

8. stateTag=1;

//配送到指定地点,在库

9. del.devInfo=deliveryInfo;

10. del.reader=Ri;

11. return TRUE

12. end Procedure

3) 产品零售。RFID可以改进零售商的库存管理,实现实时补货,有效跟踪运输和库存。一旦恶意的阅读器在零售环节恶意记录库存状态并记录上链,会侵犯零售企业的库存隐私。因此,同样需要零售企业的CA机构的准入,阅读器账户才能在sellInfo等字段中添加库存视频、零售环境等大文件的URL,并调用retailTag()合约对账本实现修改。

TDBPC模型中,每一个部门通过阅读器客户端调用所负责的智能合约,实际上是更新区块链底层状态数据库的最新账本状态。账本由状态数据库和区块链两部分组成[18]。区块链由orderer记账节点负责,维护区块链网络中不可篡改的分布式账本;状态数据库是指由全局交易导出的最新状态,本文采用key-value数据库提高检索性能。状态数据库的key值统一是标签的地址tAdd,value值根据各部门的职责差异定义为不同的字段,但每次合法阅读器客户端操作完状态数据库后都需要添加自身地址的Ri字段来证明操作的合法性。账本数据示意图如表3所示。

表3 账本数据key-value键值对

2.2.3共识机制

在各部门通过合法的阅读器将标签产品物流信息上传到联盟链网络后,因为各部门严格按照CA证书的颁发来发放合法阅读器用户写入信息的权力,所以可以保证链上流通信息的真实性和有效性。

在各节点上传信息完成之后,一轮交易结束,我们选择合适的共识算法对交易进行排序并打包分发。实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)[19]共识机制由Miguel Castro和 Barbara Liskov于1999年提出,PBFT算法流程如图5所示。

图5 PBFT算法通信流程

可以看出,PBFT算法的“三阶段三广播”算法随着共识节点的增加,通信开销的压力将会非常明显。而kafka共识一直没有很好地解决去中心化的问题。因此,为了折中通信效率与恶意节点容错的需求,本文使用Raft一致性算法作为验证打包交易的共识算法。

Raft算法协议中,一个节点任一时刻都处于leader、follower、candidate三个状态之中。简单示意图如图6所示,每个节点都处于三个状态的转换之中,基于复制状态机[20]的实现,通常在不考虑节点容错的情况下有较好的通信效率。

图6 Raft三状态状态机简单示意图

Fabric1.4版本中已经提供了Raft共识的排序服务。本文在Fabric中配置好raft-etcd模块,在物流系统中每个部门里贡献一个排序节点,共同组成交易排序服务,更好地体现了区块链网络的去中心化。

3 安全性分析

本文针对物流领域易出现的RFID安全问题,着重探讨了物流联盟链中初始数据采集的安全隐患。本节的安全隐患从两大角度、三个方面对面向联盟链的RFID流通高效保护模型进行安全性分析。跟踪攻击和罗列攻击是对RFID安全性而言的,而不可篡改性是从区块链安全交易的角度出发的。

3.1 跟踪攻击

跟踪攻击的发生很大程度上是因为RFID标签每次响应RFID读写器的请求时,都返回相同的序列号。即使潜在的非法阅读器读取了标签tAdd的序列号信息,由于无法破解CA机构的密钥,攻击者获取不到任何有用的产品流通信息。因此,设计的方案可以抵抗跟踪攻击。

3.2 重放攻击

假设攻击者企图通过监听一个完整的CA通信后,发动重放攻击。由于证书中是加密后传输的,并发明文。同时假如攻击者通过利用其余合法阅读器的一次CA过期交易来发动重放攻击,也可以通过区块链交易独一无二的时间戳,来有效抵御重放攻击。

3.3 不可篡改性

4 TDBPC性能分析

4.1 实验设置

本文基于Fabric平台进行联盟链性能仿真实验。实验基于OpenSSL工具测算了CA证书颁发的Hash算法的时间开销,并采用Hyperledger-fabric v1.4.0版本的开源框架,对系统的性能进行评测。

4.1.1实验步骤

本文在供应商组织的一个peer节点上创建并配置好Raft模块。然后,完善配置文件并在四个peer节点中安装设计好的智能合约链码,启动区块链网络。cli客户端向区块链网络中的节点提起交易请求,在固定时间内连续对各cli容器发送交易,背书节点依据数字签名验证客户端的合法性后,执行智能合约交易,并由orderer节点排序打包分发给各peer节点。

本文采用每秒交易数量(Transacitons Per Second,TPS)来测算TDBPC模型的吞吐量:

(1)

式中:Δt为交易从发出到确认的时间间隔,也就是出块时间;sumTransactionsΔt为Δt内区块中的交易总数。为了更好地探究peer节点数目n和出块时间Δt对TPS的影响,本文控制变量设计了如下两组实验:

(1) 控制peer节点数目固定为4个。选取时间间隔(出块时间)分别为10 s、20 s、40 s、80 s、150 s,每个时间间隔做3次实验,并取各次实验的TPS平均值,探究TPS与出块时间的关系。

(2) 控制出块时间Δt固定为40 s。分别选取网络中2、4、8、12、16个peer节点作为模拟交易节点,同样每次做3次实验,并取各次实验的TPS平均值,探究TPS与参与交易的peer节点数目的关系。

4.1.2实验环境

区块链网络中配置Raft共识节点为区块链网络提供账本分发和出块服务。因Raft数据同步节点必须为奇数的要求[20],我们在实验中配置5个orderer节点。

实验在配置为i5-E52620 2.10 GHz处理器、32 GB内存的Linux系统下,搭建若干台虚拟机进行联盟链模拟交易的仿真实验。各节点均安装Golang1.11和Docker18.09开发工具。当网络中有4个peer节点参与交易时,配置情况如表4所示。当进行4.1.1中第二组实验时,添加和删除区块链网络中的peer交易节点,其配置信息类似,不再赘述。

表4 节点配置信息

4.2 实验结果与分析

4.2.1 CA证书颁发时间开销

联盟链各部门节点首先为合法阅读器用户颁发CA准入证书。我们在10.10.64.203的对应供应商组织的节点上使用OpenSSL工具测算了CA证书颁发的Hash算法的时间开销,该开销如表5所示。

表5 Hash算法的时间开销

4.2.2 TPS性能分析

实验中,我们将100条模拟的物流数据分成四组,分别对应供应信息、生产信息、配送信息、零售信息,一段时间内重复不断发送交易数据,用户端在各自的peer节点上填入合约参数执行交易,并依据Raft共识由orderer节点确认出块。

(1) TPS与出块时间的关系。本文使每个组织贡献一个peer节点,采用4个peer节点固定不变,在10 s、20 s、40 s、80 s、150 s五个不同的时间间隔下,每个时间间隔测试3次,最后取3次实验的TPS平均值。结果如表6所示。

表6 不同时间间隔交易确认数量表

为了直观地说明TPS随出块时间变化的关系,按照式(1)得到如图7所示的关系。

图7 TPS随出块时间变化图

可以看出,当出块时间超过40 s,交易数量的增长率明显降低,TPS随着区块数量的增多随之减慢。原因在于当网络中的区块增多,交易数量超过单个节点的处理能力时,系统会线程阻塞,TPS会有明显的下降。

(2) TPS与peer节点数目的关系。本组对比实验控制每次实验的时间间隔均为40 s,每当交易产生40 s后终止实验。最开始从供应商和生产商组织中各取1个节点共2个节点进行模拟交易,并依次增加节点为4、8、12、16个peer节点共5组进行联盟链模拟实验。同样地,每个peer数目执行3次测试并取TPS平均值。结果如表7所示。

表7 不同peer节点数目交易数量表

为了全面评测算法的性能,将本实验中不同peer节点数目的TPS情况和目前最为成熟的支持智能合约的Ethereum和Paity项目作了对比,结果如图8所示。可以看出,以太坊平台和Raft共识在网络中存在大约8个peer节点的情况下,拥有最优的吞吐量性能。同时值得注意的是,当fabric网络中超过16个peer节点后,整个系统会无法工作甚至崩溃。因此,选取合适的节点数目,对联盟链系统的性能起着决定性的作用。

图8 三类智能合约平台TPS随节点数目变化图

综上两组实验,使用Raft共识的etcd-raft模块,系统的吞吐量可以稳定达到2 000 TPS左右,基本满足了商用价值。将联盟链应用于RFID产品流通来对流通中的标签进行高效保护,不但可以通过CA数字证书防范恶意阅读器用户的访问请求,而且联盟链还使用了Raft算法满足了物联网和RFID环境下多节点、动态性等要求。当然,TPS这一性能指标如果没有达到一个数量级的差异,其实并不需要太多关注,因为在实际配置和应用中,网络带宽、硬件配置、节点数量等变量都会对TPS的数值产生影响。

4.3 与现有方案的比较

RFID安全问题在应用场景的差异下,技术实现难度、成本高低、适用范围大小、有效性优劣都可以作为在各应用场景下RFID保护的评价标准。表8从这几大维度比较了本文方案与现有优秀的RFID安全解决方案。结果表明本文方案基于物流联盟链能够保护RFID标签安全,同时在交易性能上稳定且高效。

表8 本方案与现有RFID隐私保护技术比较

5 结 语

随着物联网时代的到来,供应链物流领域中RFID作为终端采集设备存在诸多安全隐患。本文从产品流通的场景出发,结合联盟链多组织使用CA手段隔离非法阅读器客户端,以去中心化的方式保证标签产品的数据安全。安全性分析表明,CA机制可以隔离潜在的非法阅读器对标签数据的读写访问。同时联盟链性能分析表明,采用折中的Raft共识算法,联盟链的运行效率较为可观。下一步将在实验中采取多通道的设计,实现更为负责的对标签产品的业务功能,同时也实现更细粒度的数据隔离,以解决RFID在物流领域中大规模应用的瓶颈。

猜你喜欢
阅读器证书标签
IES四大核心期刊证书
《安徽医学》统计刊源证书
少就是多
The Magna Carta
Winner Takes All
不害怕撕掉标签的人,都活出了真正的漂亮
让衣柜摆脱“杂乱无章”的标签
亚马逊推出全新Kindle Paperwhite电子书阅读器
科学家的标签
科学家的标签