关于NSUserDefaults的不安全之处是手动加密安全吗?

时间:2016-04-18 18:13:20

标签: swift security encryption nsuserdefaults

如果我理解正确:NSUserDefaults是一个存储敏感数据的不安全的地方,因为某些设置文件可能被黑客入侵,并且NSUserDefault值可以更改。

究竟什么可以被黑客攻击而不是黑客攻击?黑客可以看到我的应用程序的Swift代码,还是只看到存储在NSUserDefaults中的变量和值列表?

我可以在我的代码中创建自己的“加密”(其中NSUserDefault值看起来像一堆无意义的数字,并且“密钥”在我的代码中,并且需要进行一些复杂的数学运算)?这样安全吗?

注意:我不打算加密任何严重的用户名或密码,只是Highscores和Bool值,无论是否解锁级别/升级。如果我的手动解决方案是安全的,我不想学习KeychainsWrappers。

附带问题(虽然我尚未达到此步骤):如何处理应用内购买?是否有一个Bool值表示是否支付了一个项目,以及Bool存储的位置(由您自行决定)?

2 个答案:

答案 0 :(得分:5)

  

究竟什么可以被黑客攻击而不是黑客攻击?

你可以做的大部分事情都可以被黑客攻击。

  

黑客能否看到我的应用程序的Swift代码,他们只看到变量列表

复杂的黑客可以看到可执行的二进制文件,但不能看到Swift源代码。

  

存储在NSUserDefaults中的值?

看到NSUserDefaults的内容是微不足道的。请参阅iExplorer和其他类似应用。

  

我可以在我的代码中创建自己的“加密”

当然可以,但是你呢?

"Schneier's Law":“从最无能的业余爱好者到最好的密码学家,任何人都可以创建一个他自己无法破解的算法。”

  

这样安全吗?

不,这不安全。如果要使用加密,则需要使用标准加密算法(如AES),但创建安全方案并不容易。您可以使用诸如RNCryptor之类的包装器库。但是这会产生一个新问题:在哪里安全地保存加密密钥,请参阅下一点。

  

如果我的手动解决方案是安全的,我不想学习KeychainsWrappers。

只有您想要安全地保存密钥和少量数据。安全很难。

您需要评估所需的安全级别,包括攻击者级别和数据值。攻击者从好奇的学生到民族国家。数据值从Tic-Tac-Toe高分到核武器细节。您需要先确定这些。

答案 1 :(得分:0)

NSUserDefaults只是存储在设备文件系统中的plist。它唯一的安全'是人们必须进入设备文件系统才能到达它,这并不是特别困难。

根据应用购买中的苹果文档:

  

在推出产品后,您的应用需要持续记录购买情况。

source

您可以在有关保留购买的部分中阅读更多信息,但请忽略可以使用用户默认设置的部分。

如果您不知道自己在做什么,我也无法推荐使用您自己的安全存储系统。

以上假设您正在谈论应用购买。如果您正在谈论用户本地的内容,那么如果他们破解您的应用程序真的很重要吗?假设您有一个系统,您必须击败上一级才能解锁下一级别。如果有人编辑默认设置以解锁下一关,谁真正关心。这不是他们必须付出的代价,因此它不会影响您的收入来源。事实上,我认为只要不影响你的收入或其他玩家,允许真正想欺骗的人这样做会更好。