0Pricing
Swift Academy · Pelajaran

Pengendalian Akses Keychain

Lindungi item dengan biometrik dan pembukaan kunci perangkat.

Pengendalian Akses Keychain adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Mengendalikan Kapan Rahasia Dapat Dibaca

Menyimpan rahasia hanyalah separuh pekerjaan — Anda harus mengendalikan kapan rahasia itu dapat dibaca. Rantai Kunci menyediakan kelas aksesibilitas dan flags kontrol akses yang membatasi entri berdasarkan pembukaan kunci perangkat, kode sandi, atau biometrik. Ini melindungi data jika perangkat hilang.

import Security
// Two layers of control:
//   kSecAttrAccessible  -> when readable (lock state)
//   SecAccessControl    -> user presence / biometrics

Kunci kSecAttrAccessible

kSecAttrAccessible menetapkan kelas aksesibilitas saat penambahan. Kunci ini menentukan apakah entri selalu tersedia, hanya tersedia setelah pembukaan kunci pertama, atau hanya tersedia saat perangkat tidak terkunci. Pilih tingkat paling ketat yang diizinkan oleh fitur Anda.

import Security
let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrAccount as String: "user",
    kSecValueData as String: Data("secret".utf8),
    kSecAttrAccessible as String:
        kSecAttrAccessibleWhenUnlocked
]
_ = query

WhenUnlocked

kSecAttrAccessibleWhenUnlocked membuat entri hanya dapat dibaca saat perangkat tidak terkunci. Tugas latar belakang yang berjalan saat perangkat terkunci tidak dapat mengaksesnya. Ini adalah bawaan yang masuk akal untuk sebagian besar kredensial sesi.

import Security
// Readable only while unlocked; blocked when locked.
let level = kSecAttrAccessibleWhenUnlocked
_ = level

AfterFirstUnlock

kSecAttrAccessibleAfterFirstUnlock membuat entri tetap dapat dibaca sejak pembukaan kunci pertama setelah perangkat dinyalakan hingga perangkat dimulai ulang — bahkan saat perangkat kembali terkunci. Gunakan ini untuk rahasia yang diperlukan proses latar belakang, seperti kredensial untuk menangani notifikasi.

import Security
// Available after the first unlock post-boot,
// including while subsequently locked.
let level = kSecAttrAccessibleAfterFirstUnlock
_ = level

Varian ThisDeviceOnly

Setiap kelas aksesibilitas memiliki bentuk ...ThisDeviceOnly. Entri ini tidak disertakan dalam cadangan terenkripsi dan tidak pernah dipindahkan ke perangkat baru. Gunakan bentuk ini untuk kunci yang tidak boleh meninggalkan perangkat keras ini.

import Security
// Never backed up, never migrated:
let local = kSecAttrAccessibleWhenUnlockedThisDeviceOnly
_ = local

Saat Kode Sandi Ditetapkan

kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly hanya menyimpan entri jika pengguna memiliki kode sandi, dan menghapusnya jika kode sandi tersebut dihapus. Ini menjamin rahasia selalu dilindungi oleh kode sandi.

import Security
let level =
    kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
// Item vanishes if the user disables their passcode.
_ = level

SecAccessControl untuk Kehadiran Pengguna

Selain status kunci, SecAccessControlCreateWithFlags membuat kebijakan yang mengharuskan autentikasi pengguna secara aktif — biometrik atau kode sandi — saat pembacaan. Anda memasangnya melalui kSecAttrAccessControl, sebagai pengganti atau bersama kunci aksesibilitas.

import Security
func makeControl() -> SecAccessControl? {
    return SecAccessControlCreateWithFlags(
        nil,
        kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
        .userPresence,
        nil)
}

Flags Kontrol Akses

Flags memperjelas persyaratan: .userPresence mengizinkan biometrik atau fallback kode sandi; .biometryCurrentSet menjadikan entri tidak valid jika sidik jari atau wajah yang terdaftar berubah; .devicePasscode memaksa pengguna memasukkan kode sandi. Gabungkan flags tersebut untuk menyatakan kebutuhan keamanan Anda.

import Security
// .userPresence        -> biometric OR passcode
// .biometryAny         -> any enrolled biometric
// .biometryCurrentSet  -> invalidate on biometric change
// .devicePasscode      -> passcode only
let flags: SecAccessControlCreateFlags = [.userPresence]
_ = flags

Menambahkan Entri yang Dilindungi

Untuk menyimpan rahasia yang dibatasi oleh biometrik, letakkan objek SecAccessControl di bawah kSecAttrAccessControl. Setiap pembacaan berikutnya akan meminta pengguna melakukan autentikasi sebelum data dikembalikan.

import Security
func saveProtected(_ data: Data, account: String,
                   control: SecAccessControl) -> Bool {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: account,
        kSecValueData as String: data,
        kSecAttrAccessControl as String: control]
    return SecItemAdd(query as CFDictionary, nil)
        == errSecSuccess
}

Pembacaan Meminta Pengguna

Membaca entri yang dilindungi secara otomatis memicu antarmuka autentikasi. Anda dapat memberikan string alasan melalui kSecUseOperationPrompt agar permintaan tersebut menjelaskan alasan akses diperlukan. Operasi pembacaan tertahan hingga pengguna melakukan autentikasi atau membatalkannya.

import Security
func readProtected(account: String) -> Data? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: account,
        kSecReturnData as String: true,
        kSecUseOperationPrompt as String:
            String(localized: "Unlock your saved key")]
    var out: CFTypeRef?
    return SecItemCopyMatching(query as CFDictionary,
        &out) == errSecSuccess ? out as? Data : nil
}

Memilih Tingkat yang Tepat

Sesuaikan kebijakan dengan risikonya:

  • Kredensial sesi yang digunakan di latar belakang: AfterFirstUnlock.
  • Kredensial yang hanya digunakan antarmuka pengguna: WhenUnlocked.
  • Rahasia bernilai tinggi: SecAccessControl dengan .userPresence dan kelas ThisDeviceOnly.

Tingkat yang lebih ketat lebih aman, tetapi menghalangi akses latar belakang — seimbangkan keduanya.

import Security
// High-value: biometric-gated, device-bound, no backup
let control = SecAccessControlCreateWithFlags(
    nil,
    kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
    .userPresence, nil)
_ = control

Pemeriksaan Singkat

Ingat kembali kelas aksesibilitas yang sesuai untuk rahasia yang diperlukan di latar belakang.

Rangkuman

Anda mempelajari cara membatasi akses ke entri Rantai Kunci:

  • kSecAttrAccessible menetapkan ketersediaan berdasarkan status kunci: WhenUnlocked, AfterFirstUnlock, dan varian ...ThisDeviceOnly yang melewati pencadangan.
  • WhenPasscodeSetThisDeviceOnly mengaitkan entri dengan keberadaan kode sandi.
  • SecAccessControl dengan flags seperti .userPresence atau .biometryCurrentSet mengharuskan autentikasi saat pembacaan.
  • Pilih tingkat paling ketat yang tetap mengizinkan pola akses Anda.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengendalian Akses Keychain” gratis?

Ya — teks lengkap “Pengendalian Akses Keychain” 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 “Pengendalian Akses Keychain”?

Lindungi item dengan biometrik dan pembukaan kunci perangkat. 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 2 dari 4.

Berapa lama pelajaran “Pengendalian Akses Keychain” 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