欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于解密已加密數(shù)據(jù)并在存儲器空間中定位用于執(zhí)行的解密數(shù)據(jù)的方法和設(shè)備的制作方法

文檔序號:6409984閱讀:273來源:國知局
專利名稱:用于解密已加密數(shù)據(jù)并在存儲器空間中定位用于執(zhí)行的解密數(shù)據(jù)的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及特別是在程序被執(zhí)行或使用時解密已加密數(shù)據(jù)的已加密數(shù)據(jù)的解密設(shè)備,本發(fā)明進一步涉及在實現(xiàn)安全保護的同時解密已加密數(shù)據(jù)的解密設(shè)備,本發(fā)明也涉及這樣的解密方法。
背景技術(shù)
按照常規(guī),當要解密在計算機系統(tǒng)上再現(xiàn)或執(zhí)行的已經(jīng)為安全目的被加密的數(shù)據(jù)和程序時,在計算機系統(tǒng)上執(zhí)行一個解密支持程序;然而,在一個其技術(shù)規(guī)范對公眾開放的開放的計算機系統(tǒng)中,程序可能很容易被分析和修改。這樣,就可能有一些非法行為,諸如(i)改變加密支持程序和(ii)把不應(yīng)被引用或改變的解密的程序修改成一個可引用或可改變的解密的程序。
為了加強安全保護,有人建議了其它方法,例如,將解密支持系統(tǒng)本身加密,和在進行數(shù)據(jù)解密時,解密支持系統(tǒng)被解密(日本未審查的專利申請公開號09-006232),在解密過程開始之前,檢查解密支持系統(tǒng)的可靠性(日本未審查的專利申請公開號11-039156)。在這些案例中作了防止對解密支持程序的改變的安排,以便保護解密的程序和數(shù)據(jù)的安全。
即使解密過程是通過執(zhí)行可信的解密支持程序而進行的,如果在解密程序或數(shù)據(jù)已經(jīng)被加載到計算機系統(tǒng)的存儲器中后,利用非法的中斷之類而接管控制,則加載的程序或數(shù)據(jù)變成是可引用的或可改變的,并且安全不能得到保護。

發(fā)明內(nèi)容
鑒于上述問題,本發(fā)明的主要目的是提供一種從解密到執(zhí)行加密程序和數(shù)據(jù)的過程期間增強安全的已加密數(shù)據(jù)的解密設(shè)備和方法,進一步提供一種通過對已經(jīng)解密并加載到存儲器中的程序或數(shù)據(jù)防止非法引用和改變、或把非法引用限定到最低水平,而實現(xiàn)安全保護的已加密數(shù)據(jù)的解密設(shè)備和方法。
為了實現(xiàn)該目的,本發(fā)明提供一種為了在計算機系統(tǒng)上執(zhí)行而解密已經(jīng)被加密和存儲的程序的已加密數(shù)據(jù)的解密設(shè)備,該已加密數(shù)據(jù)的解密設(shè)備包含存儲單元,可用來在其中把該程序存儲為多個已加密的部分程序(partial programs);存儲器定位信息生成單元,可用來為每個部分程序生成存儲器定位信息,包括(i)指示解密的定時(timing)的定時信息,和(ii)指示每個部分程序在被解密后要被定位到哪個定位區(qū)域(location area)的位置信息(positionalinformation),該定位區(qū)域包含在用于該程序的執(zhí)行的一個存儲器空間中;解密單元,可用來按照定時信息順序地讀取和解密存儲單元中的部分程序;加載單元,可用來把每個解密的部分程序定位到由位置信息指示的每個定位區(qū)域。
由于這種安排,只有一部分程序被定位在存儲器中,用于程序的執(zhí)行;因此,即使發(fā)生存儲器中的數(shù)據(jù)由于濫用中斷而被非法引用的情況,也有可能使損失最小化。另外,通過作出安排,即在該至少一個部分程序的解密之前,把至少一個部分程序的存儲器定位信息中的位置信息覆寫(overwrite)到另一個部分程序已經(jīng)被定位的定位區(qū)域,就有可能縮短某個部分程序在用于程序的執(zhí)行的存儲器中存在的時間期間,并使該部分程序更難被以非法方式引用。
本發(fā)明也提供一種安排,其中把位置信息加密后存儲,加載單元解密位置信息,使得每個解密的部分程序都按照解密的位置信息被定位到每個定位區(qū)域。
用這種安排,有可能防止解密的部分程序已經(jīng)被加載到的位置可以通過對存儲器定位信息的非法引用而被泄漏的情況;因此,有可能增強已經(jīng)被加載到存儲器中的程序的安全。
本發(fā)明進一步提供一種安排,其中,在把每個部分程序放入一個定位區(qū)域時,當該定位區(qū)域的大小大于該部分程序的大小時,加載單元把啞元數(shù)據(jù)(dummy data)寫入一個空白區(qū)域,它是由于該定位區(qū)域的大小與該部分程序的大小之差而尚未被覆寫的該定位區(qū)域的一部分。
由于這種安排,有可能防止沒有在覆寫過程中被刪除的一個部分程序的這樣一部分在存儲器中長時間地存留的情形;因此,有可能降低一個部分程序的這樣一部分被以非法方式被引用的風(fēng)險。
本發(fā)明進一步提供一種安排,其中,在被放入一個定位區(qū)域的一個部分程序結(jié)束執(zhí)行之后另一個部分程序被定位到該定位區(qū)域之前過了預(yù)定長度的時間時,加載單元刪除這一個部分程序。
由于這種安排,有可能防止一個結(jié)束處理的部分程序在存儲器中長時間地存留的情形;因此,有可能降低該部分程序被以非法方式引用的風(fēng)險。
本發(fā)明也提供進一步包含密鑰嵌置單元(key embedding unit)的加密數(shù)據(jù)解密設(shè)備,密鑰嵌置單元可用來在程序加密的過程期間預(yù)先在至少一個部分程序中嵌置在另一個部分程序的解密過程中使用的加密密鑰的部分或全部,其中,解密單元用嵌置在已經(jīng)被解密并定位在存儲器空間中的該至少一個部分程序中的加密密鑰執(zhí)行這個其它部分程序的解密過程。
由于這個安排,即使非法用戶取得對系統(tǒng)的控制,并試圖讓一個特定部分程序加載到存儲器中,以便非法地引用它,由于有這個特定部分程序的解密所需的加密密鑰的其它部分程序在存儲器中不存在,非法引用是不可能的。
此外,為了實現(xiàn)類似的有益效果,也可以接受的是,已加密數(shù)據(jù)的解密設(shè)備進一步包含程序嵌置單元,程序嵌置單元可用來在程序加密的過程期間預(yù)先在至少一個部分程序中嵌置一個加密密鑰生成程序,該加密密鑰生成程序用于生成在另一個部分程序的解密過程中使用的加密密鑰的部分或全部,其中,解密單元利用通過執(zhí)行嵌置在已經(jīng)被解密并放在存儲器空間中的該至少一個部分程序中的加密密鑰生成程序而生成的加密密鑰執(zhí)行這個其它部分程序的解密過程,或者,加密數(shù)據(jù)解密設(shè)備進一步包含一個密鑰之加密密鑰(encryption-key-for-a-key)嵌置單元,該密鑰之加密密鑰嵌置單元可用來在程序加密的過程期間預(yù)先在至少一個部分程序中嵌置一個密鑰之加密密鑰,該密鑰之加密密鑰被用來解密一個要在另一個部分程序的解密過程中被使用的加密密鑰,其中,解密單元用從已經(jīng)被解密并放在存儲器空間中的該至少一個部分程序中獲得的密鑰之加密密鑰所解密的加密密鑰,執(zhí)行這個其它部分程序的解密過程。
此外,也有可能有一種安排,其中,加載單元在要被解密的部分程序之一初次被定位到存儲器空間中之前,動態(tài)地確定每個定位區(qū)域的絕對地址。
由于這個安排,程序被加載到的存儲器中的位置在程序每一次被執(zhí)行時都改變;因此,即使非法用戶企圖通過在推測加載位置的同時觀察存儲器的內(nèi)容以非法方式引用程序的內(nèi)容,這種企圖成功的可能性也低。
本發(fā)明也提供一種安排,其中,解密單元利用一個解密支持程序來解密每個部分程序,加密數(shù)據(jù)解密設(shè)備進一步包含用來確認解密支持程序的可靠性的解密程序確認單元,并且解密單元在解密每個部分程序之前讓解密程序確認單元確認解密支持程序的可靠性,并且僅在可靠性被確認之后才解密每個部分程序。
由于這個安排,不可能通過濫用解密支持單元而以非法方式引用程序的內(nèi)容;因此,有可能改善解密時的安全程度。
也可以接受有這樣一種安排,其中,加密數(shù)據(jù)解密設(shè)備進一步包含一個非法訪問禁止單元,非法訪問禁止單元在檢測到中斷時,通過刪除一個或多個已經(jīng)被定位在存儲器空間中的部分程序而執(zhí)行一個非法訪問禁止過程。
由于這個安排,不可能通過濫用中斷以非法方式引用程序的內(nèi)容。
此外,也可能有這樣一種安排,其中,非法訪問禁止單元有一個在執(zhí)行非法訪問禁止過程時執(zhí)行的啞元程序。
另外,通過有這樣的安排,其中非法訪問禁止單元預(yù)先接收一個或多個位置的登記—在每個位置發(fā)生合法性程序檢查中斷,當被檢測到的中斷發(fā)生在登記的位置之一時,不執(zhí)行非法訪問禁止過程,就有可能避免由為了防止非法引用甚至必須禁止合法中斷的情形所引起的不便。
也可以接受讓加密數(shù)據(jù)解密設(shè)備進一步含有一個存儲位置信息存儲單元,用于在其中存儲已經(jīng)被加密的、并且為每一個部分程序指示在存儲單元中的存儲位置的存儲位置信息,其中,解密單元按照解密單元已經(jīng)從存儲位置信息存儲單元讀取并解密的存儲位置信息,從存儲單元讀取并解密每一個部分程序。
由于這個安排,只有合法的部分程序?qū)⒈粓?zhí)行。換言之,有可能防止由執(zhí)行一個為了非法引用的目的并已經(jīng)替代合法的部分程序而存儲在存儲裝置中的程序的非法用戶進行的非法引用。此外,也可以接受讓加密數(shù)據(jù)解密設(shè)備進一步含有一個存儲位置信息認證單元,用于判定存儲位置信息是否可信,其中,當存儲位置信息認證單元作出肯定性判定時,解密單元從存儲單元讀取并解密每一個部分程序。
此外,本發(fā)明進一步提供一種為了在計算機系統(tǒng)上執(zhí)行而解密已經(jīng)被加密和存儲的程序的已加密數(shù)據(jù)的解密設(shè)備,該已加密數(shù)據(jù)的解密設(shè)備包含存儲單元,可用來在其中把該程序存儲為多個已加密的部分程序;解密單元,可用來從存儲單元讀取作為執(zhí)行目標的的一個部分程序并解密所讀取的部分程序;存儲器定位確定單元,可用來動態(tài)地確定作為執(zhí)行目標的該部分程序的定位位置,該定位位置指示在用于程序的執(zhí)行的存儲器空間中的一個地址;加載單元,可用來把該解密的部分程序定位到由存儲器定位確定單元所確定的定位位置。
用這個安排,程序被定位到的存儲器中的位置,將在程序每一次被執(zhí)行時都改變;因此,即使非法用戶企圖通過在推測加載位置的同時觀察存儲器的內(nèi)容以非法方式引用程序的內(nèi)容,這種企圖成功的可能性也低。
此外,有這樣一個安排是有效的,其中,存儲器定位確定單元為至少一個部分程序的每一個確定一個定位位置,使得一個部分程序被覆寫到一個包含在存儲器空間中的、一個或多個其它部分程序已經(jīng)被定位的區(qū)域中。為了使非法引用更難,可以接受的是,加密數(shù)據(jù)解密設(shè)備進一步含有一個執(zhí)行目的存儲器確定單元(execution-purposememory determining unit),用于在程序的執(zhí)行開始之前,動態(tài)地確定存儲器空間的起始地址和大小的其中之一或二者。也希望有這樣一種安排,其中,當存儲器定位確定單元確定一個部分程序的定位位置,使得該部分程序被覆寫到一個或多個其它部分程序已經(jīng)定位的區(qū)域時,該定位位置被確定得使得該部分程序覆寫一個最早在該存儲器空間定位的部分程序,或者希望有這樣一種安排,其中,當存儲器定位確定單元確定一個部分程序的定位位置,使得該部分程序被覆寫到一個或多個其它部分程序已經(jīng)定位的區(qū)域時,該定位位置被確定得使得該部分程序部分地或全部地延伸到已經(jīng)被定位的兩個或更多的其它部分程序上此外,這里提及的有益效果可以通過以下方式實現(xiàn)(i)一種由具有上述特征的加密數(shù)據(jù)解密設(shè)備執(zhí)行的加密數(shù)據(jù)解密方法;或(ii)一種讓計算機執(zhí)行這個解密方法的程序。此外,以下事項對實現(xiàn)上述的有益效果也有用生成存儲器定位信息和加密密鑰的程序、加密密鑰、以及在生成“密鑰之加密密鑰”的同時加密程序的加密程序生成裝置,它們都被具有上述特征的加密數(shù)據(jù)解密設(shè)備使用。
附圖簡要說明圖1是一個程序加載器的框圖,該程序加載器是本發(fā)明的加密數(shù)據(jù)解密設(shè)備的一個實施例,是在程序加載器運行所在的計算機系統(tǒng)中顯示的;圖2是表示實施例中部分程序的存儲地址信息與存儲位置之間的對應(yīng)的示意圖,存儲位置處于一個二級存儲裝置中并由存儲地址信息限定;圖3是表示本發(fā)明實施例中存儲器定位信息的結(jié)構(gòu)和內(nèi)容的例子示意圖;圖4是表示如何將本實施例中解密的部分程序定位在共享存儲器中的示意圖;圖5是表示本實施例中在加密程序的解密和加載過程中程序加載器的操作的流程圖;圖6表示區(qū)域地址信息的例子;圖7表示區(qū)域地址信息的其它例子;圖8是表示啞元數(shù)據(jù)嵌置過程沿時間線的總體結(jié)構(gòu)的示意圖;圖9是表示一個改進例子中的程序加載器的結(jié)構(gòu)的框圖;圖10是表示由調(diào)用關(guān)系信息定義的部分程序之間的的調(diào)用關(guān)系的示意圖;圖11是表示在解密過程的時候部分程序的存儲器位置沿時間線的示意圖;圖12是表示一個改進例中的程序加載器的結(jié)構(gòu)的框圖;圖13是表示一個改進例中的程序加載器的結(jié)構(gòu)的框圖;圖14是表示另一個改進例中的程序加載器的結(jié)構(gòu)的框圖;圖15A到15E是表示如何將改進例中的解密的部分程序定位在共享存儲器M中的示意圖;圖16表示改進例中的存儲器管理信息的內(nèi)容;圖17是表示改進例子中確定一個部分程序的存儲器位置的流程的流程圖。
具體實施例方式
以下參照


