4. 密码服务身份认证机制
密码服务对外提供密钥管理、签名验签、加解密、证书签发等能力,调用方必须先证明“我是谁、我有没有权限调用这个密钥”。身份认证机制决定了密码服务的安全边界。本节围绕四类主流机制——证书认证、令牌认证、挑战-响应认证、多因素认证——说明它们的认证流程、适用场景,以及在密码服务中的具体落地方式。
一、基于证书的认证:双向 TLS 与客户端证书
证书认证的核心是“持有私钥即证明身份”。在密码服务中,最常见的落地方式是 mTLS(双向 TLS):客户端与服务端在 TLS 握手阶段互相出示 X.509 证书,双方各自用对方证书链验证其合法性,并用私钥签名握手参数证明持有私钥。
一次典型的 mTLS 认证流程如下:客户端发起 ClientHello;服务端返回 ServerHello 与自身证书链;客户端校验证书链、有效期、吊销状态(CRL/OCSP)与 SAN/CN 是否匹配;客户端发送自己的证书链与 CertificateVerify(用客户端私钥对握手摘要签名);服务端用客户端公钥验签,并检查该证书是否在允许调用的白名单或 CA 信任域内;双方完成 Finished 后建立加密通道。此后每次 API 调用都复用该通道身份,无需重复认证。
在密码服务中,证书认证通常与“密钥访问策略”绑定。例如某 CA 为每个业务系统签发一张客户端证书,证书 SAN 中写入 spiffe://corp/pay/settle 这类 SPIFFE ID,密码服务在验签后把该 ID 映射到允许使用的密钥别名与操作集合(如仅允许 sign,不允许 export)。这样身份与权限在认证阶段就完成绑定,避免“认证通过但越权调用”。
二、基于令牌的认证:JWT 与短期凭证
令牌认证的核心是“持有有效令牌即代表身份”。在密码服务中,令牌通常由统一身份平台签发,调用方在 HTTP 头中携带 Authorization: Bearer <token>。密码服务验证令牌签名、有效期、签发者、受众(aud)与作用域(scope),再决定是否放行。
以 JWT 为例,一个面向密码服务的令牌载荷可能包含:iss(身份平台)、sub(调用方 ID)、aud(密码服务标识)、exp(过期时间,通常 5~15 分钟)、scope(如 kms:sign:key-001)。密码服务用身份平台公钥验签后,将 scope 与请求的密钥操作做交集判断,交集为空则返回 403。
令牌认证的关键工程点是“短期化 + 可撤销”。短期令牌降低泄露窗口;对于需要立即失效的场景,密码服务可维护一个短 TTL 的撤销列表(如 Redis 中记录 jti),在验签通过后额外检查 jti 是否被撤销。令牌不应直接携带密钥材料,只携带身份与授权声明。
三、挑战-响应认证:证明持有密钥而不传输密钥
挑战-响应认证的核心是“服务端出题、客户端用私钥答题”。它不传输任何长期密钥,适合对安全性要求高、又无法依赖 TLS 客户端证书的场景。典型流程:客户端请求认证;服务端生成随机数 nonce(如 32 字节)并返回;客户端用本地私钥对 nonce 或 nonce || context 做签名;服务端用已登记的客户端公钥验签,并检查 nonce 是否在有效期内且未被使用过(防重放)。
在密码服务中,挑战-响应常用于设备接入、HSM 操作员登录或密钥托管场景。例如某 HSM 要求操作员插入智能卡,HSM 发出随机挑战,智能卡内私钥签名后回传,HSM 验签通过才允许执行密钥导入。这里的 nonce 必须一次一用,服务端需维护已用 nonce 的短时缓存,否则攻击者可重放旧签名。
四、多因素认证:把两类以上证据组合起来
多因素认证(MFA)要求同时提供两类以上不同性质的证据:知识因素(口令、PIN)、持有因素(令牌、智能卡、手机)、生物因素(指纹、人脸)。在密码服务中,MFA 通常用于高敏感操作,如根密钥启用、密钥销毁、管理员登录控制台。
落地方式可以是“令牌 + 挑战-响应”:管理员先用口令登录获得短期会话令牌,再对关键操作触发一次挑战-响应(如硬件密钥签名),两者都通过才执行。也可以是“证书 + TOTP”:mTLS 建立通道后,执行销毁密钥前要求输入动态口令。MFA 的价值在于单一因素泄露不足以完成高权限操作。
五、四类机制的对比与选型
| 机制 | 核心证据 | 典型落地 | 主要风险点 |
|---|---|---|---|
| 证书认证 | 私钥 + 证书链 | 服务间 mTLS、CA 接口 | 证书过期、吊销链路缺失 |
| 令牌认证 | 签名 JWT / 短期凭证 | API 网关、控制台 | 令牌泄露、scope 过宽 |
| 挑战-响应 | 对 nonce 的私钥签名 | HSM 登录、设备接入 | nonce 重放、时钟偏移 |
| 多因素认证 | 两类以上不同因素 | 根密钥操作、管理员登录 | 因素未绑定会话、可绕过 |
选型时可按“调用方类型 + 操作敏感度”判断:机器对机器的长期调用优先证书;面向用户或第三方应用的 API 调用优先短期令牌;无法依赖 TLS 客户端证书但需强身份的场景用挑战-响应;涉及根密钥、密钥销毁等不可逆操作时叠加 MFA。四类机制并非互斥,实际密码服务中常组合使用,例如 mTLS 建立通道、JWT 传递授权、关键操作再触发挑战-响应或 MFA。
六、落地检查清单
- 证书:是否配置完整证书链、OCSP/CRL 检查、SAN 到密钥权限的映射表。
- 令牌:是否校验 iss、aud、exp、scope,是否维护 jti 撤销列表,令牌有效期是否不超过 15 分钟。
- 挑战-响应:nonce 是否足够随机(≥32 字节)、是否一次一用、是否有时间窗限制。
- MFA:第二因素是否与会话绑定、是否覆盖所有高敏操作、失败是否记录审计日志。
- 统一审计:认证成功/失败、使用的密钥别名、操作类型、来源 IP 与身份标识是否完整记录,便于事后追溯。
认证机制解决“你是谁”,授权机制解决“你能做什么”。在密码服务中,两者必须在同一次请求处理链路中完成校验,任何一步缺失都可能让密钥能力被越权调用。把证书、令牌、挑战-响应、MFA 按场景组合,并配合清晰的审计与撤销能力,才能形成可运营的密码服务身份边界。