專利名稱::基于linux平臺數字版權管理的文件使用控制方法
技術領域:
:本發明屬于數字版權管理
技術領域:
,特別是涉及到基于li皿x平臺數字版權管理的文件使用控制方法。
背景技術:
:數字版權管理(digitalrightsmanagement,以下簡稱DRM)是指內容出版商或版權持有者為管理文件使用權和保護文件數字版權而采取的綜合性解決方案。目前數字版權管理研究主要集中在windows平臺下,同時大都采用基于加密、許可證和配套的新應用程序的框架。這幾乎在所有的有關數字版權管理的技術文獻和研究論文均有論述,孫輝.DRM體系結構研究.南京,2007;馮海永等.通用型DRM系統的研究與實現.計算機工程與設計.2008;李丹等.基于DRM的版權管理系統的研究與設計.計算機技術與發展.2008。現有的DRM系統無一例外需要開發新的應用程序來使用被保護的文件,同時需要用戶在聯網情況下進行身份驗證以及獲取許可證,市場上流行的WindowmediaDRM和海海公司產品均采取這一策略。為了使應用層監管對用戶透明,有必要提出一種新的框架來改變這一現狀,開發出一種通用的DRM系統能夠對所有的文件格式采用統一的使用控制并且對用戶體驗沒有任何影響。為了保護主機資源不受惡意軟件破壞采用了多種防范措施,但它們的共同特點是運行在用戶模式下,很容易受到惡意軟件的攻擊,趙文進等在《計算機工程》上發表的《基于linux內核的通用軟件封裝器的設計與實現》采取LKM機制對進程級別的系統調用實現了監控,通過截獲應用層與內核的信息交互實現了人工干預。這對于如何改變現有DRM策略迫使用戶采用新的文件應用程序這種困境是一個良好的啟示。Li皿x內核只提供基本的操作系統服務功能,例如內存分配,文件系統和進程調度等,而GUI部分則采用通用的Xwindow系統,Xwindow是基于事件驅動,并且采用了C/S架構,應用程序的可視窗口與用戶實際上通過各種事件來進行交互,為了實現對用戶操作更為精確地監控有必要在Xwindow系統基礎上截獲部分用戶操作事件然后與內核模塊共同決策。
發明內容針對上述問題與研究空白,本發明提出一種基于使用Xwindow系統作為圖形用戶界面的li皿x平臺下的數字版權管理實現機制——客戶端文件使用監控策略。本發明的技術方案為一種基于li皿x平臺數字版權管理的文件使用控制方法,用于對基于li皿x平臺的客戶端實現使用文件監控,所述客戶端使用Xwindow系統作為圖形用戶界面,其特征在于包括以下步驟,步驟l,服務器端接受客戶端對保護文件的請求后抽取客戶端的硬件信息,然后從該硬件信息中抽取作為服務器端所使用的加密密鑰,采用該加密密鑰對保護文件加密得到加密后文件;3步驟2,在服務器端將安全組件與加密后文件打包,打包生成一個自解壓的可執行文件發送給客戶端;步驟3,當步驟2所得可執行文件在客戶端上運行時,首先從客戶端的硬件信息中抽取解密密鑰并且與服務器端所使用的加密密鑰對比,若一致則運行解密進程獲得保護文件,否則說明客戶端非法使用保護文件而拒絕服務;在運行解密進程的過程中同時啟動一個用于監控保護文件窗口狀態的進程,這個進程在保護文件的窗口關閉時進行清理工作,包括卸載系統函數重定向模塊以及關閉在用戶空間監控用戶操作的進程;步驟4,在獲得保護文件后,解密進程生成一個子進程負責啟動合適的第三方應用程序打開保護文件,父進程啟動安全組件提供的windowscan進程;步驟5,windowscan進程首先創建子進程負責加載系統函數重定向模塊,所述系統函數重定向模塊將系統調用表中sys_write函數和sys_getdents64函數分別重定向到my_write函數和my_getdents64系統函數;在加載系統函數重定向模塊時,接收保護文件的文件名和打開保護文件的進程名作為參數,同時利用netlink機制開始監聽windowscan進程的消息;重定向后,所述my—getdents64系統函數根據傳遞進來的保護文件的文件名來確定隱藏哪個文件,所述myjrite函數則負責控制向磁盤中寫入數據的監控;步驟6,windowscan進程監控客戶端上焦點窗口的活動,當焦點窗口變化是保護文件主窗口到另存為對話框的時候,該進程再啟動一個子進程鎖住屏幕上的鼠標操作防止焦點窗口的變化,新的子進程抓取用戶在"另存為"對話框中的鍵盤輸入,直至關閉"另存為"對話框,該子進程將用戶的鍵盤操作記錄為一個字符串作為用戶欲另存為的目標文件名,然后該子進程通過netlink機制將用戶欲另存為的文件名傳遞給系統函數重定向模塊,子進程結束這個操作后返回父進程windowscan,windowscan進程繼續監控焦點窗口的變化;同時,windowscan進程監控用戶在保護文件主窗口上面涉及到復制剪貼的鍵盤和鼠標操作,通過屏蔽復制剪貼這些操作所引發的事件達到使復制剪貼失效的目的。而且,my_Write函數控制向磁盤中寫入數據的實現方式為,當正在使用系統函數的進程名是第三方應用程序的進程名時,判斷該函數執行的目標文件名是不是保護文件名或者windowscan進程截獲的"另存為"文件名,是就拒絕寫盤操作,否則調用sysjrite函數。本發明的優點如下(1)本發明將保護文件與用戶所用的客戶端綁定,客戶端一般為電腦,包括個人計算機或筆記本);用戶從服務器端下載的打包文件只能在用戶原有電腦上運行而不能轉移,從而有效的防止了保護文件的擴散問題。(2)本發明從操作系統層面出發設計保護措施從而實現了對用戶透明的版權控制;原有數字版權保護系統均需要開發新的針對每種文件格式的應用程序,在打開文件前還需要進行用戶身份驗證。本發明在服務器端將實現保護的程序和模塊與加密后的文件綁定成一個可執行文件發送給用戶,只需要運行這個文件就可以在使用戶閱覽文件內容的同時實現訪問控制。(3)本發明具有通用性和可擴展性;本發明所有的設計均在li皿x內核基礎上實現,不針對特殊的li皿x發行版本,同時用戶空間窗口的監控也主要是針對XWindow系統,這個系統目前被絕大多數li皿x發行版本采用來設計用戶界面,同時本發明可以很容易的根據用戶li皿x內核版本的變化進行擴展從而適應用戶的操作系統。(4)本發明具有良好的安全性能;打包文件運行過程中產生的臨時文件(包括軟件運行所需要的解密后的源文件、程序以及內核模塊),均存放在內存上,程序一旦出現異常均全部清除,同時程序在運行過程中產生的這些文件對用戶來說全部是隱藏不可見的從而防止用戶進行惡意損壞。圖1本發明實施例的自解壓流程圖;圖2本發明實施例的解密程序執行流程圖;圖3本發明實施例的系統函數重定向模塊程序框圖;圖4本發明實施例的windowscan進程程序框圖。具體實施例方式以下結合附圖和實施例詳細說明本發明技術方案步驟l,服務器端接受客戶端對保護文件的請求后抽取客戶端的硬件信息,然后從該硬件信息中抽取作為服務器端所使用的加密密鑰,采用該加密密鑰得到加密后文件。本發明將需要進行數字版權管理的源文件稱為保護文件。根據客戶端的硬件信息生成加密密鑰,可以用于后續驗證是否為同一客戶端。由于客戶端一般為電腦,可以采用電腦的硬件地址信息。具體實施時,生成加密密鑰的方式采用現有密鑰生成算法即可。采用該加密密鑰對保護文件加密,即可得到加密后文件,具體實施時采用現有加密算法即可。本發明不予贅述。步驟2,在服務器端將安全組件與加密后文件打包,打包生成一個自解壓的可執行文件發送給客戶端。在服務器端實現自解壓的可執行文件的生成,實際上涉及的是基本的文件讀寫操作,實施例使用了標準C的庫函數。為了不破壞可執行文件頭部格式并且保證在客戶端它能順利的自解壓生成解密文件、程序源文件以及可自由加載到linux內核的模塊來進行訪問與監控,實施例設計了能夠自解壓的可執行文件的內部結構,如下表所示可執行文件內部結構表<table>tableseeoriginaldocumentpage5</column></row><table><table>tableseeoriginaldocumentpage6</column></row><table>其中,解壓程序用于實現自解壓,對各部分指定長度,能夠保證正確解壓。密文即服務端通過加密密鑰所得加密后文件。安全組件包括Windowscan程序和系統函數重定向模塊。系統函數重定向模塊是用于系統函數重定向的內核模塊,Windowscan程序是用于在用戶空間進行監控的應用程序,監控內容包括保護文件主窗口的狀態以及用戶在它上面執行的操作。步驟3,當步驟2所得可執行文件在客戶端上運行時,首先從客戶端的硬件信息中抽取解密密鑰并且與服務器端所使用的加密密鑰對比,若一致則運行解密進程獲得保護文件,否則說明客戶端非法使用保護文件而拒絕服務。為了在使用保護文件的工作完成后,自動釋放客戶端系統資源,本發明還提出在運行解密進程的過程中同時啟動一個用于監控保護文件窗口狀態的進程,這個進程在保護文件的窗口關閉時進行清理工作,即卸載安全組件。清理內容包括卸載系統函數重定向模塊以及關閉在用戶空間監控用戶操作的進程。實施例采用可執行文件中提供的解壓程序,通過解壓程序提供解壓進程,從而實現解壓。如附圖l所示,解壓進程負責從在服務器端打包的可執行文件中抽取出各程序和模塊。解壓進程在創建解密進程啟動的同時要啟動一個窗口狀態監控進程,因為在解密進程中搜索適當的第三方應用程序(如W0RD)來展示文件后監控的目標——保護文件主窗口才出現,所以窗口狀態監控進程需要區分窗口關閉與窗口尚未打開這兩種情況。創建解密進程可以采用子進程,啟動窗口狀態監控進程則采用父進程。具體實施時,在窗口狀態監控進程開始運行后并不馬上檢查窗口狀態而是等待windowscan進程開始運行后來激活。窗口狀態監控的基礎來源于li皿x下Xwindow系統的Property機制,通過窗口名稱這個Property與保護文件的文件名稱進行比對可以定位保護文件主窗口并且進行監控。監控的實現,可以為循環掃描客戶端桌面上的所有窗口,判斷保護文件主窗口是否存在,是則繼續掃描,否則卸載安全組件。步驟4,在獲得保護文件后,解密進程生成一個子進程負責啟動合適的第三方應用程序打開保護文件,父進程啟動windowscan進程。實施例采用可執行文件中提供的解密程序,通過解密程序提供解密進程,從而實現解壓。如圖2所示,客戶端上,在解密進程運行過程中,首先要抽取客戶端的硬件信息并且運算得到解密密鑰,與加密密鑰的比對過程實際上就是用解密密鑰解密加密后的保護文件,如果解密失敗那么意味著用戶非法,就直接退出整個程序(即不會進行后續步驟),如果成功那么意味著比對成功,用戶是合法的,然后創建子進程,子進程會在用戶電腦上搜索可以打開文件的第三方應用程序來打開保護文件,同時父進程會直接運行安全組件,即通過運行可執行文件中提供的windowscan程序,啟動windowscan進程。步驟5,windowscan進程首先創建子進程負責加載系統函數重定向模塊,所述系統函數重定向模塊將系統調用表中sys_write函數和sys_getdents64函數分別重定向到my_write函數和my_getdents64系統函數;在加載系統函數重定向模塊時,接收保護文件的文件名和打開保護文件的進程名作為參數,同時利用netlink機制開始監聽windowscan進程的消息;重定向后,所述my—getdents64系統函數根據傳遞進來的保護文件的文件名來確定隱藏哪個文件,所述my—write函數則負責控制向磁盤中寫入數據的監控。運行解密進程獲得保護文件后,保護文件存儲在內存中并且隱藏為對客戶端的用戶來說是不可見的。隱藏的實現是通過使用重定向系統函數模塊。實施例還提供了my—write函數控制向磁盤中寫入數據的實現方式,當正在使用系統函數的進程名是第三方應用程序的進程名時,判斷該函數執行的目標文件名是不是保護文件名或者windowscan進程截獲的"另存為"文件名,是就拒絕寫盤操作,否則調用回li皿x系統內核原sysjrite函數。如圖3所示,在系統函數重定向模塊中,本發明實施例采用了成熟的linuxrootkit以及LKM技術,通過修改li皿x操作系統的內核系統調用表達到了對應用程序欺騙效果。li皿x提供了Current宏,從而可以獲得當前正在使用系統函數的進程名Current->comm,而該模塊在被windowscan的子進程加載的時候獲得了打開保護文件的第三方應用程序的名稱processname。my_Wrie這個替代后的系統調用函數通過比對processname和正在使用系統函數的進程名Current->comm可以達到第一層的調用分流。艮卩Current->comm==processname時,豐艮據sys_write函數的文^[牛t示識符fd參數獲取文件名;Current->comm!=processname時,調用linux系統內核原sys_write函數(標記為originalsys—write函數)。第一層分流保證了對系統調用表這個操作系統全局變量的修改不會影響到其它進程而只是針對打開保護文件的該進程產生影響。My_write這個新的系統函數會根據傳入該函數的參數fd獲得文件節點這個數據結構,在li皿x平臺下文件節點用Structinode表示,通過inode這個數據結構就可以獲得了系統調用目前正在操作的文件信息。通過將windowscan進程傳入的保護文件名稱filename和通過netlink機制(該機制在內核模塊中作用,圖中記為Netlink-kernel)獲取的windowscan進程截獲的用戶欲另存為文件名saveasfilename,與系統函數正在操作的文件結構中的成員變量cLiname這個參數進行比對可以達到第二層的調用分流。即參數!=filename或者參數!=saveasfilen咖e時,調用0riginalsys—write函數;參數==filen咖eor或者參數==saveasfilename時,返回文件標識符錯誤。第二層的調用分流保證了對系統調用表這個操作系統全局變量的修改不會影響到同一進程操作的其他非保護文件。其中,!=表示不等于,==表示等于。步驟6,windowscan進程監控客戶端上焦點窗口的活動,當焦點窗口變化是保護文件主窗口到另存為對話框的時候,該進程再啟動一個子進程鎖住屏幕上的鼠標操作防止7焦點窗口的變化,新的子進程抓取用戶在"另存為"對話框中的鍵盤輸入,直至關閉"另存為"對話框,該子進程將用戶的鍵盤操作記錄為一個字符串作為用戶欲另存為的目標文件名,然后該子進程通過netlink機制將用戶欲另存為的文件名傳遞給系統函數重定向模塊,子進程結束這個操作后返回父進程windowscan,windowscan進程繼續監控焦點窗口的變化;同時,windowscan進程監控用戶在保護文件主窗口上面涉及到復制剪貼的鍵盤和鼠標操作,通過屏蔽復制剪貼這些操作所引發的事件達到使復制剪貼失效的目的。如附圖4所示,windowscan進程在步驟5建立的子進程加載系統函數重定向模塊,父進程則會循環監控焦點窗口的變化情況(即循環檢測焦點窗口活動序列),同時抓取主窗口上涉及復制剪貼的鍵鼠操作。可以通過Xwindow下的Xlib函數XgetlnputFocus函數獲得實時焦點窗口,設置兩個字符串分別存儲前后兩個時刻焦點窗口的名稱,當這個變化過程匹配"保護文件主窗口另存為對話框"的序列時,就可以斷定用戶在對保護文件進行另存為操作,這時候啟動一個后臺子進程屏蔽屏幕鼠標操作防止用戶繼續改變焦點窗口,同時這個子進程抓取用戶在另存為對話框上的所有鍵盤輸入,創建鍵盤事件處理循環。這類似于在li皿x平臺上實現中文輸入法的機制(抓取用戶輸入生成漢字寫入應用程序顯示區域),根據鍵盤輸入的處理結果就可以生成一個字符串代表用戶欲命名的另存為文件名,在另存為對話框關閉時通過net1ink機制建立net1ink客戶端將這個文件名傳遞給內核模塊,結束子進程。權利要求一種基于linux平臺數字版權管理的文件使用控制方法,用于對基于linux平臺的客戶端實現使用文件監控,所述客戶端使用Xwindow系統作為圖形用戶界面,其特征在于包括以下步驟,步驟1,服務器端接受客戶端對保護文件的請求后抽取客戶端的硬件信息,然后從該硬件信息中抽取作為服務器端所使用的加密密鑰,采用該加密密鑰對保護文件加密得到加密后文件;步驟2,在服務器端將安全組件與加密后文件打包,打包生成一個自解壓的可執行文件發送給客戶端;步驟3,當步驟2所得可執行文件在客戶端上運行時,首先從客戶端的硬件信息中抽取解密密鑰并且與服務器端所使用的加密密鑰對比,若一致則運行解密進程獲得保護文件,否則說明客戶端非法使用保護文件而拒絕服務;在運行解密進程的過程中同時啟動一個用于監控保護文件窗口狀態的進程,這個進程在保護文件的窗口關閉時卸載安全組件;步驟4,在獲得保護文件后,解密進程生成一個子進程負責啟動合適的第三方應用程序打開保護文件,父進程啟動安全組件提供的windowscan進程;步驟5,windowscan進程首先創建子進程負責加載系統函數重定向模塊,所述系統函數重定向模塊將系統調用表中sys_write函數和sys_getdents64函數分別重定向到my_write函數和my_getdents64系統函數;在加載系統函數重定向模塊時,接收保護文件的文件名和打開保護文件的進程名作為參數,同時利用netlink機制開始監聽windowscan進程的消息;重定向后,所述my_getdents64系統函數根據傳遞進來的保護文件的文件名來確定隱藏哪個文件,所述my_write函數則負責控制向磁盤中寫入數據的監控;步驟6,windowscan進程監控客戶端上焦點窗口的活動,當焦點窗口變化是保護文件主窗口到另存為對話框的時候,該進程再啟動一個子進程鎖住屏幕上的鼠標操作防止焦點窗口的變化,新的子進程抓取用戶在“另存為”對話框中的鍵盤輸入,直至關閉“另存為”對話框,該子進程將用戶的鍵盤操作記錄為一個字符串作為用戶欲另存為的目標文件名,然后該子進程通過netlink機制將用戶欲另存為的文件名傳遞給系統函數重定向模塊,子進程結束這個操作后返回父進程windowscan,windowscan進程繼續監控焦點窗口的變化;同時,windowscan進程監控用戶在保護文件主窗口上面涉及到復制剪貼的鍵盤和鼠標操作,通過屏蔽復制剪貼這些操作所引發的事件達到使復制剪貼失效的目的。2.如權利要求1所述的文件使用控制方法,其特征在于my_Write函數控制向磁盤中寫入數據的實現方式為,當正在使用系統函數的進程名是第三方應用程序的進程名時,判斷該函數執行的目標文件名是不是保護文件名或者windowscan進程截獲的"另存為"文件名,是就拒絕寫盤操作,否則調用syS_write函數。全文摘要本發明提供一種基于linux平臺數字版權管理的文件使用控制方法,本發明優點在于將數字文件與客戶端綁定,從而有效的防止了數字文件的擴散;在服務器端將實現保護的程序和模塊與加密后的文件綁定成一個可執行文件發送給用戶,從操作系統層面出發設計保護措施從而實現了對用戶透明的版權控制;具有通用性和可擴展性;具有良好的安全性能。文檔編號G06F21/24GK101719210SQ20091027340公開日2010年6月2日申請日期2009年12月25日優先權日2009年12月25日發明者劉學彬,王玉林申請人:武漢大學