【安全硬件】Chap.4 如何插入一个硬件木马到芯片的时序逻辑电路的漏洞里?如何构建可信赖的状态机?

news2024/9/24 13:17:51

【安全硬件】Chap.4 如何插入一个硬件木马到芯片的时序逻辑电路的漏洞里?如何构建可信赖的状态机?

  • 前言:硬件木马
  • 1. 时序逻辑电路中的设计漏洞Design Vulnerabilities
    • 序列检测器的设计漏洞——以智能门锁的虚位密码漏洞为例
      • 易受攻击的状态机写法Vulnerable State Machine Specification
      • 第一种漏洞:设置一个“隐藏密码”
      • 构建可信赖的智能门锁状态机写法
      • 第二种漏洞:使得状态机失效,无法正常检测密码
  • 2. Design for Trust Techniques
    • 设计混淆 Design Obfuscation
  • 3. 时序逻辑电路的一般设计流程与卡诺图化简
    • 时序逻辑电路的状态机设计过程

前言:硬件木马

硬件木马(hardware Trojan)

  • 对现有电路元件的恶意添加或修改。 A malicious addition or modification to the existing circuit elements.

硬件木马能做什么?What can hardware Trojans do?

  • 更改功能(Change the functionality)
  • 降低可靠性(Reduce the reliability )
  • 泄露有价值的信息(Leak valuable information)

1. 时序逻辑电路中的设计漏洞Design Vulnerabilities

  时序逻辑电路中,任意时刻的输出信号不仅与当时刻的输入有关,而且与电路原来的状态有关。

序列检测器的设计漏洞——以智能门锁的虚位密码漏洞为例

  有些智能门锁具备虚位密码的功能,可以在正确密码的前面和后面加上任意数字,只要中间有连续正确的密码就可开门。小明设计了一个序列检测器实现虚位密码解锁功能,即在海量输入下检测对其中一串敏感的密码进行识别

  • 序列检测器检查二进制数据位流,并在检测到特定序列时将输出信号置1。

  • 有限状态机(Finite-state machine)将读取一系列输入。对于给定的输入,每个状态指定要切换到哪个状态,并给出输出。

易受攻击的状态机写法Vulnerable State Machine Specification

  假设用户门锁的解锁密码是000111,小明设计了一个序列检测器如下所示:
在这里插入图片描述

  当输入信号的其中一段为000111时:

  • 状态跳转顺序为 S 0 → S 1 → S 2 → S 3 → S 4 → S 5 → S 0 S_0 \rightarrow S_1 \rightarrow S_2 \rightarrow S_3 \rightarrow S_4 \rightarrow S_5 \rightarrow S_0 S0S1S2S3S4S5S0
  • S 5 → S 0 S_5 \rightarrow S_0 S5S0的时候输出“1”产生一个高电平
  • 状态一共有6个,需要编码000,001,010,011,100,101;一共三位,共需要3个触发器(flip-flop)才能

第一种漏洞:设置一个“隐藏密码”

  有一个小偷想越过这个密码,设置一个“隐藏密码”可以开启门锁,也就是说,需要在不破坏正常情况下此状态机跳转的同时,在硬件上植入一个木马。分析原设计发现了漏洞如下:

  • 3个触发器编码的6个状态,其中是可以再编写两个状态的,可以通过增加其他状态的方式设置“后门”。
  • S 0 S_0 S0状态和 S 3 S_3 S3状态都可以跳转到自身,可以利用这个漏洞,破开其中一个(这里选择 S 0 S_0 S0)跳转到自身的状态,加一个中间的状态。
    于是小偷在硬件上通过接线又植入了一个木马(过程这里不叙述了),改变了状态机的跳转,如下图所示:
图1 原设计
图2 木马1:设置一个“隐藏密码”

  分析这个状态机不难发现,除了用户密码“000111”还植入了一个隐藏密码“111111”,直接给小偷留了个后门。因为3个触发器编写8个状态不成问题,所以用户在正常使用的时候很难发现硬件木马

