徐宇欽錢權
(1.上海大學計算機工程與科學學院,上海200444;2.上海大學材料基因組工程研究院材料信息與數據科學中心,上海200444;3.之江實驗室,浙江杭州311100)
數據作為資產其價值已越來越高.同時隨著信息技術的發展,數據大多以數字化的形式存儲在計算機中.數字信息的共享、應用、二次加工越來越受重視,但對于數據的版權保護卻面臨種種問題[1-4].一項版權是什么時候、在誰的認可下進行了版權注冊,版權的確權及變更等問題都非常重要,若無法厘清則版權擁有者的利益就可能被侵害.目前,數字版權通常是由權威部門來審核和管理,但傳統的數字版權管理仍存在以下主要問題[1,5]:①數據的中心化存儲,傳統的版權管理系統大多采用集中化存儲,存在單點故障問題;②舉證維權成本高昂,目前對于數字版權的侵權或是知識產權引起的糾紛,往往需要人工介入,花費大量人力物力,因此需要一種快速可靠,且能夠證明產權歸屬的方法;③版權交易困難,現在的版權管理系統大多不包含交易功能,隨著數據版權價值的不斷體現,版權交易的需求也越來越迫切,因此需要一種自動化地進行版權交易的方法.
鑒于此,本工作提出了一種基于區塊鏈的數字版權保護與組合競拍方法和系統.首先,解決了數據的中心化存儲問題.利用區塊鏈技術[6],以智能合約的形式存儲版權的注冊記錄、交易記錄以及查詢關鍵字等信息.在此基礎上,一方面通過區塊鏈的工作量證明機制來實現版權數據管理權限上的去中心化;另一方面通過區塊鏈節點間的廣播來實現版權數據存儲上的去中心化.其次,使用一種數字水印算法[2]來為數據(文本或圖像等)嵌入數字水印.該數字水印算法與傳統數字水印算法的區別在于,僅需截取文本的一部分也能恢復并提取完整的水印信息.當版權引起糾紛時,能夠快速得到版權信息,有效解決版權糾紛引起的舉證難問題[7].最后,提出了一種新的版權交易方法,以密封遞價的拍賣形式進行競拍,并設計了一種自動化的組合競拍算法,幫助賣家從眾多出價組合中自動篩選出最優的出價組合.
本系統的用戶可以分為兩大類,分別是版權擁有者(賣方)以及版權需求者(買方).版權擁有者可以將自己的數據版權注冊并上傳到系統中.此時,版權擁有者可以對自己的數據版權進行確權或是拍賣.版權需求者根據關鍵字搜索版權數據,同時也可以預覽數據版權的標題、摘要、擁有者等基本信息.此外,當版權交易完成后,版權需求者就會轉化為版權擁有者,同時擁有對此版權進行維權或者拍賣的權利.整個系統架構如圖1所示.

圖1 基于區塊鏈的數據版權保護與組合競拍系統架構Fig.1 Architecture of the blockchain based data copyright protection and combinatorial auction system
本系統將待保護的數據存儲在云平臺中.為了避免在區塊鏈系統中存儲大塊數據導致成本高昂,僅將版權信息的關鍵內容以及數據交易記錄存儲在區塊鏈中.由于這些關鍵信息決定了版權的歸屬以及版權轉移過程,因此要求既能被追溯,也不會被隨意篡改.由于數據本身也要防止被惡意竊取或者篡改,因此數據以密文形式存儲在云平臺中,僅提供部分關鍵字用于查詢,以及提供摘要信息供版權需求者參考.
本系統使用云平臺來實現數據持久化.當用戶獲得云平臺的訪問權限后,可訪問和下載任意數據.為了防止數據被非法訪問,版權擁有者在上傳數據之前需要進行加密操作.與此同時,版權需求者在成功競拍之后,也需要用對應的密鑰進行解密.此時,版權購買者變為版權擁有者,需要用自己的密鑰對數據重新加密后再上傳至云平臺中.數據加解密和密鑰交換過程中涉及的變量描述如表1所示,具體的加解密步驟如下.

表1 密鑰交換變量Table 1 Variables used in key exchange
步驟1版權擁有者Alice使用自己的對稱密鑰KA,對明文數據Data使用對稱加密算法(如高級加密標準(advanced encryption standard,AES))進行加密,獲得密文EKA(Data).同時,將用于查詢的明文信息D附在密文后面,得到數據EKA(Data)‖D,并將其上傳至云平臺中.
步驟2若版權需求者Bob通過競拍算法拍到了版權數據Data,則Alice通過Bob的非對稱公鑰PKwinner使用非對稱加密算法(如Rivest-Shamir-Adleman(RSA)算法)對自己的對稱密鑰KA進行加密,獲得密文EPKwinner(KA),并將此密文傳遞給Bob.
步驟3 Bob在云平臺上下載版權數據密文EKA(Data),然后使用自己的非對稱私鑰SKwinner來對EPKwinner(KA)進行解密,得到Alice的對稱密鑰KA.Bob使用KA對版權數據密文進行解密,最終獲得Data.
本系統采用密封遞價拍賣方法[8],即多個買方為一個或多個商品進行一次出價,賣方可以根據買方的出價來為每件商品選擇合適的買家.本系統涉及了一種自動選擇買家的算法,可以為賣家挑選出利益最大的出價組合[9].組合競拍算法由1個主算法和3個子算法構成,算法流程如圖2所示.

