01 / 从 DES 到 AES
DES 源于 IBM 的 Lucifer 设计,经评审后在 1977 年成为美国联邦标准。其 64 位分组和 56 位有效密钥在当时具有工程意义,但后来无法抵御可负担的穷举。3DES 通过多次 DES 运算延长遗留系统寿命,却仍受 64 位分组与效率约束。DES/3DES 只用于旧数据互通,不能因为能往返就认为安全。
NIST 于 1997 年启动 AES 公开竞赛,Rijndael 在 2000 年被选中,2001 年成为 FIPS 197。AES 使用 128 位分组,密钥可为 128、192 或 256 位;密钥长度与分组长度是不同的概念。这里的 AES-256-GCM 是算法、密钥长度与工作模式的组合,不是另一种分组密码。
02 / 模式决定安全契约
ECB 对相同明文分组产生相同密文,会泄露结构。CBC 依赖正确的随机 IV 与填充,却不自行认证;填充成功也不能证明密文未被修改。生产协议必须先验认证,避免填充预言机与可篡改性。
GCM 结合计数器模式与认证,将密文、AAD 与标签绑定。同一密钥下重用 nonce 是严重错误,既可能暴露明文关系,也会削弱标签安全。随机 96 位 nonce 仍有碰撞概率,系统需要按密钥管理消息数量、轮换与 nonce 分配,不能无限使用。
AAD 参与认证但不加密,适合绑定租户、对象、版本和协议头。本页 GCM 标签为 128 位,原始结果为 ciphertext || tag;解密必须带回相同 AAD。
03 / SM4 与信封参数
SM4 最早用于无线局域网安全体系,后来在 GB/T 32907-2016 中标准化。它是 128 位分组、128 位密钥的分组密码;SM4-CBC、SM4-ECB 的安全限制同样由模式决定,国密算法名称不会自动补上消息认证。
密钥不是口令字符串。AES 的 32 字节密钥需要可靠生成或通过适当 KDF 得到,不能把用户密码补零后直接充当密钥。本页兼容模式采用 PKCS#7,并严格检查填充;DES 的 8 字节表示中包含奇偶校验位,不能宣称 64 位有效安全强度。
参数封装保存算法、模式、IV、AAD、填充与密文,不保存密钥。它是本页的互通 JSON,不是行业通用 JWE/CMS,也不为未认证模式增加完整性。
实现边界:AES 使用 WebCrypto,SM4 使用 sm-crypto;DES/3DES 仅通过已停止维护的 CryptoJS 4.2.0 提供兼容实验,不作为生产算法选型建议。
从密码原语到 KMS:算法只是生命周期的一环
KMS 需要把生成、用途授权、版本轮换、吊销、备份恢复、销毁与审计连成可验证的生命周期。数据密钥 DEK 负责加密数据,密钥加密密钥 KEK 负责保护 DEK;信封加密让主密钥留在受控边界,而非随业务数据迁移。密钥标识、版本、算法、用途和授权策略必须绑定,不能只存一段 Hex。
不可导出密钥、HSM 隔离、双人控制、最小权限和审计证据不能由一个浏览器页面替代。本页为互通实验而生成可导出密钥;私钥不自动落盘,保护口令只用于本地导出。清除会丢弃 Worker 和界面中的引用,但 JavaScript 垃圾回收并不承诺物理内存的可证明擦除。生成私钥、密码和生产主密钥应位于符合组织要求的受控环境。