Sobes.tech
Junior — Middle

Comment garantissez-vous la sécurité lors du stockage d'informations confidentielles?

sobes.tech IA

Réponse de l'IA

Pour assurer la sécurité lors du stockage d'informations confidentielles sur iOS, on utilise généralement le Keychain, un stockage sécurisé fourni par le système. Le Keychain chiffre les données et limite l'accès à celles-ci, empêchant ainsi tout accès non autorisé.

De plus, il est important de :

  • Ne pas stocker les mots de passe et secrets en clair dans UserDefaults ou des fichiers.
  • Utiliser le chiffrement si nécessaire pour stocker des données en dehors du Keychain.
  • Restreindre l'accès aux données via les paramètres d'accès du Keychain (par exemple, accès uniquement lorsque l'appareil est déverrouillé).

Exemple d'enregistrement et de lecture d'une chaîne dans le Keychain avec Swift :

import Security

func saveToKeychain(value: String, forKey key: String) {
    let data = value.data(using: .utf8)!
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key,
        kSecValueData as String: data
    ]
    SecItemDelete(query as CFDictionary) // Supprime l'ancienne entrée
    SecItemAdd(query as CFDictionary, nil)
}

func loadFromKeychain(key: String) -> String? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key,
        kSecReturnData as String: true,
        kSecMatchLimit as String: kSecMatchLimitOne
    ]
    var dataTypeRef: AnyObject? = nil
    let status = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)
    if status == errSecSuccess, let data = dataTypeRef as? Data {
        return String(data: data, encoding: .utf8)
    }
    return nil
}