GM/T 0129-2023 SSH密码协议规范:国密算法扩展、密码套件协商与实现架构

协议详解 · 2026-06-07

概述

GM/T 0129-2023《SSH密码协议规范》于 2023 年 12 月 4 日发布,2024 年 6 月 1 日正式实施,由国家密码管理局主管部门主管。该标准在 SSH 协议(RFC 4253)基础上增加了对国密算法(SM2、SM3、SM4)的支持,定义了国密 SSH 的完整协议框架。

标准发布后,国密 SSH 的实现有了统一的规范依据。目前已有开源社区(如 OpenEuler libssh2、GMSSL 等)基于该标准实现了国密 SSH 的支持。

标准定位

属性说明
标准编号GM/T 0129-2023
英文名称Secure shell cryptography protocol specification
发布日期2023-12-04
实施日期2024-06-01
主管部门国家密码管理局
备案号94558-2024
中国标准分类号CCS L80
国际标准分类号ICS 35.030
相近标准GB/T 38636-2020(TLCP)、GM/T 0024-2023(SSL VPN)

协议版本标识

GM/T 0129-2023 定义了国密 SSH 的版本标识字符串:

CODE
CSSH-<protoversion>-<softwareversion>[SP <comments>]CR LF
  • CSSH:本规范的简称
  • :协议版本号,固定为 1.0
  • :软件名称和版本号,由实现者定义(不可含有空格和减号)
  • :可选注释字段
示例CSSH-1.0-MySSH3.3 This is comment CR LF

协议框架

GM/T 0129-2023 在 SSH 协议的三层架构基础上进行了国密扩展。SSH 协议原本由三个子协议组成:

传输层协议(Transport Layer Protocol)

传输层协议提供以下安全服务:

  • 服务端鉴别:客户端验证服务端的身份
  • 机密性:通过加密算法保护数据传输的机密性
  • 完整性:通过 MAC 算法保护数据不被篡改
  • 密钥交换:双方协商共享密钥

用户鉴别协议(User Authentication Protocol)

用户鉴别协议用于服务端鉴别客户端用户的身份,支持多种鉴别方式:

  • 密码鉴别:基于用户名密码
  • 公钥鉴别:基于 SM2/RSA/ECC 数字签名挑战响应
  • 键盘交互鉴别:支持多因素认证

连接协议(Connection Protocol)

连接协议将加密通道复用为若干逻辑信道,支持:

  • 会话(session):远程命令执行
  • 端口转发(forwarded-tcpip):TCP 端口转发
  • X11 转发:图形界面转发
  • 远程执行命令

国密算法扩展

GM/T 0129-2023 在 SSH 协议中新增的算法类型包括三大类:加密算法、密钥交换算法和签名算法。

加密算法

标准定义了 SM4 系列加密算法(第 10-11 页表 4):

算法名称描述支持要求
SM4-CBCSM4 算法 CBC 工作模式必选
SM4-CFBSM4 算法 CFB 工作模式可选
SM4-CTRSM4 算法 CTR 工作模式可选
SM4-OFBSM4 算法 OFB 工作模式可选
SM4-CCMSM4 算法 CCM 工作模式(可鉴别加密)可选
SM4-KWSM4 算法 Key Wrap 工作模式(可鉴别加密)可选
SM4-GCMSM4 算法 GCM 工作模式(可鉴别加密)可选
注意:SM4-CBC 是唯一必选算法,其余模式为可选扩展。GCM 和 CCM 模式提供 AEAD(认证加密)能力,在需要完整性保护时推荐使用。

密钥交换算法

密钥交换算法用于双方安全地协商共享密钥。SSH 标准(RFC 4253)定义了多种密钥交换算法,GM/T 0129-2023 在此基础上增加了基于 SM2 的密钥交换。

常见密钥交换算法包括:

