Ищете правильный подход к сохранению данных с помощью связки ключей и шифрования данных - Swift 5 - PullRequest
0 голосов
/ 26 мая 2019

Мое приложение хранит конфиденциальные данные пользователя, и мне интересно, что является общим / правильным / наиболее безопасным способом защиты данных.

Мой подход теперь заключается в сохранении закодированных данных в связку ключей, более конкретно, но просто:

  1. Я кодирую / декодирую пользовательские типы в массиве с помощью PropertyList
  2. Тогда передайте это Брелку. Я использую обертку под названием KeychainAccess благодаря Kishikawa Katsumi.
  3. Получить данные из цепочки для ключей, а затем декодировать их для отображения в виде таблицы.

Ниже приведены мои биты кода:

extension UserInformation {

    static let propertyListEncoder = PropertyListEncoder()
    static let propertyListDecoder = PropertyListDecoder()
    static let keychain = Keychain(service: "com.xxxxx.DataSaving-App")

    static func saveToKeychain(userInfo: [UserInformation]) {
        let data = try? propertyListEncoder.encode(userInfo)
        if let savingData = data {
            dump(userInfo)
            keychain[data: "encodedUserInfo"] = NSData(data: savingData) as Data
        }
    }

    static func loadFromKeychain() -> [UserInformation]? {
        guard let retrievedData = keychain[data: "encodedUserInfo"] else {
            return nil }
        let data = try? propertyListDecoder.decode(Array<UserInformation>.self, from: retrievedData)
        return data
    }

}

Выше работает нормально и проблем пока не обнаружено. Тем не менее, я не уверен, что использовать PropertyListEncoder является правильным способом кодирования / декодирования. Пожалуйста, смотрите ниже указанные вопросы, и дайте мне совет, будьте очень благодарны.

  1. Будет ли вышеуказанный подход достаточно безопасным?
  2. Является ли PropertyListEncoder / Decoder просто выполняет КОДИРОВАНИЕ / ДЕКОДИРОВАНИЕ, НЕ СОХРАНЯЯ ДАННЫЕ ДЛЯ ЛЮБОГО, как plist или любое хранилище, где уязвимы?
  3. Если требуется какая-либо другая мера, имеет ли смысл шифровать данные с помощью Common Swift и передавать их в связку ключей?

Я потратил несколько недель, чтобы найти детальное решение, но пока не повезло. Пожалуйста, помогите новому разработчику.

1 Ответ

0 голосов
/ 26 мая 2019

Кодировка списка свойств не является шифрованием.Это простой текст (возможно, в двоичном формате);это просто форма сериализации.«Шифрование» в вашем примере состоит в том, что информация скрыта в цепочке для ключей.А брелок обычно считается достаточно безопасным.

...