現在的編劇都懂密碼學了?
「哎呀!不要擠了!」
「兄弟,再往裡邊兒挪挪。」
就這樣,我趕上了這班地鐵。早高峰的地鐵總是很讓人抓狂。我的身體隨著車一會兒一晃。突然,目光被前方小哥的手機吸引了。我好奇地把頭靠過去。這畫面好熟悉,這不就是我之前很喜歡的.很喜歡的那個《秦時明月之萬裡長城》嘛!
我瞄了幾眼他的手機,發現剛好演到第 24 集,瞬間被兩個逼格滿滿的道具吸引了注意力——黑龍捲軸、千機銅盤。
黑龍捲軸乃大秦帝國最高機密文件,為了防止文件中的秘密洩露出去,裡面的內容都是由千機密語編寫而成。
千機密語術乃是陰陽家獨創的一種高深莫測的語法,千變萬化,是解開千機密語的唯一鑰匙。千機銅盤天下間一共有兩個,一個在鹹陽宮嬴政的身邊,另一個則被保存在桑海城將軍府的千機樓中。
為了防止有人偷竊千機密碼銅盤,千機樓周圍除了安排重兵把守外,樓房內還設置了特殊機關——血蠶絲陣。血蠶絲每根絲都用劇毒浸泡過,一旦接觸,立即斃命。
咦?怎麼開始講上故事了。你別急!等我給你小小回顧下劇情,因為我發現了這裡竟然有點奧秘。話說,我那會兒看的時候怎麼沒意識到呢~
故事中盜蹠和大鐵錘(劇中人物)從秦兵手中奪到了黑龍捲宗,準備交給班大師破解。
為了解開黑龍捲宗,盜蹠決定冒險潛入將軍府,盜取千機銅盤。他用了一招「電光神行步」越過戒備森嚴的將軍府,憑藉一塊萬年紫水晶,歷經層層考驗終於成功盜取千機銅盤。幫助班大師解開了黑龍捲宗中的秘密。
「你下不下車啊?不下別擋著!」
我:「.」
千機密碼最強解密
不看後悔的那種
因為想得太入迷,以至於我到站了都不知道。出了地鐵我越想越覺得,這裡的千機密碼似曾相熟。於是我到了公司整理了一下劇情,並把它抽象成下面這幅流程圖:
細細地品味整個故事的情節,我驚奇地發現,這.這簡直就是密碼學的簡單應用啊!
還順便完整地講述了如何對密鑰存儲管理系統(KMS)進行攻擊,並破解密文的整個攻擊過程。只是整個過程被塗抹了武俠的色彩,讓我們看起來極具神秘感。看來現在的編劇都身懷絕技啊!我打算用密碼學的術語把整個情節剖析一下,以此揭開它的神秘面紗。
通信雙方:本次通信的雙方可以認為是鹹陽宮與桑海城,雙方使用提前協商的對稱密鑰(千機銅盤)對通信的內容進行加密,已保證通信內容的機密性。
對稱密鑰:用於加密通信內容的工具,很明顯就是千機銅盤,由於千機銅盤兩個是一模一樣的,因此可以認為是對稱密鑰。
KMS(密鑰存儲管理系統):用於管理密鑰,防止攻擊者竊取密鑰的存儲系統,千機樓就是這個密鑰存儲管理的系統。其實除了千機樓還有一個 KMS,那就是鹹陽宮,用於保存另一個千機銅盤(密鑰)。
編碼:很多人都會覺得奇怪,怎麼會突然冒出編碼這麼個東西!但是上述情節確實是涉及到編碼,這個編碼便是指經過特殊處理和保護的黑龍捲軸。有人可能會有疑問,為什麼不是二次加密,而是編碼呢?因為班大師破解的過程中未涉及到任何密鑰相關的操作,而且破解的過程與盜取千機銅盤相比要容易的多。而且考慮到傳輸過程中便利性,我們認為把這個特殊的保護理解為編碼更為合適,比如常用的 Base64 編碼。
上面關於加密通信的整個過程就比較清晰了,可以抽象為下面這個過程:
講完了通信過程,下面我們就來看看這個密文是如何被破解的,其實就是一場如何攻破 KMS 並獲取其中密鑰的過程,因為獲取傳輸過程中密文是一個相對簡單的過程。
解碼:只要了解編碼的規則,進行解碼是一件相對比較容易的事情。
竊取密鑰:從劇情中對於千機樓這個 KMS 的描述可以看出,這個 KMS 的設計還是非常安全的,如果攻擊者想要入侵這個 KMS 是非常困難的。如果想要入侵 KMS 就需要知道其內部的薄弱點,或者潛在的漏洞,此時最便捷的方式就是通過社工的方法策反內部人員,這個內部人員就是傳說中的「劍聖」蓋聶。通過內部人員獲取潛在漏洞後,就需要構建 EXP (exploit:漏洞利用),這個 EXP 可以認為那個萬年紫水晶。通過這個 EXP ,在加上「資深黑客」盜蹠,便成功的從 KMS 中獲取了加密密鑰。
獲取密鑰後解密密文便是一件相對容易的事情了,總結一下這次攻擊之所以能夠成功,社工發揮了至關重要的作用,除此之外還有以下兩個因素:
a. 密鑰存儲管理系統(KMS)的設計不夠完善,存在漏洞,從而導致系統的防護被繞過。
b. 通信方式的設計不夠完善,使用固定的對稱密鑰加密通信消息的方式是不安全的,如果密鑰洩漏,將會導致整個通信消息的洩漏。
對稱加密該如何操作?
其實密碼學早在古代時就有運用,現在的密碼學已經成了體系。這其中有一些還與密碼學的算法有關。
密碼學經歷了三個階段。早期階段即古典密碼,這個時期是對整個加密過程保密的。之後到了現代密碼階段即對稱加密,這個時期密碼的安全性都依賴加密密匙。最後一個階段是公鑰密碼,即非對稱加密,這時候加密不用秘密鑰,秘密鑰僅在解密的階段使用。
對稱加密作為最快速、最簡單的一種加密方式,由於其效率高,所以被用在很多加密協議的核心當中。我呢,也來給大家說說這種加密方式。
對稱加密:是使用同一密鑰完成加密和解密的操作。在發展過程中有兩種重要的算法一直沿用至今:DES、AES。
DES 算法在 1977 年 1 月由美國國家標準局公布,是現代第一個對稱加密算法。它屬於分組密碼,明文分組長度為 64 位,產生的密文長度也為 64 位,有效密鑰長度為 56 位。
它是這麼加密的?
a. 對輸入分組進行固定的初始置換,使用 IP 表示,獲得,其中的長度均為 32 位,如下所示:
b. 進行 16 輪迭代,迭代的輪密鑰 𝑘i 是密鑰 𝐾 的子串,長度為 48 位,其中𝑖 = 1,2,3, ⋯ ,16,獲取 的方式如下所示:
c. 將經過 16 輪迭代得到的結果輸入到 IP 的逆置換來消除初始置換的影響,最終得到 DES 的輸出,即加密名的數據:
解密過程中使用的輪密鑰與加密過程中的相同,只是順序發生了變化:
那它又是如何解密的呢?
a. 將密文輸入分組輸入到初始置換函數 IP 中,獲得其中的長度均為 32 位,如下所示:
由加密過程可以得知:
b. 通過獲取如下所示:
由此可得:
c. 同理 ,進行 IP 逆變換從而獲得明文輸出分組,如下所示:
DES 被認為僅有的最嚴重的缺點就是密鑰長度太短,有效長度只有 56 位,易遭受窮舉密鑰攻擊,即利用一個已知明文或密文對進行窮舉測試,直至找到正確的密鑰。
為了彌補 DES 的弱點,衍生了 3DES 算法,其原理是對明文先加密,再解密,最名再加密,3 次加解密操作推薦使用不吋的密鑰,其有效密鑰長度相當於 112 位。
由於 DES 的缺陷,嚴禁使用 DES 進行加解密操作,雖然 3DES 對 DES 進行了加強,但是其密鑰長度仍不能滿足安全的需求(要求密鑰長度最小為 128 位),因此,除非強制要求,儘量不要使用 3DES。此外,由於需要經過 48 輪的變換,3DES 的加解密效率也比較低。
鑑於 DES 的缺陷,1997 年 1 月 2 日美國國家標準和技術研究所(NIST)宣布徵集一個新的對稱密鑰分組密碼算法取代 DES,新算法被命名為高級加密標準(AES)。
1997 年 9 月 12 日開始徵集,2000 年 10 月 2 日 NIST 宣布選中 Rijindael 作為 AES,Rijindael 是由比利時密碼學家 Daeman、Rijmen 共同設計,這種算法有以下面幾個特徵:
AES 加解密操作依賴 4 個可逆的函數:SubBytes、ShiftRows、MixColumns、AddRoundKey,咱們以密鑰長度及分組長度均為 128 位為例說明加解密的過程。過程如下:
a. 生成明文輸入分組矩陣,其中位:
b. 生成輪密鑰矩陣,其中位:
c. 進行輪密鑰變換,共需要進行 10 輪變換,其中前 9 輪變換如下:
最後 1 輪變換如下:
d. State 矩陣既表示輸入也表示輸出,這樣經過 10 輪變換,最終獲取加密名的分組消息。解密過程中,由於輪變換的內部函數是可逆的,因此輪變換也是可逆的,以 crypto 表示密文分組矩陣,使用 RoundKey2 表示解密輪密鑰,只需要通過下面兩步運算即可獲得明文分組消息。
① FinalRound (crypto, RoundKey2)
② Round (crypto, RoundKey2)
AES 是目前對稱加密最常用的加密算法,使用時要求其最小密鑰長度為 128 位,隨著 AES 的出現,多重加密(如 3DES)變得不再必要,可變的密鑰長度及分組長度為各種應用需求提供了可選的安全強度,同時密鑰的減少不僅簡化了安全協議和系統的設計,也提升了加密與解密的效率。
那麼,在使用密碼學的過程中應該注意哪些問題呢?使用什麼樣的密碼學算法才是業界的最佳實踐呢?了解更多安全漏洞防護知識,這本書可能會幫到你。
☟☟
Web安全實用指南
掃一掃,京東購
《Web漏洞防護》
作者:李建熠
書中首先介紹了漏洞演示平臺及一些常用的安全防護工具,然後對 OWASP Top 10 2017 中涉及的漏洞防護方式及防護工具進行了說明,接著介紹了如何通過 HTTP 響應頭提升 Web 客戶端自身對漏洞的防護能力,最後討論了在無法更改應用程式源碼的情況下,如何對應用進行外層的 WAF 防護。
從事安全方面工作的小夥伴可以來說說,常見的 Web 應用的漏洞有哪些?或者給其他小夥伴安利一些解決 Web 漏洞的小技巧。非安全領域的小夥伴可以說說你知道的世界上著名的密碼有哪些?以及那些你用過的最爛的密碼。精選留言選出 5 位獲得贈書。活動截至2019.6.24。
劇情參考:百度百科——千機密碼銅盤
文圖來源:《秦時明月之萬裡長城》豆瓣截圖
推薦閱讀:
這12本經典技術書,是時候C位出道了!
怕蛇的人如何學Python?
一個高度近視眼的深度學習實踐
☟ 更多安全好書