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

本文主要是介绍龙蜥开发者说:夏日编码奇遇,中国科学院大学学子的开源世界探索记 | 第 27 期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

「龙蜥开发者说」第 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 时,我也没想到自己后来会一头扎进来,并且持续在开源社区里留下自己的脚印。同学们,无论如何,既然迈出了第一步,就要坚定不移的走下去,只要不放弃才是成功的关键。现在正值一年夏季,龙蜥社区推出了各种开源大赛、学习赛,还在犹豫的同学们快积极地参与进来吧,期待在社区中一同共建美好。

—— 完 ——

这篇关于龙蜥开发者说:夏日编码奇遇,中国科学院大学学子的开源世界探索记 | 第 27 期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009011

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return