算法及密碼學

密碼起源

密碼學(在西歐語文中,源於希臘語kryptós“隱藏的”,和gráphein“書寫”)是研究如何隱密地傳遞信息的學科。在現代特別指對信息以及其傳輸的數學性研究,常被認爲是數學計算機科學的分支,和信息論也密切相關。著名的密碼學者Ron Rivest解釋道:“密碼學是關於如何在敵人存在的環境中通訊”,自工程學的角度,這相當於密碼學與純數學的異同。密碼學是信息安全等相關議題,如認證、訪問控制的核心。密碼學的首要目的是隱藏信息的涵義,並不是隱藏信息的存在。密碼學也促進了計算機科學,特別是在於電腦與網絡安全所使用的技術,如訪問控制與信息的機密性。密碼學已被應用在日常生活:包括自動櫃員機芯片卡、電腦使用者存取密碼電子商務等等。

密碼是通信雙方按約定的法則進行信息特殊變換的一種重要保密手段。依照這些法則,變明文爲密文,稱爲加密變換;變密文爲明文,稱爲脫密變換。密碼在早期僅對文字或數碼進行加、脫密變換,隨着通信技術發展,對語音圖像數據等都可實施加、脫密變換。

 

技術和戰爭

愷撒密碼

密碼的使用最早可以追溯到古羅馬時期,《高盧戰記》有描述愷撒曾經使用密碼來傳遞信息,即所謂的“愷撒密碼”,它是一種替代密碼,通過將字母按順序推後起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱爲愷撒密碼。這是一種簡單的加密方法,這種密碼的密度是很低的,只需簡單地統計字頻就可以破譯。現今又叫“移位密碼”,只不過移動的位數不一定是3位而已。

密碼術可以大致分爲兩種,即移位和替換,當然也有兩者結合的更復雜的方法。在移位中字母不變,位置改變;替換中字母改變,位置不變。

將替換密碼用於軍事用途的第一個文件記載是愷撒著的《高盧記》。愷撒描述了他如何將密信送到正處在被圍困、瀕臨投降的西塞羅。其中羅馬字母被替換成希臘字母使得敵人根本無法看懂信息。

蘇託尼厄斯在公元二世紀寫的《愷撒傳》中對愷撒用過的其中一種替換密碼作了詳細的描寫。愷撒只是簡單地把信息中的每一個字母用字母表中的該字母后的第三個字母代替。這種密碼替換通常叫做愷撒移位密碼,或簡單的說,愷撒密碼。

弱點:

字母頻度分析

儘管我們不知道是誰發現了字母頻度的差異可以用於破解密碼。但是9世紀的科學家阿爾·金迪在《關於破譯加密信息的手稿》對該技術做了最早的描述。

“如果我們知道一條加密信息所使用的語言,那麼破譯這條加密信息的方法就是找出同樣的語言寫的一篇其他文章,大約一頁紙長,然後我們計算其中每個字母的出現頻率。我們將頻率最高的字母標爲1號,頻率排第2的標爲2號,第三標爲3號,依次類推,直到數完樣品文章中所有字母。然後我們觀察需要破譯的密文,同樣分類出所有的字母,找出頻率最高的字母,並全部用樣本文章中最高頻率的字母替換。第二高頻的字母用樣本中2號代替,第三則用3號替換,直到密文中所有字母均已被樣本中的字母替換。”

 

散列算法

產生一些數據片段(例如消息或會話項)的散列值的算法。好的散列算法具有根據輸入數據中的變動來更改散列值結果的特性;因此,散列對於檢測在諸如消息等大型信息對象中的任何變化很有用。

散列算法並非加密算法

MD5

Message Digest Algorithm MD5(中文名爲消息摘要算法第五版)爲計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。

MD5算法具有以下特點:

1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。

2、容易計算:從原數據計算出MD5值很容易。

3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。

4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即僞造數據)是非常困難的。

