2011-09-09 118 views
1

免責聲明:新加密技術。如何從OpenSSL加密數據獲得初始化向量(iv)

我有一個使用OpenSSL加密數據的外部進程,它現在使用鹽。

iPhone應用程序從服務器獲取該數據,將其下載到應用程序的文檔目錄中,並需要對其進行解密。 iPhone OS不包含OpenSSL庫。你可以自己構建它,但這很困難和棘手。我已經找到了「最簡單」的解決方案,感謝Stackoverflow的幫助,使用安全框架的一部分CommonCrypto/CommonCryptor.h

但是解密數據的C函數需要iv才能正確解密。

有沒有一種方法來從加密的數據(這對我來說,它會否定額外的安全性)派生iv?或者,我需要,首先,以某種方式指定iv並讓iPhone應用程序知道它是什麼?或者,不要使用鹽?

編輯1:爲了澄清,我使用OpenSSL來加密數據文件中的文本。使用OpenSSL的腳本加密文本,上傳到Dropbox,然後應用程序從Dropbox下載文件,解析文件並嘗試解密文本。

編輯2:是的,我正在使用OpenSSL命令行實用程序和-pass選項。

+0

你想做什麼?建立一個服務器或只使用ssl到服務器? – zaph

+0

什麼是OPenSSL命令,不包括實際的密鑰? – zaph

回答

4

應該爲您加密的每封郵件隨機選擇IV。我假設您使用OpenSSL命令行實用程序openssl enc,但不清楚您是使用基於密碼的加密(-pass-salt選項)還是明確指定密鑰(-K-IV選項)。

爲了獲得最佳安全性,我建議您使用-K選項,併爲每條消息隨機生成一個新的IV。發送IV和密文一起。例如,您可以在一個文件中將密文附加到IV,然後在準備解密時從文件的開頭剝離IV。

IV可以公開;你不必隱藏它。重要的是你爲每條消息使用了不可預測的IV。

1

iv不能從加密數據中派生出來,它必須在雙方之間的通信之外商定或公開。也取決於加密模式,它可能不是必需的,但CBC是最常見的,並且需要iv。 iv基本上使得難以從第一塊中收集任何信息。

在你的情況下,你只需要弄清楚iv,無論是靜態的,只是硬編碼,或者它被傳輸,可能在前導碼中,找出如何從數據中提取它。

的IV 可以簡單到0

一個問題與SSL試圖捕獲的數據包。這可以通過應用程序Charles (link here)輕鬆完成,它有免費的試用版。我經常使用它。