LUKS加密
LUKS简介
https://linux.cn/article-16068-1.html
LUKS 是 Linux 用户中流行的磁盘加密机制。在 Linux 上,LUKS 是最常用的磁盘加密方式。
LUKS的功能直接内置于内核中。
LUKS 有两个版本,LUKS2 具有更强的头部损坏抗击性,并默认使用 Argon2[4] 加密算法(LUKS1 使用 PBKDF2[5])。在某些情况下,可以在两个版本之间进行转换,但是 LUKS1 可能不支持某些功能。
LUKS结构示意图:
LUKS术语
卷Volume:
卷是一个逻辑存储区域,可用于存储数据。在磁盘加密的场景中卷指的是已加密以保护其内容的磁盘部分。
参数Parameters:
参数是控制加密算法运行方式的设置。参数可能包括所使用的加密算法、密钥大小以及有关如何执行加密的其他详细信息。
加密类型Cipher type**:
它是指用于加密的数学算法。它指的是用于保护加密卷上数据的具体加密算法。
密钥大小Key size:
密钥大小是衡量加密算法强度的指标:密钥大小越大,加密强度越高。通常以位数表示,例如 128 位加密或 256 位加密。
头部Header:
头部是加密卷开头的特殊区域,包含有关加密的信息,例如所使用的加密算法和加密密钥。
下一个定义对于新手来说可能有些棘手,但了解它还是很重要的,尤其在处理 LUKS 时,这会非常有用。
容器Container:
容器是一个特殊的文件,类似于虚拟加密卷。它可以用于存储加密数据,就像加密分区一样。不同之处在于容器是一个文件,可以存储在未加密的分区上,而加密分区是整个磁盘的一部分,已经完全加密。因此,容器是 充当虚拟加密卷的文件。
安装Cryptsetup
https://linuxconfig.org/basic-guide-to-encrypting-linux-partitions-with-luks?ref=its-foss
# Debian/Ubuntu安装
apt install -y cryptsetup
# CentOS安装
yum install -y cryptsetup crypto-utils cryptsetup-luks cryptsetup-luks-devel cryptsetup-luks-libs
# Fedora安装
dnf install -y crypto-utils cryptsetup cryptsetup-luks
# opensuse安装
zypper in cryptsetup
LUKS基本用法
基本选项
如下:
参数 | 解释 |
---|---|
–cypher | 这确定分区上使用的加密密码,默认选项是 aes-xts-plain64 |
–key-size | 使用的密钥的长度,默认值为 256 |
–hash | 选择用于派生密钥的哈希算法,默认为 sha256 |
–time | 密码处理所用的时间,默认值为 2000 毫秒 |
–use-random/–use-urandom | 确定使用的随机数生成器,默认值为–use-random |
创建一个加密容器
# 在设备/dev/sdb1上创建一个新的LUKS(Linux Unified Key Setup)加密容器
cryptsetup luksFormat /dev/sdb1
# 在指定的设备上创建一个新的LUKS加密容器
cryptsetup luksFormat <device>
配置加密容器的加密算法和参数
# 配置加密容器的加密算法和参数
## 指定了使用AES-XTS加密算法
## 密钥大小为512位
## 哈希算法为SHA-512
## 迭代次数为5000次
## 使用/dev/urandom生成随机数
cryptsetup -c aes-xts-plain64 --key-size 512 --hash sha512 --time 5000 --use-urandom /dev/sdb1
打开新加密设备
# 在LUKS加密容器上打开加密设备/dev/sdb1,并指定设备的名称为encrypted
## 将创建一个名为/dev/mapper/encrypted的虚拟块设备
cryptsetup open /dev/sdb1 encrypted
查看加密容器
# 显示LUKS加密容器的详细信息,包括密钥槽、加密算法和哈希算法等
cryptsetup luksDump <device>
# 显示LUKS加密容器的UUID(通用唯一标识符)
cryptsetup luksUUID <device>
# 显示指定名称的加密设备的状态信息,包括是否已打开和已使用的密钥槽等
cryptsetup status <name>:
更改密码或密钥
# 更改指定名称的加密设备的密码或密钥
cryptsetup change-key <name>
调整加密设备容量
# 调整已打开加密设备的大小,适用于扩展或缩小设备的容量
cryptsetup resize <name>
重新加密
# 对现有的LUKS加密容器进行重新加密,可以更改加密算法、密码等参数
cryptsetup reencrypt <device>
格式化加密盘
# 格式化加密盘
mkfs.ext4 /dev/mapper/encrypted
打开指定加密容器类型为LUKS
# 在加密容器/dev/sdb1上打开一个新的加密设备,指定加密容器类型为LUKS
cryptsetup --type luks open /dev/sdb1 encrypted
挂载加密盘
# 挂载磁盘
mount -t ext4 /dev/mapper/encrypted /place/to/mount
运行加密性能基准测试
# 运行一个加密性能基准测试,以评估系统的加密速度和效率
cryptsetup benchmark
关闭加密盘
# 先取消挂载
umount /place/to/mount
# 关闭指定名称的加密设备。
## 它会解除与加密设备的连接,并释放相关的资源和虚拟设备
cryptsetup close encrypted
LUKS完整用法
打开/关闭设备:
# 以指定名称的映射方式打开设备
cryptsetup open <device> [--type <type>] [<name>]
# 关闭指定名称的加密设备
cryptsetup close <name>
设备管理和操作:
# 调整已打开加密设备的大小
cryptsetup resize <name>
# 显示加密设备的状态信息
cryptsetup status <name>
# 对密码算法进行基准测试
cryptsetup benchmark [--cipher <cipher>]
# 尝试修复磁盘上的元数据
cryptsetup repair <device>
# 擦除所有密钥槽,移除加密密钥
cryptsetup erase <device>
LUKS(Linux Unified Key Setup)相关操作:
# 格式化一个LUKS设备
cryptsetup luksFormat <device> [<new key file>]
# 向LUKS设备添加密钥
cryptsetup luksAddKey <device> [<new key file>]
# 从LUKS设备中移除指定的密钥或密钥文件
cryptsetup luksRemoveKey <device> [<key file>]
# 更改LUKS设备中的指定密钥或密钥文件
cryptsetup luksChangeKey <device> [<key file>]
# 将密钥转换为新的pbkdf参数
cryptsetup luksConvertKey <device> [<key file>]
# 清除LUKS设备中指定编号的密钥槽
cryptsetup luksKillSlot <device> <key slot>
# 打印LUKS设备的UUID
cryptsetup luksUUID <device>
# 测试设备是否为LUKS分区头
cryptsetup isLuks <device>
# 显示LUKS分区的详细信息
cryptsetup luksDump <device>
其他操作:
# 显示TCRYPT设备的信息
cryptsetup tcryptDump <device>
# 暂停LUKS设备并擦除密钥
cryptsetup luksSuspend <device>
# 恢复被暂停的LUKS设备
cryptsetup luksResume <device>
# 备份LUKS设备的头和密钥槽
cryptsetup luksHeaderBackup <device>
# 恢复LUKS设备的头和密钥槽
cryptsetup luksHeaderRestore <device>
# 添加或移除密钥环令牌
cryptsetup token <add|remove> <device>