ฉันจะใช้ dm-crypt (LUKS) กับ GnuPG เพื่อใช้สองปัจจัยสำหรับ FDE ได้อย่างไร


9

เมื่อใช้การเข้ารหัสดิสก์เต็มรูปแบบกับ Ubuntu (ตรงกันข้ามกับการเข้ารหัส homedir) dm-crypt พร้อม LUKS จะใช้สำหรับการเข้ารหัสโวลุ่ม ในตัวติดตั้ง (อย่างน้อย 12.04 สำรอง) คุณสามารถเลือกระหว่างการตั้งค่าโดยใช้ข้อความรหัสผ่านหรือคีย์ไฟล์ ฉันต้องการใช้ทั้งสองอย่างผสมกัน; ไม่ใช่อย่างใดอย่างหนึ่ง แต่ต้องการทั้งสองอย่าง

ทำไม? เพราะสิ่งนี้ช่วยเพิ่มความปลอดภัย (สองปัจจัย); คุณจะต้องมีบางสิ่งบางอย่างและคุณจำเป็นต้องรู้สิ่งที่จะปลดล็อค จากนั้นฉันต้องการวาง keyfile บนอุปกรณ์เก็บข้อมูลแบบถอดได้ขนาดเล็ก (USB แฟลชไดรฟ์) และเสียบไว้เฉพาะในช่วงเวลาบูต ผลลัพธ์ควรเป็นสิ่งที่จำเป็นต้องใส่ในแฟลชไดรฟ์ด้านขวาและให้ข้อความรหัสผ่านที่ถูกต้องเพื่อปลดล็อกพาร์ติชันรูท

ดังนั้นในคำอื่น ๆ ฉันต้องการที่จะถามในระหว่างการบูตสำหรับวลีรหัสผ่านที่ keyfile ในไดรฟ์ภายนอกถูกเข้ารหัส

ฉันเห็น/usr/share/initramfs-tools/hooks/cryptgnupgสคริปต์ตัวช่วยที่อาจช่วยให้บรรลุผลได้ แต่ฉันไม่มีเงื่อนงำในการใช้งาน

เพียงเพื่อหลีกเลี่ยงความสับสน: ฉันไม่ได้ขอวิธีเพิ่มคีย์เพิ่มเติมในไดรฟ์ข้อมูลเพื่อปลดล็อก


ฉันได้พบส่วนหนึ่งของคำตอบด้วยตัวเองโดย ... อ่านเอกสาร /usr/share/doc/cryptsetup/README.gnupgอ่านข้อมูลเกี่ยวกับวิธีการใช้งานใน ฉันจะพยายามหาเวลาเปลี่ยนมันเพื่อให้มันใช้ keyfile จากสื่อภายนอก
gertvdijk

คำตอบ:


5

ฉันทำสิ่งเดียวกัน แต่ฉันกลัวคำตอบของฉันจะไม่เป็นที่น่าพอใจเป็นด้วยเหตุผลต่างๆฉันไปกับสมบูรณ์ที่กำหนดเองinitramfs

แทนที่จะGnuPGเป็นไบนารีพิเศษที่ต้องรวมไว้ในInitramfs (และในกรณีGnuPG-2ที่ค่อนข้างซับซ้อน) ฉันใช้สิ่งที่มีอยู่แล้วแทน dm-crypt/LUKSและที่เห็นได้ชัด

keyfileดังนั้นสมมติว่าคุณมี ควรมีข้อมูลสุ่ม

# 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

เพิ่มการเข้ารหัสด้วย LUKS (อย่าลังเลที่จะเพิ่มการตั้งค่าตัวเลขที่คุณเลือก)

# 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

ตอนนี้คุณมี keyfile (512 ไบต์) และ keyfile.luks (2MB ซึ่ง cryptsetup ด้วยเหตุผลบางอย่างจำเป็นต้องเขียนส่วนหัว 192k LUKS) เนื่องจาก Initramfs จะถูกบีบอัดอยู่ดีนั่นก็ไม่ได้เลวร้ายเกินไป (ยังเล็กกว่าGnuPG)

ตอนนี้คุณสามารถถอดรหัส keyfile:

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

และคุณมี 512 /dev/mapper/lukskeyไบต์ของข้อมูลแบบสุ่มใน (คุณอาจเขียนถึงมันหากคุณต้องการเปลี่ยนดังนั้นเราสามารถเริ่มต้นไฟล์ด้วยศูนย์ก่อนหน้านี้)

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

ในInitramfs initคุณสามารถดำเนินการต่อเพื่อเปิดระดับเสียง LUKS จริงด้วย (สมมติว่าคุณเพิ่มคีย์ก่อน)

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

วิธีการนี้ทำให้ GnuPG ฟุ่มเฟือยอย่างสิ้นเชิงรวมทั้งคุณจะได้รับข้อดีทั้งหมดของ LUKS เช่นวลีรหัสผ่านที่หลากหลายรหัสคีย์ที่คุณเลือกและอื่น ๆ ไม่ต้องพูดถึงพร้อมท์รหัสผ่านที่ดี (ส่วนใหญ่ปกติ) พร้อมการลองหลายครั้ง


2
วิธีแก้ปัญหาที่ยอดเยี่ยม แต่ฉันจะรวมสิ่งนี้ใน initramfs ของฉันได้อย่างไร คุณระบุว่าคุณใช้ initramfs ที่กำหนดเองโดยสมบูรณ์ แต่จะไม่สามารถทำได้เพียงใช้ hook หรือไม่
gertvdijk

อย่างแน่นอน อาจจะไม่มีตะขอถ้าคุณสามารถคิดวิธีบังคับให้ crypttab ค้นหาและเปิดกุญแจก่อน เช่นมันไม่จำเป็นต้องเป็นไฟล์คุณสามารถสร้างพาร์ติชันแยกต่างหากไว้ในแท่ง USB ได้ อย่างไรก็ตามเนื่องจากฉันไม่ได้ทำอย่างนั้นฉันจึงไม่สามารถตอบได้อย่างเป็นรูปธรรม ... ขออภัย: - /
frostschutz

1
ไม่มีปัญหาเลย - การหลีกเลี่ยง GnuPG และการใช้ LUKS ซ้ำเป็นทางเลือกที่ดีกว่า ในกรณีที่ฉันต้องการเขียน hooks สำหรับวิธี GnuPG ฉันควรเขียนใหม่โดยไม่ใช้เลย และใช่ฉันรู้ว่านี่ไม่จำเป็นต้องเป็นไฟล์
gertvdijk

@gertvdijk หากคุณได้รับสิ่งนี้ต่อไปฉันจะสนใจคำตอบของคุณสำหรับการอ้างอิงในอนาคต
Frostschutz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.