Preambul#
Beberapa saat lalu, saya membayangkan untuk punya alat digital yang dapat mengenkripsi file dan folder saya di komputer. Kemudian, saya coba cari di Google untuk memenuhi rasa penasaran tersebut. Ternyata, terdapat beberapa tools yang dapat saya gunakan untuk keperluan tersebut, salah satunya adalah gocryptfs.
gocryptfs adalah tool enkripsi berbasis file yang ditulis dengan bahasa pemrograman Go1. Berbeda dengan cryptsetup yang digunakan untuk mengenkripsi drive atau partisi, gocryptfs adalah tool yang dapat digunakan untuk mengenkripsi filesystem biasa di userspace (FUSE) yang juga dapat di-mount (mountable). Artinya, tool ini sangat cocok digunakan untuk mengenkripsi file-file yang ada di dalam folder manapun, baik di hardisk/SSD, di USB stick (flashdrive/flashdisk), bahkan remote filesystem seperti Dropbox.
Saya sempat menulis cara menggunakan
cryptsetupuntuk meng-enkripsi drive atau partisi:
gocryptfs vs Other Tools#
Berikut adalah perbedaan utama antara cryptsetup dengan gocryptfs2:
| Fitur | cryptsetup/LUKS | gocryptfs |
|---|---|---|
| Level | Block device | File/folder |
| Encrypt seluruh disk | Ya | Tidak |
| Encrypt folder tertentu | Kurang cocok | Sangat cocok |
| Cocok untuk cloud sync | Tidak | Ya |
| Metadata tersembunyi | Sangat baik | Sebagian |
| Bisa boot OS | Ya | Tidak |
| Performa | Lebih cepat | Sedikit lebih lambat |
| Teknologi | dm-crypt kernel | FUSE userspace |
https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table
Selain itu, gocryptfs sendiri sudah membuat perbandingan dengan beberapa tools enkripsi lainnya:3
| Category | gocryptfs v1.7 | encfs v1.9.5 | ecryptfs v4.19.0 | cryptomator v1.4.6 | securefs v0.8.3 | CryFS v0.10.0 |
|---|---|---|---|---|---|---|
| First release | 2015 | 2003 | 2006 | 2014 | 2015 | 2015 |
| Language | Go | C++ | C | Java | C++ | C++ |
| License | MIT | LGPLv3 / GPLv3 | GPLv2 | GPLv3 | MIT | LGPLv3 |
| Development hotspot | Austria | USA | USA (RedHat) | Germany | China | Germany |
| Lifecycle | Active | Maintenance | Active | Active | Active | Active |
| File interface | FUSE | FUSE | In-kernel filesystem | FUSE/WebDAV | FUSE | FUSE |
| Platforms | Linux, MacOS, 3rd-party Windows port cppcryptfs, 3rd-party Android port DroidFS | Linux, MacOS, 3rd-party Windows port | Linux | Linux, MacOS, Windows | Linux, MacOS, Windows | Linux, MacOS, Windows (experimental) |
| User interface | CLI, 3rd-party GUI (SiriKali) | CLI, 3rd-party GUI | Integrated in login process | GUI, 3rd-party CLI | CLI, 3rd-party GUI | CLI, 3rd-party GUI (SiriKali) |
| Reverse Mode | Yes (since v1.1, read-only) | Yes (limited write support) | No | No | No | No |
| Documentation available | Yes | Yes | No | Yes | Yes | Yes |
| Password hashing | scrypt | PBKDF2 | (none, implemented in external tool) | scrypt | PBKDF2 | scrypt |
How It Works#
Kira-kira, beginilah diagram kerja gocryptfs dari sudut pandang penggunanya:

gocryptfs workflow diagram
Bentuk nyatanya di komputer saya:

