Bagaimana cara menggunakan dm-crypt (LUKS) dengan GnuPG untuk menggunakan dua faktor untuk FDE?

9

Saat menggunakan enkripsi disk lengkap dengan Ubuntu (berlawanan dengan enkripsi homedir), dm-crypt dengan LUKS digunakan untuk mengenkripsi volume. Dalam installer (setidaknya pada 12,04 alternatif) Anda dapat memilih antara pengaturannya menggunakan frasa sandi atau keyfile. Saya ingin menggunakan kombinasi keduanya; tidak keduanya, tetapi membutuhkan keduanya.

Mengapa? Karena ini meningkatkan keamanan (dua faktor); Anda harus memiliki sesuatu dan Anda perlu tahu sesuatu untuk membukanya. Lalu saya ingin meletakkan keyfile pada perangkat penyimpanan kecil yang dapat dilepas (USB flash drive) dan hanya mencolokkannya saat boot. Hasilnya harus bahwa itu harus dimasukkan ke dalam flash drive yang tepat dan memberikan frasa sandi yang tepat untuk membuka kunci partisi root.

Jadi, dengan kata lain, saya ingin ditanya saat boot untuk frasa sandi yang keyfile pada drive eksternal dienkripsi.

Saya melihat /usr/share/initramfs-tools/hooks/cryptgnupgskrip pembantu yang dapat membantu mencapainya, tetapi saya tidak tahu bagaimana menggunakannya.

Hanya untuk menghindari kebingungan: Saya tidak meminta cara untuk menambahkan kunci tambahan ke volume untuk membukanya.

gertvdijk
sumber
Saya sendiri telah menemukan satu bagian dari jawabannya dengan ... membaca dokumen . Baca tentang cara menggunakan ini di /usr/share/doc/cryptsetup/README.gnupg. Saya akan mencoba mencari waktu untuk mengubahnya agar dapat menggunakan keyfile dari media eksternal.
gertvdijk

Jawaban:

5

Aku melakukan hal yang sama, namun saya takut jawaban saya tidak akan memuaskan, seperti untuk berbagai alasan saya pergi dengan benar-benar kustom initramfs .

Alih-alih GnuPG, yang merupakan biner tambahan yang harus dimasukkan dalam Initramfs (dan dalam kasus GnuPG-2, yang agak rumit), saya hanya menggunakan apa yang sudah ada di sana. Dan itu jelas dm-crypt/LUKS.

Jadi misalkan Anda punya keyfile. Lebih disukai satu dengan data acak.

# dd if=/dev/urandom of=keyfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000189802 s, 2.7 MB/s

Tambahkan enkripsi untuk itu dengan LUKS (jangan ragu untuk menambahkan pengaturan cipher pilihan Anda).

# truncate -s 2M keyfile.luks
# cryptsetup luksFormat keyfile --header keyfile.luks

WARNING!
========
This will overwrite data on keyfile.luks irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: bananas
Verify passphrase: bananas

Sekarang Anda memiliki keyfile (512 byte) dan keyfile.luks (2MB, yang cryptsetup karena beberapa alasan perlu menulis header LUKS 192k). Karena Initramf akan dikompres, itu tidak terlalu buruk (masih lebih kecil dari GnuPG).

Sekarang Anda dapat mendekripsi keyfile:

# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas

Dan Anda memiliki 512 byte data acak di /dev/mapper/lukskey. (Anda dapat menulis kepadanya jika Anda ingin mengubahnya, jadi kami dapat menginisialisasi file dengan nol sebelumnya.)

# blockdev --getsize64 /dev/mapper/lukskey
512

Dalam Initramfs init Anda kemudian dapat melanjutkan untuk membuka volume LUKS nyata dengan itu (dengan asumsi Anda menambahkan kunci terlebih dahulu).

cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up

Pendekatan ini membuat GnuPG sepenuhnya berlebihan, ditambah Anda mendapatkan semua keuntungan LUKS, seperti beberapa frasa sandi untuk kunci, sandi pilihan Anda, dan lain-lain. Belum lagi prompt kata sandi yang bagus (kebanyakan reguler) dengan beberapa percobaan ulang.

frostschutz
sumber
2
Solusi keren, tapi bagaimana cara mengintegrasikan ini di initramfs saya sebenarnya? Anda menyatakan bahwa Anda menggunakan initramf yang sepenuhnya khusus, tetapi tidakkah ini mungkin dilakukan hanya dengan menggunakan hook?
gertvdijk
Pasti. Mungkin bahkan tanpa kail jika Anda bisa memikirkan cara untuk memaksa crypttab untuk menemukan dan membuka kunci itu terlebih dahulu. Misalnya tidak harus berupa file, Anda dapat membuat partisi terpisah untuk itu pada USB stick. Namun karena saya tidak melakukan hal itu, saya tidak dapat membuat jawaban konkret untuk itu ... maaf: - /
frostschutz
1
Tidak ada masalah sama sekali - menghindari GnuPG dan menggunakan kembali LUK tentu merupakan pilihan yang unggul. Jika saya perlu menulis ulang pengait untuk pendekatan GnuPG, saya lebih baik menulis ulang tanpa menggunakannya sama sekali. Dan ya, saya sadar ini tidak harus berupa file.
gertvdijk
@ gertvdijk jika Anda melanjutkan, saya akan tertarik dengan jawaban Anda untuk referensi di masa mendatang
frostschutz