張曉琳,何曉玉,于芳名,劉立新,張換香,李卓麟
1(內蒙古科技大學 信息工程學院,內蒙古 包頭 014010)2 (中國人民大學 信息工程學院,北京 100872)
隨著互聯網技術的飛速發展,社會網絡,無論是社交網站(Wechat、Facebook、Twitter等)還是用戶交互網絡(如emails、blogs、文件分享系統)已然成為當今人們日常網絡生活中不可或缺的一部分.用戶主動或被動提交的好友互動記錄、興趣愛好、消費信息等包含了大量社會結構信息和屬性信息,但隨著用戶網絡形象的進一步豐富,能夠用于確定用戶真實身份的信息也越來越多,如何保護網絡數據中隱私信息的安全性成為隱私保護研究的熱點問題.如圖1所示,社會網絡表示成簡單無向圖,圖中的節點和邊分別對應社會網絡中的個體以及個體間的聯系.社會網絡中個體的屬性信息,如年齡,在圖中則用節點的標簽來代替.如若節點具有多個標簽,則將這些標簽稱為節點的標簽列表,如(Afri,20)是節點1的標簽列表.
社會網絡圖中,節點的標簽信息尤為重要,攻擊者能夠將標簽信息作為背景知識對節點進行重識別.在圖G中,假如攻擊者獲知目標是一個28歲的亞洲人,由于節點標簽的唯一性,攻擊者很容易從圖G中重識別出節點5.

