安全 密碼學基礎

2021-09-11 04:08:25 字數 3933 閱讀 9107

本文**

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的簽名。

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

密碼學 密碼學基礎

密碼學是研究編制密碼和破譯密碼的技術科學。密碼學的安全目標至少包含三個方面 保密性 完整性 可用性。完整性 資源只有授權方以授權的方式進行修改,所有資源沒有授權則不能修改。可用性 資源只有在適當的時候被授權方訪問,並按需求使用。密碼系統由5部分組成 1 明文空間m 全體明文的集合 2 密文空間c 全...

密碼學基礎

在正式講解https協議之前,我們首先要知道一些密碼學的知識。明文 明文指的是未被加密過的原始資料。密文 明文被某種加密演算法加密之後,會變成密文,從而確保原始資料的安全。密文也可以被解密,得到原始的明文。金鑰 金鑰是一種引數,它是在明文轉換為密文或將密文轉換為明文的演算法中輸入的引數。金鑰分為對稱...

密碼學基礎

密碼學包括兩個分支 密碼編碼學和密碼分析學。密碼編碼學主要研究安全的密碼演算法和協議,來實現資訊加密保護或訊息認證 密碼分析學主要研究破譯密文資訊,進而獲取對應的明文資訊,這兩個分支既相互對立又相互依存,正是這種對立統一的關係推動了密碼學自身的發展。密碼演算法是密碼學的核心 現代密碼演算法的研究可大...