Swift Academy · Pelajaran

Perlindungan dan Penyulitan Data

Lindungi fail dan pelajari asas CryptoKit.

Pelajaran 4 daripada 413 langkah

Perlindungan dan Penyulitan Data ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Perlindungan Data pada iOS

iOS menyulitkan fail pada cakera secara lalai, tetapi anda boleh memilih bila kandungan fail boleh dinyahsulit menggunakan kelas Perlindungan Data. Kelas ini mengaitkan akses fail dengan keadaan kunci peranti, sama seperti kelas kebolehcapaian Rantai Kunci mengaitkannya dengan rahsia.

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

Kelas Perlindungan

Tahap perlindungan fail utama ialah .complete (tidak boleh dibaca ketika dikunci), .completeUnlessOpen (kekal boleh dibaca jika telah dibuka ketika dikunci), .completeUntilFirstUserAuthentication (boleh dibaca selepas buka kunci pertama) dan .none.

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

Menulis Fail yang Dilindungi

Hantar .completeFileProtection dalam pilihan penulisan untuk menandakan fail sebagai dilindungi sepenuhnya. Ketika peranti dikunci, OS menjadikan kandungannya tidak boleh diakses walaupun oleh aplikasi anda sendiri.

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

Menetapkan Perlindungan pada Fail Sedia Ada

Anda boleh menukar perlindungan fail selepas penciptaannya dengan menetapkan atribut FileAttributeKey.protectionKey melalui FileManager. Ini berguna untuk mengetatkan perlindungan pada fail yang anda terima atau pindahkan.

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

CryptoKit untuk Penyulitan Dalam Aplikasi

Apabila anda perlu menyulitkan data sendiri — sebelum memuat naiknya atau untuk menambah lapisan di atas perlindungan cakera — gunakan CryptoKit. Ia menyediakan primitif moden yang tahan terhadap penyalahgunaan, dengan lalai yang selamat dan tanpa perlu mengurus vektor permulaan secara manual untuk sifir AEAD.

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

Pencincangan dengan SHA-256

Untuk semakan integriti dan cap jari, SHA256 menghasilkan nilai cincang yang panjangnya tetap. Ingat bahawa pencincangan ialah operasi sehala dan bukan pengganti penyulitan — jangan sekali-kali cincang kata laluan tanpa garam kriptografi dan KDF yang perlahan.

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

Kunci Simetri

Penyulitan simetri menggunakan satu kunci yang dikongsi. SymmetricKey(size: .bits256) menjana kunci rawak yang kukuh. Simpan kunci itu dalam Rantai Kunci — jangan sekali-kali menyimpannya bersama teks sifir yang dilindunginya.

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

Menyulitkan dengan AES-GCM

AES.GCM ialah penyulitan berautentikasi: ia menyulitkan data dan mengesan pengubahan. seal mengembalikan kotak termeterai yang mengandungi teks sifir, nilai sekali guna dan teg pengesahan yang digabungkan.

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
}

Menyahsulit dan Mengesahkan

Untuk menyahsulit, bina semula SealedBox daripada data gabungan dan panggil open. Jika teks sifir atau teg telah diubah, open akan melontarkan ralat — teg pengesahan menjamin integriti, jadi data yang rosak tidak pernah dinyahsulit secara senyap.

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

Menerbitkan Kunci daripada Kata Laluan

Jangan sekali-kali menggunakan kata laluan mentah sebagai kunci. Terbitkan kunci dengan HKDF untuk input berentropi tinggi atau dengan KDF berasaskan kata laluan. HKDF mengembangkan bahan kunci dan menambah garam untuk menghasilkan kunci simetri yang betul.

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 kukuh menggabungkan beberapa lapisan: Perlindungan Data menyulitkan fail ketika tersimpan dan mengikatnya pada keadaan kunci, Rantai Kunci melindungi kunci di sebalik biometrik, dan CryptoKit menambah penyulitan pada peringkat aplikasi untuk data semasa penghantaran atau dalam awan. Setiap lapisan gagal secara selamat dengan sendirinya.

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

Semakan Pantas

Ingat semula sebab AES-GCM lebih sesuai untuk penyulitan pada peringkat aplikasi.

Ringkasan

Anda telah mempelajari perlindungan data dan penyulitan:

  • Kelas Perlindungan Data fail (.complete, .completeUntilFirstUserAuthentication) mengaitkan penyahsulitan cakera dengan keadaan kunci.
  • CryptoKit menyediakan pencincangan SHA-256, penjanaan SymmetricKey dan penyulitan disahkan AES-GCM melalui seal/open.
  • Terbitkan kunci dengan HKDF; simpan kunci dalam Rantai Kunci, jangan sekali-kali di sebelah teks sifir.
  • Gabungkan Perlindungan Data, Rantai Kunci dan CryptoKit untuk pertahanan berlapis.
Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Perlindungan dan Penyulitan Data” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Perlindungan dan Penyulitan Data”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Perlindungan dan Penyulitan Data”?

Lindungi fail dan pelajari asas CryptoKit. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Perlindungan dan Penyulitan Data” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyimpan Rahsia dalam Keychain
  2. Kawalan Akses Keychain
  3. Pengesahan Biometrik
  4. Perlindungan dan Penyulitan Data
← Kembali ke Swift Academy