肖长水,姒茂新,傅颖丽,方立刚,顾才东
(1.江苏省现代企业信息化应用支撑软件工程技术研发中心,江苏 苏州215104;2.苏州市职业大学 计算机工程系,江苏 苏州215104)
目前的云存储系统还难以提供可信的云存储服务,可能会因为系统BUG而出现无法预料的拜占庭错误问题[1],或者因为云服务供应商不能向用户提供透明的数据管理服务而存在信息泄露的可能。为了提高云存储服务的安全性,对用户数据进行机密性保护和完整性验证等策略被采用,一些学者提出了数据拥有的证据 (PDP)或可恢复性证据(POR)[2-7]等方法,且文献 [7,8]给出了第三方验证的系统结构模型以实现用户数据完整性验证。为了提高云服务的可信性,NEISSE R等针对使用虚拟机的云计算系统平台,设计了一个BonaFides系统为云基础设施提供安全相关的远程证明,并建议了在云基础设施运行期间进行软硬件完整性验证的解决方案[9];KO R K L等设计了可通过技术和基于策略的方法实现可问责的可信云框架[10],并设计了一个可记录云系统中虚拟机和物理机的内核空间内文件级访问和信息传递的记录器Flogger,以实现向用户提供可信服务[11]。侯清铧等设计了一种保护云存储平台上用户数据私密性的方法,对Daoli系统进行改进,设计了两个保护用户数据的方案[12]。通过对以上文献的研究发现:① 云存储服务供应商提供的存储服务对用户是不透明的,用户无法检验存储到云端的数据是否被偷窥、篡改或者破坏,现有的机密性保护和完整性验证方法强调对云存储系统本身或用户数据的安全保护,但没有强调用户的直接参与安全管理;② 第三方验证方案是假设第三方是可信的,但第三方是否可信对用户来说也存在安全隐患[13]。针对以上问题,本文设计了一个自认证可信云存储框架。该框架中设计了两级Merkle哈希树对用户数据进行管理,并在此基础上设计了用户进行数据安全管理的数据更新、插入、删除、验证等算法。用户在无需第三方介入的情况下,直接参与数据安全管理,提高了用户数据的安全性。
一个基本的云存储系统的网络架构是由客户端(client,C)和云端服务器集群 (cloud sever cluster,CSC)组成[14],如图1所示,与传统的C/S网络架构有类似之处,但在云端服务器集群组建和数据处理方式上有着本质的区别。在云端服务器集群的组建方面,主要涉及两类服务器,一类是名字服务器 (name server,NS),另一类是数据服务器 (data server,DS)。NS主要功能是实现对用户数据的存储管理和控制,主要用来存储与管理和控制相关的元数据,是云端服务器集群的主服务器;DS的主要功能是存储用户数据,其数量较多。图1中标注的云存储系统中数据处理基本过程如下:
(1)C向CSC中的NS提出存储数据请求;
(2)NS周期地查询DS,不断更新自己的数据块列表;
(3)NS根据空闲数据块分配策略,告知C可供存储空闲数据块的具体位置;
(4)C根据NS提供的空闲数据块的具体位置,直接将用户数据存储到指定的DS上。
图1 云存储原理
C需要进行的数据管理主要有读写、更新、删除,这些操作的具体过程和上面所提的过程相似,都要在NS的控制下完成。
与第三方参与的安全框架不同,在所设计的自认证系统中用户可以直接对CSC上的数据进行完整性验证,C需要参与安全管理。如图2所示,C所包含的组件有证书服务器、数据验证器、数据加密器和数据处理器;而在CSC上,NS担当了数据管理任务,NS包含的组件有证书服务器、数据验证器和元数据管理器。
图2 云存储安全框架
在自认证系统中,C组件和CSC组件之间的关系如下:
(1)证书管理器,生成证书、交换证书和管理证书,实现C和CSC之间或C之间的身份认证,以防范假冒和伪造攻击;
(2)数据验证器,采用单向HASH函数基于一定的算法验证用户数据完整性;
(3)数据处理器与元数据管理器,两者之间实现对用户数据存储管理,C的数据处理器向CSC上NS的元数据管理器提出存储、更新、删除数据等操作,元数据管理器将根据用户文件列表和DS的存储空闲块列表完成数据处理器的请求;
(4)数据处理器与DS,C的数据处理器根据NS响应的信息实现在DS上进行存储和更新用户数据功能;
(5)元数据管理器与DS,元数据管理器查询DS实现对数据空闲块列表和用户文件列表更新,元数据管理器根据一定的心跳频率与DS通信以查询DS中用户数据状态和空闲数据块状态。
此外,C的数据加密器采用密码学技术加密用户数据,实现对用户数据的机密性保护。数据加密器在加密用户文件后,再通过数据处理器存储到CSC。
Merkle哈希树 (merkle hash tree,MHT)是由 Merkle于1979年提出的,由于概念简单和易用,已经被广泛应用在各种基于密码学的信息安全方案中。目前,一些商用云存储系统已经使用MHT来保障数据安全性,如在Amazon平台基础存储架构Dynamo中[15],MHT被用来检测数据是否同步。
一个MHT就是一个完全二叉树,叶子节点是需要进行处理对象的哈希结果,其它节点是从叶子节点开始依次分层再哈希的结果,直至根节点。在所提出的云存储框架中,设计了两级MHT,一级是数据块Merkle哈希树 (Data Blocks MHT,DBMHT),另一级是文件 Merkle哈希树(Files MHT,FMHT),如图3 (a)(b)所示。此框架中的Merkle哈希树构建的特点如下:
图3 两级Merkle哈希树
(1)叶子节点由两个节点组成,下层的节点fi或bi(i∈N+)为处理对象节点,包含一些代表处理对象属性的元数据;上层的节点hfi或hbi(i∈N+)为处理对象节点中数据的哈希值节点。
(2)FMHT与DBMHT中均采用三叉链表存储结构,以实现对树进行快速的创建、查询、删除和更新功能;且每个哈希树的叶子节点中的处理对象从左至右形成一个双向链表的存储结构,分别为文件链表 (files linked list,FLL)和数据块链表 (data blocks linked list,DBLL),可以实现对DBMHT和数据块进行快速查询。
(3)在MHT中的每个节点中均设置一个标志位Flag,用来标记该节点是否为有效节点,若值为 “0”表示无效,值为 “1”表示有效,用以实现对节点的逻辑删除。
(4)每个FMHT的处理对象节点均通过指针指向自己的DBMHT。
(5)在所设计的云存储系统中,一个用户创建一个FMHT,每个文件创建一个DBMHT,形成两级关系。
在所设计的框架中,我们的目标是用户对存储到云集群系统的数据应该是具有可验证安全性。为此,该框架应该满足3个安全要求:用户与集群系统身份的可验证、用户数据的保密性和用户数据完整性的可验证性。为实现以上安全性要求,该框架的关键功能定义如下:
(1)KeyGen(1λ):这是非对称密钥生成算法,C生成非对称密钥对 (skc,pkc),其中的公钥pkc将分发给CSC的名字服务器NS;在CSC的NS中生成非对称密钥对(skcsc,pkcsc),其中的公钥pkcsc将分发给C。
(2)CertGen(x,pkx):这是证书生成算法,C的证书管理器生成具有自己公钥和身份标识的证书CertGen(c,pkc),在CSC的NS中的证书管理器生成具有自己公钥和身份标识的证书CertGen(csc,pkcsc);C在第一次向CSC申请存储空间时相互交换证书,交换的证书将是后续进行对用户数据管理的身份和数据源识别,以及对数据进行加密。
(3)Encrypt(data,key,mode):这是可以工作在C和CSC的加密算法,参数data是需要加密的数据,key表示加密密钥,mode表示加密算法类型,取值 “asym”是非对称算法,取值 “sym”是对称算法。
(4)Decrypt(data,key,mode):这是可以工作在 C和CSC的解密算法,参数data是需要解密的数据,key表示解密密钥,mode表示解密算法类型,取值 “asym”为非对称算法,取值 “sym”为对称算法。
(5)SignGen (skx,H (m)):这是签名生成算法,H(m)是通过哈希函数对消息m计算得到的消息摘要;C可以通过自己的私钥skc对CSC的消息m的摘要H (m)进行签名得到SignGen(skc,H (m));同样地,CSC的NS可以通过自己的私钥skcsc对C的消息m的摘要H (m)进行签名得到SignGen (skcsc,H (m))。
(6)Verify (pkx,SignGen (skx,H (m))):这 是验证签名算法,实现对接收到的SignGen(skx,H (m))进行验证以确认消息m的来源和完整性;C使用CSC的NS的公钥pkcsc验证CSC的消息m的来源和完整性,即C的验证算法为 Verify (pkcsc,SignGen (skcsc,H (m)));反之,CSC的NS可以通过C的公钥pkc验证C的消息m的来源和完整性,即CSC的验证算法为 Verify(pkc,SignGen(skc,H (m)))。
根据设计目标,要实现用户对存储到云集群系统的数据具有可验证安全性,用户端应该具备一些和云集群系统相同的功能。用户在第一次向CSC提出存储数据请求时,需要和CSC进行数字证书交换,为在后续的操作中实现身份认证和数据源认证。其次,用户第一次存储数据到CSC时,建立本地FMHT和DBMHT,CSC的NS会根据存储块建立自己的FMHT和DBMHT;用户在后续的数据处理(如删除、插入、更新等)或数据完整性验证处理中通过比较CSC的NS的FMHT和用户本地FMHT的根即可以验证用户数据的完整性。
用户第一次通过C向CSC存储数据,需要进行初始化。在客户端,用户通过KeyGen(1λ)生成自己的密钥对(skc,pkc),并通过 CertGen (x,pkx)生成自己的证书CertGen (c,pkc)。在云端,CSC的 NS通过 KeyGen (1λ)生成自己的密钥对 (skcsc,pkcsc),并通过 CertGen (x,pkx)生成自己的证书CertGen(csc,pkcsc)。C和CSC交换证书,以备进行身份认证和安全的信息交互。C为保证存储数据的保密性,将文件F进行加密得到Fen=Encrypt(key,F,sym);然后,根据CSC的数据块存储大小将文件Fen划分成n个数据块,即Fen= (b1,b2,…,bn),计算bi的哈希值φi=H (bi)作为DBMHT的叶子节点,得到φi的集合 Ф= {φ1,φ2,…,φn},非叶子节点 H (b)=H (H (bleft)H (bright)),依次构造出根为H (Rb)的DBMHT;类似地,以H (Rb)作为FMHT的叶子节点,用同样的方法构造根为H (Rf)的FMHT。接下来,C需将 {Fen,SignGen (skc,H (Rf)Ф)}发 送 给CSC的NS。在CSC,NS进行签名验证 {Fen,Verify(pkc,Sign-Gen (skc,H (Rf)Ф)},若验证成功则得到 {Fen,Ф,H(Rf)}。NS将收到的 Fen划分成 n个数据块 (b'1,b'2,…,b'n),计算b'i的哈希值φ'i=H (b'i)得到φ'i的集合 Ф'= {φ'1,φ'2,…,φ'n}。比较 Ф'和 Ф,如果不相等,则Fen是不正确的,需要C重传;否则,NS保存Fen并根据 {Ф,H (Rf)}重新构建自己的FMHT和DBMHT,得到H (R'f)。NS通过签名将 H (R'f)发给C,C对 H(R'f)进行验证,并与 H(Rf)比较来判断用户初始化是否成功。
用户在第一次通过C向CSC进行数据存储,实现了C和CSC的安全联盟,建立各自的FMHT和DBMHT。用户对CSC的数据算法是非常平常的,主要的数据处理算法包括数据更新、数据插入和数据删除。
(1)数据更新算法
用户存储到CSC的是文件F的加密文件Fen,用户对Fen进行更新实际是对F的更新,而数据更新可以以文件或数据块为单位进行。此处给出以文件为单位的数据更新算法如下:C备份FMHT和DBMHT,以备更新失败进行恢复;C将修改后的新文件F'en划分成n块,计算φ'i=H (b'i)得到各块的哈希值集合 Ф',重构DBMHT得到 H (R'b),并重构FMHT得到H (R'f);C将要修改的文件Fen的DBMHT的根 H (Rb)和修改后的文件F'en的 Ф'进行签名SignGen (skc,H (Rb) Ф');C将数据 {F'en,SignGen(skc,H (Rb)Ф')}发送给CSC的NS;NS对SignGen(skc,H (Rb)Ф')进 行 验 证 Verify (pkc,SignGen(skc,H (Rb)Ф'),如果失败就返回错误信息,C进行数据恢复,否则进行下一步;NS根据Ф'验证F'en的数据完整性,如果验证失败,则更新失败,C进行数据恢复,否则进行下一步;NS备份FMHT和DBMHT,且NS根据H(Rb)备份文件Fen,以备更新失败进行恢复;存储文件F'en,根据 Ф'重新计算 DBMHT 得到 H (R'b),并重构 FMHT得到H (R'f);NS将H (R'f)通过签名返回给C与 H(R'f)进行验证,如果验证成功,则完成更新,否则更新失败,NS和C进行数据恢复。
(2)数据插入算法
当用户要向CSC上增加新的存储文件时,需要执行数据插入算法。插入算法和用户第一次向CSC进行存储数据进行初始化类似,不同的是在已经初始化的C和CSC端的FMHT和DBMHT插入新数据的管理节点。用户要将自己的新文件F的加密文件Fen存储到CSC上,其数据插入算法如下:C备份自己的FMHT和DBMHT;C将Fen进行数据块分割,即Fen= (b1,b2,…,bn);C计算bi的哈希值φi=H (bi),得到φi的集合 Ф= {φ1,φ2,…,φn};C构建Fen的DBMHT得到H (Rb),并将H (Rb)作为叶子节点插入根为H (Rf)的FMHT,重构FMHT得到H (R'f);C将数据 {Fen,SignGen (skc,H (Rb)Ф)}发送给CSC的NS;NS对SignGen (skc,H (Rb)Ф))进行验证Verify (pkc,SignGen (skc,H (Rb)Ф)),如果失败就返回错误信息,C进行数据恢复,否则进行下一步;NS根据Ф验证Fen的数据完整性,如果验证失败,则更新失败,C进行数据恢复,否则进行下一步;NS备份FMHT和DBMHT,以备更新失败进行恢复;NS保存Fen,根据Ф构建DBMHT得到 H (R'b),然后再将 H (R'b)以和C相同的方式插入自己的FMHT,重构FMHT得到新的H(R'f)。NS将 H (R'f)通过签名返回给 C与 H (R'f)进行验证,如果验证成功,则完成更新,否则更新失败,NS和C进行数据恢复。
(3)数据删除算法
用户可以对CSC上的数据进行删除算法,以文件为单位进行处理。该删除算法包含两种处理方法:一是逻辑删除;二是物理删除。逻辑删除并不会删除存储到CSC上数据块,而是在FMHT和DBMHT上的相关节点的标志位“1”修改为 “0”,表示为无效节点;在必要的时候还可以将逻辑删除的文件恢复。物理删除则会将存储到CSC上的数据块释放,被删除文件的DBMHT也会释放,而FMHT中的相关节点的标志位 “1”修改为 “0”,或者会重构FMHT。
用户将数据存储到CSC,为保证存储数据的安全性仅对用户透明,用户可以随时验证存储数据的安全性。但可能存在的数据安全威胁主要来自于两个方面:一是云存储系统自身的安全脆弱性;二是传输网络存在的安全脆弱性。在所设计的框架中,用户要实现对数据的完整性验证,前提是能够判断第一个威胁是否产生,就是CSC对用户存储数据进行验证。具体来说,CSC的NS可以通过一定的心跳频率来验证用户存储的数据是否完整,如果有某个数据块丢失或者受到篡改,则通过计算数据块的哈希值来重构DBMHT和FMHT。在任何时候,用户只要验证NS的FMHT就可以实现数据完整性验证。
NS上对某一用户数据的心跳验证算法如下:NS获得用户存储文件 Fen的数据块b'i,计算其哈希值 φ'i=H (b'i);NS查询自己的DBMHT的bi的哈希值φi=H (bi);NS比较φ'i和φi,如果相等,则查询下一数据块,否则数据块bi受到了破坏,记录块号i和哈希值φ'i以及相应的文件标识符FID记录到用户数据日志UserDataLog,继续查询下一块;根据记录的错误数据块重构DBMHT和FMHT。
用户通过C对数据的验证算法如下:C提出查询NS的FMHT根Rf的请求chal(Rf);C对chal(Rf)进行签名SignGen (skc,chal(Rf)),并将该签名发给 NS;NS对C的签名进行验证 Verify (pkc,SignGen (skc,chal(Rf))),如果验证失败,请求C进行重发,否则继续;NS根据C的查询请求chal(Rf)对用户存储在NS上的FMHT根的哈希值 H (R'f)进行签名SignGen (skcsc,H (R'f)),并将该签名发送给C;C对NS的签名进行验证Verify(pkcsc,SignGen (skcsc,H (R'f))),如果验证失败,请求 NS进行重发,否则继续;C将H (R'f)与自己的FMHT根的哈希值H (Rf)进行比较,如果相等,则验证成功,否则验证失败,进行下一步错误定位;C向NS发出查询用户存储在NS上的所有DBMHT根Rb的请求chal(Rb);NS根据FLL获得要查询的所有Rb哈希值 Ω'= {H (f'1),H (f'2),…,H (f'n)},并对 Ω'进行签 名 SignGen (skcsc,Ω')发给C;C对NS的签名进行验证Verify(pkcsc,SignGen(skcsc,Ω')),如果验证失败,请求NS进行重发,否则继续;C将 Ω'与自己的 Ω= {H (f1),H (f2),…,H(fn)}进行比较,找到错误文件Fi进行更新。
在云存储系统中,用户通过C以租赁空间的方式将数据存储到云存储服务供应商的CSC上。用户数据可能遭遇的安全威胁主要来自于两个方面:一是CSC系统自身的安全脆弱性导致拜占庭将军失败问题,或者CSC系统因不可信而对用户数据蓄意偷窥或篡改;另一方面是来自第三方对CSC系统和数据恶意攻击导致用户数据遭受泄漏、篡改或破坏。规避以上安全威胁的主要方法是确保数据的机密性和完整性。机密性保证可以基于数学难题的密码技术来保证,而数据完整性可以根据哈希函数的单向不可逆性以及和非对称密码技术结合而成的数字签名技术实现。然而,最终确保用户数据安全性在于基于以上技术设计C与CSC之间信任模型[16]。
C与CSC之间的信任模型有两种:一是文献 [7]等提出的第三方验证的层次信任模型;另一种就是无需第三方的对等信任模型。根据信任模型原理,信任本身存在安全风险,而风险的大小取决于信任链的长度,信任链越长安全风险越大。设TP表示第三方,那么基于第三方验证的层次信任模型的信任链为:C→TP→CSC,且CSC→TP→C。
而无第三方验证的对等信任模型的信任链为:C→CSC,且CSC→C。
显然,采用对等信任模型的安全风险更小。在所设计的安全框架中,采用用户直接参与云端的用户数据安全管理,以实现数据管理对用户透明。首先,在用户身份与数据源认证方面,证书管理器生成证书,并完成C到CSC的证书交换,建立C与CSC之间的对等模型的信任关系。分发给对方的证书中包含着各自产生的非对称密钥的公钥,以实现在C与CSC之间的通信中完成数据源认证。其次,用户采用现代密码学技术将文件以加密方式存储到云端,用户文件的安全管理仅向用户透明,无需第三方参与,从而保证了用户数据的机密性。此外,在用户数据完整性验证方面,框架中的FMHT和DBMHT是用户存储数据的哈希散列值构造树,通过对树中的根或其它节点的数据验证,可以判断用户存储在云端的数据是否安全。
框架中的C与CSC之间所构成的对等信任关系属于对等信任模型中以CSC为中心的简单星型对等模型,C与CSC之间的自认证关系简单,尚不会引起死锁和抖动。
对该框架的系统性能分析主要考虑算法的时间开销,这将取决于用户Merkle哈希树的规模和数据验证失败的概率,即CSC和传输链路使用户数据出现了错误。
每次用户进行数据完整性验证时,只需要验证用户存储在云端的FMHT的根哈希是否正确,如果正确,则其时间复杂度仅为O(1);如果用户验证存储在云端的FMHT的根哈希不正确,则需要进一步查找出错误文件,并对文件进行更新,将会花费更多的时间开销。
完全二叉树的性质:一个有n个节点的完全二叉树,其叶子节点数为
在设计的框架中,采用三叉链表的存储结构,可以快速查询父节点,对有n个节点的FMHT或DBMHT,构建和更新FMHT或DBMHT的时间复杂度分别为O(log2n);查找叶子节点的时间复杂度是O (n),根据上面的性质,采用DBLL和FLL不能改变查找叶子节点的时间复杂度,但可以将其时间频率降低一半。
总之,将以上分析结果与文献 [8]中所提方案相比,虽然在时间复杂度方面相似,但由于采用两级Merkle哈希树设计,以及设计DBLL和FLL对叶子节点进行查找,在算法执行的时间频率上有了很大的提高。
所设计的框架是采用基于现代密码学和数字签名技术的对等信任模型以实现用户数据在云存储系统上的安全管理,消除了采用层次信任模型的不可信第三方审计带来的安全风险,给出了用户对云端数据的主要管理算法,但没有考虑如何在不同用户之间实现文件共享。框架中采用两级Merkle哈希树来实现对用户数据的安全性验证,当用户数据量增大时能够实现更加高效的计算。该框架的客户端需要有一定的计算能力,能够实现哈希运算和构建Merkle哈希树等功能,在计算能力较弱的移动设备上应用还存在局限性。未来的研究可以在该框架的基础上进一步研究不同用户之间实现文件共享,以实现向移动计算上迁移;并进一步研究共享所带来的认证复杂性。
[1]LI Chuanyou,WANG Yun.State synchronization for new member join in Byzantine-tolerant environments [J].Journal of Southeast University (Natural Science Edition),2010,40(1):23-28 (in Chinese).[李传佑,汪芸.拜占庭环境下新成员加入容错组状态同步 [J].东南大学学报 (自然科学版),20100,40 (1):23-28.]
[2]Aterniese G,Burns R,Curtmola R,et al.Provable data possession at untrusted stores [C]//ACM Conference on Computer and Communications Security,2007:598-609.
[3]Juels A,Kaliski B.PORs:Proofs of retrievability for large files[C]//ACM Conference on Computer and Communications Security,2007:584-597.
[4]Sacham H,Waters B.Compact proofs of retrievability [G].LNCS 5350:Proceedings of Asiacrypt,2008:90-107.
[5]Bowers K D,Juels A,Oprea A.Proofs of retrievability:Theory and Implementation [C]//Proceedings of the ACM Workshop on Cloud Computing Security,2009.
[6]Aterniese G,Pietro R D,Mancini L V,et al.Scalable and efficient provable data possession [C]//Proc of Secure Comm,2008:1-10.
[7]WANG C,REN K,LOU W.Ensuring data storage security in cloud computing [C]//Proc of IWQoS,2009.
[8]WANG Q,WANG C,LI J,et al.Enabling public verifiability and data dynamics for storage security in cloud computing [G].LNCS 5789:European Symposium on Research in Computer Security,2009:355-370.
[9]Neisse R,Holling D,Pretschner A.Implementing trust in cloud infrastructures [C]//11th IEEE/ACM International Conference on Cluster,Cloud and Grid Computing,2011:524-533.
[10]KO R K L,Jagadpramana P,Mowbray M,et al.TrustCloud:A framework for accountability and trust in cloud computing[C]//Proc IEEE 2nd Cloud Forum for Practitio-ners.IEEE Computer Society,2011:1-5.
[11]KO R K L,Jagadpramana P,Lee B S.Flogger:A file-centric logger for monitoring file access and transfers within cloud computing environments [C]//Proceedings of the 10th IEEE International Conference on Trust,Security and Privacy of Computing and Communications,2011.
[12]HOU Qinghua,WU Yongwei,ZHENG Weimin,et al.A method on protection of user data privacy in cloud storage platform [J].Journal of Computer Research and Development,2011,48 (7):1146-1154 (in Chinese).[侯清铧,武永卫,郑纬民,等.一种保护云存储平台上用户数据私密性的方法[J].计算机研究与发展,2011,48 (7):1146-1154.]
[13]Stdaily.com.Microsoft and Google give in,because of encountering with USA Patriot Act like the dark clouds [EB/OL].[2011-08-16].http://www.stdaily.com/special/node_7171.htm (in Chinese).[中国科技网.微软谷歌相继屈膝 美爱国者法案阴 “云”笼罩 [EB/OL].[2011-08-16].http://www.stdaily.com/special/node_7171.htm.]
[14]LIU Peng.Cloud computin [M].2nd ed.Beijing:Publishing House of Electronics Industry,2011:5-6 (in Chinese).[刘鹏.云计算 [M].2版.北京:电子工业出版社,2011:5-6.].
[15]Decandia G,Hastorun D,Jampani M,et al.Dynamo:Amazons highly available key-value store [C]//Proceedings of twenty-first ACM SIGOPS Symposium on Operating Systems Principles,2007.
[16]ZHAO Tiezhu,MEI Denghua.Multi-factor dynamic trust model based on P2Pnetwork [J].Computer Engineering and Design,2009,30 (3):569-575 (in Chinese).[赵铁柱,梅登华.基于P2P网络的多因子动态信任模型 [J].计算机工程与设计,20090,30 (3):569-575.]