签发(Issuance)是可信主体把身份、权限、有效期或状态声明写入凭据,并用 私钥 生成 数字签名,使其他系统可以用 公钥 或 数字证书 验证该凭据来源的过程。
核心问题
签发解决的是“谁有资格声明这件事,以及接收方如何在之后验证这份声明没有被伪造或篡改”的问题。它常见于证书、令牌、许可证、设备授权、软件发布和离线授权材料。
签发不是简单地生成一个文件,而是把业务声明变成可验证的密码学凭据。
核心机制
一次签发通常包括:
- 确定签发方身份和可使用的签发密钥。
- 生成待签发载荷,例如主体、权限、用途、序列号、有效期和约束条件。
- 对载荷做规范化编码,避免同一语义对应多种字节表示。
- 用签发方私钥对规范化载荷生成签名。
- 输出凭据,并记录审计、撤销或续期信息。
可抽象为:
验证方不需要知道签发方私钥,只需要有可信的签发方公钥或证书链,再执行 验签 和业务约束检查。
签发、签名和验签的边界可以这样看:
签名:Sign(私钥, 内容摘要) -> signature
签发:生成业务凭据 + 对凭据签名 + 发布凭据和签名
验签:Verify(公钥, 内容摘要, signature) -> true/false例如设备 license 场景里,平台生成 license.bin,用平台私钥对它的摘要签名,输出 license.bin + signature。设备端烧录的是通用验签算法和平台公钥;启动时设备重新计算 license.bin 的摘要,再用公钥验证 signature。私钥不需要、也不应该出现在设备中。
工程用途
- 数字证书签发:CA 把域名、组织、设备或用户身份绑定到公钥。
- 令牌签发:认证服务签发 JWT、访问令牌或临时凭据。
- 软件发布:构建系统用私钥签发发布包、镜像或更新清单。
- 设备制造:产线为设备签发设备证书、授权文件或安全启动材料。
- 离线授权:平台签发许可证,客户端用内置公钥验证。
观察指标包括签发密钥权限、签发量、失败率、异常签发来源、有效期策略、撤销能力和审计完整性。
边界与常见坑
- 签发不是加密:签发强调来源和完整性,载荷可能仍是明文。
- 签发不自动等于业务批准:密码学签名只能证明“某密钥签过”,业务上是否该签要靠审批、策略和审计。
- 签名必须覆盖关键字段:权限、有效期、主体和用途没有纳入签名,就可能被篡改。
- 规范化不一致会导致验签失败:JSON 字段顺序、空白、编码和数字格式都可能影响签名输入。
- 签发密钥权限要极窄:过宽的 sign 权限会把 KMS 或 HSM 变成任意凭据制造机。
- 撤销和过期必须设计:签发出去的凭据可能长期流通,泄露或误签后需要止损路径。