Commit b053e16b authored by wydx's avatar wydx
Browse files

update README.md

parent a9bf6047
No related merge requests found
Showing with 87 additions and 94 deletions
+87 -94
......@@ -94,17 +94,10 @@ First, it's suggested that users create network using **172.20.0.0/16**, because
##### Run HANG in docker
Second, users can use **docker run** to run **Client side** with new terminal:
`docker run -it --rm --name hang_container_client \
--network=hang_network --ip=172.20.0.2 \
--device=/dev/tdx_guest \
-w /home/newuser/team-half-burnt team-half-burnt:v1.0 \
./bazel-bin/source/exe/envoy-static -c ./HANG/TDX/envoy-demo-tls-client.yaml -l off --component-log-level upstream:debug,downstream:debug,connection:debug`
`docker run -it --rm --name hang_container_client --network=hang_network --ip=172.20.0.2 --device=/dev/tdx_guest -w /home/newuser/team-half-burnt team-half-burnt:v1.0 ./bazel-bin/source/exe/envoy-static -c ./HANG/TDX/envoy-demo-tls-client.yaml -l off --component-log-level upstream:debug,downstream:debug,connection:debug`
**Server side** is similiar with a new terminal:
`docker run -it --rm --name hang_container_server \
--network=hang_network --ip=172.20.0.3 \
--device=/dev/tdx_guest \
-w /home/newuser/team-half-burnt team-half-burnt:v1.0`
`docker run -it --rm --name hang_container_server --network=hang_network --ip=172.20.0.3 --device=/dev/tdx_guest -w /home/newuser/team-half-burnt team-half-burnt:v1.0`
This will makes users enter the container, and users need to run more in **Server side**:
`nohup python3 -m http.server 80 &`
`./bazel-bin/source/exe/envoy-static -c ./HANG/TDX/envoy-demo-tls-server.yaml -l off --component-log-level upstream:debug,downstream:debug,connection:debug`
......
# 2024年全国大学生计算机系统能力大赛-操作系统设计赛(全国)-OS功能挑战赛道
## 队伍信息
- **队伍名称**: 半张烧焦队
- **成员**: 吴羽戴翔、孔玺畅、李文博
- **指导教师**: 魏成坤、张佳
- **学校**: 浙江大学
## 赛题简介:
目前AIGC类推理服务型应用爆火,但目前所有推理服务几乎都面临如下安全风险:
1.大模型所在系统的安全问题,将导致大量高度机密和敏感的训练数据(如个人隐私数据和企业数据)以及高价值的模型参数信息被泄露。
2.模型提供者会因与平台提供者的所有权不同而产生的信任问题,导致不敢使用平台提供者提供的计算平台。
3.企业用户无意间输入的包含企业机密信息的prompt被泄露给AIGC类应用。
4.为了解决上述第三个问题,需要实现一种TEE安全可信网关架构和组件。
## 预期特征:
TEE安全可信网关组件应满足:
1.通信必须基于远程证明的可信信道,确保通信双方的身份认证和数据完整性
2.包含完整的TEE远程证明组件
3.支持至少两种TEE平台
4.本地推理服务Client侧和远端的推理服务Server侧应各应有一个TEE安全可信网关来代表各自的网络,并基于可信信道进行通信,确保网络间的安全连接。
5.推理服务端和推理客户端应基于开源软件方案,并结合TEE安全可信网关完成端到端的DEMO。
6.(加分项)框架应兼容多种网络形态,并支持N:M网络通信,即任意数量的客户端可以与任意数量的服务器进行安全通信,解决两个网络内任意C/S(客户端/服务器)应用间的安全可信通信问题。
7.(加分项)在推理客户端也是TEE的情况下,能够让推理服务端验证出推理客户端是符合预期的TEE。
预期目标:
在尽可能少甚至无需修改推理服务(作为C/S模型中的Server)和推理客户端(作为C/S模型中的Client,通常为REST API或Web UI前端等形式)的前提下,设计并实现一个TEE网关,实现安全可信的通信框架,不仅保证推理客户端和推理服务之间的通信内容安全,还能基于TEE远程证明过程验证运行在TEE内的推理服务的可信度。
# 2024年全国大学生计算机系统能力大赛-操作系统设计赛(全国)-OS功能挑战赛道
## 队伍信息
- **队伍名称**: 半张烧焦队
- **成员**: 吴羽戴翔、孔玺畅、李文博
- **指导教师**: 魏成坤、张佳
- **学校**: 浙江大学
## 赛题简介:
目前AIGC类推理服务型应用爆火,但目前所有推理服务几乎都面临如下安全风险:
1.大模型所在系统的安全问题,将导致大量高度机密和敏感的训练数据(如个人隐私数据和企业数据)以及高价值的模型参数信息被泄露。
2.模型提供者会因与平台提供者的所有权不同而产生的信任问题,导致不敢使用平台提供者提供的计算平台。
3.企业用户无意间输入的包含企业机密信息的prompt被泄露给AIGC类应用。
4.为了解决上述第三个问题,需要实现一种TEE安全可信网关架构和组件。
## 预期特征:
TEE安全可信网关组件应满足:
1.通信必须基于远程证明的可信信道,确保通信双方的身份认证和数据完整性
2.包含完整的TEE远程证明组件
3.支持至少两种TEE平台
4.本地推理服务Client侧和远端的推理服务Server侧应各应有一个TEE安全可信网关来代表各自的网络,并基于可信信道进行通信,确保网络间的安全连接。
5.推理服务端和推理客户端应基于开源软件方案,并结合TEE安全可信网关完成端到端的DEMO。
6.(加分项)框架应兼容多种网络形态,并支持N:M网络通信,即任意数量的客户端可以与任意数量的服务器进行安全通信,解决两个网络内任意C/S(客户端/服务器)应用间的安全可信通信问题。
7.(加分项)在推理客户端也是TEE的情况下,能够让推理服务端验证出推理客户端是符合预期的TEE。
预期目标:
在尽可能少甚至无需修改推理服务(作为C/S模型中的Server)和推理客户端(作为C/S模型中的Client,通常为REST API或Web UI前端等形式)的前提下,设计并实现一个TEE网关,实现安全可信的通信框架,不仅保证推理客户端和推理服务之间的通信内容安全,还能基于TEE远程证明过程验证运行在TEE内的推理服务的可信度。
## 项目简介:
针对赛题目标,我们选择在[envoy开源网关 版本1.28.0-dev](https://github.com/inclavare-containers/envoy_librats/tree/706fe7871ab5fe631406db1e0fe5af1c4d0eb1b8)的基础上进行改造,由于赛题参考给出的[RATS-TLS技术](https://github.com/inclavare-containers)并不适用于envoy网关改造,所以选择了inclavare-containers下的[librats](https://github.com/inclavare-containers/librats)作为技术支持进行引入,将librats技术运用在网关上,并对其进行envoy的适配改造,同时修改envoy的transport socket上下文,将TEE远程证明与TLS相结合,实现网关之间可信信道的建立。
## 项目实现:
我们将项目命名为HANG,取自Heterogeneous Authentication Network Gateway,旨在使用网关技术,满足在各种场景下(包括但不限于AIGC)的C/S模型通信需求,在不修改Client service和Server service的情况下,完成对可信信道的建立并基于TEE远程证明验证处于Server端推理服务可信度。项目同时做到了:
- [x] 项目的TLS通信基于远程证明,C端可以验证S端身份信息和数据完整性。
- [x] 项目使用开源的librats作为远程证明组件,在envoy中修改TLS并完成远程证明
- [x] 项目支持SGX与TDX平台进行构建,项目基于TDX进行演示,SGX同理
- [x] 项目的C/S端各有一个网关,在网关之间完成可信信道的建立
- [x] 项目的客户端和服务端基于python和curl完成了demo演示,同时提供了完整的构建方案和步骤指南
- [x] 可以从dockerfile、dockerhub、source三个层面完成项目的构建
我们将项目命名为HANG,取自Heterogeneous Authentication Network Gateway,旨在使用网关技术,满足在各种场景下(包括但不限于AIGC)的C/S模型通信需求,在不修改Client service和Server service的情况下,完成对可信信道的建立并基于TEE远程证明验证处于Server端推理服务可信度。项目同时做到了:
- [x] 项目的TLS通信基于远程证明,C端可以验证S端身份信息和数据完整性。
- [x] 项目使用开源的librats作为远程证明组件,在envoy中修改TLS并完成远程证明
- [x] 项目支持SGX与TDX平台进行构建,项目基于TDX进行演示,SGX同理
- [x] 项目的C/S端各有一个网关,在网关之间完成可信信道的建立
- [x] 项目的客户端和服务端基于python和curl完成了demo演示,同时提供了完整的构建方案和步骤指南
- [x] 可以从dockerfile、dockerhub、source三个层面完成项目的构建
### 工程文件:
项目对envoy源码围绕transport socket和secret相关进行了部分源码改造和增加,涉及到的文件包括:
1.在envoy yaml配置文件中添加librat配置
- api/envoy/extensions/transport_sockets/tls/v3/common.proto
- api/envoy/extensions/transport_sockets/tls/v3/tls.proto
- api/envoy/extensions/transport_sockets/tls/v3/tls_librats_config.proto
2.在envoy构建中,添加librats库,将librats作为envoy动态链接库
- bazel/external/librats.BUILD
- bazel/repositories.bzl
3.添加librats证书生成和传输逻辑
- envoy/secret/secret_manager.h
- envoy/secret/secret_provider.h
- source/common/secret/BUILD
- source/common/secret/librats_secret_provider_impl.cc
- source/common/secret/librats_secret_provider_impl.h
- source/common/secret/secret_manager_impl.cc
- source/common/secret/secret_manager_impl.h
4.添加librats证书验证和传输逻辑
- source/extensions/extensions_build_config.bzl
- source/extensions/transport_sockets/tls/BUILD
- source/extensions/transport_sockets/tls/cert_validator/BUILD
- source/extensions/transport_sockets/tls/cert_validator/default_validator.cc
- source/extensions/transport_sockets/tls/cert_validator/librats_validator.cc
- source/extensions/transport_sockets/tls/cert_validator/librats_validator.h
5.新增librats协议选择逻辑
- source/extensions/transport_sockets/tls/context_config_impl.cc
- source/extensions/transport_sockets/tls/context_impl.cc
6.撰写文档、添加librats配置
- HANG/TDX/Dockerfile
- HANG/TDX/README.md
- HANG/TDX/envoy-demo-tls-client.yaml
- HANG/TDX/envoy-demo-tls-server.yaml
- HANG/TDX/PCCS_config/sgx_default_qcnl.conf
- mobile/envoy_build_config/extension_registry.cc
具体修改内容可以大致参考commit 7d9da4e44eb006eb1ffb8015c91bdacbaf16d906。
项目对envoy源码围绕transport socket和secret相关进行了部分源码改造和增加,涉及到的文件包括:
1.在envoy yaml配置文件中添加librat配置
- api/envoy/extensions/transport_sockets/tls/v3/common.proto
- api/envoy/extensions/transport_sockets/tls/v3/tls.proto
- api/envoy/extensions/transport_sockets/tls/v3/tls_librats_config.proto
2.在envoy构建中,添加librats库,将librats作为envoy动态链接库
- bazel/external/librats.BUILD
- bazel/repositories.bzl
3.添加librats证书生成和传输逻辑
- envoy/secret/secret_manager.h
- envoy/secret/secret_provider.h
- source/common/secret/BUILD
- source/common/secret/librats_secret_provider_impl.cc
- source/common/secret/librats_secret_provider_impl.h
- source/common/secret/secret_manager_impl.cc
- source/common/secret/secret_manager_impl.h
4.添加librats证书验证和传输逻辑
- source/extensions/extensions_build_config.bzl
- source/extensions/transport_sockets/tls/BUILD
- source/extensions/transport_sockets/tls/cert_validator/BUILD
- source/extensions/transport_sockets/tls/cert_validator/default_validator.cc
- source/extensions/transport_sockets/tls/cert_validator/librats_validator.cc
- source/extensions/transport_sockets/tls/cert_validator/librats_validator.h
5.新增librats协议选择逻辑
- source/extensions/transport_sockets/tls/context_config_impl.cc
- source/extensions/transport_sockets/tls/context_impl.cc
6.撰写文档、添加librats配置
- HANG/TDX/Dockerfile
- HANG/TDX/README.md
- HANG/TDX/envoy-demo-tls-client.yaml
- HANG/TDX/envoy-demo-tls-server.yaml
- HANG/TDX/PCCS_config/sgx_default_qcnl.conf
- mobile/envoy_build_config/extension_registry.cc
具体修改内容可以大致参考commit 7d9da4e44eb006eb1ffb8015c91bdacbaf16d906。
### demo框架:
HANG结构图如下所示:
![HANG Structure](docs/pics/HANG.png "HANG Structure")
HANG结构图如下所示:
![HANG Structure](docs/pics/HANG.png "HANG Structure")
HANG过程如下:
1.C端向S端发起请求链接,通过向C端网关发起请求(demo中使用curl指令)
2.C端网关会将请求反向代理到S端网关
3.S端网关收到请求后,与C端网关完成TLS可信信道建立。在TLS第二次握手,S端网关会将Server service所处的TEE环境quote嵌入到X509证书的扩展部分,传递给C端网关;C端网关在接收到X509证书之后,会获取其扩展部分的TEE quote并进行远程证明,证明成功后,C端网关才会进行第三次TLS握手,否则链接建立失败。
4.S端网关和C端网关完成TLS握手,完成可信信道建立。
1.C端向S端发起请求链接,通过向C端网关发起请求(demo中使用curl指令)
2.C端网关会将请求反向代理到S端网关
3.S端网关收到请求后,与C端网关完成TLS可信信道建立。在TLS第二次握手,S端网关会将Server service所处的TEE环境quote嵌入到X509证书的扩展部分,传递给C端网关;C端网关在接收到X509证书之后,会获取其扩展部分的TEE quote并进行远程证明,证明成功后,C端网关才会进行第三次TLS握手,否则链接建立失败。
4.S端网关和C端网关完成TLS握手,完成可信信道建立。
整体链路的安全性由TLS保护,同时通过TEE quote远程证明的方式完成了C端对S端安全性的验证,传输过程中TLS的X509证书本质上是一个自签名证书,其公钥hash值会在TEE quote中存储,而TEE quote由TEE内部私钥签名,只有对应TEE硬件厂商才能解密,本质上是由TEE quote充当了HANG中X509证书的上一级证书。
整体链路的安全性由TLS保护,同时通过TEE quote远程证明的方式完成了C端对S端安全性的验证,传输过程中TLS的X509证书本质上是一个自签名证书,其公钥hash值会在TEE quote中存储,而TEE quote由TEE内部私钥签名,只有对应TEE硬件厂商才能解密,本质上是由TEE quote充当了HANG中X509证书的上一级证书。
## 结果演示:
## 构建指南
详见[HANG/TDX/README.md](HANG/TDX/README.md)
详见[HANG/TDX/README.md](HANG/TDX/README.md)
## 参考链接
- https://github.com/envoyproxy/envoy
- https://github.com/inclavare-containers/librats
- https://openanolis.cn/sig/coco
- https://github.com/inclavare-containers/rats-tls
- https://github.com/envoyproxy/envoy
- https://github.com/inclavare-containers/librats
- https://openanolis.cn/sig/coco
- https://github.com/inclavare-containers/rats-tls
# Introduction of HANG
This project aims to combine **Librats** and **Envoy**. We introduce **Librats** into **Envoy** to struct a new network gateway architecture based on TEE, which is called **HANG**.(Heterogeneous Authentication Network Gateway)
User can find the building instructions in **/HANG/TDX**.
User can find the building instructions in [/HANG/TDX](HANG/TDX/).
HANG based on open source project [envoy 1.28.0-dev](https://github.com/inclavare-containers/envoy_librats/tree/706fe7871ab5fe631406db1e0fe5af1c4d0eb1b8) and [librats](https://github.com/inclavare-containers/librats).
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment