使用KAE提升SM4-XTS算法性能
KAE支持对称加密算法SM4的XTS模式,用以提高算法能力。该模式仅支持内核态使用,具体使用方法是基于dm-crypt的透明分区/磁盘加密。
dm-crypt向上呈现为一个device mapper机制的target device,经过映射挂载后就可以作为透明加密分区/磁盘使用。
dm-crypt算法注册在Crypto模块中,hisi_sec2驱动安装后,SM4-XTS算法会注册到Crypto模块中,使用LUKS(Linux Unified Key Setup,Linux统一秘钥设置)进行配置即可实现硬件加解密。
一个加密盘操作要占用24个队列,当前加速器限制开放256*2的队列数,如果需要操作更多数量的加密盘,需要先开启所有1024*2的加速器队列。开启方法:修改/etc/modprobe.d/hisi_sec2.conf配置文件中pf_q_num参数,重启生效。
环境要求
- 已安装hisi_sec2驱动,安装方法请参见安装KAE。
- 为提升SM4-XTS算法性能,请将LUKS工具Cryptsetup升级至2.2.0版本。
操作系统自带cryptsetup软件可能无法正在使用SM4-XTS算法加密磁盘,需要进行升级,请下载cryptsetup-2.2.0源码到环境中,以EulerOS2.8为例,升级cryptsetup步骤如下。
- 依次安装cryptsetup-2.2.0的依赖包:libuuid-devel、device-mapper-devel、popt-devel、json-c-devel、libblkid-devel。
1 2 3 4 5
yum install libuuid-devel yum install device-mapper-devel yum install popt-devel yum install json-c-devel yum install libblkid-devel
- 在cryptsetup-2.2.0源码目录下编译安装。
1 2
./configure make && make install
其中,libuuid-devel、device-mapper-devel、popt-devel、json-c-devel、libblkid-devel为cryptsetup依赖软件包。
- 依次安装cryptsetup-2.2.0的依赖包:libuuid-devel、device-mapper-devel、popt-devel、json-c-devel、libblkid-devel。
加密分区/磁盘
- 在系统根目录下生成keyfile文件。
1
dd if=/dev/random of=/home/EncryptKeyFile bs=4k count=1
显示结果为:1 2 3
0+1 records in 0+1 records out 115 bytes copied, 0.00010976 s, 1.0 MB/s
- 加密分区/磁盘。
1
cryptsetup --batch-mode --cipher sm4-xts-plain64 --key-size 256 --hash sha256 --sector-size=4096 --type=luks2 --key-file /home/EncryptKeyFile luksFormat /dev/sdb
- 映射分区/磁盘。
1
cryptsetup --key-file /home/EncryptKeyFile luksOpen /dev/sdb sx_disk
- 查看分区/磁盘是否加密。
1
lsblk
显示crypt表明分区/磁盘已加密。1 2 3 4 5 6 7 8 9
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 5.5G 1 loop /os_lhl sda 8:0 0 2.2T 0 disk ├─sda1 8:1 0 1G 0 part /boot/efi └─sda2 8:2 0 2.2T 0 part ├─vg_os-swap 254:0 0 20G 0 lvm [SWAP] └─vg_os-root 254:1 0 2.2T 0 lvm / sdb 8:16 0 278.5G 0 disk └─sx_disk 254:2 0 278.5G 0 crypt
- 格式化分区/磁盘。
1
mkfs.xfs /dev/mapper/sx_disk
显示结果为:1 2 3 4 5 6 7 8 9
meta-data=/dev/mapper/sx_disk isize=512 agcount=16, agsize=4562368 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=72997376, imaxpct=25 = sunit=64 swidth=64 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=35648, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
- 创建挂载点目录。
1
mkdir /home/sec_test
- 挂载分区/磁盘到目录。
1 2
mount /dev/mapper/sx_disk /home/sec_test/ df -h
显示结果为:1 2 3 4 5 6 7 8 9 10 11
Filesystem Size Used Avail Use% Mounted on devtmpfs 63G 0 63G 0% /dev tmpfs 63G 0 63G 0% /dev/shm tmpfs 63G 28M 63G 1% /run tmpfs 63G 0 63G 0% /sys/fs/cgroup /dev/mapper/vg_os-root 2.2T 18G 2.1T 1% / /dev/sda1 1022M 172K 1022M 1% /boot/efi tmpfs 13G 20K 13G 1% /run/user/472 tmpfs 13G 0 13G 0% /run/user/0 /dev/loop0 5.5G 5.5G 0 100% /os_lhl /dev/mapper/sx_disk 279G 317M 279G 1% /home/sec_test
- 确认目录可正常访问。
1
cd /home/sec_test/;ll
- 在“/home/sec_test”目录下查看分区/磁盘是否已加密,并且和目录是否正确对应。
1
lsblk
显示结果为:1 2 3 4 5 6 7 8 9
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 5.5G 1 loop /os_lhl sda 8:0 0 2.2T 0 disk ├─sda1 8:1 0 1G 0 part /boot/efi └─sda2 8:2 0 2.2T 0 part ├─vg_os-swap 254:0 0 20G 0 lvm [SWAP] └─vg_os-root 254:1 0 2.2T 0 lvm / sdb 8:16 0 278.5G 0 disk └─sx_disk 254:2 0 278.5G 0 crypt /home/sec_test
- “/home”目录下查看分区/磁盘加密详细信息。
1
cryptsetup status /dev/mapper/sx_disk
显示结果如下:1 2 3 4 5 6 7 8 9 10
/dev/mapper/sx_disk is active and is in use. type: LUKS1 cipher: sm4-xts-plain64 keysize: 256 bits key location: dm-crypt device: /dev/sdb sector size: 512 offset: 4096 sectors size: 583979008 sectors mode: read/write
- 执行2到10,对多个分区/磁盘进行加密。
删除加密的分区/磁盘
- 卸载分区/磁盘的挂载目录。
执行指令前,用户必须先退出挂载目录。
当有多个分区/磁盘挂载时,需要多次执行该命令进行目录卸载。
1
umount -l /home/sec_test
- 执行lsblk命令,确认已卸载分区/磁盘的挂载目录。
1
lsblk
显示结果为:1 2 3 4 5 6 7 8 9
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 5.5G 1 loop /os_lhl sda 8:0 0 2.2T 0 disk ├─sda1 8:1 0 1G 0 part /boot/efi └─sda2 8:2 0 2.2T 0 part ├─vg_os-swap 254:0 0 20G 0 lvm [SWAP] └─vg_os-root 254:1 0 2.2T 0 lvm / sdb 8:16 0 278.5G 0 disk └─sx_disk 254:2 0 278.5G 0 crypt
- 关闭映射。
需要多次执行该命令关闭所有映射。
1
cryptsetup luksClose sx_disk
- 查看映射是否关闭。
1
ll /dev/mapper/
显示结果如下:1 2 3 4
total 0 crw---- 1 root root 10, 236 Jul 31 22:27 control lrwxrwxrwx 1 root root 7 Jul 31 22:27 vg_os-root -> ../dm-1 lrwxrwxrwx 1 root root 7 Jul 31 22:27 vg_os-swap -> ../dm-0
父主题: KAE的应用