Linux统一密钥设置

Linux统一密钥设置(英语:Linux Unified Key Setup,缩写:LUKS)是由Clemens Fruhwirth在2004年为Linux开发的磁碟加密规范。LUKS实现了可用于各种工具上的跨平台标准磁碟加密格式,促进了不同工具之间的兼容性和互操作性,确保它们都以安全和统一的方式实施密码管理。[2]

Linux统一密钥设置
Debian安装程序,显示了使用整个磁碟,设置LVM并将之使用LUKS加密的选项
Debian安装程序,显示了使用整个磁碟,设置LVM并将之使用LUKS加密的选项
原作者Clemens Fruhwirth
当前版本2.3.4[1]在维基数据编辑(2020年9月3日,4年前)
编程语言C语言
操作系统#操作系统支持
类型磁碟加密
许可协议GNU宽通用公共许可证第2.1版
网站gitlab.com/cryptsetup/cryptsetup 编辑维基数据

简介

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英语Argon2;LUKS2也具备对磁碟头部损坏的弹性。[12]在两个LUKS版本之间切换或许可能,但某些功能(例如Argon2)未必能在LUKS1上使用。[4]LUKS2使用JSON作为其元数据单元格式。[4][13]

可用的加密算法取决于内核的支持。Libgcrypt英语Libgcrypt支持所有LUKS支持的加密算法,可以作为散列的后端。[14]默认加密算法由操作系统决定。[15]LUKS1使用一种名为AFsplitter的反电脑鉴证技术,以保护文件以及确保文件能够被彻底抹除英语Data erasure

在LVM上使用LUKS

逻辑卷管理员(LVM)可以与LUKS并用。[16]

LUKS加密的LVM
类似直接分割一个LUKS加密卷,LUKS可以直接加密整个LVM物理卷,允许之中的所有逻辑卷被单一密钥加密。LVM物理卷的架构在解密之前不可见。[17]
LUKS加密的LVM逻辑卷
如果LUKS被用于加密单一LVM逻辑卷,其可以分布于多个物理卷上。LVM物理卷的架构在解密之前已经可见。[18]

对整个磁碟加密

LUKS常用于对整个磁碟加密,包括加密操作系统的根目录,以保护所有资料免被具有物理存取权限的攻击者未获授权的第三方英语Adversary (cryptography)存取或修改。[16]

在Linux系统上,为防止第三方篡改Linux内核引导分区可以在引导程序英语Bootloader支持LUKS的前提下同样被加密。[注 2]但是,第一阶段引导程序以及EFI系统分区无法被如此加密。[16]

加密家目录

在运行systemd的系统上,systemd-homed可以用以加密个别家目录[20]

操作系统支持

LUKS的参考实现是在Linux上运行的修改版cryptsetup,并使用dm-crypt作为加密后端。在Microsoft Windows,LUKS加密的磁碟以前可以通过LibreCrypt存取,[21]但已因安全漏洞而弃用;[22][23]现在则可以通过适用于Linux的Windows子系统使用。[24]DragonFly BSD支持LUKS。[25]

安装程序支持

