⑴ 【密碼學筆記】第3部分 對稱密碼
跟諸位大牛相比,筆者閱歷尚淺、經驗不足,筆記中若有錯誤,還需繼續修正與增刪。歡迎大家的批評與指正。
查看上一篇請點擊以下鏈接: 【密碼學筆記】第2部分 歷史上的密碼
1. XOR運算
2. 一次性密碼本
3. 對稱密碼演算法
3.1 DES
3.2 三重DES
3.3 AES
3.4 Rijndael
4. 對稱密碼的選擇
5. 對稱密碼的評價
參考書目
XOR運算,又稱為 異或 運算,運算結果是 同0異1 。
對同一個比特序列進行兩次XOR之後就會回到最初的狀態,因此XOR運算可用於對稱密碼的加密和解密。
一次性密碼本(又稱為 維納密碼 )是一種非常簡單的密碼,它的原理是「 將明文與一串隨機的比特序列進行XOR運算 」。
一次性密碼本是無法破譯的。 這是因為在對它嘗試解密的過程中,所有的排列組合都會出現,既會包含規則字元串,也會包含英文單詞,還會包含亂碼。由於明文中所有可能的排列組合都會出現,因此 我們無法判斷其中哪一個才是正確的明文 。
一次性密碼本是一種非常不實用的密碼。 原因如下:
a. 密鑰的配送 。( 最大的問題 )如果能夠有一種方法將密鑰安全地發送出去,那麼就可以用同樣的方法安全地發送明文。
b. 密鑰的保存 。 密鑰的長度必須和明文的長度相等。 如果能夠有辦法安全保存與明文一樣長的密鑰,那就有辦法安全保存明文本身。
c. 密鑰的重用 。在一次性密碼本中絕對不能重用過去用過的隨機比特序列,因為作為密鑰的比特序列一旦泄露,過去所有的機密通信內容將全部被解密。
d. 密鑰的同步 。在通信過程中,發送者和接收者的密鑰的比特序列不允許有任何錯位,否則錯位的比特後的所有信息都將無法解密。
e. 密鑰的生成 。一次性密碼本需要生成大量的隨機數,這里的隨機數並不是通過計算機程序生成的偽隨機數,而必須是無重現性的真正隨機數。
DES是一種將64比特的明文加密成64比特的密文的對稱密碼演算法,它的密鑰長度是56比特。
DES是以64比特的明文(比特序列)為一個單位來進行加密的,這個64比特的單位稱為 分組 。以分組為單位進行處理的密碼演算法稱為 分組密碼 。
DES每次只能加密64比特的數據,如果要加密的明文比較長,就需要對DES加密進行迭代,而迭代的具體方式就稱為 模式(mode) 。
DES的基本結構又稱為 Feistel網路 ,這一結構不僅被用於DES,在其他很多密碼演算法中也有應用。在Feistel網路中,加密的各個步驟稱為 輪(round) ,整個加密過程就是進行若干次輪的循環。下圖展現的是Feistel網路中一輪的計算流程。DES是一種16輪循環的Feistel網路。
一輪的具體計算步驟 如下:
a. 將輸入的數據等分為左右兩部分;
b. 將輸入的右側直接發送到輸出的右側;
c. 將輸入的右側發送到輪函數;
d. 輪函數根據右側數據和子密鑰,計算出一串看上去是隨機的比特序列;
e. 將上一步得到的比特序列與左側數據進行XOR運算,並將結果作為加密後的左側。
我們需要用不同的子密鑰對一輪的處理重復若干次,並在每兩輪處理之間將左側和右側的數據對調。
Feistel網路的解密操作只要按照相反的順序來使用子密鑰就可以完成了。
Feistel網路的性質 :
a. 輪數可以任意增加;
b. 加密時無論使用任何函數作為輪函數都可以正確解密(即使該函數不存在反函數);
c. 加密和解密可以用完全相同的結構來實現。
綜上所述,無論是任何輪數、任何輪函數,Feistel網路都可以 用相同的結構實現加密和解密 ,且加密的結果必定能夠正確解密。
三重DES是為了增加DES的強度,將DES重復3次所得到的一種密碼演算法,也稱為 TDEA ,通常縮寫為 3DES 。
明文經過三次DES處理才能變成最後的密文,由於DES密鑰的長度實質上是56比特,因此三重DES的密鑰長度就是168比特。
三重DES並不是進行三次DES加密,而是 加密→解密→加密 的過程,目的是 讓三重DES能夠兼容普通的DES ,當所有密鑰都相同時,三重DES也就等同於普通的DES。
盡管三重DES目前還被銀行等機構使用,但其處理速度不高,除了特別重視向下兼容性的情況以外,很少被用於新的用途。
AES是取代其前任標准(DES)而成為新標準的一種對稱密碼演算法。全世界的企業和密碼學家提交了多個對稱密碼演算法作為AES的候選,最終選出了一種名為 Rijndael 的對稱密碼演算法,並將其確定為AES。
AES的選拔並不僅僅考慮一種演算法是否存在弱點,演算法的速度、實現的容易性等也都在考慮范圍內。此外,這種演算法還必須能夠在各種平台上有效工作。
Rijndael是由比利時密碼學家設計的 分組密碼演算法 ,被選為新一代的標准密碼演算法——AES。
和DES一樣,Rijndael演算法也是由多個 輪 構成的,其中每一輪分為 SubBytes 、 ShiftRows 、 MixColumns 和 AddRoundKey 共4個步驟。DES使用Feistel網路作為其基本結構,而Rijndael使用的是 SPN結構 。
加密過程 :
a. 首先,需要 逐個位元組 地對16位元組的輸入數據進行SubBytes處理,即以每個位元組的值(0~255)為索引,從一張擁有256個值的 替換表 (S-Box)中查找出對應值( 類似於簡單替換密碼 )。
b. 進行ShiftRows處理,即以4位元組為單位的 行(row) 按照一定的規則向左平移,且每一行平移的位元組數是不同的。
c. 進行MixColumns處理,即對一個4位元組的值進行比特運算,將其變為另外一個4位元組值。
d. 最後,將MixColumns的輸出與輪密鑰進行 XOR ,即進行AddRoundKey處理。至此,Rijndael的一輪就結束了。實際上,在Rijndael中需要重復進行10~14輪計算。
在SPN結構中, 輸入的所有比特在一輪中都會被加密 。和每一輪都只加密一半輸入的比特的Feistel網路相比,這種方式的優勢在於 加密所需要的輪數更少 。此外,這種方式還有一個優勢,即 SubBytes、ShiftRows和MixColumns可以分別以位元組、行和列為單位進行並行計算 。
在Rijndael的 加密 過程中,每一輪所進行的處理為:
SubBytes→ShiftRows→MixColumns→AddRoundKey
而在 解密 時,則是按照相反的順序來進行的,即:
AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes
解密過程 :
Rijndael演算法背後有著 嚴謹的數學結構 ,即從明文到密文的計算過程可以全部用公式來表達,這是以前任何密碼演算法都不具備的性質。如果Rijndael的公式能夠通過數學運算來求解,那也就意味著Rijndael能夠通過數學方法進行破譯,這也為新的攻擊方式的產生提供了可能。
(1) 因為現在用暴力破解法已經能夠在現實的時間內完成對DES的破譯, DES不應再用於任何新的用途 。但是也需要保持與舊版本軟體的兼容性。
(2) 盡管在一些重視兼容性的環境中會使用三重DES,但 我們也沒有理由將三重DES用於新的用途 ,它會逐漸被AES所取代。
(3) 現在應該使用的演算法是AES(Rijndael) ,因為它安全、快速,而且能夠在各種平台上工作。
(4) AES最終候選演算法應該可以作為AES的備份 ,因為這些密碼演算法也都經過了嚴格的測試,且沒有發現任何弱點。
(5) 一般來說, 我們不應該使用任何自製的密碼演算法 ,而是應該使用AES。
優點 :
使用一種密鑰空間巨大,且在演算法上沒有弱點的對稱密碼,就可以通過密文來確保明文的機密性。 巨大的密鑰空間能夠抵禦暴力破解,演算法上沒有弱點可以抵禦其他類型的攻擊。
不足 :
a. 用對稱密碼進行通信時,還會出現 密鑰的配送問題 ,即如何將密鑰安全地發送給接受者。為了解決密鑰配送問題,需要 公鑰密碼技術 。
b. 盡管使用對稱密碼可以確保機密性,但僅憑這一點還並不能完全放心。 例如發送者可能發送偽造的密文,並利用解密時返回的錯誤來盜取信息。
衷心感謝您的閱讀。
查看下一篇請點擊以下鏈接: 【密碼學筆記】第4部分 分組密碼的模式
⑵ HTTPS加密(握手)過程
第一步散弊純:客戶端會發起一個hello client請求,請求中會攜帶TLS版本信息、加密套件候選列表、壓縮演算法候選列表以及一個隨機數。
第二步:服務端收到請求以後也會給客戶端發一個server hello請求,請求中會告訴客戶端它選擇的協議版本、加密套件、壓縮演算法以及一個隨機數。
第三步:服務端會給客戶端發一個server certificate請求,裡麵包含服務端的數字證書,用於客戶端進行校驗。
第四步:服務端會給客戶端發一個server hello done告訴客戶端信息已發送完畢。
第五步:客戶端收到證書以後進行校驗獲取到服務端的公鑰。
第六步:客戶端會將自己的數字證書發給服務端用於校驗。
第七步:客戶端計算出一個隨機數pre-master,然後用公鑰進行加密發送給伺服器端。
第八步:服務端和客卜模戶端都根據自己的隨機數+對端的隨機數+pre-master算出對稱密沖咐鑰,然後再根據對稱密鑰進行通信。
⑶ 對稱密鑰加密技術的工作流程
SQL Server 2005一個令人激動的特性是內置了加密的功能。在這個新版的SQL Server中,開發團隊直接在T-SQL中加入了加密工具、證書創建和密鑰管理的功能。對於因為法律要求或商業需求而需要加密表中的數據的人來說,這是一個好禮物。對於猶豫是否用加密來保證數據安全的人來說,做決定也更容易了。這篇文章介紹新的加密功能是怎麼工作,怎麼使用。
TSQL現在支持使用對稱密鑰和非對稱密鑰,證書和密碼。本文介紹如何創建、管理和使用對稱密鑰和證書。
根據涉及的內容,我決定把本文分為三節:
第一部分:服務主密鑰和資料庫主密鑰
第二部分:證書
第三部分:對稱密鑰
1. 服務主密鑰和資料庫主密鑰
圖:SQL Server 2005加密層次結構
1.1 服務主密鑰
當第一次需要使用服務主密鑰對鏈接伺服器密碼、憑據或資料庫主密鑰進行加密時,便會自動生成服務主密鑰。服務主密鑰為 SQL Server 加密層次結構的根。服務主密鑰直接或間接地保護樹中的所有其他密鑰和機密內容。使用本地計算機密鑰和 Windows 數據保護 API 對服務主密鑰進行加密。該 API 使用從 SQL Server 服務帳戶的 Windows 憑據中派生出來的密鑰。
因為服務主密鑰是自動生成且由系統管理的,它只需要很少的管理。服務主密鑰可以通過BACKUP SERVICE MASTER KEY語句來備份,格式為:
BACKUP SERVICE MASTER KEY TO FILE = 'path_to_file' ENCRYPTION BY PASSWORD = 'password'
'path_to_file' 指定要將服務主密鑰導出到的文件的完整路徑(包括文件名)。此路徑可以是本地路徑,也可以是網路位置的 UNC 路徑。
'password' 用於對備份文件中的服務主密鑰進行加密的密碼。此密碼應通過復雜性檢查。
應當對服務主密鑰進行備份,並將其存儲在另外一個單獨的安全位置。創建該備份應該是首先在伺服器中執行的管理操作之一。
如果需要從備份文件中恢復服務主密鑰,使用RESTORE SERVICE MASTER KEY語句。
RESTORE SERVICE MASTER KEY FROM FILE = 'path_to_file'
DECRYPTION BY PASSWORD = 'password' [FORCE]
'path_to_file' 指定存儲服務主密鑰的完整路徑(包括文件名)。path_to_file 可以是本地路徑,也可以是網路位置的 UNC 路徑。
PASSWORD = 'password' 指定對從文件中導入的服務主密鑰進行解密時所需的密碼。
FORCE 即使存在數據丟失的風險,也要強制替換服務主密鑰。
註:如果你在使用RESTORE SERVICE MASTER KEY時不得不使用FORCE選項,你可能會遇到部分或全部加密數據丟失的情況。
如果你的服務主密鑰泄露了,或者你想更改SQL Server服務帳戶,你可以通過ALTERSERVICE MASTER KEY語句重新生成或者恢復服務主密鑰。它的用法請參考聯機叢書。
因為服務主密鑰是SQL Server自動生成的,所以,它沒有對應的CREATE和DROP語句。
1.2 資料庫主密鑰
正如每個SQL Server有一個服務主密鑰,每個資料庫有自己的資料庫主密鑰。資料庫主密鑰通過CREATE MASTER KEY語句生成:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
這個語句創建資料庫主密鑰,使用指定的密碼加密它,並保存在資料庫中。同時,資料庫主密鑰也被使用服務主密鑰加密之後保存在master資料庫中,這就是所謂的「自動密鑰管理」。這個特性我們待會再講。
象服務主密鑰一樣,你可以備份和恢復資料庫主密鑰。使用BACKUP MASTER KEY備份資料庫主密鑰。語法類似於備份服務主密鑰:
BACKUP MASTER KEY TO FILE = 'path_to_file'
ENCRYPTION BY PASSWORD = 'password'
恢復資料庫主密鑰使用RESTORE MASTER KEY語句,它需要使用DECRYPTION BY PASSWORD子句提供備份時指定的加密密碼,還要使用ENCRYPTION BY PASSWORD子句,SQL Server使用它提供的密碼來加密資料庫主密鑰之後保存在資料庫中。
RESTORE MASTER KEY FROM FILE = 'path_to_file'
DECRYPTION BY PASSWORD = 'password'
ENCRYPTION BY PASSWORD = 'password'
[ FORCE ]
同樣,FORCE表示你將忽略在解密過程中的錯誤。
建議你在創建了資料庫主密鑰之後立即備份資料庫主密鑰,並把它保存到一個安全的地方。同樣,使用FORCE語句可能導致已加密數據的丟失。
要刪除資料庫主密鑰,使用DROP MASTER KEY語句,它刪除當前資料庫的主密鑰。在執行之前,確定你在正確的資料庫上下文中。
1.3 自動密鑰管理
當創建資料庫主密鑰時,它被使用提供的密碼加密然後被保存到當前資料庫中。同時,它被使用服務主密鑰加密並保存到master資料庫中。這份保存的資料庫主密鑰允許伺服器在需要的時候解密資料庫主密鑰,這就是自動密鑰管理。沒有自動密鑰管理的話,你必須在每次使用證書或密鑰加密或解密數據(它需要使用資料庫主密鑰)時使用OPEN MASTER KEY語句同時提供加密的密碼。使用自動密鑰管理,你不需要執行OPEN MASTER KEY語句,也不需要提供密碼。
自動密鑰管理的缺點就是每個sysadmin角色的成員都能夠解密資料庫主密鑰。你可以通過ALTER MASTER KEY語句的DROP ENCRYPTION BY SERVICE MASTER KEY子句,從而不使用自動密鑰管理。ALTER MASTER KEY的使用方法參見聯機叢書。
⑷ 非對稱加密和對稱加密的區別
非對稱加密和對稱加密在加密和解密過程、加密解密速度、傳輸的安全性上都有所不同,具體介紹如下:
1、加密和解密過程不同
對稱加密過程和解密過程使用的同一個密鑰,加密過程相當於用原文+密鑰可以傳輸出密文,同時解密過程用密文-密鑰可以推導出原文。但非對稱加密採用了兩個密鑰,一般使用公鑰進行加密,使用私鑰進行解密。
2、加密解密速度不同
對稱加密解密的速度比較快,適合數據比較長時的使用。非對稱加密和解密花費的時間長、速度相對較慢,只適合對少量數據的使用。
3、傳輸的安全性不同
對稱加密的過程中無法確保密鑰被安全傳遞,密文在傳輸過程中是可能被第三方截獲的,如果密碼本也被第三方截獲,則傳輸的密碼信息將被第三方破獲,安全性相對較低。
非對稱加密演算法中私鑰是基於不同的演算法生成不同的隨機數,私鑰通過一定的加密演算法推導出公鑰,但私鑰到公鑰的推導過程是單向的,也就是說公鑰無法反推導出私鑰。所以安全性較高。
⑸ 對稱加密演算法的工作原理、作用及其流程圖
對稱加密的核心——通信雙方共享一個密鑰
通信過程:
A有明文m,使用加密演算法E,密鑰key,生成密文c=E(key,m);
B收到密文c,使用解密演算法D,密鑰key,得到明文m=D(key,c);
比喻:
對稱加密是最直觀,也是歷史最久遠的加密手段,類似於加鎖和解鎖,只不過鑰匙的個數非常多(~~2^100),一個人窮其一生也試不完所有可能的鑰匙。