构建可信赖的智能门锁状态机写法

  就具备虚位密码的智能门锁这个例子而言,为了构建可信赖的状态机可以实行以下规范:

  1. 不留空余状态,不给硬件木马给状态机添加状态的机会;
  2. 分辨所有状态机可能存在的状态的跳转,包括冗余状态,设计让冗余状态不论输入什么都跳转到初始化状态。
  3. 在构建可信赖的状态机之后,再分析哪些状态有歧义容易受到攻击造成安全隐患。

  构造的状态机如下所示,、

图1 原设计
图2 Design for Trust可信赖状态机

第二种漏洞:使得状态机失效,无法正常检测密码

  隐藏密码的功能:在正确6位密码前后可以输入任意的乱码,只要中间的6位密码是正确的就可以开门,这样就避免了输入密码开门时刻意遮掩的窘境。
  有一个人想让这个密码失效,输入隐藏密码也不能打开门锁,也就是说,破坏了正常情况下此状态机跳转,在硬件上植入一个木马。分析原设计发现了漏洞如下:

  • S 0 S_0 S0状态和 S 3 S_3 S3状态都可以跳转到自身,可以利用这个漏洞,破开其中一个(这里选择 S 3 S_3 S3)跳转到自身的状态,让其无法跳转到自身。
    于是小偷在硬件上通过接线又植入了一个木马(过程这里不叙述了),改变了状态机的跳转,如下图所示:
图1 原设计
图2 木马2:使得状态机失效,无法正常检测密码

  分析插入木马2后的状态机:

  • 正常直接输入000111时,状态跳转顺序为 S 0 → S 1 → S 2 → S 3 → S 4 → S 5 → S 0 S_0 \rightarrow S_1 \rightarrow S_2 \rightarrow S_3 \rightarrow S_4 \rightarrow S_5 \rightarrow S_0 S0S1S2S3S4S5S0,在 S 5 → S 0 S_5 \rightarrow S_0 S5S0的时候输出“1”产生一个高电平。

  • 当你尝试输入00001111,状态跳转顺序为 S 0 → S 1 → S 2 → S 3 → S 1 → S 0 → S 0 → S 0 S_0 \rightarrow S_1 \rightarrow S_2 \rightarrow S_3 \rightarrow S_1 \rightarrow S_0 \rightarrow S_0 \rightarrow S_0 S0S1S2S3S1S0S0S0,输出低电平没有变化,即虽然输入密码正确为“000111”,但是门锁没有打开

  • 破坏了其中一条连线,让状态机失效,无法正常检测密码

  • The circuits will not recognize the correct sequence if it was preceded by one or more zeros, so even if you’ve got a correct sequence then the state will stop will not recognize

  • so the circuit does not function as you tended

  同样的,也可以构建可信赖的智能门锁状态机写法解决这个漏洞。

2. Design for Trust Techniques

  Design for Trust是一种思想,使用预防性设计技术来克服硬件木马的漏洞。策略是构建可信赖的 IC电路,它完全按照要求进行设计逻辑,不多也不少包括电路中每个状态的全面规范(有时候为了安全性可能造成成本高昂且不切实际),有许多新兴技术可以通过以下方式提高硬件的安全性:

  • 促进特洛伊木马检测方法,例如,通过插入额外的探测点,更容易分析敏感块的时间和功率。Facilitating Trojan detection methods for example by making it easier to analyze timing and power of sensitive blocks through the insertion of additional probing points
  • 使用设计混淆技术防止特洛伊木马插入。Preventing Trojan insertion using design obfuscation techniques
  • Including comprehensive specifications for every single state in the circuit may be costly and impractical

设计混淆 Design Obfuscation

Security against hardware Trojan through a novel application of design obfuscation
  设计混淆,意味着创建原始设计的功能等效版本,这会使得设计更难理解以及不易被恶意修改。
  以下图为例,使用额外插入的状态,正常操作时因为这些状态没有输入,所以无法到达,仅在特殊混淆操作模式下才被使用。
在这里插入图片描述

  混淆状态空间(里面全是冗余的状态)的构造可以显着受益于给定电路中无法到达状态的确定,因为这些状态可以用于初始化或隔离状态空间。

