給定一段16進位碼密文,如何判斷其所用加密演算法?
假如說有一段樣本容量足夠大的密文(或者說16進位亂碼),沒有關於明文和加密方式的任何信息,有辦法判斷出,這是某開源民用分組演算法或非對稱演算法(常見結構的通用演算法),或某閉源軍用序列密碼(演算法保密,加密結構簡單至直接亦或,但是亂碼序列強度高),亦或是某密碼學專業研究生的課下作業(可能數學上的強度和安全性並不高,但是演算法小眾到接近閉源)產生的密文嗎?
ps:類似base64產生的密文其實已經很常見了,所以這裡僅僅討論純16進位碼序列組成的密文。
如果能判斷,說明加密演算法不合格
設計良好的加密演算法,其密文應該和隨機串一樣沒有任何有意義的特徵
不可能。我給你y=1,你能告訴我x=0(y=e^x)還是x=1(y=x)嗎?樣本容量足夠大也沒用,因為你完全不知道加密前是什麼信息。我完全可以這麼說,加密演算法就是y=x,你現在手上拿著的這個就是原文。
加密的目的就是為了在數據中隱藏信息。加密方法也算信息之一,當然不能看出。能看出的那叫編碼,不叫加密。
簡單的說,ciphertext=F(plaintext),如果只有c,是不可能知道p的。
但是,脫離完全的數學,來到真實世界,你就會發現,加密演算法F的input,不只有plaintext,還有很多現實信息。你可以通過假設,來嘗試恢復明文。
例如,假設一種簡單的加密(算是最早的最原始的加密演算法了吧),就是把一個字元映射成另外的一個字元。例如,a-&>b,b-&>x," "-&>y,c-&>"+"......,
給你明文,看似一坨亂碼。但是,你可以假設這是一種簡單的映射演算法。那麼,怎麼分析映射關係呢? 用暴力窮舉嗎?不用。隱含的信息是,這是一段文字,那麼就可以根據語言學的特徵來幫助分析。語言學統計結果可以顯示,不同的字母在文本中出現頻率是不一樣的。例如(純屬瞎舉例,別介意),空格「 」總是間隔著就會出現,母音aeiou出現頻率要高於輔音,等等。ok,空格很快就會被肉眼發現。對你手裡的密文進行統計,大概就可以猜出一些候選的mapping方案。試著回復一下明文,可以排除沒有意義的一些明文情況,逐步確認映射關係。
現代密碼學裡的加密演算法,有嚴謹的數學理論,對明文做混淆,所以像上面這種簡單的破解,幾乎已經是不可能的。
但是,即使演算法是安全的,也不是不可能。如果能獲取演算法執行過程中的其他信息(例如,時間,功耗等),也是有可能分析出是什麼演算法甚至key的。這部分涉及對密碼演算法的具體實現和計算過程的攻擊,可以自行google「旁路攻擊」。
那得看加密演算法了,如果加密演算法都不給看就能直接破譯那密碼演算法設計的得多爛啊。
沒有其它渠道,無法判斷
推薦閱讀:
※電腦中了勒索病毒,辦公文件全部變成了.Cerber3/B477加密文件,怎麼辦?如何解密?
※如何評價《中國移動,請你告訴我,為什麼一條簡訊就能騙走我所有的財產》暴露的個人信息安全隱患?
※通過實體安全密鑰而非密碼登陸的安全性以及通用性究竟如何?
※想報考信息安全專業與留在沿海地區上大學的計劃有衝突該怎麼選擇?
※中國黑客界為什麼沒有走上維基解密的道路?