2021SC@SDUSC
1.项目描述这是一个某公司委托的预研项目。
该公司主要产品之一是基于硬件芯片的加密卡/加密机。考虑到虽然当前政策倾向于批准基于硬件的加密设备,但是下一步可能会放开其他类型的实现形式,比如使用GPU加速运算的加密设备和服务,因此要预研使用CUDA/GPU加速的密码运算技术。
工作计划是在GMSSL(一个开源的密码算法和SSL库以支持国产密码SM系列算法为特色)中,使用GPU实现RSA、SM2等公钥算法。RSA的GPU实现可以参考libgpucrypto(一个使用CUDA的RSA开源实现项目)。具体工作需要改进libgpucrypto项目,并把改进成果应用到GMSSL中去。
本项目可以锻炼GPGPU编程能力,加深对密码原理和技术的了解,成果可以用在企业安全、云虚拟安全等环境。
GPU硬件使用NVIDIA GTX系列显卡,提供校园网上的远程访问和使用环境。
注1:如果不熟悉C而惯于使用Java,则可以把GMSSL换成OpenJDK,参考使用JCUDA(一个Java bindings for CUDA的开源实现)等实现。
注2:如果想做GPU相关,但是不想做密码技术,可以改题目内容为使用GPU的机器学习和/或大数据处理等等。可行性、具体内容另外讨论。
使用cuda加速rsa或ecdsa/sm2,核心是加速计算X^Y mod Z。然后把rsa或sm2中需要计算X^Y mod Z的地方调用GPU计算。
3.核心代码我负责分析的部分:
1、rsa,sm2,ecc算法的数学基础
2、gmssl中的rsa和sm2算法
3、libgpucrypto中的rsa算法
4、libgpucrypto中的cuda快速幂取模算法
5、ecdsa、ecc算法
本项目队友韦潇负责分析的核心代码是:
1.CUDA中SHA、AES、RSA在CPU和GPU性能对比以及线索分析
2.CUDA GPU中SM2算法设计
在环境配置的过程中走了不少弯路,把这个曲折的过程分享出来
4.1需要的环境linux上的cuda环境
4.2我的硬件环境dell inspiron 7591
win10系统
bios版本:1.6
显卡型号:gtx1650
失败原因:我的电脑不支持legecy启动
4.3.1 在vmware上安装ubuntu
新建虚拟机 选择典型(自定义应该也可以,感觉区别不大)
安装程序镜像文件
输入用户名密码
虚拟机名称和位置
分配磁盘空间
完成创建
4.3.2将ubuntu安装在
启动ubuntu虚拟机
选择中文在这里插入图片描述
选择暂时不连接wifi,也可连接wifi
选择安装第三方软件
选择其他选项
进入到下面自行分区界面后,可根据U盘大小可分出哪个是需要安装ubuntu系统的U盘,把提前分好的4个分区逐一通过减号删除,再点击删除分区后腾出的空闲重新新建,按照下表格重新新建号分区类别和格式(注意,要删除一个新建一个,逐个逐个来)
| 分区名称 | 分区类别 | 格式 | 大小 | 作用 |
|---|---|---|---|---|
| / | 主分区 | ext4 | 尽量大一些,最好30G以上 | 根目录:用户存放个人资料,相当于D盘 |
| /boot | 主分区 | ext4 | 建议1G以上 | Linux的内核及引导系统程序所需要的文件 |
| swap | 逻辑分区 | 不需要 | 建议4G以上 | 运行内存 |
| /home | 逻辑分区 | ext4 | 建议20G以上 | 系统盘:相当于C盘 |
修改后的分区
安装启动引导器的设备选择需要安装系统的U盘,然后点击“现在安装”
点击“继续”
地区选择上海台北新加坡(东八区)
选择语言
输入用户名密码
安装完成重启选择u盘启动即可,由于我的电脑不支持这种方法所以我尝试了其他方法
- 简单来说,Ventoy是一个制作可启动U盘的开源工具。
- 有了Ventoy你就无需反复地格式化U盘,你只需要把 ISO/WIM/IMG/VHD(x)/EFI
等类型的文件拷贝到U盘里面就可以启动了,无需其他操作。 - 你可以一次性拷贝很多个不同类型的镜像文件,Ventoy 会在启动时显示一个菜单来供你进行选择 (参见 截图)。
- Ventoy 安装之后,同一个U盘可以同时支持 x86 Legacy、BIOS、IA32 UEFI、x86_64
UEFI、ARM64 UEFI 和 MIPS64EL UEFI 模式。 - Ventoy 支持大部分常见类型的操作系统
(Windows/WinPE/Linux/ChromeOS/Unix/VMware/Xen …) 目前已经测试了各类超过 730+
个镜像文件。 支持 distrowatch.com 网站上收录的 90%+ 的操作系统。
100% 开源 (许可证)
使用简单 (使用说明)
快速 (拷贝文件有多快就有多快)
可以安装在 U盘/本地硬盘/SSD/NVMe/SD卡等设备上
直接从 ISO/WIM/IMG/VHD(x)/EFI 文件启动,无需解开
ISO/WIM/IMG/VHD(x)/EFI 文件在磁盘上无需连续
支持MBR和GPT分区格式
同时支持 x86 Legacy BIOS 以及 IA32/x86_64/ARM64/MIPS64 UEFI
UEFI 模式支持安全启动 (Secure Boot) 说明
支持数据持久化 说明
支持Windows系统的自动安装部署 说明
支持 RHEL7/8/CentOS7/8/SUSE/Ubuntu Server/Debian 等Linux系统的自动安装部署 说明
镜像分区支持 FAT32/exFAT/NTFS/UDF/XFS/Ext2(3)(4) 文件系统
支持超过4GB的ISO文件
保留ISO原始的启动菜单风格(Legacy & UEFI)
支持大部分常见操作系统, 已测试730+ 个ISO文件
不仅仅是启动,而是完整的安装过程
菜单可以在列表模式和目录树模式之间实时、动态切换 说明
提出 “Ventoy Compatible” 概念
支持插件扩展
Linux vDisk(vhd/vdi/raw…) 启动解决方案
支持向运行环境中插入文件
动态替换ISO文件中的原始启动配置文件
高度可定制化的主题风格和菜单
启动过程中支持U盘设置写保护
不影响U盘日常普通使用
版本升级时数据不会丢失
无需跟随操作系统升级而升级Ventoy
下载链接 https://github.com/ventoy/Ventoy/releases
点击安装即可
失败原因还没有搞清楚,具体表现为使用vhd进入ubuntu系统实际上启动的是本机的win10系统,应该是某个细节出问题了
Ventoy 使用此插件来支持在物理机上直接启动安装了 Linux系统的 vdisk 文件 (vhd/vdi/raw 等)。这种模式的优点有:
- 系统是在真实物理机上运行,并不是在虚拟机里运行,没有性能损失。
- 同一个 vhd/vdi 文件既可以在 Legacy BIOS 模式下启动,也可以在 UEFI 模式下启动。
- Linux系统无需独占一个磁盘或者分区,相当于把一个完整的Linux系统放在一个文件里。 比如,你的主系统是 C 盘里的 Windows 系统,你可以在D盘里放一些
Deepin、UOS、Ubuntu、Arch 等系统的 VHD 文件,想启动哪个选哪个,不用了就把对应的 VHD 文件删除即可。
- 支持的 vdisk 格式
- 固定大小的 vhd (注意只能是vhd, 不支持vhdx)
- 固定大小的 vdi
- Raw Disk 镜像格式
- 支持的 Linux 发行版 (持续更新中)
| 发行版 | 测试 ISO | Legacy BIOS | UEFI | 备注 |
|---|---|---|---|---|
| CentOS 8 | CentOS-8.3.2011-x86_64-dvd1.iso | |||
| CentOS 7 | CentOS-7-x86_64-Minimal-2009.iso | |||
| Deepin | deepin-desktop-community-1010-amd64.iso | grub-pc-bin_xxx.deb needed | ||
| Fedora | Fedora-Workstation-Live-x86_64-33-1.2.iso | |||
| Ubuntu Desktop | ubuntu-20.04-desktop-amd64.iso | |||
| Ubuntu Server | ubuntu-20.04.1-live-server-amd64.iso | grub-pc-bin_xxx.deb needed | ||
| Linux Mint | linuxmint-20.2-cinnamon-64bit.iso | |||
| MX Linux | MX-19.2_x64.iso | |||
| Kali Linux | kali-linux-2021.1-installer-amd64.iso | grub-pc-bin_xxx.deb needed | ||
| Manjaro | manjaro-xfce-20.0.1-200511-linux56.iso | based on Archlinux | ||
| Archman | Archman_KDE_20200209.iso | based on Archlinux | ||
| Mageia | Mageia-7.1-x86_64.iso | grub2-2.xxxx.rpm needed | ||
| openSUSE | openSUSE-Leap-15.2-DVD-x86_64.iso |
理论上,其他使用 dracut/initramfstool/mkinitcpio 作为 initramfs 构建工具的发行版也支持。只是没有实际进行测试。
- 使用说明
- 安装 Linux 系统到 vdisk
- 创建固定大小的 vhd/vdi,注意只支持静态大小的,不支持动态扩展类型的。然后把支持的 Linux 系统安装到 vhd/vdi 中即可。
安装过程和普通安装没有任何差别,可以借助 VirtualBox 来完成(创建硬盘时可以选择 vdi或vhd)。
注意:虚拟硬盘必须是全新创建的,不要使用之前用过的。 。
menuentry "Boot My Linux VHD" {
set my_vdisk_path="/VhdDir/Ubuntu.vhd.vtoy"
if search -n -s vdiskhd -f "$my_vdisk_path"; then
vtoyboot_common_func "($vdiskhd)$my_vdisk_path"
else
echo "$my_vdisk_path not found"
fi
}
在这个例子中,my_vdisk_path 被设置为 /VhdDir/Ubuntu.vhd.vtoy 你可以按照你实际的路径修改,(比如 set my_vdisk_path="/images/LinuxMint.vdi.vtoy")。
你不需要像 hd0/hd1 这样指定到具体哪个硬盘,因为脚本里会使用 search 命令去遍历所有磁盘搜索这个文件。
你只需要确保这个路径是唯一的即可。比如,你有一个 C:VhdDirUbuntu.vhd.vtoy 同时还有一个 D:VhdDirUbuntu.vhd.vtoy 这种情况可能会找错文件。
注意以下格式都是错误的:
set my_vdisk_path="(hd1,1)/VhdDir/Ubuntu.vhd.vtoy"
set my_vdisk_path="E:VhdDirUbuntu.vhd.vtoy"
set my_vdisk_path="VhdDirUbuntu.vhd.vtoy"
-
使用其他 bootloader 启动 vDisk 文件
通过前面的说明我们知道,Ventoy 可以启动 Ventoy 所在的磁盘上的 vdisk 文件,也可以启动非 Ventoy 盘(本地磁盘)上的 vdisk 文件。 但是这两者都必须要通过 Ventoy 才可以启动。 实际上 vdisk 启动这个功能是可以独立出来的。 可以集成到其他 bootloader 中来启动,比如 grub4dos/grub2/rEFInd/Systemd-boot 等。
唯一的要求是 vdisk 文件所在的分区文件系统只能是 FAT32/NTFS/exFAT/XFS/Ext2/Ext3/Ext4/UDF 中的一种。使用方法如下:
================== i386-pc ====================== GRUB4DOS: kernel /ipxe.krn vdisk=/MyVdiskDir/Deepin.vdi.vtoy initrd /vdiskchain GRUB2: linux16 (hd0,1)/test123/ipxe.krn vdisk=/MyVdiskDir/Deepin.vdi.vtoy initrd16 (hd0,1)/test123/vdiskchain ================== x86-64-efi ====================== GRUB2: chainloader (hd0,1)/test123/vdiskchain vdisk=/MyVdiskDir/Deepin.vdi.vtoy rEFInd: loader /vdiskchain vdisk=/MyVdiskDir/Deepin.vdi.vtoy Systemd-boot: efi /vdiskchain vdisk=/MyVdiskDir/Deepin.vdi.vtoy
这里的 ipxe.krn 和 vdiskchain 是两个文件,需要从 https://github.com/ventoy/vdiskchain/releases 下载最新版本。 vdisk 参数和上面的 my_vdisk_path 参数是一样的含义和要求。
已知问题:
- i386-pc (Legacy BIOS) 模式下,grub4dos/grub2 必须是用磁盘启动的才可以 chainload 成功,从光驱启动的无法 chainload 成功。
很多发行版本(比如 Ubuntu、MX、LinuxMint 等)都提供了数据持久化的支持。这样你就可以在Live环境中保存一些数据,比如用户密码、IP参数等等。这些数据在你下次启动的时候就可以直接使用了,无需再重新配置。正常情况下,我们一般是单独创建一个分区来保存持久化数据,不是非常灵活。
现在Ventoy提供了一个新的功能。你无需再单独创建分区、也无需添加 persistent 启动参数,只需要在第一个分区里面放一个数据文件,然后通过json配置和对应ISO关联上就可以了。对于第1个分区的格式没有要求,NTFS/exFAT等都可以。
你可以同时放很多个不同的数据文件,分别关联到不同的ISO文件上。你也可以同一个数据文件关联到不同的ISO文件上,只要ISO内的系统支持就行。甚至你还可以为一个ISO文件同时指定多个数据文件,在启动时 Ventoy会提供一个菜单,你可以选择本次启动是否使用数据文件以及使用哪一个数据文件。
-
- 支持的发行版
Arch/Ubuntu以及基于它的衍生版本。实际测试过的发行版如下表所示:
| 发行版 | 测试过的ISO文件 | 文件系统 Label | 备注 |
|---|---|---|---|
| Arch Linux | archlinux-2021.03.01-x86_64.iso | vtoycow | Arch/ArchMan/ArchBang/ArchLabs/BlackArch… are also supported. |
| Ubuntu | ubuntu-20.04-desktop-amd64.iso | casper-rw | |
| MX Linux | MX-19.1_x64.iso | MX-Persist | |
| LinuxMint | linuxmint-19.3-xfce-64bit.iso | casper-rw | |
| elementary OS | elementaryos-5.1-stable.20200405.iso | casper-rw | |
| Zorin | Zorin-OS-15.1-Core-64-bit-r2.iso | casper-rw | |
| Kaspersky Rescue Disk | krd18.iso | casper-rw | |
| Kali | kali-linux-2020.2-live-amd64.iso | persistence | Need -c persistence.conf option. And use Live USB Persistence boot option. |
| CloneZilla | clonezilla-live-20200703-focal-amd64.iso | persistence | Need -c persistence.conf option |
| Fedora | Fedora-Workstation-Live-x86_64-33-1.2.iso | vtoycow | Need to add selinux=0 in the boot option |
-
- Json 配置
关于 ventoy.json 的位置以及相关说明,请首先参考 插件入口 (*必读)
在镜像分区 /ventoy/ventoy.json 中定义了一个 persistence 的数组来配置持久化插件。
{
"persistence": [
{
"image": "/ISO/MX-19.1_x64.iso",
"backend": "/persistence/MX-19.1_x64.dat"
},
{
"image": "/ISO/ubuntu-20.04-desktop-amd64.iso",
"backend": [
"/persistence/ubuntu_20.04_1.dat",
"/persistence/ubuntu_20.04_2.dat",
"/persistence/ubuntu_20.04_3.dat"
],
"autosel": 2
},
{
"image": "/linuxmint-19.3-xfce-64bit.iso",
"backend": "/persistence/linuxmint_19.03.dat",
"autosel": 1
}
]
}
| 关键字 | 类型 | 说明 |
|---|---|---|
| image | STRING | iso文件的全路径。本参数支持模糊匹配,请参考 插件路径匹配说明 |
| backend | STRING or ARRAY | 对应iso文件的持久化数据文件的全路径。可以是一个字符串或者是一个字符串数组。 |
| autosel | 整数 | 可选的,可以不设置。如果设置了之后,在启动前就不会再弹出提示菜单,而是自动选择提示菜单中的对应选项。 0: 不使用持久化数据文件 1: 使用第1个持久化数据文件 2: 使用第2个持久化数据文件 … |
-
- 多模式选项
支持。可以分别针对 x86 Legacy BIOS、IA32 UEFI、x86_64 UEFI 和 ARM64 UEFI 模式做不同的设置。详细说明请参考 多模式选项
-
- 持久化数据文件
持久化数据文件其实就是一个磁盘镜像文件。你可以直接下载已创建好的模板使用或者自己使用脚本创建。
直接下载
你可以直接从 https://github.com/ventoy/backend/releases 下载已经创建好的镜像文件使用。
新创建
这里提供了一个 CreatePersistentImg.sh 脚本用来创建持久化镜像文件。
把它下载下来,在Linux shell中执行 sudo sh CreatePersistentImg.sh (默认会创建一个 1GB 大小的 persistence.dat 文件,ext4文件格式,label为 casper-rw)。
sh CreatePersistentImg.sh [ -s SIZE_IN_MB ] [ -t FSTYPE ] [ -l LABEL ] [ -c CFG ] 例如: sh CreatePersistentImg.sh ----> persistence.dat, 1GB 大小, ext4 文件系统, label 为 casper-rw sh CreatePersistentImg.sh -l MX-Persist ----> persistence.dat, 1GB 大小, ext4 文件系统, label 为 MX-Persist sh CreatePersistentImg.sh -s 2048 ----> persistence.dat, 2GB 大小, ext4 文件系统, label 为 casper-rw sh CreatePersistentImg.sh -s 4096 -t xfs ----> persistence.dat, 4GB 大小, xfs 文件系统 (当前只支持 ext2/ext3/ext4/xfs), label 为 casper-rw sh CreatePersistentImg.sh -l persistence -c persistence.conf ----> persistence.dat, 1GB 大小, ext4 文件系统, label 为 persistence 最后还会在 persistence.dat里面会创建一个 persistence.conf 文件,文件内容只有一行,为 "/ union" 对于有一些发行版有这种要求,比如 Debian、KALI、CloneZilla等。
- 在生成数据文件以及拷贝文件到U盘时,注意使用sync把数据完全写入磁盘。
- 不同的发行版本使用的默认Label不同,可以通过 -l 参数指定,比如ubuntu默认为casper-rw, MX Linux默认为 MX-Persist等。
- 持久化数据文件必须放在镜像分区中,可以是根目录下,也可以是其他子目录下。另外并不需要和对应iso文件放在同一目录下。
- 持久化数据文件制作好后,可以作为一个模板,压缩后保存在电脑上(压缩后非常小),这样就无需每次都新建一个。
-
- 扩展持久化数据文件
有些情况下,可能在使用一段时间之后发现持久化空间不足。如果使用一个新的持久化数据文件,又需要备份恢复原有数据,比较耗时。
这里提供了一个 ExtendPersistentImg.sh 脚本用来无损扩展持久化数据文件。 把它下载下来,在 Linux shell 中按照说明执行即可。
sudo sh ExtendPersistentImg.sh datfile extend_size_mb 例如: sudo sh ExtendPersistentImg.sh persistent.dat 2048 表示把 persistent.dat 文件扩展 2048MB,即如果原始 persistent.dat 文件大小是 1GB,则扩展之后变成 3GB
-
- 启动前的提示 (1.0.12+)
在启动配置了数据持久化的ISO文件时会显示一个提示菜单。你可以选择本次启动是否使用持久化以及使用哪一个持久化数据文件。
我的目录结构
iso中放置镜像文件
persistence中放置持久化文件在 https://github.com/ventoy/backend/releases 中下载
ventoy中放置配置文件ventoy.json



