Sebuah direktori dapat tetap terlihat penuh pada filesystem Linux yang ter-mount sementara konten regular file dan nama filenya tidak dapat digunakan tanpa kunci tertentu. Dengan fscrypt, batas tersebut melekat pada objek filesystem dan bukan dibentuk dengan me-mount filesystem terenkripsi kedua. Policy enkripsi yang dipasang pada direktori kosong diwarisi oleh regular file, direktori, dan symbolic link yang dibuat di bawahnya.

Properti ini lebih sempit daripada kerahasiaan seluruh filesystem. fscrypt mengenkripsi konten dan nama file, tetapi sebagian besar metadata filesystem tetap terlihat, sedangkan pemeriksaan permission biasa tetap menentukan siapa yang dapat mengakses objek setelah kunci terkait tersedia. Policy enkripsi dan kontrol akses karena itu merupakan batas yang terpisah.

Policy dipasang sebelum direktori memiliki child terenkripsi

FS_IOC_SET_ENCRYPTION_POLICY memasang policy fscrypt pada direktori kosong. Policy memilih mode enkripsi konten, mode enkripsi nama file, flag, serta referensi ke master key. Objek terenkripsi baru yang dibuat dalam pohon mewarisi policy sesuai aturan fscrypt pada filesystem.

Syarat direktori kosong mencegah operasi tersebut terlihat seolah mengenkripsi file plaintext yang sudah ada secara in-place. fscrypt tidak menyediakan konversi in-place melalui ioctl ini. Data harus masuk ke pohon terenkripsi melalui pembuatan atau migrasi di bawah policy yang sudah ditetapkan.

Pewarisan policy juga menciptakan properti enforcement bagi struktur direktori. Kecuali special file seperti named pipe, device node, dan UNIX domain socket, pohon direktori terenkripsi pada kondisi normal tidak dapat berisi file tanpa enkripsi atau file yang diatur policy enkripsi berbeda. Operasi link dan rename yang melanggar hubungan policy ini akan ditolak.

Policy v2 mengidentifikasi kunci melalui identifier turunan

Untuk direktori terenkripsi baru, dokumentasi kernel menetapkan policy v2. Master key v2 ditambahkan dengan FS_IOC_ADD_ENCRYPTION_KEY, lalu kernel mengembalikan identifier kunci 16-byte yang diturunkan dari kunci tersebut. Policy menyimpan identifier itu dan bukan descriptor arbitrer yang dipilih userspace.

Identifier tersebut bukan kunci enkripsi dan tidak ditujukan sebagai data rahasia. Fungsinya adalah pemilihan kunci yang stabil: filesystem dapat mengaitkan objek terenkripsi dengan master key yang diperlukan untuk membukanya tanpa menyimpan master key itu sendiri di metadata policy.

Policy v1 memakai key descriptor yang lebih pendek dan memiliki keterbatasan keamanan serta penggunaan yang didokumentasikan kernel. Deployment baru tidak seharusnya memperlakukan v1 dan v2 sebagai format policy yang setara hanya karena keduanya dapat merujuk pada pohon direktori terenkripsi.

Derivasi per-file membatasi penggunaan langsung material master key

Pada desain v2 normal, fscrypt menurunkan subkey dari master key melalui key derivation function. Nonce per-file ikut membentuk pemisahan kunci sehingga file yang berbeda tidak sekadar mengenkripsi kontennya dengan raw key dan konstruksi IV yang identik.

Beberapa flag policy mengubah model derivasi dan IV untuk kebutuhan storage tertentu. FSCRYPT_POLICY_FLAG_DIRECT_KEY, FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64, dan FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32 memiliki batasan berbeda dan saling eksklusif. Mode tersebut merupakan pilihan implementasi dengan konsekuensi kriptografis, bukan toggle performa generik.

Mode enkripsi juga dipisahkan berdasarkan tipe data. Policy memilih satu mode untuk konten file dan satu mode lain untuk nama file dari kombinasi yang didukung kernel serta filesystem yang berjalan. Hardware inline encryption dapat berpartisipasi pada jalur konten, sedangkan enkripsi nama file tetap memerlukan pemrosesan kriptografis kernel.

Menghapus kunci mengubah akses, bukan policy pada disk