大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成爲司法機關鑑別罪犯身份最值得信賴的方法;與之類似,MD5就可以爲任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的md5“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。

我們常常在某些軟件下載站點的某軟件信息中看到其MD5值,它的作用就在於我們可以在下載該軟件後,對下載回來的文件用專門的軟件(如Windows MD5 Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件爲同一文件。

具體來說文件的MD5值就像是這個文件的“數字指紋”。每個文件的MD5值是不同的,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”就會發生變化。比如下載服務器針對一個文件預先提供一個MD5值,用戶下載完該文件後,用我這個算法重新計算下載文件的MD5值,通過比較這兩個值是否相同,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。

其它優秀散列算法

SHA-1

SHA 家族成員之一。

SHA (Secure Hash Algorithm,譯作安全散列算法) 是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院(NIST) 發佈的一系列密碼散列函數。正式名稱爲 SHA 的家族第一個成員發佈於 1993年。然而人們給它取了一個非正式的名稱 SHA-0 以避免與它的後繼者混淆。兩年之後, SHA-1,第一個 SHA 的後繼者發佈了。 另外還有四種變體,曾經發布以提升輸出的範圍和變更一些細微設計: SHA-224, SHA-256, SHA-384 和 SHA-512 (這些有時候也被稱做 SHA-2)。

 

對稱加密

採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱爲對稱加密,也稱爲單密鑰加密

定義

需要對加密和解密使用相同密鑰加密算法。由於其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。對稱性加密也稱爲密鑰加密

所謂對稱,就是採用這種加密方法的雙方使用方式用同樣的密鑰進行加密和解密。密鑰是控制加密及解密過程的指令。算法是一組規則,規定如何進行加密和解密。

因此[1]  加密的安全性不僅取決於加密算法本身,密鑰管理的安全性更是重要。因爲加密和解密都使用同一個密鑰,如何把密鑰安全地傳遞到解密者手上就成了必須要解決的問題。

應用模式

加密模式(英文名稱及簡寫)

中文名稱

Electronic Code Book(ECB)

電子密碼本模式

Cipher Block Chaining(CBC)

密碼分組鏈接模式

Cipher Feedback Mode(CFB)

加密反饋模式

Output Feedback Mode(OFB)

輸出反饋模式

ECB:最基本的加密模式,也就是通常理解的加密,相同的明文將永遠加密成相同的密文,無初始向量,容易受到密碼本重放攻擊,一般情況下很少用。

CBC:明文被加密前要與前面的密文進行異或運算後再加密,因此只要選擇不同的初始向量,相同的密文加密後會形成不同的密文,這是目前應用最廣泛的模式。CBC加密後的密文是上下文相關的,但明文的錯誤不會傳遞到後續分組,但如果一個分組丟失,後面的分組將全部作廢(同步錯誤)。

CFB:類似於自同步序列密碼,分組加密後,按8位分組將密文和明文進行移位異或後得到輸出同時反饋回移位寄存器,優點最小可以按字節進行加解密,也可以是n位的,CFB也是上下文相關的,CFB模式下,明文的一個錯誤會影響後面的密文(錯誤擴散)。

OFB:將分組密碼作爲同步序列密碼運行,和CFB相似,不過OFB用的是前一個n位密文輸出分組反饋回移位寄存器,OFB沒有錯誤擴散問題。

常用算法

在對稱加密算法中常用的算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK、AES等。

不同算法的實現機制不同,可參考對應算法的詳細資料。

DES

DES全稱爲Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法,1977年被美國聯邦政府的國家標準局確定爲聯邦資料處理標準(FIPS),並授權在非密級政府通信中使用,隨後該算法在國際上廣泛流傳開來。需要注意的是,在某些文獻中,作爲算法的DES稱爲數據加密算法(Data Encryption Algorithm,DEA),已與作爲標準的DES區分開來。

DES基本原則

DES設計中使用了分組密碼設計的兩個原則:混淆(confusion)和擴散(diffusion),其目的是抗擊敵手對密碼系統的統計分析。混淆是使密文的統計特性與密鑰的取值之間的關係儘可能複雜化,以使密鑰和明文以及密文之間的依賴性對密碼分析者來說是無法利用的。擴散的作用就是將每一位明文的影響儘可能迅速地作用到較多的輸出密文位中,以便在大量的密文中消除明文的統計結構,並且使每一位密鑰的影響儘可能迅速地擴展到較多的密文位中,以防對密鑰進行逐段破譯。

算法步驟

DES算法把64位的明文輸入塊變爲64位的密文輸出塊,它所使用的密鑰也是64位(實際用到了56位,第8、

 

DES算法流程

16、24、32、40、48、56、64位是校驗位, 使得每個密鑰都有奇數個1),其算法主要分爲兩步:

1)初始置換

