1

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

当想要取回字符串时,在解密之前,我想确保加密的内容没有被篡改(比如手动更改字符)。

我怎样才能验证这一点?

提前致谢!

4

2 回答 2

1

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

让我简要解释一下。假设用户的设备没有越狱,iOS 已经通过其数据沙盒模型为您的应用程序的数据提供了足够的保护。这意味着无法更改应用程序的私有数据(保存在应用程序的标准 Documents、Caches 等文件夹中)。另一方面,想要修改存储在您应用程序的私人文件夹中的加密信息的恶意用户可以越狱设备。在这种情况下,他将可以访问所有内容,并且可以读取和写入任何私人文件夹。

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

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

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

于 2014-04-15T09:15:08.853 回答
0

RNCryptor 包含一个 HMAC 来检测这一点。如果密文被修改,它不会解密。你会得到一个错误(“HMAC 不匹配”)。

于 2014-04-15T22:36:52.803 回答