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

3
免责声明:对密码学不熟悉。
我有一个使用OpenSSL加密数据的外部进程,现在使用盐。iPhone应用程序从服务器获取该数据,将其下载到应用程序的文档目录中,并需要解密它。iPhone OS不包括OpenSSL库。您可以自己构建它,但这很困难和棘手。我发现的“最简单”的解决方案(感谢Stackoverflow的帮助)是使用Security Framework的CommonCrypto/CommonCryptor.h。但是用于解密数据的C函数需要iv才能正确解密。
是否有一种方法可以从加密数据中派生iv(对我来说,似乎会抵消额外的安全性)?还是我需要首先指定iv,并让iPhone应用程序知道它是什么?或者,只是不使用盐?
编辑1:澄清一下,我正在使用OpenSSL加密数据文件中的文本。使用OpenSSL的脚本加密文本,上传到Dropbox,然后应用程序从Dropbox下载文件,解析文件并尝试解密文本。
编辑2:是的,我正在使用OpenSSL命令行实用程序和-pass选项。

你想做什么?是要设置一个服务器还是只是使用 SSL 连接到服务器? - zaph
OpenSSL命令是什么,不包括实际密钥? - zaph
3个回答

7
每次加密消息时,应随机选择IV。我假设您正在使用OpenSSL命令行实用程序openssl enc,但不清楚您是使用基于密码的加密(-pass-salt选项)还是明确指定密钥(-K-IV选项)。
为了获得最佳安全性,建议您使用-K选项,并为每个消息随机生成新的IV。将IV与密文一起发送。例如,您可以在一个文件中将密文附加到IV中,然后在准备解密时从文件开头剥离IV。
IV可以公开;您不必隐藏它。重要的是每条消息都使用不可预测的IV。

1

iv 不能从加密数据中派生,它必须在双方通信之外协商或公开。此外,根据加密模式的不同,可能不需要 iv,但 CBC 是最常见的,确实需要一个 iv。iv 基本上使得从第一个块中获取任何信息更加困难。

在您的情况下,您只需要找出 iv,它可以是静态的并且只需将其硬编码,或者它被传输,可能在前导中,找出如何从数据中提取它。

iv 可能就是简单的 0。

SSL 的一个问题是尝试捕获数据包。使用应用程序 Charles (链接在此处) 可以轻松完成,它有一个免费试用版。我经常使用它。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接