เป็นไปได้หรือไม่ที่จะเข้ารหัสฮาร์ดดิสก์ด้วยไฟล์คีย์แทนที่จะใช้รหัสผ่าน?


14

มองเข้าไปในการเข้ารหัสฮาร์ดดิสก์ วิธีแก้ปัญหาดูเหมือนจะเป็น DM-crypt กับ LUKS โดยใช้รหัสผ่าน ฉันทำงานกับฮาร์ดดิสก์อิสระหลายตัวที่ติดตั้งในดิสก์พูลเพื่ออ่าน ในกรณีนี้ฉันต้องพิมพ์รหัสผ่านหลายครั้ง

มีวิธีที่ฉันจะเข้ารหัสฮาร์ดดิสก์ด้วยไฟล์คีย์อาจวางไว้ในไดรฟ์ USB และเพียงแค่เสียบเมื่อจำเป็น?

คำตอบ:


11

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

จัดรูปแบบ/etc/crypttabเช่นนี้ของคุณ:

mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
    luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc

ใน Debian และตราสารอนุพันธ์เครื่องมือเริ่มต้นจะสังเกตเห็น keyscript และคัดลอกเครื่องมือและ daemons ที่จำเป็นทั้งหมดสำหรับการเข้าถึงสมาร์ทการ์ดไปยัง initramfs โดยอัตโนมัติ

ข้อมูลเกี่ยวกับการตั้งค่ามาร์ทการ์ดและการสร้าง (และการเข้ารหัส) /usr/share/doc/cryptsetup/README.opensc.gzกุญแจที่พบใน

คุณสามารถใช้Yubikey 4หรือYubikey NEOเพื่อวัตถุประสงค์นี้

หมายเหตุการติดตั้งใช้งาน : คุณลักษณะนี้มีขอบที่ขรุขระและเห็นได้ชัดว่าไม่เหมาะสำหรับ YMMV ครั้งสุดท้ายที่ฉันประสบความสำเร็จฉันต้องเพิ่มแฮ็กต่อไปนี้:

  • ปิดใช้งานsystemdเนื่องจากมันพยายามที่จะเข้าจัดการกระบวนการทั้งหมดของการตั้งค่าอุปกรณ์ที่เข้ารหัสจากหายนะ/etc/crypttabแต่ไม่ทราบว่าkeyscriptจะนำไปสู่ ​​FAIL ขนาดใหญ่อย่างไร โชคดีที่ใน Debian systemdคุณยังสามารถเลือกที่จะ
  • ติดตั้งสคริปต์ตัวแก้ปัญหานี้/etc/initramfs-tools/hooks/yubipinเนื่องจากคุณสมบัติในตัวไม่ได้ติดตั้งการสนับสนุนที่เพียงพอเพื่อให้ Yubikey สามารถใช้งานได้จาก initramfs คุณอาจต้องปรับเปลี่ยนนี้

    #!/bin/sh
    
    PREREQ=cryptroot
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
    esac
    
    # /scripts/local-top/cryptopensc calls pcscd with the wrong path
    ln -s ../usr/sbin/pcscd ${DESTDIR}/sbin/pcscd
    mkdir -p "${DESTDIR}/usr/lib/x86_64-linux-gnu"
    # opensc-tool wants this dynamically, copy_exec doesn't know that
    cp -pL /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 "${DESTDIR}/usr/lib/x86_64-linux-gnu/libpcsclite.so.1"
    mkdir -p "${DESTDIR}/lib/x86_64-linux-gnu"
    # without this, pcscd aborts with a pthread_cancel error
    cp -pL /lib/x86_64-linux-gnu/libgcc_s.so.1 "${DESTDIR}/lib/x86_64-linux-gnu/libgcc_s.so.1"
    # this gets copied as a dangling symlink, fix it
    rm "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    cp -pL /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    # pcscd needs this to open the reader once it has found it
    cp -pL /lib/x86_64-linux-gnu/libusb-1.0.so.0 "${DESTDIR}/lib/x86_64-linux-gnu/libusb-1.0.so.0"
    
  • ติดตั้งสคริปต์อื่น/etc/initramfs-tools/scripts/local-bottom/killpcscdเพื่อทำความสะอาด:

    #!/bin/sh
    
    set -e
    
    PREREQ=cryptopensc
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
        prereqs)
            prereqs
            exit 0
            ;;
    esac
    
    # because cryptopensc does not do it properly
    killall pcscd
    