部分Linux发行版的安装程序可以在安装时对整个磁碟加密,包括Calamares英语Calamares (software)[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

参见

备注

  1. ^ 在LUKS1加密磁碟中可以承载至多8个密钥,在LUKS2上则是32个。
  2. ^ GRUB是一个支持LUKS的引导程序的例子。[19]

参考来源

  1. ^ https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/v2.3/v2.3.4-ReleaseNotes.
  2. ^ Fruhwirth, Clemens. LUKS On-Disk Format Specification Version 1.2.3 (PDF). 2018-01-20 [2021-09-23]. (原始内容存档 (PDF)于2023-04-12). 
  3. ^ Encrypting drives using LUKS. Fedora Docs. [6 May 2022]. (原始内容存档于2023-06-10). 
  4. ^ 4.0 4.1 4.2 Chapter 12. Encrypting block devices using LUKS. Red Hat Customer Portal. [2023-04-12]. (原始内容存档于2023-04-17). 
  5. ^ How to Encrypt Hard Disk (partition) using LUKS in Linux. 27 February 2019 [2023-04-12]. (原始内容存档于2023-04-12). 
  6. ^ How to Encrypt Your Data with dm-crypt. Linode. [2023-04-12]. (原始内容存档于2023-04-17). 
  7. ^ Bossi, Simone; Visconti, Andrea. What Users Should Know About Full Disk Encryption Based on LUKS (PDF). 2015 [2023-04-12]. (原始内容存档 (PDF)于2021-05-06). 
  8. ^ Full-Disk Encryption With cryptsetup/LUKS. [6 May 2022]. (原始内容存档于2023-05-21). 
  9. ^ How to encrypt a LUKS container using a smart card or token. 20 April 2014 [2023-04-12]. (原始内容存档于2023-05-18). 
  10. ^ TKS1 · Wiki · cryptsetup / cryptsetup · GitLab. GitLab. [2023-04-12]. (原始内容存档于2023-04-12) (英语). 
  11. ^ 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). 
  12. ^ How LUKS works with Full Disk Encryption in Linux. 25 September 2021 [2023-04-12]. (原始内容存档于2023-04-12). 
  13. ^ 13.0 13.1 on-disk-format-luks2.pdf (PDF). [2023-04-12]. (原始内容存档 (PDF)于2023-04-12). 
  14. ^ 14.0 14.1 cryptsetup(8) – Linux系统管理员工具(Administration and Privileged Commands)手册页
  15. ^ Breaking LUKS Encryption. eForensics. 21 August 2020 [2023-04-12]. (原始内容存档于2023-06-04). 
  16. ^ 16.0 16.1 16.2 dm-crypt/Encrypting an entire system. [6 May 2022]. (原始内容存档于2023-06-10). 
  17. ^ Arch with LVM on LUKS. [2023-04-12]. (原始内容存档于2023-04-17). 
  18. ^ LUKS on LVM: encrypted logical volumes and secure backups. 12 September 2014 [2023-04-12]. (原始内容存档于2023-04-17). 
  19. ^ GRUB - ArchWiki. wiki.archlinux.org. [2023-04-12]. (原始内容存档于2023-06-11). 
  20. ^ Home Directories. systemd. [2023-04-12]. (原始内容存档于2023-06-08). 
  21. ^ LibreCrypt. GitHub. 27 July 2022 [2023-04-12]. (原始内容存档于2018-05-16). 
  22. ^ Flaw in driver allows privilege escalation. Feedback wanted · Issue #38 · t-d-k/LibreCrypt. GitHub. 30 September 2015 [2023-04-12]. (原始内容存档于2023-03-20). 
  23. ^ Driver allows writing to arbitrary devices · Issue #39 · t-d-k/LibreCrypt. GitHub. 7 October 2015 [2023-04-12]. (原始内容存档于2023-03-20). 
  24. ^ Servicing the Windows Subsystem for Linux (WSL) 2 Linux Kernel. Microsoft Developer Blogs. 16 April 2021 [2023-04-12]. (原始内容存档于2023-05-22). 
  25. ^ DragonFly's Major Features List. [6 May 2022]. (原始内容存档于2023-05-13). 
  26. ^ Michael Larabel. Calamares Installer Adds LUKS Encryption Support. Phoronix. 8 May 2016 [2023-04-12]. (原始内容存档于2022-05-21). 
  27. ^ How to Encrypt Your Hard Disk in Ubuntu. Make Tech Easier. 13 January 2017 [2023-04-12]. (原始内容存档于2023-05-11). 
  28. ^ PartmanCrypto. Debian Wiki. [6 May 2022]. (原始内容存档于2023-04-12). 
  29. ^ CRYPTSETUP-REENCRYPT(8) Man page. man7.org. [2023-04-12]. (原始内容存档于2023-05-10). 

外部链接