一文学会密码学应用
IoT 密码学的"够用就好"
目标:会应用、能理解并能设计方案。不讲复杂数学,只讲必要概念、参数与避坑清单。
必要概念
- 机密性(Confidentiality):防止被看懂(加密)
- 完整性(Integrity):防止被悄悄改(认证)
- 身份不可否认性(Identity):谁在对话(签名/证书)
- 对称密钥(Symmetric):同一把密钥加解密(AES/ChaCha20-Poly1305)
- 非对称密钥(Asymmetric):私钥/公钥(ECDSA/Ed25519、ECDH/X25519)
- AEAD(Authenticated Encryption with Associated Data):一次完成加密+认证(GCM/CCM、ChaCha20-Poly1305)
- MAC(Message Authentication Code):只做认证(HMAC/AES-CMAC),不加密
- KDF(Key Derivation Function):把"原始秘密"(如 ECDH/X25519 共享秘密)变成"可用密钥"
- 密钥格式:SPKI(公钥)/PKCS8(私钥)容器,DER(二进制)/PEM(文本)编码
一张图
[A私钥 + B公钥] --(ECDH/X25519)--> [共享秘密S]
[S] --(HKDF salt, info, L)--> [对称密钥K]
[消息M, AAD] --(AEAD:K, nonce)--> [C || tag]
[M] --(HMAC/CMAC:K)--> [tag]
[M] --(签名:私钥)--> [signature]
- AEAD 输出总是"密文+标签",解密前先验标签
- MAC/签名不加密数据
- 共享秘密不能直接当密钥,必须 KDF
参数小抄(长度与格式)
- Nonce/IV:GCM=12字节;ChaCha20-Poly1305=12字节;CCM=13字节(常用);CBC=16字节
- Key:AES=16/24/32字节;ChaCha20-Poly1305=32字节
- 签名编码:ECDSA=DER 或 RAW(r||s 64字节);Ed25519=RAW
- 公钥/私钥容器:SPKI(公钥)/PKCS8(私钥),DER 字节可转 PEM 文本
何时用什么
- 受限设备/无线协议:AES-CCM(硬件加速) 或 ChaCha20-Poly1305(软实现友好)
- Web/通用:AES-GCM(Galois/Counter Mode) 或 ChaCha20-Poly1305
- 只要完整性:HMAC-SHA256(Hash-based Message Authentication Code) 或 AES-CMAC
- 固件/长消息签名:Ed25519 或 ECDSA-P256
- 会话建立:ECDH-P256 或 X25519 → HKDF → AEAD
攻防小卡片
- 绝不在同一密钥下复用 AEAD nonce
- CBC 本身不认证,必须"加 MAC",推荐改用 AEAD
- 密钥交换一定要带签名,防止中间人攻击(MITM)
快速上手
在 CryptoBox网页版 快速验证:
阅读更多