密碼安全之古典密碼、對稱密碼

密碼安全(2019.11.19)

閱讀前推薦觀看我之前做的分類圖URL:https://blog.csdn.net/qq_26139045/article/details/103113818

密碼算法

密碼學可以分爲古典密碼學和現代密碼學。其中現代密碼學的出現於一個熟悉的人脫不了關係,他就是香農了,絕對的大佬。

古典密碼於現代密碼的區別之處,我認爲就是古典密碼是依賴於加密算法的精心設計和保密性,而現代密碼這是公開了加密所用的算法,注重的是對密鑰的保密。兩者的側重點不同,一個在算法的保密上,另一個則是在密鑰的保密上。而將現代密碼在以密鑰細分就會分爲,對稱加密和非對稱加密。所謂的對稱加密,就是加密時和解密時的密鑰是一樣的;而非對稱加密則是加密密鑰和解密密鑰不同,在我看來就目前而言,似乎非對稱加密會使用更多,最近經常看到的RSA就是一種非對稱加密方法,只可惜還沒有搞明白RSA。

古典密碼

置換密碼

所謂置換密碼真的就只是置換,把明文通過一些方法排列,然後按你想要的方向或者順序讀出,就成爲一個密文。這是一種比較簡單的加密方式。正是由於這種方法過於簡單,所以它禁不起窮舉的,是可以進行爆破的。置換密碼可能是先排矩陣再按列讀取,也有可能會使用密鑰,但是這裏的密鑰只是爲了助記,與現代密碼的密鑰大不相同。通過密鑰去除重複字母后,按字典序編號,然後按編號讀出相應的列,實現加密。

例如:明文:this is transposition cipher

密鑰:password

數字序列:4167352

密文:hath ts iiphtripsocin iessor

注意!!!密文要寫的與明文格式相同。

t h i s j s t
r a n s p o s
i t i o n e i
p h e r

替代密碼

說到替代密碼,大家最熟悉的可能就是凱撒密碼。替代密碼是利用了替代法進行加密的,通過將明文中的字符使用其他的字符替代後形成密文。

它還有很多類型,比如單表替代密碼,多明碼替代密碼,多字母替代密碼,多表替代密碼。凱撒加密就是單表替代密碼了,所有的字母都是相同的偏移量,所以凱撒是可以被輕易的破解的,直接暴力破解,CTFCracker就可以實現凱撒爆破。而多表替代密碼就提高了破解的難度,像維吉尼亞密碼、希爾密碼,一次一密鑰密碼、Playfair密碼等等,由於使用了多個替換表,情況更加複雜,爆破難度就蹭蹭蹭上去。

在我看來維吉尼亞其實就是凱撒的加強版,只不過是每個字符都有自己獨特的偏移量了,不在如凱撒一樣統一偏移量,所以對於破解而言就提高難度了。

加密:Ci=(Mi+Ki)mod26

解密就是i一個逆過程,Mi=(Ki-Ci)mod26

例如密鑰可能爲:cipher即(3,9,16,8,5,18)

明文 :this is substitution cipher

密文:vpxz mj ucqzxzvcipse eqeoii

對稱密碼

對稱密碼可以分爲分組密碼和序列密碼。分組密碼是以一個固定大小作爲每次處理的基本單元,而序列密碼則是以一個單位元素(通常是一個字母或一個比特)作爲基本的處理單元。當分組長度等於單位長度的是否,分組密碼也就是序列密碼,所以你可以這樣理解,序列密碼是分組密碼中特殊的一種情況,即分組長=單位長。

分組密碼的常用工作模式:

1、電子密碼本(ECB)

最簡單的加密模式即電子密碼本模式,將加密的消息按照密碼塊的塊大小分爲數塊,對每一塊進行獨立加密。

優點:實現簡單、效率高;有利於並行計算;誤差不會被傳送。

缺點:不能隱藏明文的模式,相同的明文會產生相同的密文;可能對明文進行主動攻擊,比如說黑客可以通過獲取賬號對應的密文段,進行密文段替換,成功實施ECB重放攻擊

2、密碼塊鏈接(CBC)

在CBC模式下,每個密文塊先要與前一個密文進行異或,然後再加密,所以它高度依賴於上一個密文塊,這就對數據完整性要求很高。因爲第一個明文沒有上一個密文,所以就要引入一個初始化矢量(IV)。

優點:不易被主動攻擊,這也是得益於它的這種像串行的機密模式,安全性高於ECB,適合傳輸長度較長的報文,是目前SSL和IPSec安全協議的應用標準。

缺點:不利於並行計算;有誤差傳輸效應;需要維護初始化矢量IV。

3、密文反饋(CFB)

密文反饋模式我覺得和CBC非常相似,區別上我覺得就是,一個先異或,一個後異或,它把上一個密文進行分組密碼加密,然後再和明文進行異或。與CBC一樣,也需要一開始引入一個初始化矢量。

優點:隱藏了明文模式;分組密碼轉化爲流模式,增強了安全強度;可以及時加密傳送小於分組的數據。