圖2 組合競拍算法流程圖Fig.2 Flowchart of the combinatorial auction algorithm
1.3.1 算法相關的數據結構
為了能夠找出所有出價組合中的最優解,本算法采用兩種樹形結構分別表示候選出價組合和最終的競拍組合路徑.
(1)商品出價組合.這里使用1,2,3,···編號來表示每一個商品,同時使用一個Hashmap來存儲商品組合及其報價.對于同一個商品組合,通過預處理步驟,僅保存最高出價.因此能夠得到一個鍵為商品集合,值為其出價的鍵值對.
(2)出價樹.它是一棵二叉搜索樹,其葉子節點為一個鍵值對.對于一個非葉節點,代表的是其子樹是否包含以此節點所在高度為編號的商品,其中左節點表示該左子樹的所有葉子節點都包含以此節點所在高度為編號的商品,右節點則表示該右子樹的所有葉子節點都不包含以此節點所在高度為編號的商品.
(3)組合競拍樹.它是一棵n叉樹,每一條從根節點到葉子節點的路徑均代表一種商品組合的報價.通過遍歷這棵組合競拍樹,可以找到最優的報價組合.
1.3.2 競拍算法
本算法所使用的變量以及含義如表2所示.

表2 競拍算法變量及其含義Table 2 Variables used in the auction algorithm and their meanings
主算法:根據出價組合,通過剪枝等操作找到最優出價組合.

算法1:用于根據用戶出價組合生成對應的出價樹.

在得到出價樹之后,下一步就是根據出價樹生成組合競拍樹.在此過程中,需要根據節點狀態,在出價樹中找到對應的葉子節點并將其插入組合競拍樹中.算法2即為尋找葉子節點的算法,為每個節點定義了3種狀態,分別是A(可以被選中)、B(不可以被選中)、N(必須被選中).按照每個節點的狀態進行葉節點遍歷:當狀態為B時,只能從當前節點向右搜索;當狀態為N時,只能從當前節點向左搜索;當狀態為A時,從當前節點開始,既可以向左搜索也可以向右搜索.因此需要先將當前狀態入棧,當完成了整個向左搜索的過程后,再將其出棧并開始向右搜索.
算法2:findLeaf(STEP)用于在出價樹中找到對應的葉子節點.

算法3:根據出價樹生成組合競拍樹.

1.3.3 競拍算法舉例
假設有3種商品參與競拍,編號分別為D1、D2、D3,出價情況如表3所示.

表3 競拍出價表Table 3 Bids for combination auction
首先,根據算法1輸出的出價樹如圖3所示,其中每個非葉節點表示商品編號.非葉節點左子樹的葉節點一定包含此非葉節點代表的商品;右子樹的葉節點一定不包含此非葉節點代表的商品.

圖3 算法1生成的出價樹Fig.3 Bid tree generated by Algorithm 1
然后,執行算法3.經過初始化步驟后,開始不斷根據狀態status表的內容調用算法2(程序棧中商品的status如表4所示),并生成新的競拍樹.競拍樹的生成順序如圖4所示,其中當status表中內容全為B時,返回父節點處.

表4 每輪的商品狀態表Table 4 Status of the items in each turn

圖4 算法3生成的組合競拍樹Fig.4 Combination auction tree generated by Algorithm 3
最后,通過先序遍歷這棵樹,求得最優解為{D1,D3}+{D2},共為10元.通過對應出價表,則A得到D1和D3,B得到D2.
數字水印是一種特殊的編碼方式[2].本系統將數字水印嵌入版權數據中.當某個版權產生糾紛時,就可以找到對應數據并提取水印信息,結合區塊鏈中記錄的版權信息進行甄別.利用區塊鏈技術,既增加了版權信息的公信力,又可輔助解決版權糾紛.考慮到版權內容本身具有隱私性,本工作采用了一種通過部分信息就能提取完整水印的數字水印技術.
根據實對稱矩陣的性質,實對稱矩陣A一定可以相似對角化.假設A的每個特征值對應的特征向量組成的矩陣為C,則有

式中:λi為矩陣A的特征值,i=1,2,···,n.在此基礎上,對于任意列向量X=(x1,x2,···,xn)T使得f(X)=XTAX滿足二次型,那么一定存在X=CY使

