目录
目录README.md

🔐 Chirunix HTTP Crypto Service项目说明

本项目基于开源虚拟机监控器 Rust-Shyper 以及开源Unikernel——Unishyper,实现了虚拟机间的 HTTP SHA256 哈希加密服务。其中,Rust语言实现的轻量级安全内核Unishyper上运行HTTP加密服务器,能够为通用虚拟机提供加密服务。

🌟 功能特性

  • HTTP 服务器: 基于 tiny_http 的轻量级 HTTP 服务器
  • SHA256 哈希: 安全的 SHA256 哈希计算
  • JSON API: 支持 JSON 格式的请求和响应
  • Web 界面: 提供友好的 HTML 文档页面
  • Unishyper 原生: 专为 Unishyper 操作系统设计
  • 丰富的平台支持:支持在Qemu、RK3588、Huawei Taishan200和Nvidia Jetson AGX Orin上运行,目前提供RK3588的运行示例

🚀 快速开始

本教程以RocketChip RK3588开发板为例。

编译和运行

  • 编译Rust-Shyper

    # 在 源代码/Rust-Shyper 下编译
    # 编译产物:
    # 源代码/Rust-Shyper/target/aarch64/release/Image_aarch64_rk3588
    make rk3588
  • 编译Unishyper

    # 在 源代码/Unishyper 下编译
    # 编译产物:
    # 源代码/Unishyper/examples/http_crypto_service/http_crypto_service_aarch64_release.bin
    make build APP=examples/http_crypto_service ARCH=aarch64 MACHINE=rk3588 PROFILE=release
  • 在RK3588上运行Rust-Shyper和管理虚拟机

    管理虚拟机即本赛题中的通用Linux虚拟机,启动方法详见Rust-Shyper开源仓库:https://gitee.com/openeuler/rust_shyper

  • 运行Unishyper

    # 将 Tools/ 下的shyper-cli、shyper.ko、vm1-config.json文件放在通用虚拟机的用户目录下
    # 安装shyper内核模块
    sudo insmod ./shyper.ko
    # 配置Unishyer安全内核信息
    sudo ./shyper-cli vm config vm1-config.json
    # 启动Unishyper安全内核服务
    sudo ./shyper-cli vm boot 1

运行完上述步骤后,通用Linux虚拟机和安全内核Unishyper都已正常运行,在使用安全服务之前,需要为通用虚拟机配置网络,内容详见下一部分——网络配置,安全内核无需配置网络。

通用虚拟机网络配置

配置虚拟网卡eth0

```bash
nmcliconmod'Wiredconnection1'ipv4 method manual
nmcliconmod'Wiredconnection1'ipv4 addresses10.0.0.1/24
nmcliconup'Wiredconnection1
```

配置直通网卡eth1

  • 安装UFW

    apt update
    apt install ufw
  • 编辑/etc/default/ufw

    修改下面两项:

    IPV6=no
    DEFAULT_FORWARD_POLICY="ACCEPT"
  • 编辑/etc/ufw/sysctl.conf

    去除行net/ipv4/ip_forward=1的#

  • 编辑/etc/ufw/before.rules

    在文件开头加入如下内容

    *nat
    :POSTROUTING ACCEPT [0:0]
    -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE
    COMMIT

服务访问

  • 服务地址: http://10.0.0.3:3000
  • API 端点: POST /hash
  • 文档页面: GET / (浏览器访问)

📋 API 接口

POST /hash

对数据进行 SHA256 哈希加密

请求格式:

POST /hash HTTP/1.1
Content-Type: application/json

{
  "data": "要进行哈希的数据"
}

响应格式:

{
  "original": "原始数据",
  "hash": "SHA256哈希结果(十六进制大写)",
  "status": "success"
}

错误响应:

{
  "error": "错误信息",
  "status": "error"
}

🧪 测试示例

使用 curl 测试

# 基本测试
curl -X POST http://10.0.0.3:3000/hash \
  -H "Content-Type: application/json" \
  -d '{"data": "hello world"}'

# 预期响应
{
  "original": "hello world",
  "hash": "B94D27B9934D3E08A52E52D7DA7DABFAC484EFE37A5380EE9088F7ACE2EFCDE9",
  "status": "success"
}

使用 Python 测试

import requests
import json

url = "http://10.0.0.3:3000/hash"
data = {"data": "hello world"}

response = requests.post(url, json=data)
print(json.dumps(response.json(), indent=2))

使用 JavaScript 测试

