2016-03-11 35 views
1

我已經開始使用RNCryptor,它將自己描述爲「iOS和Mac的CCCryptor(AES加密)包裝器」。如果用戶可以使用AES加密訪問多個加密的數據片段,他們是否能夠猜測加密密鑰?

我的問題不是特定於iOS,而是更一般。

下面是一些代碼,我可能會使用加密的字符串:

func encryptText(text: String, encryptionKey: String) -> NSData? { 
    let textData = text.dataUsingEncoding(NSUTF8StringEncoding) 

    if textData == nil { 
     return nil 
    } 

    let encryptedTextData = RNCryptor.encryptData(textData!, password: encryptionKey) 

    return encryptedTextData 
} 

我有幾個擔心:

  1. 如果用戶無法訪問加密密鑰,但也有多個字符串使用他們有權訪問的相同加密密鑰加密,他們是否能夠找出加密密鑰是什麼?
  2. 如果用戶知道其中一個字符串的內容,例如「Test String」,他們是否能夠使用該知識找出加密密鑰,從而訪問其他字符串?
  3. 如果對2,是否會在每個字符串的末尾添加一系列隨機字符(可以說是20個字符)使我免受這種類型的攻擊?如果有人有這些知識,他們是否可以很容易地刪除最後20個字符並解密剩餘的字符串?
+0

蠻力攻擊通常在計算上非常昂貴,所以對於「正常使用」它應該保持良好。對於更強大的系統,請嘗試使用異步加密。我也建議你在http://security.stackexchange.com上提問,他們可能會有更多的討論。 – UlyssesR

+0

針對AES的蠻力攻擊不僅計算昂貴而且不可行,如果使用隨機密鑰,它不是一個問題。 – zaph

+0

使用異步密鑰(公鑰 - 私鑰),https://en.wikipedia.org/wiki/Public-key_cryptography – UlyssesR

回答

4

攻擊者所能做的就是暴力破解密鑰,這不是一個現實的命題,也不是一個對多個消息的知識變得更容易的方法(除非AES存在某些弱點,我們不是意識到會產生「模式」)。

如果攻擊者可以訪問許多截獲的(甚至解密的)消息,您可能會想知道攻擊者是否還有其他好處。例如,如果明文與先前的消息相似或甚至相同,則可以猜測明文。

AES包括設置「初始化向量」。

通常,您爲每條消息設置一個隨機IV並將其與加密的消息一起發送。你的圖書館也是這樣做的。結果是沒有兩條消息以完全相同的方式加密。即使你發送三次相同的明文,它也會以三個不同的密文結束(與三個不同的消息不能區分)。與「醃」相同的想法。

會在每個字符串的末尾添加一系列隨機字符(可以說是20個字符)使我不受這種類型的攻擊?

隨機IV機制使這不必要。

至於它有效,AES是分組密碼。之前塊的輸出可能會影響後面塊的輸出,但不會影響其他塊的輸出。所以最後一個隨機填充只會改變最後一個塊。如果有的話,你想在開始時填充你的字符串。但是,算法本身(如果使用得當的話)具有處理這些問題的機制(以IV,塊鏈接和塊填充的形式)。

+0

你能告訴我們,如果沒有初始化矢量或固定的初始化矢量會發生什麼?很明顯,我可以發現你發送了兩個相同的消息,或者例如你發送了兩個消息,其中前n個字節是相同的;我可以得到更多嗎? – gnasher729

+0

我相信這是關於它的程度。你可以告訴兩個消息是否從相同的(或完全相同的)開始,而不需要解密它們。不應該在你的暴力攻擊方面有所作爲(所以也許我的回答有點困惑)。據說攻擊者也知道IV(因爲它通常包含在傳輸本身中)。 – Thilo