成立,記對角矩陣CTAC為B,則有

式中:f為常數.如果取n個列向量X構造以下集合,同時計算每個列向量X對應的列向量Y,可以得到

構造映射關系H:Xi-→(fi,Yi),其中i=1,2,3,···,n.假設A的秩為k,且k<n,則B的秩也為k.從n個映射關系中任意選取k對,得到k元方程組(5),從而計算出B的值,繼而根據A=CBCT可以反推出A.

可以看出,只需要從n個映射關系中得到k個就可以逆推出原始矩陣A.因此,通過本方法構造的數字水印,就可以通過一部分數據提取到完整的水印信息.
數字水印的實現包括3個部分,分別是數字水印的生成、數字水印的嵌入以及數字水印的提取.實現算法中用到的變量名及含義如表5所示.

表5 數字水印變量名及其含義Table 5 Variables used in digital watermark module
2.2.1 數字水印的生成
首先,使用密鑰K將水印信息Info用加密算法(如數據加密標準(date encyption standard,DES))進行加密,得到密文Data并將其序列化,得到二進制串bData.然后,計算bData的長度,若長度不是完全平方數,則在其后補0直到其長度為完全平方數,記為n2.此時將bData重新排列,得到一個n×n的矩陣:

為了獲得實對稱矩陣的性質,將M沿其主對角線分別向上和向下翻折,得到兩個對稱矩陣A和A′,即

根據2.1節的推導過程,可以對A以及A′分別生成以下兩組映射關系:

將其整合在一起,獲得四元組(fi,Yi,f′i,Y′i),其中i=1,2,3,···,n.可以發現,當湊齊如式(9)所示的k組四元組后,可通過以下步驟還原矩陣A和A′,分別為M的上三角矩陣和下三角矩陣,從而還原水印信息M.因此,嵌入數據中的水印實際上是四元組(fi,Yi,f′i,Y′i).

根據式(3),方程組(9)中的第一個方程組可以變形為

根據定義,k為對角矩陣B的秩,n為對角矩陣B的階數,因此有k≤n成立,存在

因此,方程組(10)可以化簡為

方程組(12)是一個k元一次方程組,且由于Yi之間線性無關,因此具有唯一解.解方程組得到k個不為0的λi后即可得到對角矩陣B.對式(1)進行矩陣的逆運算即可還原出矩陣A.A′可以通過相同的方式還原得到.
WaterprintGen:生成數字水印四元組.

2.2.2 數字水印的嵌入和提取
數字水印的嵌入和提取與水印編碼后嵌入在文本數據中的位置相關.本工作將位置與用戶用來加密水印信息的密鑰K關聯起來,為其生成一個位置.位置信息的特征在于:一是要足夠長,能夠將四元組全部放入文本數據中;二是位置信息不能重復.
本工作采用密鑰序列化,將密鑰中的「lg(4×n-1)位通過Hash函數,映射到文本數據長度范圍內.當位置發生Hash沖突時,則順延一位,因此總共需要(4×n-1)個不同的位置.假設密鑰K共有256位,并且通過隨機算法生成,那么一共可獲得個長度為「lg(4×n-1)的二進制串.當n取1 024時,對應長度為128字節的水印信息,二進制串的長度約為12,可以通過密鑰K生成個二進制串,其數量遠大于4 096,因此可以通過256位的密鑰生成4 096個不同的位置信息.同時,為了保證插入位置具有一定的隨機性,可以將序列長度變為「lg(4×n-1)+2.
利用PositionGen算法,可以根據密鑰K來得到水印嵌入的位置,從而實現數字水印的嵌入和提取.
PositionGen:生成數字水印嵌入位置.

智能合約是運行在區塊鏈上的程序[10].在版權管理系統中,智能合約定義了版權的操作函數和相關參數,方便用戶進行版權的注冊、查詢和轉讓.數據版權的參數包括:①用于檢索的關鍵詞字段,包括版本號、版權類型等;②用于展示的摘要字段,包括版權的摘要信息、版權名稱以及版權擁有者;③用于區分不同版權的唯一標識,即版權ID;④版權交易買賣雙方的名字、訂單號、被交易的版權ID以及版權交易的時間.版權的操作函數包括:①版權注冊,將版權信息,包括關鍵詞字段、摘要信息、版權擁有者、版權ID等寫入區塊中;②版權查詢,通過關鍵字對鏈上數據進行搜索;③版權交易,將版權交易記錄上鏈以保證交易可追溯性,同時生成新的區塊記錄更新后的版本信息.
本系統使用以太坊支持的Solidity語言為版權管理編寫智能合約.以太坊虛擬機可以編譯并執行智能合約.有了智能合約后,當一個用戶通過智能合約向以太坊節點提交請求時,以太坊中的所有節點開始試圖生成一個新的區塊,區塊中的內容為該用戶的請求.采用工作量證明生成區塊.當某一個節點最先生成包含用戶請求的區塊時,此節點會向以太坊中的其他節點廣播新的區塊.當多數節點確認新區塊符合要求后,才會執行用戶的請求.以版權注冊為例,用戶請求將版權信息,包括關鍵詞、摘要、ID以及版權擁有者等寫入區塊鏈中.服務器首先調用智能合約向區塊鏈提交請求,等到一個新區塊被生成,并且被大部分以太坊節點確認后,才會執行寫入操作,并且響應用戶的請求.此時智能合約接到來自區塊鏈層的響應,返回給服務器執行結果.
基于區塊鏈的數字版權保護和拍賣系統采用B/S模式,系統運行界面如圖5所示.服務端運行在虛擬機中,操作系統為Ubuntu16.04,使用的以太坊API為Python的web3庫.服務器端CPU為四核處理器,內存為8 GB,編程語言為Python和Solidity.

