5.3-5.8. Key Operations and Extensions
Public keys 通过 standard SSH wire-encoded public key blob 引用. Clients 可以用 SSH_AGENTC_REMOVE_ALL_IDENTITIES 移除所有 identities, 用 SSH_AGENTC_REMOVE_IDENTITY 移除特定 key, 用 SSH_AGENTC_REMOVE_SMARTCARD_KEY 移除 token-hosted keys, 用 SSH_AGENTC_REQUEST_IDENTITIES 请求 key list, 并用 SSH_AGENTC_SIGN_REQUEST 请求 private key signature.
SSH_AGENTC_SIGN_REQUEST 携带 key blob, data 和 signature flags. 成功响应是 SSH_AGENT_SIGN_RESPONSE. 已定义 RSA signature flags 为 SSH_AGENT_RSA_SHA2_256 和 SSH_AGENT_RSA_SHA2_512.
protocol 支持使用 SSH_AGENTC_LOCK 和 SSH_AGENTC_UNLOCK lock/unlock agent. extension mechanism 使用 SSH_AGENTC_EXTENSION, SSH_AGENT_EXTENSION_RESPONSE 和 SSH_AGENT_EXTENSION_FAILURE. optional query extension 允许 client 发现 supported extension names.
这些操作构成 SSH agent 的日常交互: client 查询可用 identities, 选择某个 public key blob, 请求 agent 用对应 private key 对数据签名, 或移除不再需要的 identity. Lock/unlock 机制用于临时阻止 agent 使用 key, extension mechanism 则允许在不消耗固定消息号空间的情况下扩展协议.
实现者需要注意, agent 返回 public key list 并不等于泄露私钥; 真正敏感的操作是签名请求和添加/移除 key. 因此, key constraint、confirmation、lifetime、agent forwarding 和 extension policy 都应纳入本地安全策略.