验证加密数据是否未被篡改

时间:2014-04-15 08:41:16

标签: ios objective-c security encryption rncryptor

我有一个使用RNCryptor v2.2 ObjectiveC库加密的字符串。 加密后,它将存储在iPhone本地。

当想要获取字符串时,在解密之前,我想确保加密不被篡改(比如手动更改字符)。

我该如何验证?

提前致谢!

2 个答案:

答案 0 :(得分:0)

理论上对你的问题的正确回答是,无论你在设备上本地应用程序中做什么,都不会更确定你的数据是否被篡改或与无所作为相比。您需要使用外部可靠的代理(例如https Web服务器)来存储有关数据的一些信息。

让我简单解释一下。 iOS已经为其应用程序的数据提供了足够的保护,其data sandboxing模型假设用户的设备未进行越狱。这意味着无法更改应用的私人数据(保存在应用的标准文档,缓存等文件夹中)。另一方面,想要修改存储在应用程序的私人文件夹中的加密信息的恶意用户可以越狱设备。在这种情况下,他可以访问所有内容,并可以读写任何私人文件夹。

有些人可能会说您可以创建数据的哈希值或数字签名并将其存储在设备上。但是,如果设备越狱,入侵者可以访问所有内容,包括应用程序的二进制代码(Objective-C可以不需要太多努力进行逆向工程),因此哈希生成算法,salt或私有数字签名的关键。所以他也可以轻松地操纵数字签名或哈希。

您应该评估数据被篡改的风险。需要多少努力来篡改您的数据?如果您要存储银行信息并计算大约100万用户,您应该认真对待有人可能越狱设备,对您的应用进行反向工程并篡改数据的风险。如果您要存储照片共享应用程序的会话令牌,也许您可​​以保持原样并信任iOS的沙盒。同样非常重要的是,越狱设备需要用户的积极参与,因此未经用户同意就不可能远程进行。这意味着未经用户同意,数据不会被篡改。

如果您确实需要保护数据,那么唯一的方法是使用您信任的外部服务,这可以为您提供有关设备的外部安全性。您可以通过https将敏感数据发送到Web服务器,让Web服务器使用其私钥对其进行签名,然后向您重新发送您可以随时随地存储的签名。每次您需要访问敏感数据时,您都可以验证数据的签名(以及签名与服务器公共证书的有效性)。由于私钥存储在远程服务器上,您可以确定没有人可以访问它,也不能用于签署篡改数据。

答案 1 :(得分:0)

RNCryptor包含一个HMAC来检测这一点。如果密文被修改,它将不会解密。您将收到错误(" HMAC不匹配")。