圖1 社會網絡圖GFig.1 Social network graph G
為了抵抗通過節點標簽為背景知識的重識別攻擊,研究者提出了不同的隱私保護技術[1,2],通過標簽范化等方法使得社會網絡圖節點的標簽不唯一而達到隱私保護的目的.文獻[3]指出即使個體的身份信息被有效的隱藏,攻擊者仍能推測出個體的鏈接關系.以圖G為例,如若攻擊者得知目標是一個25歲的亞洲人,此時,攻擊者由圖G得到節點2和3.盡管這種情況下無法唯一確定目標,但由于節點2和節點3之間存在邊,無論兩者誰是攻擊目標,攻擊者都可以認為攻擊目標與亞洲人存在聯系.此外,隨著社會網絡的普及與發展,社會網絡數據的規模不斷增大,呈現出海量化的趨勢.對于大規模社會網絡數據,傳統匿名技術已不能滿足實際需求,采用并行算法進行匿名處理是提高效率的有效途徑.如何對隱私保護技術進行并行處理并對社會網絡中個體提高有效隱私保護成為亟待解決的問題.
為了保護社會網絡中的隱私信息,研究者提出了不同的隱私保護方案.文獻[4]將屬性視作節點,利用分割用戶節點的方法保護隱私信息.文獻[5]提出 k-degree-l-diversity匿名模型,通過圖的匿名化操作使得分組內的節點具有相同的度信息且分組所包含的敏感標簽不少于L個.文獻[6]利用k-histogram和Full-domain泛化技術保護帶權社會網絡中的隱私信息,在匿名圖中,攻擊者通過節點權重包識別出節點的概率不大于1/K,通過節點標簽識別出節點的概率不大于1/L.文獻[7]提出一種利用節點子圖匹配相似度的多敏感屬性t-closenss匿名方案,保持了數據的高可用性.文獻[8]提出一種個性化的敏感屬性(α,k)-匿名模型用于滿足用戶的個性化需求.文獻[9]考慮到現實中用戶決定自己敏感信息因人而異的特點,提出一種基于相似性的分組匿名GSGA算法.文獻[10]將用戶交互社會網絡抽象成二分圖模型,通過為用戶產生一個標簽列表的方式抵抗重識別攻擊.文獻[11]針對目前的保護技術不能夠處理高維數據的缺點,提出一種節點帶標簽的二分圖匿名模型.文獻[12]提出一種utility-aware匿名方法,在進行k-degree匿名時同時考慮最短路徑和鄰居節點重疊度,提高了匿名圖的數據可用性.隨著社會網絡規模的不斷擴大,不少研究者提出了分布式處理的方案.文獻[13,14]提出了利用MapReduce模型在大規模圖中查找同構子圖.文獻[15,16]基于MapReduce模型對關系型數據進行匿名保護.文獻[17]提出基于SMC(Secure Multi-Party)模型的隱私保護方案.然而,目前的分布式隱私保護技術都是針對關系型數據的,沒有考慮個體在社會網絡中的圖性質特征不能很好地保護隱私信息.此外MapReduce將中間結果存放于磁盤,處理過程中需要反復遷移數據,并不適合處理圖數據.
GraphX[18,19]是Spark上用于圖和并行圖計算的處理系統,整個計算過程由若干順序執行的超級步(Superstep)組成.GraphX在編程模型上遵循“節點為中心”模式,在超級步S中,圖中節點匯總從超級步(S-1)中其他節點傳遞過來的消息,改變自身的狀態,并向其他節點發送消息,這些消息經過同步后,會在超級步(S+1)中被其他節點接收并做出處理.為了便于圖計算,GraphX引入了擴展自Spark RDD的屬性圖,并提供了一組基本功能操作,如圖構造操作、圖反轉等,以及優化的Pregel API.本文所研究的是利用GraphX對大規模社會網絡進行并行處理,保護隱私的同時提高算法的執行效率,主要工作及貢獻如下:
1) 提出一種分布式節點分組算法NGM(node group merge),基于GraphX的消息傳遞機制將互為N-hop鄰居的節點分為一組,有效的保護了敏感鏈接.
2) 提出了保護鏈接的分布式匿名方法DAPLR (Distributed Anonymous Protecting Link Relationships),基于GraphX對NGM產生的分組進行標簽匿名,使得匿名圖G*中,對于任意節點,都至少有其它(k-1)個節點包含自己的標簽.
本文假設攻擊者所具有的背景知識是節點的標簽信息,因此,將社會網絡表示成節點帶標簽的簡單無向圖G=(V,E,L,δ),其中V是節點集,每個節點表示社會網絡中一個用戶,E是邊的集合,代表網絡中用戶之間的鏈接關系,L是節點標簽集,δ:V→L是節點到標簽的映射.
定義1. (分組鏈接泄露) 已知社會網絡G=(V,E,L,δ),C是節點集V的一個分組,u、v是分組C中的兩個節點,即:u∈C,v∈C,若節點u、v存在鏈接關系,則稱分組C存在分組鏈接泄露.
如圖1中,若由節點1、2、3構建分組{1,2,3},由于分組{1,2,3}內節點1和2,2和3之間存在鏈接關系,則可知分組{1,2,3}存在分組鏈接泄露.
定義2.(安全分組) 社會網絡圖G=(V,E,L,δ),C是節點集V中的任意分組,Dist(u,v)表示節點u、v的最短路徑長度.如果分組C是安全的,則滿足條件:?u∈C∧?v∈C?Dist(u,v)≥2.
由定義2可知,分組C被認為是安全的當且僅當分組內任意兩節點u,v滿足:Dist(u,v)≥2.以圖G為例,給出一個安全分組過程.假設分組C={1},并且分組中節點數目為3,圖G中滿足定義2的為節點3,4,5,6,7.若選擇節點4構成分組 C={1,4},此時與節點1,4最短距離均不小于2的只有節點6,因此生成分組{1,4,6}.從圖G可以看出,分組{1,4,6}不存在分組鏈接泄露.為了說明這一點,下面給出嚴格的數學證明.
證明:反證法.假設分組C內存在分組鏈接泄露,即分組C中存在節點u、v構成邊(u,v),此時節點u、v的最短路徑長度Dist(u,v)=1,這與定義2中安全分組條件相矛盾,故假設不成立,分組不存在分組鏈接泄露.
定義3. (標簽統一列表)已知社會網絡圖G=(V,E,L,δ),C是節點集V中任意一個節點數目不小于m的分組,p={p0,p1,…,pk-1}是整數序列{0,1,…,m-1}一個大小為k(k≤m)的子集,若對 v C, 其標簽范化列表generlist.v由下面公式產生[10]:
list(p,i)={u(i+p0)modm,u(i+p1)mod m,…,u(i+pk-1)mod m}
(1)
如圖1中,假分組C={1,2},并選擇k=2,則節點1,2的標簽統一列表generlist.1={(Afri,20),(Asi,25)},generlist.2={(Asi,25) ( Afri,20)}.
DAPLR算法的主要思想:首先基于GraphX的消息傳遞機制,彼此互為N-hop鄰居的節點分為一組,然后標簽匿名每個分組,達到抵抗節點重識別攻擊和保護敏感關系的目的.
基于GraphX的“節點為中心”模式以及所提供的圖構建操作,提出一種安全分組算法NGM:首先,將節點劃分為不同的分組;其次,通過多次迭代執行“查找—合并—構建新圖”完成安全分組,即初始化時,為節點添加一個被稱為groupid的組信息,用來描述節點所在分組,其初始值為節點的nodeid;節點通過傳遞并修改groupid完成分組.在合并分組時,將Dist(u,v)設置為2,即只在2-hop鄰居間進行分組合并.因此,利用GraphX查找節點的2-hop鄰居成為問題的關鍵.
定理1.G=(V,E,L,δ)是簡單無向圖,其中?u∈V,?v∈V,節點u、v間的最短路徑長度用Dist(u,v)表示,w∈{s|s∈V∧Dist(u,s)=1},?w∈V且w∈{z|z∈V∧Dist(v,z)=1}.如果節點w是節點u的2-hop鄰居,即Dist(u,w)=2,則節點w滿足條件:
w∈{g|g∈V∧g≠u∧Dist(u,g)≠1}
證明:反證法.假設節點u、w不是2-hop鄰居,則u、w關系分三種情況:(1)Dist(u,w)>2;(2)u=2;(3)Dist(u,w)=1.若情況(1)成立,由題設Dist(u,v)=1,則此時節點v,w應滿足Dist(v,w)>1,這種情況下與定理1中的條件w∈{z|z∈V∧Dist(v,z)=1}相矛盾,故不成立.情況(2)和情況(3),如果兩者成立,可知此時與定理1中的條件w∈{g|g∈V∧g≠u∧Dist(u,g)≠1}相矛盾,故也不成立.綜上所述,假設不成立,節點w是節點u的2-hop鄰居.
這樣,利用GraphX通過兩次迭代找出2-hop鄰居節點.第一次迭代,所有節點向鄰居節點發送一個帶有自身groupid的消息,收到消息的節點生成1-hop鄰居列表;第二次迭代,所有節點將1-hop鄰居列表再轉發給鄰居節點,收到消息的節點遍歷所有列表,利用定理1找出所有2-hop鄰居,具體如算法1所示.
Algorithm1.Search 2-hop neighborhood
Input:messages
Output: The list of 2-hop neighborhood of vertex u
1 THNList←?;
2 long step = getSuperstep();
3 if step = = 0 then
4 for each vertex u do
5 sendMessToNeighbors (vertext.groupid);
6 else if step= =1 then
7 long neighborhoodlist=getValue(messages);
8 sendMessToNeighbors(neighborhoodlist);
9 else if step= =2 then;
10 for each messages do;
11 if the groupid isnot vertext u′s groupid then;
12 select groupid NotExistIN vertext u′s neighborhoodlist Into THNList;
13 return THNList;
以原始圖G為例,算法1如圖2所示,為了便于表述圖中省略了節點的nodeid,僅標出了groupid.
當Superstep=0時,節點向鄰居節點發送自己的groupid,即圖2(a)所示;如圖2(b),當Superstep=1時,節點收到消息后生成1-hop列表并將列表再次轉發給鄰居節點,如節點2生成1-hop鄰居列表{1,3},并將{1,3}轉發給鄰居節點;在圖2(c)中,即Superstep=2時,節點收到鄰居節點轉發的列表,然后遍歷所有的列表,列表中不是自己1-hop鄰居且不是自己groupid的值就是自己的 2-hop鄰居,如節點4,收到列表{2,4},{4}和{4,6},除去1-hop列表{3,5,7}和4,剩余的2,6就是自己的2-hop鄰居.經過兩次迭代后的最終結果如圖2(c)所示.

