SM2签名消息摘要与A0转31总结

admin 2026-09-23 05:46:05 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文解析GB/T35275-2026标准下SM2签名验签中signedAttrs的编码处理。核心结论是验签时需将signedAttrs的A0标签改回31(SETOF类型),保持长度与内容不变,再进行DER编码与SM3摘要计算,即可与签名方摘要对齐。文档提供完整示例数据与十六进制字节码,具可操作性,适合密码学与安全开发人员参考。 综合评分: 82 文章分类: 安全开发,代码审计,安全工具


SM2签名消息摘要与A0转31总结

原创

利刃信安 利刃信安

利刃信安

2026年9月22日 15:00 北京

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

SM2签名消息摘要与A0转31总结

GB/T 35275-2026

属性 Attribute

也就是说,属性值可以是任意类型,但是属性值集合是SET OF(0x31)

signerInfo类型

若signerInfo中的signedAttrs存在,则待签名数据为signedAttrs的 DER 编码结果,并按照GB/T35276的规定进行数字签名运算。

signedAttrs SignedAttributes 是经由签名者签名的属性的集合

也就是说,要想使用DER编码(ASN.1)格式来表示signedAttrs,则需要变成属性值集合SET OF(0x31)

然而,我们平常看到某些数据,例如时间戳数据这里是A0表示。

A0 是字段包装,31 是值的类型;摘要计算的是”值”,不是”字段”。

完整数据验签链路:

定位 SignerInfo → 找到 signedAttrs → A0→31 → SM3 → SM2 验签

摘要计算用 31,是取 SignedAttributes 值的通用集合编码;存储里显示 A0,只是 IMPLICIT 把字段标签替换成了上下文特定的 [0]。

验签时把首字节从 0xA0 改回 0x31,长度与内容不动,再对这段字节做预处理,即可与签名方的摘要对齐。

示例数据

MIIFjgYKKoEcz1UGAQQCAqCCBX4wggV6AgEDMQ4wDAYIKoEcz1UBgxEFADCBgQYLKoZIhvcNAQkQAQSgcgRwMG4CAQEGDCsGAQQBga8IAQIDLTAwMAwGCCqBHM9VAYMRBQAEICLc0QN5x6bYNjYEFA/WWHXllSKVJqKqwZ56CQdUyiQ/AhAgIwQDEhUIFJCIMkRJlhaGGA8yMDIzMDQwMzA0MTUwOFoCBgGHRVNtdKCCAxcwggMTMIICtqADAgECAg8HAAIgIgMDAQAAACVSUlQwDAYIKoEcz1UBg3UFADBgMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpR1VBTkcgRE9ORyBDRVJUSUZJQ0FURSBBVVRIT1JJVFkgQ08uLExURC4xHTAbBgNVBAMMFEdEQ0EgVHJ1c3RBVVRIIEUxIENBMB4XDTIyMDIyODE2MDAwMFoXDTI3MDIyODE2MDAwMFowSjELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCeW5v+S4nOecgTESMBAGA1UEBwwJ5bm/5bee5biCMRMwEQYDVQQDDApUU1AgU2VydmVyMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEERWU0MALy1/Nj3lIBbOGXh+j/pOrB78vuxD4sXLmegBwO1mfPSOA9CFHujMiYkwp6l/HInCrN2oF3yV35mUUiqOCAWUwggFhMB8GA1UdIwQYMBaAFBGP4/05GR2cGR9JN26sRIxV6hS9MB0GA1UdDgQWBBSomrphQ76fFNsouMm3ayc/2lnAnjBPBgNVHSAESDBGMEQGCiqBHIbvLwECAwEwNjA0BggrBgEFBQcCARYoaHR0cHM6Ly93d3cuZ2RjYS5jb20uY24vY3BzL2RvbWVzdGljLWNwczAPBgNVHRMBAf8EBTADAQEAMAsGA1UdDwQEAwIGwDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vY3JsLmdkY2EuY29tLmNuL2NybC9HRENBX1RydXN0QVVUSF9FMV9DQS5jcmwwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5nZGNhLmNvbS5jbjAdBgUqVhUBAwQUDBIwMDcwMTIwMjIwMzAzNTM2NjUwDAYIKoEcz1UBg3UFAANJADBGAiEAxwHrd1hnWhfJwvfBbSr4ey8gKMfuvaXdtm2LoIk2Yh8CIQCGJ20j9lEm74QKE8HO1igLaonMEFppdmSWeS9gMJu5jDGCAcQwggHAAgEBMHMwYDELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR0wGwYDVQQDDBRHRENBIFRydXN0QVVUSCBFMSBDQQIPBwACICIDAwEAAAAlUlJUMAwGCCqBHM9VAYMRBQCggd4wGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA0MDMwNDE1MDhaMCwGCSqGSIb3DQEJNDEfMB0wDAYIKoEcz1UBgxEFAKENBgkqgRzPVQGCLQEFADAvBgkqhkiG9w0BCQQxIgQgl7E2g5qTE8kbXrmxd3WLj2hSJpGT8Vlb0YFiMhG3j44wQwYLKoZIhvcNAQkQAi8xNDAyMDAwLjAKBggqgRzPVQGDEQQgxhlH+gLUY5qyEeSVZDTvKJf2bHYS9ZeCTUfddGf6X3IwDQYJKoEcz1UBgi0BBQAESDBGAiEAjakaIcKiqtsZXE/Zc9TsviL3hSdNdK9PqTO41ty5k/4CIQCOu29qoDKrxv7BB1zKg3HJxSr1s8qZ3jEWY+bJLPbGIw==

