Swift Academy · Lektion

Dataskydd och kryptering

Skydda filer och lär dig grunderna i CryptoKit.

Lektion 4 av 413 steg

Dataskydd och kryptering är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.

Dataskydd i iOS

iOS krypterar som standard filer på lagringsenheten, men du kan välja när filernas innehåll kan dekrypteras med hjälp av klasser för Data Protection. De kopplar filåtkomst till enhetens låstillstånd, ungefär som Keychains tillgänglighetsklasser gör för hemligheter.

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

Skyddsklasserna

De viktigaste skyddsnivåerna för filer är .complete (oläsbar när enheten är låst), .completeUnlessOpen (förblir läsbar om filen redan var öppen när enheten låstes), .completeUntilFirstUserAuthentication (läsbar efter den första upplåsningen) och .none.

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

Skriva en skyddad fil

Ange .completeFileProtection i skrivalternativen för att markera en fil som fullt skyddad. När enheten är låst gör operativsystemet filens innehåll otillgängligt, även för din egen app.

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

Ange skydd för befintliga filer

Du kan ändra en fils skydd efter att den har skapats genom att ange attributet FileAttributeKey.protectionKey via FileManager. Det är praktiskt när du vill förstärka skyddet för filer som du tar emot eller migrerar.

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

CryptoKit för kryptering i appen

När du själv behöver kryptera data – före uppladdning eller för att lägga till ett skyddslager ovanpå diskkrypteringen – använder du CryptoKit. Det tillhandahåller moderna, svåranvända-på-fel-sätt-primitiver med säkra standardvärden och utan manuell hantering av IV-värden för AEAD-chiffer.

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

Hashning med SHA-256

För integritetskontroller och fingeravtryck producerar SHA256 ett digest med fast storlek. Observera att hashning är envägs och inte ersätter kryptering – hasha aldrig ett lösenord utan salt och en långsam KDF.

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

Symmetriska nycklar

Symmetrisk kryptering använder en gemensam nyckel. SymmetricKey(size: .bits256) genererar en stark, slumpmässig nyckel. Lagra nyckeln i Keychain – aldrig tillsammans med den chiffertext som den skyddar.

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

Kryptera med AES-GCM

AES.GCM är autentiserad kryptering: den både krypterar och upptäcker manipulering. seal returnerar en förseglad behållare som innehåller chiffertexten, nonce och autentiseringstaggen samlade.

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
}

Dekryptera och verifiera

För att dekryptera återskapar du en SealedBox från de kombinerade data och anropar open. Om chiffertexten eller taggen har ändrats kastar open ett fel – autentiseringstaggen garanterar integriteten, så skadade data dekrypteras aldrig obemärkt.

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)
}

Härleda nycklar från lösenord

Använd aldrig ett rått lösenord som nyckel. Härled en nyckel med HKDF (för indata med hög entropi) eller en lösenordsbaserad KDF. CryptoKits HKDF bearbetar och saltar nyckelmaterial till en korrekt symmetrisk nyckel.

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

Lägga flera skyddslager

Säkra appar kombinerar flera lager: Data Protection krypterar filer i vila och kopplar skyddet till låstillståndet, Keychain skyddar nycklar bakom biometrisk autentisering och CryptoKit lägger till kryptering på appnivå för data under överföring eller i molnet. Varje lager har ett säkert felbeteende på egen hand.

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

Snabb kontroll

Kom ihåg varför AES-GCM föredras för kryptering på appnivå.

Sammanfattning

Du har lärt dig om dataskydd och kryptering:

  • Klasserna för filens Data Protection (.complete, .completeUntilFirstUserAuthentication) kopplar dekryptering av disken till låstillståndet.
  • CryptoKit tillhandahåller hashning med SHA-256, generering av SymmetricKey och autentiserad AES-GCM-kryptering via seal/open.
  • Härled nycklar med HKDF och lagra nycklarna i Keychain, aldrig bredvid chiffertexten.
  • Använd Data Protection, Keychain och CryptoKit i flera lager för ett djupgående försvar.
Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”Dataskydd och kryptering” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Dataskydd och kryptering”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Dataskydd och kryptering”?

Skydda filer och lär dig grunderna i CryptoKit. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Dataskydd och kryptering”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Lagra hemligheter i Keychain
  2. Åtkomstkontroll för Keychain
  3. Biometrisk autentisering
  4. Dataskydd och kryptering
← Tillbaka till Swift Academy