本文簡要地介紹了現代密碼學的一些基礎理論,供參考。
1 加密技術概述
乙個密碼系統的安全性只在於金鑰的保密性,而不在演算法的保密性。
對純資料的加密的確是這樣。對於你不願意讓他看到這些資料(資料的明文)的人,用可靠的加密演算法,只要破解者不知道被加密資料的密碼,他就不可解讀這些資料。
但是,軟體的加密不同於資料的加密,它只能是「隱藏」。不管你願意不願意讓他(合法使用者,或 cracker)看見這些資料(軟體的明文),軟體最終總要在機器上執行,對機器,它就必須是明文。既然機器可以「看見」這些明文,那麼 cracker,通過一些技術,也可以看到這些明文。
於是,從理論上,任何軟體加密技術都可以破解。只是破解的難度不同而已。有的要讓最高明的 cracker 忙上幾個月,有的可能不費吹灰之力,就被破解了。
所以,反盜版的任務(技術上的反盜版,而非行政上的反盜版)就是增加 cracker 的破解難度。讓他們花費在破解軟體上的成本,比他破解這個軟體的獲利還要高。這樣 cracker 的破解變得毫無意義——誰會花比正版軟體更多的錢去買盜版軟體 ?
2 密碼學簡介
2.1 概念
(1) 傳送者和接收者
假設傳送者想傳送訊息給接收者,且想安全地傳送資訊:她想確信偷聽者不能閱讀傳送的訊息。
(2) 訊息和加密
訊息被稱為明文。用某種方法偽裝訊息以隱藏它的內容的過程稱為加密,加了密的訊息稱為密文,而把密文轉變為明文的過程稱為解密。
密文用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的簽名。
在實際應用中,因為公共密碼演算法的速度太慢,簽名者往往是對訊息的雜湊簽名而不是對訊息本身簽名。這樣做並不會降低簽名的可信性。
注:本文由計算機專業相關教材整理
密碼學介紹
密碼學分類 網路開發準則對稱加密演算法 加密 解密都是使用乙個金鑰 非對稱加密演算法 用公鑰加密,私鑰解密 用私鑰加密,公鑰解密 特點 1.演算法公開 2.對於相同的資料加密,得到的結果是一樣的 3.得到的結果都是定長的32位md5用途 1.密碼 伺服器不需要知道使用者的真實密碼,資料庫儲存的是加密...
密碼學 密碼學基礎
密碼學是研究編制密碼和破譯密碼的技術科學。密碼學的安全目標至少包含三個方面 保密性 完整性 可用性。完整性 資源只有授權方以授權的方式進行修改,所有資源沒有授權則不能修改。可用性 資源只有在適當的時候被授權方訪問,並按需求使用。密碼系統由5部分組成 1 明文空間m 全體明文的集合 2 密文空間c 全...
《現代密碼學》第一章 經典密碼學介紹
第一章 經典密碼學介紹 1.1密碼學和現代密碼學 a.現代密碼學與古典密碼學的區別 1.2對稱金鑰加密的基本設定 a.b.加密的語法 金鑰產生演算法 gen 一種概率演算法 加密演算法 enc 輸入金鑰 k,明文 m,輸出密文c。記為enck m 解密演算法 dec 輸入金鑰 k,密文c,輸出明文 ...