UMDK安全机制详解:UB访问控制和内存访问控制的实现原理

📅 2026/6/27 20:36:11
UMDK安全机制详解:UB访问控制和内存访问控制的实现原理
UMDK安全机制详解UB访问控制和内存访问控制的实现原理【免费下载链接】umdkThe Unified Memory Development Kit(UMDK) is a set of distributed communication software stack with memory semantics as the core. It aims to design a new-generation network architecture through software-hardware collaboration, subvert the traditional communication form, and build a computing native network centered on memory semantic interconnection.项目地址: https://gitcode.com/openeuler/umdk前往项目官网免费下载https://ar.openeuler.org/ar/在当今高性能计算和分布式系统中数据安全是至关重要的考虑因素。openEuler UMDKUnified Memory Development Kit作为一套以内存语义为核心的分布式通信软件库提供了一套完整的安全机制来保护通过UBUnified Bus协议栈互访的数据资产安全。本文将深入探讨UMDK中的UB访问控制和内存访问控制两大核心安全机制的实现原理和应用场景。 UMDK安全机制概述UMDK的安全目标在于保护通过UB协议栈互访的数据资产安全包括但不限于UBPU设备身份、固件和配套软件内存数据️总线传输数据安全功能涉及的密钥、访问凭据和配置参数等敏感数据UMDK安全机制通过多层次的访问控制策略确保只有授权的实体能够访问特定的内存区域和通信资源。这种机制在分布式系统中尤为重要特别是在多租户环境和虚拟化场景下。 UB访问控制机制应用场景与基本原理UB访问控制功能主要应用于两个核心场景内存访问和Jetty访问。内存访问场景的访问控制功能实现依赖于UMMUUnified Memory Management Unit的权限控制表UMMU权限控制表与地址翻译表独立内存访问时权限校验与地址翻译分别处理当两者均操作成功则允许内存访问否则拒绝内存访问。应用场景是否引入TokenValue访问凭据标识是否引入UMMU协助卡控内存访问可选TokenID是Jetty访问可选TCID否Token验证策略与安全级别UMDK提供了四种不同的Token验证策略对应不同的安全级别和性能开销值URMA定义策略描述安全级别性能开销0URMA_TOKEN_NONE只传输TokenID或TCID不带TokenValue最低最高1URMA_TOKEN_PLAIN_TEXT传输TokenID或TCID和TokenValue明文中等中等2URMA_TOKEN_SIGNED传输TokenID或TCID和TokenValue并加密保护高较高3URMA_TOKEN_ALL_ENCRYPTED传输TokenID或TCID和TokenValue并加密保护PLD也加密最高最高权限分配流程详解UB访问控制的权限分配流程遵循以下步骤TokenID分配Home在注册segment时需要应用指定TokenValue。软件栈可以使用两种方式分配返回TokenID调用urma_register_seg配置让软件栈自动分配先调用urma_alloc_token_id分配TokenID之后调用urma_register_seg时指定该TokenIDToken验证策略配置在注册segment时可以指定token的验证策略通过urma_seg_cfg_t.urma_reg_seg_flag_t.token_policy字段设置。Token信息分发应用可以将Home的Token信息使用带外通道例如TLS/IP通道或者URMA提供的公知jetty通道分发给User。User导入远端内存User在import远端Home内存时需要携带token_valuetoken_id信息。Token安全传输机制Token的安全传输涉及多个关键环节Token安全分发Target和Initiator之间需要建立一个安全的通道这可以通过身份证书、密码或者密钥管理系统KMS来实现。Token查找和使用Target侧通过报文中的TokenID来索引找到TokenValueInitiator侧有三种方式查找和使用Token分布式网络编程场景通过TargetJetty或TargetSeg对象找到TokenSVA/DSVA场景根据虚拟地址VA查找Token无需TargetSegDevice场景将Token信息绑定在设备内部某个引擎或队列的Context中Token的Initiator隔离策略以算代存Target侧只存放原始TokenValue分发时基于Initiator的EID等信息派生以存代算Target侧为每个Initiator存储不同的TokenValue️ 权限无效化流程UB访问控制功能提供了两种粒度的访问权限无效化机制权限组粒度无效化权限组粒度无效化由Home发起Home侧UMMU相关软硬件具体执行无效化Home侧UMMU中的TokenID和对应的TokenValue。此时持有该TokenID和TokenValue的权限组内所有User访问权限均被无效化。用户粒度无效化用户粒度无效化是指无效化权限组内具体User的访问权限同时保证最小化影响权限持续有效的User由User发起。具体步骤包括多个User均申请获得Home的内存访问凭据Home更新TokenValue向权限持续有效的User分发更新后的TokenValueHome仅接受基于更新后的TokenValue申请内存访问从而实现无效化未收到更新后的TokenValue的User的内存访问权限 内存访问控制机制内存权限配置URMA北向接口内存权限配置与UB协议定义保持一致采用以下定义#define URMA_ACCESS_LOCAL_ONLY (0x1 0) #define URMA_ACCESS_READ (0x1 1) #define URMA_ACCESS_WRITE (0x1 2) #define URMA_ACCESS_ATOMIC (0x1 3)权限规则详解本地独占访问当URMA_ACCESS_LOCAL_ONLY置位1时本地访问具有READ、WRITE、ATOMIC所有权限但是外部访问被拒绝。外部访问权限当URMA_ACCESS_LOCAL_ONLY置位0时除本地访问具备所有权限之外外部访问权限配置由后面三个类型决定按照用户配置的READ、WRITE、ATOMIC组合生效。权限依赖关系Write需要Read权限Atomic需要WriteRead权限实际应用示例在src/urma/examples/urma_sample.c中我们可以看到内存访问控制的实际应用urma_reg_seg_flag_t flag { .bs.token_policy URMA_TOKEN_NONE, .bs.cacheable URMA_NON_CACHEABLE, .bs.access URMA_ACCESS_READ | URMA_ACCESS_WRITE | URMA_ACCESS_ATOMIC, .bs.token_id_valid 0, .bs.reserved 0 }; 实现原理深度解析UMMU权限控制表UMMU权限控制表是实现内存访问控制的核心组件。它与地址翻译表独立工作确保每次内存访问都需要通过权限校验。这种设计实现了权限与地址分离的安全模式即使攻击者获取了内存地址信息也无法绕过权限检查。硬件加速支持UMDK的安全机制充分利用了硬件加速能力Token验证硬件加速支持在硬件层面进行Token验证减少软件开销加密解密硬件加速对于URMA_TOKEN_SIGNED和URMA_TOKEN_ALL_ENCRYPTED策略使用硬件加速进行加密解密操作权限检查硬件加速UMMU在硬件层面实现权限检查确保高性能的同时不牺牲安全性安全通道建立在src/urma/lib/urma/core/urma_cmd.c中我们可以看到安全通道建立的关键实现int urma_cmd_alloc_token_id(urma_context_t *ctx, urma_token_id_t *token_id, urma_cmd_udrv_priv_t *udata) { if (ctx NULL || ctx-dev_fd 0 || token_id NULL) { URMA_LOG_ERR(Invalid parameter\n); errno EINVAL; return -1; } int ret; urma_cmd_alloc_token_id_t arg {0}; urma_cmd_set_udrv_priv(arg.udata, udata); ret urma_ioctl_alloc_token_id(ctx-dev_fd, arg); if (ret ! 0) { URMA_LOG_ERR(ioctl failed in urma_cmd_alloc_token_id, ret%d, errno%d.\n, ret, errno); return ret; } token_id-token_id arg.out.token_id; token_id-urma_ctx ctx; token_id-handle arg.out.handle; token_id-flag.value 0; return 0; } 性能与安全平衡UMDK的安全机制设计充分考虑了性能与安全的平衡灵活的安全策略选择用户可以根据实际安全需求选择不同的Token验证策略高性能场景选择URMA_TOKEN_NONE仅使用TokenID进行验证中等安全场景选择URMA_TOKEN_PLAIN_TEXT传输明文TokenValue高安全场景选择URMA_TOKEN_SIGNED或URMA_TOKEN_ALL_ENCRYPTED使用加密保护细粒度的权限控制通过TokenID和TokenValue的组合UMDK实现了细粒度的权限控制基于应用的权限隔离不同应用使用不同的TokenID基于用户的权限隔离同一应用内不同用户使用不同的TokenValue派生动态权限更新支持TokenValue的动态更新实现权限的实时撤销 实际部署建议安全配置最佳实践生产环境推荐使用URMA_TOKEN_SIGNED策略在安全性和性能之间取得最佳平衡敏感数据保护对于包含敏感数据的内存区域使用URMA_TOKEN_ALL_ENCRYPTED策略权限最小化原则仅为必要的操作授予权限避免过度授权监控与审计UMDK提供了完善的监控和审计能力访问日志记录记录所有内存访问和Jetty访问的Token验证结果异常检测检测异常的访问模式和安全策略违规审计追踪支持完整的访问审计追踪满足合规性要求 总结UMDK的UB访问控制和内存访问控制机制为分布式内存通信提供了强大的安全保障。通过Token验证机制、UMMU权限控制表和灵活的安全策略配置UMDK实现了多层次、细粒度的安全防护。这些机制不仅保护了数据资产的安全还通过硬件加速和优化设计在提供强大安全保护的同时保持了高性能。无论是高性能计算、人工智能训练还是分布式数据库应用UMDK的安全机制都能为您的应用提供可靠的安全保障。通过合理配置安全策略您可以在安全性和性能之间找到最佳平衡点构建既安全又高效的分布式系统。【免费下载链接】umdkThe Unified Memory Development Kit(UMDK) is a set of distributed communication software stack with memory semantics as the core. It aims to design a new-generation network architecture through software-hardware collaboration, subvert the traditional communication form, and build a computing native network centered on memory semantic interconnection.项目地址: https://gitcode.com/openeuler/umdk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考