圖2 查找2-hop鄰居Fig.2 Search for 2-hop neighbors
完成2-hop鄰居查找后,利用“中間人”策略來進行分組合并.所謂的“中間人”是指節點的鄰居節點,如圖3(a)中,節點2就是節點節點1和3共同的“中間人”.其思想是:節點從2-hop鄰居列表中選出最小的groupid,將自己的groupid與此值以(key,value)形式發送給“中間人”, “中間人”根據收到的消息判斷哪些互為2-hop鄰居的節點能夠合并分組,具體如算法2所示.
Algorithm2.Group merge
Input:messages
1 long step = getSuperstep();
2 if step = = 0 then
3 for each vertex u do
4 long min=getMinValue(THNList);
5 sendMessToNeighbors ((vertext.groupid,min));
6 else if step= =1 then
7 long mergerlist=getValue(messages);
8 if IsExist (u.groupid=v.min and v.groupid = u.min) IN mergerlist then
9 sendMessToNeighbors(mergerlist);
10 else if step= =2 then
11 u.groupid=min{u.group,u.min};
以原始圖G為例,算法2如圖3所示.如圖3(a),算法執行3-5行,節點從2-hop鄰居列表中選出最小groupid,并以(key,value)形式發送給“中間人”;如圖3(b),執行7-9行,“中間人”判斷是否轉發消息,節點2滿足第8行,轉發{(3,1)(1,3)}給鄰居;圖3(c)中,執行第11行,節點3將自己的groupid為修改為groupid=1,節點4修改groupid為groupid=2.
每完成一次分組合并利用Spark提供的RDD(Resilient Distributed Datasets,RDD)構建一個新圖.當前圖的邊信息

圖3 節點分組合并Fig.3 Grouping and merging of nodes
GraphX的編程遵循“節點為中心”模式,即以節點為中心,通過彼此間的消息傳遞來獨立完成任務.因此,提出一種基于GraphX的節點標簽匿名算法,其思想是:首先,為每個分組產生一個相應的虛擬節點,其鄰接節點是分組中各節點;其次,分組節點以(key,value)的形式發送自己的nodeid和標簽列表給虛擬節點,虛擬節點收到消息后為分組中的節點產生標簽統一列表,并將標簽統一列表發送給分組節點;最后分組節點用標簽統一列表替換原有標簽列表完成匿名.如此,利用3個Superstep就能夠完成整個過程.
1)始狀態,左側的分組節點處于Active狀態,右側的虛擬節點處于Inactive狀態.
2)Superstep=0,左側分組節點以(key,value)形式發送nodeid和標簽列表給右側的虛擬節點.
3)Superstep=1,虛擬節點收到消息,根據定義4為分組中節點產生標簽統一列表,并將標簽統一列表轉發給右側分組節點.
4)Superstep=2,用戶節點收到消息后,將原有標簽列表修改為標簽統一列表.
具體如算法3所示.
Algorithm3.Generate Lable list
Input:messages
1 long step = getSuperstep();
2 if step = = 0 then
3 for each vertex u do
4 if isLeft() then
5 sendMessToNeighbors((vertext.nodeid,vertext.labellist));
6 else if step= =1 then
7 if notisLeft() then
8 long list=getValue(messages) ;
9 for vertext u in list do
10 new= (vertext.nodeid,vertext.generalizationlabellist);
11 sendMessToNeighbors(new);
12 else if step==2 then
13 if isLeft() then
14 long Anolabel=getValue(message);
15 setValue(Anolabel);
由于4.1節在分組時,并沒有考慮分組中節點的數目m的值,這個需要根據實際情況進行相應的調整.同樣以原始圖G為例,為了方便表述,原始圖G中節點1,2, …,7各自的標簽列表,分別用相應的符號t1,t2,…,t7來表示.以k=m=2為例,即分組中節點數目為2,因此,需要對4.1節產生的分組{1,3,5,7},{2,4,6}做出相應的調整,這里將原分組結果調整為{1,3},{2,4,6},{5,7},則算法3的執行過程如圖4所示.

