密碼學-軟體加密技術和註冊機制

來源:互聯網
上載者:User

標籤:http   使用   ar   strong   檔案   資料   sp   問題   c   

本文是一篇軟體加密技術的基礎性文章,簡要介紹了軟體加密的一些基本常識和一些加密產品,適用於國內軟體開發商或者個人共用軟體開發人員閱讀參考。

  1、加密技術概述

  一個密碼系統的安全性只在於密鑰的保密性,而不在演算法的保密性。

  對純資料的加密的確是這樣。對於你不願意讓他看到這些資料(資料的明文)的人,用可靠的密碼編譯演算法,只要破解者不知道被加密資料的密碼,他就不可解讀這些資料。

   但是,軟體的加密不同於資料的加密,它只能是“隱藏”。不管你願意不願意讓他(合法使用者,或 Cracker)看見這些資料(軟體的明文),軟體最終總要在機器上運行,對機器,它就必須是明文。既然機器可以“看見”這些明文,那麼 Cracker,通過一些技術,也可以看到這些明文。

  於是,從理論上,任何軟體加密技術都可以破解。只是破解的難度不同而已。有的要讓最高明的 Cracker 忙上幾個月,有的可能不費吹灰之力,就被破解了。

  所以,反盜版的任務(技術上的反盜版,而非行政上的反盜版)就是增加 Cracker 的破解難度。讓他們花費在破解軟體上的成本,比他破解這個軟體的獲利還要高。這樣 Cracker 的破解變得毫無意義——誰會花比正版軟體更多的錢去買盜版軟體?

  2、密碼學簡介

  2.1   概念

  (1) 寄件者和接收者

  假設寄件者想發送訊息給接收者,且想安全地發送資訊:她想確信偷聽者不能閱讀發送的訊息。

  (2) 訊息和加密

  訊息被稱為明文。用某種方法偽裝訊息以隱藏它的內容的過程稱為加密,加了密的訊息稱為密文,而把密文轉變為明文的過程稱為解密。

  明文用M(訊息)或P(明文)表示,它可能是位元流(文字檔、位元影像、數字化的語音流或數字化的視頻映像)。至於涉及到電腦,P是簡單的位元據。明文可被傳送或儲存,無論在哪種情況,M指待加密的訊息。

  密文用C表示,它也是位元據,有時和M一樣大,有時稍大(通過壓縮和加密的結合,C有可能比P小些。然而,單單加密通常達不到這一點)。加密函數E作用於M得到密文C,用數學表示為:

  E(M)=C.

  相反地,解密函數D作用於C產生M

  D(C)=M.

  先加密後再解密訊息,原始的明文將恢複出來,下面的等式必須成立:

  D(E(M))=M

  (3) 鑒別、完整性和抗抵賴

  除了提供機密性外,密碼學通常有其它的作用:.

  (a) 鑒別

  訊息的接收者應該能夠確認訊息的來源;入侵者不可能偽裝成他人。

  (b) 完整性檢驗

  訊息的接收者應該能夠驗證在傳送過程中訊息沒有被修改;入侵者不可能用假訊息代替合法訊息。

  (c) 抗抵賴

  寄件者事後不可能虛假地否認他發送的訊息。

  (4) 演算法和密鑰

  密碼演算法也叫密碼,是用於加密和解密的數學函數。(通常情況下,有兩個相關的函數:一個用作加密,另一個用作解密)

   如果演算法的保密性是基於保持演算法的秘密,這種演算法稱為受限制的演算法。受限制的演算法具有曆史意義,但按現在的標準,它們的保密性已遠遠不夠。大的或經常變 換的使用者組織不能使用它們,因為每有一個使用者離開這個組織,其它的使用者就必須改換另外不同的演算法。如果有人無意暴露了這個秘密,所有人都必須改變他們的算 法。

  更糟的是,受限制的密碼演算法不可能進行品質控制或標準化。每個使用者組織必須有他們自己的唯一演算法。這樣的組織不可能採用流行的硬體 或軟體產品。但竊聽者卻可以買到這些流行產品並學習演算法,於是使用者不得不自己編寫演算法並予以實現,如果這個組織中沒有好的密碼學家,那麼他們就無法知道他 們是否擁有安全的演算法。

  儘管有這些主要缺陷,受限制的演算法對低密級的應用來說還是很流行的,使用者或者沒有認識到或者不在乎他們系統中內在的問題。

  現代密碼學用密鑰解決了這個問題,密鑰用K表示。K可以是很多數值裡的任意值。密鑰K的可能值的範圍叫做密鑰空間。加密和解密運算都使用這個密鑰(即運算都依賴於密鑰,並用K作為下標表示),這樣,加/解密函數現在變成:

  EK(M)=C

  DK(C)=M.

  DK(EK(M))=M.

  有些演算法使用不同的加密金鑰和解密密鑰,也就是說加密金鑰K1與相應的解密密鑰K2不同,在這種情況下:

  EK1(M)=C

  DK2(C)=M

  DK2 (EK1(M))=M

  所有這些演算法的安全性都基於密鑰的安全性;而不是基於演算法的細節的安全性。這就意味著演算法可以公開,也可以被分析,可以大量生產使用演算法的產品,即使偷聽者知道你的演算法也沒有關係;如果他不知道你使用的具體密鑰,他就不可能閱讀你的訊息。

  密碼系統由演算法、以及所有可能的明文、密文和密鑰組成的。

  基於密鑰的演算法通常有兩類:對稱演算法和公開密鑰演算法。下面將分別介紹:

  2.2   對稱密碼演算法

   對稱演算法有時又叫傳統密碼演算法,就是加密金鑰能夠從解密密鑰中推算出來,反過來也成立。在大多數對稱演算法中,加/解密密鑰是相同的。這些演算法也叫秘密密 鑰演算法或單密鑰演算法,它要求寄件者和接收者在安全通訊之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都能對訊息進行加/解密。 只要通訊需要保密,密鑰就必須保密。

  對稱演算法的加密和解密表示為:

  EK(M)=C

  DK(C)=M

   對稱演算法可分為兩類。一次只對明文中的單個位元(有時對位元組)運算的演算法稱為序列演算法或序列密碼。另一類演算法是對明文的一組位元亞行運算,這些位元組稱 為分組,相應的演算法稱為分組演算法或分組密碼。現代電腦密碼演算法的典型分組長度為64位元——這個長度大到足以防止分析破譯,但又小到足以方便使用(在計 算機出現前,演算法普遍地每次只對明文的一個字元運算,可認為是序列密碼對字元序列的運算)。

  2.3   公開密碼演算法

   公開密鑰演算法(也叫非對稱演算法)是這樣設計的:用作加密的密鑰不同於用作解密的密鑰,而且解密密鑰不能根據加密金鑰計算出來(至少在合理假定的長時間 內)。之所以叫做公開密鑰演算法,是因為加密金鑰能夠公開,即陌生者能用加密金鑰加密資訊,但只有用相應的解密密鑰才能解密資訊。在這些系統中,加密金鑰叫 做公開密鑰(簡稱公開金鑰),解密密鑰叫做私人密鑰(簡稱私密金鑰)。私人密鑰有時也叫秘密密鑰。為了避免與對稱演算法混淆,此處不用秘密密鑰這個名字。

  用公開密鑰K加密表示為

  EK(M)=C.

  雖然公開密鑰和私人密鑰是不同的,但用相應的私人密鑰解密可表示為:

  DK(C)=M

  有時訊息用私人祕密金鑰加密而用公開密鑰解密,這用於數位簽章(後面將詳細介紹),儘管可能產生混淆,但這些運算可分別表示為:

  EK(M)=C

  DK(C)=M

  當前的公開密碼演算法的速度,比起對稱密碼演算法,要慢的多,這使得公開密碼演算法在大資料量的加密中應用有限。

  2.4   單向散列函數

  單向散列函數 H(M) 作用於一個任意長度的訊息 M,它返回一個固定長度的散列值 h,其中 h 的長度為 m .

  輸入為任意長度且輸出為固定長度的函數有很多種,但單向散列函數還有使其單向的其它特性:

  (1) 給定 M ,很容易計算 h ;

  (2) 給定 h ,根據 H(M) = h 計算 M 很難 ;

  (3) 給定 M ,要找到另一個訊息 M‘ 並滿足 H(M) = H(M’) 很難。

  在許多應用中,僅有單向性是不夠的,還需要稱之為“抗碰撞”的條件:

  要找出兩個隨機的訊息 M 和 M‘,使 H(M) = H(M’) 滿足很難。

  由於散列函數的這些特性,由於公開密碼演算法的計算速度往往很慢,所以,在一些密碼協議中,它可以作為一個訊息 M 的摘要,代替原始訊息 M,讓寄件者為 H(M) 簽名而不是對 M 簽名 .

  如 SHA 散列演算法用於數位簽章協議 DSA中。

  2.5   數位簽章

  提到數位簽章就離不開公開密碼系統和散列技術。

  有幾種公開金鑰演算法能用作數位簽章。在一些演算法中,例如RSA,公開金鑰或者私密金鑰都可用作加密。用你的私密金鑰加密檔案,你就擁有安全的數位簽章。在其它情況下,如DSA,演算法便區分開來了??數位簽章演算法不能用於加密。這種思想首先由Diffie和Hellman提出 .

  基本協議是簡單的 :

  (1) A 用她的私密金鑰對檔案加密,從而對檔案簽名。

  (2) A 將簽名的檔案傳給B.

  (3) B用A的公開金鑰解密檔案,從而驗證簽名。

  這個協議中,只需要證明A的公開金鑰的確是她的。如果B不能完成第(3)步,那麼他知道簽名是無效的。

  這個協議也滿足以下特徵:

  (1) 簽名是可信的。當B用A的公開金鑰驗證資訊時,他知道是由A簽名的。

  (2) 簽名是不可偽造的。只有A知道她的私密金鑰。

  (3) 簽名是不可重用的。簽名是檔案的函數,並且不可能轉換成另外的檔案。

  (4) 被簽名的檔案是不可改變的。如果檔案有任何改變,檔案就不可能用A的公開金鑰驗證。

  (5) 簽名是不可抵賴的。B不用A的協助就能驗證A的簽名。

  在實際應用中,因為公用密碼演算法的速度太慢,簽名者往往是對訊息的散列簽名而不是對訊息本身簽名。這樣做並不會降低簽名的可信性。

  3    當前流行的一些軟體保護技術

  3.1   序號保護

  數學演算法一項都是密碼加密的核心,但在一般的軟體加密中,它似乎並不太為人們關心,因為大多數時候軟體加密本身實現的都是一種編程的技巧。但近幾年來隨著序號加密程式的普及,數學演算法在軟體加密中的比重似乎是越來越大了。

   看看在網路上大行其道的序號加密的工作原理。當使用者從網路上下載某個shareware——共用軟體後,一般都有使用時間上的限制,當過了共用軟體的 試用期後,你必須到這個軟體的公司去註冊後方能繼續使用。註冊過程一般是使用者把自己的私人資訊(一般主要指名字)連同信用卡號碼告訴給軟體公司,軟體公司 會根據使用者的資訊計算出一個序列碼,在使用者得到這個序列碼後,按照註冊需要的步驟在軟體中輸入註冊資訊和註冊碼,其註冊資訊的合法性由軟體驗證通過後,軟 件就會取消掉本身的各種限制,這種加密實現起來比較簡單,不需要額外的成本,使用者購買也非常方便,在互連網上的軟體80%都是以這種方式來保護的。

  軟體驗證序號的合法性過程,其實就是驗證使用者名稱和序號之間的換算關係是否正確的過程。其驗證最基本的有兩種,一種是按使用者輸入的姓名來產生註冊碼,再同使用者輸入的註冊碼比較,公式表示如下:

  序號 = F(使用者名稱)

  但這種方法等於在使用者軟體中再現了軟體公司產生註冊碼的過程,實際上是非常不安全的,不論其換算過程多麼複雜,解密者只需把你的換算過程從程式中提取出來就可以編製一個通用的註冊程式。

  另外一種是通過註冊碼來驗證使用者名稱的正確性,公式表示如下:

  使用者名稱稱 = F逆(序號) (如ACDSEE)

  這其實是軟體公司註冊碼計算過程的反演算法,如果正向演算法與反向演算法不是對稱演算法的話,對於解密者來說,的確有些困難,但這種演算法相當不好設計。

  於是有人考慮到以下的演算法:

  F1(使用者名稱稱) = F2(序號)

   F1、F2是兩種完全不同的的演算法,但使用者名稱通過F1演算法計算出的特徵字等於序號通過F2演算法計算出的特徵字,這種演算法在設計上比較簡單,保密性相對 以上兩種演算法也要好的多。如果能夠把F1、F2演算法設計成無法復原演算法的話,保密性相當的好;可一旦解密者找到其中之一的反演算法的話,這種演算法就不安全了。 一元演算法的設計看來再如何努力也很難有太大的突破,那麼二元呢?

  特定值 = F(使用者名稱,序號)

  這個演算法看上去相 當不錯,使用者名稱稱與序號之間的關係不再那麼清晰了,但同時也失去了使用者名稱於序號的一一對應關係,軟體開發人員必須自己維護使用者名稱稱與序號之間的唯一 性,但這似乎不是難以辦到的事,建個資料庫就可以了。當然也可以把使用者名稱稱和序號分為幾個部分來構造多元的演算法。

  特定值 = F(使用者名稱1,使用者名稱2,...序號1,序號2...)

  現有的序號密碼編譯演算法大多是軟體開發人員自行設計的,大部分相當簡單。而且有些演算法作者雖然下了很大的功夫,效果卻往往得不到它所希望的結果。

  3.2   時間限制

  有些程式的試用版每次運行都有時間限制,例如運行10分鐘或20分鐘就停止工作,必須重新運行該程式才能正常工作。這些程式裡面自然有個定時器來統計程式啟動並執行時間。

  這種方法使用的較少。

  3.3   Key File 保護

   Key File(註冊檔案)是一種利用檔案來註冊軟體的保護方式。Key File一般是一個小檔案,可以是純文字檔案,也可以是包含不可顯示字元的二進位檔案,其內容是一些加密過或未加密的資料,其中可能有使用者名稱、註冊碼等信 息。檔案格式則由軟體作者自己定義。試用版軟體沒有註冊檔案,當使用者向作者付費註冊之後,會收到作者寄來的註冊檔案,其中可能包含使用者的個人資訊。使用者只 要將該檔案放入指定的目錄,就可以讓軟體成為正式版。該檔案一般是放在軟體的安裝目錄中或系統目錄下。軟體每次啟動時,從該檔案中讀取資料,然後利用某種 演算法進行處理,根據處理的結果判斷是否為正確的註冊檔案,如果正確則以註冊版模式來運行。

  這種保護方法使用也不多。

  3.4   CD-check

   即光碟片保護技術。程式在啟動時判斷光碟機中的光碟片上是否存在特定的檔案,如果不存在則認為使用者沒有正版光碟片,拒絕運行。在程式啟動並執行過程當中一般不再檢查 光碟片的存在與否。Windows下的具體實現一般是這樣的:先用GetLogicalDriveStrings( )或GetLogicalDrives( )得到系統中安裝的所有磁碟機的列表,然後再用GetDriveType( )檢查每一個磁碟機,如果是光碟機則用CreateFileA( )或FindFirstFileA( )等函數檢查特定的檔案存在與否,並可能進一步地檢查檔案的屬性、大小、內容等。

  3.5   軟體狗

  軟體狗是一種智 能型加密工具。它是一個安裝在並口、串口等介面上的硬體電路,同時有一套使用於各種語言的介面軟體和工具軟體。當被狗保護的軟體運行時,程式向插在電腦 上的軟體狗發出查詢命令,軟體狗迅速計算查詢並給出響應,正確的響應保證軟體繼續運行。如果沒有軟體狗,程式將不能運行,複雜的軟硬體技術結合在一起防止 軟體盜版。真正有商業價值得軟體一般都用軟體狗來保護。

  平時常見的狗主要有“洋狗”(國外狗)和“土狗”(國產狗)。這裡“洋狗”主要 指美國的彩虹和以色列的HASP,“土狗”主要有金天地(現在與美國彩虹合資,叫“彩虹天地”)、深思、尖石。總的說來,“洋狗”在軟體介面、加殼、反跟 蹤等“軟”方面沒有“土狗”好,但在硬體上破解難度非常大;而“土狗”在軟的方面做的很好,但在硬體上不如“洋狗”,稍有單片機功力的人,都可以複製。

  3.6   磁碟片加密

  通過在磁碟片上格式化一些非標準磁軌,在這些磁軌上寫入一些資料,如軟體的解密密鑰等等。這種磁碟片成為“鑰匙盤”。軟體運行時使用者將磁碟片插入,軟體讀取這些磁軌中的資料,判斷是否合法的“鑰匙盤”。

  磁碟片加密還有其它一些技術,如弱位加密等等。

  隨著近年來磁碟片的沒落,這種方法基本上退出了曆史舞台。

  3.7   將軟體與機器硬體資訊結合

   使用者得到(買到或從網上下載)軟體後,安裝時軟體從使用者的機器上取得該機器的一些硬體資訊(如硬碟序號、BOIS序號等等),然後把這些資訊和使用者 的序號、使用者名稱等進行計算,從而在一定程度上將軟體和硬體部分綁定。使用者需要把這一序號用Email、電話或郵寄等方法寄給軟體供應商或開發商,軟體 開發商利用註冊機(軟體)產生該軟體的註冊號寄給使用者即可。軟體加密雖然加密強度比硬體方法較弱,但它具有非常廉價的成本、方便的使用方法等優點。非常適 合做為採用光碟片(CDROM)等方式發授軟體的加密方案。

  此種密碼編譯演算法的優點

  ·    不同機器註冊碼不同。使用者獲得一個密碼只能在一台機器上註冊使用軟體。不同於目前大多軟體採用的註冊方法,即只要知道註冊碼,可在任何機器上安裝註冊。

  ·    不需要任何硬體或磁碟片

  ·    可以選擇控制軟體運行在什麼機器、運行多長時間或次數等

  ·    可讓軟體在不註冊前的功能為示範軟體,只能運行一段時間或部分功能。註冊後就立即變為正式軟體

  ·    採用特別技術,解密者很難找到產生註冊號碼的規律

  ·    在使用註冊號產生軟體(註冊機)時可採用使用密碼、密鑰盤、總次數限制等方法

  ·    方便易用,價格低廉。

  這種加密還有以下特點

  1、 註冊加密的軟體,只能在一台機器上安裝使用。把軟體拷貝到其它機器上不能運行。

  2、 若使用者想在另一機器上安裝運行,必須把軟體在這一機器上運行時的序號,寄給軟體出版商換取註冊密碼。當然應再交一份軟體費用。

  3、 此加密方法特別適應在網際網路上發布的軟體及用光碟片發布的軟體。

  注釋:

  1、“加密技術概述”部分內容參考了大學教材“密碼學基礎”。

  2、“當前流行的一些軟體保護技術”部分內容參考了“加密與解密--軟體保護技術及完全解決方案”一文。

轉自:http://www.williamlong.info/archives/704.html

密碼學-軟體加密技術和註冊機制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.