(華中師范大學 教育信息技術工程研究中心 信息技術系, 武漢 430079)
摘要:
針對基于XML的權限描述語言(如XrML和ODRL)的本質缺陷,提出了一種基于證書修改的數字權限動態描述模型。在定義了該模型的相關基本要素后,深入探討和分析了該模型的執行過程,并給出了一個應用模型。
關鍵詞:多集; 證書; 規則; 證書修改
中圖分類號:TP309文獻標志碼:A
文章編號:10013695(2009)03107102
Dynamic expression of digital rights by rewriting license
HAN Lilong, LIU Qingtang, YANG Zongkai
(Dept. of Information Technology, Engineering Research Center of Education Information Technology, Huazhong Normal University, Wuhan 430079, China)
Abstract:
Because of the intrinsical flaw of XMLbased rights expression language such as XrML and ODRL, this paper demonstrated a kind of dynamic expression of digital rights by rewriting license. After defining the relevent essential elements of this model, it deeply explored and analyzed the execution flow. Finally, presented an application model.
Key words:multiset; license; rules; license rewriting
數字權限管理(digital rights management)的核心是數字權限描述模型。目前,對數字權限的描述通常采用可互操作的權限描述語言(RELs),即基于XML的XrML(extensible right markup language)和ODRL(open digital rights language)[1]。但是基于XML的RELs有其本質上的缺陷:a)當使用條件變復雜時其語法也變得復雜和模糊;b)缺乏形式語義,只能依賴語法和直觀語義來描述權限證書,不能進行有效的邏輯推理;c)缺乏有效的動態數字權限的描述機制;d)不能描述相關的版權法規等。針對上述問題,國外學者Gunter等人[2]在數字權限的形式語義和邏輯推理方面均作了深入的研究。Gunter借用了程序語言語義技術來定義證書(license)的語義,認為一個證書的語義就是動作執行序列(trace)的集合,每個trace表示該證書允許的動作序列。一個正確的執行過程就是允許license定義的合法動作序列得到執行,而禁止其他序列執行。Pucella和Weissman則在Gunter的基礎上,進一步嘗試了采用一種稱為“lic”的邏輯來推理數字權限。與Gunter一樣,他們也認為license的意思為動作序列的集合。但是,將證書持有人的一次消費過程r解釋為二元組(P,Q)。其中:P表示名字為n的license在t時刻給r指派的允許動作集合;Q表示名字為n的license在t時刻給r指派的必須執行動作集合,其邏輯本質上是一個時序邏輯。而在國內對數字權限動態描述的研究很少,其中東南大學計算機學院的孫偉等人[3,4]提出的兩種數字權限動態描述模型均值得借鑒。本文參考荷蘭Twente大學Chong等人[5]的LicenseScript項目,提出利用證書修改的方法來動態描述數字權限的模型。
1基本要素定義
1.1證書
證書是用來定義數字資源及其相關的使用條件。因此,證書至少包含兩個相關的信息項,即被授權的數據和使用該數據的條件(圖1)。
從圖1中可以看出,證書被定義成一個多集,其表現形式為 lic(content,Δ,B)。其中:content為證書所指數字資源的統一標志符;Δ表示一系列的Prolog程序子句[6,7],其定義了對數字資源所允許的特定操作。之所以選擇Prolog程序子句,是因為Prolog易讀易懂,非常適合描述證書。B是一組綁定數據包,存儲可修改的數據。通過Δ的邏輯推理,修改B中的數據,從而實現證書的修改,以達到數字權限的動態描述的目的。如果證書可看做是一個數據庫,那么Δ是其內涵,B則是其外延。證書為了與外部世界交互,還得定義應用程序接口(即API)。至于接口的精確定義也需要使用Prolog的邏輯設計方法,已經超出了本文的范圍。本文的讀者應該比較熟悉Prolog邏輯設計的基本術語及語義結論,例如利用 canpla(g)表示可以播放一段音樂。如果語句canplay(B,B′)在子句Δ中成功運行,則表示證書lic(a,Δ,B)允許資源a被執行。下面的證書:
lic(a,Δ,{exp ires≡10/10/2008})
其中:Δ為{canplay(B,B):-today(D),get_value(B,expires, exp),exp>D}表示允許執行a到一個給定的有效時間。today(D)和 get_value(B,n,V)兩個表達式的意思分別是: today(D)表示系統當前時間,get_value(B,n,V)則表示在集合B中獲取標志符n的值。
在很多情況下,證書在演化過程中伴隨著產生一系列新的綁定數據包。例如某證書允許播放一段音樂一定的次數,每播放一次,計數器自動增加1,可用表達式set_value(old B,name,value,new B)來表示。這個表達式允許綁定數據包B中的標志符name被修改并獲得新的值。這種機制通常用來支持證書的動態演化。例如有如下證書:lic(a,Δ,{played_times≡3})。其中Δ包含如下子句:
canplay(B,B′):-
get_value(B,palyed_times,R),R<10,
set_value(B,played_times,R+1,B′)
其含義為:首先把變量played_times的值賦給R,若R的值小于證書規定的使用次數(此處為10),則允許canplay(B,B′)執行;之后,play_times的值被修改為R+1,得到新的綁定數據包 B′,從而得到新證書lic(a,Δ,{played_times≡4})。
1.2規則
證書通常存在于設備中,設備和證書的交流在規則的約束下實現。規則被認為是設備的中間件,這里規則的語法采用多集修改的方式。
定義1任意規則都是一個四元組:rule(arg):lms→rmscond。其中:rule(arg)表示規則標簽;lms和rms表示多集;cond則是一系列形式如Pi├Qi的邏輯單元。
如果滿足以下兩個條件,規則被應用于目標多集MS上:
a)左邊的多集lms必須與多集MS中的某一子集匹配,該子集在規則執行后被右邊多集rms取代。
b)規則的執行條件cond必須得到滿足;這由cond中的邏輯語句來完成,并檢查結論是否成立。
規則執行的例子如下:
play(x):lic(X,Δ,B)→lic(X,Δ,B′)Δ├canplay(B,B′)
其具體含義為:如果條件Δ├canplay(B,B′)得到滿足,則規則應用于證書lic(X,Δ,B),證書執行完畢后被證書lic(X,Δ,B′)代替。
2證書修改的執行過程
上面已經提到,證書用lic(X,Δ,B)表示。為了方便起見,假設所有可用的證書均存放在給定的多集MS中。
定義2規則執行。如果有兩個多集MS和MS′,一個規則label:l→rcond和一個請求行為a,如果滿足以下四點,則MSaσMS′。
a)根據外部請求行為a,選擇與之匹配的規則label。需要注意的是,有可能存在多個規則與請求行為匹配,因此,此時選擇的規則并不一定是最終使用的規則。如果沒有規則與請求匹配,則請求就失敗了。
b)在多集MS中尋找與a)中所選的規則匹配的證書。由于a)中所選規則不是最終選擇,這里的證書相應地也不一定是最終選擇。這種情況導致用戶擁有多個證書允許他完成其想要完成的行為。
c)檢查規則所需的條件,選擇合適的規則。
d)執行規則,并轉換多集。
假如存在多集包含如下的證書:MS=[lic(music,Γ,C),lic(video,∑,D)]。其中:C={played_times≡2},D={played_times≡10},并且
Γ=∑={canplay(B,B′):-
get(B,played_times,N),N<10,
set(B,played_times,N+1,B′)}
規則R為
play(x):lic(X,Δ,B)→lic(X,Δ,B′)Δ├canplay(B,B′)
如果外部請求為play(music),其執行過程為:a)外部請求行為play(music)與規則play(X)匹配,則用music代替X,即σ1={X/music};b)對照MS中的證書lic(X,Δ,B),惟一的可能是lic(music,Γ,C),同樣則用Γ代替Δ,C代替B, 即σ2={Δ/Γ,B/C};c)評估條件├canplay(C,B′),由于C中變量play_times的值小于10,則所需條件得到滿足,canplay(C,B′)允許在子句執行,于是δ1={B/played_times≡3};d)MS被更新,證書lic(music,T,C)從MS中刪除,取而代之的是新證書lic(music,M,C′)(圖2),其中C′={played_times≡3}。
3基于證書修改的數字權限動態描述的應用實例
在現實生活中,通常存在這么一種情況:某一內容提供商免費在線發布一個數字資源庫,只是其中資源的部分內容被鎖定,被鎖定的部分只允許受限制地訪問。比如某視頻資源可以免費在低采樣頻率下播放,或者不能被全程播放,內容提供商通過讓用戶免費使用開放部分數字資源的方式來引起用戶對鎖定部分數字資源的興趣。下面來看看此類問題的證書該如何構建。首先鎖定數字資源的證書形式為
lic(track1,
[canunlock(B,_,code):-
get_value(B,unlock_code,unlock_code),
code==unlock_code
],[[unlock_code,1234]])
這個證書稱為基本證書。其中,track1只是任意資源的標志符;canunlock語句通過code變量提供輸入解鎖代碼的接口,該子句對照綁定數據包中unlock_code的值來檢測輸入代碼是否有效。為了解鎖該資源,用戶必須得到內容提供商提供的解鎖證書:
lic(track1,
[canplay(B,_,code):-
get_value(B,unlock_code,code)