我有350萬的明文和密文對,請問能用機器學習的方法來找出加密演算法嗎?

明文為16位的純數字,密文為24位的類似於base64的字元串,但多了"-","_"等符號。

現在有350萬的這樣的串。

請問有沒有可能用機器學習的方法來找出加密演算法。預測一個新的明文,得出正確的密文。


如果對加密演算法的函數形式毫無了解

那除非建一個350w的映射表 不然任何可計算(參數個數小於350w)的模型都沒法保證在這350w條數據上的準確率是100% 何況其他數據

另外 這位提問題的仁兄 你是來黑機器學習的么。。。


首先說明,350萬在即使知道加密演算法、想算密鑰或者想解密新密文的情況下,都不算足夠多,甚至可以說太少。

=====================下面是回答問題本身===================

1. 不限時間和資源,100%可以。

2. 限制時間和資源,難。

2.1 不考慮加密演算法本身的性質

拋開加密過程的本身性質,直接把加密視為一個函數F: M 
ightarrow C

那麼如果定義好神經網路,且定義好相應的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%就行了。。。


推薦閱讀:

"ChaCha20" 加密演算法的名字由來有什麼典故?

TAG:機器學習 | 數據加密 | 大數據 | 加密演算法 |