圖4 標簽匿名Fig.4 Label anonymous
DAPLR算法包括節點安全分組和節點標簽匿名,因此,對算法的安全性從這兩部分進行分析.
定理2.已知圖G*是社會網絡圖G=(V,E,L,δ)由DAPLR算法得到的匿名圖,則當攻擊者以節點標簽為背景知識時,從匿名圖G*中識別出目標的概率為1/k.
證明:由4.2節可知,對于任意節點u,在匿名圖G*中都有其余(k-1)個節點包含u的標簽,因此當攻擊者以節點標簽為背景知識時,從G*中識別出目標的概率不大于1/k.
定理3.已知圖G*是社會網絡圖G=(V,E,L,δ)由DAPLR算法得到的匿名圖,則匿名圖G*不存在分組鏈接泄露.
分析DAPLR算法可知,需要證明NGM算法產生的分組內不存在鏈接,而定義2和定理1證明了NGM算法在分組合并中不會導致分組存在鏈接,因此只需要證明,新圖的構建不會導致分組內有鏈接存在.
證明:NGM算法的第i次構建的圖用Gi來表示,Si是圖Gi中的一個節點.根據算法1和算法2可知,Si是圖Gi-1中兩個互為2-hop的節點u和v構成的超級節點,因此節點Si的鏈接關系繼承點u、v的鏈接關系,即在圖Gi-1中節點u和v的1-hop鄰居節點,都會轉變成節點Si在圖Gi的1-hop鄰居節點,因此在第(i+1)迭代中不會將鏈接引入分組.

圖5 構建的新圖G1Fig.5 New graph G1
以圖1為例,NGM算法首次構建的圖5所示,在圖G1中,圖中圓圈中數字表示groupip,花括號中數字表示分組包含的節點.對比圖1可知,節點2、4將1-hop鄰居節點轉變成圖G1中節點2的1-hop鄰居,節點1、3亦是如此.通過實例也說明了NGM算法不會將鏈接引入分組.
實驗對DAPLR方法進行性能分析和評價,采用真實社會網絡數據集com-LiveJournl,其中com-LiveJournal數據集包含3,997,962個節點和34,681,189條邊.DAPLR隱私保護方法涉及到節點標簽而數據集并不包含標簽信息,因此實驗中人工生成節點標簽列表信息.每個節點的標簽列表由3個屬性構成:國籍(80個國家)、性別(男或女)、年齡(15~75),所有的值滿足同一分布.
為了便于對比,實驗將數據集隨機等分為5份并按1∶2∶3∶4∶5重新整合數據,產生5個數據集,即split1-split5;然后,利用三種算法對每個split進行匿名:1) 將社會網絡圖轉化為二分圖,在單工作站環境下利用文獻[10]進行匿名,運行結果記做“Bipartite”,2) 在單工作站環境下利用安全分組和標簽統一列表對社會網絡進行匿名,實驗結果記做 “Sequential”,3) 利用DAPLR算法匿名社會網絡圖,記為“DAPLR”.
實驗分別在單工作站和分布式環境匿名數據split1-split5,下面是兩種不同測試環境下的軟硬件配置:
單工作站環境:Intel Core i7-2720QM,CPU 2.2Ghz,16G RAM;操作系統:win7 旗艦版;編程語言:VC++2010
分布式環境:11個計算節點,Hadoop 2.7.2,Spark1.6.3; CPU 1.8GHz,16GB RAM,編程語言:Scala 2.10.4.
實驗從兩個方面對DAPLR算法進行性能分析和評價:計算開銷以及算法的復雜度.
5.2.1 運行時間
實驗采用執行時間作為評測DAPLR算法計算開銷的評測標準,并與單工作站環境下的“Bipartite”和“Sequential”做對比,實驗結果如圖6所示.

圖6 運行時間Fig.6 Run time

