Có thể mã hóa một đĩa cứng bằng một tệp chính thay vì mật khẩu?


14

Nhìn vào mã hóa đĩa cứng. giải pháp đi đến dường như là dm-crypt với LUKS bằng mật khẩu. Tôi làm việc với nhiều đĩa cứng độc lập được gắn vào một nhóm đĩa để đọc. Trong trường hợp này, tôi phải gõ mật khẩu nhiều lần.

Có cách nào để tôi mã hóa các đĩa cứng bằng một tệp chính, có thể đặt nó vào ổ USB và chỉ cần cắm nó khi cần thiết ??

Câu trả lời:


11

Một trong những cách tốt nhất để làm điều này là sử dụng thẻ thông minh có khóa mật mã trên đó để mở khóa cho các thiết bị khối được mã hóa của bạn. Bạn sẽ chỉ cần nhập cụm mật khẩu (được gọi là "PIN" bởi các công cụ nhưng nó thực sự là cụm mật khẩu) một lần, sau đó nó sẽ được lưu vào bộ đệm. Điều này có thêm lợi thế là bảo vệ dữ liệu được mã hóa bằng thứ gì đó bạn có (chính thẻ thông minh, trong đó khóa riêng không thể trích xuất được) và thứ gì đó bạn biết (cụm mật khẩu).

Định dạng của bạn /etc/crypttabnhư thế này:

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

Trong Debian và các công cụ phái sinh, các công cụ initramfs sẽ chú ý đến keycript và sao chép tất cả các công cụ và trình nền cần thiết để tự động truy cập thẻ thông minh vào initramfs.

Thông tin về cách thiết lập thẻ thông minh và tạo (và mã hóa) các khóa được tìm thấy trong /usr/share/doc/cryptsetup/README.opensc.gz.

Bạn có thể sử dụng Yubikey 4 hoặc Yubikey NEO trong số những mục đích khác.

Ghi chú thực hiện : Tính năng này có các cạnh gồ ghề và dường như không hoạt động ngoài hộp nên YMMV. Lần cuối cùng tôi đạt được thành công, tôi đã phải thêm các bản hack sau:

  • Vô hiệu hóa systemdvì nó cố gắng chiếm lấy toàn bộ quá trình thiết lập các thiết bị được mã hóa từ /etc/crypttabnhưng nó không biết gì về keyscriptđiều đó dẫn đến một FAIL lớn. May mắn thay, trong Debian, bạn vẫn có thể từ chối systemd.
  • Cài đặt tập lệnh sửa lỗi trên này /etc/initramfs-tools/hooks/yubipinvì tính năng tích hợp sẵn không cài đặt đủ hỗ trợ để có thể sử dụng Yubikey từ initramfs. Bạn có thể cần phải điều chỉnh điều này.

    #!/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"
    
  • Cài đặt tập lệnh khác /etc/initramfs-tools/scripts/local-bottom/killpcscdđể dọn dẹp:

    #!/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
Rất khuyến khích sử dụng thẻ thông minh và danh tiếng để đạt được điều đó, nhưng tôi muốn nói rằng một phương pháp dành riêng cho phân phối bao gồm thay đổi hệ thống init và các tập lệnh hack của bên thứ ba được đưa vào các thư mục hệ thống với các đường dẫn không thể đọc được có thể được coi là một câu trả lời cho cách để sử dụng tập tin mật mã câu hỏi. Điểm nổi bật là sự lộn xộn đáng kinh ngạc của các phần mềm này, tho.
dbanet

@dbanet, tôi hoàn toàn đồng ý và tôi hy vọng rằng ai đó sẽ đi cùng và thêm câu trả lời mô tả cách thực hiện việc này theo một cách đơn giản khác. Sau đó, OP có thể chọn yêu thích của họ.
Celada

dbanet và @Celada, chính xác là suy nghĩ của tôi. Điều này là quá phức tạp và ngay cả khi tôi quản lý để làm điều này, độc quyền của nó, có nghĩa là một nhà cung cấp khác sẽ có một phương pháp khác. :(
Nithin

3

Có thể chỉ cần lưu mật khẩu luks trong một tệp.

Tôi sử dụng nó trên máy tính ở nhà của tôi; Hệ thống tập tin gốc nằm trên một khối lượng thông thường mà tôi mở khóa bằng cụm mật khẩu của mình khi khởi động. Một ổ đĩa bổ sung chứa một khối lượng luks với mật khẩu được tạo.

Khối lượng bổ sung này được mở khóa bằng một tệp mật khẩu nằm trên hệ thống tệp gốc được mã hóa. Nó được tự động mở khóa trong khi khởi động nếu hệ thống tập tin gốc được mở khóa.

Tôi /etc/crypttabtrông như thế này:

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

Trường thứ ba là keyfile, nonecho hệ thống tập tin gốc, nhưng /etc/crypt-data.keycho hệ thống tập tin dữ liệu. /etc/crypt-data.keychứa mật khẩu luks:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

Lưu ý, một dòng mới hoặc bất kỳ khoảng trắng nào khác sẽ được lấy làm một phần của mật khẩu! Hãy cẩn thận để tạo tập tin này mà không theo dõi dòng mới. Ngoài ra, đảm bảo nó có quyền nghiêm ngặt:

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

Bạn sẽ có thể sao chép phương pháp này cho nhiều khối lượng (với mật khẩu riêng biệt hoặc một mật khẩu được chia sẻ, lựa chọn của bạn).


bạn cũng có thể đề cập đến cách cấu hình LUKS để sử dụng keyfile thay vì mật khẩu không?
Nithin

@Nithin Keyfile là trường thứ ba trong ví dụ của tôi /etc/crypttab. Tôi đã thêm một chút văn bản để làm cho rõ ràng hơn.
marcelm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.