3. 时序逻辑电路的一般设计流程与卡诺图化简

  1. 分析要解决的问题。什么信息需要被存储到内存里面,即选择可能的状态。
  2. 使用合适的设计表示来表述问题。画状态转换图用于描述系统的行为。(formulate the problem using a suitable design representation)
    在这里插入图片描述
  3. 选实施的功能性模块,如触发器。(Choose implementation target)
  4. 按照步骤实施,逻辑综合导出触发器输入与输出的结构图,卡诺图化简成想要的形式(可能是两层括号的表达式方便控制延迟)、硬件描述语言verilog描述并用工具解释(Follow implementation procedure)。

时序逻辑电路的状态机设计过程

  1. assign binary codes to states
  2. Generate the logic equations for the next state functions
  3. Generate the logic equations for output function (Identify is it Mealy or Moore machine)
  4. Map to a circuit

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

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

相关文章

Qt基础之十八:WebEngine与JavaScript交互

Qt从5.6开始就用Qt Webengine替换了Qt WebKit,据说加载速度较Qt WebKit更快。 需在pro中添加QT += webenginewidgets 一.效果 二.实现 1.JavaScript调用Qt函数 在MainWindow中定义成员变量QWebChannel *m_channel;作为和web通信的数据通道 ①加载网页 void MainWindow::l…

多线程案例-阻塞式队列

1.什么是阻塞队列阻塞队列是一种特殊的队列,在"先进先出"的原则下又引入了"阻塞"功能阻塞队列能是一种线程安全的数据结构,具有以下特性:当队列满的时候,继续入队列就会阻塞,直到其它线程从队列中取走元素当队列空的时候,继续出队列就会阻塞,直到其它队列向…

内蒙古大学计算机考研893计算机考研真题分享

内蒙古大学计算机学院成立于1997年,软件学院成立于2005年,与计算机学院为一个实体,两个牌子。 目前,学院由计算机科学系、软件工程系、信息管理系和计算中心(实验中心)组成,设有计算机科学与技…

uniapp开发小程序引入微信快递跟踪(快递100)插件

目录 1.小程序插件接入 2.代码示例 3.页面接收参数 4.常用快递100公司编码表 1.小程序插件接入 微信快递100插件地址:快递100-快递查询(免费接入) | 微信服务市场 (qq.com) 1)进入链接地址 2)登陆开发小程序的账…

二叉树18:从中序与后序遍历序列构造二叉树

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:344. 反转字符串 题目: 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的…

最全Go select底层原理,一文学透高频用法

导语 |在日常开发中,select语句被高频使用。但目前,全网分析select在编译期和运行时的完整底层原理资料,非常匮乏。本文基于Go1.18.1版本的源码,讲解select访问Channel在编译期和运行时的底层原理——select编译器优化用到的src/c…

2022年第十二届APMCM亚太杯1月增赛E题发布

2022年亚洲及太平洋地区建模数学竞赛问题E 有多少颗核弹可以摧毁地球? 1945年8月6日,第二次世界大战接近尾声。为了尽快结束战争,美国在日本广岛投下了名为"小男孩"的下一颗原子弹。这样一颗原子弹炸死了广岛的200000人,广岛的所有…

【数据结构Java版】对象的比较之Comparable与Comparator比较器