圖5 基于區塊鏈的數字版權保護和競拍系統界面Fig.5 Interface of blockchain based digital copyright protection and combinatorial auction system
數字水印嵌入和提取的運行流程如圖6和7所示.首先,根據用戶的加密密鑰K生成數字水印的嵌入位置.然后,使用數字水印生成算法,將水印信息生成四元組.接著,根據嵌入位置將四元組嵌入文本數據中對應的位置.當水印驗證時,重新使用用戶的密鑰K生成數字水印的嵌入位置,并且按照位置提取水印.最后,根據提取出的四元組,利用式(9)還原水印,并使用密鑰K對密文解密獲得水印信息,從而驗證版權的歸屬.

圖6 數字水印嵌入流程Fig.6 Dgital watermark embedding flowchart
當用戶對某一個版權歸屬產生糾紛時,可以先從區塊鏈中讀取版權的當前歸屬者信息.版權歸屬者使用自己的密鑰進行數字水印提取操作.如果水印與當前歸屬者的信息一致,則可以證明當前歸屬者合法,否則不合法.如有非法用戶試圖偽造數字水印并上傳至平臺,則會導致區塊鏈中的版權歸屬者與偽造水印上的版權歸屬者不一致,從而解決了水印偽造的問題[11-12].
本工作中使用的數據編碼均為utf-8,分別選擇500、1 000、1 500字節的文本數據,以及長度為30、64和128字節的水印信息.數字水印嵌入后數據的增加量如表6所示.可以看出,嵌入水印后的數據增量大于水印長度.這是因為實際插入文本的水印不是水印信息本身,而是2.2節中的四元組,同時還包括預處理或者加密時Padding操作添加的數據.因此,嵌入水印后文件大小的增量只和水印信息有關,與文本信息無關.

圖7 數字水印提取流程Fig.7 Digital watermark extraction flowchart

表6 數字水印對文件大小的影響Table 6 Increment after embedding digital watermark 字節
數字水印嵌入及提取所花費的時間如表7所示.可以看出,除了每次實驗的微小誤差,嵌入和提取水印與文本信息大小幾乎沒有關系,只和水印長度有關.這是因為水印的嵌入和提取所需的位置在本方案中是直接通過用戶的密鑰生成的,不需要遍歷文本,因此和文本長度無關.

表7 不同大小的數字水印嵌入以及提取花費的時間Table 7 Time cost of embedding and extracting different size digital watermark
本工作主要解決了數字版權保護4個方面問題:①采用區塊鏈技術,確保版權信息的去中心化管理,工作量證明機制[13]確保提交交易的節點是隨機的,不會被某個惡意用戶所操控,而副本機制可確保每個區塊鏈節點都擁有一份完整的區塊鏈副本,當某些節點故障時,仍然可以確保系統可用;②采用數字水印技術,為解決版權糾紛的舉證難問題,同時配合區塊鏈的防篡改功能,可確保版權信息與水印信息一致,防止惡意用戶偽造數字水印;③將版權交易與版權管理集成在一起,當版權發生交易時,版權信息會根據智能合約自動與交易記錄保持一致,由于區塊鏈的可追溯性,版權交易記錄可追溯,保障交易者的利益;④提供了一種組合競拍算法,讓版權擁有者從大量出價組合中可以快速選擇最優組合.
今后可在此基礎上開展進一步的工作.首先,在鑒權方法上,結合效率、安全性等方面深入研究數字水印技術,尤其是針對文本數據的水印技術.其次,在區塊鏈的性能開銷方面,PoW[14]是一種十分消耗算力的共識方法,會有大量的資源被消耗在Hash碰撞計算中,新型共識算法的研發同樣重要[15].最后,本工作在大規模系統中的實際運行測試和優化也是未來要開展的工作.