登录 | 注册 退出 投稿

汽车数据的加密存储

专栏作者 2023-05-19

内容提要:这里要介绍的是一种利用Linux现有的数据加密软件进行数据加密和安全存储的方法。


随着汽车智能化和自动驾驶的发展,汽车控制功能的实现越来越趋于中心化,从ECU到域控制器,再到中央计算模块。出于成本和高度定制化的考虑,有一部分汽车主机厂和零部件供应商采用Linux作为大型控制器的操作系统。

这里要介绍的是一种利用Linux现有的数据加密软件进行数据加密和安全存储的方法。

LUKS,是Linux Unified Key Setup的缩写,是一种硬盘加密的标准。它标准化了分区的头(header)以及批量数据的格式。LUKS可以管理多个密码,这些密码可以有效地被撤销,并且可以防御PBKDF2字典攻击。需要说明的是,LUKS只是一个规范,我们需要一个实现它的程序——cryptsetup。

第一部分 

为了测试这种硬盘加密机制,我们需要先创建一个新的硬盘分区。

我们可以使用图形化工具Gparted进行分区,也可以使用命令行工具parted进行分区。

安装Gparted:   

$ sudo apt install gparted

新建一个分区:

首先,unmount要修改的硬盘分区sda2:

图片1.png

右击sda2,然后点击Resize/Move

图片2.png

在Free space following后面的方框里填写新的分区的大小,这里我们以46M为例:

图片3.png

再点击Resize/Move

然后点击GParted软件的主界面上的对号,应用刚刚做的操作:

图片4.png

然后会出现下面的对话框,在下面的对话框里点击Apply:

图片5.png

然后在GParted软件的主界面点击最左边的加号:

图片6.png

在下面的对话框里,填写Partition name和Label:

图片7.png

然后点击Add

在GParted主界面再次点击中间的对号,应用刚做的操作:

图片8.png

然后会再次出现下面的对话框,在下面的对话框里点击Apply:

图片9.png

新的硬盘分区sda4就分好了:

图片10.png

第二部分 对新的分区加密

安装加密软件cryptsetup

$ sudo apt-get install cryptsetup 

用下面的命令对新的分区进行LUKS格式化

$ sudo cryptsetup luksFormat /dev/sda4

图片11.png

在命令的执行过程中会询问格式化会不可逆的覆盖新的分区上的数据,是否确定要进行这个格式化?在Are you sure?后输入大写的YES。然后先后两次输入新的分区的密码。

这条命令执行后,如果没有错误出现,那LUKS格式新的分区就创建好了。

我们可以用下面这条命令来查看这个分区。这个分区被标识为“crypto_luks”

$ lsblk -f

图片12.png

这时,这个LUKS格式的分区默认是关闭的,也就是说在这个分区里的数据已经被加密,并且不可访问。

下面我们重新打开这个分区,并创建ext4文件系统。

我们用下面这条命令打开这个分区,并且给要打开的这个分区里的卷分配一个代号,cryptpart:

$ sudo cryptsetup luksOpen /dev/sda4 cryptpart

图片13.png

在执行命令的过程中,需要输入之前设置的分区密码。

并且再次用lsblk命令查看这个分区的信息:

图片14.png

现在加密分区解锁了,我们用下面这条命令在这个分区上创建ext4文件系统:

$ sudo mkfs.ext4 /dev/mapper/cryptpart

图片15.png

ext4文件系统创建好以后,我们就可以把它挂载到系统的一个地方,并添加文件。

创建挂载点:

图片16.png

挂载分区:

图片17.png

创建存储隐私数据的文件secret:

图片18.png

往文件里写入隐私数据:

图片19.png

第三部分 开机自动挂载加密分区 

下面我们将加密分区设置成开机自动挂载。

Linux的init进程会用fstab文件加载分区。在处理加密分区时,我们还需要用到另外一个文件,/etc/crypttab。

和fstab文件类似,init进程在开机时读crypttab文件。根据crypttab文件提供的信息,init进程会让我们提供密码来解锁加密分区,或者它将读取一个密钥文件来自动解锁加密分区。

我们用下面这条命令来抓取新的分区的crypto_LUKS类型的UUID:

$ sudo blkid | grep -i luks

图片20.png

然后创建/etc/crypttab文件:

$ sudo nano /etc/crypttab

把这个UUID拷贝到这个文件里,再按照下图的格式输入卷名字和其他信息,然后保存文件:

图片21.png

我们用下面这条命令来抓取新的分区的ext4类型的UUID:

$ sudo blkid | grep -i ext4

然后修改/etc/fstab文件:

$ sudo nano /etc/crypttab

图片22.png

把这个UUID拷贝到这个文件里,再按照下图的格式输入卷的挂载点、文件系统类型和其他信息:

图片23.png

然后保存修改,重启系统。

在系统启动过程中,会出现下面的画面,说明之前的配置都正确,而且已经生效:

图片24.png

在这个界面输入之前配置加密分区的密码。

登录系统后,用下面命令查看加密分区是否正确挂载:

$ lsblk -f | grep sda4 -A 2 

图片25.png

到这里用密码保护加密分区的方法就介绍完了。

其实LUKS支持两种保护机制,一种就是我们刚才介绍的用密码的方式,还有一种方式是用密钥的方式。用密码有个缺点是,每次开机都要输入密码。如果用密钥,那么系统启动时就会自动去读取密钥文件,然后加载加密分区。

下面我们就介绍这种使用密钥的方式。

用下面命令生成一个测试用的密钥,并把密钥文件保存在一个普通用户不能访问的位置,比如,/boot:

$ echo "supersecretpass" > volume-key

$ sudo mv volume-key /boot/

图片26.png

用下面的命令把密钥文件的所有者改成root,并把文件的读写权限改成只读:

$ sudo chown root:root /boot/volume-key

$ sudo chmod 0400 /boot/volume-key

图片27.png

然后用下面的命令把生成的密钥加入加密分区:

$ sudo cryptsetup luksAddKey /dev/sda4 /boot/volume-key

图片28.png

用下面的命令查看密钥是否成功加入到加密分区:

$ sudo cryptsetup luksDump /dev/sda4

图片29.png

然后把密钥的路径加入到/etc/crypttab:

图片30.png

重启系统以后,发现启动过程中,不再需要输入密码。

登录系统用命令查看,发现加密分区已经自动挂载:

图片31.png

到这里使用密钥对加密分区的方式也介绍完了。




作者:牛喀网专栏作者
牛喀网文章,未经授权不得转载!


下一篇: 汽车以太网的功能安全
上一篇: 建设汽车网络安全防御中心
相关文章
返回顶部小火箭