其功能是把輸入的64位數據塊按位重新組合,並把輸出分爲L0、R0兩部分,每部分各長32位,其置換規則爲將輸入的第58位換到第一位,第50位換到第2位……依此類推,最後一位是原來的第7位。L0、R0則是換位輸出後的兩部分,L0是輸出的左32位,R0是右32位,例:設置換前的輸入值爲D1D2D3……D64,則經過初始置換後的結果爲:L0=D58D50……D8;R0=D57D49……D7。

其置換規則見下表:

58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17,9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7,

2)逆置換

經過16次迭代運算後,得到L16、R16,將此作爲輸入,進行逆置換,逆置換正好是初始置換的逆運算,由此即得到密文輸出。

此算法是對稱加密算法體系中的代表,在計算機網絡系統中廣泛使用。

DES歲數太大,早已步履蹣跚

 

AES (高級加密標準)

高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣爲全世界所使用。經過五年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日發佈於FIPS PUB 197,並在2002年5月26日成爲有效的標準。2006年,高級加密標準已然成爲對稱密鑰加密中最流行的算法之一。

設計思想

Rijndael密碼的設計力求滿足以下3條標準:

① 抵抗所有已知的攻擊。

② 在多個平臺上速度快,編碼緊湊。

③ 設計簡單。

當前的大多數分組密碼,其輪函數是Feistel結構。

Rijndael沒有這種結構。

Rijndael輪函數是由3個不同的可逆均勻變換

 

Rijndael (State, ExpandedKey)

{

AddRoundKey (State, ExpandedKey);

for (i=1; i <Nr; i ++)

Round (State, ExpandedKey+Nb* i);

FinalRound (State, ExpandedKey+Nb*Nr)

}

Round (State, RoundKey)

{

ByteSub (State);

ShiftRow (State);

MixColumn (State);

AddRoundKey (State, RoundKey)

}

FinalRound (State, RoundKey)

{

ByteSub (State);

ShiftRow (State);

AddRoundKey (State, RoundKey)

}

 

加密標準

對稱密碼體制的發展趨勢將以分組密碼爲重點。分組密碼算法通常由密鑰擴展算法和加密(解密)算法兩部分組成。密鑰擴展算法將b字節用戶主密鑰擴展成r個子密鑰。加密算法由一個密碼學上的弱函數f與r個子密鑰迭代r次組成。混亂和密鑰擴散是分組密碼算法設計的基本原則。抵禦已知明文的差分和線性攻擊,可變長密鑰和分組是該體制的設計要點。

AES是美國國家標準技術研究所NIST旨在取代DES的21世紀的加密標準。

AES的基本要求是,採用對稱分組密碼體制,密鑰的長度最少支持爲128、192、256,分組長度128位,算法應易於各種硬件和軟件實現。1998年NIST開始AES第一輪分析、測試和徵集,共產生了15個候選算法。1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣佈選中比利時密碼學家Joan Daemen 和 Vincent Rijmen 提出的一種密碼算法RIJNDAEL 作爲 AES.

