Swift Academy · Lección

Protección de datos y cifrado

Proteja archivos y aprenda los conceptos básicos de CryptoKit.

Lección 4 de 413 pasos

Protección de datos y cifrado es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Data Protection en iOS

iOS cifra los archivos almacenados en disco de forma predeterminada, pero puede elegir cuándo se puede descifrar el contenido de un archivo mediante las clases de Data Protection. Estas vinculan el acceso a los archivos con el estado de bloqueo del dispositivo, de forma muy parecida a como las clases de accesibilidad de Keychain lo hacen con los secretos.

import Foundation
// File-level protection ties decryption to lock state.
// Set a protection class when writing sensitive files.

Las clases de protección

Los principales niveles de protección de archivos son .complete (ilegible mientras está bloqueado), .completeUnlessOpen (sigue siendo legible si ya estaba abierto al bloquearse), .completeUntilFirstUserAuthentication (legible después del primer desbloqueo) y .none.

import Foundation
// FileProtectionType:
//   .complete
//   .completeUnlessOpen
//   .completeUntilFirstUserAuthentication (default)
//   .none
let level = FileProtectionType.complete
_ = level

Escribir un archivo protegido

Incluya .completeFileProtection en las opciones de escritura para marcar un archivo como completamente protegido. Mientras el dispositivo está bloqueado, el sistema impide el acceso a su contenido incluso a su propia app.

import Foundation
func writeSecure(_ data: Data, to url: URL) throws {
    try data.write(
        to: url,
        options: [.completeFileProtection])
}

Establecer la protección de archivos existentes

Puede cambiar la protección de un archivo después de crearlo estableciendo el atributo FileAttributeKey.protectionKey mediante FileManager. Resulta útil para reforzar la protección de archivos que recibe o migra.

import Foundation
func protect(_ url: URL) throws {
    try FileManager.default.setAttributes(
        [.protectionKey: FileProtectionType.complete],
        ofItemAtPath: url.path)
}

CryptoKit para el cifrado en la app

Cuando necesite cifrar los datos por su cuenta —antes de subirlos o para añadir una capa sobre la protección del disco—, use CryptoKit. Proporciona primitivas modernas resistentes al uso incorrecto, con valores predeterminados seguros y sin tener que gestionar manualmente los IV de los cifradores AEAD.

import CryptoKit
// CryptoKit offers hashing, symmetric & public-key
// crypto with safe, hard-to-misuse APIs.

Aplicar hash con SHA-256

Para comprobaciones de integridad y huellas digitales, SHA256 produce un resumen de tamaño fijo. Recuerde que aplicar un hash es una operación unidireccional y no sustituye al cifrado: nunca aplique un hash a una contraseña sin una sal ni una KDF lenta.

import CryptoKit
import Foundation
func fingerprint(_ data: Data) -> String {
    let digest = SHA256.hash(data: data)
    return digest.map { String(format: "%02x", $0) }
        .joined()
}

Claves simétricas

El cifrado simétrico utiliza una única clave compartida. SymmetricKey(size: .bits256) genera una clave aleatoria segura. Almacene la clave en Keychain, nunca junto al texto cifrado que protege.

import CryptoKit
let key = SymmetricKey(size: .bits256)
// Persist this key in the Keychain, not in a file.
_ = key

Cifrar con AES-GCM

AES.GCM proporciona cifrado autenticado: cifra los datos y también detecta su manipulación. seal devuelve una caja sellada que contiene el texto cifrado, el nonce y la etiqueta de autenticación en un mismo conjunto.

import CryptoKit
import Foundation
func encrypt(_ data: Data, key: SymmetricKey)
    throws -> Data {
    let sealed = try AES.GCM.seal(data, using: key)
    return sealed.combined! // nonce + ciphertext + tag
}

Descifrar y verificar

Para descifrar, reconstruya un SealedBox a partir de los datos combinados y llame a open. Si se ha modificado el texto cifrado o la etiqueta, open lanza un error; la etiqueta de autenticación garantiza la integridad, por lo que los datos dañados nunca se descifran silenciosamente.

import CryptoKit
import Foundation
func decrypt(_ combined: Data, key: SymmetricKey)
    throws -> Data {
    let box = try AES.GCM.SealedBox(combined: combined)
    return try AES.GCM.open(box, using: key)
}

Derivar claves a partir de contraseñas

Nunca use una contraseña sin procesar como clave. Derive una mediante HKDF —para entradas con alta entropía— o una KDF basada en contraseñas. El HKDF de CryptoKit amplía y añade sal al material de clave para convertirlo en una clave simétrica adecuada.

import CryptoKit
import Foundation
func deriveKey(from secret: Data, salt: Data)
    -> SymmetricKey {
    return HKDF<SHA256>.deriveKey(
        inputKeyMaterial: SymmetricKey(data: secret),
        salt: salt,
        outputByteCount: 32)
}

Combinar capas de defensa

Las apps sólidas combinan varias capas: Data Protection cifra los archivos almacenados y los vincula al estado de bloqueo; Keychain protege las claves mediante datos biométricos; y CryptoKit añade cifrado a nivel de la app para los datos en tránsito o en la nube. Cada capa falla de forma segura por sí sola.

import CryptoKit
import Foundation
// 1. Key lives in Keychain (biometric-gated)
// 2. Plaintext file written with .completeFileProtection
// 3. Uploads encrypted with AES.GCM before leaving device
let layers = "defense in depth"
_ = layers

Comprobación rápida

Recuerde por qué se prefiere AES-GCM para el cifrado a nivel de la app.

Resumen

Ha aprendido sobre la protección de datos y el cifrado:

  • Las clases de Data Protection para archivos (.complete, .completeUntilFirstUserAuthentication) vinculan el descifrado del disco al estado de bloqueo.
  • CryptoKit proporciona hashing SHA-256, generación de SymmetricKey y cifrado autenticado AES-GCM mediante seal/open.
  • Derive las claves con HKDF; almacénelas en el Keychain, nunca junto al texto cifrado.
  • Combine Data Protection, Keychain y CryptoKit para aplicar una defensa en profundidad.
Gratis para empezar

Aprende Swift con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
122
Lecciones
409

Preguntas frecuentes

¿La lección «Protección de datos y cifrado» es gratis?

Sí — el texto completo de «Protección de datos y cifrado» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Protección de datos y cifrado»?

Proteja archivos y aprenda los conceptos básicos de CryptoKit. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Protección de datos y cifrado»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Almacenar secretos en Keychain
  2. Control de acceso a Keychain
  3. Autenticación biométrica
  4. Protección de datos y cifrado
← Volver a Swift Academy