Gegevensbescherming en versleuteling
Bescherm bestanden en leer de basis van CryptoKit.
Gegevensbescherming en versleuteling is een gratis Swift Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.
Data Protection op iOS
iOS versleutelt bestanden standaard op schijf, maar je kunt met Data Protection-klassen kiezen wanneer de inhoud van een bestand ontsleuteld kan worden. Deze koppelen toegang tot bestanden aan de vergrendelingsstatus van het apparaat, net zoals toegankelijkheidsklassen van de Keychain dat voor geheimen doen.
import Foundation
// File-level protection ties decryption to lock state.
// Set a protection class when writing sensitive files.De beveiligingsklassen
De belangrijkste beveiligingsniveaus voor bestanden zijn .complete (onleesbaar terwijl het apparaat vergrendeld is), .completeUnlessOpen (blijft leesbaar als het al open was toen het apparaat werd vergrendeld), .completeUntilFirstUserAuthentication (leesbaar na de eerste ontgrendeling) en .none.
import Foundation
// FileProtectionType:
// .complete
// .completeUnlessOpen
// .completeUntilFirstUserAuthentication (default)
// .none
let level = FileProtectionType.complete
_ = levelEen beveiligd bestand schrijven
Geef .completeFileProtection door in de schrijfopties om een bestand als volledig beveiligd te markeren. Terwijl het apparaat vergrendeld is, maakt het besturingssysteem de inhoud ontoegankelijk, zelfs voor je eigen app.
import Foundation
func writeSecure(_ data: Data, to url: URL) throws {
try data.write(
to: url,
options: [.completeFileProtection])
}Beveiliging van bestaande bestanden instellen
Je kunt de beveiliging van een bestand na het aanmaken wijzigen door het attribuut FileAttributeKey.protectionKey in te stellen via FileManager. Dit is handig om de beveiliging aan te scherpen van bestanden die je ontvangt of overzet.
import Foundation
func protect(_ url: URL) throws {
try FileManager.default.setAttributes(
[.protectionKey: FileProtectionType.complete],
ofItemAtPath: url.path)
}CryptoKit voor versleuteling in de app
Wanneer je gegevens zelf moet versleutelen — vóór het uploaden of om een extra laag bovenop schijfbeveiliging toe te voegen — gebruik je CryptoKit. Het biedt moderne cryptografische bouwstenen die misbruik tegengaan, met veilige standaardinstellingen en zonder handmatig met IV's te hoeven schuiven voor AEAD-versleuteling.
import CryptoKit
// CryptoKit offers hashing, symmetric & public-key
// crypto with safe, hard-to-misuse APIs.Hashen met SHA-256
Voor integriteitscontroles en vingerafdrukken produceert SHA256 een hashwaarde met vaste lengte. Let op: hashen is een eenrichtingsbewerking en geen vervanging voor versleuteling — hash een wachtwoord nooit zonder salt en een trage KDF.
import CryptoKit
import Foundation
func fingerprint(_ data: Data) -> String {
let digest = SHA256.hash(data: data)
return digest.map { String(format: "%02x", $0) }
.joined()
}Symmetrische sleutels
Symmetrische versleuteling gebruikt één gedeelde sleutel. SymmetricKey(size: .bits256) genereert een sterke willekeurige sleutel. Bewaar de sleutel in de Keychain — nooit naast de versleutelde gegevens die ermee worden beschermd.
import CryptoKit
let key = SymmetricKey(size: .bits256)
// Persist this key in the Keychain, not in a file.
_ = keyVersleutelen met AES-GCM
AES.GCM is geauthenticeerde versleuteling: het versleutelt gegevens en detecteert ook manipulatie. seal geeft een verzegelde container terug met de versleutelde gegevens, nonce en authenticatietag samengevoegd.
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
}Ontsleutelen en verifiëren
Om te ontsleutelen reconstrueer je een SealedBox uit de gecombineerde gegevens en roep je open aan. Als de versleutelde gegevens of tag is gewijzigd, genereert open een fout — de authenticatietag garandeert de integriteit, dus beschadigde gegevens worden nooit stilzwijgend ontsleuteld.
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)
}Sleutels afleiden uit wachtwoorden
Gebruik nooit een onbewerkt wachtwoord als sleutel. Leid er een af met HKDF (voor invoer met hoge entropie) of een op wachtwoorden gebaseerde KDF. De HKDF van CryptoKit rekt sleutelmateriaal uit en voorziet het van salt om er een geschikte symmetrische sleutel van te maken.
import CryptoKit
import Foundation
func deriveKey(from secret: Data, salt: Data)
-> SymmetricKey {
return HKDF<SHA256>.deriveKey(
inputKeyMaterial: SymmetricKey(data: secret),
salt: salt,
outputByteCount: 32)
}Beveiligingslagen combineren
Sterke apps combineren lagen: Data Protection versleutelt opgeslagen bestanden en koppelt dat aan de vergrendelingsstatus, de Keychain beveiligt sleutels met biometrie en CryptoKit voegt versleuteling op appniveau toe voor gegevens tijdens transport of in de cloud. Elke laag faalt zelfstandig op een veilige manier.
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"
_ = layersKorte controle
Haal je weer voor de geest waarom AES-GCM de voorkeur heeft voor versleuteling op app-niveau.
Samenvatting
Je hebt geleerd hoe je gegevens beschermt en versleutelt:
- De Data Protection-klassen voor bestanden (
.complete,.completeUntilFirstUserAuthentication) koppelen ontsleuteling van de schijf aan de vergrendelingsstatus. - CryptoKit biedt het maken van SHA-256-hashes, het genereren van
SymmetricKeyen geauthenticeerde AES-GCM-versleuteling viaseal/open. - Leid sleutels af met HKDF; bewaar sleutels in de Keychain, nooit naast de cijfertekst.
- Combineer Data Protection, de Keychain en CryptoKit voor gelaagde beveiliging.
Leer Swift met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 122
- Lessen
- 409
Veelgestelde vragen
Is de les “Gegevensbescherming en versleuteling” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Gegevensbescherming en versleuteling”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.
Wat leer ik in “Gegevensbescherming en versleuteling”?
Bescherm bestanden en leer de basis van CryptoKit. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Swift Academy te beginnen?
Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Gegevensbescherming en versleuteling”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Swift Academy?
Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Geheimen opslaan in de Keychain
- Toegangsbeheer voor de Keychain
- Biometrische authenticatie
- Gegevensbescherming en versleuteling