密码学

1

一文学会密码学应用

11 分钟

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网页版 快速验证:

阅读更多