RISC-V生态全景解析(四):玄铁VirtualZone基于RISC-V架构的安全扩展

简介: 芯片开放社区(OCC)面向开发者推出RISC-V系列内容,通过多角度、全方位解读RISC-V,系统性梳理总结相关理论知识,构建RISC-V知识图谱,促进开发者对RISC-V生态全貌的了解。

编辑语:

芯片开放社区(OCC)面向开发者推出RISC-V系列内容,通过多角度、全方位解读RISC-V,系统性梳理总结相关理论知识,构建RISC-V知识图谱,促进开发者对RISC-V生态全貌的了解。


前几期【技术解码】,我们借鉴知识图谱理念梳理了RISC-V架构的起源、发展与未来趋势,解读了RISC-V代码密度的现状,让开发者了解了RISC-V生态全貌。为了帮助大家更快融入RISC-V生态,我们将从今天起侧重于RISC-V实战技术,为大家提供更多更具参考价值的专业知识和经验。


本文是RISC-V系列中“安全拓展”主题的内容,将带大家认知RISC-V架构的安全拓展能力,并展示玄铁C系列处理器基于RISC-V架构实现的安全拓展。


01 导语

随着互联网和物联网的快速发展,全球联网设备数量高速增长,“万物互联”成为全球网络未来发展的重要方向。但移动平台业务繁荣的同时也催生了多样化的安全问题,目前应用普遍存在被破解、数据被窃取篡改等安全风险,对金融数据安全、个人隐私数据保护、业务数据完整性等造成极大的威胁。


为了解决智能设备、物联网设备所面临的安全威胁,终端芯片通常需要提供可信执行环境(Trusted Execution Environment,简称TEE),确保芯片内的系统程序、终端参数、安全数据和用户数据不被篡改或非法获取。


可信执行环境目前在移动、支付、DRM、汽车、无人机、物联网等应用领域已基本经成为标配。目前较为成熟的处理器可信执行环境技术主要有ARM的TrustZone、Intel的SGX以及AMD的SEV等。


玄铁C系列处理器基于RISC-V架构实现的安全扩展,主要是基于RISC-V架构提供的PMP(Physical Memory Protection)保护机制和多层特权模型,虚拟出多个相互隔离的可执行域(Zone),从而实现了RISC-V架构上的可信执行环境(TEE),并保护Zone内的软硬件信息,包括软件、内存、外设、I/O等免受其他Zone的非法访问。


处理器资源包括Cache、中断、内存、代码执行等经过隔离之后,处理器将分时地运行在不同的Zone内,配合SoC其他的保护机制如IOPMP,共同构建一个基于软硬件协同工作的安全系统。


02 RISC-V架构的安全拓展能力

目前传统的RISC-V处理器并没有提供类似ARM TrustZone的隔离技术。RISC-V处理器整体运行在REE(Rich Execution Environment)环境,如Figure 1所示。


image.png


但实际上,RISC-V技术提供了有两种具备安全扩展能力的属性:物理内存保护(PMP)机器特权模式(M-mode)


PMP物理地址保护技术可以把处理器的访问空间划分出任意大小的物理内存区域,不同的区域可以授予不同的访问权限,PMP功能可以将多个S模式的环境相互分离,我们将在下面的章节详细阐述。ARM也定义了仅支持Cortex-M体系结中的PMP(ARM称之为MPU)。


第二种功能是机器模式,作为超级用户特权模式的安全监视层(类似ARM上的Monitor模式)。M模式可用于管理多个S模式环境的执行,并能拦截来自任何S/U模式环境的中断和异常。有了PMP和M-mode, 这就意味着:S-mode模式环境可以相互隔离以及S-Mode模式环境可以通过更高层的特权来管理。


03 玄铁C系列处理器的安全拓展

虽然RISC-V架构的处理器具备物理内存保护、多层权限模型、内存管理单元等技术来支持可信执行环境功能的实现,但处理器仍然需要支持其他安全规范才能创建完全可用的安全执行环境。


为了满足TEE的隔离要求,玄铁C系列处理器在RISC-V架构基础上进行了安全扩展。 该系列处理器在软件的协调下可以虚拟出多个执行域(Zone),每个Zone增加了域标识,也就是Zone ID,整体架构如Figure 2所示。每个Zone可以独立地运行各自的操作系统以及基于该操作系统的应用程序。


操作系统运行在超级用户特权模式,应用程序运行在普通用户特权模式。处理器根据需要在不同的Zone里切换运行。当处理器切换到某一Zone运行时,他将实时占用整个物理核,并且处理器的域标识也将同时被更新成相应执行域的标识。Zone的切换由运行在最高模式(机器模式)下的可信固件(TF)来完成。


image.gif


Zone之间访问隔离通过PMP实时切换来实现,PMP是RISC-V特权ISA的一部分,用于隔离机器模式和超级用户模式/普通用户模式之间的物理地址访问,玄铁处理器的L1/L2 Cache同时也受PMP保护。


04 PMP

RISC-V架构提供了一种PMP物理内存保护机制,用于隔离M模式与S/U模式下的内存访问。只有M模式才有权限配置PMP。PMP包含几组(通常是8到16个)地址寄存器以及相应的配置寄存器,这些配置寄存器可以授予或拒绝S/U模式的读、写和执行权限。PMP同时也能保护内存映射I/O (MMIO),M模式可信固件可以通过配置PMP来约束处理器对外设I/O的访问。


当硬件线程从一个Zone切换到另一个Zone时,PMP配置同时也需要切换。M模式可信固件需要先保存当前Zone的PMP配置,然后载入下一个即将切换的Zone的PMP配置,完成对内存和内存映射I/O (MMIO)访问权限的切换。


