【网络安全】基于车载大脑的汽车EE架构网络安全(三):优势和劣势总结
1006 2024-03-11
内容提要:这里要介绍的是一种利用Linux现有的数据加密软件进行数据加密和安全存储的方法。
随着汽车智能化和自动驾驶的发展,汽车控制功能的实现越来越趋于中心化,从ECU到域控制器,再到中央计算模块。出于成本和高度定制化的考虑,有一部分汽车主机厂和零部件供应商采用Linux作为大型控制器的操作系统。
这里要介绍的是一种利用Linux现有的数据加密软件进行数据加密和安全存储的方法。
LUKS,是Linux Unified Key Setup的缩写,是一种硬盘加密的标准。它标准化了分区的头(header)以及批量数据的格式。LUKS可以管理多个密码,这些密码可以有效地被撤销,并且可以防御PBKDF2字典攻击。需要说明的是,LUKS只是一个规范,我们需要一个实现它的程序——cryptsetup。
第一部分
为了测试这种硬盘加密机制,我们需要先创建一个新的硬盘分区。
我们可以使用图形化工具Gparted进行分区,也可以使用命令行工具parted进行分区。
安装Gparted:
$ sudo apt install gparted
新建一个分区:
首先,unmount要修改的硬盘分区sda2:
右击sda2,然后点击Resize/Move
在Free space following后面的方框里填写新的分区的大小,这里我们以46M为例:
再点击Resize/Move
然后点击GParted软件的主界面上的对号,应用刚刚做的操作:
然后会出现下面的对话框,在下面的对话框里点击Apply:
然后在GParted软件的主界面点击最左边的加号:
在下面的对话框里,填写Partition name和Label:
然后点击Add
在GParted主界面再次点击中间的对号,应用刚做的操作:
然后会再次出现下面的对话框,在下面的对话框里点击Apply:
新的硬盘分区sda4就分好了:
第二部分 对新的分区加密
安装加密软件cryptsetup
$ sudo apt-get install cryptsetup
用下面的命令对新的分区进行LUKS格式化
$ sudo cryptsetup luksFormat /dev/sda4
在命令的执行过程中会询问格式化会不可逆的覆盖新的分区上的数据,是否确定要进行这个格式化?在Are you sure?后输入大写的YES。然后先后两次输入新的分区的密码。
这条命令执行后,如果没有错误出现,那LUKS格式新的分区就创建好了。
我们可以用下面这条命令来查看这个分区。这个分区被标识为“crypto_luks”
$ lsblk -f
这时,这个LUKS格式的分区默认是关闭的,也就是说在这个分区里的数据已经被加密,并且不可访问。
下面我们重新打开这个分区,并创建ext4文件系统。
我们用下面这条命令打开这个分区,并且给要打开的这个分区里的卷分配一个代号,cryptpart:
$ sudo cryptsetup luksOpen /dev/sda4 cryptpart
在执行命令的过程中,需要输入之前设置的分区密码。
并且再次用lsblk命令查看这个分区的信息:
现在加密分区解锁了,我们用下面这条命令在这个分区上创建ext4文件系统:
$ sudo mkfs.ext4 /dev/mapper/cryptpart
ext4文件系统创建好以后,我们就可以把它挂载到系统的一个地方,并添加文件。
创建挂载点:
挂载分区:
创建存储隐私数据的文件secret:
往文件里写入隐私数据:
第三部分 开机自动挂载加密分区
下面我们将加密分区设置成开机自动挂载。
Linux的init进程会用fstab文件加载分区。在处理加密分区时,我们还需要用到另外一个文件,/etc/crypttab。
和fstab文件类似,init进程在开机时读crypttab文件。根据crypttab文件提供的信息,init进程会让我们提供密码来解锁加密分区,或者它将读取一个密钥文件来自动解锁加密分区。
我们用下面这条命令来抓取新的分区的crypto_LUKS类型的UUID:
$ sudo blkid | grep -i luks
然后创建/etc/crypttab文件:
$ sudo nano /etc/crypttab
把这个UUID拷贝到这个文件里,再按照下图的格式输入卷名字和其他信息,然后保存文件:
我们用下面这条命令来抓取新的分区的ext4类型的UUID:
$ sudo blkid | grep -i ext4
然后修改/etc/fstab文件:
$ sudo nano /etc/crypttab
把这个UUID拷贝到这个文件里,再按照下图的格式输入卷的挂载点、文件系统类型和其他信息:
然后保存修改,重启系统。
在系统启动过程中,会出现下面的画面,说明之前的配置都正确,而且已经生效:
在这个界面输入之前配置加密分区的密码。
登录系统后,用下面命令查看加密分区是否正确挂载:
$ lsblk -f | grep sda4 -A 2
到这里用密码保护加密分区的方法就介绍完了。
其实LUKS支持两种保护机制,一种就是我们刚才介绍的用密码的方式,还有一种方式是用密钥的方式。用密码有个缺点是,每次开机都要输入密码。如果用密钥,那么系统启动时就会自动去读取密钥文件,然后加载加密分区。
下面我们就介绍这种使用密钥的方式。
用下面命令生成一个测试用的密钥,并把密钥文件保存在一个普通用户不能访问的位置,比如,/boot:
$ echo "supersecretpass" > volume-key
$ sudo mv volume-key /boot/
用下面的命令把密钥文件的所有者改成root,并把文件的读写权限改成只读:
$ sudo chown root:root /boot/volume-key
$ sudo chmod 0400 /boot/volume-key
然后用下面的命令把生成的密钥加入加密分区:
$ sudo cryptsetup luksAddKey /dev/sda4 /boot/volume-key
用下面的命令查看密钥是否成功加入到加密分区:
$ sudo cryptsetup luksDump /dev/sda4
然后把密钥的路径加入到/etc/crypttab:
重启系统以后,发现启动过程中,不再需要输入密码。
登录系统用命令查看,发现加密分区已经自动挂载:
到这里使用密钥对加密分区的方式也介绍完了。
作者:牛喀网专栏作者
牛喀网文章,未经授权不得转载!