gocryptfs workflow diagram on Archlinux
Kira-kira, beginilah cara kerjanya:4
- Ketika pertama kali menginisialisasi encrypted directory (direktori terenkripsi), kita akan diminta memasukkan password.
- Setelah berhasil meng-input-kan password, kita akan mendapatkan master key (berisi 64 digit karakter angka dan huruf random) alias KEK (Key Encryption Key).
gocryptfsakan men-generate 2 file penting di dalam encrypted directory yang barusan kita inisialisasi:
gocryptfs.conf: berisi encrypted master key, salt (untuk password hashing), parameter scrypt, dan beberapa hal lain.gocryptfs.diriv: file binary yang digunakan untuk mendekripsi nama file di satu direktori. Oleh karena itu, file ini akan ada di setiap sub-direktori di dalam encrypted directory.
Oleh karena itu, ke-empat hal tersebut (password, master key/KEK, gocryptfs.conf, dan gocryptfs.diriv) sangat penting sehingga harus dipastikan tidak hilang atau lupa.
Jika kita lupa password, file dan direktori masih dapat dideskripsi dengan master key/KEK, tapi jika master key juga hilang, maka file dan direktori tidak dapat didekripsi. File gocryptfs.conf juga penting karena menyimpan informasi mengenai metadata utama filesystem. Jika itu hilang, secara praktis, sudah hampir mustahil untuk recovery-nya, meskipun kita ingat password dan master key. gocryptfs.diriv diperlukan untuk mendekripsi nama file, jadi, kehilangan file tersebut berarti kita tidak dapat mendekripsi nama file yang ada di direktori tersebut.
Installation#
Berikut adalah cara instalasinya di beberapa distro linux:5
| Distro | Command |
|---|---|
| Debian/Ubuntu | sudo apt install -y gocryptfs |
| Arch Linux | sudo pacman -Sy gocryptfs |
| Fedora | sudo dnf install gocryptfs |
| Opensuse | sudo zypper install gocryptfs |
NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):
environment.systemPackages = [
pkgs.gocryptfs
];Atau jika menggunakan nix-shell:
nix-shell -p gocryptfsUntuk memastikan gocryptfs sudah ter-install, kita bisa cek versinya dengan perintah:
gocryptfs --version
gocryptfs version
Usage#
Berikut adalah cara menggunakannya:
1. Create dirs#
Buat 2 direktori utama:
- Direktori untuk menyimpan file normal
- Direktori untuk menyimpan file yang terenkripsi
mkdir encrypted open2. Initialize dir#
Inisialisasi direktori yang sudah ditentukan untuk menyimpan file yang terenkripsi.
gocryptfs -init encrypted
gocryptfs filesystem & encrypted dir
Reminder!
Setelah selesai menginisialisasi direktori, kita akan diminta untuk meng-input-kan password. Setelah itu, gocryptfs juga akan men-generate master key (seperti “private key” dalam konsep asymmetric encryption). Pastikan kita menyimpan master key tersebut, karena master key tersebut tidak akan dapat didapatkan lagi dan akan berguna untuk membuka file dan direktori terenkripsi kita, terutama jika kita lupa password.
Perhatikan bahwa, di dalam direktori yang sudah kita inisialisasi (encrypted/), ter-generate 2 file:
gocrptfs.confgoctypfs.diriv
Berikut adalah isi file gocryptfs.conf:
{
"Creator": "gocryptfs v2.6.1",
"EncryptedKey": "9ajKdvNPrr6+mqCxzGSWgGAF3zYT5Yn4FIJ/pmvprkMt3crLrKeG3Ktsk0FwMJRLjEtjjaH694l4nGObtUWh6Q==",
"ScryptObject": {
"Salt": "TFhGHlNzjrH1xvn82VsxuAzlGh20AZDFYb20EA4dvHw=",
"N": 65536,
"R": 8,
"P": 1,
"KeyLen": 32
},
"Version": 2,
"FeatureFlags": [
"HKDF",
"GCMIV128",
"DirIV",
"EMENames",
"LongNames",
"Raw64"
]
}Adapun file gocryptfs.diriv sendiri adalah file binary:

gocryptfs.diriv
3. Mounting#
Berikutnya, kita perlu me-mounting direktori yang sudah diinisialisasi tadi (encrypted/) ke direktori filesystem (open/):
gocryptfs encrypted/ open/Nanti kita akan diminta memasukkan password yang sudah kita buat sebelumnya, tinggal di-input-kan saja.

4. Adding files#
Sekarang, kita sudah bisa menambahkan file dan direktori di dalam direktori open/.
Perhatikan!
Direktori yang kita isi dengan file atau sub-direktori yang ingin dienkripsi adalah direktori yang tidak kita inisialisasi ya. Intinya, direktori yang di dalamnya ada 2 file “spesial” tadi, tidak perlu kita apa-apakan. Jadi, yang diisi/dihapus/diubah adalah direktori yang bebas kedua file “spesial” tersebut (dalam hal ini adalah direktori open/).
Berikut demonstrasi menambahkan dan menghapus file dan direktori/folder.
Perhatikan!
File dan direktori/folder yang kita tambahkan ke direktori open/ akan otomatis terenkripsi di file encrypted/, tidak hanya isi filenya saja yang dienkripsi, tetapi juga nama filenya. Selain itu, ketika kita menambahkan sub-direktori/sub-folder di direktori open/, maka direktori encrypted/ juga akan otomatis men-generate file .diriv di dalamnya.
5. Umounting#
Jika sudah selesai, kita bisa meng-umount direktori filesystem tersebut (open/) dengan perintah:
fusermount -u open
Karena direktori open/ hanya digunakan sebagai “mount point” untuk encrypted/, maka ketika sudah di-umount, direktori tersebut akan kembali seperti semula (kosong). Bahkan, kita dapat menghapusnya juga.
Yang tersisa hanyalah direktori encrypted/ yang semua file dan sub-direktorinya sudah terenkripsi, baik isinya maupun namanya. Tidak ada orang yang bisa mengetahui isi file-file tersebut (bahkan nama asli file-file-nya juga), kecuali mereka tau password-nya.
6. Re-mounting#
Sama seperti proses mounting sebelumnya, kita hanya perlu sebuah direktori kosong sebagai “mount point”. Kemudian, untuk me-mounting, kita gunakan perintah yang sama.
mkdir newdir
gocryptfs encrypted/ newdir/
7. Master Key#
Jika kita lupa password, maka selagi masih memiliki master key, masih ada jalan untuk mendekripsi direktori dan file-file tersebut. Oleh karena itu, master key perlu dijaga dengan baik, sebab, jika kita lupa password dan master key-nya juga hilang, maka tamatlah riwayat kita, karena file-file dan direktori terenkripsi itu sudah tidak ada harapan lagi untuk bisa didekripsi.
Berikut adalah cara membuka (mendekripsi) menggunakan master key:
gocryptfs encrypted <mountpoint_dir> -masterkey=<64 digit master key> 
Tapi, jika kita langsung meng-input-kan master key-nya langsung seperti itu, maka master key tersebut bisa saja dibaca via ps ax dan tersimpan di history shell. Oleh karena itu, ada cara yang lebih aman dan private untuk meng-input-kan master key, yaitu via stdin sebagai berikut:
gocryptfs encrypted <mountpoint_dir> -masterkey=stdinKemudian, nanti akan ada prompt yang meminta input master key, tinggal di-input-kan.

Demikian.
Terima kasih sudah mampir.
Boleh tinggalkan komentar jika ada saran dan kritik ya!