圖7 運行時間隨worker數量的變化Fig.7 Running time varies with the number of workers
圖6展示了單工作站環境下“Bipartite”和“Sequential”方法,以及DAPLR算法消耗時間的對比圖.從圖中可以看出,“Sequential”方法所消耗的時間要高于“Bipartite”,這是因為所提出的安全分組條件使得“Sequential”方法需要對圖進行多次遍歷,需要說明的是,實驗中“Bipartite”并未考慮社會網絡圖轉化為二分圖時所產生的消耗.同時,實驗結果顯示 “Sequential”和“Bipartite”消耗的時間要高于DAPLR方法,并且隨著數據集的增大,這種趨勢愈加明顯.從實驗結果中可以看出,所提出的DAPLR算法在處理大規模數據上更具優勢.
5.2.2 算法復雜性分析
實驗采用兩個方法來評測DAPLR算法的復雜度:
1)保持數據規模不變,逐漸增加計算節點(worker)數目;
2)規模擴展性(Scalability).
圖7顯示了DAPLR算法處理數據集split3時,隨著worker數目增加處理時間的變化情況.實驗結果顯示,隨著worker數目的遞增,處理數據所消耗的時間逐漸減少,大致呈線性變化.但在worker=9時,處理時間變化不再明顯,這是因為隨著worker數量的增加,worker彼此間通信量增加,產生更多的額外開銷.
規模擴展性是評價并行算法的一個重要方法,方法是:保持計算數目不變,擴大數據規模,是用來測試算法時間復雜度的一個方法,其計算公式:

(2)

圖8 規模擴展性Fig.8 Scalability

圖9 查詢錯誤率Fig.9 Query error rate
其中,T(*)是處理相應數據集消耗的時間,實驗將split1作為DB,并用split1-split5 這5個數據集作為 m×DB,并在集群運行,所得結果如圖8所示.由公式可知,理想情況下sizeup應不大于數據規模比例,從圖8中可知,算法在split1-split3具有很好的規模擴展性,而從split4開始,sizeup則逐漸大于數據規模比例,其主要原因是受限于服務器的CPU計算能力,另外就是隨著數據規模的增大,數據輸入的時間會有所增加.
社會網絡圖匿名化處理的目的在于通過圖修改操作來防止用戶隱私信息泄露,同時保證匿名圖在社會網絡分析和圖查詢方面的數據可用性.DAPLR算法在對社會網絡圖進行匿名處理時并沒有修改圖結構,因此針對圖結構的查詢如平均最短路徑、聚集系數、節點可達性等都會與在原圖上查詢結果相一致.因此,實驗通過查詢準確性來評價算法在數據可用性上的表現.

圖10 單跳查詢錯誤率圖11 雙跳查詢錯誤率Fig.10 Single-hop queryFig.11 Dual-hop query error rateerror rate
針對查詢操作,實驗采用文獻[10]所提出的單跳查詢和雙跳查詢作為評測方法,并用查詢相對誤差率作為度量標準.相對誤差計算公式為|N-N*|/N,其中N表示原始圖數據上的查詢結果, 表示匿名圖數據上查詢結果.實驗采用不同的屬性進行多次查詢計算誤差率,取查詢誤差的平均值.實驗結果如圖9、圖10和圖11所示.
圖9是為了評測算法查詢準確性所提出查詢 “在不同年齡段,A國用戶和B國用戶間存在多少朋友關系”所得到的平均相對誤差.從圖中可以看出,在不同年齡段隨著閾值k、m的變化平均誤差有所變化,但都能維持在10%左右,匿名后的圖數據仍具有較好地可用.
圖10和圖11分別展示了單跳查詢和雙跳查詢隨分組中節點數目m變化的情況.從實驗結果中可以看出,隨著分組中節點數目m值的增加,查詢誤差率隨之增大,因為隨著分組中節點數目增多使得節點的候選標簽數隨之增加,從而導致查詢結果的相對誤差變大.
針對當前社會網絡隱私保護方法忽視節點敏感鏈接,以及處理大規模圖數據存在極大局限性的問題,提出一種利用分布式圖處理系統GraphX的DAPLR社會網絡隱私保護方法.DAPLR方法依據分布式圖處理系統GraphX編程遵循“節點為中心”模式的特點,通過節點間的消息傳遞進行安全分組和標簽匿名,在提供隱私保護的同時保證了數據的可用性.真實社會網絡中,隨著時間的演變,用戶之間會建立新的鏈接關系或取消彼此間的聯系,有的用戶甚至會退出社會網絡,DAPLR方法并沒有考慮社會網絡的這種動態演變的特性,因此,接下來將考慮利用GraphX對動態社會網絡進行隱私保護.