龙蜥开发者说:夏日编码奇遇,中国科学院大学学子的开源世界探索记 | 第 27 期

news2024/9/20 0:38:29

「龙蜥开发者说」第 27 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了中国科学院大学学生赖堃来分享「夏日编码奇遇!中国科学院大学学子的开源世界探索记」。

欢迎阅读上期故事《一个人出发,一群人抵达》。开发者说系长期活动,对于积极投稿、多次分享的童鞋,我们还有神秘大礼鼓励!诚邀开发者们分享真实体验,以文会友、共同学习、一起进步。

图片

本期故事主角:赖堃,中国科学院大学 2021 级硕士生、2023 开放原子开源大赛-龙蜥机密计算赛题一等奖获得者、龙蜥社区机密计算 SIG Maintainer。2022 阿里巴巴编程之夏参赛者,2023 开放原子开源大赛-龙蜥机密计算赛道参加了“基于CPU TEE 的 SPDM 通信协议”赛题,设计了将机密计算中的 CPU TEE 远程证明过程与 CPU 验证外部设备时使用的 SPDM 通信协议结合的方案,并在此基础上实现了一个纯 Rust 语言的安全通信框架 rats-rs。

Hi 大家好!作为一名大学生,分享下我在国产操作系统开源领域的探索与实践经验,并介绍如何一步步深入到机密计算这一前沿技术领域,贡献自己的一份力量。

实际上,我第一次了解龙蜥社区是在 2022 年暑假的编程之夏 ASoC 活动。当时春季学期已过半,面对接下来的暑假,我正不知该如何安排,便被已经成功报名开源之夏的同学安利参加编程之夏 ASoC 活动,于是我开始打开电脑浏览起了项目列表,并很快就找到了感兴趣的课题。鉴于本科期间参加 Google 编程之夏的经验,我果断地选择了把编程之夏 ASoC 活动加入到我的暑期安排中。虽然在此之前,我对机密计算技术已经有一些了解,但我很快发现理论知识和实际应用之间的差距,从论文和网络资料中学习得再多,都不如实际操作带来的收获大,属于是百闻不如一“用”了。

2022 编程之夏 ASoC 活动中,我选择的课题是“基于开源的 rats-tls 库实现一个跨 TEE 实例的网关”,在和项目导师进行充分的探讨后,我最终从提出的几个候选方案中确定了其中一版作为最终设计方案,并正式着手开工实现。

起初,在项目进行的过程中,我也遇到了不少疑惑和困难,有些是对项目目标理解上的疑问,也有一些是在开发环境搭建上遇到的困难。在把困惑点呈现出来后,我很快得到了开源导师及社区中其他伙伴们的耐心回复和帮助。最终,我完成了我的作品 enclave-network-gateway,并在 Anolis 8.6 环境中成功运行了示例程序

尽管这一活动项目性质偏实验性,但在此过程中产生的探索价值远远大于实际应用价值,以至于过了这么久,这段参赛经历仍然让我受益匪浅。

图片

(图 1/enclave-network-gateway示例程序)

因为我对机密计算这个新兴技术有着浓厚兴趣,加上在学校的研究方向与之有关联,在 2022 编程之夏 ASoC 结束后,我继续在龙蜥开源操作系统社区中贡献代码,为社区项目进行了一些新特性的开发。鉴于对社区的突出贡献,我也逐渐成为了机密计算项目的 Maintainer。

近两年,在和社区以及社区开发者更深入接触过程中,我受益匪浅。尽管以往我也在 GitHub 上为一些开源项目做过一些小的贡献,但大多都是一些浅层的小修小补。在龙蜥社区中,我作为机密计算项目的 Maintainer 之一,以实现项目目标为目的推动项目进展又是另一种不同的体验。在与社区伙伴的合作下,我第一次完成了为新功能编写 Proposal 并在社区中发起讨论,通过创建 issue 来跟踪 Proposal 的实现进展,并逐个提交 PR 将其实现。每当看到清单中的一个个 PR 从绿色的 Open 状态经过 Review 和合入变为紫色的 Merged 状态,总是能让我倍感开心。我觉得开源社区就是一群志同道合的人在一起做有意思的事情,开 issue、写 RFC、提 PR,以一种开源社区特有的默契来推动目标的实现,共同分享喜悦,这便是开源的魅力。

