基于二级片内硬件堆栈的后向CFI 验证方法研究,第4章 硬件设计与实现(二)

news2024/11/24 4:31:14

4.3 批处理验证实现

批处理验证是为了进一步降低硬件资源消耗和降低系统功耗提出的二级片内硬件堆栈的另一种实现方法,批处理验证的硬件结构图如图4.7所示,也由指令检测单元、返回地址缓冲区、MAC计算单元、MAC存储单元组成。

在这里插入图片描述
图4.7 批处理验证硬件框图
批处理验证与延迟验证相同都在处理器相同的位置截取指令,采用相同的方式对保存或调用返回地址的指令进行检测,在流水线中截取相同的信号获得返回地址和保存返回地址到内存堆栈中,其端口信号与延迟验证相同,如表4.2所示。在批处理验证中当检测到返回地址调用或保存指令后,对RAB中的返回地址进行相应的操作,如3.4节所述,在条件满足的情况下会将RAB中的返回地址送入MAC计算单元进行计算,之后再将MAC保存到MAC存储单元中,由于RAB中的返回地址只生成一个MAC,所以MAC存储单元可以做的更小以节省硬件资源。
在批处理验证中,RAB只需要保存最近的返回地址以及一个硬件指针front。批处理验证中MAC计算单元同样采用AES对称加密算法,同时采用了门控时钟和最新MAC存储等方法进行了优化,进一步提高系统性能。

4.3.1 消息验证码计算单元

在批处理验证中同时输入AES多个返回地址进行计算,同样在输入的返回地址位宽小于AES输入数据位宽时使用比特位进行填充。
在进行MAC验证时,通常验证的返回地址是上一次保存到内存堆栈中的返回地址,即MAC验证通常紧跟在MAC计算更新之后,这种情况通常出现在叶函数中[4]。因此在MAC计算单元中保存最新输入AES进行计算的返回地址,在下一次计算返回地址的MAC时,如果计算的返回地址与上一次相同,则不需要再次进行计算,可以直接使用之前已经计算出的MAC。在MAC单元中记录最新AES输入数据的程序为(RAB大小为4):
assign aes_data = {rab_ra[3], rab_ra[2], rab_ra[1], ra_lw};
// 当需要计算MAC时,保存此时的返回地址
if((sw_ra_i == 2’b01) & (front== 0))
aes_data_reg <= aes_data;
在需要验证时,先判断需要计算MAC的返回地址与之前更新的返回地址是否相同:
assign aes_same = (aes_data_reg == aes_data);
在保存或调用返回地址后,如果此时front为0并且aes_same为0,RAB中的返回地址为一个新的块,将开始计算该块的MAC。
批处理验证只有RAB中的返回地址为一个新的块并且aes_same为0的情况下AES才会进行运算,为此我们在AES中添加门控时钟,只有需要AES进行运算的情况下时钟才使能,在时钟无效的情况下AES没有功耗产生,降低了系统的功耗,原理图如图4.8所示。
在这里插入图片描述
图4.8 AES门控时钟
###4.3.2 消息验证码存储单元
在批处理验证中由于多个返回地址生成一个MAC,所以MAC存储单元可以设计的很小以节省硬件资源。与延迟验证相同,使用一个硬件指针mac_pointer作为MAC存储单元中存储下一个MAC的地址,mac_poiner初始时为0指向第一个存储单元。
在MAC存储单元中设置了两个标志位sw_mac和lw_mac,当需要将RAB中返回地址的MAC保存到MAC存储单元时sw_mac被置1,当需要从MAC存储单元中读取相应的MAC时lw_mac被置1。
在系统中需要将返回地址的MAC保存到MAC存储单元时,如果aes_same为1即需要保存的返回地址的MAC与前一次的返回地址相同,则可以直接将已有的MAC保存并将mac_pointer加1。如果aes_same为0并且sw_same为1则当AES模块计算完毕后再将生成的MAC保存到MAC存储单元。在系统需要读取MAC进行验证时,如果此时aes_same为1则直接将MAC存储单元中的“栈顶”的MAC取出与AES中的MAC进行比较判断返回地址是否被篡改;如果aes_same为0且lw_mac为1,则等待AES计算完当前MAC计算完后在读取MAC存储单元中的MAC。

4.3.3 流水线暂停与异常产生