在應用方面,儘管DES在安全上是脆弱的,但由於快速DES芯片的大量生產,使得DES仍能暫時繼續使用,爲提高安全強度,通常使用獨立密鑰的三級DES。但是DES遲早要被AES代替。流密碼體制較之分組密碼在理論上成熟且安全,但未被列入下一代加密標準。

AES加密數據塊分組長度必須爲128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(如果數據塊及密鑰長度不足時,會補齊)。AES加密有很多輪的重複和變換。大致步驟如下:1、密鑰擴展(KeyExpansion),2、初始輪(Initial Round),3、重複輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。

 

對稱加密算法的優缺點

對稱加密算法的優點是算法公開、計算量小、加密速度快、加密效率高。

 

破解

如果是single-key model,對於非滿輪的AES(256位的aes應該要迭代14輪),有如下研究(從左到右分別爲輪數,數據量,時間複雜度,空間複雜度,方法,文獻來源):對於滿輪的AES256的攻擊,維基百科上說研究的複雜度爲2^254.4.

 

算法如此牢固,可以高枕無憂?

 

如果銀行保險庫太牢固,想進去應該怎麼辦?

對稱加密算法的缺點是在數據傳送前,發送方和接收方必須商定好祕鑰,然後使雙方都能保存好祕鑰。其次如果一方的祕鑰被泄露,那麼加密信息也就不安全了。另外,每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的唯一祕鑰,這會使得收、發雙方所擁有的鑰匙數量巨大,密鑰管理成爲雙方的負擔。

 

我們需要救世英雄

 

非對稱加密算法

對稱加密算法是一種密鑰的保密方法。

非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因爲加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。 非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把作爲公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密後的信息進行解密。

另一方面,甲方可以使用乙方的公鑰對機密信息進行簽名後再發送給乙方;乙方再用自己的私匙對數據進行驗籤。

甲方只能用其專用密鑰解密由其公用密鑰加密後的任何信息。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。

非對稱密碼體制的特點:算法強度複雜、安全性依賴於算法與密鑰但是由於其算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。

工作原理

1.A要向B發送信息,A和B都要產生一對用於加密和解密的公鑰私鑰

2.A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。

3.A要給B發送信息時,A用B的公鑰加密信息,因爲A知道B的公鑰。

4.A將這個消息發給B(已經用B的公鑰加密消息)。

5.B收到這個消息後,B用自己的私鑰解密A的消息。其他所有收到這個報文的人都無法解密,因爲只有B纔有B的私鑰。

主要算法

RSAElgamal、揹包算法、Rabin、D-H、ECC(橢圓曲線加密算法)。

 

RSA

RSA公鑰加密算法是1977年由羅納德·李維斯特Ron Rivest)、阿迪·薩莫爾Adi Shamir)和倫納德·阿德曼Leonard Adleman)一起提出的。1987年7月首次在美國公佈,當時他們三人都在麻省理工學院工作實習。RSA就是他們三人姓氏開頭字母拼在一起組成的。

RSA是目前最有影響力和最常用的公鑰加密算法,它能夠抵抗到目前爲止已知的絕大多數密碼攻擊,已被ISO推薦爲公鑰數據加密標準

今天只有短的RSA鑰匙纔可能被強力方式解破。到2008年爲止,世界上還沒有任何可靠的攻擊RSA算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息實際上是不能被解破的。但在分佈式計算量子計算機理論日趨成熟的今天,RSA加密安全性受到了挑戰和質疑。

RSA算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作爲加密密鑰。

 

基本含義

RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。

 

公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即祕密密鑰)SK是需要保密的。加密算法E和解密算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據PK計算出SK。

正是基於這種理論,1978年出現了著名的RSA算法,它通常是先生成一對RSA 密鑰,其中之一是保密密鑰,由用戶保存;另一個爲公開密鑰,可對外公開,甚至可在網絡服務器中註冊。爲提高保密強度,RSA密鑰至少爲500位長,一般推薦使用1024位。這就使加密的計算量很大。爲減少計算量,在傳送信息時,常採用傳統加密方法與公開密鑰加密方法相結合的方式,即信息採用改進的DES或IDEA對話密鑰加密,然後使用RSA密鑰加密對話密鑰和信息摘要。對方收到信息後,用不同的密鑰解密並可覈對信息摘要。

