<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ChatCoding的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ChatCoding</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ChatCoding]]></copyright><item><title><![CDATA[对称密钥认证：主机和设备共享同一把密钥]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/162644010</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/162644010</guid><author>ChatCoding</author><pubDate>Tue, 07 Jul 2026 00:06:44 +0800</pubDate><description><![CDATA[即使攻击者破解了耗材 A，拿到 Key_A，也不能直接得到 Key_B、Key_C，更不能反推出 Root_Key。例如，主机发送一个随机 Challenge，设备使用内部密钥计算 MAC，主机使用相同密钥计算期望 MAC。对称密钥认证，是指主机和设备共享同一类密钥，通过相同算法计算认证结果，从而判断对方是否拥有正确密钥。使用一个父密钥 Root_Key，再结合设备唯一信息，派生出每台设备自己的密钥。因为设备端如果保存验证密钥，一旦设备被破解，攻击者可能伪造升级包。]]></description><category></category></item><item><title><![CDATA[MAC 消息认证码：同时验证来源和完整性]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/162643627</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/162643627</guid><author>ChatCoding</author><pubDate>Tue, 07 Jul 2026 00:02:47 +0800</pubDate><description><![CDATA[如果 Challenge 固定、重复、可预测，或者主机允许验证旧 Challenge，那么攻击者截取到一组 Challenge + Response 后，就可以进行重放攻击。如果密钥直接明文放在 MCU 普通 Flash 中，一旦攻击者通过调试口、烧录口、固件读取或漏洞提取密钥，就可以伪造合法 MAC。因此，在 MCU 项目中，如果软件实现 MAC，应优先使用成熟密码库中的 HMAC-SHA256，而不是自行设计变体。MAC 有密钥参与，攻击者即使修改消息，也无法在不知道密钥的情况下生成正确 MAC。]]></description><category></category></item><item><title><![CDATA[哈希算法：密码学的基础构件]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/162643530</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/162643530</guid><author>ChatCoding</author><pubDate>Mon, 06 Jul 2026 23:22:33 +0800</pubDate><description><![CDATA[因此，在安全设计中，应选择当前仍被认为安全的哈希算法，例如 SHA-256，而不是 MD5、SHA-1 这类已经不适合作为安全用途的算法。如果攻击者修改数据后，重新计算一个新的 Hash，并把新 Hash 一起发给设备，那么接收方仍然可能被骗。如果需要抵抗恶意修改，单独 CRC 不够，应至少考虑 Hash，并进一步结合 MAC 或数字签名。如果只有 Hash，没有签名，攻击者修改固件后也可以重新计算 Hash。但是，如果只校验 Hash，而不验证签名，仍然不能证明升级包来自官方。]]></description><category></category></item><item><title><![CDATA[身份识别、身份认证与授权的区别]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/162643441</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/162643441</guid><author>ChatCoding</author><pubDate>Mon, 06 Jul 2026 23:11:34 +0800</pubDate><description><![CDATA[例如，只检查 SN、设备 ID、型号或批次号，就认为设备可信，这在工程上是不安全的。真正可靠的做法，是结合挑战响应、MAC、数字签名、安全芯片、证书链和权限控制，建立从身份声明到身份证明，再到权限约束的完整闭环。因此，SN、设备 ID、型号、批次号、版本号，都只能作为身份声明或索引信息，不能单独作为安全认证依据。在工程实现中，SN、型号、批次号、设备 ID 只能用于识别和索引，不能单独作为可信认证依据。身份识别不是安全，身份认证才开始建立信任，授权则决定信任之后的权限边界。]]></description><category></category></item><item><title><![CDATA[嵌入式安全三要素：认证、完整性与保密性]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/162643358</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/162643358</guid><author>ChatCoding</author><pubDate>Mon, 06 Jul 2026 23:01:51 +0800</pubDate><description><![CDATA[如果攻击者伪造了一个传感器，并且主机没有认证机制，那么主机可能会直接和这个假传感器通信。例如，主机和设备内部都保存同一个密钥。即使后续通信使用了加密，也可能只是和攻击者建立了一条**“加密但不可信”**的通道。例如，对固件计算 SHA-256 摘要，只要固件内容发生任何变化，摘要结果就会不同。如果没有完整性保护，攻击者可能修改固件、配置或通信命令，从而让设备执行错误逻辑。所以，在嵌入式安全中，通常应该先考虑身份认证和完整性，再考虑保密性。这些数据内容本身可能并不敏感，即使被别人看到，风险也不大。]]></description><category></category></item><item><title><![CDATA[为什么嵌入式设备越来越需要安全设计]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/162643279</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/162643279</guid><author>ChatCoding</author><pubDate>Mon, 06 Jul 2026 22:52:14 +0800</pubDate><description><![CDATA[随着设备逐步接入网络、云平台、手机 App、产线系统和第三方配件，嵌入式系统已经从“单板软件”变成“设备生态系统”的一部分。攻击者不一定需要拆机。但是，当设备接入网络、云平台、手机 App、产线系统和第三方配件之后，风险边界发生了明显变化。如果系统只检查设备 ID，而没有真正的身份认证机制，那么设备 ID 一旦被复制，就可能被仿冒。在医疗、工业、打印、检测仪器等场景中，主机经常需要识别耗材、探头、模块或传感器是否合法。，工程团队通常通过看门狗、异常恢复、通信校验、滤波、冗余检测和可靠性测试来解决。]]></description><category></category></item><item><title><![CDATA[嵌入式实时操作系统任务调度分析]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/161137189</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/161137189</guid><author>ChatCoding</author><pubDate>Sat, 16 May 2026 11:26:18 +0800</pubDate><description><![CDATA[在嵌入式实时操作系统中，和：速率单调调度算法：速率单调分析方法。]]></description><category></category></item><item><title><![CDATA[BC28 AT指令]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/147857612</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/147857612</guid><author>ChatCoding</author><pubDate>Sat, 10 May 2025 19:12:17 +0800</pubDate><description><![CDATA[【代码】BC28 AT指令。]]></description><category></category></item><item><title><![CDATA[MCU订阅-发布模式]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/142714327</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/142714327</guid><author>ChatCoding</author><pubDate>Sat, 05 Oct 2024 16:07:01 +0800</pubDate><description><![CDATA[McnHub是 uMCN 的核心结构，负责管理主题的发布和订阅。McnNode代表订阅者，管理订阅的主题和数据更新的回调函数。McnList用于维护所有消息中心的链表。uMCN通过这些结构实现了一个高效的发布-订阅系统，保证了发布者和订阅者之间的松耦合和数据的一致性。]]></description><category></category></item><item><title><![CDATA[计算入射光强度和吸收系数]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/142236225</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/142236225</guid><author>ChatCoding</author><pubDate>Sat, 14 Sep 2024 01:14:12 +0800</pubDate><description><![CDATA[1. 比尔-朗伯定律基础
根据比尔-朗伯定律，光在穿过气体时，出射光强 III 随气体浓度 xxx 按指数衰减：
I=I0e−b⋅x 
I = I_0 e^{-b \cdot x}
I=I0​e−b⋅x
其中：

III 是出射光强度；
I0I_0I0​ 是入射光强度（初始光强度）；
bbb 是吸收系数；
xxx 是气体浓度。

比尔-朗伯定律，它描述了光穿过物质时的衰减：
FA=1−(II0)
FA = 1 - \left( \frac{I}{I_0} \right)
FA=1−(I0​I​)
其中：

]]></description><category></category></item><item><title><![CDATA[CO₂和CO的红外吸收光谱]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/139265384</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/139265384</guid><author>ChatCoding</author><pubDate>Tue, 28 May 2024 14:18:57 +0800</pubDate><description><![CDATA[CO₂的主要红外吸收波长CO的主要红外吸收波长应用设计NDIR传感器设计需结合吸收峰位置、吸收强度、背景干扰等因素。适当的光学滤波器和校正算法可以提高传感器的准确性和可靠性。干扰控制通过选择特定吸收波长和校正干扰成分，提高检测选择性和准确性。通过了解CO₂和CO的红外吸收光谱特性并采取相应的技术措施，可以开发出高灵敏度和高选择性的气体传感器用于环境监测和工业应用。]]></description><category></category></item><item><title><![CDATA[NDIR传感器]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/139260956</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/139260956</guid><author>ChatCoding</author><pubDate>Tue, 28 May 2024 11:07:16 +0800</pubDate><description><![CDATA[NDIR传感器通过利用气体对红外光特定波长的吸收特性，通过非色散的方式实现气体浓度的定量测量。在环境监测、工业控制、安全检验和医疗保健等领域有广泛的应用。其高选择性、稳定性和多用途性使其成为气体检测技术的重要组件。“量浓度” 是指物质在混合物中的数量比例，可以以各种方式表示。具体的，量浓度指的是一定体积的混合物中含有目标物质的量。它通常用于描述溶液中溶质的浓度。“量浓度” 是一个广泛定义，指包含目标物质数量的不同测量方式。]]></description><category></category></item><item><title><![CDATA[3σ准则（3 Sigma Rule）]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/139260775</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/139260775</guid><author>ChatCoding</author><pubDate>Tue, 28 May 2024 11:01:39 +0800</pubDate><description><![CDATA[3σ准则是一种统计学上的通用规则，用于识别和处理数据集中的异常值，以及监控过程的稳定性。虽然它在很多场景中非常有效，但在实际应用时应考虑数据的具体性质和分布，以确保准则的适用性和准确性。]]></description><category></category></item><item><title><![CDATA[stateMachine状态机框架]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/138564273</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/138564273</guid><author>ChatCoding</author><pubDate>Wed, 08 May 2024 11:21:10 +0800</pubDate><description><![CDATA[关于状态机的背景知识，在上一篇文章，已经有做介绍，还没有看的小伙伴可以先点击进去看一下，如果实在没有时间看，也不影响本篇文章的阅读，本篇文章主要讲一个状态机c语言实现框架，和基于该框架的一些实例。]]></description><category></category></item><item><title><![CDATA[MCU嵌入式初始化架构]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/138254589</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/138254589</guid><author>ChatCoding</author><pubDate>Sat, 27 Apr 2024 18:08:01 +0800</pubDate><description><![CDATA[这行代码定义了一个名为的类型，它是一个函数指针类型，指向无返回值、无参数的函数。这是一个宏定义，用于将指定的函数fn放入一个特定的编译器节(section)中。MR_USED和MR_SECTION可能是特定于编译器的宏，用于确保函数指针不会被优化掉，并将它们放在特定的内存节中。节名由和提供的level参数组成。这些宏定义简化了将函数分配到特定初始化阶段的过程。例如，会把函数fn放入名为的节中，通常用于板级初始化。这种机制允许开发者按预定的顺序（由level。]]></description><category></category></item><item><title><![CDATA[STM32F030C8T6 DMA]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/138245633</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/138245633</guid><author>ChatCoding</author><pubDate>Sat, 27 Apr 2024 13:52:37 +0800</pubDate><description><![CDATA[实质上这是存在风险的，当DMA传输数据完成，CPU介入开始拷贝DMA通道buf数据，如果此时串口继续有数据进来，DMA继续搬运数据到buf，就有可能将数据覆盖，因为DMA数据搬运是不受CPU控制的，即使你关闭了CPU中断。经过测试发现，该方法在发送数据量较小时可行，数据量大后，导致发送失败，而且不会触发DMA发送完成中断。关于这个问题，与具体应用场景有关，遵循的原则就是：只要发送fifo的数据量大于等于DMA发送buf的大小，就应该填满DMA发送buf，然后启动DMA传输，这样才能充分发挥会DMA性能。]]></description><category></category></item><item><title><![CDATA[主动对象与被动对象]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/137374475</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/137374475</guid><author>ChatCoding</author><pubDate>Thu, 04 Apr 2024 14:27:48 +0800</pubDate><description><![CDATA[因为它们有自己的控制流程，主动对象通常负责管理其内部状态的改变，并且能够在没有外部调用的情况下开始处理任务。被动对象没有自己的控制流程，它们不启动操作，而是对来自主动对象或外部源的请求作出反应。在设计嵌入式或者并发系统时，恰当地使用主动对象和被动对象可以帮助开发者有效地管理复杂度和系统的可预测行为，同时确保系统的响应性和性能。在软件工程和程序设计中，主动对象和被动对象是两种不同类型的对象，它们的主要区别在于它们的行为方式和系统资源的使用。，通常用来存储和管理数据，它们的行为总是由其他主动对象触发。]]></description><category></category></item><item><title><![CDATA[根据事务识别对象]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/137374469</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/137374469</guid><author>ChatCoding</author><pubDate>Thu, 04 Apr 2024 14:26:52 +0800</pubDate><description><![CDATA[在嵌入式软件开发中，根据事务识别对象涉及分析嵌入式系统的具体操作和行为，以确定哪些成分应该作为对象来处理。嵌入式系统通常涉及实时处理、与硬件直接交互以及执行特定的控制任务，这些系统的事务可能包括信号采集、设备状态更新、数据处理、通信任务或用户交互等。]]></description><category></category></item><item><title><![CDATA[根据关键概念识别对象]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/137374453</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/137374453</guid><author>ChatCoding</author><pubDate>Thu, 04 Apr 2024 14:25:48 +0800</pubDate><description><![CDATA[为对象之间的交互定义清晰的接口。这是嵌入式系统中尤为重要的，因为硬件的限制和实时性要求更高的可靠通信。]]></description><category></category></item><item><title><![CDATA[嵌入式软件设计之对象识别策略]]></title><link>https://blog.youkuaiyun.com/ChatCoding/article/details/137374421</link><guid>https://blog.youkuaiyun.com/ChatCoding/article/details/137374421</guid><author>ChatCoding</author><pubDate>Thu, 04 Apr 2024 14:22:50 +0800</pubDate><description><![CDATA[在嵌入式软件开发中，对象识别策略是指在设计阶段识别出应用程序中应当定义为对象的实体。这些策略帮助开发者识别出应该由对象来管理的软件的各个部分，特别是那些与嵌入式硬件紧密交互的部分。在执行对象识别策略时，开发者应考虑系统的实时性需求、资源限制（如内存和处理器速度）、以及与硬件的接口需求。此外，在嵌入式系统中，性能、可靠性和安全性尤为重要，这些因素也应在对象识别和系统设计过程中予以充分考虑。例如，配置数据、系统状态、缓存数据等。系统提供的服务，如I/O处理、数据采集、网络通信等，可以被封装为对象。]]></description><category></category></item></channel></rss>