在调用返回地址并且需要进行验证时,如果aes_same为1则不需要重新计算MAC,所以不需要暂停流水线,如果aes_same为0则需要MAC计算单元重新计算MAC。此时需要暂停流水线,定义stall信号为流水线暂停信号:
always @ (posedge clk,negedge rst_n) begin
if(~rst_n)
stall <= 1’b0;
else begin
if((lw_ra_2_i == 2’b10)&(aes_same == 1’b0)&(front == 2’b00))
stall <= 1’b1;
if(aes_done_r == 2’b10)
stall<= 1’b0;
end
end
与延迟验证相同,将该信号作为译码模块中流水线控制信号的一个输入,实现处理器流水线的暂停。
在调用返回地址时,如果此时RAB中的返回地址为一个新的块则需要进行验证,如果aes_same为1则直接将AES模块中的MAC与MAC存储单元中的MAC进行比较,如果aes_same为0则AES模块计算出新的MAC时将计算出的MAC与MAC存储模块中的MAC进行比较,如果不相等则产生异常信号,异常输入到处理器的NMI不可屏蔽中断中,从而阻止恶意程序的执行。

4.4 本章小结

本章主要在玄铁E906 RSIC-V处理器中实现了二级硬件堆栈的两种验证方法。首先介绍了平头哥的开源32位RISC-V处理器玄铁E906,基于这款开源RISC-V处理器,将系统硬件模块划分为指令检测单元、返回地址缓冲区、消息验证码计算单元和消息验证码存储单元,此外还包括异常产生以及流水线暂停处理,分别在硬件中实现两种验证方法并集成到处理器中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1588498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue的咖啡商城(带文档)

项目介绍: 基于SpringBootVue的咖啡商城&#xff08;带文档&#xff09; 网上咖啡商城系统&#xff0c;咖啡商城系统 前后端分离&#xff0c;Java开发&#xff0c;Vue框架&#xff0c;Redis分布式缓存&#xff0c;MyBatis 运行环境&#xff1a;JDK1.8MySQLMavenRedisNode.js 项…

【Python-MP4文体提取】

Python-MP4文体提取 ■ pip 和 setuptools工具■ OpenCV和Tesseract■ Tesseract OCR V5.0安装教程&#xff08;Windows&#xff09;■ 1. 运行程序出现如下问题&#xff1a;我们需要安装Tesseract OCR■ 2. 下载Tesseract-OCR■ 3. 安装Tesseract-OCR■ 4. 添加到环境变量的系…

Linux磁盘扩容并设置挂载点

背景 使用pve创建了一个虚拟机&#xff0c;各种环境配置都安装好了之后发现分配的磁盘空间太小了&#xff0c;默认的就30多个G&#xff0c;这还没咋玩呢就满了&#xff0c;像扩容却找遍了这个pve都没找到扩容按钮&#xff0c;并且我这个磁盘不是lvm结构的&#xff0c;所以好像…

01攻防世界web-Training-WWW-Robots

写在前面&#xff1a; 一入网安深似海&#xff0c;学习需要毅力和强大的坚持。 1.Training-WWW-Robots 题目 解题过程 访问网址后面加上/robots.txt 进入fl0g.php文件&#xff0c;找到flag 相关知识点1.Robots&#xff1a; 理解一下robotS文件中的user-agent: 以及Disallow…

学习Rust的第三天:猜谜游戏

Welcome to the third day of learning rust, I am referring to the book “The Rust Programming Language” by Steve Klabnik. Today we build a guessing game in rust. 欢迎来到学习Rust的第三天&#xff0c;基于Steve Klabnik的《The Rust Programming Language》一书。…

数据生成 | Matlab实现基于SNN浅层神经网络的数据生成

数据生成 | Matlab实现基于SNN浅层神经网络的数据生成 目录 数据生成 | Matlab实现基于SNN浅层神经网络的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于SNN浅层神经网络的数据生成&#xff0c;运行环境Matlab2021b及以上&#xff1b; …

微软卡内基梅隆大学:无外部干预,GPT4等大语言模型难以自主探索

目录 引言&#xff1a;LLMs在强化学习中的探索能力探究 研究背景&#xff1a;LLMs的在情境中学习能力及其重要性 实验设计&#xff1a;多臂老虎机环境中的LLMs探索行为 实验结果概览&#xff1a;LLMs在探索任务中的普遍失败 成功案例分析&#xff1a;Gpt-4在特定配置下的探…

TS在interface和type的区别

在TypeScript中&#xff0c;interface和type都是用来定义类型的方式 (1)语法&#xff1a; interface 关键字用于定义接口,一般定义对象类型,可以描述对象的形状&#xff0c;即一个对象应该具有哪些属性和方法。interface可以声明对象应该具有的结构和属性。 type 关键字用于…

Java 中文官方教程 2022 版(三十二)