RSA算法是第一個能同時用於加密和數字簽名的算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現今的三十多年裏,經歷了各種攻擊的考驗,逐漸爲人們接受,普遍認爲是目前最優秀的公鑰方案之一。

SET(Secure Electronic Transaction)協議中要求CA採用2048bits長的密鑰,其他實體使用1024比特的密鑰。RSA密鑰長度隨着保密級別提高,增加很快。下表列出了對同一安全級別所對應的密鑰長度。

這種算法1978年就出現了,它是第一個既能用於數據加密也能用於數字簽名的算法。它易於理解和操作,也很流行。算法的名字以發明者的名字命名:Ron Rivest, Adi Shamir 和 Leonard Adleman。早在1973年,英國國家通信總局的數學家Clifford Cocks就發現了類似的算法。但是他的發現被列爲絕密,直到1998年才公諸於世。

RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。

RSA的算法涉及三個參數,n、e1、e2。

其中,n是兩個大質數p、q的積,n的二進制表示時所佔用的位數,就是所謂的密鑰長度。

e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n,e1),(n,e2)就是密鑰對。其中(n,e1)爲公鑰,(n,e2)爲私鑰。[1] 

RSA加解密的算法完全相同,設A爲明文,B爲密文,則:A=B^e2 mod n;B=A^e1 mod n;(公鑰加密體制中,一般用公鑰加密,私鑰解密)

e1和e2可以互換使用,即:

A=B^e1 mod n;B=A^e2 mod n;

 

非對稱加密能否一統江湖?

 

缺點

產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。