SignerInfo 看下面即可

signedAttrs

A0 81 DE 30 1A 06 09 2A 86 48 86 F7 0D 01 09 03  31 0D 06 0B 2A 86 48 86 F7 0D 01 09 10 01 04 30  1C 06 09 2A 86 48 86 F7 0D 01 09 05 31 0F 17 0D  32 33 30 34 30 33 30 34 31 35 30 38 5A 30 2C 06  09 2A 86 48 86 F7 0D 01 09 34 31 1F 30 1D 30 0C  06 08 2A 81 1C CF 55 01 83 11 05 00 A1 0D 06 09  2A 81 1C CF 55 01 82 2D 01 05 00 30 2F 06 09 2A  86 48 86 F7 0D 01 09 04 31 22 04 20 97 B1 36 83  9A 93 13 C9 1B 5E B9 B1 77 75 8B 8F 68 52 26 91  93 F1 59 5B D1 81 62 32 11 B7 8F 8E 30 43 06 0B  2A 86 48 86 F7 0D 01 09 10 02 2F 31 34 30 32 30  30 30 2E 30 0A 06 08 2A 81 1C CF 55 01 83 11 04  20 C6 19 47 FA 02 D4 63 9A B2 11 E4 95 64 34 EF  28 97 F6 6C 76 12 F5 97 82 4D 47 DD 74 67 FA 5F  72

这里A0代表上下文CONTEXT_SPECIFIC [0]字段即:

Tag    : 160 (0xA0) : CONTEXT_SPECIFIC [0]

验签过程中需要把A0改回31组DER数据

3181DE301A06092A864886F70D010903310D060B2A864886F70D0109100104301C06092A864886F70D010905310F170D3233303430333034313530385A302C06092A864886F70D010934311F301D300C06082A811CCF550183110500A10D06092A811CCF5501822D010500302F06092A864886F70D0109043122042097B136839A9313C91B5EB9B177758B8F6852269193F1595BD181623211B78F8E3043060B2A864886F70D010910022F313430323030302E300A06082A811CCF550183110420C61947FA02D4639AB211E4956434EF2897F66C7612F597824D47DD7467FA5F72

签名公钥和签名值不再赘述。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:利刃信安 利刃信安 利刃信安《SM2签名消息摘要与A0转31总结》

评论:0   参与:  0