目录 一、基本类型的比较 二、对象类型的比较 (1)对象类型比较出现的问题 (2)重写基类equals方法 (3)基于Comparable接口的比较 1.实现Comparable接口,重写compareTo方法 (4&a…

Flask框架中常规漏洞防范方法

一、前言 Double Fetch是一种条件竞争类型的漏洞,其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差,我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy_from_user,而如果要拷贝的数据过于复杂的话…

leetcode | 链表

01 链表知识点 1.1 基础知识 线性表:零个或多个相同类型的数据元素的有限序列,一对一关系,所含数据元素个数n称为线性表的长度。 线性表有两种物理结构(存储结构):顺序存储、链式存储。 线性表的顺序存储结构:用一段…

优化改进YOLOv5算法之添加SE、CBAM、CA模块(超详细)

目录 1 SENet 1.1 SENet原理 1.2 SENet代码(Pytorch) 1.3 YOLOv5中加入SE模块 1.3.1 common.py配置 1.3.2 yolo.py配置 1.3.3 创建添加RepVGG模块的YOLOv5的yaml配置文件 2 CBAM 2.1 CBAM原理 2.2 CBAM代码(Pytorch) 2.3 YOLOv5中加入CBAM模块 2.3.1 common.py配…

敏捷是一种态度:有了敏捷建模,就有了敏捷需求

目 录01 缘起02 敏捷需求5W1H的思考‍‍‍‍‍‍03 关于敏捷需求体系的一些思考‍‍‍‍‍‍04 写在敏捷需求后的话01缘起对研发效能提升的研究,是近年来各家企业技术部门一直在研究的课题。早期,针对敏捷开发的实践,让大多技术管理者尝到…

114.(leaflet之家)leaflet空间判断-点与圆的空间关系

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>

每个开发人员都应该使用的可扩展和可维护的 React 项目结构

一个好的项目结构可以在理解代码库、灵活性和维护方面对项目的成功产生巨大影响。结构和维护不当的项目很快就会变成一团糟和可怕的遗产&#xff0c;没有人愿意与之共事。我现在将向您展示我在项目中经常使用的结构&#xff0c;并解释其背后的原因。这种结构应该是大规模应用程…

开源代码 | FMCW-MIMO雷达仿真MATLAB

本文编辑&#xff1a;调皮哥的小助理 本程序来源&#xff1a;https://github.com/ekurtgl/FMCW-MIMO-Radar-Simulation&#xff0c;作者是阿拉巴马大学博士生艾库特格尔&#xff0c;研究方向主要是雷达信号处理人类活动识别以及雷达数据的机器学习应用&#xff0c;这份比较新的…

STM32MP157驱动开发——4G通信模块驱动

STM32MP157驱动开发——4G通信模块驱动一、简介二、驱动开发1.高新兴 ME3630 驱动开发驱动修改添加 ECM 支持程序配置 Linux 内核ppp拨号功能测试ECM 联网测试ME3630 4G 模块 GNSS 定位测试2.移远EC20 4G驱动开发驱动修改配置 Linux 内核EC20 ppp 拨号上网移远 GobiNET 驱动移植…

go语言学习(一):Mac环境安装及初始化

​ ​为什么要学习go语言? 1、简洁&#xff0c;快速&#xff0c;安全&#xff1b; ​ ​2、并行&#xff0c;有趣&#xff0c;开源​&#xff1b; 3、内存管理&#xff0c;数据安全&#xff0c;编译迅速 首先&#xff0c;去官网&#xff1a;https://golang.google.cn/dl…

面向对象3(多态、多态调用成员函数的特点、多态的优势和弊端及改进、包、final、权限修饰符、代码块、抽象方法和抽象类、接口、内部类)

1、多态 2、多态调用成员函数的特点 示例如下&#xff1a; 理解&#xff1a; 因为是Animal类型的&#xff0c;所以在输出name时会在父类继承下来的变量里面找 &#xff0c;没有就报错。而一般是先找自己再找父类继承下来的。 3、多态的优势和弊端及改进 优势&#xff1a; 弊端…

Arduino——野火GPS模块

GPS模块 文章目录GPS模块前言一、Arduino代码前言 手上还有一个GPS&#xff0c;用arduino做模块很方便&#xff0c;打算和短信模块结合&#xff0c;短信模块上次已经使用完成了&#xff0c;这次学习一下GPS模块 看模块很容易知道&#xff0c;这个模块用的是串口通信&#xff…

基于STM32智能家居控制系统软件设计及实现

1.1 系统流程图 智能家居控制系统的软件设计主要使用Keil uVision5进行STM32主烧录程序的编写&#xff0c;主程序完成的功能主要为接收并判断语音识别模块传过来的信息&#xff0c;然后根据满足条件的不同进行对应的操作。例如&#xff0c;当语音模块传过来的信息为“打开电视…