我有350萬的明文和密文對,請問能用機器學習的方法來找出加密演算法嗎?
明文為16位的純數字,密文為24位的類似於base64的字元串,但多了"-","_"等符號。
現在有350萬的這樣的串。請問有沒有可能用機器學習的方法來找出加密演算法。預測一個新的明文,得出正確的密文。
如果對加密演算法的函數形式毫無了解
那除非建一個350w的映射表 不然任何可計算(參數個數小於350w)的模型都沒法保證在這350w條數據上的準確率是100% 何況其他數據另外 這位提問題的仁兄 你是來黑機器學習的么。。。
首先說明,350萬在即使知道加密演算法、想算密鑰或者想解密新密文的情況下,都不算足夠多,甚至可以說太少。
=====================下面是回答問題本身===================
1. 不限時間和資源,100%可以。
2. 限制時間和資源,難。
2.1 不考慮加密演算法本身的性質
拋開加密過程的本身性質,直接把加密視為一個函數
那麼如果定義好神經網路,且定義好相應的error function E, 的確可以實現將新的明文以較小的E值映射到新的密文上。但是,沒法做到正確,也就是無誤差。
2.2 獲取加密演算法的方法
2.2.1 找手冊
如果是嵌入式產品,請查找原廠手冊
2.2.2 找源碼、反彙編
如果是網頁上用JavaScript實現的加密,請查看源碼。
如果是客戶端,反彙編後自己看。
2.2.3 截取網路通信的握手信息
TLS/SSL的握手信息不是加密的,看到前幾條就知道接下來協商生成的密鑰是用在什麼加密上。
機器學習的一個假設是training數據集有pattern,甚至最好他們都sample自同一個分布。
密碼演算法設計的目的是讓密文無pattern,所以從理論上說機器學習是不可用來找出演算法的。
如果加密演算法設計的不好,讓密文存在pattern了,目前機器學習估計一樣搞不定,因為lable太多,這個錯誤率會大到無法接受的地步。
關於機器學習是這樣一個過程。比如y=f(x)=3x^3+x^2+5x 通過機器學習或者隨意演算法已知y=6.求x。在這種情況下每找到一個X都與之對於一個唯一的確定值y。並且能夠清晰的表明這個y與答案6的距離。通過逼近(機器學習)能夠快速得出結果,因為每確定一個X值能夠確定對應的Y值偏離或者靠近y=6多少。這種趨勢型的問題又叫做P問題(計算複雜度理論)。即可以通過不斷的嘗試能夠接近或者達到需要的答案。而密碼問題是NP問題。比如已知y=MD6(x1)=123456789012346 求x1.這個問題只有窮舉然後嘗試。但在嘗試的過程中不存在哪個接近哪個偏離這樣的一個答案。所以已知明文密文對求加密演算法一個圖靈不可計算的問題也就是NP問題。在現代密碼中只要一位的改變就會改變全局的值。比如找到了MD6(x2)=123456789012345而前進一部是很困難的。密碼只有對錯沒有偏離這個概念。破解密碼的過程就是找到這個規律。
首先說我覺得這應該是一個 回歸 問題。
比如線性模型就是就是假設 自變數 因變數的關係是線性的。
有些模型,比如神經網路這種,雖然模型不容易解析的表示出來,但是模型也是確定的,機器學習的只是參數。
這類模型雖然參數多表達力強,但是你得到的模型未必就是真實的數據產生的模型。
這就如同所有的函數都可以用多項式函數去近似,但是再精確的多項式近似也不一定就是原函數的表達式。
因此,
除非你加密的模型正好是你假設的模型而你只是不知道具體參數。
比如你的加密演算法就是明文乘了個數又加了個數,那線性模型就能學出來,而且訓練誤差是零。當然如果抽象一點講,
理論上這個任務也算是一個讓 「機器學習出規律」 的任務。
說個離題的,以《戰爭與和平》為語料,用蒙特卡洛方法對密文解密的方法挺有趣的。
Attack model
題主說的情況應該是屬於Known plaintext。
但是常用的演算法都能抵抗Chosen ciphertext和Related key攻擊(嘛,天國的WEP),Known plaintext是個不怎麼強的條件了。
而且還是在加密演算法完全公開的情況下。只有密鑰是秘密的。
Side channel攻擊很熱,但是這不是演算法本身,而是演算法實現的問題。但是好像題主拿到的只是一坨明文密文對,沒法跟參與加密的系統交互,這個方法沒法用啊。Cryptography Learning 是一個 Hard Problem, PAC model 下不可學習。同樣,強學習性和弱學習性等價,所以連弱分類器也無法獲得。這個問題在經典Learning Theory里研究很多。參見:(1) Chapter 6 in "An Introduction to Computational Learning Theory", Michael Kearns.(2) "Cryptographic Hardness of Distribution-specific Learning", Michael Kharitonov.
不能,解密過程是非多項式問題,從加密的概念來看,明文與密碼之間的映射是不對稱的,有可能找到由明文到密碼的很好的近似關係,但是反過來不行
這個問題我深刻的思考過,我的數據是已知有四位純數字的密鑰,加密演算法未知,發現其實無解。我後來的辦法是正向暴力破解,因為買了一本加密與解密,我就放棄逆向了。祝好運。
如果這樣可行的話,那密碼學就沒有意義了吧......
如果你有一個有限的待選加密演算法表,機器可以幫你從中挑出正確的那個,否則就呵呵了。
理論上是存在這樣一個演算法的。這個演算法需要通過程序員不斷的調參來找到。具體而言,就是試驗不同的加密演算法和密碼,然後假裝訓練一下,搞一下交叉驗證。等正確率到100%就行了。。。
推薦閱讀: