1、密碼的定義算法
密碼,最初的目的是用於對信息加密,計算機領域的密碼技術種類繁多。但隨着密碼學的運用,密碼還被用於身份認證、防止否定等功能上。密碼是通訊雙方按約定的法則進行信息特殊變換的一種重要保密手段。依照這些法則,變明文爲密文,稱爲加密變換;變密文爲明文,稱爲脫密變換。密碼在早期僅對文字或數碼進行加、脫密變換,隨着通訊技術的發展,對語音、圖像、數據等均可實施加、脫密變換。數據庫
2、密碼的分類安全
最基本的分類是:信息加解密分爲對稱加密(Sysmmetric Cryptography)和非對稱加密(Public-Key Cryptography,Asymmetric Cryptography),這二者的區別是是否使用了相同的密鑰。網絡
除了信息的加解密,還有用於確認數據完整性(Integrity)的單向散列(One-Way Hash Function)技術,又稱密碼檢驗(Cryptographic Checksum)、指紋 (Fingerprint)、消息摘要 (Message Digest)。函數
信息的加解密與信息的單向散列的區別是,對稱與非對稱加密是能夠經過密鑰解出明文,而單向散列是不可逆的。信息的加解密,密文一定是不定長的,而單向散列能夠是定長的。性能
結合密碼學的加解密技術和單向散列技術,又有了用於防止篡改的消息認證碼技術,防止假裝的數字簽名技術以及認證證書。編碼
3、密碼問題的應對策略加密
威脅問題 | 特徵 | 對應技術 |
竊聽 | 機密性 | 對稱、非對稱加密 |
篡改 | 完整性 | 單向散列、消息認證碼、數字簽名 |
假裝 | 身份認證 | 消息認證、數字簽名 |
否定 | 不能否認 | 數字簽名 |
4、信息的加密手段spa
DES全稱爲Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法,1977年被美國聯邦政府的國家標準局肯定爲聯邦資料處理標準(FIPS),並受權在非密級政府通訊中使用,隨後該算法在國際上普遍流傳開來。須要注意的是,在某些文獻中,做爲算法的DES稱爲數據加密算法(Data Encryption Algorithm,DEA),已與做爲標準的DES區分開來。計算機網絡
DES 算法是以 64 bits 明文爲一個單位(每隔 7 bits 會有一個 checksum bit,所以實際有效爲 56 bits),分組對明文進行加密的,是一種分組密碼(Block Cipher)算法。DES 算法原理是經過一個稱爲 Feistel 網絡,並通過 N 輪的輪函數的計算實現的。
DES算法的入口參數有三個:Key、Data、Mode。其中Key爲7個字節共56位,是DES算法的工做密鑰;Data爲8個字節64位,是要被加密或被解密的數據;Mode爲DES的工做方式,有兩種:加密或解密。
DES設計中使用了分組密碼設計的兩個原則:混淆(confusion)和擴散(diffusion),其目的是抗擊敵手對密碼系統的統計分析。混淆是使密文的統計特性與密鑰的取值之間的關係儘量複雜化,以使密鑰和明文以及密文之間的依賴性對密碼分析者來講是沒法利用的。擴散的做用就是將每一位明文的影響儘量迅速地做用到較多的輸出密文位中,以便在大量的密文中消除明文的統計結構,而且使每一位密鑰的影響儘量迅速地擴展到較多的密文位中,以防對密鑰進行逐段破譯。
DES算法把64位的明文輸入塊變爲64位的密文輸出塊,它所使用的密鑰也是64位(實際用到了56位,第八、1六、2四、3二、40、4八、5六、64位是校驗位, 使得每一個密鑰都有奇數個1),其算法主要分爲兩步:
AES 是於 2000 年被採用的最新的對稱加密標準,採用了 Rijndael 算法。
Rijndael 算法也是一種分組算法,密鑰長度規定爲 128 bits,192 bits, 256 bits 三種規格。與 DES 不一樣,Rijndael 算法沒有采用 Feistel 網絡,而是採用 SPN 結構,並經過多個輪函數實現的。
SPN 結構和輪函數此處再也不展開,簡單的說,就是對明文數據分組,而後輪函數是進行一系列的平移、翻轉、位之間的交換等操做。具體能夠參考 Advanced Encryption Standard, Wikipedia。
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) }
Rijindael 算法,可自由無償使用,安全、快速,暫未被破解。推薦使用。
非對稱加密能夠用於解決密鑰配送問題。
相對於對稱密碼加解密採用相同的密碼,非對稱密碼加解密採用的是不一樣的密鑰,公鑰和私鑰成對,公鑰加密的信息,只有相應的私鑰纔可解密。
非對稱加密流程
沒法解決公鑰認證的問題,可能被中間人僞造公鑰。
沒錯,RSA加密使用了"一對"密鑰.分別是公鑰和私鑰,這個公鑰和私鑰其實就是一組數字!其二進制位長度能夠是1024位或者2048位.長度越長其加密強度越大,目前爲止公之於衆的能破解的最大長度爲768位密鑰,只要高於768位,相對就比較安全.因此目前爲止,這種加密算法一直被普遍使用.
密碼強度,默認的 RSA 長度爲 2048 bit
AES(bit) | RSA(bit) |
---|---|
128 | 3072 |
192 | 7680 |
256 | 15360 |
混合加密就是對稱加密與非對稱加密的結合。因爲對稱加密算法速度快,強度高,而非對稱加密算法效率低,但能解決密鑰配送問題。所以能夠經過非對稱加密配送對稱密鑰,再採用對稱密鑰用來加密的方式,實現網絡的密鑰配送與通訊加密。
通常實踐中,公鑰經過證書認證配送,而對稱加密用的密鑰是每次隨機產生。所以公鑰密碼的強度應該高於對稱密碼,由於對稱密碼只對當前一條信息負責,而非對稱密碼會影響到過完與將來全部的通訊。
加密模式是針對密碼分組或流加密所採用的迭代模式。
不一樣的分組加密方式,就有不一樣的加密模式:
單向散列技術是爲了保證信息的完整性,防止信息被篡改的一項技術。
特色:
MD 散列算法分爲 MD4, MD5 兩套算法,均可計算出 128 bits 的散列。MD 系列算法已經被中國科學家王小云破解(可於有限時間內找出碰撞)。
SHA 是單向散列算法的一個標準的統稱,其下又分爲 SHA-1, SHA-2, SHA-3 三套算法。
其中 SHA-1 可生成 160 bit 散列值,已被攻破,不推薦使用。
SHA-2 可生成不一樣長度的散列,如 256 bits (SHA-256), 384 bits (SHA-384), 512 bits (SHA-512),同時對輸入的消息長度存在必定限制,SHA-256 上限接近於 2^64-1 比特,SHA-38四、SHA512 則接近於 2^128-1比特。
SHA-3,是 2012 年被採用的最新標準,採用了 Keccak 算法。
Keccak 算法的優勢:
MD4,5, RIPEMD, RIPEMD-160, SHA-1, SHA-2 均採用 MD 結構(Merkle-Damgard construction)
SHA-3 採用海綿結構
算法 | 散列長度,bit | 輸入長度 | |
---|---|---|---|
MD4 (Message Digest 4) | 128 | 已破解 | |
MD5 | 128 | 已破解 | |
SHA-1 | 160 | 2^64 = 2048 | 謹慎使用,不推薦 |
SHA2 (SHA-224) | 224 (32*8 - 32) | 2^64 | - 32 表示截去 32 bit,下同 |
SHA2 (SHA-256) | 256 (32*8) | 2^64 |
|
SHA2 (SHA-512/224) | 224 (64*8 - 288) | 2^64 |
|
SHA2 (SHA-512/256) | 256 (64*8 - 256) | 2^64 |
|
SHA2 (SHA-384) | 384 (64*8 - 128) | 2^128 | |
SHA2 (SHA-512) | 512 | 2^128 |
|
SHA-3 | 無限制 | ||
RIPEMD-128 | 已破解 | ||
RIPEMD-160 | 謹慎使用,是比特幣採用的 | ||
RIPEMD-256 | |||
RIPEMD-320 |
所謂哈希(hash),就是將不一樣的輸入映射成獨一無二的、固定長度的值(又稱"哈希值")。它是最多見的軟件運算之一。
若是不一樣的輸入獲得了同一個哈希值,就發生了"哈希碰撞"(collision)。
黑客攻擊的一種方法,就是設法制造"哈希碰撞",而後入侵系統,竊取信息。
防止哈希碰撞的最有效方法,就是擴大哈希值的取值空間。
16個二進制位的哈希值,產生碰撞的可能性是 65536 分之一。也就是說,若是有65537個用戶,就必定會產生碰撞。哈希值的長度擴大到32個二進制位,碰撞的可能性就會降低到 4,294,967,296 分之一。
更長的哈希值意味着更大的存儲空間、更多的計算,將影響性能和成本。開發者必須作出抉擇,在安全與成本之間找到平衡。
哈希碰撞的機率取決於兩個因素(假設哈希函數是可靠的,每一個值的生成機率都相同)。
這個問題在數學上早有原型,叫作"生日問題"(birthday problem):一個班級須要有多少人,才能保證每一個同窗的生日都不同?
答案很出人意料。若是至少兩個同窗生日相同的機率不超過5%,那麼這個班只能有7我的。事實上,一個23人的班級有50%的機率,至少兩個同窗生日相同;50人班級有97%的機率,70人的班級則是99.9%的機率(計算方法見後文)。
這意味着,若是哈希值的取值空間是365,只要計算23個哈希值,就有50%的可能產生碰撞。也就是說,哈希碰撞的可能性,遠比想象的高。實際上,有一個近似的公式。
上面公式能夠算出,50% 的哈希碰撞機率所須要的計算次數,N 表示哈希的取值空間。生日問題的 N 就是365,算出來是 23.9。這個公式告訴咱們,哈希碰撞所需耗費的計算次數,跟取值空間的平方根是一個數量級。
這種利用哈希空間不足夠大,而製造碰撞的攻擊方法,就被稱爲生日攻擊(birthday attack)。
給出生日攻擊的數學推導。
至少兩我的生日相同的機率,能夠先算出全部人生日互不相同的機率,再用 1 減去這個機率。
咱們把這個問題設想成,每一個人排隊依次進入一個房間。第一個進入房間的人,與房間裏已有的人(0人),生日都不相同的機率是365/365
;第二個進入房間的人,生日獨一無二的機率是364/365
;第三我的是363/365
,以此類推。
所以,全部人的生日都不相同的機率,就是下面的公式。
上面公式的 n 表示進入房間的人數。能夠看出,進入房間的人越多,生日互不相同的機率就越小。
這個公式能夠推導成下面的形式。
那麼,至少有兩我的生日相同的機率,就是 1 減去上面的公式。
上面的公式,能夠進一步推導成通常性的、便於計算的形式。
根據泰勒公式,指數函數 ex 能夠用多項式展開。
若是 x 是一個極小的值,那麼上面的公式近似等於下面的形式。
如今把生日問題的1/365
代入。
所以,生日問題的機率公式,變成下面這樣。
假設 d 爲取值空間(生日問題裏是 365),就獲得了通常化公式。
上面就是哈希碰撞機率的公式。
單向散列能夠解決篡改的問題,但消息是來自可信一方,仍是來自假裝者,卻沒法解決。假裝者徹底能夠發送有害的信息和該信息的散列,而接受者卻沒法分辨。消息認證碼技術能夠解決此類問題。
消息認證碼(Message Authentication Code),簡寫爲 MAC。經過發送方與接收方共享密鑰,經過該共享密鑰對計算 MAC 值。
消息認證碼使用步驟:
MAC 實現的關鍵,是得到一串須要與共享密鑰相關並且足夠有區分度的串。
所以,能夠經過多種方式得到 MAC 值,如單向散列、分組密碼截取最後一組做爲 MAC 值、流密碼、非對稱加密等。
因爲 MAC 沒法解決否定的問題是因爲採用的相同的密鑰,那麼採用公私鑰對就能夠解決啦~
採用非對稱加密的消息認證碼的技術,就是數字簽名。
因爲用於解密的是公鑰,是公開的。所以任何人均可以驗證數字簽名。
數字簽名的核心,就是非對稱加密,在前文已經介紹了一些非對稱加密算法,都可用於數字簽名之中。
常見的有以下幾種:
數字簽名因爲採用了非對稱加密,所以能夠防止否定。但發送方怎麼能知道所收到的公鑰就是接收方私鑰所對應的公鑰呢?若是不當心採用了攻擊者的公鑰,而後接收了攻擊者私鑰簽名的信息,公私鑰徹底匹配,因而信息就被接受了,那麼就 GG 了。
所以,業界便推出了證書。由權威機構頒佈,認證公鑰的合法性,那麼就 OK 啦~
對數字簽名所發佈的公鑰進行權威的認證,即是證書。證書能夠有效地避免中間人攻擊的問題。
PKC
:Public-Key Certificate,公鑰證書,簡稱證書。 CA
:Certification Authority,認證機構。對證書進行管理,負責 1.生成密鑰對、2. 註冊公鑰時對身份進行認證、3. 頒發證書、4. 做廢證書。其中負責註冊公鑰和身份認證的,稱爲 RA(Registration Authority 註冊機構) PKI
:Public-Key Infrastructure,公鑰基礎設施,是爲了更高效地運用公鑰而制定的一系列規範和規格的總稱。比較著名的有PKCS(Public-Key Cryptography Standards,公鑰密碼標準,由 RSA 公司制定)、X.509
等。PKI 是由使用者、認證機構 CA、倉庫(保存證書的數據庫)組成。 CRL
:Certificate Revocation List 證書做廢清單,是 CA 宣佈做廢的證書一覽表,會帶有 CA 的數字簽名。通常由處理證書的軟件更新 CRL 表,並查詢證書是否有效。
下圖比較詳細的闡述了證書的使用步驟
對於認證機構的公鑰,能夠由其它的認證機構施加數字簽名,從而對認證機構的公鑰進行驗證,即生成一張認證機構的公鑰證書,這樣的關係能夠迭代好幾層,一直到最高一層的認證機構時該認證機構就稱爲根CA,根CA會對本身的公鑰進行數字簽名叫作自簽名。