概述
海光安全加密虚拟化CSV是一项基于国产海光CPU硬件的云主机保护技术,CSV云主机的运行时状态(如CPU寄存器、内存数据及中断处理等)均受到CPU硬件的隔离和加密保护,云厂商和外部攻击者均无法窃取或篡改CSV云主机的内部运行状态(如计算中的数据等)。关于海光CSV技术的更多信息,请参见Hygon Arch。
CSV云主机关键特性
内存隔离:通过处理器硬件机制,为每个云主机构建独立的、受保护的执行环境,实现云主机之间、云主机和宿主机之间的硬件级逻辑隔离。即使宿主机系统或管理员拥有最高权限,也无法读取或篡改虚拟机内的数据,从根本上杜绝了“从内部”被窥视的风险,实现数据在处理过程中的“可用不可见”。
内存加密:数据在内存中全程以密文形式存在,仅能在 CPU 内部解密使用。即使机房被入侵,攻击者通过物理手段也难以探测到或篡改内存中的数据内容。
远程证明:支持远程证明功能,允许信任域所有者验证其虚拟机是否在可信的硬件环境中启动,并且没有被篡改,增强了对基础设施的信任。
安全启动:确保虚拟机仅从经过签名和验证的引导加载程序启动,进一步加强了启动过程的安全性。
体验一致:提供与普通云主机完全一致的管理接口和操作体验,通过控制台、API 等,像创建和管理任何一台普通云主机一样,轻松创建和管理机密云主机,运维习惯无需任何改变。
应用无损:海光CSV可以为您的云主机和应用提供默认的安全保护,您的现有应用系统,无论是传统的 Java 还是现代的 Python 应用,均无需进行改造,可直接运行在机密云主机。
创建CSV云主机
您可以通过控制台或OpenAPI创建具备CSV特性的安全增强计算型云主机hc4t和安全增强内存型云主机hm4t。
通过控制台创建CSV云主机
在控制台创建机密计算云主机的步骤与创建普通云主机一样,但需要注意选择特定规格,即支持海光CSV特性的云主机规格。请参见:创建弹性云主机-弹性云主机-快速入门 - 天翼云
登录天翼云,点击页面右上方“控制中心”,进入控制台。
单击管理控制台左上角的
,选择区域,此处我们选择华北2。
点击计算-弹性云主机进入创建云主机页面。
单击右上角创建云主机进入云主机购买页面,按照以下配置创建云主机。
配置项 说明 实例规格 仅hc4t、hm4t规格支持CSV功能。 镜像 选择CTyunOS V4.0 25.07 64 位(40GB)镜像。 根据界面提示,完成海光CSV云主机创建。
通过OpenAPI创建CSV云主机
您可以调用创建一台按量付费或包年包月的云主机创建CSV云主机,需要注意的参数如下表:
| 参数 | 说明 | 示例 |
| flavorName | 指定支持CSV功能的实例规格,当前仅 hc4t、hm4t规格支持。 | hc4t.large.2 |
| imageID | 指定支持CSV的镜像ID,当前仅CTyunOS V4.0 25.07 64 位(40GB)镜像支持。 | 4636d1df-82c2-4db8-9fff-6a20e0af1c5f |
检查CSV使能状态
在使用CSV加密计算环境前,建议您先通过以下命令检查云主机的CSV使能状态。
sudo dmesg | grep CSV返回类似结果如下图,即表示CSV已经使能。
验证CSV远程证明
您可以通过在CSV云主机中生成远程证明报告,并通过工具验证其可信性,证明云主机处于可信安全的CSV环境。天翼云为您提供多种方式,以便于您对CSV云主机进行远程证明认证。远程证明相关信息请参见远程证明服务。
在您对CSV云主机进行远程证明认证前,请通过如下命令确保CSV相关驱动已经加载:
ls -l /dev/csv-guest若没有结果返回,需要执行如下命令:
sudo sumodprobe csv-guest方式一:自行调用天翼云提供的远程证明服务接口进行验证
执行以下命令,检查libhygoncsv_attester.so在云主机内的存在:
ls /usr/lib64/libhygoncsv_attester.so执行以下命令,检查是否有ra-agent工具:
rpm -qa | grep ra-agent如果没有结果返回,则需要执行以下命令进行安装:
wget http://internal.mirrors.ctyun.cn/ctyun-tools/ecs/cpu/tools/x86/gta/ra-agent-0.0.1-1.ctl4.x86_64.rpmrpm -ivh --nodeps ra-agent-0.0.1-1.ctl4.x86_64.rpm执行以下命令,在客户端本地生成随机数:
head -c 32 /dev/urandom | base64 -w 0执行示例:
执行以下命令,检查是否有ra-cli工具:(对应步骤2)
rpm -qa | grep ra-cli若该工具存在,则可以继续执行如下命令:
./attestation_cli evidence get \ --attester-types "hygon_csv" \ --nonce-type "user" \ --nonce "<填入上一步的结果,删除尖括号>" \ --out "evidence.txt"执行示例:
提示
类似的Error信息可忽略。
若该工具不存在,则需要执行以下命令:
curl -X POST http://127.0.0.1:8088/global-trust-authority/agent/v1/evidences \ -H "Content-Type: application/json" \ -d '{ "attesters": [{ "attester_type": "hygon_csv" }], "nonce_type": "user", "nonce": "<填入上一步的结果,删除尖括号>", "attester_data": {"test_key": "test_value"} }' > evidence.txt
在客户端本地将证据发送给天翼云远程证明服务进行校验(对应步骤3和4),通过OpenAPI调用接口,参数填入evidence.txt的内容即可。
如果证据是伪造的,则会得到类似下面的结果:
如果证据是由硬件正确签名的,则会返回类似下面的结果:
其中包含一个token字段,将token字段后面的值放入https://www.jwt.io/中左侧进行解析,解析后内容显示在右侧,如下所示:
关于远程证明报告的解析内容,您需要关注以下字段:
eat_nonce 应等于在第4步中添加的nonce值,证明“证据”是在此次远程证明中刚生成的。 measure 云主机启动过程所载入软件的度量值 policy_asid_reuse 若=1,与其他云主机共用ASID policy_csv3 若=1,则叠加了CSV3的特性 policy_es 若=1,则叠加了CSV2的特性 policy_nodbg 若=1,则云主机不可被宿主机上用户调试 policy_noks 若=1,则不与其他云主机共用内存加密密钥
方式二:自行调用海光提供的远程证明接口进行验证
在云主机内下载如下远程证明样例工具并安装相关python包。
wget https://enclave-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/csv/requirements.txtwget https://enclave-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/csv/csv-attestation.pysudo pip3 install -r requirements.txtchmod +x ./csv-attestation.py安装成功后,在云主机内调用该工具以生成“证据”,“证据”保存在当前目录下,默认名称为report。
sudo ./csv-attestation.py generate -r ./在您生成“证据”时,您也可以执行如下命令添加nonce,用以确认“证据”为本次生成。
head -c 32 /dev/urandom | base64sudo ./csv-attestation.py generate -r ./ -u <填入上一条命令的结果,删去尖括号>执行如下命令,在本地安全环境校验“证据”。
sudo ./csv-attestation.py verify -r ./report该脚本会帮助您从海光厂商拉取证书,并验证“证据”。您可对返回的内容自行校验,示例如下:
说明
“POLICY”的含义与方式一中的“policy”类似,对于布尔值,出现则代表“1”,未出现则代表“0”。
若在第2步中添加了nonce,Userdata字段中将包含对应的nonce。
CSV云主机限制说明
CSV云主机暂不支持从虚拟机内部发起重启操作(如执行reboot命令)。
CSV云主机因开启CSV特性后,内存数据会通过CPU硬件进行加密保护,因此性能相较普通云主机存在一定损失。
镜像限制:仅支持CTyunOS V4.0 25.07 64 位(40GB)镜像。
Linux guest kernel SWIOTLB buffer已知问题:
在写盘时若负载过大,虚拟机内部会打印报错信息:swiotlb buffer is full,不影响执行正确性。该错误出现是因为开启了CSV特性的云主机内部将使用特定的非加密内存(SWIOTLB)用于外设通信,该内存区域的大小默认情况下为云主机可用内存的6%(但不大于1 GiB)。
大规格插入多张ENI弹性网卡可能导致云主机崩溃,原因为网卡多队列情况下SWIOTLB内存可能不足导致内存分配失败,您可以在控制台将对应云主机关机并卸载对应弹性网卡以从启动失败中恢复。