Skip to content

FDP-Security 安全协议

FDP-Security是FDP协议族的可选安全扩展,提供传输层无关的端对端安全通信能力。

为什么需要安全协议?

常见误区

误区问题
"用了TLS就安全"TLS只保护传输层,不支持蓝牙等非TCP传输
"MQTT ACL够用"ACL只控制主题访问,不验证消息真实性
"加密了就不会被篡改"大错! 没有认证的加密可被精确修改

FDP-Security解决的问题

  1. 身份认证 - 如何确认消息真的来自声称的发送者?
  2. 权限验证 - 如何验证发送者有权执行该操作?
  3. 消息保护 - 如何防止窃听和篡改?

设计目标

  • 传输层无关 - 支持MQTT、蓝牙GATT、WiFi Direct等
  • 极小开销 - 通信阶段仅28字节/消息(适合BLE)
  • 离线运行 - 完全支持无网络环境
  • 前向安全 - 历史会话不因私钥泄露而暴露

架构概览

核心概念

身份与权限解耦

FDP-Security将身份认证和权限管理分离:

组件职责有效期
Credential证明"你是谁"永久有效
权限表决定"你能做什么"存储在设备端,可随时更新

优势

  • 撤销权限只需从设备权限表删除uid,无需更换Credential
  • 支持完全离线运行(无需联网验证权限)

会话协商模式

借鉴HTTPS的思路:

  1. 握手阶段(可以大):交换身份凭证,协商会话密钥
  2. 通信阶段(必须小):使用会话密钥加密+认证

算法选择

算法用途选择原因
Ed25519数字签名32字节公钥,高效安全
X25519ECDH密钥交换前向安全
ChaCha20-Poly1305AEAD加密适合无硬件加速的嵌入式设备
HKDF-SHA256密钥派生从共享密钥派生会话密钥
CBOR二进制序列化最小化消息体积

性能对比

蓝牙场景

BLE默认MTU = 23字节

方案消息大小BLE包数
JSON + HMAC~190字节10包
JWT签名542字节28包
FDP-Security28字节2包

开销对比

方案每消息开销加密认证传输无关离线
JWT签名542字节
Ed25519签名86字节
mTLS0字节
FDP-Security28字节

文档导航

文档内容
威胁模型安全挑战分析与设计思路
简单鉴权基于secret的极简鉴权,适用于TLS环境
HMAC签名鉴权基于HMAC签名的鉴权方案,适用于任意传输
端对端安全协议完整的端对端加密方案

实现库推荐

平台推荐库
Pythoncryptography, cbor2
C/嵌入式libsodium(强烈推荐), mbedtls
JavaScript@noble/ed25519, @noble/hashes
Gogolang.org/x/crypto

物联网设备通信协议文档