原文&#xff1a;docs.oracle.com/javase/tutorial/reallybigindex.html 一个基本的打印程序 原文&#xff1a;docs.oracle.com/javase/tutorial/2d/printing/printable.html 本节解释了如何创建一个基本的打印程序&#xff0c;显示打印对话框&#xff0c;并将文本“Hello Worl…

导入芯片原厂SDK Mirror源码到gerrit

下载镜像代码 repo init --mirror --repo-url ssh://xx/repo.git -u ssh://xx/manifests.git -m manifest.xml repo sync 创建AOSP project 对All Project权限修改 创建repo 在刚才下载的codebase根目录执行如下命令&#xff1a; repo forall -c echo $REPO_PROJECT; ssh -p 29…

Linux使用docker安装RocketMQ并登录管理界面

Linux使用docker安装RocketMQ并登录管理界面 1、创建 /opt/rocketmq/docker-compose.yml和/opt/rocketmq/broker.conf两个配置文件 2、docker-compose.yml&#xff0c;并配置管理页面端口为8090 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_…

Ubuntu 22.04进行远程桌面连接

文心一言 Ubuntu 22.04进行远程桌面连接&#xff0c;无论是连接到Windows 10还是另一个Ubuntu 22.04&#xff0c;都可以通过不同的方式实现。以下是具体的步骤&#xff1a; 连接到Windows 10 在Windows 10上开启远程桌面功能&#xff1a;首先&#xff0c;需要在Windows 10上…

linux系统特殊符号

分号可以对命令分割&#xff0c;如下图&#xff0c;单独使用ls与pwd&#xff0c;与使用分号进行分割 井号可以将后面内容注释掉&#xff0c;以及作为root身份提示符 $可以取出变量的值&#xff0c;同时也是普通用户身份提示符 反斜杠可以将特殊字符转义为普通字符 花括号可以用…

(五)PostgreSQL的管理工具pgAdmin

PostgreSQL的管理工具pgAdmin pgAdmin 是一款流行的开源图形界面管理工具&#xff0c;用于 PostgreSQL 数据库的管理和开发。它提供了一个易于使用的界面&#xff0c;允许用户执行各种数据库任务&#xff0c;如创建和修改数据库对象&#xff08;表、视图、索引等&#xff09;、…

一文看懂标准版和Pro版的区别

在CRMEB的众多产品中&#xff0c;有这样两款产品经常被拿来比较&#xff0c;它们就是CRMEB的标准版和Pro版商城系统&#xff0c;今天&#xff0c;我们就来盘一下这两款系统之间究竟有哪些不同。 1、Pro版系统性能更卓越 CRMEB Pro版采用Tp6 SwooleRedis高性能框架开发&#…

组件与组件之间的传递-事件总线

两个组件之间的数据传递&#xff08;属于非父子组件通讯&#xff09; 当项目中只是两个组件的少量数据传递时使用事件总线这种方法会比较方便&#xff0c;但当遇到大量数据传递时推荐使用vuex 思路 组件与组件之间不能直接传递&#xff0c;这是候可以创建一个EventBus.js文件…

【火猫TV】Spirit.Collapse-不清楚队伍的问题出在哪里

1、近日Spirit战队三号位选手Collapse在精英联赛期间接受采访时表示&#xff1a;不清楚队伍目前的问题出在哪里&#xff0c;可能只是因为我们如今的状态和表现都不太好吧。转载&#xff1a;火猫TV资讯 【队伍目前的问题】 “我不是很清楚目前我们的问题出在哪里&#xff0c;可…

2024年,怎么开通一个属于自己的抖店?

我是王路飞。 抖店&#xff0c;依旧是普通人做抖音最好的渠道。 至于短视频直播带货&#xff0c;门槛较高&#xff0c;尤其是在当前的环境下&#xff0c;个人是很难竞争的过那些达人团队的。 不管是在门槛、操作、还是利润回报等方面&#xff0c;抖店都是一个不错的选择。 …

奎芯科技:智能时代的芯片上游企业如何突破?

半导体IP&#xff08;Intellectual Property&#xff0c;知识产权&#xff09;&#xff0c;通常也称作IP核&#xff08;IP core&#xff09;&#xff0c;指芯片设计中预先设计、验证好的功能模块&#xff0c;主要服务于芯片设计&#xff0c;因部分通用功能模块在芯片中被反复使…

五:函数基础:概念、基础语法、库函数与自定义函数

本章学习链接如下&#xff1a; 1.函数的概念 函数是执行特定任务的自包含代码块&#xff0c;它可以接受输入&#xff0c;处理输入&#xff0c;并产生输出。函数的使用提高了代码的重用性、模块性和可读性。C语言中的函数可以分为两大类&#xff1a;库函数和用户定义函数。 2.函…