diff --git a/06-NetworkIot/README.md b/06-NetworkIot/README.md index f10e6d3..d67d8cd 100644 --- a/06-NetworkIot/README.md +++ b/06-NetworkIot/README.md @@ -54,6 +54,8 @@ recv(); - QoS 等级、主题结构、客户端连接 - 常见平台支持:EMQX、OneNet、阿里云 IoT +--- + ### HTTP / HTTPS #### HTTP 请求方法(Methods) @@ -67,8 +69,6 @@ recv(); * **TRACE**:诊断请求响应路径,回显请求报文。 * **CONNECT**:用于建立隧道(如 HTTPS 代理)。 ---- - #### HTTP 状态码 | 分类 | 范围 | 含义 | @@ -94,15 +94,11 @@ recv(); * 500 Internal Server Error * 502 Bad Gateway ---- - #### HTTP 长连接与短连接 * **HTTP/1.0** 默认使用短连接(每次请求后断开) * **HTTP/1.1** 默认使用长连接(`Connection: keep-alive`) ---- - #### HTTP 请求报文格式 ``` @@ -126,8 +122,6 @@ Date: Sun, 14 Jun 2025 10:00:00 GMT ... ``` ---- - ### HTTPS 通信过程 HTTPS = HTTP + TLS/SSL 加密 @@ -140,8 +134,6 @@ HTTPS = HTTP + TLS/SSL 加密 4. 客户端生成随机对称密钥(用公钥加密传给服务器) 5. 双方使用对称密钥开始加密通信 ---- - #### 对称加密(加解密使用同一密钥) * **DES**(56 位) @@ -158,6 +150,80 @@ HTTPS = HTTP + TLS/SSL 加密 * **SHA-1**(160 位) * **SHA-256**(256 位) +--- + +### 🔹 安全通信实践 +1. TLS 握手优化 +- 预共享密钥(PSK)模式: +减少证书验证开销,适合资源受限设备。 +```c +// mbed TLS配置PSK +mbedtls_ssl_config_set_psk(&ssl_conf, + psk, // 预共享密钥 + psk_length, + identity, // 身份标识 + strlen(identity)); +``` +2. 证书管理方案 +- 证书存储: + - 根证书存储在安全 Flash 区域。 + - 设备证书通过安全通道动态更新。 +- 证书验证: +```c +// 验证服务器证书链 +int verify_cert(void *data, mbedtls_x509_crt *crt, int depth, uint32_t *flags) { + // 检查证书有效期 + if (mbedtls_x509_crt_check_validity(crt, time(NULL)) != 0) { + return MBEDTLS_ERR_X509_CERT_VERIFY_FAILED; + } + + // 检查证书颁发者 + if (!mbedtls_x509_crt_verify(crt, trusted_certs, NULL, NULL, flags, NULL, NULL)) { + return MBEDTLS_ERR_X509_CERT_VERIFY_FAILED; + } + + return 0; +} +``` + + +--- + +### 🔹 安全测试 + +1. 固件逆向分析 +- 工具链: + - Ghidra:反编译二进制文件,生成 C 语言伪代码。 + - IDA Pro:专业逆向工程工具,支持 ARM 架构。 +- 防御措施: + - 固件加密:使用 AES-256 加密整个固件。 + - 反调试机制:检测调试接口是否被连接。 +```c +// 检测SWD/JTAG调试接口 +bool IsDebuggerAttached(void) { + // 读取DBGMCU_IDCODE寄存器 + uint32_t idcode = DBGMCU->IDCODE; + // 检查调试使能位 + return ((DBGMCU->CR & (DBGMCU_CR_DBG_SLEEP | DBGMCU_CR_DBG_STOP | DBGMCU_CR_DBG_STANDBY)) != 0); +} +``` + +2. 侧信道攻击防护 +- 电源分析攻击: +通过测量设备功耗分析加密密钥。 +- 防护措施: +常量时间实现:避免条件分支依赖密钥值。 +```c +// 常量时间比较(防止时序攻击) +bool ConstantTimeCompare(const uint8_t *a, const uint8_t *b, size_t len) { + uint8_t result = 0; + for (size_t i = 0; i < len; i++) { + result |= a[i] ^ b[i]; + } + return (result == 0); +} +``` + ### CoAP / LwM2M - 适合低功耗终端的简化协议,UDP 传输,可压缩 - 用于 NB-IoT、LwIP 等网络栈中 @@ -166,7 +232,7 @@ HTTPS = HTTP + TLS/SSL 加密 ## TCP/IP 协议栈基础与嵌入式实现 -### TCP/IP 协议栈分层结构(四层模型) +#### TCP/IP 协议栈分层结构(四层模型) | 层级 | 协议/组件 | 功能说明 | |----------------|----------------------------|----------------------------------| @@ -175,9 +241,8 @@ HTTPS = HTTP + TLS/SSL 加密 | 网络层 | IP, ICMP, ARP | 地址与路由 | | 链路层 | Ethernet, Wi-Fi, BLE | 硬件通信和数据帧传输 | ---- -### TCP 与 UDP 区别 +#### TCP 与 UDP 区别 | 特性 | TCP | UDP | |----------------|----------------------------|----------------------------| @@ -186,9 +251,8 @@ HTTPS = HTTP + TLS/SSL 加密 | 适用场景 | Web、文件传输、SSH | 视频流、语音、广播 | | 开销 | 较大(握手、窗口等) | 较小(直接发送) | ---- -### 嵌入式 TCP/IP 协议栈组件 +#### 嵌入式 TCP/IP 协议栈组件 - **LwIP(Lightweight IP)** - 开源轻量级 TCP/IP 协议栈 @@ -200,9 +264,8 @@ HTTPS = HTTP + TLS/SSL 加密 - 与 FreeRTOS 配套的 TCP/IP 协议栈 - **Nut/Net、CycloneTCP**:其他常用协议栈 ---- -### 嵌入式 TCP/IP 通信流程(以 LwIP 为例) +#### 嵌入式 TCP/IP 通信流程(以 LwIP 为例) 1. **初始化网络接口**:配置 IP、MAC、网关 2. **创建 socket 套接字**:TCP 或 UDP @@ -210,9 +273,9 @@ HTTPS = HTTP + TLS/SSL 加密 4. **接收/发送数据**:`recv()`, `send()` 5. **关闭连接**:`close()` ---- -### 常用 API 示例(LwIP BSD socket) + +#### 常用 API 示例(LwIP BSD socket) ```c // TCP 客户端示例 @@ -228,17 +291,13 @@ recv(sock, buffer, sizeof(buffer), 0); close(sock); ``` ---- - -### DHCP / DNS / ICMP 说明 +#### DHCP / DNS / ICMP 说明 * **DHCP**:动态分配 IP(LwIP 可配置) * **DNS**:域名解析,调用 `gethostbyname()` 等 * **ICMP**:如 `ping` 实现通信测试 ---- - -### 推荐阅读资料 +#### 推荐阅读资料 * [LwIP 官方文档](https://savannah.nongnu.org/projects/lwip/) * [FreeRTOS+TCP 文档](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html)