Skip to main content

Linux上使用cryptsetup对磁盘、U盘等设备进行加密/解密

SmartDeng...About 5 minLinuxSecurityLinuxEncryptionSecurity

Linux上使用cryptsetup对磁盘、U盘等设备进行加密/解密

最近丢了一个U盘,好在里面没什么重要信息。有时候我会用U盘备份一些文件,包括ssh密钥文件。如果有一天装有自己密钥文件的U盘丢失,被人捡到的话,会非常不安全。因此简单研究了下磁盘的加密操作,在此记录一下。虽然加密、解密增加了使用U盘的复杂性,但是如果真的有一些文件,使用互联网备份怕泄漏的,还是需要一些加密手段来保护的。这里只试了在Linux下的操作,基于cryptsetup命令行工具。

前言

Linux从Linux kernel 2.6开始就已经集成了dm-crypt功能,cryptsetup是一个命令行工具,可以基于内核的dm-crypt,对磁盘进行加密。本文使用的Archlinux,其他发行版也差不多。 Linux的dm-crypt功能,支持多种加密模式:LUKS(Linux Unified Key Setup), Plain, Loop-AES, TCrypt. 本文只使用了LUKS,如需其他方式,可以参考官方文档。

本文的下述操作,需要对Linux的磁盘管理、分区有基本了解,并且会使用mkfs.ext4等分区格式化命令,且知晓该行为的影响。

安装

在大多数的发行版中,安装完一般已经有了cryptsetup这个命令,如果没有,可以使用发行版自带的包管理器安装 安装完之后,使用如下命令查看工具版本:

cryptsetup --version

使用如下命令,可以查看在本机器上的性能指标,因为使用不同的方式进行加密,对计算的要求不同

cryptsetup benchmark

要使用其他功能,参考官方文档。

日常加密/解密使用

创建加密盘

使用LUKS加密模式,新建一个加密盘,该命令会覆盖原有数据,进行格式化。需要在root/sudo下执行命令:

cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 luksFormat /dev/sdax

--key-size表示密钥长度,--hash 使用sha512哈希散列算法,--iter-time 迭代时间,单位毫秒。时间越长,越难进行暴力破解。具体的原理,含义,就不在这里解释了。

会输出:

WARNING!
========
This will overwrite data on /dev/sdc1 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sdc1:

上面需要输入大写的YES,然后输入加密用的密码(非电脑密码) 完成上面命令后,就新建了一个加密盘,下面需要打开这个加密盘,并新建分区,才能进行文件的读写。

打开加密盘

使用如下命令(root):

cryptsetup open --type luks /dev/sdb1 sdb1

或者:

cryptsetup luksOpen /dev/sdb1 test

其中,/dev/sdb1替换为你的U盘对应的实际分区,test随意,是一个别名 解密需要输入你前面设置的加密密码,当执行完上面的操作后,原本的分区/dev/sdb1,会被映射到/dev/mapper/test,在这之后,把/dev/mapper/test当作你的分区,不要使用/dev/sdb1了。

创建LUKS的加密分区(格式化)

只完成前面操作的话,只是有了一个加密的磁盘,但要读写文件,还得有分区,格式化一个文件系统,像正常的U盘初始化过程。

创建文件系统

跟正常U盘一样的操作,唯一不同的就是,要使用/dev/mapper/test,忘掉/dev/sdb1 如下,创建一个exfat文件系统类型的分区(一般是fat32):

mkfs.exfat /dev/mapper/test

挂载分区

可以自行创建一个挂载点,使用如下命令进行挂载:

mount /dev/mapper/test /mnt

之后的所有操作就跟正常U盘一样了。

推出磁盘

使用完后,先按照正常步骤,进行umount:

umount /mnt

然后关闭加密盘即可

cryptsetup close /dev/sdb1

以上,实现了基于密码的加密方式,但是如果密码设置的比较简单,或者忘记密码了,还是比较麻烦的。

cryptsetup还支持使用keyfile进行加密。keyfile就是使用一个文件,作为加密解密用的“密码”,如果文件比较复杂,比如是一个图片文件、视频文件等,那么被暴力破解的可能性就很低,比单纯的密码要安全得多。

下面介绍,如果想要使用文件,作为密钥加密的方式

使用keyfile文件加密

如果已有一个复杂文件,可以跳过这步。使用以下命令新建一个大小为64KB的随机文件:

dd if=/dev/urandom of=./keyfile bs=1k count=64

Keyslot查看

使用如下命令,可以查看当前磁盘,使用的加密方式

cryptsetup luksDump /dev/sdb1

开头Keyslot的就是前面已经建立的加密手段,每个Keyslot相当于一个钥匙,可以同时有多个“钥匙”进行加密。每个Keyslot有一个编号,从0-7。

添加keyfile密钥

开始给磁盘添加一种加密手段,指定某个文件作为keyfile,并设置为LUKS加密盘的密钥

cryptsetup luksAddKey /dev/sdb1 ./keyfile

然后再使用luksDump命令看下,会看到多了一个KeySlot

使用keyfile打开LUKS加密盘

cryptsetup --key-file ./keyfile luksOpen /dev/sdb1 test

删除一个Keyslot

cryptsetup luksKillSlot /dev/sdb1 0

这里0 是指你想要删掉的那个keyslot编号

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v3.1.3