钥匙串密码陷阱

3
当将用户密码存储在Keychain中时,有哪些已知的需要避免的陷阱呢?我计划让用户可以通过密码来访问我的iPad应用程序。我已经实现了对Keychain中字符串的基本读写功能。我只是想确保他们不会因为自己的错误而被锁定。例如:
  • 键盘是否允许他们输入无法保存或从Keychain中读取的特殊字符
  • 字符串长度是否有限制
感谢您能提供的任何见解。
2个回答

2
保存密码。读取并确认密码可用。如果不行,告知用户失败并让他们输入不同的密码。
并非所有键盘都能输入所有字符。在3.1.2左右版本中的手机锁定键盘存在一个错误,它会限制您使用“ASCII-capable”键盘(例如不支持希伯来语),但不会限制可以输入的字符;启用某些键盘将添加其他重音符号,有些键盘还有其他符号。然后,您可以禁用某些键盘,锁定手机,完全无法解锁它。(我在测试之前备份了数据。)
在您的情况下,您不会阻止用户使用键盘,因此这个问题不太严重。
请注意,您从错误的方向进行了处理:密码解锁内容。您正在尝试保护内容的安全性。您不需要在任何地方保存密码(您可以仅使用它来加密内容)。
文件也会以(未加密的)备份形式出现。在3.1.2中,您可以备份一个密码锁定的手机(不确定他们是否在3.2中修复了此问题);这意味着在没有备份密码的设备上,您可以将其连接到笔记本电脑并按“备份”按钮窃取所有内容。
自己有效地实现加密超出了此答案的范围。

加密可能需要在您特定的司法管辖区提交CCATS文件,这可能会产生非零的法律费用。这是不使用它来保护那些不需要真正安全的应用程序的一个很好的理由,例如用于游戏角色或高分数的“妹妹”密码锁。 - hotpaw2
我只是不喜欢增加更多“表面安全”而不是实际安全的想法,但我也不建议到处张贴“请注意这并不是100%安全”的标语 - 向用户传达安全级别很困难,他们也很难理解。但是,如果您要存储用户密码,请务必将它们放入钥匙串中 - 用户会重复使用密码。 - tc.
感谢您的回复。只是想澄清一下,我不打算加密内容(例如应用中的文档),而是计划在启动应用程序时捕获应用程序并需要密码才能继续。我要解决的问题是:我正在与其他人分享我的iPad。我不希望他们看到我在这个特定的应用程序中所做的操作。我猜我可以尝试加密特定文件以防止在应用程序启动后被读取,但我认为这可能超出了我的用户需求。 - DenVog
在键盘问题上,我试图通过限制UIKeyboardTypeNumberPad来简化这个问题,但是iPad似乎没有像iPhone那样呈现它(即只有数字和返回键)。仍然可以看到字母和标点符号。 - DenVog
你的帖子给了我另一个想法。也许我根本不应该使用UITextField和键盘。只需显示一个UIPicker视图,用数字作为PIN码。也许这是最安全的选择。 - DenVog
选择器对于窃听者来说要容易得多。不过,您可以过滤接收到的文本,以确保它只包含ASCII字符。 - tc.

0

关于字符串长度:

iOS 钥匙串中可存储的字符串最大长度与字符串的最大可能长度没有区别。然而,人类不太可能生成如此长的字符串,更不用说记住它了。

值得一提的是,将大值存储到钥匙串中会影响性能,因为必须对其进行加密/解密才能写入和读取。

相关帖子:

解码一个巨大的NSString,内存不足

NSString stringWithFormat很慢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接