LUKS2 vs LUKS1: perbedaan, cara memeriksa, dan cara mengonversi
LUKS2 menambahkan Argon2id, header JSON redundan, token, dan integritas dibanding LUKS1. Periksa versi Anda dengan cryptsetup luksDump dan konversi dengan aman setelah backup header.
Singkatnya: LUKS2 adalah format on-disk terkini untuk enkripsi disk Linux dan default di cryptsetup sejak versi 2.1. Dibanding LUKS1, LUKS2 menambahkan header metadata JSON yang redundan dan memiliki checksum, derivasi kunci Argon2id yang memory-hard sebagai pengganti PBKDF2, 32 keyslot alih-alih 8, token untuk unlock TPM2 dan FIDO2, serta enkripsi terautentikasi opsional. Gunakan LUKS2 kecuali GRUB lama harus mendekripsi `/boot` sendiri.
Kedua format mengenkripsi data dengan cara yang sama, biasanya AES-XTS. Yang berbeda adalah header-nya: cara kunci disimpan, seberapa sulit passphrase di-brute-force, dan tool apa yang bisa membacanya. Panduan ini membahas perbedaannya, cara memeriksa mana yang Anda pakai, dan cara mengonversi dengan `cryptsetup convert` tanpa kehilangan disk. Jika Anda mengenkripsi server baru untuk stack self-hosting di VPS kecil, LUKS2 adalah format yang tepat.
Sekilas LUKS2 vs LUKS1
| Fitur | LUKS1 | LUKS2 |
|---|---|---|
| Header | Satu header biner 592 byte plus area keyslot | Dua header biner plus metadata JSON, dengan checksum dan salinan redundan |
| Offset header / data default | 2 MiB | 16 MiB |
| Keyslot | 8 | 32 |
| Derivasi kunci (PBKDF) | Hanya PBKDF2 | Argon2id (default), Argon2i, atau PBKDF2 |
| Token (TPM2, FIDO2, PKCS#11, Clevis) | Tidak | Ya |
| Enkripsi terautentikasi (dm-integrity) | Tidak | Opsional, eksperimental |
| Re-enkripsi online | Hanya offline | Ya, `cryptsetup reencrypt` pada perangkat yang ter-mount |
| Flag persisten dan label | Tidak | Ya, misalnya `--allow-discards --persistent` |
| Unlock oleh GRUB untuk /boot terenkripsi | Ya | Hanya keyslot PBKDF2 di GRUB upstream |
Format header dan keyslot
Header LUKS1 adalah struktur biner tetap yang diikuti delapan area keyslot. Jika sektor pertama perangkat tertimpa, misalnya karena `mkfs` yang keliru atau tool partisi, setiap keyslot hilang dan data pun hilang kecuali Anda punya backup header.
LUKS2 menyimpan header biner dan area metadata JSON, serta menyimpan salinan kedua dari keduanya. Setiap salinan memiliki checksum, sehingga `cryptsetup` dapat mendeteksi kerusakan dan beralih ke salinan lainnya. Area JSON mendeskripsikan keyslot, segmen, digest, dan token, yang memungkinkan fitur baru tanpa harus mengubah format lagi. Redundansi tetap tidak menggantikan backup header: penimpaan penuh pada beberapa megabyte pertama menghancurkan kedua salinan.
Argon2id vs PBKDF2
Passphrase tidak pernah dipakai langsung sebagai kunci. Fungsi derivasi kunci merentangkannya sehingga setiap tebakan menjadi mahal. LUKS1 hanya bisa memakai PBKDF2, yang murah dijalankan di GPU dan ASIC, sehingga penyerang yang memiliki salinan header dapat menguji passphrase secara paralel dengan kecepatan tinggi.
LUKS2 secara default memakai Argon2id, yang membutuhkan sejumlah memori yang dapat dikonfigurasi untuk setiap tebakan (hingga 1 GiB secara default, dibatasi RAM yang tersedia saat format) dan jauh lebih mahal untuk diparalelkan. Passphrase yang kuat tetap menjadi pertahanan utama, tetapi Argon2id menaikkan biaya setiap tebakan secara signifikan.
Di server kecil, perhatikan biaya memori. Keyslot yang dibuat di mesin dengan RAM besar mungkin membutuhkan lebih banyak memori untuk unlock daripada yang bisa disediakan VPS 1 GB, seperti paket Wisp NoctisNode, di dalam initramfs. Atur secara eksplisit dengan `--pbkdf-memory` (dalam KiB) saat memformat atau menambahkan kunci di mesin besar untuk mesin kecil.
# Inspect PBKDF parameters of each keyslot
cryptsetup luksDump /dev/vda3 | grep -A6 '^ [0-9]*: luks2'
# Re-derive keyslot 0 with Argon2id and 512 MiB memory cost
cryptsetup luksConvertKey /dev/vda3 --key-slot 0 \
--pbkdf argon2id --pbkdf-memory 524288Token, integritas, dan catatan soal GRUB
Token adalah objek JSON di header LUKS2 yang memberi tahu tool cara mendapatkan kunci secara otomatis. `systemd-cryptenroll` memakainya untuk mengikat keyslot ke chip TPM2, security key FIDO2, atau smartcard PKCS#11, dan Clevis memakainya untuk unlock berbasis jaringan dengan server Tang. Semua ini tidak ada di LUKS1.
Mode integritas (`cryptsetup luksFormat --integrity hmac-sha256`) menggabungkan enkripsi dengan dm-integrity sehingga sektor yang dirusak menghasilkan error baca alih-alih data yang diubah diam-diam. Mode ini memakan ruang disk dan kecepatan tulis, membutuhkan wipe penuh saat format, dan masih berstatus eksperimental. Sebagian besar server tidak memakainya.
GRUB adalah alasan utama orang masih menjumpai LUKS1. GRUB upstream 2.06 ke atas dapat membuka LUKS2, tetapi hanya keyslot yang memakai PBKDF2, karena dukungan Argon2 bukan bagian dari GRUB upstream. Jika GRUB sendiri harus mendekripsi `/boot` yang terenkripsi, gunakan LUKS1 atau keyslot LUKS2 dengan `--pbkdf pbkdf2`. Installer Debian dan Ubuntu membiarkan `/boot` tidak terenkripsi, sehingga kernel dan initramfs yang melakukan unlock dan Argon2id berfungsi, termasuk untuk remote unlock lewat SSH.
Cara memeriksa apakah volume LUKS1 atau LUKS2
Salah satu cara berikut bisa dipakai di sistem yang sedang berjalan, sebagai root. Baris `Version:` dari `cryptsetup luksDump` adalah jawaban yang pasti; dump tersebut juga menampilkan keyslot, jenis PBKDF, dan token.
# Find encrypted partitions (FSVER column shows 1 or 2)
lsblk -f
# Authoritative: header version
cryptsetup luksDump /dev/vda3 | grep -E '^Version'
# Version: 2
# Exit code 0 only if the device is LUKS2
cryptsetup isLuks --type luks2 /dev/vda3 && echo LUKS2Mengonversi dengan cryptsetup convert
`cryptsetup convert` menulis ulang header di tempat; data terenkripsi tidak disentuh. Perangkat harus dalam keadaan tertutup, jadi untuk filesystem root Anda menjalankannya dari sistem rescue atau live. Kegagalan atau listrik padam di tengah konversi bisa membuat header tidak dapat dipakai, itulah sebabnya langkah backup tidak opsional.
- 01.Boot sistem rescue atau live dan pastikan perangkat LUKS tidak sedang terbuka (`cryptsetup close` jika perlu).
- 02.Backup header dengan `cryptsetup luksHeaderBackup` dan salin file tersebut keluar dari server. Siapa pun yang memiliki file ini dan passphrase lama dapat membuka disk, jadi simpan dalam keadaan terenkripsi.
- 03.Konversi LUKS1 ke LUKS2 dengan `cryptsetup convert --type luks2`. Keyslot yang ada tetap PBKDF2.
- 04.Tingkatkan setiap keyslot ke Argon2id dengan `cryptsetup luksConvertKey --pbkdf argon2id`, kecuali GRUB harus membacanya.
- 05.Uji bahwa perangkat bisa dibuka, lalu build ulang initramfs dengan `update-initramfs -u` dan reboot.
- 06.Untuk kembali dari LUKS2 ke LUKS1, konversi dulu setiap keyslot ke PBKDF2 dan hapus token serta fitur khusus LUKS2; jika tidak, `cryptsetup convert --type luks1` akan menolak.
# From a rescue system, device closed
cryptsetup luksHeaderBackup /dev/vda3 --header-backup-file /root/vda3-luks-header.img
cryptsetup convert --type luks2 /dev/vda3
cryptsetup luksConvertKey /dev/vda3 --key-slot 0 --pbkdf argon2id
cryptsetup open /dev/vda3 cryptroot && cryptsetup close cryptroot
# Emergency restore (overwrites the current header!)
# cryptsetup luksHeaderRestore /dev/vda3 --header-backup-file /root/vda3-luks-header.imgNote · Setelah header dipulihkan, passphrase yang berlaku saat backup kembali berfungsi, termasuk yang sudah Anda hapus belakangan. Hapus backup header lama saat Anda mengganti passphrase. Simpan backup terkini di tempat terpisah, misalnya di repositori yang dijelaskan di panduan backup restic.
FAQ
QApakah LUKS2 lebih baik daripada LUKS1?
AUntuk hampir setiap setup baru, ya. LUKS2 memiliki header redundan, derivasi kunci Argon2id, token untuk TPM2 atau FIDO2, dan re-enkripsi online; LUKS1 hanya diperlukan saat GRUB versi lama harus mendekripsi `/boot` sendiri.
QBagaimana cara memeriksa versi LUKS saya?
AJalankan `cryptsetup luksDump /dev/sdX | grep Version` sebagai root; hasilnya 1 atau 2. `lsblk -f` juga menampilkan versi di kolom FSVER untuk partisi crypto_LUKS.
QBisakah saya mengonversi LUKS1 ke LUKS2 tanpa kehilangan data?
ABisa. `cryptsetup convert --type luks2` hanya menulis ulang header saat perangkat tertutup. Backup header dulu dengan `cryptsetup luksHeaderBackup`, karena konversi yang terputus dapat membuat volume tidak terbaca.
QApakah GRUB mendukung LUKS2?
AGRUB upstream 2.06 ke atas dapat membuka LUKS2, tetapi hanya keyslot yang memakai PBKDF2, bukan Argon2id. Ini hanya penting jika `/boot` sendiri terenkripsi; dengan `/boot` yang tidak terenkripsi, initramfs membuka LUKS2 dengan Argon2id seperti biasa.
QEnkripsi apa yang dipakai LUKS2 secara default?
ACryptsetup terkini secara default memakai `aes-xts-plain64` dengan kunci 512 bit (AES-256 dalam mode XTS) dan Argon2id untuk derivasi kunci. Jalankan `cryptsetup --help` untuk melihat default yang dikompilasi di sistem Anda, dan lihat panduan root terenkripsi LUKS untuk setup lengkap.