跳到主要内容

6.6. Public Key Algorithms (公钥算法)

6.6. Public Key Algorithms (公钥算法)

此协议被设计为可以与几乎任何公钥格式、编码和算法 (签名和/或加密) 一起使用.

定义公钥类型有几个方面:

  • 密钥格式: 密钥如何编码以及如何表示证书.此协议中的密钥 blob 除了密钥之外还可以包含证书.

  • 签名和/或加密算法: 某些密钥类型可能不支持签名和加密两者.密钥使用也可能受策略声明 (例如在证书中) 的限制.在这种情况下, 应该为不同的策略替代方案定义不同的密钥类型.

  • 签名和/或加密数据的编码: 这包括但不限于填充、字节顺序和数据格式.

当前定义了以下公钥和/或证书格式:

ssh-dss           REQUIRED     sign   原始 DSS 密钥
ssh-rsa RECOMMENDED sign 原始 RSA 密钥
pgp-sign-rsa OPTIONAL sign OpenPGP 证书 (RSA 密钥)
pgp-sign-dss OPTIONAL sign OpenPGP 证书 (DSS 密钥)

可以按照 [SSH-ARCH] 和 [SSH-NUMBERS] 中的规定定义其他密钥类型.

密钥类型必须始终明确已知 (通过算法协商或其他来源).它通常不包含在密钥 blob 中.

证书和公钥编码如下:

string    证书或公钥格式标识符
byte[n] 密钥/证书数据

证书部分可以是零长度字符串, 但需要公钥.这是将用于认证的公钥.证书 blob 中包含的证书序列可用于提供授权.

未明确指定签名格式标识符的公钥/证书格式必须使用公钥/证书格式标识符作为签名标识符.

签名编码如下:

string    签名格式标识符 (由公钥/证书格式指定)
byte[n] 格式特定编码的签名 blob

"ssh-dss" 密钥格式的详细编码和 "ssh-rsa" 密钥格式的详细编码请参考完整规范文档.