图片

(图 2/proposal实现过程的PR清单)

在社区中,你可以用其他伙伴提供的开源组件一步一步来搭建出自己的程序并将其作为开源软件发布,让更多人使用。如果觉得已有的组件不能满足自己的需求,或者发现了代码中的 BUG 时,你可以很快参与进来一起完善它。在我参与社区建设以来,令我印象深刻的一次是,我用 Occlum 测试运行我编写的程序,总是会遇到莫名其妙的 Segment Fault 错误,经过我自己一番探索后,确定这是一个新问题。为了更好的解决这个问题,我便尝试获得更详细的错误信息。幸运的是  Occlum 也是一款开源软件,通过几次代码修改和重新编译调试,我和社区中的伙伴们和一起分析确定了最终问题来源,并在 GitHub 上提出了 issue,在和该项目的开发者讨论后,我们提交了修复 PR。

机会总会不期而遇!偶然间,我看到了 2023 年开放原子开源大赛启动报名,于是我报名参加了龙蜥社区的“OpenAnolis 孵化机密计算和机密容器的创新项目 - 基于 CPU TEE 的 SPDM 通信协议”挑战赛。与以往参加的编程之夏活动不同,它的体量更大,允许参赛者在方案上更加灵活的设计,这也对参赛选手提出了更高的要求,因此,这是一场令我印象深刻的赛事。

在这项比赛中,需要基于 CPU 和外部设备通信常用的 SPDM 协议,设计出适合 CPU TEE 之间的 SPDM 通信协议。为了解决 SPDM 协议规范不适用于 CPU  TEE 的问题,我们需要在 SPDM 消息中融入 CPU TEE 远程证明能力,这对我来说是充满挑战的,因为我对 SPDM 并不是特别熟悉。为了快速定位项目目标,制定方案并明确项目实施路线,在赛题初期,我花费了较多的时间收集和学习 SPDM 协议相关资料,尤其是需要啃冗长的标准文档。值得高兴的是,这一过程锻炼了后期我对资料的整理和归纳总结能力

整个项目分为协议设计和实现两部分。在协议设计环节,通过对 SPDM 协议流程的剖析,我们详细设计了针对 CPU TEE 的 SPDM X.509 证书格式,主体思想是通过在证书中内嵌远程证明的 Evidence 和 Endorsements,并以自签名证书的形式构造 SPDM X.509 证书。接着我们对 CPU TEE 的 Measurements 消息内容进行了定制,将从 Evidence 中解析出的 Claims 作为 Measurements 消息的内容。在设计的过程中,我们还采用了二进制体积友好的 CBOR 格式对方案中内嵌在 X.509 证书中的数据结构进行序列化。

在确定好方案后,便是将其落地的实现过程,除了达成实现该协议的目的,我们更大的目标是设计一个能够直接让上层应用调用的安全通信框架 rats-rs。由于 Rust 语言的内存安全特性、易于跨语言集成、具有丰富的软件包等特点,我们使用了 Rust 语言来实现 rats-rs,并在 SGX 实例和 TDX 实例上成功运行了 demo 程序,实现了 TEE 实例的安全通信。

图片

(图 3/rats-rs的架构设计)

