如何在Linux中更改LUKS设备主密钥,密码,哈希,密钥大小

时间:2020-01-09 10:37:35  来源:igfitidea点击:

在本文中,我将分享"更改LUKS设备主密钥,密码,哈希和密钥大小"的步骤。现在由于安全原因,我们可能需要更改LUKS设备主密钥或者其他值(例如加密密码)。

创建新的LUKS加密卷时,"基本上可以调整4个"旋钮"。

  • 对称加密密码

  • 密码块模式

  • IV(初始向量)用于密码块模式

  • 加密密钥大小

支持的密码列表

虽然不建议更改默认加密密码,但这是一个选项,以下是一些选择:

  • AES-高级加密标准-FIPS PUB 197

  • Twofish

  • Serpent

  • cast5 - RFC 2144

  • cast6 - RFC 2612

检查/proc/crypto,其中包含受支持的密码和模式,但请注意,它仅包含当前加载的crypto API模块。

提示:

如果没有加载加密模块,当前没有更好的方法列出所有可用的密码和模式变体。

更改LUKS设备主密钥,密码,哈希,密钥大小

有两种更改LUKS设备主密钥或者其他相关值的方法:

  • 备份,重新格式化,还原

  • cryptsetup-reencrypt

警告:

请注意,cryptsetup和Anaconda安装程序具有其自己的安全默认设置。实际上,在创建新的加密卷时,无需显式调整上述设置,除非我们知道自己在做什么,否则实际上不建议这样做。

识别LUKS加密设备

在开始之前,我们必须确定要更改其主密钥或者其他值的文件系统或者LUKS设备。

[root@centos-8 ~]# blkid -t TYPE=crypto_LUKS
/dev/mapper/rhel-test_vol: UUID="61b1c0f8-522f-4792-98f7-29ef904943cf" TYPE="crypto_LUKS"

所以这里的LUKS设备是/dev/mapper/rhel-test_vol

使用cryptsetup luksOpen DEV MAPPING打开新的加密磁盘,其中MAPPING是用于设备映射器目标的任意名称,该目标将提供对解密设备的读/写访问权限

[root@centos-8 ~]# cryptsetup luksOpen /dev/rhel/test_vol secret
Enter passphrase for /dev/rhel/test_vol:

方法1:备份,重新格式化,还原

可以在RHEL 5和6.6上使用此选项,因为这些操作系统变体" cryptsetup-reencrypt"不可用。我已经在RHEL/CentOS 8上对这些步骤进行了任何验证,但没有发现任何问题,尽管这是一个漫长的过程,所以在以后的OS变体中,我们应该使用" cryptsetup-reencrypt"选择方法2.

LUKS设备的备份内容

使用解密的映射备份有问题的设备,我们可以使用各种工具进行备份,例如tar,dump,rsync。

我将在同一节点上创建一个备份位置。

[root@centos-8 ~]# mkdir -p /backups/cryptokeys

由于我的LUKS设备已卸载,因此将其安装以访问LUKS设备内容

[root@centos-8 ~]# mount /dev/mapper/secret /secret/

为了本文的目的,我只有很少的虚拟键。

[root@centos-8 secret]# ls -l
total 24
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_1
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_2
drwx------ 2 root root 16384 Nov 25 22:28 lost+found

接下来,我将使用rsync将这些数据复制到我的备份文件夹中

[root@centos-8 ~]# rsync -aXv /secret/ /backups/cryptokeys/
sending incremental file list
./
encrypted_keys_1
encrypted_keys_2
lost+found/
sent 234 bytes  received 61 bytes  590.00 bytes/sec
total size is 8  speedup is 0.03

验证备份文件夹中的内容

[root@centos-8 ~]# ls -l /backups/cryptokeys/
total 12
-rw-r--r-- 1 root root    4 Nov 25 22:28 encrypted_keys_1
-rw-r--r-- 1 root root    4 Nov 25 22:28 encrypted_keys_2
drwx------ 2 root root 4096 Nov 25 22:28 lost+found

接下来卸载LUKS设备

[root@centos-8 ~]# umount /secret

关闭LUKS设备

[root@centos-8 ~]# cryptsetup luksClose secret

更改LUKS设备主密钥和密码

默认情况下,LUKS加密卷的密码如下。但是对于我的内部测试,我已将LUKS设备的密码密钥更改为aes-xts-essiv:sha256。因此,作为本文的一部分,我们将LUKS设备主密钥更改为默认值。

LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha256, RNG: /dev/urandom

要查看现有LUKS设备的密码,哈希,密钥大小和主密钥,可以使用cryptsetup或者dmsetup命令。

[root@centos-8 ~]# cryptsetup luksDump /dev/rhel/test_vol | grep cipher
        cipher: aes-xts-essiv:sha256
					
[root@centos-8 ~]# dmsetup table --target crypt --showkey /dev/mapper/secret
0 4177920 crypt aes-xts-essiv:sha256 :32:logon:cryptsetup:1fbf9936-ff5b-4847-9b2d-3da3044d5195-d0 0 253:2 16384

这里,

  • aes-加密块密码。例如:twofish,蛇

  • xts-分组密码加密模式,称为chainmode。示例:cbc,xts。

  • " plain64"-初始向量是扇区号的64位Little-Endian版本,必要时用零填充。

  • " essiv":"加密的扇区|盐初始向量",使用盐作为密钥,使用批量密码对扇区号进行加密。

可以从以下网址收集更多信息:https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt

如果目标只是更改LUKS设备主密钥,则不需要特殊选项;否则,无需执行任何操作。否则,可能需要使用诸如--cipher 、、 --key-size和/或者--hash之类的选项。其中:因为我也在更改密码值,所以我将使用-c,这是--cipher的缩写。

警告:

