- 博客(93)
- 收藏
- 关注
原创 对称密钥认证:主机和设备共享同一把密钥
即使攻击者破解了耗材 A,拿到 Key_A,也不能直接得到 Key_B、Key_C,更不能反推出 Root_Key。例如,主机发送一个随机 Challenge,设备使用内部密钥计算 MAC,主机使用相同密钥计算期望 MAC。对称密钥认证,是指主机和设备共享同一类密钥,通过相同算法计算认证结果,从而判断对方是否拥有正确密钥。使用一个父密钥 Root_Key,再结合设备唯一信息,派生出每台设备自己的密钥。因为设备端如果保存验证密钥,一旦设备被破解,攻击者可能伪造升级包。
2026-07-07 00:06:44
324
原创 MAC 消息认证码:同时验证来源和完整性
如果 Challenge 固定、重复、可预测,或者主机允许验证旧 Challenge,那么攻击者截取到一组 Challenge + Response 后,就可以进行重放攻击。如果密钥直接明文放在 MCU 普通 Flash 中,一旦攻击者通过调试口、烧录口、固件读取或漏洞提取密钥,就可以伪造合法 MAC。因此,在 MCU 项目中,如果软件实现 MAC,应优先使用成熟密码库中的 HMAC-SHA256,而不是自行设计变体。MAC 有密钥参与,攻击者即使修改消息,也无法在不知道密钥的情况下生成正确 MAC。
2026-07-07 00:02:47
378
原创 哈希算法:密码学的基础构件
因此,在安全设计中,应选择当前仍被认为安全的哈希算法,例如 SHA-256,而不是 MD5、SHA-1 这类已经不适合作为安全用途的算法。如果攻击者修改数据后,重新计算一个新的 Hash,并把新 Hash 一起发给设备,那么接收方仍然可能被骗。如果需要抵抗恶意修改,单独 CRC 不够,应至少考虑 Hash,并进一步结合 MAC 或数字签名。如果只有 Hash,没有签名,攻击者修改固件后也可以重新计算 Hash。但是,如果只校验 Hash,而不验证签名,仍然不能证明升级包来自官方。
2026-07-06 23:22:33
351
原创 身份识别、身份认证与授权的区别
例如,只检查 SN、设备 ID、型号或批次号,就认为设备可信,这在工程上是不安全的。真正可靠的做法,是结合挑战响应、MAC、数字签名、安全芯片、证书链和权限控制,建立从身份声明到身份证明,再到权限约束的完整闭环。因此,SN、设备 ID、型号、批次号、版本号,都只能作为身份声明或索引信息,不能单独作为安全认证依据。在工程实现中,SN、型号、批次号、设备 ID 只能用于识别和索引,不能单独作为可信认证依据。身份识别不是安全,身份认证才开始建立信任,授权则决定信任之后的权限边界。
2026-07-06 23:11:34
502
原创 嵌入式安全三要素:认证、完整性与保密性
如果攻击者伪造了一个传感器,并且主机没有认证机制,那么主机可能会直接和这个假传感器通信。例如,主机和设备内部都保存同一个密钥。即使后续通信使用了加密,也可能只是和攻击者建立了一条**“加密但不可信”**的通道。例如,对固件计算 SHA-256 摘要,只要固件内容发生任何变化,摘要结果就会不同。如果没有完整性保护,攻击者可能修改固件、配置或通信命令,从而让设备执行错误逻辑。所以,在嵌入式安全中,通常应该先考虑身份认证和完整性,再考虑保密性。这些数据内容本身可能并不敏感,即使被别人看到,风险也不大。
2026-07-06 23:01:51
601
原创 为什么嵌入式设备越来越需要安全设计
随着设备逐步接入网络、云平台、手机 App、产线系统和第三方配件,嵌入式系统已经从“单板软件”变成“设备生态系统”的一部分。攻击者不一定需要拆机。但是,当设备接入网络、云平台、手机 App、产线系统和第三方配件之后,风险边界发生了明显变化。如果系统只检查设备 ID,而没有真正的身份认证机制,那么设备 ID 一旦被复制,就可能被仿冒。在医疗、工业、打印、检测仪器等场景中,主机经常需要识别耗材、探头、模块或传感器是否合法。,工程团队通常通过看门狗、异常恢复、通信校验、滤波、冗余检测和可靠性测试来解决。
2026-07-06 22:52:14
497
原创 MCU订阅-发布模式
McnHub是 uMCN 的核心结构,负责管理主题的发布和订阅。McnNode代表订阅者,管理订阅的主题和数据更新的回调函数。McnList用于维护所有消息中心的链表。uMCN通过这些结构实现了一个高效的发布-订阅系统,保证了发布者和订阅者之间的松耦合和数据的一致性。
2024-10-05 16:07:01
1455
原创 计算入射光强度和吸收系数
1. 比尔-朗伯定律基础根据比尔-朗伯定律,光在穿过气体时,出射光强 III 随气体浓度 xxx 按指数衰减:I=I0e−b⋅x I = I_0 e^{-b \cdot x}I=I0e−b⋅x其中:III 是出射光强度;I0I_0I0 是入射光强度(初始光强度);bbb 是吸收系数;xxx 是气体浓度。比尔-朗伯定律,它描述了光穿过物质时的衰减:FA=1−(II0)FA = 1 - \left( \frac{I}{I_0} \right)FA=1−(I0I)其中:
2024-09-14 01:14:12
361
原创 CO₂和CO的红外吸收光谱
CO₂的主要红外吸收波长CO的主要红外吸收波长应用设计NDIR传感器设计需结合吸收峰位置、吸收强度、背景干扰等因素。适当的光学滤波器和校正算法可以提高传感器的准确性和可靠性。干扰控制通过选择特定吸收波长和校正干扰成分,提高检测选择性和准确性。通过了解CO₂和CO的红外吸收光谱特性并采取相应的技术措施,可以开发出高灵敏度和高选择性的气体传感器用于环境监测和工业应用。
2024-05-28 14:18:57
410
原创 NDIR传感器
NDIR传感器通过利用气体对红外光特定波长的吸收特性,通过非色散的方式实现气体浓度的定量测量。在环境监测、工业控制、安全检验和医疗保健等领域有广泛的应用。其高选择性、稳定性和多用途性使其成为气体检测技术的重要组件。“量浓度” 是指物质在混合物中的数量比例,可以以各种方式表示。具体的,量浓度指的是一定体积的混合物中含有目标物质的量。它通常用于描述溶液中溶质的浓度。“量浓度” 是一个广泛定义,指包含目标物质数量的不同测量方式。
2024-05-28 11:07:16
548
原创 3σ准则(3 Sigma Rule)
3σ准则是一种统计学上的通用规则,用于识别和处理数据集中的异常值,以及监控过程的稳定性。虽然它在很多场景中非常有效,但在实际应用时应考虑数据的具体性质和分布,以确保准则的适用性和准确性。
2024-05-28 11:01:39
357
转载 stateMachine状态机框架
关于状态机的背景知识,在上一篇文章,已经有做介绍,还没有看的小伙伴可以先点击进去看一下,如果实在没有时间看,也不影响本篇文章的阅读,本篇文章主要讲一个状态机c语言实现框架,和基于该框架的一些实例。
2024-05-08 11:21:10
23
原创 MCU嵌入式初始化架构
这行代码定义了一个名为的类型,它是一个函数指针类型,指向无返回值、无参数的函数。这是一个宏定义,用于将指定的函数fn放入一个特定的编译器节(section)中。MR_USED和MR_SECTION可能是特定于编译器的宏,用于确保函数指针不会被优化掉,并将它们放在特定的内存节中。节名由和提供的level参数组成。这些宏定义简化了将函数分配到特定初始化阶段的过程。例如,会把函数fn放入名为的节中,通常用于板级初始化。这种机制允许开发者按预定的顺序(由level。
2024-04-27 18:08:01
42
原创 STM32F030C8T6 DMA
实质上这是存在风险的,当DMA传输数据完成,CPU介入开始拷贝DMA通道buf数据,如果此时串口继续有数据进来,DMA继续搬运数据到buf,就有可能将数据覆盖,因为DMA数据搬运是不受CPU控制的,即使你关闭了CPU中断。经过测试发现,该方法在发送数据量较小时可行,数据量大后,导致发送失败,而且不会触发DMA发送完成中断。关于这个问题,与具体应用场景有关,遵循的原则就是:只要发送fifo的数据量大于等于DMA发送buf的大小,就应该填满DMA发送buf,然后启动DMA传输,这样才能充分发挥会DMA性能。
2024-04-27 13:52:37
539
原创 主动对象与被动对象
因为它们有自己的控制流程,主动对象通常负责管理其内部状态的改变,并且能够在没有外部调用的情况下开始处理任务。被动对象没有自己的控制流程,它们不启动操作,而是对来自主动对象或外部源的请求作出反应。在设计嵌入式或者并发系统时,恰当地使用主动对象和被动对象可以帮助开发者有效地管理复杂度和系统的可预测行为,同时确保系统的响应性和性能。在软件工程和程序设计中,主动对象和被动对象是两种不同类型的对象,它们的主要区别在于它们的行为方式和系统资源的使用。,通常用来存储和管理数据,它们的行为总是由其他主动对象触发。
2024-04-04 14:27:48
59
原创 根据事务识别对象
在嵌入式软件开发中,根据事务识别对象涉及分析嵌入式系统的具体操作和行为,以确定哪些成分应该作为对象来处理。嵌入式系统通常涉及实时处理、与硬件直接交互以及执行特定的控制任务,这些系统的事务可能包括信号采集、设备状态更新、数据处理、通信任务或用户交互等。
2024-04-04 14:26:52
57
原创 嵌入式软件设计之对象识别策略
在嵌入式软件开发中,对象识别策略是指在设计阶段识别出应用程序中应当定义为对象的实体。这些策略帮助开发者识别出应该由对象来管理的软件的各个部分,特别是那些与嵌入式硬件紧密交互的部分。在执行对象识别策略时,开发者应考虑系统的实时性需求、资源限制(如内存和处理器速度)、以及与硬件的接口需求。此外,在嵌入式系统中,性能、可靠性和安全性尤为重要,这些因素也应在对象识别和系统设计过程中予以充分考虑。例如,配置数据、系统状态、缓存数据等。系统提供的服务,如I/O处理、数据采集、网络通信等,可以被封装为对象。
2024-04-04 14:22:50
41
原创 UML依赖关系详解
在统一建模语言(UML)中,依赖关系是一种重要的模型元素,用来表示一个事物(比如类、组件或包)依赖于另一个事物的情况。如果一个类的模板实例化依赖于另一个类,那么就表示该类模板依赖于另一个类。扩展关系是一种 UML 关系类型,表示一个用例(扩展用例)在某些条件下扩展另一个用例(基本用例)的功能。一个类(客户端)在其方法中使用另一个类(供应商)的实例。一个类的方法接受另一个类的实例作为参数。类成员变量是指向另一个类的对象指针。一个类的方法返回另一个类的实例。一个类负责创建另一个类的实例。)承诺实现另一个类(
2024-02-28 22:09:06
1341
原创 7.1 嵌入式软件设计资源管理-引言
标准速率单调分析(Standard Rate Monotonic Analysis, RMA)是实时系统中用于任务调度的一种经典算法。
2024-02-28 20:19:55
707
原创 7.4 Highest Locker Protocol/Pattern
Bruce Powel Douglass大师介绍-CSDN博客嵌入式软件开发从小工到专家-CSDN博客C嵌入式编程设计模式源码-CSDN博客最高锁定模式虽然可以减少优先级反转的情况,但并不能保证完全避免死锁。其他模式,如有序锁定模式(Ordered Locking Pattern)和同时锁定模式(Simultaneous Locking Pattern),则提供了避免死锁的其他方法。
2024-02-01 22:58:35
1092
原创 实时嵌入式:无限阻塞
在优先级反转的情况下,无限阻塞可能是结果之一。反之则未必成立,也就是说,发生无限优先级反转情况时必然伴随着无限阻塞,但发生无限阻塞的情况不一定是由无限优先级反转引起的。为了避免无限阻塞,开发者应在系统设计和开发过程中进行全面考虑,并采取有效措施来防止无限阻塞的发生。解决无限阻塞的问题通常需要对系统的同步策略、资源管理以及任务调度策略进行细致的设计与审查。无限阻塞是指任务在等待某些条件满足时,永远无法继续执行。在多任务或多线程操作系统中,无限阻塞是一个常见问题,可以由多种原因造成。
2024-02-01 20:22:33
322
原创 实时操作系统中的任务最长阻塞时间计算指南
在实时操作系统(RTOS)的环境下,确保任务能够在预定的时间内完成是至关重要的。如果包括阻塞时间在内的任务总执行时间超过截止时间,该任务的实时性可能无法得到保障。对于每个可能造成阻塞的低优先级任务,计算它们访问共享资源时临界区的最大可能执行时间。如果RTOS支持优先级继承,分析所有可能导致当前任务因优先级反转而受到间接阻塞的场景,并计算这些场景下共享资源导致的最长阻塞时间。每个任务可能遭受高优先级任务的直接阻塞。计算这段时间需要您评估所有可能阻塞当前任务的高优先级任务,并累加它们持有资源的最大时间。
2024-02-01 20:18:23
428
1
原创 实时嵌入式:优先级反转
当一个高优先级任务H被低优先级任务L阻塞时,任务L临时继承任务H的优先级,直到它释放那个资源。在操作系统的上下文中,优先级反转发生在低优先级任务持有一个高优先级任务需要的资源时,而且该低优先级任务因为某些原因被中等优先级任务抢占执行。当提到“无限优先级反转”时,其实指的是一种特殊情况的优先级反转,其中高优先级任务可能会被无限期地阻塞,因为它在等待一个低优先级任务释放资源,而该低优先级任务却始终无法得到执行机会(因为总是被其他中等优先级的任务抢占)。C嵌入式编程设计模式源码-CSDN博客。
2024-02-01 12:42:57
698
1
原创 6.3 内存池模式
也是一种内存管理策略,它在系统启动时预先分配一定数量的对象,并在需要时提供给客户端使用。这种模式既避免了动态分配的非确定性和碎片化,又提供了静态分配的灵活性,适用于需要在运行期间分配和回收大量相似对象的系统。模式是嵌入式系统中常用的内存管理技术,适用于需要频繁创建和销毁大量相似小型对象的场景。它可以是任何你想要的对象,但通常情况下,它们是简单、小型的类,由各种客户端使用。可参数化的泛型池管理器类用于创建特定类型的池化对象。每个池创建并管理其对象集,在需要时分配对象,并返回分配对象的引用或句柄给客户端。
2024-01-31 22:56:44
710
原创 6.2 静态内存分配模式
它的职责是通过创建和初始化系统的主要部分(最高级别的复合对象)来“启动”系统。复合对象(Composite Object)是指与其他对象之间存在组合关系的对象,其他对象可以是复合对象或原始对象。在实际应用中,系统可能包含更多的复合对象和原始对象。复合对象可以由其他复合对象组成,但每个通过组合关系拥有的对象只能属于一个复合对象。这个模式非常容易实现。在许多情况下,甚至不需要单独的初始化方法,可以直接使用每个复合对象的构造函数来完成对象的创建和初始化。它允许系统对象和复合对象通过组合包含复合对象和原始对象。
2024-01-31 00:10:33
948
原创 6.1 内存模式概述
在垃圾收集过程中,活动对象从一个段移动到另一个段,使得目标段中的对象相邻排列,从而在该段开始时形成一个连续的内存块。所有对象都在系统初始化期间分配,这意味着如果设计时能够知道内存负载,并且能够为最坏情况分配足够的内存,系统在初始化后的执行通常会比使用动态分配时更快,运行时执行通常也更可预测。这种模式适用于复杂到无法预测内存分配顺序的系统,且无法为所有可能的最坏情况分配足够内存的情况。这种模式通过限制内存分配的块大小,解决了内存碎片化问题,但可能导致内存使用效率降低。
2024-01-30 22:52:55
299
1
原创 5.10 动态优先级模式
正如上一节提到的,可调度性最重要的两个概念是紧急性和关键性,但操作系统通常只提供一个单一数值:优先级,来管理两者。静态优先级模式中,优先级是在设计时确定的,通常反映了紧急性和关键性的组合。动态优先级模式则根据任务的紧迫性,在运行时动态设定任务优先级。动态优先级模式将每个任务的优先级设定为一个与剩余时间相关的函数,越接近截止时间优先级升高。这种调度策略通常被称为最早截止期优先 (Earliest Deadline First,简称 EDF)。
2024-01-30 22:43:54
1143
1
原创 5.9 静态优先级模式(Static Priority Pattern)
为了保证资源的完整性,常见的一种实现方式是阻塞策略:当优先级较高的线程需要占用低优先级线程持有的资源时,高优先级线程会一直处于阻塞状态,直到资源释放。每个 Concrete Thread 会一直执行,直到它完成(它通过调用 Scheduler::return() 通知 Scheduler),被更高优先级的任务抢占(将被抢占的任务插入到 Ready Queue 中),或者在试图访问被锁定的 Shared Resource 时被阻塞(将被阻塞的任务插入到 Blocked Queue 中)。
2024-01-30 22:12:18
433
原创 5.3 实时操作系统中的同步机制
信号量的基本操作包括“等待”(通常是表明任务正在等待一个资源)和“发送”(通常是释放一个资源或表明任务完成了某项操作)。当特定的条件尚未满足时,任务可以选择在条件变量上等待。当条件满足时,另一个任务可以通知等待的任务,使其继续执行。当低优先级任务持有高优先级任务需要的资源时,它暂时“继承”更高优先级,以避免更高优先级的任务无限期等待。它们能够让任务在一个或多个事件发生时被唤醒或通知,是控制复杂任务同步时的有用工具。它们提供了一种同步机制,使得任务可以等待来自其他任务的数据,而无需持续查询资源状态。
2024-01-29 20:39:26
203
原创 9.1 嵌入式系统开发:安全性与可靠性相关基本概念
冗余安全性关注的是系统运行时不会引起危险或不可接受的风险。例如,在工业控制系统中,安全性的关注点可能是确保机器在任何时候都不会对操作人员或者环境造成伤害。
2024-01-27 21:35:27
814
原创 9. 嵌入式系统开发:安全性与可靠性设计模式---引言
这种模式通常由两个通道组成:一个监控通道和一个执行器通道。三通道模式(Triple Modular Redundancy, TMR)通常指的是一种冗余策略,是一种特定类型的同质冗余,其中三个独立的子系统完成同样的任务,然后通过多数表决系统(voting system)来决定哪个结果是正确的。异质冗余模式(Heterogeneous Redundancy)是一种系统设计策略,每个通道拥有独立的额设计和实现,用于提高系统的鲁棒性和可靠性,尤其是在高安全性和高可用性要求的领域,如航空航天、军事和核设施等。
2024-01-27 20:47:20
575
原创 Observer Pattern到Data(Msg) Bus Pattern的演变
观察者模式到数据总线模式的演变,反映了在更复杂系统中对于更为松耦合和更高级通信需求的回应。在嵌入式系统中,这种模式允许组件在无需了解系统其它部分的情况下发送和接收信息,这对于维护大型、复杂的嵌入式系统特别有用。观察者模式(Observer Pattern)是一种行为设计模式,允许对象在其状态发生变化时通知多个依赖于它的对象。与观察者模式相比,数据总线模式提供了更高层次的解耦和更灵活的通信机制。当主题的状态改变时,它会调用所有已注册观察者的回调方法(通常是update或notify之类的方法)。
2024-01-25 15:53:20
115
原创 Mutex优先级继承的优点
优先级反转是指一个高优先级任务被一个低优先级任务间接阻塞了,因为这个低优先级任务持有高优先级任务所需的资源。:在没有优先级继承机制时,为避免优先级反转,系统可能会频繁地进行任务调度。:优先级继承允许低优先级任务临时“继承”阻塞它的高优先级任务的优先级,这样可以减少高优先级任务因低优先级任务持有互斥量而被阻塞的时间。:通过确保高优先级任务能够获得所需资源,优先级继承可以减少高优先级任务的等待时间,提高其响应性。:优先级继承有助于保持系统的优先级顺序,确保高优先级任务首先执行,从而维护了预期的实时行为。
2024-01-17 00:09:08
41
原创 RTOS 二值信号量和互斥量
二值信号量和互斥量都是重要的同步机制,在 FreeRTOS 中都有广泛的应用。开发者应根据具体需求选择合适的同步机制,并注意正确使用这些机制,以保证系统的安全性和可靠性。FreeRTOS 中的二值信号量(Binary Semaphore)和互斥量(Mutex)都是用于任务之间或中断与任务之间的同步。
2024-01-17 00:06:13
117
原创 2.5 设计FMEA第五步:风险分析
DFMEA风险分析的目的是:通过评估严重度(S)、频度(O)和探测度(D)来估计风险,进而对采取的措施进行优先级排序(AP)。
2024-01-03 23:30:59
996
1
原创 2.4 设计FMEA步骤四:失效分析
设计失效分析的目的是识别导致产品失效的原因、模式及其影响,并揭示它们之间的相互关系,作为后续风险评估的基础。设计失效分析主要目标是:失效模式来源于功能图2.4-2 失效定义潜在失效模式可能包含但不限于以下几种:失效模式类型:系统或子系统的失效模式描述的是功能损失或退化。如:方向盘打向左而车辆却向右转动,这是一个非预期功能的展现。在必要时,应包括整车的操作条件,如车辆启动或熄火时失去转向助力。组件/零件的失效模式应由名词和失效描述组成,例如:“密封件扭曲”。对失效的描述一定要清楚,以便阅读人员能看懂,这一点很
2024-01-02 23:34:17
289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