经过 4 个多月的角逐,我们终于获得了“OpenAnolis 孵化机密计算和机密容器的创新项目 - 基于 CPU TEE 的 SPDM 通信协议”挑战赛一等奖。当然本次比赛的结果仍然不能算是完美的,还有许多可以补充的内容,例如对双向远程证明的实现,以及对更多 TEE 的支持等,这些都是后续需要展开的工作。此外,一个好的开源项目,完备的实现只是其中之一,还得要方便用,这样才能让更多人可以参与进来。为此我们基于 GitHub Action 架设了持续集成(CI)、自动化单元测试、覆盖率计算等工作流,以保证代码质量,还提供了样例程序、丰富的文档、基于 Docker Image 的开发环境,这些都是我在参与社区开源项目中学到的经验。

图片

(图 4/开源大赛现场颁奖环节)

对于新人开发者来说,踏入开源社区的第一步总是困难的。在没有前辈领路,不熟悉怎么玩的情况下,许多同学都往往不知道怎么入手,或者害怕犯错误。在我看来,参加开源竞赛,如编程之夏 ASoC 等活动是一个很好的切入点,尤其对于有理论基础但缺乏实践场景的在校生来说,无疑是一个很好的成长机会。

等你真正参加了开源社区后,你会发现,这里有热情的社区伙伴和开源导师,会指导你熟悉项目并快速上手,还可以根据自己的开发经验,选择不同难度的赛题入手。说实话,在我第一次参加编程之夏 ASoC 时,我也没想到自己后来会一头扎进来,并且持续在开源社区里留下自己的脚印。同学们,无论如何,既然迈出了第一步,就要坚定不移的走下去,只要不放弃才是成功的关键。现在正值一年夏季,龙蜥社区推出了各种开源大赛、学习赛,还在犹豫的同学们快积极地参与进来吧,期待在社区中一同共建美好。

—— 完 ——

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1703781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理!

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 NeRF2Mesh 提出了一种从多视角 RGB 图像重建纹理表面网格的新方法。它克服了传统 NeRF 模型的局限性,由于其隐式表示,传统 NeRF 模…

有限元法之有限元空间的构造

目录 一、区域Ω的剖分 二、三角形一次元 三、一次元的基函数与面积坐标 四、三角形二次元及其基函数 前两节我们介绍了有限元基本概念和变分理论的推导,本节我们继续探讨有限元空间的构造。 一、区域Ω的剖分 对矩形区域进行三角剖分,其中x方向剖…

CPU数据传送控制方式

引入 为了实现CPU与I/O设备信息交换的同步 无条件传送 示例1: 示例2: 程序查询方式 引入 工作过程 单个外设 多个外设 特点 中断传送方式 工作过程 特点 DMA 概述 DMAC功能 总线请求信号HOLD 总线请求响应信号HOLDA 工作过程 小结

C++ 程序的基本要素

一 标识符 程序中变量、类型、函数和标号的名称称标识符。 a,b,name,int,char,main,void等。 系统已有的标识符称为关键字。 常见关键字 using,namespace,void,return; int,float,double,char,bool,signed,unsignex, long,short,const,true,false,sizeof if,else,for,do,whil…

基于STM32实现智能空气净化系统

目录 引言环境准备智能空气净化系统基础代码示例:实现智能空气净化系统 空气质量传感器数据读取风扇和滤网控制显示系统用户输入和设置应用场景:家庭空气净化与健康管理问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌入式系统中…

揭秘淘宝API接口:轻松连接电商巨头,打造无限商业可能

淘宝API接口是淘宝平台对外开放的一系列接口,通过这些接口,开发者可以获取淘宝平台上的商品信息、订单信息、物流信息等数据,实现与淘宝平台的交互。淘宝API接口支持多种数据格式,如JSON、XML等,方便开发者根据自己的需…

【Python】【报错解决】【无法安装socket库】No matching distribution found for socket

一、问题描述 如下图,笔者在做一个安全相关的项目时,遇到如下报错: No matching distribution found for socket 在尝试安装socket(套接字)库时报错,报错代码: pip install socket二、原因及解…

基于SSM前后端分离版本的论坛系统

