Desain Privasi Utama: Komitmen Paranoid di Aplikasi Memo
Halaman ini diterjemahkan secara otomatis dari bahasa Jepang. Baca versi asli berbahasa Jepang
1 Mengapa privasi penting dalam aplikasi memo
Ide kerja, draf pribadi, catatan harian. Aplikasi memo mengumpulkan informasi sebelum menunjukkannya kepada orang lain. Sama pentingnya dengan mampu menulis dengan cepat, penting untuk memahami di mana itu disimpan dan ke mana itu dikirim.
Dalam artikel ini, kami akan menjelaskan enkripsi, cache komunikasi, tampilan layar, log diagnostik, dan analisis penggunaan di terminal secara terpisah. Satu perlindungan tidak menjamin perlindungan rute lainnya.
2 Fungsi menyembunyikan catatan secara otomatis di pengalih aplikasi tidak diaktifkan
iOS menggunakan layar setelah aplikasi berpindah ke latar belakang sebagai snapshot. Apple memandu Anda untuk menghapus informasi rahasia di layar saat berpindah ke latar belakang.
Dalam sumber 5.8.17 dikonfirmasi, sceneWillResignActive dan sceneDidEnterBackground menyimpan draf dan tidak memanggil proses tampilan overlay privasi. Fungsi tampilan sebelumnya tetap ada, tetapi itu bukan jalur yang berfungsi sebagai perlindungan yang valid.
Ada kemungkinan bahwa catatan yang ditampilkan akan tetap berada di gambar pengalih aplikasi. Mengenkripsi Outbox tidak menyembunyikan gambar layar. Perbaiki penjelasan "selalu sembunyikan isi memo" di versi lama artikel ini.
3. ephemeral URLSession: Kurangi penyimpanan disk dalam cache komunikasi
URLSession standar menyimpan cache, cookie, dan informasi otentikasi di disk. Ini adalah fitur yang berguna untuk aplikasi umum, tetapi tidak diperlukan untuk aplikasi memo dan dapat menjadi risiko.
Jika cache komunikasi tetap ada di terminal, itu berarti ada jejak pada disk yang URL diakses dan kapan. Jika cookie disimpan, itu berarti bahwa informasi sesi akan tetap ada di terminal.
Gunakan URLSessionConfiguration.ephemeral di aplikasi ini.
private let session: URLSession = {
let config = URLSessionConfiguration.ephemeral
config.httpCookieAcceptPolicy = .never
config.httpShouldSetCookies = false
config.urlCache = nil
return URLSession(configuration: config)
}()
- Tidak ada cache disk:Jangan menyimpan cache Sesi URL ini ke disk
- Nonaktifkan penggunaan cookie:Sesi URL ini tidak menerima cookie dan tidak mengatur permintaan
- Pengabsahan cache URL:Atur penyimpanan cache itu sendiri ke
nil - Konfigurasi yang tidak menggunakan penyimpanan persisten: Jangan menyimpan informasi sesi URLSession di disk
Ini adalah perlindungan yang terkait dengan cache URLSession, dll., dan bukan fungsi yang menghilangkan peristiwa penggunaan yang disimpan aplikasi dan ditransmisikan secara terpisah atau catatan transmisi di sisi server. Asosiasi dengan pengidentifikasi analisis penggunaan juga dilakukan secara terpisah dari pengaturan ini.
4. Rentang keluaran log pengukuran kinerja
Keluaran log dari PerformanceLogger dikelilingi oleh #if DEBUG. Dalam build di mana DEBUG tidak ditentukan, pemrosesan keluaran log dari logger ini tidak disertakan.
logError pencatat ini mencatat jenisnya, bukan pernyataan terperinci dari kesalahan tersebut. Misalnya, gunakan tipe URLError dan jangan lepaskan localizedDescription apa adanya, yang mungkin berisi jalur file dan input pengguna.
Di sisi lain, ini bukan mekanisme yang secara otomatis membahayakan semua nama acara dan string tambahan yang diteruskan ke logEvent. Penting untuk tidak memberikan alamat email, badan memo, atau informasi otentikasi kepada penelepon.
Penjelasan ini tidak akan diperluas ke jaminan "nol log" untuk seluruh aplikasi, SDK eksternal, dan OS. Transmisi acara penggunaan internal dan AppsFlyer diaktifkan sebagai mekanisme terpisah. Ruang lingkup akuisisi akan dijelaskan dalam FAQ analisis penggunaan artikel ini dan Kebijakan Privasi.
5. AES-GCM Enkripsi Outbox Jangkauan Perlindungan
Memo yang menunggu untuk dikirim dikelola dalam antrian yang disebut Outbox di terminal. Saat menyimpan, gunakan CryptoKit Apple untuk mengenkripsi dengan AES-GCM. Kunci enkripsi baru dihasilkan dengan bit 256.
Kunci disimpan di Keychain dengan kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. Pengaturan ini memungkinkan akses setelah perangkat pertama kali dibuka kuncinya seusai dimulai ulang, hingga perangkat dimulai ulang lagi. Pemulihan cadangan ke perangkat lain tidak memindahkan kunci tersebut. Aplikasi membaca kunci untuk melakukan enkripsi dan dekripsi.
Ini adalah perlindungan data yang disimpan, bukan untuk menyembunyikan layar yang ditampilkan atau memastikan keamanan dari semua pelanggaran terminal. Sebelum mengubah model, harap pastikan bahwa catatan yang diperlukan telah mencapai alamat penyimpanan.
Saat menggunakan transmisi email, teks diproses oleh Relay API kami dan platform pengiriman, dan tetap sebagai email di kotak masuk. Enkripsi di terminal tidak berarti enkripsi ujung ke ujung (E2EE) untuk pengiriman surat. Detail dijelaskan dalam Kebijakan Privasi dan Jalur Data.
Mengirim antrian, lihat Penjelasan arsitektur Outbox.
6. Perlindungan isi memo dan peran SDK eksternal
Di aplikasi iOS, gunakan CryptoKit untuk mengenkripsi isi memo, Keychain untuk penyimpanan kunci, dan URLSession untuk mengirimkan teks. Network.framework memantau status koneksi, dan BackgroundTasks bertanggung jawab untuk menjadwalkan transmisi latar belakang.
Di sisi lain, aplikasi ini juga menggunakan SDK eksternal. GoogleSignIn dan Firebase Authentication digunakan untuk secara otomatis memasukkan email sewenang-wenang dengan akun Google, dan Pemeriksaan Aplikasi Firebase diinisialisasi saat startup untuk melindungi backend API. AppsFlyer digunakan untuk akuisisi dan analisis penggunaan, dan menetapkan pengidentifikasi instalasi yang umum untuk analisis Anda sendiri.
Meskipun desainnya tidak menyertakan badan memo dalam item acara, asosiasi pengidentifikasi dan catatan transmisi tetap ada. Ruang lingkup analisis penggunaan, termasuk SDK, perlu dikonfirmasi secara terpisah dari enkripsi teks. Item dan penggunaan dijelaskan dalam Kebijakan Privasi.
7. Tentukan cakupan perlindungan
Enkripsi di terminal, penanganan cache komunikasi, dan analisis pemanfaatan masing-masing memiliki peran yang berbeda. Bahkan dengan enkripsi Outbox dan URLSession fana, kumpulan acara penggunaan tidak hilang.
Hargai kemampuan untuk meninggalkan catatan dengan cepat dan kemampuan untuk memahami informasi yang Anda peroleh. Jelaskan tujuan, pengidentifikasi, dan cakupan asosiasi analisis penggunaan, dan tinjau sesuai dengan perubahan di aplikasi.
Pertanyaan umum
Referensi
- Pengembang Apple — Dokumentasi CryptoKit — AES-GCM Digunakan untuk mengimplementasikan perlindungan data Outbox dengan enkripsi
- Pengembang Apple — Dokumentasi URLSession — Privasi aman dengan komunikasi jaringan melalui sesi sementara (sementara)
- Pengembang Apple — Mencegah Koneksi Jaringan yang Tidak Aman (Keamanan Transportasi Aplikasi) — TLS Memastikan keamanan selama transfer data dengan memaksa komunikasi
- Pengembang Apple — Menghasilkan Pesan Log dari Kode Anda — Rentang penyimpanan log dan penanganan informasi rahasia
- Pengembang Apple — Mempersiapkan UI Anda untuk Berjalan di Latar Belakang — Jepretan dan informasi di layar untuk pengalih aplikasi
- Apple Developer — Keychain Access After First Unlock, This Device Only — Syarat akses kunci dan pembatasan pemindahan ke perangkat lain