Video failed to load

Gocryptfs: A File-based Encryption Tool Written in Go

1052 words
5 minutes
Gocryptfs: A File-based Encryption Tool Written in Go

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 cryptsetup untuk meng-enkripsi drive atau partisi: Enrypting Disk in Linux using LUKS

Berikut adalah website resmi gocryptfs dan repository Github-nya:

Website: https://nuetzlich.net/gocryptfs/

rfjakob
/
gocryptfs
Waiting for api.github.com...
00K
0K
0K
Waiting...

gocryptfs vs Other Tools#

Berikut adalah perbedaan utama antara cryptsetup dengan gocryptfs2:

Fiturcryptsetup/LUKSgocryptfs
LevelBlock deviceFile/folder
Encrypt seluruh diskYaTidak
Encrypt folder tertentuKurang cocokSangat cocok
Cocok untuk cloud syncTidakYa
Metadata tersembunyiSangat baikSebagian
Bisa boot OSYaTidak
PerformaLebih cepatSedikit lebih lambat
Teknologidm-crypt kernelFUSE userspace
INFO

Untuk perbandingan lebih lanjut, bisa merujuk ke tautan berikut:
https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table

Selain itu, gocryptfs sendiri sudah membuat perbandingan dengan beberapa tools enkripsi lainnya:3

Categorygocryptfs v1.7encfs v1.9.5ecryptfs v4.19.0cryptomator v1.4.6securefs v0.8.3CryFS v0.10.0
First release201520032006201420152015
LanguageGoC++CJavaC++C++
LicenseMITLGPLv3 / GPLv3GPLv2GPLv3MITLGPLv3
Development hotspotAustriaUSAUSA (RedHat)GermanyChinaGermany
LifecycleActiveMaintenanceActiveActiveActiveActive
File interfaceFUSEFUSEIn-kernel filesystemFUSE/WebDAVFUSEFUSE
PlatformsLinux, MacOS, 3rd-party Windows port cppcryptfs, 3rd-party Android port DroidFSLinux, MacOS, 3rd-party Windows portLinuxLinux, MacOS, WindowsLinux, MacOS, WindowsLinux, MacOS, Windows (experimental)
User interfaceCLI, 3rd-party GUI (SiriKali)CLI, 3rd-party GUIIntegrated in login processGUI, 3rd-party CLICLI, 3rd-party GUICLI, 3rd-party GUI (SiriKali)
Reverse ModeYes (since v1.1, read-only)Yes (limited write support)NoNoNoNo
Documentation availableYesYesNoYesYesYes
Password hashingscryptPBKDF2(none, implemented in external tool)scryptPBKDF2scrypt

How It Works#

Kira-kira, beginilah diagram kerja gocryptfs dari sudut pandang penggunanya:

gocryptfs workflow diagram
gocryptfs workflow diagram

Bentuk nyatanya di komputer saya:

gocryptfs workflow diagram on Archlinux
gocryptfs workflow diagram on Archlinux

Kira-kira, beginilah cara kerjanya:4

  1. Ketika pertama kali menginisialisasi encrypted directory (direktori terenkripsi), kita akan diminta memasukkan password.
  2. Setelah berhasil meng-input-kan password, kita akan mendapatkan master key (berisi 64 digit karakter angka dan huruf random) alias KEK (Key Encryption Key).
  3. gocryptfs akan 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

DistroCommand
Debian/Ubuntusudo apt install -y gocryptfs
Arch Linuxsudo pacman -Sy gocryptfs
Fedorasudo dnf install gocryptfs
Opensusesudo zypper install gocryptfs
NOTE

NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):

environment.systemPackages = [
pkgs.gocryptfs
];

Atau jika menggunakan nix-shell:

Terminal window
nix-shell -p gocryptfs

Untuk memastikan gocryptfs sudah ter-install, kita bisa cek versinya dengan perintah:

Terminal window
gocryptfs --version

Checking gocryptfs version
Checking gocryptfs version

Usage#

Berikut adalah cara menggunakannya:

1. Create dirs#

Buat 2 direktori utama:

  1. Direktori untuk menyimpan file normal
  2. Direktori untuk menyimpan file yang terenkripsi
Terminal window
mkdir encrypted open

2. Initialize dir#

Inisialisasi direktori yang sudah ditentukan untuk menyimpan file yang terenkripsi.

Terminal window
gocryptfs -init encrypted

Creating and initializing gocryptfs filesystem & encrypted dir
Creating and initializing 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.conf
  • goctypfs.diriv

Berikut adalah isi file gocryptfs.conf:

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
gocryptfs.diriv

3. Mounting#

Berikutnya, kita perlu me-mounting direktori yang sudah diinisialisasi tadi (encrypted/) ke direktori filesystem (open/):

Terminal window
gocryptfs encrypted/ open/

Nanti kita akan diminta memasukkan password yang sudah kita buat sebelumnya, tinggal di-input-kan saja.

Mounting
Mounting

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:

Terminal window
fusermount -u open

Umounting
Umounting

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.

Terminal window
mkdir newdir
gocryptfs encrypted/ newdir/

Re-mounting
Re-mounting

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:

Terminal window
gocryptfs encrypted <mountpoint_dir> -masterkey=<64 digit master key>

Decrypting with master key
Decrypting with 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:

Terminal window
gocryptfs encrypted <mountpoint_dir> -masterkey=stdin

Kemudian, nanti akan ada prompt yang meminta input master key, tinggal di-input-kan.

Decrypting with master key via stdin
Decrypting with master key via stdin

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

Footnotes#

  1. https://nuetzlich.net../images/gocryptfs/

  2. https://chatgpt.com

  3. https://nuetzlich.net../images/gocryptfs/comparison/

  4. https://nuetzlich.net../images/gocryptfs/forward_mode_crypto/

  5. https://nuetzlich.net../images/gocryptfs/quickstart/

Support & Share

If this article helped you, please share or support!

Sponsor
Gocryptfs: A File-based Encryption Tool Written in Go
https://shangdi.github.io/posts/tech/gocryptfs/
Author
Wildan
Published at
2026-05-26

Comments

Profile Image of the Author
Wildan
Welcome! Wildan-desu.
Announcemenet
Welcome to my blog! Enjoy exploring ~
Categories
Tags
Latest Moments
Site Statistics
Posts
111
Categories
90
Tags
316
Total Words
576,048
Running Days
0 days
Last Activity
0 days ago
Site Info
Build Platform
GitHub Actions
Blog Version
Firefly v6.15.10
License
CC BY-NC-SA 4.0