速度太慢,由於RSA 的分組長度太大,爲保證安全性,n 至少也要 600 bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨着大數分解技術的發展,這個長度還在增加,不利於數據格式的標準化。SET(Secure Electronic Transaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。爲了速度問題,人們廣泛使用單,公鑰密碼結合使用的方法,優缺點互補:單鑰密碼加密速度快,人們用它來加密較長的文件,然後用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發問題。

 

密碼與網絡安全

對稱加密速度快,但祕鑰容易泄漏

非對稱加密安全性高,但是運算速度慢,並且職能單向加密

解決方案:

非對稱加密握手 交換對稱加密祕鑰 對稱加密進行日常通訊

 

ssh (安全外殼協議)

SSH 爲 Secure Shell 的縮寫,由 IETF 的網絡小組(Network Working Group)所制定;SSH 爲建立在應用層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,後來又迅速擴展到其他操作平臺。SSH在正確使用時可彌補網絡中的漏洞。SSH客戶端適用於多種平臺。幾乎所有UNIX平臺—包括HP-UXLinuxAIXSolarisDigital UNIXIrix,以及其他平臺,都可運行SSH。   

在SSH安全協議的原理中, 是一種非對稱加密與對稱加密算法的結合

首先服務端會通過非對稱加密,產生一個公鑰和私鑰;

在客戶端發起請求時,服務端將公鑰暴露給客戶端,這個公鑰可以被任意暴露

客戶端在獲取公鑰後,會先產生一個由256位隨機數字組成的會話密鑰,這裏稱爲口令;

客戶端通過公鑰將這個口令加密,發送給服務器端;

服務器端通過私鑰進行解密,獲取到通訊口令;

之後,客戶端和服務端的信息傳遞,都通過這個口令進行對稱的加密。

 

這樣就安全了?

“服務器”要對外發布公鑰,那“服務器”如何把公鑰發送給“客戶”呢?我們第一反應可能會想到以下的兩個方法:

1.把公鑰放到互聯網的某個地方的一個下載地址,事先給客戶去下載。

2.每次和客戶開始通信時,服務器把公鑰發給客戶

但是這個兩個方法都有一定的問題,

對於方法1,“客戶”無法確定這個下載地址是不是“服務器”發佈的,你憑什麼就相信這個地址下載的東西就是“服務器”發佈的而不是別人僞造的呢,萬一下載到一個假的怎麼辦?另外要所有的“客戶”都在通信前事先去下載公鑰也很不現實。

對於方法2,也有問題,因爲任何人都可以自己生成一對公鑰和私鑰,他只要向“客戶”發送他自己的私鑰就可以冒充“服務器”了。

示意如下:

“客戶”->“黑客”:你好           //黑客截獲“客戶”發給“服務器”的消息

“黑客”->“客戶”:你好,我是服務器,這個是我的公鑰    //黑客自己生成一對公鑰和私鑰,把公鑰發給“客戶”,自己保留私鑰

“客戶”->“黑客”:向我證明你就是服務器

“黑客”->“客戶”:你好,我是服務器 {你好,我是服務器}[黑客自己的私鑰|RSA]      //客戶收到“黑客”用私鑰加密的信息後,是可以用“黑客”發給自己的公鑰解密的,從而會誤認爲“黑客”是“服務器”

因此“黑客”只需要自己生成一對公鑰和私鑰,然後把公鑰發送給“客戶”,自己保留私鑰,這樣由於“客戶”可以用黑客的公鑰解密黑客的私鑰加密的內容,“客戶”就會相信“黑客”是“服務器”,從而導致了安全問題。這裏問題的根源就在於,大家都可以生成公鑰、私鑰對,無法確認公鑰對到底是誰的。 如果能夠確定公鑰到底是誰的,就不會有這個問題了。例如,如果收到“黑客”冒充“服務器”發過來的公鑰,經過某種檢查,如果能夠發現這個公鑰不是“服務器”的就好了。

 

怎麼才能證明你就是你呢?

 

數字證書

一個證書包含下面的具體內容:

• 證書的發佈機構

• 證書的有效期

• 公鑰

• 證書所有者(Subject)

• 簽名所使用的算法

• 指紋以及指紋算法

證書的內容的詳細解釋會在後面詳細解釋,這裏先只需要搞清楚一點,數字證書可以保證數字證書裏的公鑰確實是這個證書的所有者(Subject)的,或者證書可以用來確認對方的身份。

證書的構成和原理

Issuer (證書的發佈機構)

指出是什麼機構發佈的這個證書,也就是指明這個證書是哪個公司創建的(只是創建證書,不是指證書的使用者)。對於上面的這個證書來說,就是指"SecureTrust CA"這個機構。

Valid from , Valid to (證書的有效期)

也就是證書的有效時間,或者說證書的使用期限。 過了有效期限,證書就會作廢,不能使用了。

Public key (公鑰)

這個我們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對消息進行加密的,第2章的例子中經常用到的。這個數字證書的公鑰是2048位的,它的值可以在圖的中間的那個對話框中看得到,是很長的一串數字。

Subject (主題)

這個證書是發佈給誰的,或者說證書的所有者,一般是某個人或者某個公司名稱、機構的名稱、公司網站的網址等。 對於這裏的證書來說,證書的所有者是Trustwave這個公司。

Signature algorithm (簽名所使用的算法)

就是指的這個數字證書的數字簽名所使用的加密算法,這樣就可以使用證書發佈機構的證書裏面的公鑰,根據這個算法對指紋進行解密。指紋的加密結果就是數字簽名Thumbprint, Thumbprint algorithm (指紋以及指紋算法)

這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過。 其原理就是在發佈證書時,發佈者根據指紋算法(一個hash算法)計算整個證書的hash值(指紋)並和證書放在一起,使用者在打開證書時,自己也根據指紋算法計算一下證書的hash值(指紋),如果和剛開始的值對得上,就說明證書沒有被修改過,因爲證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。 注意,這個指紋會使用"SecureTrust CA"這個證書機構的私鑰用簽名算法(Signature algorithm)加密後和證書放在一起。

注意,爲了保證安全,在證書的發佈機構發佈證書時,證書的指紋和指紋算法,都會加密後再和證書放到一起發佈,以防有人修改指紋後僞造相應的數字證書。

這裏問題又來了,證書的指紋和指紋算法用什麼加密呢?

他們是用證書發佈機構的私鑰進行加密的。可以用證書發佈機構的公鑰對指紋和指紋算法解密,也就是說證書發佈機構除了給別人發佈證書外,他自己本身也有自己的證書。證書發佈機構的證書是哪裏來的呢???這個證書發佈機構的數字證書(一般由他自己生成)在我們的操作系統剛安裝好時(例如windows xp等操作系統),這些證書發佈機構的數字證書就已經被微軟(或者其它操作系統的開發機構)安裝在操作系統中了,微軟等公司會根據一些權威安全機構的評估選取一些信譽很好並且通過一定的安全認證的證書發佈機構,把這些證書發佈機構的證書默認就安裝在操作系統裏面了,並且設置爲操作系統信任的數字證書。這些證書發佈機構自己持有與他自己的數字證書對應的私鑰,他會用這個私鑰加密所有他發佈的證書的指紋作爲數字簽名。

 

舉個例子方便大家理解,

假設我們公司"ABC Company"花了1000塊錢,向一個證書發佈機構"SecureTrust CA"爲我們自己的公司"ABC Company"申請了一張證書,注意,這個證書發佈機構"SecureTrust CA"是一個大家公認並被一些權威機構接受的證書發佈機構,我們的操作系統裏面已經安裝了"SecureTrust CA"的證書。"SecureTrust CA"在給我們發佈證書時,把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式寫到證書裏面,然後用一個指紋算法計算出這些數字證書內容的一個指紋,並把指紋和指紋算法用自己的私鑰進行加密,然後和證書的內容一起發佈,同時"SecureTrust CA"還會給一個我們公司"ABC Company"的私鑰給到我們。我們花了1000塊錢買的這個證書的內容如下:

×××××××××××××××證書內容開始×××××××××××××××××

Issuer : SecureTrust CA

Subject : ABC Company

Valid from : 某個日期

Valid to: 某個日期

Public Key : 一串很長的數字

…… 其它的一些證書內容……

{證書的指紋和計算指紋所使用的指紋算法}[SecureTrust CA的私鑰|RSA]      //這個就是"SecureTrust CA"對這個證書的一個數字簽名,表示這個證書確實是他發佈的,有什麼問題他會負責(收了我們1000塊,出了問題肯定要負責任的)

×××××××××××××××證書內容結束×××××××××××××××××

 

我們"ABC Company"申請到這個證書後,我們把證書投入使用,我們在通信過程開始時會把證書發給對方,對方如何檢查這個證書的確是合法的並且是我們"ABC Company”公司的證書呢?

首先應用程序(對方通信用的程序,例如IEOUTLook)讀取證書中的Issuer(發佈機構)"SecureTrust CA" ,然後會在操作系統中受信任的發佈機構的證書中去找"SecureTrust CA"的證書,如果找不到,那說明證書的發佈機構是個水貨發佈機構,證書可能有問題,程序會給出一個錯誤信息。 如果在系統中找到了"SecureTrust CA"的證書,那麼應用程序就會從證書中取出"SecureTrust CA"的公鑰,然後對我們"ABC Company"公司的證書裏面的指紋和指紋算法用這個公鑰進行解密,然後使用這個指紋算法計算"ABC Company"證書的指紋,將這個計算的指紋與放在證書中的指紋對比,如果一致,說明"ABC Company"的證書肯定沒有被修改過並且證書是"SecureTrust CA" 發佈的,證書中的公鑰肯定是"ABC Company"的。對方然後就可以放心的使用這個公鑰和我們"ABC Company”進行通信了。

 

後記

凡有選擇,必有代價

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章