我们开始我们现在这个套地今天想给大家分享的是我们这个 CocoaS这个项目这个项目的话它也是CNCF生态系统中的首个关于精密计算远程证明的一个解决方案今天这次谢谢今天这次分享的话将由我和来自ArmChina的DevChina共同完成我本人的话是来自阿里巴巴Cloud的同时也是CNCF精密容器项目的活跃贡献者OK让我们开始这个topic首先我简单介绍一下我们这个topic的背景也就是所谓的精密计算技术这项技术的话是近年来兴起的比较热门的一项安全技术其实主要的目的是通过可信执行环境来保护执行中也就是运行时的代码和数据精密计算技术的话是借助硬件来提供的可信执行环境我们简称TE来实现加载和运行时的一个内存加密内存强制的访问隔离和CPU的一个状态保护以及认证的功能通过这些安全属性来保护运行时的代码和数据的精密性和一个完整性当前我们可以看到的话主流的芯片厂商都在自己的最新的生产产品中提供了一个精密计算技术的支持下面这四张图就是现在最新的四种精密计算的sorry精密计算的一个硬件支持它们分别是来自现在最主流的三家硬件芯片厂商分别是Intel芯片支持的TDX和SGXAMD支持的SEV SMP技术以及ARM支持的CCA技术关于ARM CCA技术的话我们也后面会就是在这个平台上来做我们CocoOS的一个实际的一个最佳实践前面提到精密计算技术它通过硬件实现的内存隔离和内存加密来提供一个安全保护那么一个关键的问题在于如何使提供底层安全能力的核心机制能够被应用程序的所有者感知和验证换句话说如何向使用者证明可信执行环境所提供的这些安全属性是符合预期的以及可信执行环境它本身是真实的要解决这个问题的话就需要引入attestation技术现在业界的话有一套关于这个问题的一个标准架构也就是所谓的RATS-RIZ架构这套标准给出了attestation过程中各个实体之间的一个抽象协议一个抽象的定义它提供了一个对attestation体系结构声明内容和协议的一个中立的模型右边这张图的话就是RATS的一个基本的抽象定义它将attestation过程分为了attestor,virefile,relinepartit这三个主要的实体同时也有一些周边的一些组件来对attestation体系提供一些支持那么要在机密计算中实现这套架构我们首先就需要硬件和软件的协同配合前面也提到现在主流的硬件厂商都提供了机密计算的支持同时他们也提供了attestation的硬件配套也就是软件的解决方案但是在我们真正的软件层面上并没有一个中立统一的实现来作为机密计算attestation的解决方案而我们今天的主题CocoAS就是要解决这个问题在我们正式介绍今天的topic CocoAS之前首先要介绍一下CocoAS方案的一个项目的所在地也就是CMCF的机密容器项目我们简称Coco这个项目成立于2021年现在是CMCF的一个杀核项目机密容器项目的主要目的是通过利用可信执行环境来保护容器和数据而实现一个原原生的机密计算现在这个项目的社区贡献是非常活跃的当前最新的发布版本是0.8.0也欢迎大家去关注我们confidential containers这个项目机密容器这个项目它的主要的技术特点可以从下面这张图上看出来首先它最主要的特点是Covernetors体系中的pod运行在T1中受到机密性的保护为了支持这一点项目中实现了特质的Cata runtime和机密虚拟机的管理组建以及Gast kernel另外机密容器这个项目它要求尽向在生命周期中受到加密和签名的保护并且尽向的解密和管理要在pod内部进行另外一个最重要的特性是我们为机密容器构建了tessation体系用于向使用者证明pod的一个安全属性从而实现向pod内部进行一个机密数据的注入例如向进向的解密密要或者一些安全策略等等这就是我们cocoas这个解决方案的一个来源虽然说cocoas这个项目它在立项之初是为了解决机密容器这个项目的问题但是我们发现它完全具备超拖出机密容器项目应用在更广泛的云元身机密计算场景的一个能力因此我们现在会将cocoas试做一个独立的远程证明软件解决方案来进行看待这个体系它的一个定位是去支持多平台T的一个统一的远程证明软件解决方案它能够以通用的一个架构去兼容前面提到的四种主流的最新的硬件T平台类型在实现上我们将这个体系分为了三个组建项目分别是attacation agent,keybroker service和attacation service当前我们attacation agent也就是简称AA它的定位是attacation系统的client端运行在T1内部负责提供获得T1证据和从远端的attacation service获得一个认证令牌的功能而keybroker service我们简称KBS则是attacation系统的一个前端的服务运行在云下的租户册或者说是云上为租户单独提供的一个隔离环境中负责为去提供一个基本的https实现的rest for api同时也会集成身份认证模块和资源存储模块执行一些功能相关的服务逻辑而attacation service我们简称AS则是负责实际验证证据并签发认证令牌的后端服务也是attacation体系的最为核心的一个功能组件它负责实际去验证T1证据并且签发attacation results token这张图的话是coco AS服务的一个内部架构实现从图中大家可以看出从架构上我们将核心组件去分为前端服务和后端服务两个部分对应到两个模块号的组件上我们分别叫做keybroker service和attacation service这张图左边大家可以看到keybroker service作为一个前端的服务它会提供一个公开的https的rest for api在需要对T1执行一个远程证明的验证的时候T1的内部的client会向rest for api去发起一个请求通过一个我们定义的四部的json payload交互协议来传递T1的attacation证据然后我们kbs中的attacation proxy模块会将证据转发到后端的attacation service进行一个验证而后端的attacation service则会集成特定于硬件平台的驱动插件从而识别和解析来自不同硬件厂商的不同的T1证据的格式内容在解析完成之后它会从硬件厂商的背书一些服务中获得基本的验证证据签名的一些材料在完成这些特定于硬件平台厂商的验证之后我们的tverify插件这模块会将证据解析为统一可读的json自付串的数据流格式交给我们attacation service内部集成的一个OPA策略引擎进行一个细律度的比对验证而用户的话可以通过访问TBS前端的一个restful API来对这里的验证策略进行一个自定义的设置在设置的时候我们TBS的服务会去验证用户的身份以确保只有服务的owner才能对策略进行一个修改attacation service后端在完成上述的验证之后会将证据和一些评估报告和解析后的证据内容打包为一个jwt格式的令牌并且由前端的kbs返回给te这个令牌就表征了整个cocoas体系对于te可信度的一个认证结果在获得令牌之后te内部集成的client可以向我们cocoas的服务端请求资源数据而用户也可以通过访问restful API将kbs中集成的资源存储模块上传资源数据当然这个过程中也需要对用户的身份进行一些认证当前cocoas的话它支持两种部署模式我们分别叫做背景调查模式和护照模式之所以取这两名字是因为rest模型的架构它提供了这两个模型的一个标准的定义因此我们这里也就化用了背景调查和护照这样的模式首先介绍一下第一种模式这一张图的话是基本的背景调查模式下的attestation系统的一个架构右边是运行在te guest中的kbs client它可以被集成在attestation agent这个组件中也可以被集成在用户自己的一个应用程序中kbs client中集成了attestation driver这个模块会用于收集特定于硬件平台的te证据左边则是运行在租户测或者说运提供上提供的一个隔离环境中的kbs和as服务组件首先在背景调查模式下我们kbs内部同时会集成attestation proxy模块和于results相关的模块比如说像talking with fire和一些策略引擎以及存储模块它会与左边的as进行一个交互来验证te的证据而最左边的as完成了验证之后会向kbs返回一个经过签名的attestation令牌而这张图中我们用序号标出了一个交互流程首先第一步是client向kbs的actps server发起一个认证请求并且在接受到挑战值之后会向kbs提供一个te的证据而kbs则会通过attestation proxy模块向将证据转发给它后端的as进行一个系列度的验证as中集成的virefire驱动插件会对特定于硬件平台的证据签名进行一个验证然后将证据解析为json自付串的结构然后由策略引擎进行进一步的验证之后生成一个talking并且将返回给kbs可以看到第六步中kbs会将talking直接返回给client而client会携带这个talking再次向同一kbs发起资源获取请求这也是背景调查模型这个名字的来源资源的提供者和证据的验证者是同一个kbs就好像kbs对te做了一次背景调查一样kbs在接收到代表了cocoas对te认证结果的令牌之后会验证令牌中的签名并且将令牌的payload交给策略引擎以进行访问权限的确认并最终向client返回一个秘密资源数据这种部署模式的特点在于比较紧凑而testation过程与资源获取过程由同一个client端完成它是对上层应用是透明的这张图的话我们介绍一下第二种模式下的架构根据wrest标准我们叫做护照模型架构在这种架构模式下需要找到一个租户信任的第三方实体为租户部署testation service来验证te证据并且在通过之后向te中的client返回令牌而租户自己的kbs则仅仅需要负责验证令牌和提供所需要的资源这种架构模式相比上一种背景调查模式来说它大幅度减轻了租户对于te的信任成本tbs的一个部署成本从图中我们可以看到左边的可信实体依然需要kbs但是这里的kbs它其实仅仅只是一个代理as验证后端的一个http server的外壳它不再会去集成token的验证和资源策略引擎这些模块也不再会去提供资源数据的API我们在实现中将这样的kbs叫做eashore kbs左边租户部署的kbs则通过验证令牌来确认te的真实性并在验证令牌通过之后向te中注入机密数据的资源我们在实现中将这样的kbs称作是resource kbste中的client1首先向eashore kbs发起一个认证请求并且在认证完成之后获得一个tessiton tokenclient2使用这个token向租户部署的resource kbs发起获取资源的请求主要的执行步骤细节基本与前面的背景调查模式基本一致这种模式相比于背景调查模式来说特点在于它比较灵活首先t内部的两个client一个负责attessation另一个负责资源的获取而目标资源的服务器也可以是多个由前面的架构介绍大家也可以看到除了特定于硬件平台的证据验证之外coco-tessiton系统的核心运行原理中最为核心的是两个policy和一个tessiton token这张图向您展示了policy的验证数据流和tessiton token的一个结构数据流的话我们从最左边开始为了简单起见我们省略了有verify驱动执行的特定于硬件平台的签名验证和证据的解析过程首先我们拿到解析后的证据的内容它会与参考值一同输入我们AS中的一个策略引擎而策略引擎根据tessiton策略的配置会将证据的内容和参考值进行一个比对的验证并且在验证完成之后输出一份评估报告然后会将这个评估报告交给talkinsignertalkinsigner模块会将评估报告和证据的内容一起打包生成一个jwt格式的一个令牌并且签名签名完成之后返回给t中的client从图中大家可以看到令牌中包含了jwtjwt格式要求的一些基本信息比如算法 密钥和过期时间等等最重要的是Payload中Payload中的评估报告自断和TCB的一个状态自断就是解析并且序列化之后的一个Tee证据内容这个tessation token的话会在Tee请求秘密资源数据的时候被我们的resultskbs接收到resultskbs它首先会将这个令牌交给tokenfirefire模块进行验证的有向性的验证在有向性验证完成之后会解析出令牌payload中的一些claims自断会去把它序列化成节省格式交给resultskbs中集成的策略引擎而这个策略引擎则会根据results policy去判断这个token所代表的Tee是否有对它目标自然目标自然数据的一个访问权限最终会输出一个allow或者reject好的 下面的话由dev程来给大家介绍ARMCC平台和Coco AS在ARMCC平台上的一些最佳实境谢谢佳丽的分享那我今天就是继续这个topic我们介绍一下这个ARM在CCA计划的支持包括就是跟这个Coco项目集成的背后的一些细节首先看一下就是说这个ARM的CCA就是其实佳丽已经介绍了CCA就是说是它以一系列软件的组合然后来做到这种你这系统资源的隔离然后避免你的数据用户的数据包括这个data还有这个code然后被一些特权人件比如你的系统的hypewise还有一些物理硬件的一些engine所访问那么ARM就是在CCA这个领域它的发展历程大概就经历这个四个阶段那首先就是一个TrustZoneTrustZone已经是发展比较完善而且经历了很多年TrustZone主要的大概的一个idea就是说把安全带来分成脸部份一个是安全的事件一个是我一般的lobal那么所有的secure的application或者secure的service它都是在安全事件里面去运行它也是通过硬件的这样一个支持然后做到你的可以对你的资源的隔离的保护保持你机器主机上面的一些操作系统包括你的一些hypewise对它进行访问但是TrustZone的话它上面的这些跑的这些service它有一个局限它就是一般是去跟系统相关的跟系统开发特定的像有一些偶国的这样的一些应用在里面那后面的话大概是ARM V7引用了这样一个metronization技术那么metronization技术的话一开始它是加入在ARM V7上面那随着TrustZone的被广泛的应用后面有一个我们发现就是有一个场景就是说有些所谓的可信的这些应用或者服务它需要去在特定的这样一个clown上面去来run这样的话就是说如果我们一个设备它要去支持不同的这样一个多种的这样一个可信的这样一个服务的话那它需要引入一个在可信世界里面这样一个训理化那所以就引入了SEO2的训理化那么它其实对TrustZone格布选拉斯是一个补充它是把训理化的技术引入在可信世界里面然后加入一些我们叫SPM就是secure Partition Manager这样一个服务的一个支持然后做到这一层这样一个feature然后近几年ARM CCA这个概念的提出就是说它是在原有的TrustZone技術上的两个安全态就是安全世界跟不安全世界或者说是Normal世界的之外它引入了一个叫realm的世界还有一个叫root世界root世界主要是用来在支持不同世界之间的切换realm就是给我们real所谓的realm虚机它提供一个可执行的安全的这样一个隔离的环境那这个大概就是说ARM CCA这样一个技术的一个发展的一个历程这张图就是大概介绍一下ARM CCA的一个整体的一个架构然后值得一提的就是这边比较重要的就是IM这个IM这个模块它是跑在EO2层上面那么它上面主要是它上面提供的功能解释分层点点部分功能介绍的调用一部分是IMI一部分是ISIIMI是相当于是你的LomarWord里面去对这个realm这个realm进行管理比如说我创建这个realm或者我删除这个realm那么是通过这LomarWord里面去对这个realm进行管理这样一个接口那ISI是我realm虚机跟这个IM进行交互的一个接口比如说我们最比较常见的一个用意我们通过ISI去拿一个realm虚机里面的一个attestant一个report那么这是需要我们去调用这个ISI接口去获取root这个世界它现在上面跑的一个很重要的一个服务就是moliter它现在是在EO3上面去跑的接下来看一下就是我们刚才提到的就是attestant认证的这样一个流程那么首先就是说用户它会提一个请求我要去拿我当前guess这个环境上面的一些你说evidence也好或者我当前的一些climate也好就是一些认证的一些信息那么它需要去给它提供一个客户端的一个challenging然后把这个东西通过realm然后转发给IM跟plattformIM跟plattform会去生成一个把自己相关跟自己相关的一些component相关的一些数据然后生成然后变成一个attestantreport那么IM主要是生成一个比如说我这个IM出使化的时候它生成的一些度量值那么plattform它包含一些一些认证的信息比如说我的plattform的identity包括plattform它们的生命周期还有一些跟plattform相关的一些component的一些software的一些度量那么这个打包最后生成一个attestantreport那么这个report我们现在其实是把它最后是生成了一个叫sebal的一个binary就是一个二斤制的一个编码生成的一个精简的一个结构那么我们在CCA的这个概念里面讨论就是说它会作为一个叫CCA的一个token然后反映给这个用户这个CCA的token里面就是包含了当前所有realm包括这plattform上面的所有的一些度量的信息然后在里面去编码成这样一个binary信息然后反映给用户那么用户把这个东西拿去要进一步处理去check这个当前这个realm这个环境上面是不是是不是一个可信的执行环境那么它就需要去进一步的对你这些度量的执行教验这里面就是说有一些很多的仗义software可以做这样的事情的arm提供了一个open source的一个软件叫brason可以去帮忙做这样的事情那现在我们跟coco项目的集成也是依赖于这个brason做这样的一个你的report的一些完全教验然后有可信度的一些评估等等这样的工作都是通过这个brason来实现那接下来看一下brason它一个大概的一个一个架构吧那主要来说就是brason现在包含了有三个服务一个就是provision的服务一个是verification的一个服务还有一个是vts我们讲这vts其实是verificationtrust的一个service那分别来说就是provision这个service它主要干的活就是把用户的一些或者我们说是管理员对当前这个平台上面一些可信的一些信息然后我们通过用户的输入生成一个cboard的这样一个文件然后给它输入到我的kvstore里面去那么当然这里面包含了一部分包含我们就说这个平台上面的一些可信的一些我们认为它是trust的这样一些杜良的一些信息另外还包含一个就是说我们对整个一个CCL这个token上面的一些用来进行签名的这样一些对应的一些popkin然后也同时会输入到这个后端这个kvstore里面去认证verification这个service呢主要就是用来把我现在通过client端输过来这样一个token这样一个CCL的token进行进行解析那么这个binary我首先要把它解析成一个接收能这样一个文件然后可以通过这个没有文的形式我可以挨个去跟我这个数据库里面这个可信的直径进行比较那么同时它会对这个CCL这个token的签名进行教验然后确保这个它这个token的完整性那这里面下面就是说这里面会有一些跟verison trust service交互的一些某块一个就是indosment handle还有一个abdent handle这是比较细节的东西分别是用来provision service跟verification service具体干活的两个两个怎么快我们现在这个CCL现在已经是在coco里面已经集成进去了然后是在最新的release0.8.0里面已经可以看到这个CCL相关的一些实现那具体来说的话我们现在主要来说就是说在guest这次的话我们加了一个CCL tester那么跟其他的tester driver一样是用来我们获取这样一个平台的一些评估值或者一些度量信息那么在CCL里面我们说就是会来一个CCL的token那在attentive services这次的话我们加了一个verify就是用来对你获取的这个度量值或者说这个CCL token进行具体的这个评估的这样一个模块那目前来说我们现在是把这个token是通过这个CCLverifier就是把它转给这个verison做进一步的一个check那么verison会把这个最后这个宣传的评估的这些结果通过一个EAR就是一个specfollow一个ITF一个spec这样一个格式的一个接送文件然后给返还给用户里面包含了当前当前这个这个这个度量值是否可信然后它一些一些浪识的一些信息包括我们一些之前的一些传进去的一些metadata的一些信息都会在包含在里面接下来看一下就是那个CCL的这个token也就是这个evidence它里面是长什么样子就是说右边右边这张图就是它的一个我们在incode成一个sibled一个binary之前它的一个接送的一个名文的形式估计还好就是说它主要是包含两部分就是一部分就是realm的一部分就是plotform的然后分别就是说realm里面包含的是跟realm相关的plotform就刚才说的跟plotform相关的一些比如说plotform identityplotform的一些life cycle等等这样一些度量信息然后给写在这个接送文件里面那么它会incode成一个左边这样一个这个sibled library那么这个sibled library里面它会包含有一些我们进行签名教验的这样一些popkin也会incode的在这个library里面具体说一下就是说我们现在的在coco里面然后它这两部分工作的一个实现包括它需要的一些额外的一些edition的一些一些工作吧那么怎么说呢就是说现在CCA的话你要去支持的话必须还是要去打上一些patch那这里面是有一个对Ninus对CCA的一个支持的一个patch的一个link那么这个可能没有不是最新的这大概是今年三四月份的一个一个参考实现那么现在应该是比较有更新版本的出来那CCA driver这一块是需要我们在需要出实化一个CCA的一个module那么在这个module里面我们是相当于穿一个自负设备然后给它订一些访问的一些接口那在我们去拿这个CCA的这个evidence或者说这个CCA token的时候需要去通过这个realm这个接口ISR的接口然后去取这个CCA的token那么最后这个token它其实是它是进行签名过后处理的那么分别是用这个real tessin key也就是rik跟这个initial tessin key就是rik进行签名然后生成这样一个sible这样一个binary那么目前来说我们这个东西工作是在一个arm的一个simulation的一个环境下就是说这个fp环境下面进行验证过这个就是具体的这个token的vary verification所做的事情就是说首先就是说拿到一个CCA的这个Archangel的这个binary首先要把它解析成一个我们可以去理解或者是可以去使用的这样一个接受的这样一个明文的这个文件那么目前来说我们是需要依赖于两个第三方的一个open source的这样一个project去做这个token puzzle的工作那么解析成一个接受的文件之后我们要具体做一些实际上的一个完整性教验包括一些可信的一些比较这样一个工作那么完整性教验那么回到刚才那个我们token看一下token这个token的binary它其实是包含了脸部分上面的上面的是realm下面的是pliform那realm里面其实是有一个pubking就是realm的pubking的一个直接的一个放在这个incode在这个sible的binary里面那么pliform这边pliform这边它是没有的但是它是就是说所以它需要去在这个对pliform这个token进行教验的时候它需要去提供一个rik就是签名就是sile签名对应的这个公要然后对这个pliformtoken进行签名教验保证它的完整性那么我们在确讯这个已经是没有被撑害过之后我们可以把这个里面这个challenging这个challenging其实是把这个realm这个pubking进行hash过之后的结果把它提取出来然后跟realm里面这个pubking它的hash最后的结果进行比较以确保这个realm里面这个pubking它也没有被撑害过那么这样的话我们就可以用这个realm也叫pubking对整个的realmtoken进行签名的教验那最后保证这个token它是可信的而且是没有被撑害过的OK那么这是一个完整性的教验那最后就是说它这个解析成这个json文件之后那么它会去跟这个最后的后段这个数据库cavestal里面Igre去比较那么以确保这些当前这个解析解析过的这个在里面的这些claims或者这些evidence或者说我们是Digest的值跟这个cavestal里面值是一样的那么就确保这个当前环境里面它是我们认为是可信的那最后一步其实跟coco也是一样的就是我们需要去做policy的enforcement那也是通过OPA的policy来去做这样的事情提一下CCI的token目前来说我们没有找到一个合适的Rust的版本这样一个包来做CCI token的解析那么现在有一个可以做到的就是我们可以把这个CCI token部分部分把它print出来然后可以去看到它的一些名文但是这个东西目前没办法把它直接设成一个接受的名文件的一个格式我们后面还需要去做CCI token里面这个client challenging就是用户数这个challenge或者lunch比较这个工作以防止这个重放攻击这一块的话我估计应该很快会被解决掉然后最后打开广告就是说ARM会在今年11月底12月初然后会举办一个ARM的年度技术大会欢迎大家到时候参加或者关注谢谢大家有没有什么问题