本發(fā)明的加密數(shù)據(jù)解密設(shè)備的實施例。
總體結(jié)構(gòu)圖1是一個程序加載器1和相關(guān)裝置的框圖,該程序加載器是本發(fā)明的加密數(shù)據(jù)解密設(shè)備的一個實施例,該程序加載器和相關(guān)裝置是在程序加載器和相關(guān)裝置運行所在的計算機系統(tǒng)中顯示的。在本實施例中,要被加密數(shù)據(jù)解密設(shè)備解密的加密數(shù)據(jù)是個程序。
在本實施例中,程序加載器1按照來自操作系統(tǒng)(以下稱為OS)的指令,從二級存儲裝置S中讀取加密的程序并解密之,然后將它加載到用于執(zhí)行的共享存儲器M中?!凹虞d”的意思是把一個程序定位到存儲器空間中以便執(zhí)行之。
程序加載器1的特點在于使用作為常規(guī)地用于管理存儲器的技術(shù)的覆蓋(overlay)方法,以便保護解密程序的安全。覆蓋方法是一種用于將程序存儲到一個大小小于該程序的存儲器中的技術(shù)。覆蓋方法是把一個程序劃分成段(segments)(以下稱為“部分程序”),然后在交錯的時間把它們定位進相同的存儲器區(qū)域。盡管有存儲器大得足以同時在其中定位整個程序,本發(fā)明的程序加載器1為了實現(xiàn)安全保護而故意采用覆蓋方法。特別地,程序加載器1將程序以一組部分程序的形式加密和存儲程序,當程序需要被執(zhí)行時,程序加載器1將程序以部分程序為單位解密,并通過順序地彼此覆寫而把它們加載到共享存儲器M的同一個區(qū)域。此外,由于定位部分程序的位置和定時是在考慮到機密性的同時確定的,安全保護能力高得許多。
解密和加載的過程是以部分程序為單位進行的,部分程序表示從一個源文件或一組彼此相關(guān)的源文件生成的目標碼。更具體來說,一個目標碼表示一個是程序組件的子程序或庫模塊本身。
通過像這樣地按段加載程序,整個程序的內(nèi)容在非法引用中被泄漏的可能性變小。這是因為,為了引用整個程序,需要在每一次加載一個部分程序時重復(fù)進行非法引用。
然而應(yīng)當注意的是,覆蓋方法中并不考慮安全保護,因為覆蓋方法的最初目的是節(jié)省存儲器資源。因此,一個結(jié)束處理的部分程序停留在存儲器中,一直到被下一個部分程序覆寫。另外,由于程序被加載到的區(qū)域的地址是固定的,容易解破程序的入口。此外,有可能通過濫用中斷功能或篡改解密支持程序以非法方式部分地引用或修改程序。
本實施例的程序加載器1在將其安排為使得考慮安全保護之后執(zhí)行覆寫處理方法,以及檢查是否有對中斷功能的濫用或?qū)饷苤С殖绦虻拇鄹摹?br> 結(jié)構(gòu)總體結(jié)構(gòu)以下說明程序加載器1的結(jié)構(gòu)。
程序加載器1包含控制總體過程的控制單元11;包括用解密支持程序P解密的加密的部分程序在內(nèi)的加密的數(shù)據(jù)的解密單元12;在解密之前檢查解密支持程序P的可靠性的解密支持程序認證單元13;確定將解密的部分程序向共享存儲器M中定位的位置和定時的存儲器定位定義單元14;以及防止通過讓一個在共享存儲器M中的正被執(zhí)行的部分程序中斷而進行的非法訪問的非法訪問禁止單元15。
此外,程序加載器1包含一個在其中存儲在程序解密過程中使用的各種加密信息和加密密鑰的存儲單元16;以及一個確認存儲單元16中存儲的存儲地址信息(將在以后作解釋)的可靠性的存儲地址信息認證單元17。解密單元12由分別處理不同種類的數(shù)據(jù)的存儲地址解密單元121、存儲位置信息解密單元122和部分程序解密單元123組成。
存儲單元16中存儲的信息包括,用于解密過程的加密密鑰161;指示一個作為解密目標的加密的部分程序要被存儲到的二級存儲裝置S中的位置的存儲地址信息162;指示解密的部分程序要被存儲到的在共享存儲器M中的位置的存儲器定位信息163。
在從二級存儲裝置S讀取該作為解密目標的加密的部分程序時,存儲地址信息162被引用。由于存儲地址信息162是在已經(jīng)被加密后被存儲的,存儲地址信息解密單元121解密它。然后,在存儲地址信息162被解密后,存儲地址信息認證單元17檢查它的可靠性(檢查是否它未被篡改)。
圖2是表示存儲地址信息162與部分程序的存儲位置之間的對應(yīng)的示意圖,存儲位置位于二級存儲裝置S中,由存儲地址信息162指定。存儲地址信息162由部分程序的標識信息210和指示部分程序各自在二級存儲裝置S中被存儲在哪個位置的地址信息220組成。存儲地址信息的項數(shù)與部分程序的個數(shù)一樣多。地址信息220部分被加密。
存儲器定位信息163是定義部分程序的每一個在被解密后應(yīng)當要被定位在共享存儲器M中的哪個位置的信息。提前讓定位位置被定義,是將每個數(shù)據(jù)段順序地覆寫到一個預(yù)定區(qū)域中的覆蓋方法的執(zhí)行的一個前提條件。存儲器定位信息163在被加密后被存儲,在被存儲器定位信息解密單元122引用時得到解密。
圖3是表示存儲器定位信息的結(jié)構(gòu)和內(nèi)容的例子的示意圖。存儲器定位信息指示在哪個時間(即按什么順序)應(yīng)當將哪個程序定位在共享存儲器M中。共享存儲器M中的部分程序存儲區(qū)(region)被劃分成三個區(qū)域。
圖3中所示的存儲位置信息163由區(qū)域標識信息部分310和部分程序標識信息部分320組成。區(qū)域標識信息部分310在其中存儲指示該信息與哪個區(qū)域有關(guān)的標識信息。部分程序標識信息部分320在其中存儲(i)要被定位到由在區(qū)域標識信息部分310中存儲的標識信息所指示的區(qū)域的部分程序的標識信息,和(ii)指示要按什么順序定位每個部分程序的數(shù)據(jù)。
存儲器定位信息163指示,共享存儲器M中的部分程序存儲區(qū)被劃分成三個區(qū)域,可以將三個部分程序順序地定位到區(qū)域1中,將四個部分程序順序地定位到區(qū)域2中,將兩個部分程序順序地定位到區(qū)域3中。
圖4是表示在程序執(zhí)行時如何按照存儲器定位信息163將解密的部分程序定位在共享存儲器M中的示意圖。圖4顯示,沿著程序的過程執(zhí)行的時間線(橫軸),部分程序每個被定位在共享存儲器M的三個存儲區(qū)域的一個中。例如,部分程序A、B和C被順序地定位在區(qū)域1中,并且,在時間期間t1,部分程序A(區(qū)域1)、部分程序D(區(qū)域2)和部分程序H(區(qū)域3)在共享存儲器M中共存。在同一個時間期間在共享存儲器M中共存的部分程序,例如通過在過程的執(zhí)行期間調(diào)用另一個部分程序中的過程而可能互相具有相關(guān)性。
上述的存儲器定位信息是由存儲器定位定義單元14在作為加密目標的程序的加密過程之前生成。這個生成過程與常規(guī)覆蓋方法中所使用的相同類型的位置信息的生成過程基本相同,然而,在本實施例中,這個生成過程的執(zhí)行考慮了安全保護。本實施例中的生成過程將在以后解釋。
結(jié)構(gòu)的主要部分的說明以下進一步詳細解釋至此已經(jīng)在總體上作過解釋的結(jié)構(gòu)的主要部分。
解密支持程序認證單元13解密支持程序認證單元13在各種加密數(shù)據(jù)的解密過程之前確認解密支持程序P是否可信。更具體來說,(i)當部分程序解密單元123將要解密一個加密的部分程序時,(ii)當存儲地址解密單元121將要解密加密的存儲地址信息時,以及(iii)當存儲位置信息解密單元122將要解密加密的存儲器定位信息時,解密支持程序認證單元13響應(yīng)來自這些部件的每個的請求而執(zhí)行解密支持程序P的一個認證過程。解密支持程序認證單元13將該認證過程的結(jié)果返回到請求的源。當認證的結(jié)果是“可信的(非篡改的)”,解密支持程序認證單元13從請求的源接收作為解密目標的數(shù)據(jù),并將其傳送到解密支持程序P,然后從解密支持程序P接收解密過程的結(jié)果,并將其傳送到請求的源。
解密支持程序認證單元13所執(zhí)行的認證過程是為了確認解密支持程序P在該程序上一次被執(zhí)行到當前時間之間沒有被篡改。為了判斷可靠性,將要參考一些包括以下在內(nèi)的事項(i)解密支持程序P的大小是否已經(jīng)改變,(ii)更新的日期和時間,以及(iii)解密支持程序P的單向哈希值(one-way hash values)。應(yīng)當注意的是,認證方法并不僅限于此,使用用于認證電子簽名的方法的技術(shù)也是可以接受的。為了執(zhí)行這個認證過程,解密支持程序認證單元13在其中存儲解密支持程序P在首次執(zhí)行時的大小,以及關(guān)于更新的日期和時間的以及哈希值的信息。
存儲地址信息認證單元17存儲地址信息認證單元17確認是否存儲地址信息是可信的,該存儲地址信息已經(jīng)被解密支持程序P按照一個來自存儲地址解密單元121的指令解密。這是要確認該存儲地址信息在它上次被執(zhí)行時與當前時間之間沒有被篡改過。
存儲地址信息認證單元17用一個通常使用的、諸如單向哈希函數(shù)的認證技術(shù)執(zhí)行存儲地址信息的認證過程,并把結(jié)果返回到存儲地址解密單元121。為了執(zhí)行這個認證過程,存儲地址信息認證單元17在其中存儲關(guān)于該存儲地址信息的必要信息(在第一次解密時的哈希值和通常用于認證過程的信息片段(pieces of information))。
控制單元11當OS指定哪個部分程序要被解密時,控制單元11把該要被解密的部分程序的標識信息傳送到存儲地址解密單元121,命令存儲地址解密單元121獲得并解密該部分程序的存儲地址。當存儲地址解密單元121輸出解密的存儲地址時,控制單元11把它傳送到部分程序解密單元123,命令部分程序解密單元123解密該部分程序。與此同時,控制單元11把作為解密目標的部分程序的標識信息傳送到存儲位置信息解密單元122,命令存儲位置信息解密單元122為該部分程序解密存儲器定位信息。
控制單元11按照由存儲位置信息解密單元122輸出的存儲器定位信息,把已經(jīng)由部分程序解密單元123輸出的解密的部分程序,加載到共享存儲器M的一個區(qū)域中。如圖3中所示,存儲器定位信息由每個部分程序的標識信息和每個區(qū)域的標識信息組成,沒有包括指示每個區(qū)域的絕對地址值的信息。每個區(qū)域的絕對地址值被存儲在控制單元11中。
在上述過程的過程中,當解密支持程序P或者存儲地址信息有問題時(當這二者中的一個或兩個被確認為不真實時),控制單元11命令其它部件中斷該過程并執(zhí)行執(zhí)行一個刪除至此刻為止已經(jīng)被解密的各種數(shù)據(jù)(部分程序、存儲器定位信息、以及存儲地址信息)的過程。
存儲器定位定義單元14在加密部分程序時,存儲器定位定義單元14生成、并在存儲單元16中存儲在上述解密過程中所提到的存儲器定位信息163。部分程序由被加密程序生成裝置C加密。被加密程序生成裝置C把作為加密目標的程序(一組部分程序)轉(zhuǎn)換成一種執(zhí)行形式,在把它存入二級存儲裝置之前加密轉(zhuǎn)換了的程序,使得每個部分被按照在存儲器定位信息中指定的順序定位在存儲器中。
首先,存儲器定位定義單元14從報頭信息之類的信息中獲得用于為部分程序確定在存儲器中的位置所必需的各種信息。此外,存儲器定位定義單元14獲得在確定時應(yīng)當認為是重要的那些標準(被系統(tǒng)管理員作為參數(shù)指定的標準),包括關(guān)于部分程序在執(zhí)行時要被加載到其中的共享存儲器的信息(例如部分程序存儲區(qū)和該區(qū)中包含的區(qū)域(area)的個數(shù)以及它們的大小)。存儲器定位定義單元14根據(jù)這些種類的信息,生成存儲器定位信息。更具體來說,存儲器定位定義單元14在生成存儲器定位信息時,參照如下的信息(1)每個部分程序的大小(加密前的大小,即解密后的大小)(2)部分程序之間的相關(guān)性(調(diào)用的部分程序和被調(diào)用的部分程序之間的關(guān)系,以及調(diào)用的個數(shù))(3)每個部分程序的機密水平(4)所要求的性能水平按照這些信息片段確定存儲器中的位置的過程,也在常規(guī)的覆寫過程中進行;然而,在本實施例中,由于目標是程序的安全保護,與按照通常的覆寫方法確定存儲器位置的情形相比,第(3)項被認為更重要,第(4)項具有更低的優(yōu)先級。
因此,存儲器定位定義單元14生成這樣的存儲器定位信息,按照這個存儲器定位信息,具有高的機密水平的部分程序來說,加載和刪除的過程被頻繁地重復(fù),使得這樣一個部分程序被定位在共享存儲器M中的時間期間的長度最低,一旦過程結(jié)束,就被另一個部分程序覆寫。部分程序的機密水平,例如可以通過由系統(tǒng)管理員對每個部分程序的評估而被指定,其中,機密的評估值被輸入到存儲器定位定義單元14中作為參數(shù)。
此外,也有可能以下述方式指定存儲器定位信息。存儲器定位定義單元14用按照常規(guī)被用于確定存儲器定位信息的算法,生成多個位置信息的模式(pattern)作為候選。然后,按照就安全保護而設(shè)定的標準,評估該多個定位信息候選,把最好的候選指定為定位信息。其中一個標準例如是“具有高的機密水平的部分程序在存儲器中存在的時間期間的估計長度”?;蛘?,系統(tǒng)管理員參考由存儲器定位定義單元14生成的該多個定位信息候選,從中選擇一個,這也是可以接受的。
此外,如果需要讓同時部署在存儲器中的部分程序的大小(在一個時間可以被引用的程序的部分的大小)的總值更小,則最好使部分程序被加載到其中的存儲器的大小更小。
應(yīng)當注意的是,存儲器定位定義單元14可以是加密的程序生成裝置C的一個成分,而不是程序加載器1的一個成分。
非法訪問禁止單元15非法訪問禁止單元15執(zhí)行用于禁止能為分析在共享存儲器M中被執(zhí)行的部分程序而利用中斷進行的非法程序分析的過程。
中斷的意思是,在一個過程在計算機系統(tǒng)上被執(zhí)行期間,發(fā)生另一個具有更高優(yōu)先級的事件。一般來說,發(fā)生中斷時,正在被執(zhí)行的該過程被臨時中止,用于該中斷事件的另一個過程將被執(zhí)行。利用這個功能,就有可能在一個任意選擇的時刻中止一個程序,查看該時刻的存儲器或某個寄存器的內(nèi)容,或者在修改存儲器或寄存器的內(nèi)容后使處理恢復(fù)。
例如,通過在程序加載器1解密存儲地址信息之后立即有一個中斷發(fā)生,就有可能查看解密的存儲地址信息。另外,通過在解密和加載一個部分程序的完成后使一個中斷發(fā)生,就有可能被定位在共享存儲器M中的該部分程序的內(nèi)容。
為了防止這種情況,非法訪問禁止單元15在檢測到一個中斷時,中止正被另一個部件執(zhí)行的過程或刪除被加載到共享存儲器M中的部分程序。
更具體來說,在檢測到一個中斷后,非法訪問禁止單元15發(fā)布一個陷阱指令,該指令要中止正在其中包括程序加載器1的計算機系統(tǒng)上被執(zhí)行的程序的過程,并查看CPU中的一個IDT(中斷描述符表)。IDT是一個表,它定義關(guān)于相應(yīng)于中斷指令的處理程序的信息。在本實施例中,這種處理程序被定義得被用于執(zhí)行對一個程序的中止和對在共享存儲器M的解密的部分程序存儲區(qū)中存儲的內(nèi)容的刪除。非法訪問禁止單元15把過程轉(zhuǎn)移到這樣一個處理程序,以便程序的中止和存儲器內(nèi)容的刪除被執(zhí)行。
同樣,在上述過程的同時,非法訪問禁止單元15執(zhí)行一個執(zhí)行啞元程序的過程。啞元程序被用來干擾試圖以中斷的濫用接管控制的人,與此同時程序被中止或者存儲器內(nèi)容被刪除。這里,假設(shè)一個啞元程序的過程是一個不影響其它程序的過程的過程,例如“只顯示字符串”或“輸出一個與一個加密的程序的執(zhí)行的結(jié)果相反的結(jié)果”。在檢測到中斷時,非法訪問禁止單元15調(diào)用一個已經(jīng)被預(yù)先加載到執(zhí)行環(huán)境中的啞元程序并使其執(zhí)行。
操作其次,下面參照附圖,解釋具有如上所述的結(jié)構(gòu)的程序加載器1的操作,焦點在于控制單元11的描述。
圖5是表示程序加載器1在加密的程序的解密和加載的過程中的操作的流程圖。然而應(yīng)當注意的是,非法訪問禁止單元15所執(zhí)行的過程沒有在圖中表示,因為它是以中斷的方式被執(zhí)行的。同樣,圖中也沒有表示要被并行地執(zhí)行的加密程序的過程和生成存儲器定位信息的過程。
解密和加載的過程,在控制單元11從外部(OS或正在系統(tǒng)執(zhí)行的一個程序)接收到一條要求執(zhí)行該過程的指令(其包括指定將被處理的部分程序的標識信息)時開始(S501是)。在目標程序被啟動,并且,在啟動后,被解密并加載后的正在執(zhí)行的部分程序調(diào)用另一個部分程序時,該要求執(zhí)行該過程的指令從OS被傳送。就一條在啟動時的指令來說,具有程序的入口點的部分程序是解密目標。就一條在啟動后的指令來說,被調(diào)用的部分程序的標識信息是該過程的目標。
控制單元11接收指令后,把被指定的部分程序的標識信息傳送到存儲地址解密單元121,命令它解密存儲地址,以便從二級存儲裝置S讀取被指定的部分程序。
存儲地址解密單元121接收來自控制單元11的指令后,從存儲單元16讀取該部分程序的(被加密的)存儲地址信息(S502),也命令解密支持程序認證單元13確認是否解密支持程序P是可信的。
如果解密支持程序P被確認是真實的(S503是),存儲地址解密單元121用解密支持程序P解密在步驟S502讀取的存儲地址信息。此時,存儲地址解密單元121從存儲單元16獲得一個用于解密這個存儲地址信息的加密密鑰,并把該加密密鑰和加密的存儲地址信息傳送到解密支持程序P,以便執(zhí)行解密過程(S504)。
反之,如果解密支持程序被確認不是可信的(當被判斷已經(jīng)篡改時)(S503No),解密支持程序認證單元13通知控制單元11這個判斷結(jié)果??刂茊卧?1通知OS檢測到篡改,并中止該解密和加載的過程(S514)。
在步驟S504已經(jīng)獲得解密的存儲地址信息的存儲地址解密單元121,把解密的存儲地址信息傳送到存儲地址信息認證單元17,以便執(zhí)行認證過程。存儲地址信息認證單元17用一個通常使用的、諸如單向哈希函數(shù)的認證技術(shù)執(zhí)行認證過程,并把結(jié)果返回到存儲地址解密單元121。存儲地址解密單元121把該結(jié)果傳送到控制單元11。
如果由于認證過程的結(jié)果,存儲地址信息被確認是不可信的(S505No),控制單元11通知OS“存儲地址是非法的”,并中止該解密和加載過程(S514)。
另一方面,存儲地址信息被確認是可信的(S505是),控制單元11從存儲地址解密單元121獲得解密的存儲地址信息。然后,控制單元11繼續(xù)到從二級存儲裝置S讀取作為加密和加載的目標的部分程序的過程和解密該部分程序的過程。更具體來說,首先,控制單元11命令要執(zhí)行解密過程的部分程序解密單元123開始該過程。
部分程序解密單元123收到來自控制單元11的指令后,首先從二級存儲裝置S的存儲位置,讀取被指定的加密的部分程序和一個用于解密該部分程序的加密密鑰(S506)。然后,部分程序解密單元123命令解密支持程序認證單元13執(zhí)行一個解密支持程序P的認證過程,并把結(jié)果返回到控制單元11。
如果解密支持程序P被確認是可信的(S507是),部分程序解密單元123把在步驟S506獲得的加密的部分程序與該加密密鑰一起傳送到解密支持程序P,以便執(zhí)行該部分程序的解密過程(S508).。
反之,如果解密支持程序被確認不是可信地(S507否),部分程序解密單元123通知控制單元11該結(jié)果??刂茊卧?1通知OS“已經(jīng)檢測到對解密支持程序的篡改”,并中止該部分程序的解密和加載的過程(S514)。同樣,此時如果有任何已經(jīng)被加載到共享存儲器M中的解密的部分程序,控制單元11刪除它,也刪除解密的存儲地址(S514)。
部分程序解密單元123完成對部分程序的解密過程后,把解密的部分程序輸出到通知控制單元11??刂茊卧?1執(zhí)行把該解密的部分程序定位到共享存儲器M中的空間的過程。更具體來說,控制單元11命令存儲器定位信息解密單元122從存儲單元16讀取加密的存儲器定位信息和加密密鑰(S509)。
存儲器定位信息解密單元122使解密支持程序認證單元13執(zhí)行一個對解密支持程序P的認證過程。
如果解密支持程序P被確認是真實的(S510是),存儲器定位信息解密單元122把加密的存儲器定位信息和加密密鑰傳送到解密支持程序P,以便執(zhí)行解密過程,然后把已經(jīng)被解密的存儲器定位信息返回到控制單元11(S511)??刂茊卧?1按照解密的存儲器定位信息,把在步驟S508中解密的部分程序定位到共享存儲器M中(S512)。
如果解密支持程序P被確認不是可信的(S510否),存儲器定位信息解密單元122通知控制單元11該結(jié)果??刂茊卧?1刪除在步驟S508中解密的部分程序,然后中止該過程(S514)。此外,如果有已經(jīng)被加載到存儲器空間中的任何部分程序,控制單元也刪除之。
至此所述的各過程將被重復(fù),一直到整個目標程序結(jié)束被處理(S513是)。
總結(jié)正如迄此為止所述的那樣,使用覆蓋(overlay)方法的本實施例的程序加載器1,以部分程序為單位,解密作為解密目標的加密的程序,并按照一個已經(jīng)對安全保護加以考慮后而設(shè)定的存儲器定位信息,通過一個覆寫過程,把解密的部分程序定位到存儲器的一個預(yù)定區(qū)域中;程序加載器1由此防止對整個程序的非法引用。此外,通過以下過程使安全保護得到更有力的保障(1)通過每個部分程序每次被解密時檢查解密支持程序的可靠性而核實對解密支持程序的非法篡改;(2)通過也加密指示解密的部分程序位于存儲器中的哪里的存儲器定位信息,給對解密的程序的非法查看制造困難;和(3)通過在檢測到中斷時刪除解密的數(shù)據(jù)(例如部分程序),防止利用中斷的濫用進行的非法引用。
改進例以下解釋上述實施例的六個可能的改進例子。
改進例1在上述實施例中,非法訪問禁止單元15判斷所有中斷都非法,并中止過程和刪除解密的數(shù)據(jù);然而,有些中斷是合法的。在本改進例中,過程被執(zhí)行,以接受合法的中斷。
本改進例中的總體的加密數(shù)據(jù)解密設(shè)備與前文所述的實施例的加密數(shù)據(jù)解密設(shè)備相同,只是非法訪問禁止單元所執(zhí)行的過程有部分不同。因此,將省略該結(jié)構(gòu)的圖形,但是把該單元稱作非法訪問禁止單元15’,以示區(qū)別。
本改進例中的非法訪問禁止單元15’防止以非法的方式利用中斷對程序進行反向分析,同時通過允許與用于以是合法目的的、檢查故障之類為目的的調(diào)試程序有關(guān)的中斷,接受用于合法的調(diào)試程序的中斷。調(diào)試程序是一種功能,它在期望的位置停止(暫停)一個程序的過程,以便有可能在該狀態(tài)下察看或修改存儲器內(nèi)容,以檢查故障。
進行通過暫停停止程序的方式,是預(yù)先在每個出現(xiàn)停止之處設(shè)定一個斷點,并在過程每次到達其中一個斷點時讓一個中斷發(fā)生。也有可能設(shè)定詳細的條件,每個條件作為在每個斷點處停止程序的前提條件。然而,按照前述實施例的非法訪問禁止單元15的處理方法,當OS讓一個要暫停的中斷發(fā)生時,程序就停止;因此,檢查故障是不可能的。
因此,本改進實施例的非法訪問禁止單元15’以下述方式把與調(diào)試程序有關(guān)的中斷(用于暫停的中斷)與其它中斷區(qū)分開來在程序生成裝置C轉(zhuǎn)換成一種執(zhí)行形式后,非法訪問禁止單元15’在程序仍然處于加密前的階段,從被合法授權(quán)的用戶接收該執(zhí)行形式的程序的斷點的設(shè)置。非法訪問禁止單元15’在其中存儲已經(jīng)被設(shè)定的斷點的(以行號、函數(shù)名、地址等表達的)位置信息。
然后,在程序的解密和加載階段,非法訪問禁止單元15’監(jiān)視中斷(與非法訪問禁止單元15的方式相同)。當程序正在執(zhí)行期間發(fā)生中斷時,非法訪問禁止單元15’把發(fā)生位置與已經(jīng)被存儲的中斷位置信息比較。當發(fā)生位置與預(yù)先已經(jīng)在斷點位置信息中設(shè)定的斷點的位置之一相符時,則不執(zhí)行在實施例中所述的諸如刪除存儲器內(nèi)容的過程,允許用戶繼續(xù)該程序。
反之,如果中斷發(fā)生在一個與預(yù)先設(shè)定的位置不同的位置,則非法訪問禁止單元15’與非法訪問禁止單元15一樣地中止程序的執(zhí)行,并執(zhí)行刪除存儲器M中的諸如部分程序的加密的數(shù)據(jù)的過程。
改進例2以下解釋一個更嚴格地確保存儲器定位信息的安全保護的改進例。
在前述的實施例中,,一旦生成的存儲器定位信息被重復(fù)地使用,其內(nèi)容與每一次一個目標加密的程序被解密和加載時的內(nèi)容相同。換言之,當一個加密的程序被執(zhí)行時,構(gòu)成該程序的每個部分程序每次在相同的定時被定位在存儲器空間中相同的地址。因此,在監(jiān)視存儲器空間中的數(shù)據(jù)的同時,通過程序的重復(fù)執(zhí)行,可以解譯存儲器定位信息,這很難說是沒有可能的。當存儲器定位信息被解譯時,對信息的使用的非法參考就變得可能。
因此,本改進例的目的是防止存儲器定位信息被解譯,以及確保對加密的程序的安全保護。因此,在本改進例中,生成存儲器定位信息的使得構(gòu)成程序的部分程序的存儲器定位位置在程序每次被執(zhí)行時都動態(tài)變化。
更具體來說,將存儲器定位信息設(shè)定得使得要被分配給共享存儲器M中的三個區(qū)域的每一個的絕對地址值在程序每次被執(zhí)行時都變化。
本改進例中的總體的加密數(shù)據(jù)解密設(shè)備的結(jié)構(gòu)與前述實施例中的相同,只有由存儲器定位定義單元執(zhí)行的部分過程是不同的。因此,將省略該總體設(shè)備的結(jié)構(gòu)的圖形,但是以下將把本改進例中的存儲器定位定義單元稱作存儲器定位定義單元14’,以示區(qū)別。
圖6表示三種模式的區(qū)域地址信息601、602、和603,它們被存儲器定位定義單元14’存儲,被用于改變區(qū)域的地址。每個區(qū)域地址信息,由一個區(qū)域和一個被分配給該區(qū)域的絕對地址的組合組成,有一個標識符部分610和一個絕對值地址部分620。
在前述實施例中,控制單元11在其中存儲且使用相應(yīng)于區(qū)域地址信息(例如區(qū)域地址信息610)的僅僅一種信息。在本改進例中,存儲器定位定義單元14’在存儲器定位信息被生成時,從三種模式的區(qū)域地址信息選擇一個,并把它傳送到控制單元11。當某個部分程序被解密和加載時,控制單元11按照所選擇的區(qū)域地址的模式確定每個區(qū)域的絕對地址,并進一步按照每個區(qū)域的絕對地址和存儲器定位信息為解密的部分程序獲得共享存儲器M中的一個定位地址。
存儲器定位定義單元14’可以在(i)一條要求執(zhí)行程序的指令被輸入到程序加載器1時,或者在(ii)解密和加載程序的過程已經(jīng)開始并且在第一個部分程序被加載之前,選擇一種模式的區(qū)域地址信息。
應(yīng)當注意的是,如果如上述方式把一個模式改變到另一個模式,不必非要按上述方式改變區(qū)域的絕對地址。也可能通過“滑動”絕對地址來改變存儲器定位位置。
圖7標識按照通過滑動改變絕對地址值的方法的區(qū)域地址信息。在區(qū)域地址信息700中,區(qū)域和絕對地址值是一一對應(yīng)的,每個絕對地址值包括一個是α、β和γ的其中之一的變量(滑動寬度)。存儲器定位定義單元14’通過改變每個變量的值來改變區(qū)域的絕對地址。
利用一個隨機數(shù)生成程序(例如隨機數(shù)生成函數(shù)、或者使用存儲在定時器等中的時間信息的隨機數(shù)生成程序),把每個變量的值確定為一個任意值,是可以接受的。把每個變量的值確定得滿足下列條件,即“一個區(qū)域的變量(即滑動寬度)的值與要被定位在該區(qū)域中的部分程序的大小的總和不大于該區(qū)域的大小”。其理由是,應(yīng)當避免這樣一種情況,即一個部分程序被滑動時,被定位得部分地位于該區(qū)域之外。
應(yīng)當注意的是,也有可能這樣安排,使得存儲器定位定義單元14’在其中存儲有程序上一次被執(zhí)行時的各區(qū)域地址,并通過查看它們,確保各區(qū)域的絕對地址與上一次的不同。
區(qū)域地址的改變,可以由控制單元11自己執(zhí)行,而不是由控制單元11按照如上所述由存儲器定位定義單元14’存儲的信息執(zhí)行。
改進例3以下解釋一個通過防止某個部分程序長時間被定位在共享存儲器M中而更嚴格地確保部分程序的安全保護的改進例。
之所以在前述實施例中采用將部分程序覆寫在相同區(qū)域中的覆蓋方法,是因為當某個部分長時間保持位于共享存儲器中時,被非法引用的風(fēng)險增大。然而,即使采用覆蓋方法,根據(jù)一個要被另一個覆寫的部分程序的大小而定,已經(jīng)被處理的該部分程序的一部分將保持在存儲器中,不被刪除。
例如,在按照圖4中所示的方式把部分程序定位在存儲器中時,對于順序定位在區(qū)域1中的三個部分程序來說,假設(shè)部分程序B和部分程序C每個都只有首先被定位的部分程序A的大小的一半。在這種情況下,部分程序A的后一半不被通過用部分程序B和C覆寫而刪除,而是保持在區(qū)域1中。如果部分程序A的后一半特別地有一個高的保密級,則就安全保護來說,讓它長時間保持就位是不太可取的。
在區(qū)域3中,不管部分程序H的過程在時間期間t1結(jié)尾時被完成的事實,部分程序H的數(shù)據(jù)從時間期間t2的開始到下一個部分程序得到定位期間,依然保持。
在本改進例中,每次當一個部分程序被解密并定位在存儲器空間中時,都檢查該定位區(qū)域的大小與該部分程序的大小之間是否有差別。當定位區(qū)域更大時,將通過把啞元數(shù)據(jù)(啞元程序)嵌置(覆寫)在該區(qū)域的空白區(qū)域中而解決上述問題。當一個部分程序結(jié)束處理時,將從該時刻測量消逝的時間,當消逝了預(yù)定的時間時,整個區(qū)域?qū)⒈粏≡獢?shù)據(jù)覆寫。這里提到的這個過程將由一個控制單元執(zhí)行。(以下將稱其為控制單元11’,以區(qū)別于實施例中的控制單元11)。
圖8是表示啞元數(shù)據(jù)嵌置過程的總體結(jié)構(gòu)的示意圖。該圖顯示順著時間線在某個區(qū)域N中定位部分程序以及如何嵌置啞元數(shù)據(jù)。在時間期間T2、T3和T5,由于每個被定位的部分程序都小,要嵌置一段啞元數(shù)據(jù)來填充區(qū)域大小與部分程序大小之間的差額。在時間期間T4,將一段啞元數(shù)據(jù)填充整個區(qū)域,因為在前一個部分程序結(jié)束處理之后立刻存在一個預(yù)定長度的時間流逝。
當控制單元11’按照存儲器定位信息把一個由部分程序解密單元123解密的部分程序定位在共享存儲器M的區(qū)域之一中時,控制單元11’獲得解密后的部分程序的大小(該大小由存儲器定位定義單元14’制定為存儲器定位信息的一部分),并且也通過查看共享存儲器而獲得定位區(qū)域的大小。
控制單元11’比較這兩個大小的值,當區(qū)域大小較大時,從啞元程序存儲區(qū)域中讀取大小為這兩個大小之間的差額的啞元程序數(shù)據(jù),然后把該數(shù)據(jù)嵌置到該區(qū)域中的空白區(qū)域(在部分程序的結(jié)尾后的間隙和/或在部分程序的開始之前的間隙)。通過這個過程,前一個被定位在該區(qū)域中的部分程序的數(shù)據(jù)將被完全刪除。
與時間消逝相應(yīng)的啞元數(shù)據(jù)嵌置過程,將在一個部分程序完成處理之后被執(zhí)行。當一個被加載到某個區(qū)域中的部分程序完成處理時,控制單元11’就開始用一個內(nèi)置計時器為這個特定區(qū)域測量消逝的時間。當消逝的時間達到一個預(yù)定值時,如果下一個要被加載到這個區(qū)域的部分程序尚未被解密,則將啞元數(shù)據(jù)嵌置整個區(qū)域。
通過這個過程,前一次已經(jīng)被定位在該區(qū)域中的部分程序的數(shù)據(jù)被完全刪除。啞元程序?qū)嶋H上是一種實際不執(zhí)行的程序,或者在執(zhí)行時不執(zhí)行有意義的處理的程序代碼。
改進例4在本改進例中,通過對加密密鑰的存儲位置以及通過獲得加密密鑰的程序具有一個不同安排,加強對每個部分程序的安全保護。更具體來說,做出這樣的安排,即一個用于解密一個部分程序的加密密鑰,可以從在該一個部分程序之前已經(jīng)被合法地加載到共享存儲器M中的另一個部分程序中獲得。
在本改進例中,在每個部分程序中,嵌置(i)一個用于解密要被這個特定部分程序調(diào)用的另一個部分程序的加密密鑰、或者(ii)用于獲得該加密密鑰的某種數(shù)據(jù)。當被調(diào)用的部分程序需要被解密時,將使用用于獲得被嵌置到調(diào)用部分程序中的該加密密鑰或者該加密密鑰的數(shù)據(jù)。
基本例這個方法的最基本的實施例如下所述首先,在加密的程序生成裝置C加密一個調(diào)用部分程序時,把一個用于加密一個被調(diào)用部分程序的加密要嵌置在該調(diào)用部分程序中。然后,該調(diào)用部分程序被加密。隨后,將該加密密鑰的嵌置位置存儲到存儲單元16中。
然后,當該被調(diào)用部分程序需要被解密時,部分程序解密單元123從存儲單元16讀取有關(guān)該調(diào)用部分程序的嵌置位置信息,并按照該嵌置位置信息從位于共享存儲器M中的調(diào)用部分程序讀取該加密密鑰,然后用該加密密鑰解密該被調(diào)用部分程序。
例如,設(shè)想一種情形,其中一個非法用戶以非法方式取得控制,并把一個用于將一個想得到的部分程序加載到存儲器中的調(diào)用指令發(fā)出。在這樣的情況下,被假定要調(diào)用該想得到的部分程序的合法部分程序在共享存儲器M中不存在,因此,按照本改進實施例的方法,就不可能獲得該加密密鑰并解密該想得到的部分程序。因此,該非法用戶所想得到的部分程序?qū)⒉槐患虞d到共享存儲器M中,這就有可能防止引用。
高級例本改進例的基本方式如上所述。也有可能通過進一步的調(diào)整更有力地確保安全保護。下面解釋高級例。
高級例1
圖9表示從調(diào)用部分程序中的部分代碼生成一個用于被調(diào)用程序的加密/解密的加密密鑰的本發(fā)明高級例的程序加載器9,在該程序加載器的一個安排中,其中一個執(zhí)行加密的組件(加密的程序生成裝置C9)和一個執(zhí)行解密的組件(部分程序解密單元923)的每個有共同的相同加密密鑰生成裝置(密鑰生成裝置901a和901b)。應(yīng)當注意的是,執(zhí)行與程序加載器1的相同的過程的組件被給予相同的標注號,因此解釋被省略。
加密時的過程加密的程序生成裝置C9首先生成指示各部分程序之間的調(diào)用關(guān)系的調(diào)用關(guān)系信息,然后把每個部分程序轉(zhuǎn)換成執(zhí)行形式。然后,加密的程序生成裝置C9參考調(diào)用關(guān)系信息,為每個部分程序生成一個加密密鑰,然后用每個加密密鑰加密每個部分程序。
圖10是表示各部分程序之間的調(diào)用關(guān)系的示意圖。
以下解釋用于加密一個部分程序的以及由加密的程序生成裝置C9執(zhí)行的過程。一開始,加密的程序生成裝置C9通過查看調(diào)用關(guān)系信息檢測到一個調(diào)用另一個部分程序的部分程序,然后,讀取該調(diào)用部分程序的執(zhí)行形式的代碼的部分。隨后,加密的程序生成裝置C9把所讀代碼傳送到密鑰生成單元901a,并命令它生成一個加密密鑰。密鑰生成單元901a為該代碼計算哈希值,并把該哈希值作為一個加密密鑰返回到加密的程序生成裝置C9。
加密的程序生成裝置C9用這個加密密鑰加密該被調(diào)用部分程序,并在被加密的被調(diào)用部分程序上,附加指示用于該加密密鑰的生成的代碼的位置的信息(該調(diào)用部分程序的執(zhí)行形式的代碼的一個偏移地址)。然后,加密的程序生成裝置C9把被加密的被調(diào)用部分程序存儲在二級存儲裝置S中。
在一個部分程序被特定多個部分程序調(diào)用的情況中,被調(diào)用程序被用從各是調(diào)用程序部分的每個的部分所生成的加密密鑰加密。這樣,從一個被調(diào)用部分程序生成多個模式的加密的被調(diào)用程序。在這種情況下,有必要作這樣的安排,即例如通過在把被加密部分程序存儲到二級存儲裝置S之前,讓每個調(diào)用部分程序的標識信息附加到對應(yīng)模式的被加密部分程序,使得執(zhí)行解密過程的組件能明白對應(yīng)關(guān)系。然而應(yīng)當注意的是,即使在有多個調(diào)用該部分程序的部分程序時,只有在不在存儲器中的被調(diào)用部分程序被調(diào)用時,加密密鑰才是必需的;因此,沒有必要從一個只對在存儲器中的被調(diào)用部分程序進行調(diào)用的調(diào)用部分程序生成一個加密密鑰。
例如,對于圖10中所示的部分程序H,可以從部分程序C至F各自生成加密密鑰。然而應(yīng)當注意的是,如果同時滿足以下兩個條件,則應(yīng)當只從部分程序F生成用于解密部分程序H的加密密鑰,而不必從部分程序C生成一個加密密鑰(i)當部分程序H被部分程序F調(diào)用時,觸發(fā)部分程序H的解密和加載;和(ii)存儲器定位信息定義在部分程序C調(diào)用部分程序H時,部分程序H已經(jīng)被加載到存儲器中。
解密時的過程以下解釋在程序執(zhí)行的階段解密一個加密的部分程序的并由部分程序解密單元923執(zhí)行的過程。首先,部分程序解密單元923從控制單元911接收(i)一個要被解密并加載到共享存儲器M中的被調(diào)用部分程序的標識信息、和(ii)一個調(diào)用部分程序的標識信息。然后,部分程序解密單元923從二級存儲裝置S讀取要被解密的加密的被調(diào)用部分程序。
隨后,部分程序解密單元923從該加密的被調(diào)用部分程序中讀取指示要從中生成一個加密密鑰的代碼的位置的信息,并且也從被加載到共享存儲器M中的該調(diào)用部分程序中讀取由該代碼位置所指示的代碼。隨后,部分程序解密單元923把所讀取的代碼傳送到密鑰生成單元910b并讓它生成加密密鑰。然后,部分程序解密單元923用這個加密密鑰解密該被加密的被調(diào)用部分程序。該解密過程一完成,就刪除該加密密鑰。
圖11是表示在解密過程的時候部分程序的存儲器位置順著時間線的示意圖。在該圖中所示的例子中,當部分程序H被已經(jīng)被加載到區(qū)域1中部分程序F調(diào)用時,觸發(fā)該部分程序H向區(qū)域3中的加載。隨后,已經(jīng)被加載到區(qū)域3中的部分程序H,將被后來被加載到區(qū)域2中的部分程序C調(diào)用。
相應(yīng)地,部分程序解密單元923用從部分程序F生成的一個加密密鑰,解密部分程序H。當部分程序C調(diào)用部分程序H時,部分程序解密單元923不進行解密過程。判斷當部分程序C調(diào)用部分程序H時不必執(zhí)行解密過程的,可以是控制單元911或者是部分程序解密單元923??梢酝ㄟ^以下方式判斷(i)比較被調(diào)用部分程序的標識信息與存儲器定位信息,或者(ii)檢查是否被調(diào)用部分程序已經(jīng)被加載到存儲器M中。
高級例2以下解釋另一個高級例圖12所示的本高級例的加密的程序生成裝置C12,在加密過程期間,在一個調(diào)用部分程序中,嵌置一個用于獲得一個為一個被調(diào)用部分程序獲得加密密鑰的密鑰獲得程序(密鑰獲得程序生成單元1201和加密的程序生成裝置C12)。在解密該被調(diào)用部分程序時,部分程序解密單元1223通過讓嵌置在該調(diào)用部分程序中的該密鑰獲得程序被執(zhí)行而獲得該加密密鑰,然后用該加密密鑰解密該被調(diào)用部分程序。
加密時的過程由加密的程序生成裝置C12執(zhí)行的過程與前述實施例中的過程,直到把要被加密的程序轉(zhuǎn)換成執(zhí)行形式并把該程序化分成部分程序的步驟,都是相同的。以下解釋當一個部分程序被加密時由加密的程序生成裝置C12執(zhí)行的一個過程。
加密的程序生成裝置C12為一個要被加密的部分程序生成一個加密密鑰K,然后把這個加密密鑰K存儲到一個預(yù)定的存儲位置,并保持指示該存儲位置的信息(地址、偏移地址之類)。這個存儲位置可以位于二級存儲裝置S內(nèi)的一個預(yù)定位置,或者位于另一個部分程序的一個預(yù)定位置,當另一個部分程序被解密時該另一個部分程序被加載到的共享存儲器M中,等等。加密的程序生成裝置C12把該存儲位置通知給密鑰獲得程序生成單元1201,并讓它生成一個執(zhí)行“一個從該存儲位置讀取密鑰K并把它寫入存儲單元16內(nèi)的一個預(yù)定位置(為該特定部分程序分配的用于存儲加密密鑰K的區(qū)域)的過程”的密鑰獲得程序。
當該特定部分程序的上述過程完成時,加密的程序生成裝置C12把該密鑰獲得程序嵌置到要調(diào)用這個特定部分程序的另一個部分程序中。該密鑰獲得程序例如被嵌置到該特定部分程序在其中被調(diào)用的過程之前的一個位置。
當為所有部分程序的每個都完成生成要獲得程序的過程和把密鑰獲得程序嵌入每個調(diào)用部分程序的過程時,加密的程序生成裝置C12加密各部分程序。
解密時的過程獲得一個用于解密的加密密鑰的過程,與前述實施例中的類似。當接收一個解密一個部分程序的指令時,部分程序解密單元1223通過查看存儲單元16內(nèi)的為存儲該特定部分程序的加密密鑰K而分配的區(qū)域,讀取該加密密鑰K,并通過太加密密鑰K執(zhí)行解密過程。通過嵌置在已經(jīng)被加載到共享存儲器M中的調(diào)用部分程序的密鑰獲得程序的執(zhí)行,這個加密密鑰K已經(jīng)被寫入這個區(qū)域。當完成解密過程時,部分程序解密單元1223從該區(qū)域中刪除該加密密鑰K。即使相同的部分程序被再次調(diào)用,由于被嵌置在調(diào)用部分程序的密鑰獲得程序那時把加密密鑰K寫入相同的區(qū)域,刪除該解密密鑰K將沒有問題。
與把所有的部分程序共同的加密密鑰總是存儲在諸如存儲單元的預(yù)定位置的情形相比,在本改進例中,通過這個過程,就有可能降低加密密鑰被偷盜的風(fēng)險。同樣,即使一個部分程序的加密密鑰偶然被偷盜,對其它部分程序也將沒有影響。此外,也可以做出這樣的安排,使得一個被調(diào)用部分程序僅當被原始合法過程流中的一個合法調(diào)用程序調(diào)用時才能被解密;因此,即使已經(jīng)取得非法控制的人為了非法引用的目的試圖把某個部分程序加載到存儲器中,他/她也將不能進行非法的引用,因為沒有加密密鑰可用。
改進例4的注釋應(yīng)當注意的是,在以上的解釋中,將用于獲得在被調(diào)用部分程序的解密過程中使用的加密密鑰的數(shù)據(jù)或程序,嵌置在調(diào)用部分程序中,但是,將該數(shù)據(jù)或程序嵌置在其它地方也是可以接受的。例如,把用于獲得加密密鑰的數(shù)據(jù)或程序,嵌置在當作出調(diào)用時在共享存儲器中存在的(不是調(diào)用部分程序的)部分程序之一中,也是可以接受的。同樣,作為一種選擇,當一個部分程序完成執(zhí)行并被從共享存儲器中刪除時,控制單元只讀取用于獲得一個加密密鑰的并且已經(jīng)被嵌置在該部分程序中的數(shù)據(jù)或程序,并把該數(shù)據(jù)或程序存儲在它的一個專有區(qū)域中,然后在以后為另一個部分程序在執(zhí)行一個解密過程中使用它,這也是可以接受的。
在以上的解釋中的安排是,把用于獲得一個解密要的數(shù)據(jù)或程序嵌置在一個部分程序(調(diào)用部分程序)中;然而,如果把該數(shù)據(jù)或程序嵌置在多個部分程序中,那也是可以接受的。
例如,為了嵌置一個解密密鑰本身,把該解密密鑰分解并嵌置在當作為解密目標的部分程序被調(diào)用時位于共享存儲器M中的多個部分程序中,在解密時,部分程序解密單元讀取這些被分解的加密密鑰,并把它們合并在一起,以獲得該加密密鑰,這也是可以接受的。一個好主意例如是,存儲器信息定義單元在加密時,單獨地規(guī)定一些指示以下內(nèi)容的信息(i)要從什么部分程序的那些位置讀取被分解的加密密鑰;和(ii)應(yīng)當以什么順序把已經(jīng)讀取的分解的加密密鑰合并在一起,以獲得一個加密密鑰。
在使用一個加密密鑰獲得程序時,例如在部分程序是按A、C和H的順序執(zhí)行的情況時,也可能以下列方式獲得部分程序H的加密密鑰(i)當部分程序A被執(zhí)行時,嵌置在部分程序A中的加密密鑰獲得程序把部分程序H的加密密鑰的第一半寫入存儲單元16中的加密密鑰存儲區(qū)域的第一半;和(ii)當部分程序C被執(zhí)行時,嵌置在部分程序C中的加密密鑰獲得程序把該加密密鑰的第二半寫入該加密密鑰存儲區(qū)域的第二半。通過這個過程,當部分程序H被調(diào)用時,部分程序H的加密密鑰以完整的狀態(tài)被存儲在存儲單元中。
應(yīng)當注意的是,只要沒有矛盾,則有可能組合地使用上述不同方法。
此外,在以上解釋中,加密的程序生成裝置包含執(zhí)行把加密密鑰嵌入加密程序的過程的組件,諸如密鑰生成單元901a、或密鑰獲得程序生成單元1201;然而,程序加載器連同存儲器定位定義單元一起包含這些中的一個也是可以接受的。
在本改進例中,本發(fā)明的加密的數(shù)據(jù)解密設(shè)備體現(xiàn)為程序加載器,加上執(zhí)行把加密密鑰嵌入加密程序的過程的組件,諸如密鑰生成單元901a、或密鑰獲得程序生成單元1201,它們的每個都是加密的程序解密裝置的一部分。
改進例5在本改進例中,借助使用一個密鑰之加密密鑰而加密一個用于一個部分程序的加密/解密過程的加密密鑰,安全保護得到加強。此外,在程序的加密過程之前,為部分程序的每個個別地生成一個密鑰之加密密鑰。每個“密鑰之加密密鑰”在要被一個對應(yīng)的部分程序調(diào)用的每個部分程序的加密/解密時將用于一個加密密鑰的加密/解密過程。
圖13是表示本改進例中的程序加載器1b和有關(guān)裝置的結(jié)構(gòu)的框圖。在這個安排中,向前述的實施例中增加了一個個別加密密鑰生成單元1301(在加密的程序生成單元C13中)和一個加密密鑰解密單元1302(在程序加載器1b)中。
加密時的過程以下描述一個過程,其中,加密的程序生成裝置C13加密一個部分程序。首先,加密的程序生成裝置C13命令個別加密密鑰生成單元1301為部分程序的每個個別地生成“密鑰之加密密鑰”。然后,加密的程序生成裝置C13把每個“密鑰之加密密鑰”嵌入每個部分程序,與此同時,生成指示嵌置位置的信息(“嵌置位置信息”)。
隨后,加密的程序生成裝置C13用一個用于加密該程序的加密密鑰(這個加密密鑰對所有部分程序是共同的)加密該部分程序。然后,加密的程序生成裝置C13參照與改進例4中所用的相同的調(diào)用關(guān)系信息檢測調(diào)用這個部分程序的另一個部分程序。
然后,加密的程序生成裝置C13用對應(yīng)于該調(diào)用部分程序的“密鑰之加密密鑰”加密用于加密該部分程序的加密密鑰。然后,加密的程序生成裝置C13向存儲單元16傳送(i)加密的加密密鑰、(ii)對應(yīng)部分程序的和調(diào)用部分程序的標識信息、和(iii)預(yù)先生成的嵌置位置信息,以便存儲單元16把它們存儲在用于加密的加密密鑰的區(qū)域中。
解密時的過程解密過程由加密密鑰解密單元1302和部分程序解密單元1323。要解密某個部分程序的部分程序解密單元1323,首先通知加密密鑰解密單元1302(從控制單元11獲得的)要被解密的部分程序的和調(diào)用該部分程序的另一個部分程序的標識信息。按照該標識信息,部分程序解密單元1323從在存儲單元16中存儲的與每個部分程序相應(yīng)的“加密的加密密鑰”和“密鑰之加密密鑰的嵌置位置信息”集中,讀取對應(yīng)于要被解密的部分程序和調(diào)用部分程序的組合的集。
然后,加密密鑰解密單元1302從在共享存儲器M中的調(diào)用部分程序之一中的一個預(yù)定位置讀取“密鑰之加密密鑰”。然后,加密密鑰解密單元1302用該密鑰之加密密鑰解密要被解密的部分程序的“加密的加密密鑰”,以便獲得一個加密密鑰,并把它輸出到部分程序解密單元1323。
部分程序解密單元1323用該解密的加密密鑰解密該部分程序。
在以上的解釋中,各部分程序有一個共同的、將它們加密的加密密鑰,并且為每個部分程序個別地提供一個用來加密/解密該加密密鑰的“密鑰之加密密鑰”;然而,每個部分程序分別有一個個別的加密密鑰也是可以接受的。
同樣,在以上的解釋中,加密的程序生成裝置包含(i)個別加密密鑰生成單元1301、(ii)生成嵌置位置信息的組件、和(iii)執(zhí)行把加密的加密密鑰和嵌置位置信息存儲到存儲單元16中的組件;然而,程序加載器連同存儲器定位定義單元一起包含它們也是可以接受的。
改進例6在本改進例中,當一個部分程序被定位到共享存儲器M中時,可以在程序定位區(qū)域內(nèi)動態(tài)地確定定位位置。在本改進例中,與定位位置是按照存儲器定位信息被固定的的實施例不同,每個部分程序每一次執(zhí)行時被定位到一個不同位置。因此,這就有可能降低對被加載在存儲器中的部分程序的非法引用和篡改的風(fēng)險,更有力地確保安全保護。
結(jié)構(gòu)圖14是表示本改進例中的程序加載器1c的結(jié)構(gòu)的框圖。與實施例中的程序加載器1中的相同的組件具有相同的標注號。程序加載器1c的結(jié)構(gòu)特征是,它有一個代替存儲器位置解密單元152的存儲器定位確定單元140,以及代替存儲器定位信息的存儲器管理信息160。
存儲器定位確定單元140在一個部分程序被調(diào)用并且要被定位到存儲器M中時,按照一條來自控制單元11的指令為該部分程序確定存儲器定位位置并把所確定的位置通知控制單元11。存儲器定位確定單元140也生成和更新被用于管理存儲器中部分程序的存儲器定位位置的存儲器管理信息。以下的例子參照具體的程序定位的例子,進一步詳細地解釋由存儲器定位確定單元140執(zhí)行的過程。
圖15A到15E是表示在程序執(zhí)行時如何將解密的部分程序定位在共享存儲器M中的程序定位區(qū)域150中的示意圖。存儲器定位確定單元140在程序定位區(qū)域150中尋找一個大得足夠容納一個要在其中新定位的部分程序的空白區(qū)域,如果有一個這樣的空白區(qū)域,就把該空白區(qū)域的地址作為定位位置通知控制單元11。反之,如果沒有這樣的空白區(qū)域,存儲器定位確定單元140把一個已經(jīng)被定位在程序定位區(qū)域150中的部分程序的定位區(qū)域的地址通知控制單元11,以便該被定位的部分程序被該的部分程序覆寫。
圖16表示用于如圖15中所示被定位的部分程序的、由存儲器定位確定單元140順序生成和更新的存儲器管理信息160的內(nèi)容。存儲器管理信息160包括(i)指示作為目標的部分程序的標識信息1601、(ii)指示部分程序的存儲位置(它的起始地址)的起始地址1602、(iii)大小1603、和(iv)定位順序1604,將X指示為要在共享存儲器M中定位的第X個部分程序。存儲器定位確定單元140為要被新定位的部分程序生成一段存儲器管理信息,刪除要被新的部分程序覆寫的部分程序的存儲器管理信息段。因此,存儲器管理信息段的數(shù)目與當前在程序定位區(qū)域150中被定位的的部分程序的個數(shù)相同。
如圖15A中所示,部分程序A、B和C被順序地定位在程序定位區(qū)域150中。與此相應(yīng),存儲器定位確定單元140順序地生成對應(yīng)于每個部分程序的存儲器管理信息(圖16A)。應(yīng)當注意的是,盡管最先被定位的部分程序A在圖中位于程序定位區(qū)域150的開頭,該位置不必固定在該開頭。這是因為,如果它是固定在開頭的,則第一個部分程序和一些隨后的部分程序每次在它們被執(zhí)行時將不可避免地被定位在幾乎相同的位置,因此不能實現(xiàn)本改進例的目的,而該目的是通過動態(tài)地改變每一次執(zhí)行時的定位位置而使非法引用困難。因此,當?shù)谝粋€部分程序被定位時,該位置將滑動一個用隨機數(shù)之類確定的偏移量的大小,以便有可能避免讓定位位置固定在程序定位區(qū)域150的開頭。
在圖15A中所示的狀態(tài),部分程序D被部分程序C調(diào)用。此時,沒有一個足夠大的空白區(qū)域可用于在其中定位部分程序D;因此,存儲器定位確定單元140這樣來確定部分程序D的存儲器定位位置,即讓此時已經(jīng)在存儲器M中存在最長時間的部分程序A,被部分程序D覆寫。換言之,存儲器定位確定單元140確定部分程序D在存儲器中的起始地址與部分程序A的具有相同的值。圖15B表示按照這樣的存儲器定位信息定位了部分程序D時的狀態(tài)。由于部分程序D較大,部分程序D的后一半擴大到部分程序B的第一半之上。此時,存儲器定位確定單元140刪除關(guān)于部分程序A和B的存儲器管理信息,并生成關(guān)于部分程序D的存儲器管理信息。
然后,存儲器定位確定單元140按照規(guī)定的順序確定部分程序E的存儲器定位位置(圖15C)、部分程序F的存儲器定位位置(圖15D)和部分程序G的存儲器定位位置(圖15E)。相應(yīng)地,存儲器定位確定單元140把存儲器管理信息160也順序地更新為圖16B所示的和圖16C所示的存儲器管理信息。(圖16B對應(yīng)于圖15C,圖16C對應(yīng)于圖15E)。
當一個部分程序被定位到存儲器中以便覆寫另一個部分程序時,沒有必要非要按圖15B中所示的安排那樣地確定存儲器定位信息,使得一個已經(jīng)在存儲器中定位了最長時間的部分程序,從起開始位置起,被另一個部分程序覆寫。作為選擇,也可以如圖15D中所示的那樣確定定位位置,即一個部分程序從中間某個地方開始被另一個部分程序覆寫。作這樣的安排,使得兩個或更多的部分程序在一次覆寫中被一個部分程序(完全地或部分地)刪除。在圖15D中的安排是,部分程序D從中間的某個地方開始被比部分程序D小的部分程序F覆寫,以便部分程序F也覆寫部分程序E的第一半。
通過這個方式的安排,即使存儲器M的內(nèi)容例如在圖15D的階段被非法引用,則只有部分程序F是能被完全引用的部分程序。假設(shè)部分程序D是從其起始位置起被部分程序F覆寫的,則不但部分程序F、而且部分程序E,都會完全地被引用。存儲器定位確定單元140判斷圖15D中所示的覆寫過程是否是必需的,應(yīng)當在哪里開始覆寫,并根據(jù)部分程序D和跟隨的部分程序E在程序定位區(qū)域中的位置以及要覆寫其它部分程序的部分程序F的大小,作出判斷。
應(yīng)當注意的是,為了執(zhí)行上述過程,存儲器定位確定單元140從控制單元11獲得要被定位到存儲器中的部分程序的標識信息和大小。諸如存儲器M中程序定位區(qū)域的起始地址和大小的信息也被預(yù)先存儲。
操作以下解釋在確定部分程序的存儲器定位的過程中,程序加載器1c(特別是存儲器定位確定單元140)的操作。
圖17是表示確定部分程序的存儲器定位的過程流的流程圖。應(yīng)當注意的是,圖中所示的過程是程序加載器1c所執(zhí)行的程序解密過程和存儲器定位過程的一部分。圖中的過程是程序加載器1在實施例中執(zhí)行的如圖5中步驟S509至S511所示的過程的一種替代選擇。
首先,已經(jīng)接收了需要加載一個部分程序的請求的控制單元11,向存儲器定位確定單元140傳送(i)確定一個存儲器定位的請求、(ii)部分程序的標識信息、和(iii)部分程序的大小(S1701)。假設(shè)在該請求之前,控制單元11已經(jīng)完成從二級存儲裝置S讀取該部分程序并解密之。
存儲器定位確定單元140查看已經(jīng)被定位的部分程序的大小1603和包含在存儲器管理信息160中的起始地址1602,并檢查程序定位區(qū)域150中空白區(qū)域的位置和大小。存儲器定位確定單元140比較該大小與從控制單元11獲得的部分程序的大小,判斷是否有一個足夠大的空白區(qū)域能在其中定位該部分程序(S1702)。
如果有一個足夠大的空白區(qū)域(S1703是),存儲器定位確定單元140通知控制單元11該空白區(qū)域的地址(S1704),生成該部分程序的存儲器管理信息(S1708)。在存儲器管理信息160中,對于標識信息1601和大小1603,從控制單元11接收的信息被原封不動地使用;至于起始地址1602,將使用已經(jīng)向控制單元11通知的地址。存儲器定位確定單元140用內(nèi)置的計數(shù)器計算已經(jīng)被定位的部分程序的個數(shù),并用該計數(shù)器值規(guī)定“定位順序1604”的值。
如果沒有足夠大的空白區(qū)域(S1703否),存儲器定位確定單元140查看包含在存儲器管理信息160中的定位順序1604,并從當前位于存儲器的部分程序中選擇一個最早被定位在存儲器中的部分程序(即定位順序1604的值最小的部分程序),作為要被刪除的部分程序(S1705)。隨后,存儲器定位確定單元140向控制單元11通知該要被刪除的部分程序的區(qū)域的地址(S1706)。
如果要被新定位的部分程序大于要被刪除的部分程序(參看圖15B),將向控制單元11通知要被刪除的部分程序的起始地址。反之,如果要被新定位的部分程序小于要被刪除的部分程序(參看圖15D),將向控制單元11通知要被刪除的部分程序位于的區(qū)域中的某個地方的地址。這樣安排的原因是,如前文所述,如果多個已經(jīng)被定位在存儲器中的部分程序通過加載一個部分程序被覆寫將更好。規(guī)定地址值,使得新定位部分程序出現(xiàn)在要被刪除的部分程序與隨后的部分程序(即圖15c中的部分程序D和E)之間的邊界的兩邊。該值能從要被刪除的部分程序的結(jié)尾地址、隨后的部分程序的開始地址、和新定位的部分程序的大小中找出。
此外,存儲器定位確定單元140生成新定位的部分程序的存儲器管理信息(S1708)并刪除已經(jīng)被新定位的部分程序覆寫的部分程序的存儲器定位信息(S1707)。
總結(jié)如至此所解釋的那樣,按照本改進例中程序加載器1c,因為動態(tài)確定存儲器定位位置,有可能降低已經(jīng)被加載到存儲器中的部分程序被非法引用或被篡改的風(fēng)險,因此有力地確保安全保護。
應(yīng)當注意的是,在以上解釋中,先前存在的部分程序被新定位的部分程序覆寫;然而,如果先刪除先前存在的部分程序,再把新定位的部分程序定位到因該刪除而獲得的區(qū)域中,那也是可以接受的。在使用覆寫過程時,當先前存在的部分程序大于新定位的部分程序時,先前存在的部分程序的一部分將依然留在存儲器中;然而,當使用在定位部分程序之前發(fā)生刪除的過程時,有可能避免部分程序的一部分依然保留的情形。此外,為了避免部分程序的一部分依然保留的情形,先用新定位的部分程序執(zhí)行覆寫過程,再用啞元數(shù)據(jù)覆寫剩余的部分,那也是可以接受的。要被啞元數(shù)據(jù)覆寫的區(qū)域,將根據(jù)先前存在的部分程序和新定位的部分程序二者的起始位置和結(jié)束位置判斷。
此外,在上述解釋中,在每一次程序被執(zhí)行時,定位區(qū)域在程序定位區(qū)域中被動態(tài)改變;然而,這樣安排也是可以接受的,即在每一次程序被執(zhí)行時,程序定位區(qū)域的地址也改變。在這樣的情況下,當程序的執(zhí)行開始時,控制單元1確定程序定位區(qū)域的地址,并把它向存儲器定位確定單元通知。這樣,就使對程序定位區(qū)域的內(nèi)容的非法引用更困難,使安全保護得到改善。
此外,任意地設(shè)定程序定位區(qū)域的大小,也是可以接受的。當程序定位區(qū)域的大小較小時,能被在其中定位的程序的個數(shù)同樣變小,因此,即使發(fā)生非法引用,被泄漏的信息也有限。
本改進例與改進例2和改進例3的相同之處在于,其目的是防止“因為部分程序的定位位置固定,所以容易進行非法引用”的情形。因此,也有可能把本改進例與這些改進例的每個組合起來。換言之,在本改進例中利用改進例2中的方法,在每一次程序被執(zhí)行時改變程序定位區(qū)域的地址,這也是可以接受的。同樣,在如圖15B和15D中所示的那樣,先前存在的部分程序被新定位的部分程序覆寫,而先前存在的程序的部分依然存留的情形中,如改進例3中那樣用啞元數(shù)據(jù)片斷覆寫剩余的部分,那也是可以接受的。(要被啞元數(shù)據(jù)覆寫的區(qū)域,將根據(jù)先前存在的部分程序的起始位置和大小以及新定位的部分程序的起始地址和大小判斷)。
工業(yè)應(yīng)用本發(fā)明的加密的數(shù)據(jù)解密設(shè)備在解密過程只期間和之后在加強通常以執(zhí)行和參考為目的的被解密的數(shù)據(jù)的安全保護中十分有用。
額外信息以下是關(guān)于至此所述的的實施例和改進例的注釋。
在實施例中,為了實現(xiàn)安全保護,只把要被用解密支持程序解密的程序分解成部分程序;然而,把解密支持程序也作為一組部分程序而加密,然后解密、加載到存儲器中、以部分程序為單位執(zhí)行,那也是可以接受的。這樣,就有可能降低導(dǎo)致算法的內(nèi)容和在解密過程中使用的加密密鑰被從存儲器中的描述支持程序中讀取的風(fēng)險,因此實現(xiàn)更高水平的安全保護。
除了實施例中提及的過程外,為了檢查每個部分程序是否在被加載到存儲器M中后在被執(zhí)行時被改變,將在被加載到存儲器M中時的每個部分程序的內(nèi)容與在結(jié)束執(zhí)行時的內(nèi)容比較,那也是可以接受的。如果檢測到改變,就中止過程,刪除解密的數(shù)據(jù)。
以上提及的加密密鑰,是一種在諸如DES的加密方法中使用的加密密鑰,被安排得使得該加密密鑰一般被嵌置在程序的一個預(yù)定區(qū)域中,或者被隱藏在用戶看不到的區(qū)域或文件中;然而,加密方法可以是不同的加密方法。為了簡化加密方法,簡單地計算各值的邏輯異或(exclusive logical OR),那也是可以接受的。隱藏密鑰的方法也不限于以上的方法。
此外,部分程序解密單元、存儲地址解密單元和存儲器定位信息解密單元可以在一起構(gòu)成一個組件,或者可以是單獨的組件。當它們一起構(gòu)成一個組件時,請求一個解密過程的單元,以參數(shù)的形式規(guī)定指示要被解密的數(shù)據(jù)的類型的信息,解密單元通過引用該信息而執(zhí)行與所規(guī)定的數(shù)據(jù)的類型相應(yīng)的解密過程。
此外,已經(jīng)提供的解釋中假設(shè)解密目標是程序;然而,解密目標是程序以外的數(shù)據(jù),也是可能的。
也可以接受這樣的安排,即把程序分解成模塊單元或例程單元,以便獲得部分程序?;蛘?,在預(yù)先準備的諸如DLL的有些部分被組合成一個程序進行操作的情形中,把這些部分的每個或者個別地或者全體地當作一個程序部分,那也是可以接受的。本發(fā)明的前提是多個部分程序合起來作為一個程序操作,如何生成部分程序并不是一個基本問題。
此外,在實施例和改進例中表示的設(shè)備和裝置,每個都可以以被計算機執(zhí)行的程序的形式實現(xiàn)。當它們的每個被以程序的形式實現(xiàn)時,也可以接受這樣的安排,即加密的數(shù)據(jù)解密程序自己被作為一組加密的部分程序保存,并以部分程序為單位被解密和執(zhí)行。
就實施例和改進例中而提出的特征性安排,只要沒有沖突,就可以組合地使用。
權(quán)利要求
1.一種為了在計算機系統(tǒng)上執(zhí)行而解密已經(jīng)被加密和存儲的程序的已加密數(shù)據(jù)的解密設(shè)備,該已加密數(shù)據(jù)的解密設(shè)備包含一個存儲單元,可用來在其中把該程序存儲為多個已加密的部分程序;一個存儲器定位信息生成單元,可用來為部分程序中的每一個生成存儲器定位信息,存儲器定位信息包括(i)指示解密的定時的定時信息,和(ii)指示每個部分程序在被解密后要被定位到哪個定位區(qū)域的位置信息,該定位區(qū)域被包含在用于該程序的執(zhí)行的一個存儲器空間中;一個解密單元,可用來按照定時信息順序地讀取和解密存儲單元中的部分程序;一個加載單元,可用來把每個解密的部分程序定位到由位置信息指示的每個定位區(qū)域。
2.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,其中對至少一個部分程序的每一個,位置信息指示在一個部分程序被覆寫到在該一個部分程序被解密之前一個或多個其它部分程序已經(jīng)被定位到的一個定位區(qū)域。
3.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,其中位置信息在被加密之后被存儲;和加載單元解密該位置信息,以便按照解密的位置信息把解密的部分程序的每個定位到每個定位區(qū)域。
4.權(quán)利要求2的已加密數(shù)據(jù)的解密設(shè)備,其中在把每個部分程序定位到一個定位區(qū)域中時,如果該定位區(qū)域的大小大于該部分程序的大小,加載單元把啞元數(shù)據(jù)寫入一個空白區(qū)域,該空白區(qū)域是由于上述大小之間的差額而尚未被覆寫的該定位區(qū)域的一部分。
5.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,其中在被定位到一個定位區(qū)域中的一個部分程序結(jié)束之后另一個部分程序被定位到該定位區(qū)域之前已經(jīng)歷了一個預(yù)定長度的時間時,加載單元刪除這一個部分程序。
6.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,進一步包含一個密鑰嵌置單元,可用來在一個程序加密的過程期間,預(yù)先在部分程序的至少一個中嵌置一個用于另一個部分程序的解密過程的加密密鑰的一部分或全部,其中該解密單元用在已經(jīng)被解密并定位在存儲器空間中的至少一個部分程序中嵌置的加密密鑰,來執(zhí)行這個其它部分程序的解密過程。
7.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,進一步包含一個程序嵌置單元,可用來在一個程序加密的過程期間,預(yù)先在部分程序的至少一個中嵌置一個加密密鑰生成程序,該加密密鑰生成程序用于生成一個用于另一個部分程序的解密過程的加密密鑰的一部分或全部,其中該解密單元用在已經(jīng)被解密并定位在存儲器空間中的至少一個部分程序中嵌置的、通過加密密鑰生成程序的執(zhí)行而生成的加密密鑰,來執(zhí)行這個其它部分程序的解密過程。
8.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,進一步包含一個密鑰之加密密鑰嵌置單元,可用來在一個程序加密的過程期間,預(yù)先在部分程序的至少一個中嵌置密鑰之加密密鑰,該密鑰之加密密鑰被用來解密一個將要被用于另一個部分程序的解密過程的加密密鑰,其中,該解密單元用從在已經(jīng)被解密并定位在存儲器空間中的至少一個部分程序中獲得的密鑰之加密密鑰解密的加密密鑰,來執(zhí)行這個其它部分程序的解密過程。
9.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,其中在要被解密的部分程序之一首次被定位到存儲器空間中之前,加載單元動態(tài)地確定每個定位位置的絕對地址。
10.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,其中解密單元利用一個解密支持程序解密每個部分程序;加密數(shù)據(jù)解密設(shè)備進一步包含一個可用來確認該解密支持程序的可靠性的解密程序確認單元;和解密單元在解密每個部分程序之前讓解密程序確認單元確認解密支持程序的可靠性,并且僅在可靠性得到確認之后解密每個部分程序。
11.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,進一步包含一個非法訪問禁止單元,可用來在檢測到中斷時,通過刪除已經(jīng)被定位在存儲器空間中的一個或多個部分程序而執(zhí)行一個非法訪問禁止過程。
12.權(quán)利要求11的已加密數(shù)據(jù)的解密設(shè)備,其中非法訪問禁止單元在執(zhí)行非法訪問禁止過程時讓一個啞元程序被執(zhí)行。
13.權(quán)利要求11的已加密數(shù)據(jù)的解密設(shè)備,其中該非法訪問禁止單元預(yù)先接收一個或多個位置的登記,這每個位置是發(fā)生合法程序的中斷檢查的位置,當被檢測到的中斷發(fā)生在登記的位置之一時,不執(zhí)行非法訪問禁止過程。
14.權(quán)利要求1的已加密數(shù)據(jù)的解密設(shè)備,進一步包含一個存儲位置信息存儲單元,可用來在其中存儲已經(jīng)被加密的、并且為部分程序的每一個指示在存儲單元中的存儲位置的存儲位置信息,其中該解密單元按照解密單元已經(jīng)從存儲位置信息存儲單元讀取并解密的存儲位置信息,來從存儲單元讀取并解密部分程序的每一個。
15.權(quán)利要求14的已加密數(shù)據(jù)的解密設(shè)備,進一步包含一個存儲位置信息認證單元,可用來判定存儲位置信息是否可信,其中當存儲位置信息認證單元作出肯定性判定時,解密單元從存儲單元讀取并解密部分程序的每一個。
16.一種為了在計算機系統(tǒng)上執(zhí)行而解密已經(jīng)被加密和存儲的程序的已加密數(shù)據(jù)的解密設(shè)備,該已加密數(shù)據(jù)的解密設(shè)備包含一個存儲單元,可用來在其中把該程序存儲為多個已加密的部分程序;一個解密單元,可用來從存儲單元讀取作為執(zhí)行目標的部分程序的一個并解密所讀取的部分程序;一個存儲器定位確定單元,可用來動態(tài)地確定作為執(zhí)行目標的部分程序的一個定位位置,該定位位置指示在用于程序的執(zhí)行的存儲器空間中的一個地址;和一個加載單元,可用來把解密的部分程序定位到由存儲器定位確定單元確定的定位位置。
17.權(quán)利要求16的已加密數(shù)據(jù)的解密設(shè)備,其中該存儲器定位確定單元為至少一個部分程序中的每個確定一個定位位置,以便一個部分程序被覆寫到一個被包含在存儲器空間中的、并且有一個或多個其它部分程序已經(jīng)被定位到那里的區(qū)域中。
18.權(quán)利要求16的已加密數(shù)據(jù)的解密設(shè)備,進一步包含一個執(zhí)行目的存儲器確定單元,可用來在程序的執(zhí)行開始之前,動態(tài)地確定起始地址和存儲器空間大小的其中之一或二者。
19.權(quán)利要求16的已加密數(shù)據(jù)的解密設(shè)備,其中當存儲器定位確定單元確定一個部分程序的一個定位位置,以便該部分程序被覆寫到一個或多個其它部分程序已經(jīng)被定位的一個區(qū)域中時,該定位位置被確定得使得該部分程序覆寫一個已經(jīng)最早被定位到存儲器空間中的部分程序。
20.權(quán)利要求16的已加密數(shù)據(jù)的解密設(shè)備,其中當存儲器定位確定單元確定一個部分程序的一個定位位置,以便該部分程序被覆寫到一個或多個其它部分程序已經(jīng)被定位的一個區(qū)域中時,該定位位置被確定得使得該部分程序部分地或完全地延伸到已經(jīng)被定位的兩個或更多的其它部分程序之上。
21.一種為了加密在計算機系統(tǒng)上執(zhí)行的程序的加密程序生成設(shè)備,該加密程序生成設(shè)備包含一個存儲器定位信息生成單元,可用來為把程序定位到多個部分程序的單元中的一個用于該程序的執(zhí)行的存儲器空間,而為部分程序的每一個生成存儲器定位信息,該存儲器定位信息包括(i)指示解密的定時的定時信息,和(ii)指示每個部分程序在被解密后要被定位到哪個定位區(qū)域的位置信息,該定位區(qū)域包含在該存儲器空間中;和一個程序加密單元,可用加密多個部分程序的單元中的程序,其中存儲器定位信息生成單元在給予機密性以優(yōu)先權(quán)的同時確定存儲器定位信息的內(nèi)容,使得對于至少一個部分程序中的每一個,一個部分程序被覆寫定位到在該一個部分程序被解密之前一個或多個其它部分程序已經(jīng)被定位到的一個定位區(qū)域。
22.權(quán)利要求21的加密程序生成設(shè)備,其中在部分程序被加密之前,程序加密單元在至少一個部分程序的每個中嵌置(i)一個用于另一個部分程序的解密過程的加密密鑰,或者(ii)獲得該加密密鑰所需的數(shù)據(jù);和在這個其它部分程序需要被解密時,使用該加密密鑰或者利用該數(shù)據(jù)所獲得的加密密鑰,該加密密鑰或數(shù)據(jù)是從先前已經(jīng)被解密的部分程序中獲得的。
23.一種用于為了在計算機系統(tǒng)上執(zhí)行而解密已經(jīng)被加密和存儲的程序的已加密數(shù)據(jù)的解密方法,該已加密數(shù)據(jù)的解密方法包含一個存儲步驟,把該程序以多個已加密的部分程序的形式存儲到一個存儲裝置中;一個存儲器定位信息生成步驟,為部分程序的每一個生成存儲器定位信息,存儲器定位信息包括(i)指示解密的定時的定時信息,和(ii)指示每個部分程序在被解密后要被定位到哪個定位區(qū)域的位置信息,該定位區(qū)域包含在用于該程序的執(zhí)行的一個存儲器空間中;一個解密步驟,按照定時信息從存儲裝置中讀取作為加密目標的部分程序之一并解密所讀取的部分程序;和一個加載步驟,把解密的部分程序定位到由位置信息指示的定位區(qū)域。
24.一種用于為了在計算機系統(tǒng)上執(zhí)行而解密已經(jīng)被加密和存儲的程序的已加密數(shù)據(jù)的解密方法,該已加密數(shù)據(jù)的解密方法包含一個解密步驟,從其中以多個已加密的部分程序的形式存儲程序的存儲單元中,讀取作為加密目標的部分程序之一,并解密所讀取的部分程序;一個存儲器位置確定步驟,動態(tài)地確定作為執(zhí)行目標的部分程序的一個定位位置,該定位位置指示用于程序的執(zhí)行的存儲器空間中的一個地址;和一個加載步驟,把解密的部分程序定位到在存儲器位置確定步驟中確定的定位位置。
25.一種使計算機作為一個已加密數(shù)據(jù)的解密設(shè)備運行的程序,該已加密數(shù)據(jù)的解密設(shè)備為了在計算機系統(tǒng)上執(zhí)行而解密已經(jīng)被加密和存儲的程序,該已加密數(shù)據(jù)的解密設(shè)備包含一個存儲單元,可用來在其中把該程序存儲為多個已加密的部分程序;一個存儲器定位信息生成單元,可用來為部分程序的每一個生成存儲器定位信息,該存儲器定位信息包括(i)指示解密的定時的定時信息,和(ii)指示每個部分程序在被解密后要被定位到哪個定位區(qū)域的位置信息,該定位區(qū)域包含在用于該程序的執(zhí)行的一個存儲器空間中;一個解密單元,可用來按照定時信息順序地讀取和解密存儲單元中的部分程序;一個加載單元,可用來把每個解密的部分程序定位到由位置信息指示的每個定位區(qū)域。
全文摘要
一種加密數(shù)據(jù)解密設(shè)備,在已經(jīng)被加密后的程序和數(shù)據(jù)處于解密到執(zhí)行的過程中時,為程序和數(shù)據(jù)提供增強的安全保護。當一個被解密的部分程序需要被加載到共享存儲器(M)中時,控制單元(11)把它加載到一個由存儲器定位信息指示的區(qū)域中。按照存儲器定位信息,多個部分程序被順序地加載到一個區(qū)域中,使得一個部分程序被另一個覆寫;因此,沒有部分程序長時間在存儲器中存在,因此降低部分程序被非法引用的可能性。此外,由于每一次某數(shù)據(jù)被解密時,解密支持程序認證單元(13)確認解密支持程序(P)的可靠性,就有可能防止有濫用解密支持程序的非法引用。
文檔編號G06F21/00GK1656434SQ0381247
公開日2005年8月17日 申請日期2003年7月25日 優(yōu)先權(quán)日2002年8月1日
發(fā)明者淺井理惠子, 莊田幸惠, 廣田照人, 井藤好克, 佐藤太一, 松島秀樹, 阿部敏久 申請人:松下電器產(chǎn)業(yè)株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
肃南| 福泉市| 大姚县| 新巴尔虎右旗| 易门县| 乌什县| 富宁县| 庄河市| 双辽市| 徐闻县| 秭归县| 章丘市| 德安县| 泗阳县| 巴马| 自治县| 大方县| 海门市| 郑州市| 福海县| 盈江县| 台南县| 莱阳市| 合山市| 日照市| 定州市| 宜良县| 昌都县| 德保县| 洛南县| 南溪县| 义乌市| 黔南| 陆丰市| 拜城县| 临湘市| 湛江市| 东方市| 汪清县| 五大连池市| 沿河|