fetch('http://10.0.0.3:3000/hash', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({data: 'hello world'})
})
.then(response => response.json())
.then(data => console.log(data));

🛠️ 技术架构

依赖库

  • unishyper: Unishyper 操作系统支持
  • tiny_http: 轻量级 HTTP 服务器
  • ring: 密码学库,提供 SHA256 算法
  • serde: 序列化/反序列化框架
  • serde_json: JSON 处理
  • data-encoding: 十六进制编码

关键特性

  • #![no_std]: 无标准库环境,适合 unikernel
  • 内存安全: 使用 Rust 的内存安全特性
  • 高性能: 基于 Ring 的高性能密码学实现
  • 可扩展: 易于添加更多加密算法支持

🔧 配置说明

服务器配置

  • 监听地址: 0.0.0.0:3000
  • 支持的HTTP方法: GET, POST
  • 内容类型: application/json, text/html

安全特性

  • 哈希算法: SHA256
  • 编码格式: 十六进制大写
  • 输入验证: JSON 格式验证
  • 错误处理: 详细的错误信息

🎯 使用场景

  1. 数据完整性验证: 计算文件或数据的哈希值
  2. 密码学教学: 演示 SHA256 哈希算法
  3. API 集成: 作为微服务提供哈希计算功能
  4. 开发测试: 快速验证数据的哈希值

📝 开发说明

代码结构

src/
├── main.rs          # 主程序入口
├── hash_service.rs  # 哈希服务逻辑
├── http_handler.rs  # HTTP 请求处理
└── response.rs      # 响应格式定义

关键函数

  • sha256_hash(): SHA256 哈希计算
  • handle_hash_request(): 处理哈希请求
  • handle_request(): HTTP 请求路由
  • create_response(): 构造 JSON 响应

🚨 注意事项

  1. 安全性: 该服务主要用于演示,生产环境请添加额外的安全措施
  2. 性能: 单线程处理,大量并发请求可能导致性能问题
  3. 错误处理: 当前实现了基本的错误处理,可根据需要扩展
  4. 日志: 详细的请求日志便于调试,生产环境建议优化

📄 许可证

基于 Rust-Shyper 项目的许可证。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

赛题题目:基于虚拟化技术的操作系统安全增强技术

赛题说明:

安全是操作系统的重要需求,通用操作系统在密码凭证、生物信息等敏感数据保护方面存在风险,现有安全保护机制依赖处理器特定的硬件机制(如TrustZone、SGX等),在部署使用存在一定的局限性。基于虚拟化进行系统安全增强(如Windows的VBS机制、Android的pKVM等)也是近年来的重要方案,此外目前基于内存安全语言Rust实现操作系统也能够规避安全风险实现安全内核,将两者结合,可以借助虚拟化技术实现双内核架构可以解决安全和生态的平衡,通过同时运行通用内核和安全内核,由安全内核运行安全应用,为通用内核提供安全服务;由虚拟化层提供内存隔离和安全通信,从而支持内存隔离、凭据保护、安全分级等需求。

赛题要求:

基于虚拟化技术构建双内核架构,包括通用内核和安全内核,其中安全内核采用Rust语言实现,从而提升自身安全性。具体要求如下:

  • 虚拟化可以适配主流Hypervisor,包括但不限于Jailhouse、Rust-Shyper等;
  • 支持同时运行通用内核和安全内核,其中通用内核是Linux等通用操作系统内核,安全内核是基于Rust语言实现的内核;
  • 支持通用内核与安全内核的内存隔离和安全通信;
  • 设计安全应用,包括但不限于密码服务、凭据保护等,实现安全内核为通用内核提供安全服务的演示;
  • 任选一个处理器架构平台。

评分标准:

功能完整性(30%):

  • 基于Rust安全内核完成Hypervisor适配(40分);
  • 支持通用Linux内核和安全内核进行数据通信传输和控制交互(60分)。

应用效果(40%):

  • 设计应用场景,展示通用内核安全增强效果(60分);
  • 开展性能测试和优化,性能有明显提升的可以加分(40分)。

代码规范性(20%):

  • 代码结构清晰、可维护性高(80分);
  • 符合开源社区规范(20分)。

文档质量(10%):

  • 文档包含设计说明、部署说明、测试报告(50分);
  • 文档条例清晰、撰写规范(50分)。

赛题联系人:

马俊 majun@nudt.edu.cn

参考资料:

参赛资源支持:无

关于
401.5 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号