Swift Academy · Pelajaran

Perlindungan Data dan Enkripsi

Lindungi file dan pelajari dasar-dasar CryptoKit.

Pelajaran 4 dari 413 langkah

Perlindungan Data dan Enkripsi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Perlindungan Data di iOS

iOS mengenkripsi berkas di penyimpanan secara bawaan, tetapi Anda dapat memilih kapan isi berkas dapat didekripsi menggunakan kelas Perlindungan Data. Kelas-kelas ini mengaitkan akses berkas dengan status penguncian perangkat, seperti halnya kelas aksesibilitas Rantai Kunci untuk rahasia.

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

Kelas Perlindungan

Tingkat perlindungan berkas utama adalah .complete (tidak dapat dibaca saat terkunci), .completeUnlessOpen (tetap dapat dibaca jika sudah terbuka saat perangkat dikunci), .completeUntilFirstUserAuthentication (dapat dibaca setelah pembukaan kunci pertama), dan .none.

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

Menulis Berkas yang Dilindungi

Berikan .completeFileProtection dalam opsi penulisan untuk menandai berkas sebagai terlindungi sepenuhnya. Saat perangkat terkunci, OS membuat isinya tidak dapat diakses bahkan oleh aplikasi Anda sendiri.

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

Mengatur Perlindungan pada Berkas yang Ada

Anda dapat mengubah perlindungan berkas setelah dibuat dengan menetapkan atribut FileAttributeKey.protectionKey melalui FileManager. Ini berguna untuk memperketat perlindungan pada berkas yang Anda terima atau pindahkan.

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

CryptoKit untuk Enkripsi Dalam Aplikasi

Saat Anda perlu mengenkripsi data sendiri — sebelum mengunggahnya atau untuk menambahkan lapisan di atas perlindungan penyimpanan — gunakan CryptoKit. CryptoKit menyediakan primitif modern yang tahan terhadap penyalahgunaan, dengan bawaan yang aman dan tanpa perlu mengelola vektor inisialisasi secara manual untuk penyandi AEAD.

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

Pencincangan dengan SHA-256

Untuk pemeriksaan integritas dan sidik jari, SHA256 menghasilkan intisari berukuran tetap. Perhatikan bahwa pencincangan bersifat satu arah dan bukan pengganti enkripsi — jangan pernah mencincang kata sandi tanpa garam dan KDF yang lambat.

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

Kunci Simetris

Enkripsi simetris menggunakan satu kunci bersama. SymmetricKey(size: .bits256) menghasilkan kunci acak yang kuat. Simpan kunci tersebut di Rantai Kunci — jangan pernah menyimpannya bersama teks tersandi yang dilindunginya.

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

Mengenkripsi dengan AES-GCM

AES.GCM adalah enkripsi terautentikasi: selain mengenkripsi, metode ini juga mendeteksi perubahan yang tidak sah. seal mengembalikan kotak tersegel yang berisi teks tersandi, nilai sekali pakai, dan penanda autentikasi dalam satu paket.

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
}

Mendekripsi dan Memverifikasi

Untuk mendekripsi, buat kembali SealedBox dari data gabungan, lalu panggil open. Jika teks tersandi atau penanda diubah, open akan melemparkan galat — penanda autentikasi menjamin integritas, sehingga data yang rusak tidak pernah didekripsi tanpa pemberitahuan.

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

Menurunkan Kunci dari Kata Sandi

Jangan pernah menggunakan kata sandi mentah sebagai kunci. Turunkan kunci dengan HKDF untuk masukan berentropi tinggi atau dengan KDF berbasis kata sandi. HKDF menjalankan peregangan dan penambahan garam pada bahan kunci menjadi kunci simetris yang sesuai.

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

Melapiskan Pertahanan

Aplikasi yang aman menggabungkan beberapa lapisan: Perlindungan Data mengenkripsi berkas saat tersimpan dan mengaitkannya dengan status penguncian, Rantai Kunci menjaga kunci di balik biometrik, dan CryptoKit menambahkan enkripsi tingkat aplikasi untuk data yang sedang dikirim atau berada di awan. Setiap lapisan tetap gagal dengan aman jika berdiri sendiri.

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

Pemeriksaan Singkat

Ingat kembali alasan AES-GCM lebih disukai untuk enkripsi tingkat aplikasi.

Ringkasan

Anda telah mempelajari perlindungan data dan enkripsi:

  • Kelas Perlindungan Data untuk berkas (.complete, .completeUntilFirstUserAuthentication) mengaitkan dekripsi disk dengan status terkunci.
  • CryptoKit menyediakan hashing SHA-256, pembuatan SymmetricKey, serta enkripsi terautentikasi AES-GCM melalui seal/open.
  • Turunkan kunci dengan HKDF; simpan kunci di Rantai Kunci, jangan pernah menyimpannya di sebelah teks tersandi.
  • Gabungkan Perlindungan Data, Rantai Kunci, dan CryptoKit untuk pertahanan berlapis.
Gratis untuk memulai

Belajar Swift dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
122
Pelajaran
409

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Perlindungan Data dan Enkripsi” gratis?

Ya — teks lengkap “Perlindungan Data dan Enkripsi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Perlindungan Data dan Enkripsi”?

Lindungi file dan pelajari dasar-dasar CryptoKit. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Perlindungan Data dan Enkripsi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menyimpan Rahasia di Keychain
  2. Pengendalian Akses Keychain
  3. Autentikasi Biometrik
  4. Perlindungan Data dan Enkripsi
← Kembali ke Swift Academy