徐宇欽錢權
(1.上海大學計算機工程與科學學院,上海200444;2.上海大學材料基因組工程研究院材料信息與數(shù)據(jù)科學中心,上海200444;3.之江實驗室,浙江杭州311100)
數(shù)據(jù)作為資產(chǎn)其價值已越來越高.同時隨著信息技術的發(fā)展,數(shù)據(jù)大多以數(shù)字化的形式存儲在計算機中.數(shù)字信息的共享、應用、二次加工越來越受重視,但對于數(shù)據(jù)的版權保護卻面臨種種問題[1-4].一項版權是什么時候、在誰的認可下進行了版權注冊,版權的確權及變更等問題都非常重要,若無法厘清則版權擁有者的利益就可能被侵害.目前,數(shù)字版權通常是由權威部門來審核和管理,但傳統(tǒng)的數(shù)字版權管理仍存在以下主要問題[1,5]:①數(shù)據(jù)的中心化存儲,傳統(tǒng)的版權管理系統(tǒng)大多采用集中化存儲,存在單點故障問題;②舉證維權成本高昂,目前對于數(shù)字版權的侵權或是知識產(chǎn)權引起的糾紛,往往需要人工介入,花費大量人力物力,因此需要一種快速可靠,且能夠證明產(chǎn)權歸屬的方法;③版權交易困難,現(xiàn)在的版權管理系統(tǒng)大多不包含交易功能,隨著數(shù)據(jù)版權價值的不斷體現(xiàn),版權交易的需求也越來越迫切,因此需要一種自動化地進行版權交易的方法.
鑒于此,本工作提出了一種基于區(qū)塊鏈的數(shù)字版權保護與組合競拍方法和系統(tǒng).首先,解決了數(shù)據(jù)的中心化存儲問題.利用區(qū)塊鏈技術[6],以智能合約的形式存儲版權的注冊記錄、交易記錄以及查詢關鍵字等信息.在此基礎上,一方面通過區(qū)塊鏈的工作量證明機制來實現(xiàn)版權數(shù)據(jù)管理權限上的去中心化;另一方面通過區(qū)塊鏈節(jié)點間的廣播來實現(xiàn)版權數(shù)據(jù)存儲上的去中心化.其次,使用一種數(shù)字水印算法[2]來為數(shù)據(jù)(文本或圖像等)嵌入數(shù)字水印.該數(shù)字水印算法與傳統(tǒng)數(shù)字水印算法的區(qū)別在于,僅需截取文本的一部分也能恢復并提取完整的水印信息.當版權引起糾紛時,能夠快速得到版權信息,有效解決版權糾紛引起的舉證難問題[7].最后,提出了一種新的版權交易方法,以密封遞價的拍賣形式進行競拍,并設計了一種自動化的組合競拍算法,幫助賣家從眾多出價組合中自動篩選出最優(yōu)的出價組合.
本系統(tǒng)的用戶可以分為兩大類,分別是版權擁有者(賣方)以及版權需求者(買方).版權擁有者可以將自己的數(shù)據(jù)版權注冊并上傳到系統(tǒng)中.此時,版權擁有者可以對自己的數(shù)據(jù)版權進行確權或是拍賣.版權需求者根據(jù)關鍵字搜索版權數(shù)據(jù),同時也可以預覽數(shù)據(jù)版權的標題、摘要、擁有者等基本信息.此外,當版權交易完成后,版權需求者就會轉化為版權擁有者,同時擁有對此版權進行維權或者拍賣的權利.整個系統(tǒng)架構如圖1所示.
圖1 基于區(qū)塊鏈的數(shù)據(jù)版權保護與組合競拍系統(tǒng)架構Fig.1 Architecture of the blockchain based data copyright protection and combinatorial auction system
本系統(tǒng)將待保護的數(shù)據(jù)存儲在云平臺中.為了避免在區(qū)塊鏈系統(tǒng)中存儲大塊數(shù)據(jù)導致成本高昂,僅將版權信息的關鍵內(nèi)容以及數(shù)據(jù)交易記錄存儲在區(qū)塊鏈中.由于這些關鍵信息決定了版權的歸屬以及版權轉移過程,因此要求既能被追溯,也不會被隨意篡改.由于數(shù)據(jù)本身也要防止被惡意竊取或者篡改,因此數(shù)據(jù)以密文形式存儲在云平臺中,僅提供部分關鍵字用于查詢,以及提供摘要信息供版權需求者參考.
本系統(tǒng)使用云平臺來實現(xiàn)數(shù)據(jù)持久化.當用戶獲得云平臺的訪問權限后,可訪問和下載任意數(shù)據(jù).為了防止數(shù)據(jù)被非法訪問,版權擁有者在上傳數(shù)據(jù)之前需要進行加密操作.與此同時,版權需求者在成功競拍之后,也需要用對應的密鑰進行解密.此時,版權購買者變?yōu)榘鏅鄵碛姓?需要用自己的密鑰對數(shù)據(jù)重新加密后再上傳至云平臺中.數(shù)據(jù)加解密和密鑰交換過程中涉及的變量描述如表1所示,具體的加解密步驟如下.
表1 密鑰交換變量Table 1 Variables used in key exchange
步驟1版權擁有者Alice使用自己的對稱密鑰KA,對明文數(shù)據(jù)Data使用對稱加密算法(如高級加密標準(advanced encryption standard,AES))進行加密,獲得密文EKA(Data).同時,將用于查詢的明文信息D附在密文后面,得到數(shù)據(jù)EKA(Data)‖D,并將其上傳至云平臺中.
步驟2若版權需求者Bob通過競拍算法拍到了版權數(shù)據(jù)Data,則Alice通過Bob的非對稱公鑰PKwinner使用非對稱加密算法(如Rivest-Shamir-Adleman(RSA)算法)對自己的對稱密鑰KA進行加密,獲得密文EPKwinner(KA),并將此密文傳遞給Bob.
步驟3 Bob在云平臺上下載版權數(shù)據(jù)密文EKA(Data),然后使用自己的非對稱私鑰SKwinner來對EPKwinner(KA)進行解密,得到Alice的對稱密鑰KA.Bob使用KA對版權數(shù)據(jù)密文進行解密,最終獲得Data.
本系統(tǒng)采用密封遞價拍賣方法[8],即多個買方為一個或多個商品進行一次出價,賣方可以根據(jù)買方的出價來為每件商品選擇合適的買家.本系統(tǒng)涉及了一種自動選擇買家的算法,可以為賣家挑選出利益最大的出價組合[9].組合競拍算法由1個主算法和3個子算法構成,算法流程如圖2所示.
圖2 組合競拍算法流程圖Fig.2 Flowchart of the combinatorial auction algorithm
1.3.1 算法相關的數(shù)據(jù)結構
為了能夠找出所有出價組合中的最優(yōu)解,本算法采用兩種樹形結構分別表示候選出價組合和最終的競拍組合路徑.
(1)商品出價組合.這里使用1,2,3,···編號來表示每一個商品,同時使用一個Hashmap來存儲商品組合及其報價.對于同一個商品組合,通過預處理步驟,僅保存最高出價.因此能夠得到一個鍵為商品集合,值為其出價的鍵值對.
(2)出價樹.它是一棵二叉搜索樹,其葉子節(jié)點為一個鍵值對.對于一個非葉節(jié)點,代表的是其子樹是否包含以此節(jié)點所在高度為編號的商品,其中左節(jié)點表示該左子樹的所有葉子節(jié)點都包含以此節(jié)點所在高度為編號的商品,右節(jié)點則表示該右子樹的所有葉子節(jié)點都不包含以此節(jié)點所在高度為編號的商品.
(3)組合競拍樹.它是一棵n叉樹,每一條從根節(jié)點到葉子節(jié)點的路徑均代表一種商品組合的報價.通過遍歷這棵組合競拍樹,可以找到最優(yōu)的報價組合.
1.3.2 競拍算法
本算法所使用的變量以及含義如表2所示.
表2 競拍算法變量及其含義Table 2 Variables used in the auction algorithm and their meanings
主算法:根據(jù)出價組合,通過剪枝等操作找到最優(yōu)出價組合.
算法1:用于根據(jù)用戶出價組合生成對應的出價樹.
在得到出價樹之后,下一步就是根據(jù)出價樹生成組合競拍樹.在此過程中,需要根據(jù)節(jié)點狀態(tài),在出價樹中找到對應的葉子節(jié)點并將其插入組合競拍樹中.算法2即為尋找葉子節(jié)點的算法,為每個節(jié)點定義了3種狀態(tài),分別是A(可以被選中)、B(不可以被選中)、N(必須被選中).按照每個節(jié)點的狀態(tài)進行葉節(jié)點遍歷:當狀態(tài)為B時,只能從當前節(jié)點向右搜索;當狀態(tài)為N時,只能從當前節(jié)點向左搜索;當狀態(tài)為A時,從當前節(jié)點開始,既可以向左搜索也可以向右搜索.因此需要先將當前狀態(tài)入棧,當完成了整個向左搜索的過程后,再將其出棧并開始向右搜索.
算法2:findLeaf(STEP)用于在出價樹中找到對應的葉子節(jié)點.
算法3:根據(jù)出價樹生成組合競拍樹.
1.3.3 競拍算法舉例
假設有3種商品參與競拍,編號分別為D1、D2、D3,出價情況如表3所示.
表3 競拍出價表Table 3 Bids for combination auction
首先,根據(jù)算法1輸出的出價樹如圖3所示,其中每個非葉節(jié)點表示商品編號.非葉節(jié)點左子樹的葉節(jié)點一定包含此非葉節(jié)點代表的商品;右子樹的葉節(jié)點一定不包含此非葉節(jié)點代表的商品.
圖3 算法1生成的出價樹Fig.3 Bid tree generated by Algorithm 1
然后,執(zhí)行算法3.經(jīng)過初始化步驟后,開始不斷根據(jù)狀態(tài)status表的內(nèi)容調(diào)用算法2(程序棧中商品的status如表4所示),并生成新的競拍樹.競拍樹的生成順序如圖4所示,其中當status表中內(nèi)容全為B時,返回父節(jié)點處.
表4 每輪的商品狀態(tài)表Table 4 Status of the items in each turn
圖4 算法3生成的組合競拍樹Fig.4 Combination auction tree generated by Algorithm 3
最后,通過先序遍歷這棵樹,求得最優(yōu)解為{D1,D3}+{D2},共為10元.通過對應出價表,則A得到D1和D3,B得到D2.
數(shù)字水印是一種特殊的編碼方式[2].本系統(tǒng)將數(shù)字水印嵌入版權數(shù)據(jù)中.當某個版權產(chǎn)生糾紛時,就可以找到對應數(shù)據(jù)并提取水印信息,結合區(qū)塊鏈中記錄的版權信息進行甄別.利用區(qū)塊鏈技術,既增加了版權信息的公信力,又可輔助解決版權糾紛.考慮到版權內(nèi)容本身具有隱私性,本工作采用了一種通過部分信息就能提取完整水印的數(shù)字水印技術.
根據(jù)實對稱矩陣的性質,實對稱矩陣A一定可以相似對角化.假設A的每個特征值對應的特征向量組成的矩陣為C,則有
式中:λi為矩陣A的特征值,i=1,2,···,n.在此基礎上,對于任意列向量X=(x1,x2,···,xn)T使得f(X)=XTAX滿足二次型,那么一定存在X=CY使
成立,記對角矩陣CTAC為B,則有
式中:f為常數(shù).如果取n個列向量X構造以下集合,同時計算每個列向量X對應的列向量Y,可以得到
構造映射關系H:Xi-→(fi,Yi),其中i=1,2,3,···,n.假設A的秩為k,且k<n,則B的秩也為k.從n個映射關系中任意選取k對,得到k元方程組(5),從而計算出B的值,繼而根據(jù)A=CBCT可以反推出A.
可以看出,只需要從n個映射關系中得到k個就可以逆推出原始矩陣A.因此,通過本方法構造的數(shù)字水印,就可以通過一部分數(shù)據(jù)提取到完整的水印信息.
數(shù)字水印的實現(xiàn)包括3個部分,分別是數(shù)字水印的生成、數(shù)字水印的嵌入以及數(shù)字水印的提取.實現(xiàn)算法中用到的變量名及含義如表5所示.
表5 數(shù)字水印變量名及其含義Table 5 Variables used in digital watermark module
2.2.1 數(shù)字水印的生成
首先,使用密鑰K將水印信息Info用加密算法(如數(shù)據(jù)加密標準(date encyption standard,DES))進行加密,得到密文Data并將其序列化,得到二進制串bData.然后,計算bData的長度,若長度不是完全平方數(shù),則在其后補0直到其長度為完全平方數(shù),記為n2.此時將bData重新排列,得到一個n×n的矩陣:
為了獲得實對稱矩陣的性質,將M沿其主對角線分別向上和向下翻折,得到兩個對稱矩陣A和A′,即
根據(jù)2.1節(jié)的推導過程,可以對A以及A′分別生成以下兩組映射關系:
將其整合在一起,獲得四元組(fi,Yi,f′i,Y′i),其中i=1,2,3,···,n.可以發(fā)現(xiàn),當湊齊如式(9)所示的k組四元組后,可通過以下步驟還原矩陣A和A′,分別為M的上三角矩陣和下三角矩陣,從而還原水印信息M.因此,嵌入數(shù)據(jù)中的水印實際上是四元組(fi,Yi,f′i,Y′i).
根據(jù)式(3),方程組(9)中的第一個方程組可以變形為
根據(jù)定義,k為對角矩陣B的秩,n為對角矩陣B的階數(shù),因此有k≤n成立,存在
因此,方程組(10)可以化簡為
方程組(12)是一個k元一次方程組,且由于Yi之間線性無關,因此具有唯一解.解方程組得到k個不為0的λi后即可得到對角矩陣B.對式(1)進行矩陣的逆運算即可還原出矩陣A.A′可以通過相同的方式還原得到.
WaterprintGen:生成數(shù)字水印四元組.
2.2.2 數(shù)字水印的嵌入和提取
數(shù)字水印的嵌入和提取與水印編碼后嵌入在文本數(shù)據(jù)中的位置相關.本工作將位置與用戶用來加密水印信息的密鑰K關聯(lián)起來,為其生成一個位置.位置信息的特征在于:一是要足夠長,能夠將四元組全部放入文本數(shù)據(jù)中;二是位置信息不能重復.
本工作采用密鑰序列化,將密鑰中的「lg(4×n-1)位通過Hash函數(shù),映射到文本數(shù)據(jù)長度范圍內(nèi).當位置發(fā)生Hash沖突時,則順延一位,因此總共需要(4×n-1)個不同的位置.假設密鑰K共有256位,并且通過隨機算法生成,那么一共可獲得個長度為「lg(4×n-1)的二進制串.當n取1 024時,對應長度為128字節(jié)的水印信息,二進制串的長度約為12,可以通過密鑰K生成個二進制串,其數(shù)量遠大于4 096,因此可以通過256位的密鑰生成4 096個不同的位置信息.同時,為了保證插入位置具有一定的隨機性,可以將序列長度變?yōu)椤竘g(4×n-1)+2.
利用PositionGen算法,可以根據(jù)密鑰K來得到水印嵌入的位置,從而實現(xiàn)數(shù)字水印的嵌入和提取.
PositionGen:生成數(shù)字水印嵌入位置.
智能合約是運行在區(qū)塊鏈上的程序[10].在版權管理系統(tǒng)中,智能合約定義了版權的操作函數(shù)和相關參數(shù),方便用戶進行版權的注冊、查詢和轉讓.數(shù)據(jù)版權的參數(shù)包括:①用于檢索的關鍵詞字段,包括版本號、版權類型等;②用于展示的摘要字段,包括版權的摘要信息、版權名稱以及版權擁有者;③用于區(qū)分不同版權的唯一標識,即版權ID;④版權交易買賣雙方的名字、訂單號、被交易的版權ID以及版權交易的時間.版權的操作函數(shù)包括:①版權注冊,將版權信息,包括關鍵詞字段、摘要信息、版權擁有者、版權ID等寫入?yún)^(qū)塊中;②版權查詢,通過關鍵字對鏈上數(shù)據(jù)進行搜索;③版權交易,將版權交易記錄上鏈以保證交易可追溯性,同時生成新的區(qū)塊記錄更新后的版本信息.
本系統(tǒng)使用以太坊支持的Solidity語言為版權管理編寫智能合約.以太坊虛擬機可以編譯并執(zhí)行智能合約.有了智能合約后,當一個用戶通過智能合約向以太坊節(jié)點提交請求時,以太坊中的所有節(jié)點開始試圖生成一個新的區(qū)塊,區(qū)塊中的內(nèi)容為該用戶的請求.采用工作量證明生成區(qū)塊.當某一個節(jié)點最先生成包含用戶請求的區(qū)塊時,此節(jié)點會向以太坊中的其他節(jié)點廣播新的區(qū)塊.當多數(shù)節(jié)點確認新區(qū)塊符合要求后,才會執(zhí)行用戶的請求.以版權注冊為例,用戶請求將版權信息,包括關鍵詞、摘要、ID以及版權擁有者等寫入?yún)^(qū)塊鏈中.服務器首先調(diào)用智能合約向區(qū)塊鏈提交請求,等到一個新區(qū)塊被生成,并且被大部分以太坊節(jié)點確認后,才會執(zhí)行寫入操作,并且響應用戶的請求.此時智能合約接到來自區(qū)塊鏈層的響應,返回給服務器執(zhí)行結果.
基于區(qū)塊鏈的數(shù)字版權保護和拍賣系統(tǒng)采用B/S模式,系統(tǒng)運行界面如圖5所示.服務端運行在虛擬機中,操作系統(tǒng)為Ubuntu16.04,使用的以太坊API為Python的web3庫.服務器端CPU為四核處理器,內(nèi)存為8 GB,編程語言為Python和Solidity.
圖5 基于區(qū)塊鏈的數(shù)字版權保護和競拍系統(tǒng)界面Fig.5 Interface of blockchain based digital copyright protection and combinatorial auction system
數(shù)字水印嵌入和提取的運行流程如圖6和7所示.首先,根據(jù)用戶的加密密鑰K生成數(shù)字水印的嵌入位置.然后,使用數(shù)字水印生成算法,將水印信息生成四元組.接著,根據(jù)嵌入位置將四元組嵌入文本數(shù)據(jù)中對應的位置.當水印驗證時,重新使用用戶的密鑰K生成數(shù)字水印的嵌入位置,并且按照位置提取水印.最后,根據(jù)提取出的四元組,利用式(9)還原水印,并使用密鑰K對密文解密獲得水印信息,從而驗證版權的歸屬.
圖6 數(shù)字水印嵌入流程Fig.6 Dgital watermark embedding flowchart
當用戶對某一個版權歸屬產(chǎn)生糾紛時,可以先從區(qū)塊鏈中讀取版權的當前歸屬者信息.版權歸屬者使用自己的密鑰進行數(shù)字水印提取操作.如果水印與當前歸屬者的信息一致,則可以證明當前歸屬者合法,否則不合法.如有非法用戶試圖偽造數(shù)字水印并上傳至平臺,則會導致區(qū)塊鏈中的版權歸屬者與偽造水印上的版權歸屬者不一致,從而解決了水印偽造的問題[11-12].
本工作中使用的數(shù)據(jù)編碼均為utf-8,分別選擇500、1 000、1 500字節(jié)的文本數(shù)據(jù),以及長度為30、64和128字節(jié)的水印信息.數(shù)字水印嵌入后數(shù)據(jù)的增加量如表6所示.可以看出,嵌入水印后的數(shù)據(jù)增量大于水印長度.這是因為實際插入文本的水印不是水印信息本身,而是2.2節(jié)中的四元組,同時還包括預處理或者加密時Padding操作添加的數(shù)據(jù).因此,嵌入水印后文件大小的增量只和水印信息有關,與文本信息無關.
圖7 數(shù)字水印提取流程Fig.7 Digital watermark extraction flowchart
表6 數(shù)字水印對文件大小的影響Table 6 Increment after embedding digital watermark 字節(jié)
數(shù)字水印嵌入及提取所花費的時間如表7所示.可以看出,除了每次實驗的微小誤差,嵌入和提取水印與文本信息大小幾乎沒有關系,只和水印長度有關.這是因為水印的嵌入和提取所需的位置在本方案中是直接通過用戶的密鑰生成的,不需要遍歷文本,因此和文本長度無關.
表7 不同大小的數(shù)字水印嵌入以及提取花費的時間Table 7 Time cost of embedding and extracting different size digital watermark
本工作主要解決了數(shù)字版權保護4個方面問題:①采用區(qū)塊鏈技術,確保版權信息的去中心化管理,工作量證明機制[13]確保提交交易的節(jié)點是隨機的,不會被某個惡意用戶所操控,而副本機制可確保每個區(qū)塊鏈節(jié)點都擁有一份完整的區(qū)塊鏈副本,當某些節(jié)點故障時,仍然可以確保系統(tǒng)可用;②采用數(shù)字水印技術,為解決版權糾紛的舉證難問題,同時配合區(qū)塊鏈的防篡改功能,可確保版權信息與水印信息一致,防止惡意用戶偽造數(shù)字水印;③將版權交易與版權管理集成在一起,當版權發(fā)生交易時,版權信息會根據(jù)智能合約自動與交易記錄保持一致,由于區(qū)塊鏈的可追溯性,版權交易記錄可追溯,保障交易者的利益;④提供了一種組合競拍算法,讓版權擁有者從大量出價組合中可以快速選擇最優(yōu)組合.
今后可在此基礎上開展進一步的工作.首先,在鑒權方法上,結合效率、安全性等方面深入研究數(shù)字水印技術,尤其是針對文本數(shù)據(jù)的水印技術.其次,在區(qū)塊鏈的性能開銷方面,PoW[14]是一種十分消耗算力的共識方法,會有大量的資源被消耗在Hash碰撞計算中,新型共識算法的研發(fā)同樣重要[15].最后,本工作在大規(guī)模系統(tǒng)中的實際運行測試和優(yōu)化也是未來要開展的工作.