01 / 公钥思想如何出现
Diffie 与 Hellman 在 1976 年公开提出公钥密码与密钥协商思想,让没有预共享秘密的双方可以建立共享秘密。RSA 在 1977 年提出,利用大整数上的计算困难性,为公钥加密与数字签名提供另一条路线。数学原语必须配合安全编码:裸 RSA 不等于安全 RSA 加密。
本页 RSA 加密采用 OAEP/SHA-256,签名采用 PSS/SHA-256、32 字节盐。OAEP 仅适合短消息:最大长度为 k - 2·hLen - 2;2048 位 RSA/SHA-256 只有 190 字节。大文件应使用随机 DEK 对称加密,再由接收方公钥保护 DEK。
生产密钥应绑定单一用途与权限。本页为实验可让同一 RSA 材料执行不同操作,不应照搬为生产策略。
02 / 椭圆曲线、协商与签名
椭圆曲线密码在 1980 年代独立提出,用不同的群结构实现公钥运算。ECDH 用曲线建立共享秘密,ECDSA 用于签名;曲线相同并不表示用途相同。Curve25519 在 2006 年提出,RFC 7748 于 2016 年规范 X25519。Ed25519 使用相关数学背景,但按 RFC 8032 执行签名,不是把 X25519 密钥直接当作 SSH 登录签名密钥。
本页 X25519/ECDH 输出经过 HKDF-SHA256 的 32 字节派生密钥,不直接把共享点当 AES 密钥。双方须使用一致的 salt/info;真实协议还需绑定双方身份、公钥、方向和握手记录。匿名协商不能防止中间人攻击,也不能仅凭“结果相同”证明对端身份。
ECDSA 输出采用 WebCrypto 的定长 r || s(IEEE P1363),不是 ASN.1 DER。Ed25519 输出 64 字节签名。不得将同一字节串的编码混用。
03 / SM2 与格式边界
SM2 是国密椭圆曲线公钥体系,GB/T 32918 系列分别规定总则、签名、密钥交换、公钥加密及参数。签名中的 ZA 将用户标识、曲线参数与公钥绑定;本页默认标识为 1234567812345678,互通双方必须一致。
本页 SM2 签名为 DER,密文采用未压缩 C1 点(含 04)与可选 C1C3C2 / C1C2C3 排列,不等于 ASN.1 密文封装。SM2 曲线 OID 为 1.2.156.10197.1.301;能导出 PEM 不代表目标系统支持该曲线。本页不把普通 ECDH 冒充完整 SM2 密钥交换协议。
SPKI 描述公钥与算法,PKCS#8 描述私钥与算法;PEM 是 DER 的文本装甲,JWK 是 JSON 表达,OpenSSH 是 SSH 场景格式。格式不改变用途、信任链或授权。PKCS#1 是 RSA 专用兼容格式。
加密 PKCS#8 采用 PBES2 / PBKDF2-HMAC-SHA256(210000 次、16 字节盐)/ AES-256-CBC;OpenSSH 私钥采用 bcrypt KDF(16 轮)/ AES-256-CTR。它们是各自格式的口令保护,并非 AEAD 数据加密;保护强度仍取决于口令熵与离线攻击预算。JWK、Hex、PKCS#1 私钥只提供明确确认后的明文导出。导入支持 PKCS#8/SPKI PEM、RSA PKCS#1 私钥及 OpenSSH 私钥;不声称接受任意 JWK、SSH 公钥或原始 Hex。
从密码原语到 KMS:算法只是生命周期的一环
KMS 需要把生成、用途授权、版本轮换、吊销、备份恢复、销毁与审计连成可验证的生命周期。数据密钥 DEK 负责加密数据,密钥加密密钥 KEK 负责保护 DEK;信封加密让主密钥留在受控边界,而非随业务数据迁移。密钥标识、版本、算法、用途和授权策略必须绑定,不能只存一段 Hex。
不可导出密钥、HSM 隔离、双人控制、最小权限和审计证据不能由一个浏览器页面替代。本页为互通实验而生成可导出密钥;私钥不自动落盘,保护口令只用于本地导出。清除会丢弃 Worker 和界面中的引用,但 JavaScript 垃圾回收并不承诺物理内存的可证明擦除。生成私钥、密码和生产主密钥应位于符合组织要求的受控环境。