【TEE】内存完整性保护

2024-03-06 03:28
文章标签 内存 保护 完整性 tee

本文主要是介绍【TEE】内存完整性保护,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hash Functions&Merkle Tree

对读操作进行完整性检查,通过在加载的块上重新计算一个哈希,然后根据片外地址将得到的哈希与片上哈希比较。
缺点:不可承受的片上存储开销,并假设128位哈希和512位cache line,其开销为保护内存空间的25 %。
在这里插入图片描述
片上存储需求是无法承受的,有必要将这些参考值"安全"地存储在片外。递归地应用认证原语,形成了一个完整性树结构,只需要将树的根存储在处理器芯片上。
Merkle tree认证过程是完全可并行的,因为这个过程所需的所有输入都可以在这个过程开始之前得到;然而更新过程不可并行。

在这里插入图片描述

MAC Functions&PAT (Parallelizable Authentication Tree)

写操作为每个数据块计算一个MAC,MAC计算使用的密钥被安全地存储在可信芯片上,只有片上验证引擎本身能够计算出有效的MAC,因此MAC可以存储在不可信的外部存储中。MAC计算还用nonce防止重放攻击。读操作,用nonce和data重新计算MAC,并和外部取得的MAC进行比较。
每512b cache line计算一个MAC,并且使用64比特的nonces,那么相应的片上存储开销为12.5 %
在这里插入图片描述
PAT使用MAC克服了不可并行更新的问题。除了最后一级,每一步的Nonce和MAC value都被送到外部。根MAC发送到外部存储器,而nonce N存储在片上;这种方式使树根具有防篡改性,因为敌手不能在没有存储在芯片上的密钥K的情况下生成新的MAC,也不能重放旧的MAC,因为它不会由当前的根节点产生。
树更新过程也是可并行化的,因为每个分支树节点都是由独立生成的输入nonces计算得到的。
在这里插入图片描述

Block-Level AREA&TEC-Tree(Tamper-Evident Counter Tree)

为分组加密算法增加了完整性校验功能。plaintext block P (where P=D||N),把冗余数据N存在片上。
根据所实现的分组加密算法,相应的开销在25 % ~ 50 %之间。
在这里插入图片描述
将生成的加密块存储在外部存储器中,并将创建的最后一个块(即TEC - Tree的根)加密时使用的nonce保存在片上,使得根不可篡改。没有密钥的敌手不能创建树节点,而没有片上根节点,他就不能重放树根。树更新过程包括:i )加载D的分支解密节点,ii )更新nonces,iii )重加密节点。
在这里插入图片描述

比较

TEC - Tree还提供数据的机密性。与merkel tree相比,TEC - Tree和PAT也具有较高的片外存储开销,特别是由于它们需要存储额外的元数据nonces。
在这里插入图片描述

优化技术

  • 缓存技术:【Caches and Merkle Trees for Efficient Memory Integrity Verification】将Merkle树的性能开销降低到25 %以下。通过改变哈希函数- -从SHA - 1到GCM,甚至声称性能开销保持在5 %以下。
  • Bonsai Merkle Tree:【Using Address Independent Seed Encryption and Bonsai Merkle Trees to Make Secure Processors OS and PerformanceFriendly】平均而言,4KB内存页和64B缓存块需要一个8位的计数器。因此,与直接应用于内存块的常规Merkle树相比,使用Bonsai Merkle树进行身份验证的内存量减少了1:64。该方法将完整性树的执行时间开销从12.1 %降低到1.8 %,将节点存储的外部内存开销从33.5 %降低到21.5 %。
    在这里插入图片描述

这篇关于【TEE】内存完整性保护的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

浅析Java如何保护敏感数据

《浅析Java如何保护敏感数据》在当今数字化时代,数据安全成为了软件开发中至关重要的课题,本文将深入探讨Java安全领域,聚焦于敏感数据保护的策略与实践,感兴趣的小伙伴可以了解下... 目录一、Java 安全的重要性二、敏感数据加密技术(一)对称加密(二)非对称加密三、敏感数据的访问控制(一)基于角色的访问

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C