缺點:不利於並行運算;存在誤差傳送效應,即一個明文單元受損可以影響多個單元;需要維護一個IV。

分組密碼包括DES、IDEA、SAFER、Blowfish和Skipjack等等,最新國際標準算法是AES,以前使用的是DES/3DES算法。分組密碼的一個核心變換——Feistel結構。大多數分組密碼的結構本質上都是基於Feistel網格結構,所以這是一個很重要的地方。

Feistel網絡的安全性與一下參數有關。

(1)分組大小

(2)密鑰大小

(3)子密鑰產生算法:該算法複雜性越高,則密碼分析越困難

(4)輪數n:單輪結構遠不足以保證安全,一般輪數選取16

(5)輪函數F:結構越複雜越難分析

分組加密算法DES

DES算法爲密碼體制中的對稱密碼體制,又被稱爲美國數據加密標準,是1972年美國IBM公司研製的對稱密碼體制加密算法。明文按64bit進行分組,密鑰長64bit。

DES算法具有極高的安全性,到日前爲止,除了用窮舉搜索法對DES算法進行攻擊外,還沒有發現更有效的辦法。但是隨着計算處理能力的提升,爲了克服DES密鑰空間小的缺陷,研究人員提出了三重DES的變形方式,即採用了兩個密鑰共128bit長度,僅加大了窮舉密鑰的計算複雜度。

分組加密標準AES

AES算法基於排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換爲另一個。AES使用幾種不同的方法來執行排列和置換運算。AES是一個迭代的、對稱的密鑰分組的密碼,它可以使用128、192、256位密鑰,並且通過128bit分組加密或解密數據,既然是對稱加密,所以它使用相同的密鑰進行加密解密。迭代加密時就要使用一個循環結構,在循環中重複置換和替換輸入數據。

序列密碼

序列密碼是一個隨時間變化的加密變換,具有轉換速度快、低錯誤傳播的有點,硬件實現電路簡單,缺點是有低擴散、插入或修改等不敏感性。
目前序列密碼研究成果沒有完全公開,因爲序列密碼更多應用於外交和軍事部門等機密部門。目前公開的序列密碼算法有RC4、SEAL等。 說到序列密碼必須說一次一密,如果序列密碼所使用的是真正隨機方式的、與消息流長度相同的密鑰流,那麼這個序列密碼就是一次一密的密碼體制(One-Time Password)。

至於序列密碼加密和解密,加密過程大概就是密鑰K通過密鑰流生成器生成密鑰流,使用密鑰流和明文進行異或運算得到密文;解密過程這是使用密鑰K通過密鑰生成器生成密鑰流,在用密鑰流和密文進行異或得到明文。

注:密鑰流生成器的核心是一個僞隨機數發生器,而密鑰K爲該隨機數發生器的種子。應用最廣的隨機數發生器爲線性反饋一位寄存器(LFSR)。當LFSR週期無限長即可形成OTP一次一密系統,OPT是一種理想的安全流密碼體制。

一次一密系統應用目前面臨的挑戰:

1、密鑰配送問題,OTP的密鑰長度和明文長度相同,若能把密鑰安全有效地發生出去,那還加什麼密呢??

2、密鑰的保存問題,OTP把保存明文問題轉化爲保存於明文等長的密鑰問題

3、密鑰的複用:OTP不能使用過去用過的隨機比特序列,否則就會泄露之前的通訊內容,這也叫前向安全。

4、密鑰的同步,明文很長的時候,密鑰也會一樣長,在同步密鑰的過程中一旦出現錯誤,後續通訊就無法解密,有時也被稱爲後向安全。

5、密鑰的生成問題,OTP需要生成大量的隨機數,而我們目前只能使用計算機生成僞隨機數來暫時替代,凱撒僞隨機數終究不是隨機數,無法滿足需求,而想要無重現性的真正隨機數生成的難度極大。

流密碼的安全性主要依賴於主控密鑰K的保密性和密鑰流發生器的可靠性。密鑰序列產生算法最爲關鍵,其生成的密鑰必須具備僞隨機性,至於什麼是僞隨機性,就留給大家自行百度了。序列密碼的安全性確實高,加密速度也快,實時性好,就是過於要求同步,要實現嚴格同步,需要付出很高的代價。

RC4序列密碼

RC4由RSA Security的Ron Rivest在1987年設計的一種高速簡潔的流密碼,被廣泛用於常用協議,比如無線網絡安全算法、SSL/TLS、HTTPS等安全協議。RC4加密分爲兩步:

1、Key-Scheduling Algorithm(KSA)密鑰調度算法,採用可變長度的加密密鑰產生密鑰流生成器的初始狀態。

2、Pseudo-Random Generation Algorithm(PRGA)僞隨機子密碼生成算法,根據初始狀態生成密碼流,並於明文進行相異或產生密文。

RC4採用的是XOR運算,一旦子密碼序列出現了重複,密文就有可能被破解。存在部分弱密鑰,是子密序列在不到100B內就出現重複。那麼就可能在10萬字節內就發生完全重複風險。所以在使用RC4算法時候,必須對加密密鑰進行安全測試,避免出現弱密鑰問題。

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