Một nhóm có tên PrivacyIdea đã tạo ra một gói nhỏ để thêm thói quen phản hồi thử thách HMAC-SHA1 vào initramfs, điều đó có nghĩa là Ubuntu có thể truy vấn bạn về một thách thức để chuyển đến Yubikey và sau đó sử dụng phản hồi để mở khóa âm lượng LUKS. Đối với hầu hết các phần, tôi đang làm theo các hướng dẫn này , với một số ý kiến được thêm vào. Quá trình này thực sự rất dễ dàng để làm.
Tôi đã thử nghiệm điều này trên Ubuntu 14.04, 16.04 và 18.04; sử dụng Neo Yubikey. Nó sẽ hoạt động với mọi Yubikey gần đây, với firmware 2.0+ và với bất kỳ phiên bản Ubuntu nào sau ngày 14.04. Tôi cũng đã thử nghiệm Ubuntu 19.04 với Yubikey 5C, một số công việc bổ sung là cần thiết nhưng nó có thể được thực hiện để hoạt động. Cũng có thể có các thiết bị phản ứng thách thức phần cứng HMAC-SHA1 khác mà thiết bị này hoạt động cùng, nhưng tôi không biết bất kỳ thiết bị nào tồn tại. Như mọi khi, hãy đảm bảo bạn có bản sao lưu dữ liệu trước khi tiếp tục - không nên có bất kỳ vấn đề nào ở đây, nhưng luôn có khả năng điều này sẽ phá hủy mọi thứ trên máy tính của bạn. Các hướng dẫn này không có bảo hành.
Cập nhật: Kể từ Ubuntu 16.04, các gói cần thiết nằm trong kho chính và không cần PPA.
Thêm một bình luận nếu bạn có câu hỏi!
0. Điều kiện tiên quyết
Để làm việc này, bạn sẽ phải thiết lập và hoạt động mã hóa toàn bộ đĩa LUKS. Bạn có thể làm điều này bằng cách chọn tùy chọn thích hợp khi cài đặt Ubuntu. Để bảo mật tối đa, bạn nên có một cụm mật khẩu rất mạnh được chọn trong quá trình cài đặt. Nếu cụm mật khẩu của bạn không bị trầy xước, bạn nên thay đổi nó thành một cụm từ tốt hơn trước khi tiếp tục ( hướng dẫn chi tiết hơn tại đây ).
Phương pháp bên dưới sẽ không thay thế bất kỳ cụm mật khẩu hiện có nào, mà thay vào đó sẽ thêm một cụm mật khẩu khác vào một trong các vị trí LUKS. Do đó, nếu bạn mất Yubikey, bạn vẫn có thể mở khóa máy tính của mình bằng bất kỳ cụm mật khẩu hiện có - Tôi khuyên bạn nên ghi chú lại và giấu nó đi đâu đó an toàn - bạn cũng sẽ cần vài lần trong quy trình này. Cụm mật khẩu thử thách Yubikey mới của bạn vẫn phải mạnh một cách hợp lý, nhưng không nhất thiết phải là cụm mật khẩu bạn đã sử dụng khi cài đặt Ubuntu.
1. Thêm PrivacyIdea PPA và cài đặt gói
Trên Ubuntu 14.04
Mở một thiết bị đầu cuối và chạy lệnh sau:
sudo add-apt-repository ppa:privacyidea/privacyidea
Nhấn Enter khi được nhắc, sau đó chạy:
sudo apt-get update
Sau đó cài đặt gói với:
sudo apt-get install yubikey-luks
Trên Ubuntu 16.04, 18.04
Không cần PPA, bạn có thể cài đặt gói với:
sudo apt-get install yubikey-luks
Trên Ubuntu 19.04
Xem câu trả lời này để biết cách xây dựng yubikey-luks
gói từ nguồn cho Ubuntu 19.04.
2. Cài đặt phần mềm Yubikey
Nếu bạn đang sử dụng chức năng HMAC-SHA1 của Yubikey cho mục đích khác, bạn có thể bỏ qua phần này. Nó sẽ xóa bất kỳ cấu hình nào trong khe Yubikey thứ hai, vì vậy đừng thực hiện bước này nếu bạn sử dụng HMAC-SHA1 cho các mục đích khác với Yubikey này.
Bạn sẽ cần thiết lập Yubikey của mình để hoạt động với Ubuntu bằng cách cài đặt phần mềm cần thiết, từ Yubico PPA trên Ubuntu 14.04 hoặc từ kho lưu trữ Ubuntu chính vào ngày 16.04 trở đi.
Trên Ubuntu 14.04
Nếu bạn chưa làm như vậy trước đây, hãy thêm PPA và cài đặt gói với:
sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization
Trên Ubuntu 16.04, 18.04 (và sau đó)
sudo apt-get install yubikey-personalization
3. Khởi tạo Khe Yubikey cho HMAC-SHA1
Bây giờ chúng ta cần lập trình khe thứ hai của Yubikey với cấu hình HMAC-SHA1. Điều này sẽ xóa cấu hình khe trước đó của bạn, mặc định trống. Một lần nữa, nếu bạn đang sử dụng HMAC-SHA1 cho một thứ khác thì không ban hành lệnh này - nó sẽ xóa cấu hình của bạn. Bạn có thể sử dụng cùng một khóa bí mật bên trong Yubikey cho thiết lập LUKS này như cho các mục đích sử dụng khác của bạn. (Ví dụ: với một máy tính khác sử dụng LUKS + Yubikey).
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
Thiết bị đầu cuối sẽ hiển thị một số thông tin về những thay đổi được thực hiện. Bạn không cần lưu ý điều này, nhưng nó sẽ hiển thị khóa bí mật được sử dụng bởi Yubikey trong thuật toán HMAC-SHA1 để tính toán phản hồi khi đưa ra thử thách.
4. Đăng ký Yubikey vào LUKS Slot
Bây giờ chúng tôi sẽ chỉnh sửa cấu hình LUKS để nối thêm phản hồi từ Yubikey như một trong các khóa giải mã.
Phân vùng mà chúng tôi cần chỉ định tùy thuộc vào việc bạn đang sử dụng BIOS hay UEFI để khởi động máy của mình. Đối với BIOS, âm lượng được mã hóa /dev/sda5
theo mặc định, đối với UEFI là ở mức /dev/sda3
. Bạn có thể kiểm tra điều này bằng cách mở disks
tiện ích và xác nhận đường dẫn của phân vùng - nó sẽ là sda3
hoặc sda5
. LƯU Ý: Trên các máy tính mới hơn có đĩa NVMe, đường dẫn sẽ giống như thế /dev/nvme0n1p3
.
Chạy cái này trong một thiết bị đầu cuối:
sudo yubikey-luks-enroll -d /dev/sda3 -s 7
Điều này sẽ ghi vào khe 7 của cấu hình LUKS, làm theo lời nhắc trong trình cài đặt (chúng thay đổi một chút tùy thuộc vào phiên bản bạn đang chạy).
Vậy là xong rồi! Bạn sẽ có thể khởi động lại máy tính của mình và nếu Yubikey của bạn được chèn thì bạn có thể nhập mật khẩu thử thách và sử dụng Yubikey làm yếu tố thứ hai để mở khóa phân vùng LUKS và khởi động hệ thống. Khi bạn đã giải mã được ổ cứng, bạn có thể xóa Yubikey.
Nếu bạn mất Yubikey, bạn vẫn có thể nhập cụm mật khẩu gốc (hy vọng rất dài) để giải mã ổ cứng, và sau đó bạn có thể làm lại quy trình này để đăng ký Yubikey mới.
Thay đổi cụm mật khẩu thử thách mã hóa
Thay đổi mật khẩu vào một ngày sau đó khá đơn giản, chỉ cần sử dụng lệnh này để đặt lại khóa bí mật. Không nhất thiết phải thiết lập lại khóa bí mật, nhưng nó sẽ không bị tổn thương. Hãy nhớ rằng điều này sẽ phá hủy khóa bí mật trước đó, đừng làm điều này nếu bạn sử dụng HMAC-SHA1 cho một cái gì đó khác với Yubikey này. (Ví dụ: với một máy tính khác sử dụng LUKS + Yubikey).
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
Sau đó, tương tự như Bước 4 , ở trên, để đăng ký mật khẩu mới vào khe khóa LUKS, ngoại trừ chọn không xóa Khe 7 bằng lệnh này:
sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c
Khi được nhắc Enter any remaining passphrase
, hãy sử dụng cụm mật khẩu dự phòng của bạn - không phải cụm mật khẩu thách thức Yubikey. Sau đó, nhập cụm mật khẩu thử thách Yubikey mới , hai lần, cuối cùng bạn sẽ cần nhập cụm mật khẩu dự phòng lần cuối.
Bây giờ mật khẩu thử thách Yubikey cũ của bạn đã bị xóa và chỉ có mật khẩu mới của bạn mới giải mã được ổ cứng. Cụm mật khẩu sao lưu trước đó của bạn vẫn sẽ giống nhau. Bạn có thể thay đổi cụm mật khẩu đó bằng cách theo các liên kết trong Bước 0 .
Lưu ý về ý nghĩa bảo mật
Thêm một Yubikey sẽ thêm một mức bảo mật nhất định vào hệ thống của bạn - ai đó phải biết cả cụm mật khẩu thách thức và để Yubikey của bạn có thể mở khóa ổ cứng của bạn (hoặc tìm cụm mật khẩu ban đầu mà bạn hiện đang sử dụng làm bản sao lưu) . Tuy nhiên, về mặt kỹ thuật, kẻ tấn công có thể giải mã ổ cứng nếu họ biết cụm mật khẩu thách thức của bạn (ví dụ: bằng cách "lướt vai" trong khi bạn nhập nó) và có thể truy cập vào Yubikey của bạn chỉ trong một thời gian ngắn. Sử dụng cụm mật khẩu thách thức, họ có thể nhận được phản hồi từ Yubikey và lưu trữ nó, sau đó sử dụng nó để giải mã ổ cứng bất cứ lúc nào mà không cần Yubikey. Hoặc, một lần nữa nếu kẻ tấn công hoặc một phần mềm độc hại biết cụm mật khẩu của bạn và có thể chạy mã trên máy được kết nối với Yubikey của bạn, họ cũng có thể đưa ra thử thách và lưu trữ phản hồi. Do đó, điều cực kỳ quan trọng là phải thận trọng khi nhập cụm mật khẩu thử thách của bạn và để đảm bảo rằng bạn luôn có Yubikey ở một vị trí an toàn. Bạn cũng chỉ nên cắm nó vào một chiếc máy mà bạn tin tưởng. Nếu bạn mất dấu Yubikey và nghi ngờ ai đó có thể đã sử dụng nó để cố gắng học khóa giải mã, hãy thực hiện lại bước 2 và 3 để đặt lại khóa bí mật bên trong Yubikey và chọn cụm mật khẩu thử thách mới. Lưu ý rằng nếu đối thủ đã tìm cách học một trong các cụm mật khẩu của bạn (phản hồi HMAC-SHA1 từ Yubikey hoặc bản sao lưu của bạn) thì họ có thể tạo bản sao lưu của khóa chính LUKS, sau đó sử dụng nó để giải mã ổ cứng của bạn ngay cả khi bạn thay đổi cụm mật khẩu trong tương lai. và để đảm bảo rằng bạn luôn có Yubikey ở một vị trí an toàn. Bạn cũng chỉ nên cắm nó vào một chiếc máy mà bạn tin tưởng. Nếu bạn mất dấu Yubikey và nghi ngờ ai đó có thể đã sử dụng nó để cố gắng học khóa giải mã, hãy thực hiện lại bước 2 và 3 để đặt lại khóa bí mật bên trong Yubikey và chọn cụm mật khẩu thử thách mới. Lưu ý rằng nếu đối thủ đã tìm cách học một trong các cụm mật khẩu của bạn (phản hồi HMAC-SHA1 từ Yubikey hoặc bản sao lưu của bạn) thì họ có thể tạo bản sao lưu của khóa chính LUKS, sau đó sử dụng nó để giải mã ổ cứng của bạn ngay cả khi bạn thay đổi cụm mật khẩu trong tương lai. và để đảm bảo rằng bạn luôn có Yubikey ở một vị trí an toàn. Bạn cũng chỉ nên cắm nó vào một chiếc máy mà bạn tin tưởng. Nếu bạn mất dấu Yubikey và nghi ngờ ai đó có thể đã sử dụng nó để cố gắng học khóa giải mã, hãy thực hiện lại bước 2 và 3 để đặt lại khóa bí mật bên trong Yubikey và chọn cụm mật khẩu thử thách mới. Lưu ý rằng nếu đối thủ đã tìm cách học một trong các cụm mật khẩu của bạn (phản hồi HMAC-SHA1 từ Yubikey hoặc bản sao lưu của bạn) thì họ có thể tạo bản sao lưu của khóa chính LUKS, sau đó sử dụng nó để giải mã ổ cứng của bạn ngay cả khi bạn thay đổi cụm mật khẩu trong tương lai. thực hiện lại bước 2 và 3 để đặt lại khóa bí mật bên trong Yubikey và chọn cụm mật khẩu thử thách mới. Lưu ý rằng nếu đối thủ đã tìm cách học một trong các cụm mật khẩu của bạn (phản hồi HMAC-SHA1 từ Yubikey hoặc bản sao lưu của bạn) thì họ có thể tạo bản sao lưu của khóa chính LUKS, sau đó sử dụng nó để giải mã ổ cứng của bạn ngay cả khi bạn thay đổi cụm mật khẩu trong tương lai. thực hiện lại bước 2 và 3 để đặt lại khóa bí mật bên trong Yubikey và chọn cụm mật khẩu thử thách mới. Lưu ý rằng nếu đối thủ đã tìm cách học một trong các cụm mật khẩu của bạn (phản hồi HMAC-SHA1 từ Yubikey hoặc bản sao lưu của bạn) thì họ có thể tạo bản sao lưu của khóa chính LUKS, sau đó sử dụng nó để giải mã ổ cứng của bạn ngay cả khi bạn thay đổi cụm mật khẩu trong tương lai.Trang man cho cryptsetup giải thích điều này, hãy xem phần luksHeaderBackup . Nếu bạn nghi ngờ điều này đã xảy ra thì bạn phải tạo một khối LUKS hoàn toàn mới để bảo vệ dữ liệu của bạn.