iOS设置架构安全文本字段是否使用密钥链,即安全存储

时间:2014-04-26 20:55:29

标签: ios security

我的应用程序需要有一个非常安全的故事,虽然我想使用我的应用程序设置的标准iOS设置,但我无法在任何地方找到"安全文本字段"我会用密码使用密钥链吗?

1 个答案:

答案 0 :(得分:1)

“设置”包中的所有内容都存储在NSUserDefaults中。但问题是为什么一些着名的应用程序(例如Facebook)提供用户在用户默认设置中更改密码?我的想法是如何运作的。

  1. 您在“设置”应用中看到的密码是安全文本字段,用户无法阅读或编辑!他只能进入一个新的!
  2. 您可以执行以下算法: 2.1当用户在“设置应用”中键入密码时,您将收到有关该密码的通知。 2.2您将获得此新密码(如果需要,请进行检查)并将其保存在安全存储中,即密钥链或NSURLCredentials中。 2.3您从NSUserDefaults删除此密码。实际上你用含有相同字符数的虚拟文本替换它。然后,用户无法检测它是否是他的密码或虚拟字符,因为它们是安全的。
  3. 您订阅了有关NSUserDefaults的通知:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil];
    

    你实现了defaultsChanged :(那是我在飞行中写的......没有经过测试)

    - (void)defaultsChanged:(NSNotification *)notification {
      // Get the user defaults
      NSUserDefaults *defaults = (NSUserDefaults *)[notification object];
      NSString *newPassword = [defaults objectForKey:@"YourPasswordKey"];
    
      // (Check new password if necessary) save it securely
      // Or store it securely and use it for authentication only when the User returns to your app again.
    
      NSString *dummyText = //The string the same length as newPassword containing e.g. only * character
    
      [defaults setObject:dummyText forKey:@"YourPasswordKey"];
    }
    

    摘要:您允许用户通过设置套件在“设置”应用中输入密码。但是你安全地存储密码。这些敏感信息只有很短的时间才会出现在用户默认值中。用户不知道在设置中是否知道他的密码。

    注意:如果您的应用未启动,则可能会在启动之前收到通知。在这种情况下,您可以阅读NSUserDefualts以获取新密码值并在应用程序启动时替换。无论如何,由于用户可能会在更改密码后不久启动您的应用程序,因此也很长一段时间。

    的问候。