1
สิ่งจูงใจที่ดีมากในการใช้สมาร์ทการ์ดและความรุ่งโรจน์สำหรับการบรรลุผลนั้น แต่ฉันบอกว่าวิธีการเฉพาะสำหรับการกระจายซึ่งเกี่ยวข้องกับการเปลี่ยนระบบ init และสคริปต์แฮ็คบุคคลที่สามที่ถูกผลักเข้าไปในไดเรกทอรีระบบที่มีเส้นทางที่อ่านไม่ได้ คำถามการใช้ไฟล์รหัสผ่าน จุดเด่นที่ไม่น่าเชื่อสำหรับซอฟต์แวร์เหล่านี้คือ
2559

@danet ฉันเห็นด้วยอย่างเต็มที่และฉันหวังว่าจะมีใครบางคนเข้ามาและเพิ่มคำตอบที่อธิบายถึงวิธีการใช้วิธีที่ง่ายกว่านี้ จากนั้น OP สามารถเลือกรายการโปรดของพวกเขา
Celada

dbanet และ @Celada ความคิดของฉัน นี่มันซับซ้อนเกินไปและแม้ว่าฉันจะทำสิ่งนี้ได้มันเป็นกรรมสิทธิ์ซึ่งหมายความว่าผู้ขายรายอื่นจะมีวิธีอื่น :(
Nithin

3

เป็นไปได้ที่จะเก็บรหัสผ่าน luks ไว้ในไฟล์

ฉันใช้สิ่งนี้กับคอมพิวเตอร์ที่บ้าน ระบบไฟล์รูทอาศัยอยู่ในวอลลุ่มปกติที่ฉันปลดล็อกด้วยข้อความรหัสผ่านเมื่อบูต ไดรฟ์เพิ่มเติมประกอบด้วยไดรฟ์ข้อมูล luks ด้วยรหัสผ่านที่สร้างขึ้น

ไดรฟ์ข้อมูลเพิ่มเติมนี้ถูกปลดล็อกโดยไฟล์รหัสผ่านซึ่งอยู่ในระบบไฟล์รากที่เข้ารหัส มันจะถูกปลดล็อคโดยอัตโนมัติในระหว่างการบูตหากระบบไฟล์รากถูกปลดล็อค

/etc/crypttabหน้าตาของฉันเป็นแบบนี้:

crypt-root UUID=c5a2cf25-0aae-457e-874f-fca7ea3d5742 none luks
crypt-data UUID=96d79323-246d-49e0-9149-ec3a4cfc1c1e /etc/crypt-data.key luks

ฟิลด์ที่สามคือ keyfile noneสำหรับระบบไฟล์รูท แต่/etc/crypt-data.keyสำหรับระบบไฟล์ข้อมูล /etc/crypt-data.keyมีรหัสผ่าน luks:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

หมายเหตุการขึ้นบรรทัดใหม่หรือพื้นที่สีขาวอื่น ๆ จะถูกใช้เป็นส่วนหนึ่งของรหัสผ่าน! ระมัดระวังในการสร้างไฟล์นี้โดยไม่ขึ้นบรรทัดใหม่ นอกจากนี้ตรวจสอบให้แน่ใจว่ามีสิทธิ์ที่เข้มงวด:

-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key

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


คุณสามารถพูดถึงวิธีการกำหนดค่า LUKS ให้ใช้ keyfile แทนรหัสผ่านได้หรือไม่?
Nithin

@Nithin keyfile /etc/crypttabเป็นเขตที่สามในตัวอย่างของฉัน ฉันเพิ่มข้อความพิเศษเล็กน้อยเพื่อให้ชัดเจนขึ้น
marcelm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.