NSUserDefaults 有什么不安全的地方,手动加密安全吗?
What is un-secure about NSUserDefaults, is manual encryption safe?
如果我理解正确的话:NSUserDefaults 是一个不安全的地方来存储敏感数据,因为一些设置文件可以被黑客攻击并且 NSUserDefault 值可以被更改。
到底什么东西可以被黑,什么东西不能被黑?黑客可以看到我的应用程序的 Swift 代码,还是他们只能看到存储在 NSUserDefaults 中的变量和值列表?
我可以在我的代码中创建我自己的 "encryption"(其中 NSUserDefault 值看起来像一堆无意义的数字,而 "key" 在我的代码中有一些复杂的数学运算要做) ?这样安全吗?
注意:我不打算加密任何重要的东西,比如用户名或密码,只是加密 levels/upgrades 是否解锁的高分和布尔值。如果我的手动解决方案是安全的,我不想学习 KeychainsWrappers。
附带问题(虽然我还没有走到这一步):如何处理应用内购买?是否有一个 Bool 值表示某个项目是否已付款,以及 Bool 存储在哪里(由您决定)?
NSUserDefaults 只是存储在设备文件系统中的一个 plist。它唯一的 'security' 是人们必须进入设备文件系统才能访问它,这并不是特别困难。
根据有关应用内购买的苹果文档:
After making the product available, your app needs to make a persistent record of the purchase.
您可以在有关保存购买的部分中阅读更多信息,但请忽略其中说明您可以使用用户默认设置来执行此操作的部分。
此外,如果您不知道自己在做什么,我永远不会建议您使用自己的安全存储系统。
以上假设您谈论的是应用内购买。如果您谈论的是用户本地的东西,那么他们破解您的应用程序真的很重要吗?假设您有一个系统,您必须打败上一关才能解锁下一关。谁真正关心是否有人编辑他们的默认设置以解锁下一个级别。这不是他们必须支付的费用,因此不会影响您的收入来源。事实上,我认为最好允许真正想作弊的人这样做,只要不影响您的收入或其他玩家。
What exactly can be hacked and not hacked?
你能做的大部分事情都可以被黑客入侵。
Can the Hacker see my app's Swift Code, do they only see the list of variables
老练的黑客可以看到可执行二进制文件,但看不到 Swift 源代码。
values stored in NSUserDefaults?
看NSUserDefaults的内容是微不足道的。请参阅 iExplorer 和其他类似应用。
Could I create my own "encryption" in my code
当然可以,但是你应该吗?
"Schneier's Law": "Anyone, from the most clueless amateur to the best cryptographer, can create an algorithm that he himself can't break."
Is this safe?
不,这不安全。如果你想使用加密,你需要一个标准的加密算法,比如 AES,但是创建一个安全的方案并不那么容易。您可以使用包装器库,例如 RNCryptor。但这会产生一个新问题:将加密密钥安全地保存在何处,请参阅下一点。
I don't want to have to learn KeychainsWrappers if my manual solution is safe.
仅当您想安全地保存密钥和少量数据时。安全很难。
您需要评估所需的安全级别,这包括攻击者的级别和数据的价值。攻击者 运行 从好奇的学生到民族国家。从 Tic-Tac-Toe 高分到核武器细节的数据值 运行。你需要先确定这些。
如果我理解正确的话:NSUserDefaults 是一个不安全的地方来存储敏感数据,因为一些设置文件可以被黑客攻击并且 NSUserDefault 值可以被更改。
到底什么东西可以被黑,什么东西不能被黑?黑客可以看到我的应用程序的 Swift 代码,还是他们只能看到存储在 NSUserDefaults 中的变量和值列表?
我可以在我的代码中创建我自己的 "encryption"(其中 NSUserDefault 值看起来像一堆无意义的数字,而 "key" 在我的代码中有一些复杂的数学运算要做) ?这样安全吗?
注意:我不打算加密任何重要的东西,比如用户名或密码,只是加密 levels/upgrades 是否解锁的高分和布尔值。如果我的手动解决方案是安全的,我不想学习 KeychainsWrappers。
附带问题(虽然我还没有走到这一步):如何处理应用内购买?是否有一个 Bool 值表示某个项目是否已付款,以及 Bool 存储在哪里(由您决定)?
NSUserDefaults 只是存储在设备文件系统中的一个 plist。它唯一的 'security' 是人们必须进入设备文件系统才能访问它,这并不是特别困难。
根据有关应用内购买的苹果文档:
After making the product available, your app needs to make a persistent record of the purchase.
您可以在有关保存购买的部分中阅读更多信息,但请忽略其中说明您可以使用用户默认设置来执行此操作的部分。
此外,如果您不知道自己在做什么,我永远不会建议您使用自己的安全存储系统。
以上假设您谈论的是应用内购买。如果您谈论的是用户本地的东西,那么他们破解您的应用程序真的很重要吗?假设您有一个系统,您必须打败上一关才能解锁下一关。谁真正关心是否有人编辑他们的默认设置以解锁下一个级别。这不是他们必须支付的费用,因此不会影响您的收入来源。事实上,我认为最好允许真正想作弊的人这样做,只要不影响您的收入或其他玩家。
What exactly can be hacked and not hacked?
你能做的大部分事情都可以被黑客入侵。
Can the Hacker see my app's Swift Code, do they only see the list of variables
老练的黑客可以看到可执行二进制文件,但看不到 Swift 源代码。
values stored in NSUserDefaults?
看NSUserDefaults的内容是微不足道的。请参阅 iExplorer 和其他类似应用。
Could I create my own "encryption" in my code
当然可以,但是你应该吗?
"Schneier's Law": "Anyone, from the most clueless amateur to the best cryptographer, can create an algorithm that he himself can't break."
Is this safe?
不,这不安全。如果你想使用加密,你需要一个标准的加密算法,比如 AES,但是创建一个安全的方案并不那么容易。您可以使用包装器库,例如 RNCryptor。但这会产生一个新问题:将加密密钥安全地保存在何处,请参阅下一点。
I don't want to have to learn KeychainsWrappers if my manual solution is safe.
仅当您想安全地保存密钥和少量数据时。安全很难。
您需要评估所需的安全级别,这包括攻击者的级别和数据的价值。攻击者 运行 从好奇的学生到民族国家。从 Tic-Tac-Toe 高分到核武器细节的数据值 运行。你需要先确定这些。