Linux統一金鑰設定
Linux統一金鑰設定(英語:Linux Unified Key Setup,縮寫:LUKS)是由Clemens Fruhwirth在2004年爲Linux開發的磁碟加密規範。LUKS實現了可用於各種工具上的跨平臺標準磁碟加密格式,促進了不同工具之間的相容性和互操作性,確保它們都以安全和統一的方式實施密碼管理。[2]
原作者 | Clemens Fruhwirth |
---|---|
目前版本 | 2.3.4[1](2020年9月3日,4年前) |
程式語言 | C語言 |
作業系統 | 見#作業系統支援 |
類型 | 磁碟加密 |
許可協定 | GNU較寬鬆公共授權條款第2.1版 |
網站 | gitlab |
簡介
LUKS的用途是加密裝置檔案系統。被加密的內容無需是某種格式,因此任何檔案系統都可以被加密,甚至包括虛擬記憶體分割區。[3]在每個已加密的磁碟的頭部,均有未加密的部分用以承載加密金鑰[註 1]以及諸如加密類型和金鑰大小等加密參數。[4][5]
磁碟頭部承載的加密金鑰是LUKS和plain dm-crypt的主要分別。LUKS允許使用多個不同的密碼解密同一個磁碟,也可以隨時輕易的修改或移除之。但是如果磁碟頭部被損壞,則不可能復原被加密的資料。[6]
加密的過程使用了多層加密:首先,資料被主金鑰加密,然後主金鑰被複製多份,分別被不同的使用者金鑰加密,最後被加密的主金鑰均被儲存到磁碟中。[7]通常,使用者金鑰是密碼片語,但其他加密方式例如OpenPGP公開金鑰或者X.509數位憑證也可使用。PGP公開金鑰可以與被連接到主機的OpenPGP智慧卡合併使用。[8][9]這種分層加密方法被稱爲TKS1。[10][11]
LUKS有兩個版本:LUKS1以及LUKS2。LUKS1默認使用PBKDF2加密,而LUKS2默認使用Argon2;LUKS2也具備對磁碟頭部損壞的彈性。[12]在兩個LUKS版本之間切換或許可能,但某些功能(例如Argon2)未必能在LUKS1上使用。[4]LUKS2使用JSON作爲其元資料儲存格式。[4][13]
可用的加密演算法取決於核心的支援。Libgcrypt支援所有LUKS支援的加密演算法,可以作爲雜湊的後端。[14]默認加密演算法由作業系統決定。[15]LUKS1使用一種名爲AFsplitter的反電腦鑑證技術,以保護檔案以及確保檔案能夠被徹底抹除。
在LVM上使用LUKS
- LUKS加密的LVM
- 類似直接分割一個LUKS加密卷,LUKS可以直接加密整個LVM物理卷,允許之中的所有邏輯卷被單一金鑰加密。LVM物理卷的架構在解密之前不可見。[17]
- LUKS加密的LVM邏輯卷
- 如果LUKS被用於加密單一LVM邏輯卷,其可以分佈於多個物理卷上。LVM物理卷的架構在解密之前已經可見。[18]
對整個磁碟加密
LUKS常用於對整個磁碟加密,包括加密作業系統的根目錄,以保護所有資料免被具有物理存取權限的攻擊者或未獲授權的第三方存取或修改。[16]
在Linux系統上,爲防止第三方篡改Linux核心,引導分割區可以在引導程式支援LUKS的前提下同樣被加密。[註 2]但是,第一階段引導程式以及EFI系統分割區無法被如此加密。[16]
加密家目錄
作業系統支援
LUKS的參考實作是在Linux上運行的修改版cryptsetup
,並使用dm-crypt
作爲加密後端。在Microsoft Windows,LUKS加密的磁碟以前可以通過LibreCrypt存取,[21]但已因安全漏洞而棄用;[22][23]現在則可以通過適用於Linux的Windows子系統使用。[24]DragonFly BSD支援LUKS。[25]
安裝程式支援
部分Linux發行版的安裝程式可以在安裝時對整個磁碟加密,包括Calamares[26],Ubiquity[27]以及Debian安裝程式[28]。
磁碟格式
LUKS磁碟頭是向前相容的,新版的LUKS可以讀取舊版LUKS的磁碟頭。
LUKS2
LUKS2裝置以二進制標頭開頭,旨在讓blkid更容易進行識別。LUKS2磁碟頭的所有字串資料均是以null標記完結的字串。JSON資料區緊接在二進制標頭後,當中儲存了LUKS的設定、金鑰以及加密細節。LUKS2金鑰槽的二進制格式與LUKS1大致相似,但允許個別金鑰槽的演算法(例如不同的PBKDF)。LUKS2包含另一種金鑰以在在重新加密過程中斷的情況下允許冗餘。[13]
使用範例
本章節使用LUKS的參考實作cryptsetup
來示範操作。
加密裝置/dev/sda1
:
# cryptsetup luksFormat /dev/sda1
解密已被LUKS加密的同一磁碟,而name
是對映的裝置名稱:
# cryptsetup luksOpen /dev/sda1 name
重新加密
對LUKS容器的重新加密可以使用cryptsetup
或者舊工具cryptsetup-reencrypt
實現。這些工具也可以用來加密先前未加密的磁碟,或永久解密已加密的磁碟。[14][29]兩個方法所適用的命令語法相近:
# # 使用 cryptsetup
# cryptsetup reencrypt /dev/sda1
# # 使用 cryptsetup-reencrypt
# cryptsetup-reencrypt /dev/sda1
參見
備註
參考來源
- ^ https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/v2.3/v2.3.4-ReleaseNotes.
- ^ Fruhwirth, Clemens. LUKS On-Disk Format Specification Version 1.2.3 (PDF). 2018-01-20 [2021-09-23]. (原始內容存檔 (PDF)於2023-04-12).
- ^ Encrypting drives using LUKS. Fedora Docs. [6 May 2022]. (原始內容存檔於2023-06-10).
- ^ 4.0 4.1 4.2 Chapter 12. Encrypting block devices using LUKS. Red Hat Customer Portal. [2023-04-12]. (原始內容存檔於2023-04-17).
- ^ How to Encrypt Hard Disk (partition) using LUKS in Linux. 27 February 2019 [2023-04-12]. (原始內容存檔於2023-04-12).
- ^ How to Encrypt Your Data with dm-crypt. Linode. [2023-04-12]. (原始內容存檔於2023-04-17).
- ^ Bossi, Simone; Visconti, Andrea. What Users Should Know About Full Disk Encryption Based on LUKS (PDF). 2015 [2023-04-12]. (原始內容存檔 (PDF)於2021-05-06).
- ^ Full-Disk Encryption With cryptsetup/LUKS. [6 May 2022]. (原始內容存檔於2023-05-21).
- ^ How to encrypt a LUKS container using a smart card or token. 20 April 2014 [2023-04-12]. (原始內容存檔於2023-05-18).
- ^ TKS1 · Wiki · cryptsetup / cryptsetup · GitLab. GitLab. [2023-04-12]. (原始內容存檔於2023-04-12) (英語).
- ^ Fruhwirth, Clemens. TKS1 – An anti-forensic, two level, and iterated key setup scheme (PDF). Draft. 2004-07-15 [2021-09-23]. (原始內容存檔 (PDF)於2023-04-12).
- ^ How LUKS works with Full Disk Encryption in Linux. 25 September 2021 [2023-04-12]. (原始內容存檔於2023-04-12).
- ^ 13.0 13.1 on-disk-format-luks2.pdf (PDF). [2023-04-12]. (原始內容存檔 (PDF)於2023-04-12).
- ^ 14.0 14.1 Linux系統管理員工具(Administration and Privileged Commands)手冊頁 –
- ^ Breaking LUKS Encryption. eForensics. 21 August 2020 [2023-04-12]. (原始內容存檔於2023-06-04).
- ^ 16.0 16.1 16.2 dm-crypt/Encrypting an entire system. [6 May 2022]. (原始內容存檔於2023-06-10).
- ^ Arch with LVM on LUKS. [2023-04-12]. (原始內容存檔於2023-04-17).
- ^ LUKS on LVM: encrypted logical volumes and secure backups. 12 September 2014 [2023-04-12]. (原始內容存檔於2023-04-17).
- ^ GRUB - ArchWiki. wiki.archlinux.org. [2023-04-12]. (原始內容存檔於2023-06-11).
- ^ Home Directories. systemd. [2023-04-12]. (原始內容存檔於2023-06-08).
- ^ LibreCrypt. GitHub. 27 July 2022 [2023-04-12]. (原始內容存檔於2018-05-16).
- ^ Flaw in driver allows privilege escalation. Feedback wanted · Issue #38 · t-d-k/LibreCrypt. GitHub. 30 September 2015 [2023-04-12]. (原始內容存檔於2023-03-20).
- ^ Driver allows writing to arbitrary devices · Issue #39 · t-d-k/LibreCrypt. GitHub. 7 October 2015 [2023-04-12]. (原始內容存檔於2023-03-20).
- ^ Servicing the Windows Subsystem for Linux (WSL) 2 Linux Kernel. Microsoft Developer Blogs. 16 April 2021 [2023-04-12]. (原始內容存檔於2023-05-22).
- ^ DragonFly's Major Features List. [6 May 2022]. (原始內容存檔於2023-05-13).
- ^ Michael Larabel. Calamares Installer Adds LUKS Encryption Support. Phoronix. 8 May 2016 [2023-04-12]. (原始內容存檔於2022-05-21).
- ^ How to Encrypt Your Hard Disk in Ubuntu. Make Tech Easier. 13 January 2017 [2023-04-12]. (原始內容存檔於2023-05-11).
- ^ PartmanCrypto. Debian Wiki. [6 May 2022]. (原始內容存檔於2023-04-12).
- ^ CRYPTSETUP-REENCRYPT(8) Man page. man7.org. [2023-04-12]. (原始內容存檔於2023-05-10).