如何从OpenSSL加密数据中获取初始化向量(iv)

时间:2011-09-09 16:39:21

标签: iphone ios encryption cryptography openssl

免责声明:密码学新手。

我有一个使用OpenSSL加密数据的外部进程,现在使用salt。

iPhone应用程序从服务器获取该数据,将其下载到应用程序的文档目录,并需要对其进行解密。 iPhone OS不包含OpenSSL库。你可以自己构建它,但这很困难而且很棘手。由于Stackoverflow的帮助,我发现的“最简单”解决方案是使用CommonCrypto/CommonCryptor.h,它是安全框架的一部分。

但解密数据的C函数需要iv才能正确解密。

有没有办法从加密数据中导出iv(对我来说,似乎它会否定额外的安全性)?或者我需要首先以某种方式指定iv并让iPhone应用程序知道它是什么?或者,只是不要使用盐?

Edit1:为了澄清,我正在使用OpenSSL来加密数据文件中的文本。使用OpenSSL的脚本加密文本,上传到Dropbox,然后应用程序从Dropbox下载文件,解析它,并尝试解密文本。

Edit2:是的,我正在使用带有-pass选项的OpenSSL命令行实用程序。

3 个答案:

答案 0 :(得分:5)

应为您加密的每条消息随机选择IV。我假设您正在使用OpenSSL命令行实用程序openssl enc,但不清楚您是使用基于密码的加密(-pass-salt选项)还是明确指定密钥( -K-IV选项。

为了获得最佳安全性,我建议您使用-K选项,并为每条消息随机生成一个新IV。发送IV和密文。例如,您可以将密文附加到一个文件中的IV,然后在准备解密时从文件的开头删除IV。

IV可以公开;你不必隐藏它。重要的是你为每条消息使用了一个不可预测的IV。

答案 1 :(得分:1)

iv不能从加密数据中获得,它必须在双方之间的通信之外达成一致或公开。此外,根据加密模式,可能不需要,但CBC是最常见的,需要iv。 iv基本上使得从第一个块收集任何信息变得更加困难。

在你的情况下,你只需要找出iv,要么它是静态的,只是硬编码它或它被传输,可能在前导码中,弄清楚如何从数据中提取它。

iv 可能就像0一样简单。

SSL的一个问题是尝试捕获数据包。这可以通过应用Charles (link here)轻松完成,它可以免费试用。我经常使用它。

答案 2 :(得分:0)

我个人用来编译OpenSSL以获得各种功能,试试这个tuto http://www.x2on.de/2010/07/13/tutorial-iphone-app-with-compiled-openssl-1-0-0a-library/真的很简单。

干杯!