这将完全破坏LUKS设备中的所有可用数据。

[root@centos-8 ~]# cryptsetup -c aes-xts-plain64 luksFormat /dev/rhel/test_vol
WARNING: Device /dev/rhel/test_vol already contains a 'crypto_LUKS' superblock signature.
WARNING!
========
This will overwrite data on /dev/rhel/test_vol irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/rhel/test_vol:
Verify passphrase:

恢复内容

现在,既然我们成功更改了LUKS设备的主密钥和密码,请打开新格式化的LUKS设备并重新创建任何必要的结构

[root@centos-8 ~]# cryptsetup luksOpen /dev/mapper/rhel-test_vol secret
Enter passphrase for /dev/mapper/rhel-test_vol:

将文件系统分配给LUKS设备

[root@centos-8 ~]# mkfs.ext4 /dev/mapper/secret
mke2fs 1.44.3 (10-July-2016)
Creating filesystem with 522240 4k blocks and 130560 inodes
Filesystem UUID: 93f1e562-323e-4f8a-bafc-cdd5f7d4025a
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

将LUKS设备挂载在挂载点上,然后从备份文件夹中还原数据

[root@centos-8 ~]# mount /dev/mapper/secret /secret/
[root@centos-8 ~]# rsync -aXv /backups/cryptokeys//secret/
sending incremental file list
./
encrypted_keys_1
encrypted_keys_2
lost+found/
sent 234 bytes  received 65 bytes  598.00 bytes/sec
total size is 8  speedup is 0.03

验证数据

[root@centos-8 ~]# ls -l /secret/
total 24
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_1
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_2
drwx------ 2 root root 16384 Nov 25 22:28 lost+found

验证新的主密钥和密码

我们还可以验证主密钥,该密钥现在必须与我们之前的密钥不同。

[root@centos-8 ~]# dmsetup table --target crypt --showkey /dev/mapper/secret
0 4177920 crypt aes-xts-plain64 :32:logon:cryptsetup:61b1c0f8-522f-4792-98f7-29ef904943cf-d0 0 253:2 16384

还要验证LUKS加密设备的新密码

[root@centos-8 ~]# cryptsetup luksDump /dev/rhel/test_vol | grep cipher
        cipher: aes-xts-plain64

方法2:使用cryptsetup重新加密

/usr/sbin/cryptsetup-reencrypt是cryptsetup-reencrypt rpm的一部分,我们可以使用yum安装。

此rpm是所有RHEL 6.6和更高版本的一部分。我正在使用CentOS 8验证这些步骤。

[root@centos-8 ~]# yum install -y cryptsetup-reencrypt

另请阅读:

如何在Linux中使用fsarchiver备份和还原整个分区和文件系统

备份LUKS设备

我们的内容与之前对/secretMAPPING的内容相同

[root@centos-8 secret]# ls -l /secret/
total 24
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_1
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_2
drwx------ 2 root root 16384 Nov 25 22:28 lost+found

在备份LUKS设备之前,我们必须先卸载它。

[root@centos-8 ~]# umount /secret

使用dd命令在块级别备份LUKS设备

[root@centos-8 ~]# dd if=/dev/mapper/secret bs=4k of=/backups/cryptofile.img
522240+0 records in
522240+0 records out
2139095040 bytes (2.1 GB, 2.0 GiB) copied, 13.5232 s, 158 MB/s

确保相应的LUKS设备已关闭

[root@centos-8 ~]# cryptsetup luksClose secret
[root@centos-8 ~]# cryptsetup status secret
/dev/mapper/secret is inactive.

更改LUKS设备主密钥

对相关的LUKS设备执行cryptsetup-reencrypt,如果目标只是更改音量/主密钥,则不需要特殊选项;否则,可能需要--cipher--key-size和/或者--hash之类的选项。

[root@centos-8 ~]# cryptsetup-reencrypt /dev/mapper/rhel-test_vol
Enter passphrase for key slot 0:
Finished, time 00:09.210, 2040 MiB written, speed 221.5 MiB/s

通过重新启动或者手动调用" cryptsetup luksOpen"和" mount"来重新打开并安装相应的LUKS设备。

[root@centos-8 ~]# cryptsetup luksOpen /dev/mapper/rhel-test_vol secret
Enter passphrase for /dev/mapper/rhel-test_vol:
[root@centos-8 ~]# mount /dev/mapper/secret /secret/

验证LUKS设备内容

[root@centos-8 ~]# ls -l /secret/
total 24
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_1
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_2
drwx------ 2 root root 16384 Nov 25 22:28 lost+found

恢复内容

如果LUKS加密卷有任何问题,那么我们可以清除/secret的内容。

卸载LUKS卷并使用dd从备份中恢复内容

[root@centos-8 ~]# dd if=/backups/cryptofile.img of=/dev/mapper/secret bs=4k
522240+0 records in
522240+0 records out
2139095040 bytes (2.1 GB, 2.0 GiB) copied, 6.81704 s, 314 MB/s

接下来挂载LUKS加密卷并验证文件

[root@centos-8 ~]# mount /dev/mapper/secret /secret/
[root@centos-8 ~]# ls -l /secret/
total 24
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_1
-rw-r--r-- 1 root root     4 Nov 25 22:28 encrypted_keys_2
drwx------ 2 root root 16384 Nov 25 22:28 lost+found

验证新的主密钥

最后一次使用cryptsetup luksDump或者dmsetup确认对LUKS设备所做的更改(例如,新的主密钥摘要,不同的密码类型等)

[root@centos-8 ~]# dmsetup table --target crypt --showkey /dev/mapper/secret
0 4177920 crypt aes-xts-plain64 :32:logon:cryptsetup:61b1c0f8-522f-4792-98f7-29ef904943cf-d0 0 253:2 16384