免责声明:密码学新手。
我有一个使用OpenSSL加密数据的外部进程,现在使用salt。
iPhone应用程序从服务器获取该数据,将其下载到应用程序的文档目录,并需要对其进行解密。 iPhone OS不包含OpenSSL库。你可以自己构建它,但这很困难而且很棘手。由于Stackoverflow的帮助,我发现的“最简单”解决方案是使用CommonCrypto/CommonCryptor.h
,它是安全框架的一部分。
但解密数据的C函数需要iv才能正确解密。
有没有办法从加密数据中导出iv(对我来说,似乎它会否定额外的安全性)?或者我需要首先以某种方式指定iv并让iPhone应用程序知道它是什么?或者,只是不要使用盐?
Edit1:为了澄清,我正在使用OpenSSL来加密数据文件中的文本。使用OpenSSL的脚本加密文本,上传到Dropbox,然后应用程序从Dropbox下载文件,解析它,并尝试解密文本。
Edit2:是的,我正在使用带有-pass
选项的OpenSSL命令行实用程序。
答案 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/真的很简单。
干杯!