当多个Zone需要共享内存时,可以将需要共同访问的内存区域的访问权限同时授予给多个Zone,也就是将该块内存的允许访问权限写到每个Zone的PMP配置表里,PMP表会在Zone切换时由可信固件进行更新。Figure 3是一个典型的多个Zone的PMP配置图, SHM区域是Zone间允许共同访问的共享内存区域。


机器模式可以通过PMP的锁定功能将机器模式的访问限制在有限的区域内,比如只允许机器模式访问、执行划分给可信固件的内存区域,以减少受到对机器模式攻击的影响,也就是Supervisor Memory Access Prevention(SMAP)Supervisor Memory Execution Prevention(SMEP),从而增加对关键信息的保护。


image.gif


05 IOPMP

RISC-V架构提供了一种PMP物理内存保护机制,用于保护RISC-V处理器在不同特权模式下的对内存和MMIO的访问。


总线上的其他主设备同样需要对内存的访问进行保护,也就是外设需要增加IOPMP。IOPMP可以像PMP一样定义访问权限,他会检查从总线或者主设备过来的读、写传输是否符合权限访问规则,只有合法的读、写请求才能进一步传输到目标设备上。通常有3种方法来连接IOPMP:


① 请求端连接IOPMP

在每个主设备和总线之间增加一个IOPMP,类似RISC-V的PMP。不同的主设备需要分别新增一个IOPMP,IOPMP之间互相独立。这种设计较为简单,也提供了灵活性,但IOPMP不能在主设备之间共享。如下图所示:


image.gif


② 目标端连接IOPMP

目标端的IOPMP需要对不同主设备发来的传输进行区分,这就需要每个主设备的访问请求都要附带额外的Master ID。如下图所示:


image.gif


③ 请求端和目标端级联IOPMP

在复杂的SoC系统中,往往存在IOPMP级联的使用情况。典型的场景就是RISC-Cores自身带有PMP,处理器并不需要目标端的IOPMP再次对他的访问进行过滤。通用的处理方法是,在IOPMP的表项里取消对CPU访问的约束,但缺点是这会占用IOPMP表项,也会影响效率。为了提高IOPMP级联下的访问效率,IOPMP需要提供一种机制来直通部分主设备的访问,比如提供可配置的以直通模式访问的主设备列表。


下图是玄铁处理器采用PMP、IOPMP来构建安全SoC的系统参考框图:


image.gif


06 总结

本文详细介绍了RISC-V架构在实现TEE可信执行环境上所有具备的安全能力。平头哥玄铁处理器在RISC-V架构的物理内存保护、多层权限模型、内存管理单元等技术的基础上,对部分安全特性进行了扩展,实现了基于Zone管理的可信执行环境。该技术方案不需要虚拟化的支持,只需要在支持U、S 和 M 三种特权模式的情况下,并在可信固件的管理下,实现了具备多个可信执行环境的能力。


当不同Zone之间需要切换时,运行在机器模式的可信固件需要对Zone的上下文进行保存和切换。虽然看起来这会带来开销,但像ARM TrustZone的虚拟化技术同样需要对世界进行切换,这部分切换的工作同样被隐藏在Monitor的可信固件中。不同的是,ARM TrustZone只虚拟出了2个世界,而玄铁RISC-V处理器在安全扩展之后,最多允许同时支持16个Zone,这为以后的软件安全方案提供了更多的可能。





相关文章
|
18天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
1月前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
1月前
|
存储 搜索推荐 数据挖掘
ElasticSearch架构介绍及原理解析
ElasticSearch架构介绍及原理解析
106 0
|
1月前
|
监控 持续交付 API
构建高效可扩展的微服务架构
在当今快速迭代和竞争激烈的软件市场中,构建一个高效、可扩展且易于维护的后端系统变得尤为重要。微服务架构作为一种流行的分布式系统设计方式,允许开发者将应用程序划分为一系列小型、自治的服务,每个服务负责执行特定的业务功能。本文将探讨如何利用现代技术栈搭建一个符合这些要求的微服务架构,并讨论其潜在的挑战与解决方案。我们将涵盖服务划分策略、容器化、服务发现、API网关、持续集成/持续部署(CI/CD)以及监控和日志管理等关键主题,以帮助读者构建出既可靠又灵活的后端系统。
|
1月前
|
监控 Kubernetes 持续交付
构建高效可扩展的微服务架构:后端开发实践指南
在数字化转型的浪潮中,企业对软件系统的要求日益提高,追求快速响应市场变化、持续交付价值成为核心竞争力。微服务架构以其灵活性、模块化和独立部署的特点,成为解决复杂系统问题的有效途径。本文将深入探讨如何构建一个高效且可扩展的微服务架构,涵盖关键设计原则、技术选型及实践案例,为后端开发者提供一条清晰的指导路线,帮助其在不断变化的技术环境中保持竞争力。
133 3
|
1月前
|
消息中间件 Cloud Native Java
【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
|
25天前
|
存储 缓存 监控
构建高效可扩展的后端服务架构
在当今互联网时代,构建高效可扩展的后端服务架构对于企业的业务发展至关重要。本文将探讨如何通过合理设计和优化后端服务架构,实现系统的高性能、高可用性和易扩展性,从而满足不断增长的业务需求和用户规模。
18 0
|
4天前
|
前端开发 Java
SpringBoot之三层架构的详细解析
SpringBoot之三层架构的详细解析
20 0
|
14天前
|
运维 监控 自动驾驶
构建可扩展的应用程序:Apollo与微服务架构的完美结合
构建可扩展的应用程序:Apollo与微服务架构的完美结合
32 10
|
25天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。

推荐镜像

更多