GM/T 0126-2023 HTML密码应用置标语法:国密浏览器的技术基石
核心结论:GM/T 0126-2023定义了HTML页面中嵌入国密密码能力的标准语法,是国密浏览器实现身份认证、数据加密等功能的底层规范。与GM/T 0128(DTLSCP)配合,构成国密Web应用的完整技术栈。
一、标准背景
1.1 为什么需要这个标准
传统HTTPS使用RSA/ECC证书实现网页加密,但无法满足国密改造需求。2024年6月1日实施的GM/T 0126-2023《HTML密码应用置标语法》,正是为解决国密浏览器"如何识别和处理密码标签"这一核心问题而生。
该标准由海泰方圆等企业参与编制,是国家密码管理局第45号公告发布的25项新标准之一。它的发布标志着我国安全浏览器技术实现了标准化突破。
1.2 标准定位
| 维度 | 内容 |
|---|---|
| 标准号 | GM/T 0126-2023 |
| 发布部门 | 国家密码管理局 |
| 发布日期 | 2023年12月4日 |
| 实施日期 | 2024年6月1日 |
| 标准性质 | 制定(非修订) |
| CCS分类号 | L80 |
| ICS分类号 | 35.030 |
二、核心概念:密码标签
2.1 什么是密码标签
密码标签是GM/T 0126定义的一种HTML扩展标签,用于在网页中嵌入密码操作指令。浏览器解析这些标签后,可调用国密算法库完成签名、验签、加密、解密等操作。
基本结构:
HTML
<crypto-action operation="sign" algorithm="SM2" key="userKey">
<!-- 标签内容 -->
</crypto-action>2.2 密码标签类型
标准定义了以下几类密码标签:
| 标签类型 | 功能 | 典型用途 |
|---|---|---|
| crypto-auth | 身份认证 | 登录页SM2签名认证 |
| crypto-sign | 数字签名 | 电子签章、文件签名 |
| crypto-encrypt | 数据加密 | 敏感字段加密传输 |
| crypto-decrypt | 数据解密 | 解密返回的敏感数据 |
| crypto-hash | 杂凑运算 | 文件指纹计算 |
2.3 标签属性规范
每个密码标签包含以下核心属性:
| 属性 | 说明 | 示例值 |
|---|---|---|
| operation | 操作类型 | sign/verify/encrypt/decrypt |
| algorithm | 算法标识 | SM2/SM3/SM4 |
| key | 密钥标识符 | 引用密钥库中的密钥ID |
| mode | 工作模式 | CBC/GCM(仅SM4) |
| output | 输出格式 | base64/hex/pem |
三、交互流程
3.1 标签解析过程
国密浏览器处理密码标签的标准流程:
CODE
① 页面加载 → ② DOM解析 → ③ 识别crypto-*标签 → ④ 验证属性合法性
↓
⑤ 调用水密模块API → ⑥ 执行密码运算 → ⑦ 返回结果到DOM3.2 密钥管理
密码标签中的密钥不直接以明文形式存在,而是通过密钥标识符引用:
- 内嵌密钥:
key="embedded"— 密钥嵌入标签内部(不推荐,安全性低) - 密钥库引用:
key="km:///user/sign_key"— 引用国密密钥管理服务 - 外部传递:通过JavaScript API动态注入
3.3 与GM/T 0128的配合
GM/T 0126处理的是网页内的密码标签,而GM/T 0128-2023《数据报传输层密码协议规范》处理的是传输层的密码通信。两者配合使用:
| 层级 | 标准 | 作用 |
|---|---|---|
| 应用层 | GM/T 0126 | 页面内密码标签定义 |
| 传输层 | GM/T 0128 | 国密DTLS数据传输 |
| 应用协议 | GM/T 0024 | SSL VPN网关规范 |
四、典型应用场景
4.1 电子签章页面
HTML
<form action="/api/seal/sign" method="POST">
<crypto-sign id="seal-sign" algorithm="SM2" hash="SM3" key="enterpriseKey">
<input type="hidden" name="docHash" value="">
<button type="submit">签署并发送</button>
</crypto-sign>
</form>
<script>
// 获取文档指纹并绑定到隐藏字段
document.querySelector('#seal-sign').addEventListener('hash', function(e) {
this.querySelector('input[name="docHash"]').value = e.detail.hash;
});
</script>4.2 敏感数据传输
HTML
<crypto-encrypt algorithm="SM4" mode="CBC" key="sessionKey">
<input type="text" name="idCard" placeholder="身份证号">
</crypto-encrypt>浏览器在提交表单前自动完成SM4加密,服务端解密后处理。
五、安全要求
5.1 浏览器合规检查项
根据GM/T 0126,国密浏览器必须满足:
| 检查项 | 要求 | 测试方法 |
|---|---|---|
| 标签解析 | 支持所有定义的crypto-*标签 | 构造测试页面验证 |
| 属性校验 | 非法属性值应拒绝执行 | 注入恶意标签测试 |
| 密钥安全 | 密钥不得以明文存储 | 内存 dump 检查 |
| 错误处理 | 运算失败时返回明确错误码 | 模拟密钥丢失场景 |
5.2 开发者注意事项
- 禁止硬编码密钥:密钥必须通过密钥管理系统获取
- 算法版本匹配:确保浏览器支持的算法版本与标准要求一致
- 传输层配合:密码标签数据应通过国密TLS或GM/T 0128传输
六、与相关标准的关系
| 标准 | 关系 |
|---|---|
| GM/T 0009-2023 | SM2算法使用规范,密码标签中签名操作的基础 |
| GM/T 0004-2012 | SM3算法标准,密码标签默认杂凑算法 |
| GM/T 0001-2012 | SM4算法标准,密码标签加密操作基础 |
| GM/T 0128-2023 | DTLSCP协议,配合密码标签实现传输安全 |
| GM/T 0024-2023 | SSL VPN技术规范,网关层密码能力定义 |
七、实施建议
7.1 浏览器厂商
- 实现完整的密码标签解析引擎
- 提供标准化的JavaScript API
- 建立密钥安全存储机制
7.2 应用开发者
- 遵循标签规范编写HTML页面
- 做好密钥管理方案设计
- 进行兼容性测试和安全性评估
7.3 密评机构
- 将密码标签合规性纳入检查范围
- 验证浏览器实现是否符合GM/T 0126
- 检查密钥管理是否符合GM/T 0028
八、总结
GM/T 0126-2023填补了国密浏览器密码标签的技术空白,是国密Web应用基础设施的关键一环。它与GM/T 0128等传输层标准共同构成了国密网络安全的完整技术体系。
随着2024年6月1日全面实施,各浏览器厂商和应用开发者都应尽快完成适配,确保国密改造工作的顺利推进。