Sobes.tech
Junior — Middle

Como garante a segurança ao armazenar informações confidenciais?

sobes.tech IA

Resposta da IA

Para garantir a segurança ao armazenar informações confidenciais no iOS, geralmente utiliza-se o Keychain, um armazenamento protegido fornecido pelo sistema. O Keychain cifra os dados e limita o acesso a eles, prevenindo acessos não autorizados.

Além disso, é importante:

  • Não armazenar senhas e segredos em texto aberto no UserDefaults ou em ficheiros.
  • Utilizar encriptação quando necessário armazenar dados fora do Keychain.
  • Restringir o acesso aos dados através das configurações de acesso do Keychain (por exemplo, acesso apenas quando o dispositivo está desbloqueado).

Exemplo de gravação e leitura de uma string no Keychain usando 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) // Remove entrada antiga
    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
}