Table of Contents
Pengertian Infansi Data Enkripsi pada iOS
iOS iOS menerapkan enkripsi di beberapa lapisan untuk melindungi data sensitif. Pada tingkat perangkat keras, Enclave Aman mengelola kunci enkripsi dan operasi kriptografi. Pada tingkat sistem operasi, Data Protection menggunakan enkripsi tingkat berkas yang mengikat kunci dekripsi ke passcode perangkat. Untuk data spesifik aplikasi, pengembang dapat memanfaatkan kerangka kerja seperti Crypto, CommonCrypto, dan kerangka keamanan untuk mengenkripsi catatan individu, berkas, atau payload jaringan.
Enkripsi codefold mengubah teks teks teks teks sandi menggunakan algoritma dan kunci. Tanpa kunci yang benar, data tetap tidak dapat dibaca. iOS Data Protection API secara otomatis mengenkripsi file pada istirahat, tetapi pengembang membutuhkan enkripsi eksplisit untuk data yang disimpan di luar sistem berkas terlindungi ⁇ seperti dalam Core Data, UserDefaults, atau cache gubahan.
Takeaway kunci: Data sensitif enkripsi setiap kali ia berada di perangkat]], bahkan jika enkripsi iOS diaktifkan secara baku. Ini menjamin perlindungan terhadap akses perangkat fisik, ekstraksi forensik, atau aplikasi jahat yang berjalan di kotak pasir yang sama.
iOS Enkripsikan Frameworks dan APIs
Apple menyediakan beberapa perpustakaan kriptografi.
CryptoKit ⁇ API Swift Modern
Keterkenaan oleh istrictan di iOS 13, CryptoKit menawarkan antarmuka Swift-native untuk simetris dan asimetri kriptografi, hashing, dan persetujuan kunci. Ia menggunakan AES-GCM untuk enkripsi terotentikasi, yang melindungi kerahasiaan maupun integritas. Dibawah ini adalah pola enkripsi dan dekripsi khas:
import CryptoKit
func encryptSensitiveData(_ plaintext: String, using key: SymmetricKey) throws -> Data {
let inputData = Data(plaintext.utf8)
let sealedBox = try AES.GCM.seal(inputData, using: key)
return sealedBox.combined
}
func decryptSensitiveData(_ encryptedData: Data, using key: SymmetricKey) throws -> String {
let sealedBox = try AES.GCM.SealedBox(combined: encryptedData)
let decryptedData = try AES.GCM.open(sealedBox, using: key)
return String(decoding: decryptedData, as: UTF8.self)
}
Others stor dalam Keychain, bukan dalam UserDefaults atau berkas biasa. Gunakan dengan untuk mengikat kunci ke perangkat dan kehadiran pengguna.
CommonCrypto ⁇ Fleksibilitas Berasaskan C
Untuk aplikasi-aplikasi yang mendukung versi iOS yang lebih tua atau memerlukan mode cipher blok custom (mis., CBC dengan HMAC), CommonCrypto menyediakan fungsi C tingkat rendah. Ia mendukung AES, DES, 3DES, dan berbagai algoritme hashing. Contoh enkripsi AES-CBC:
#include <CommonCrypto/CommonCryptor.h>
- (NSData *)aes256Encrypt:(NSData *)plaintext withKey:(NSData *)key iv:(NSData *)iv {
size_t outLength;
NSMutableData *ciphertext = [NSMutableData dataWithLength:plaintext.length + kCCBlockSizeAES128];
CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
key.bytes, key.length, iv.bytes,
plaintext.bytes, plaintext.length,
ciphertext.mutableBytes, ciphertext.length,
&outLength);
if (status == kCCSuccess) {
ciphertext.length = outLength;
return ciphertext;
}
return nil;
}
CommonCrypto memerlukan manajemen manual vektor inisialisasi (IVs) dan tag autentikasi. Untuk enkripsi terotentikasi, pasangan AES-CBC dengan HMAC terpisah, atau beralih ke AES-GCM melalui CryptoKit bila memungkinkan.
Kerangka Kerja dan Kunci Kunci Keamanan
Kerangka kerja Keamanan Software Software menyediakan layanan Keychain untuk penyimpanan kunci, sertifikat, dan password yang aman. Gunakan untuk menyimpan kunci dengan kontrol akses yang ketat (misalnya, membutuhkan kehadiran pengguna melalui biometrik). Enclave Aman dapat menghasilkan dan menyimpan kunci pribadi untuk operasi ECC, memastikan kunci tidak pernah meninggalkan perangkat keras.
Enkripsi Beranjak untuk Jenis Data yang Berbeda
Tidak semua data membutuhkan strategi enkripsi yang sama.
Data Default dan Teras Pengguna Pengenkripsian Ogos
Pengiriman Pengguna Diskordinard Defaults dan Core Data store adalah berkas SQLite biasa kecuali dienkripsi. Untuk Core Data, aktifkan NSFileProtectionType atribut pada berkas store. Untuk granularitas yang lebih halus, enkripsi atribut individu atau seluruh objek sebelum menyimpan:
- morfol menggunakan Data Inti transformable atribut dengan transformator nilai suai yang mengenkripsi/decrypts pada baca/tulis.
- Otorid Serialisasi seluruh objek yang dikelola sebagai JSON, enkripsi itu, dan menyimpan ciphertext dalam atribut biner.
- Vuldard for UserDefaults, jangan pernah menyimpan string sensitif mentah; enkripsi setiap nilai dan simpan data terenkripsi.
Contoh dari penyimpanan data terenkripsi dalam Default Pengguna:
let key = SymmetricKey(size: .bits256)
let data = "user_ssn".data(using: .utf8)!
let sealedBox = try AES.GCM.seal(data, using: key)
UserDefaults.standard.set(sealedBox.combined, forKey: "encrypted_ssn")
UserDefaults.standard.synchronize()
Gagal Mengenkripsi Berkas dengan Perlindungan Berkas
iOS iOS menawarkan kelas perlindungan tingkat berkas: , , dan . Tata atribut ini ketika membuat atau memindahkan berkas:
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.bin")
try FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: fileURL.path)
Perlindungan berkas Combine dengan enkripsi eksplisit jika data harus tetap dilindungi bahkan ketika perangkat tersebut tidak terkunci. Sebagai contoh, enkripsi file dengan kunci yang disimpan di Keychain dan dapat diakses hanya setelah otentikasi.
Data Jaringan Pengenkripsian Kemanusiaan (Transport Lapisan Keamanan)
APS Keselamatan Transportasi App (ATS) memaksa HTTPS secara default. Untuk koneksi TCP kustom, gunakan dengan TLS atau implementasikan pinning SSL untuk mencegah serangan man-in-the-middle.Encrypt muatan di lapisan aplikasi untuk tambahan depth-depth: Bahkan jika TLS dikompromikan, data tetap dilindungi.
Praktek Terbaik Manajemen Kunci Keistimewaan
Enkripsi hanya sekuat manajemen kunci. Ikuti pedoman ini untuk menjaga keamanan:
- [[GharlesFLT:0]]Jana kunci generate menggunakan sebuah kriptografi amankan generator bilangan acak secara acak ⁇ Gunakan atau .
- [[EfleksifT:0]]Store kunci secara eksklusif dalam Keychain dengan atribut aksesibilitas yang sesuai: mencegah backup dan mengikat kunci ke perangkat.
- [[EfrontheleFLT:0]]Gunakan authentikasi biometrik atau passcode sebelum memperoleh kunci ⁇ dengan memaksa verifikasi pengguna.
- [[EqwaFLT:0]] Tekan tombol patrol pada jadwal atau setelah acara keamanan ⁇ Data enkripsi-semula dengan kunci baru dan hapus kunci lama secara aman.
- [[Eflat:0]]Jangan kunci hardcode[ dalam kode sumber atau berkas konfigurasi. Keluarkan kunci dari kata sandi pengguna menggunakan fungsi derivasi kunci lambat (PBKDF2 atau scrypt) bila diperlukan.
- [[EZOLFLT:0]]Leverage the Secure Enclave untuk generasi kunci asimetric ⁇ kunci privat tidak dapat diekspor, mencegah exfiltrasi.
Untuk aplikasi yang menangani data sensitif yang sangat sensitif, pertimbangkan menggunakan modul keamanan perangkat keras modul keamanan perangkat keras (HSM)[ via layanan jaringan, meskipun yang memperkenalkan latensi dan membutuhkan konektivitas internet.
Rotasi Kunci dan Penyulitan Ulang
Bila kunci disusupi atau setelah periode yang ditentukan (mis., setiap 90 hari), memutar kunci. Ini melibatkan enkripsi semua data dengan kunci lama, menghasilkan kunci baru, dan menyandi ulang. Untuk set data yang besar, laksanakan skema kunci versi:
- Simpan sebuah pengenal kunci (misalnya, UUID) di samping setiap catatan terenkripsi.
- Jaga pemetaan pengidentifikasi untuk kunci aktual dalam Keychain (dienkripsi di istirahat).
- Selama rotasi, tambahkan entri baru tanpa segera mengenkripsi ulang semua data. Mengenkripsi ulang secara lazily pada akses.
Pembandingan Kepatuhan dan Pertimbangan Regulasi
Banyak peraturan yang mengenkripsi mandat keotoran untuk data sensitif. GDPR] memerlukan langkah teknis yang sesuai, dan enkripsi adalah teknik pseudonimisasi yang diakui. HIPAA mandat enkripsi ePHI di istirahat dan dalam transit. PCI DSS memerlukan enkripsi data pemegang kartu. Dalam iOS, mengikuti pedoman Perlindungan Data Apple yang dikombinasikan dengan persyaratan penenskripsian satisfies paling banyak. Dokumen enkripsi Anda, kebijakan implementasi, dan kebijakan kehidupan daur ulang, dan trail untuk review audit.
Refer to official Apple dokumentasi untuk rekomendasi terbaru: CryptoKit Panduan Pengembang[, Keychain Services, and Protecting User Privacy. Untuk panduan industri, lihat OWASSP Mobile Security Testing Guide[ and NIST SP-175B ⁇ C Cryptographical Standards].
Pengujian dan Validasi
Setelah mengimplementasikan enkripsi, pastikan itu bekerja dengan benar:
- Tes unit tulis write yang mengenkripsi dan menyandikan teks biasa yang diketahui dan menegaskan keluaran.
- Kasus tepi uji osis: data kosong, muatan yang sangat besar, dan ciphertext yang rusak.
- Lakukan pengujian keamanan dengan menggunakan perangkat rusak penjara untuk mensimulasikan skenario serangan ⁇ memverifikasi bahwa kunci tetap tidak dapat diakses tanpa otentikasi.
- wikipedia menggunakan alat analisis statik untuk memastikan tidak ada tombol terkode keras atau algoritme lemah.
- Log log log log log log login ⁇ tidak pernah log data sensitif teks biasa atau kunci enkripsi.
Kekecualian Kesimpulan
Menganjurkan enkripsi data untuk penyimpanan data iOS sensitif adalah proses multi-lapisan. Dengan menggabungkan proteksi berkas iOS, enkripsi lapisan-aplikasi dengan CryptoKit atau CommonCrypto, dan manajemen kunci yang ketat melalui Kunci dan Enclave Aman, pengembang secara signifikan dapat mengurangi risiko paparan data. Keterlibatan dengan regulasi seperti GDPR dan HIPAA memerlukan dokumentasi, praktik enkripsi yang dapat diaudit. Pengujian dan rotasi kunci secara reguler memastikan keamanan jangka panjang. Menyelidiki dalam arsitektur enkripsi yang kuat tidak hanya melindungi data pengguna tetapi juga membangun kepercayaan dan penilaian regulator.