开源之夏活动参与的流程说明文档:https://summer-ospp.ac.cn/help/student/
在云服务应用跨节点交互通信场景中,服务方通常需要确认请求方的应用身份,即认证请求者确实是对资源有访问权限的实体之一。在工程实现上,我们通常会使用Oauth2认证协议令牌来完成这一过程,或者更直接的通过诸如JWT等格式的简单令牌来验证对方的身份。由此可见,各类令牌的签发和验证模块是保证这一机制安全性的核心,也是攻击者会优先考虑控制其运行的模块。因此在云计算纵深防御体系中,如何保护令牌的签发和验证模块代码运行在预期的可控状态下,就成为了一个重要命题,本项目旨在借助机密计算这一新兴技术,来完成对这一核心模块的安全防御改造。 机密计算技术提供了以硬件强制隔离为基础的“可信执行环境”(TEE),这种技术通过硬件控制的内存访问隔离和以硬件信任根构建的密码学体系,对运行时的代码提供了全生命周期的机密性保护和完整性保护,因此在本项目中,我们考虑使用机密计算技术来保护令牌的签发和验证过程,即将密钥生成和管理、令牌内容生成和签署、令牌签名验证等操作置于可信执行环境(TEE)中,以实现安全防御的目的。 当前工业界各家芯片厂商均已提供了对TEE的硬件支持,较为流行的例如Intel SGX、Intel TDX、AMD SEV、ARM TrustZone等等,从可信域 (术语叫做可信计算基 TCB)上来看,这些技术又分为了以Intel TDX和AMD SEV为代表的机密虚拟机技术,即以一个虚拟机作为TEE;和以Intel SGX和ARM TrustZone为代表的机密进程级技术,即以一个进程的某些部分作为TEE。他们各自的优劣也是明显的,机密虚拟机技术无需用户应用程序做额外的修改就可以无感运行在TEE中,但是TCB较大会带来攻击面增大的问题;而机密进程级技术需要从代码层面定制用户应用程序,但却有着比机密虚拟机更高的安全性。 本项目中,令牌的签发和验证等功能模块涉及到密码学操作,因此我们选择使用机密进程级技术,这里推荐使用Intel SGX。
- 关于机密计算的背景介绍,可以阅读我们团队在Anolis社区撰写发布的云原生机密计算白皮书,书的开头有对机密计算技术的介绍:https://developer.aliyun.com/ebook/7963
- Intel SGX:https://www.intel.com/content/www/us/en/developer/tools/software-guard-extensions/overview.html
- OAuth2认证协议:https://oauth.net/2/
- JWT:https://jwt.io/
本项的目标是基于Intel SGX编程,实现一个在高安全性TEE中运行的令牌签发和验证模块,要求以library的形式实现,需要具备如下基本功能:
- 提供顶层调用接口:顶层接口至少应该支持:签发令牌、验证令牌、获取公钥证书
- TEE中生成和管理非对称密钥
- TEE中签发令牌和验证令牌签名,要求至少支持JWT令牌格式,额外支持OAuth2协议令牌可加分
- 支持传入令牌自定义claim字段
- 支持导出令牌签名公钥证书,要求x.509格式自签名证书,且证书需要受到远程证明报告保护:x.509格式证书就不多做介绍了,不了解的可以自己google一下。这里重点解释一下证书如何受到远程证明报告的保护:所谓远程证明报告,就是TEE将自己的一些安全性信息(例如硬件版本号、应用程序度量值等)打包在一个特定的报告文件中,并由硬件信任根导出的私钥对这个文件签名,由于硬件厂商对每个硬件信任根均有备份,因此验证者可以通过请求硬件厂商的服务,来验证这个报告文件确实是来自于真实的TEE硬件,这样就能够确定自己的应用程序的确运行在一个真实可信的TEE中。那么如何才能实现用远程证明报告来保护x.509格式证书呢?这里可以思考一下。(提示:x.509证书的核心在于公钥,而远程证明报告是可以支持自定义data传入的,可以尝试将公钥的hash作为远程证明报告的自定义data)。关于Intel SGX远程证明报告的生成,可以参考Intel SGX官方网站和文档手册。
项目代码和文档的Github仓库提交地址:https://github.com/inclavare-containers/confidential-token-broker
要求结项必须具有如下四项内容:
- 库代码
- 基本的测试程序代码
- README:介绍主要功能,编译环境要求,编译方法,测试方法,使用说明
- 设计文档:介绍内部实现模式,架构和原理 注:如果活动举办方最后要求答辩,可能还需要做一个答辩PPT,视情况而定。
按照权重顺序:
- 全栈Rust编程语言实现(推荐) 【提示:如果发现Rust SGX SDK不好用,也可以尝试使用Occlum】
- 支持OAuth2协议令牌格式
- 支持私钥持久性安全存储和导入 (提示:借助Intel SGX Seal功能)
- 熟练掌握Rust编程语言
- 熟练掌握C/C++编程语言
- 熟悉Intel SGX等机密计算技术的原理和编程模型
- 熟悉基于令牌的认证技术,如OAuth2,JWT,CWT
- 了解并能运用基本的密码学技术,如非对称加密、摘要、数字签名等