算法名称数学基础前向安全性说明
curve25519-sha256Curve25519 ECDH国际主流
ecdh-sha2-nistp256NIST P-256 ECDHNIST 标准曲线
diffie-hellman-group-exchange-sha256DH传统 DH
sm2keyexchangeSM2 密钥交换国密扩展
SM2 密钥交换算法基于 GM/T 0003.3-2012《SM2 第 3 部分:密钥交换协议》,利用 SM2 椭圆曲线实现双方密钥协商。该算法具有身份鉴别功能,可在密钥交换过程中验证通信双方的身份真实性。

签名算法

签名算法用于用户鉴别和挑战-响应机制。GM/T 0129-2023 支持的签名算法包括:

算法名称标准依据说明
ssh-rsaRFC 8332RSA 签名
ecdsa-sha2-nistp256RFC 5656NIST P-256 曲线
ssh-ed25519RFC 8709EdDSA 签名
sm2sig-sm3GM/T 0003.2SM2 数字签名 + SM3 哈希
SM2 签名算法遵循 GM/T 0003.2-2012《SM2 第 2 部分:数字签名算法》,签名消息语法遵循 GM/T 0010-2023《SM2 密码算法加密签名消息语法规范》。

密码套件协商机制

密码套件协商是 SSH 握手过程中最核心的环节。GM/T 0129-2023 沿用了 SSH 协议的经典协商模式。

协商原则

核心规则:客户端按优先级排序推荐算法列表,服务端选择列表中第一个自身支持的算法。
这一原则在 RFC 4253 Section 7.1 中明确规定:

"The chosen encryption algorithm to each direction MUST be the first algorithm on the client's name-list that is also on the server's name-list."
GM/T 0129-2023 第 12 页 8.5.1 进一步明确:

"双方发送支持的算法名称列表。名称列表中的第一个为首选算法。双方在列表中选择第一个与对方达成一致的算法作为密钥协商算法。"

协商流程

SSH_MSG_KEXINIT 消息是协商的核心载体:

协商示例

假设客户端和服务端各自支持的加密算法列表如下:

客户端列表(优先级从高到低):

  • chacha20-poly1305@openssh.com
  • aes256-gcm@openssh.com
  • aes256-ctr
  • aes192-ctr
  • sm4-ctr
服务端列表(优先级从高到低):
  • aes256-ctr
  • sm4-gcm
  • aes128-ctr
  • sm4-ctr
  • aes256-cbc
协商过程

步骤检查算法服务端是否支持结果
1chacha20-poly1305@openssh.com❌ 不支持跳过
2aes256-gcm@openssh.com❌ 注意:服务端支持 sm4-gcm 而非 aes256-gcm跳过
3aes256-ctr✅ 支持(服务端列表第 1 位)匹配成功
最终结果:选定 aes256-ctr

关键点:SSH 协商以客户端列表为基准,从高到低逐个检查,选择第一个在服务端列表中也存在的算法。即使服务端最高优先级也是 aes256-ctr,但决定因素是它在客户端列表中首次能被匹配的位置。

国密算法协商策略

如果需要强制使用国密算法,客户端应将 SM 系列算法放在列表首位:

CODE
客户端配置示例(强制国密):
  sm4-gcm          ← 首选国密
  sm4-ctr          ← 备选国密
  aes256-ctr       ← 国际算法兜底

扩展协商机制(RFC 8308)

GM/T 0129-2023 支持 SSH 扩展协商机制(RFC 8308),通过 SSH_MSG_EXT_INFO 消息实现握手完成后的算法能力通告。

扩展协商流程

  • 客户端在 SSH_MSG_KEXINITkex_algorithms 字段中添加 ext-info-c
  • 服务端在 SSH_MSG_KEX_INITkex_algorithms 字段中添加 ext-info-s
  • 密钥交换完成后,接收方发送 SSH_MSG_EXT_INFO 消息
  • 扩展信息包含扩展名称和扩展数据

国密相关扩展

扩展名称说明国密用途
server-sig-algs服务端支持的签名算法列表协商 SM2 签名算法
publickey-bound绑定公钥的会话 ID安全增强
no-flow-control禁用流量控制性能优化
server-sig-algs 扩展在国密场景中尤为重要:服务端通过此扩展告知客户端自己支持 sm2sig-sm3 等国算法签名算法,客户端可据此选择合适的鉴别方式。