目录 前言 一、项目背景 二、相关技术及工具 三、数据库设计 四、软件开发 4.1、搭建环境 4.1.1、创建工程 4.1.2、配置application.yml文件 4.1.3、环境测试 创建测试接口 4.1.4、继续配置 4.2、公共组件 4.2.1、创建工程结构 4.2.2、配置数据源 添加相关依赖 …

视频监控平台AS-V1000产品介绍:账户或用户数据的导入和导出功能介绍

目录 一、功能描述 (一)导入功能定义 (二)导出功能定义 二、用户数据的导入导出的作用 三、AS-V1000新版本的导出和导入功能介绍 (一)功能主界面 (二)导出功能 1、导出操作 …

彭永东所交“答卷”道尽万般无奈,贝壳找房营收、利润双双锐减

就今年第一季度业绩披露后两日的股价变动来看,贝壳找房(下称“贝壳”)似乎并未在港股和美股市场取得预期的效果。 港股市场,截至5月24日收盘,贝壳-W(HK:02423)报收43.9港元/股,当日跌…

单元测试(了解)

单元测试定义 针对最小功能单元(方法),编写测试代码对其进行正确性测试 之前如何进行单元测试?有什么问题? main中编写测试代码,调用方法测试 问题: 无法自动化测试 每个方法的测试可能不是…

Node.js —— Express 中间件、接口编写、接口跨域 【0基础向Express模块学习】

目录 中间件的概念 什么是中间件 现实生活中的例子 Express 中间件的调用流程 ​编辑 Express 中间件的格式 next 函数的作用 Express 中间件的初体验 定义中间件函数 全局生效的中间件 定义全局中间件的简化形式 中间件的作用 ​编辑 定义多个全局中间件 局部生…

OrangePi AIpro评测 - AI服务篇

0. 环境 ●OrangePi AIpro ●windows电脑 ●路由器 之前我已经对OrangePi AIpro进行了些嵌入式基本操作的评测。接下来进行AI部分。来看看华为昇腾的特别之处。 1.普通CPU和AI CPU 这里请提前用调试串口或者ssh到板子上,记得用户名和密码,分别是HwHiAiUs…

IDEA创建Spring Boot项目

1 打开新建项目界面 如图1,打开IDEA,点击菜单栏的File->New->Project,打开新建项目界面。 图1 新建项目 2 填写项目信息 在新建项目界面点击左侧工具栏的Spring Initializr选项,进行Spring Boot项目信息的填写&#xff…

Pytorch深度学习实践笔记11(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:pytorch深度学习 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibi…

Bug:Linux用户拥有r权限但无法打开文件【Linux权限体系】

Bug:Linux用户拥有r权限但无法打开文件【Linux权限体系】 0 问题描述&解决 问题描述: 通过go编写了一个程序,产生的/var/log/xx日志文件发现普通用户无权限打开 - 查看文件权限发现该文件所有者、所有者组、其他用户均有r权限 - 查看该日…

AI数学知识

AI数学知识 1、线性代数相关(矩阵)1、什么是秩2、奇异值分解3、特征值分解和奇异值分解4、低秩分解 回归分类知识点2、概率论相关1、先验概率和后验概率2、条件概率、全概率公式、贝叶斯公式、联合概率3、最大似然估计4、贝叶斯公式和最大似然估计5、伯努…

深入解读力扣154题:寻找旋转排序数组中的最小值 II(多种方法及详细ASCII图解)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

【VTKExamples::Utilities】第十三期 SaveSceneToFile

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例SaveSceneToFile,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步…

高项案例分析知识点总结

文章目录 纠错题计算题进度估算成本管理立项管理版本管理组合管理知识产权信息技术计算题运筹学 纠错题 人:人员经验、能力、数量、缺少培训;自己一个人完成需求和计划不正确流程:先做什么,后做什么,流程是否正确。是…