NoctisNode
← PanduanKeamanan2026-10-238 menit

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

FiturLUKS1LUKS2
HeaderSatu header biner 592 byte plus area keyslotDua header biner plus metadata JSON, dengan checksum dan salinan redundan
Offset header / data default2 MiB16 MiB
Keyslot832
Derivasi kunci (PBKDF)Hanya PBKDF2Argon2id (default), Argon2i, atau PBKDF2
Token (TPM2, FIDO2, PKCS#11, Clevis)TidakYa
Enkripsi terautentikasi (dm-integrity)TidakOpsional, eksperimental
Re-enkripsi onlineHanya offlineYa, `cryptsetup reencrypt` pada perangkat yang ter-mount
Flag persisten dan labelTidakYa, misalnya `--allow-discards --persistent`
Unlock oleh GRUB untuk /boot terenkripsiYaHanya 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 524288

Token, 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 LUKS2

Mengonversi 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.

  1. 01.Boot sistem rescue atau live dan pastikan perangkat LUKS tidak sedang terbuka (`cryptsetup close` jika perlu).
  2. 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.
  3. 03.Konversi LUKS1 ke LUKS2 dengan `cryptsetup convert --type luks2`. Keyslot yang ada tetap PBKDF2.
  4. 04.Tingkatkan setiap keyslot ke Argon2id dengan `cryptsetup luksConvertKey --pbkdf argon2id`, kecuali GRUB harus membacanya.
  5. 05.Uji bahwa perangkat bisa dibuka, lalu build ulang initramfs dengan `update-initramfs -u` dan reboot.
  6. 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.img

Note · 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.

LUKS2 vs LUKS1: perbedaan, cara memeriksa, dan cara mengonversi · NoctisNode