与 GB/T 38636-2020(TLCP)的对比

GM/T 0129-2023(SSH 国密扩展)和 GB/T 38636-2020(TLCP,传输层密码协议)都是国密传输层安全协议,它们在很多方面存在有趣的对比:

协议定位对比

维度GM/T 0129-2023(SSH)GB/T 38636-2020(TLCP)
基础协议SSH(RFC 4253 系列)TLS 1.1 变体
主要场景远程登录、命令执行、端口转发Web HTTPS、通用传输加密
协议版本CSSH 1.0TLCP 1.1(版本号 0x0101)
握手 RTT2-RTT2-RTT
前向安全性可选(ECDH)可选(ECDHE)

密码套件对比

特性SSH(GM/T 0129)TLCP(GB/T 38636)
套件命名按算法类型分开协商密钥交换_加密_模式_校验 组合
密钥交换独立协商包含在套件中
加密模式CBC/GCM/CTR/CCM 等CBC/GCM
AEAD 支持GCM、CCMGCM
SM4 模式7 种(CBC 必选)2 种(CBC、GCM)

TLCP 定义的密码套件

GB/T 38636-2020 的密码套件命名格式为:密钥交换算法_对称加密算法_加密模式_完整性校验算法

套件名称密钥交换加密校验
ECDHE_SM4_CBC_SM3ECDHESM4-CBCSM3{0xe0,0x11}
ECDHE_SM4_GCM_SM3ECDHESM4-GCMSM3{0xe0,0x51}
ECC_SM4_CBC_SM3ECCSM4-CBCSM3{0xe0,0x13}
ECC_SM4_GCM_SM3ECCSM4-GCMSM3{0xe0,0x53}
IBSDH_SM4_CBC_SM3IBSDHSM4-CBCSM3{0xe0,0x15}
IBSDH_SM4_GCM_SM3IBSDHSM4-GCMSM3{0xe0,0x55}
IBC_SM4_CBC_SM3IBCSM4-CBCSM3{0xe0,0x17}
IBC_SM4_GCM_SM3IBCSM4-GCMSM3{0xe0,0x57}

协商机制对比

维度SSHTLCPTLS 1.3
列表发送客户端和服务端各自发送仅客户端发送仅客户端发送
选择规则客户端列表中首个在服务端列表中存在的服务端选择客户端列表中首个支持的服务端选择客户端列表中首个支持的
失败处理断开连接handshake_failurehandshake_failure
SSH 与 TLCP/TLS 1.2 的一个关键区别是:SSH 双方都发送算法列表,而 TLCP 和 TLS 1.2 只有客户端发送列表、服务端从中选择。

安全分析

已知攻击与防护

攻击类型风险防护措施
中间人攻击攻击者冒充服务端服务端公钥指纹验证(首次连接信任)
降级攻击强制使用弱算法服务端限制支持的算法列表
Terrapin 攻击前缀截断攻击使用严格的密钥交换(strict kex)
密钥泄露长期密钥被窃取使用前向安全密钥交换(ECDHE)

国密算法安全强度

算法安全强度等效国际标准
SM2-256128 位NIST P-256 / Curve25519
SM3-256256 位(哈希输出)SHA-256
SM4-128128 位AES-128
SM2 密钥交换算法基于椭圆曲线密码学,在正确实现的前提下,其安全性等价于 128 位对称密钥强度。SM4 分组密码算法的分组长度和密钥长度均为 128 位,安全性与 AES-128 相当。

实现状态

GM/T 0129-2023 发布后,国密 SSH 的实现生态正在快速发展:

  • libssh2:OpenEuler 社区已基于 GM/T 0129-2023 实现了国密 SSH 支持,包括 SM2/SM3/SM4 算法套件
  • GMSSL:提供国密 SSL/TLS 和 SSH 支持
  • BabaSSL:基于 OpenSSL 的国密算法支持,包含 ECDHE-SM2 密钥交换

参考来源

相关实践