Menambahkan master key yang tepat membuat file terlindungi tersedia dalam bentuk plaintext melalui operasi filesystem normal, tetap tunduk pada otorisasi biasa. Menghapus kunci tidak mencabut policy enkripsi dari pohon direktori atau mendekripsi data yang tersimpan. Sebaliknya, operasi yang membutuhkan konten plaintext menjadi tidak tersedia selama kunci tidak ada.

Tanpa kunci, operasi metadata masih dapat mengekspos informasi. stat() dapat melaporkan metadata, direktori dapat didaftar menggunakan representasi terenkode yang diturunkan dari nama terenkripsi, dan file dapat dihapus dalam kondisi yang didokumentasikan. Regular file tidak dapat dibuka atau di-truncate tanpa kunci, sehingga operasi yang membutuhkan file descriptor tersebut juga gagal.

Perilaku ini menjadikan ketiadaan kunci sebagai batas kerahasiaan untuk konten dan nama yang dicakup, bukan batas umum atas keberadaan objek. Ukuran file, permission, timestamp, extended attribute, dan metadata lain selain nama file berada di luar jaminan kerahasiaan utama fscrypt.

Kepemilikan kunci tidak menggantikan otorisasi filesystem

Proses yang dapat membuat master key tersedia tidak otomatis memperoleh permission baca arbitrer atas setiap objek yang dilindungi kunci tersebut. Pemeriksaan permission VFS, ACL, policy Linux Security Module, pembatasan mount, dan mekanisme otorisasi lain tetap berlaku.

Pemisahan sebaliknya juga penting. Sebuah proses dapat memiliki permission mode-bit terhadap file tetapi tetap tidak dapat membuka konten plaintext ketika kunci fscrypt tidak tersedia. Akses dengan demikian bergantung pada ketersediaan kriptografis sekaligus jalur otorisasi normal.

Pemisahan ini berguna pada rancangan storage multi-user karena lifecycle kunci dapat dikaitkan dengan login atau sesi terlindungi sementara permission filesystem tetap menyatakan pembagian akses pada tingkat objek. Hal ini juga berarti pemberian privilege filesystem yang luas kepada suatu proses dapat melemahkan isolasi yang diharapkan dari rancangan pengelolaan kunci ketika kunci sedang aktif.

Kompromi online dan paparan offline memiliki batas berbeda

fscrypt terutama menangani paparan data-at-rest. Dengan kunci yang kuat, konten dan nama yang dilindungi dapat tetap rahasia saat terjadi kompromi offline satu titik waktu pada storage. Jaminan tersebut tidak mencakup seluruh metadata dan tidak menyediakan autentisitas umum terhadap penyerang yang mampu memodifikasi filesystem secara offline sebelum akses sah berikutnya.

Penyerang online dengan privilege memadai dapat mengakses plaintext ketika kunci terkait aktif. Data terdekripsi juga dapat berada dalam cache kernel, dan penghapusan kunci tidak berarti setiap salinan plaintext sebelumnya telah terhapus secara kriptografis dari memori. Enkripsi storage karena itu tidak dapat menggantikan isolasi proses atau integritas kernel.

Hardware-wrapped key dapat mengubah sebagian model paparan kunci ketika didukung platform dan inline encryption stack. Mekanisme tersebut menjaga material kunci tertentu tetap wrapped di luar hardware enkripsi, tetapi membawa batasan hardware dan policy serta tidak mengubah fscrypt menjadi perlindungan terhadap kompromi kernel arbitrer.

Penempatan direktori menjadi bagian dari arsitektur kriptografis

Karena policy diwariskan melalui pohon direktori terenkripsi, lokasi awal policy menentukan objek baru mana yang masuk ke domain kriptografis tersebut. Memindahkan data antar-domain policy tidak setara dengan mengganti label metadata; hubungan policy yang tidak kompatibel ditolak, dan migrasi pada umumnya memerlukan akses plaintext lalu pembuatan ulang di bawah policy tujuan.

Deployment yang kuat karena itu memperlakukan direktori terenkripsi tingkat atas, identifier policy v2, dan lifecycle master key sebagai satu batas terkoordinasi. fscrypt dapat melindungi konten dan nama file saat tersimpan, tetapi jaminannya tetap terpisah dari otorisasi filesystem, kerahasiaan metadata, confinement proses, dan integritas sistem.