TLCP 协议相关能力验证考点解析
座右铭:
工具能一键搞定的事儿就不要想着分析计算,
什么理论分析在工具面前都是浮云!
强烈推荐使用工具:
密码应用安全性评估工具(暂定,以后会改名)
欢迎大家体验,觉得不错点个赞,给作者加个鸡腿!
工具获取:公众号后台输入【密评神器】即可获取!
软件下载及其后续更新链接:
https://pan.baidu.com/s/1XOxUH7yOHSTnL4eKhbPmLA?pwd=6666
解压密码:edi@666
运行环境:win10,win11用户请将软件兼容性改成win8运行。
2024-08-20更新内容::
1. 采用延迟加载技术优化了软件的启动方式
2. 增加了软件的设置功能
2024-08-19:
更新内容:
1. 更新了证书链异在解析拓展字段时异常的BUG
2. 增加了CBC MAC 拓展攻击
3. 修改了sm2 k attack的小布局
4. 更新了软件的风格,设置了密评能力验证、熵密杯专区
-
TLCP
2. 能力验证
2.1 TLCP协议
在描述这个协议之前我们事先得熟悉GB/T 38636-2020《信息安全技术 传输层密码协议(TLCP)》和GM-T 0024—2023 《SSL VPN技术规范》中涉及的握手协议,在这里我先将握手协议的过程放上去,以便后续的有关讲解,如下图所示:
然后在分析这块内容的时候我们结合着习题来看。
3. 习题练习
3.1 根据2020年机构能力验证题N1数据包,提交服务端Server Key Exchange中签名值r||s,去掉格式
服务端Server Key Exchange中签名值r||s题目分析:
筛选条件tls.handshake.type==11找到TLCP Record Layer: Handshake Protocol: Server Key Exchange中的Signature
知识点扩展:SM2 算法 ASN.1编码 - 签名长度
SM2 算法正常不做编码的签名长度为64个字节,即 r + s,各32个字节
即使经过了ASN.1 DER编码,通常理解签名长度只有3种可能性,即:70字节、71字节、72个字节,分别对应:
70个字节:
3044 + 0220 + 32个字节r + 0220 + 32个字节s
如果r和s的第一个字节的最高位为1时,需要分别前导补0,即产生71个字节和72个字节编码
71个字节:
3045 + 022100 + 32个字节r + 0220 + 32个字节s
或者
3045 + 0220 + 32个字节r + 0221 00 + 32个字节s
72个字节:
3046 + 0221 00 + 32个字节r + 0221 00 + 32个字节s
实际存在的情况
在ANS.1 编码中,有以下几种特殊情况存储:
69个字节
情形1:
3043
021F
2DF69838E2E40DE378C9B8A2FD40FB87425AF4DB9297B9337A9B6586CBFAF3
0220
67301CAC496D878723EC946F570922A3D84A6B8D2E618C6AD907E36B13D4833F
情形2:
3043
0220
53EB989118AD14E1CA91A93769CCE234079169A94BFF645240D7DF59FFEF8B5E
021F
3B27E6F7849714C6A8EFD43C9E8045BA9B01477C7ADC3C7AFDF8056EBE05CF
如果r或s的数据存在前导0时,在实际编码过码中,会删掉前导00的长度。
如上是1F,表明第一个字节为00
70个字节
情形1:
3044
021F
638026332E9FCD750647AFCFC2A5CFD3639D5BF1C9D619F23740241257FD3C
022100
9862D169D9F5BDA16848DB5D1BEDE5A616914680B6CADF1AE373A3D03D365ACF
情形2:
3044
022100
E92A4B5821120820CE2F45DFD58C07B9F1D69C7483009ADA9206678661FC5A65
021F
1DBED6061F0AAEFB3B444EBA2361E0B28A1EB5D8AC789F5D218DA8A8616E2F
情形3:(特别注意)
3044
0220
36A245F75927E7B8B09C9827F92B3913117771679B70838273BA547751778FC5
0220
00B1E4BCF9FF3ABADC596936FFBA0CA59C1A0E812DD7F5A9BEDC36863C11D119
或者
3044
0220
0A7BF6655422E053B7E2D4C5609ED88DD98DC7B52A618A6474D01F86FE2B5614
0220
0084D6C1A052FA6FBCA036EDFACFEBBAB90A53442C3DCEA748AABCD41E7E1C91
特别注意这个数据,s数据存在00,但实际编码长度时,并未删除。
针对以上现象,需要注意的是,r或s数据中存在前导0时,是否删除,取决于其后一个字节,是否存在补位(即第一个字节最高位是否为1),从上面数据可知:
021F2D、021F1D、021F3B、021F63删除了前导0
022000B1、02200084 保留了前导0
均符合了上面的规律,因此在数据解析和编码时,要特别注意。
3045022100e4795b5a947526f8e7cbd0edd571ea8749e0efd24323799346ea2c740c006c5a0220026189e51c19d20d40a82606d0ed72cb9530a189bbb94c09e4559d7d8ff3f598
3045022100
e4795b5a947526f8e7cbd0edd571ea8749e0efd24323799346ea2c740c006c5a(r)
0220
026189e51c19d20d40a82606d0ed72cb9530a189bbb94c09e4559d7d8ff3f598(s)
r||s=
e4795b5a947526f8e7cbd0edd571ea8749e0efd24323799346ea2c740c006c5a026189e51c19d20d40a82606d0ed72cb9530a189bbb94c09e4559d7d8ff3f598
3.2 根据2020年机构能力验证题N1数据包,提交服务端Server Key Exchange中上述签名值r||s所用的签名公钥,去掉格式04
服务端Server Key Exchange中上述签名值r||s所用的签名公钥题目分析:
筛选条件tls.handshake.type==11找到TLCP Record Layer: Handshake Protocol: Certificate中的signedCertificate下的subjectPublicKey
知识点扩展:
SM2的公钥
SM2PublicKey内容格式为 04||x||y,x和y表示公钥的x分量和y分量。
-
「未压缩格式」:直接存储x和y坐标,通常这会以一个04(表示未压缩)开头,后接64字节的x和y坐标值。 -
「压缩格式」:只存储x坐标和一个标志位,表示y坐标的奇偶性。 -
「混合格式」:存储x坐标、y坐标的奇偶性和完整的y坐标。
-
x|y,即 x与 y两个分量拼接在一起,总共 64 个字节。 -
04|x|y, 04代表未压缩,整个公钥长度变成 65 字节。
0449a0975fa53295d2455bdd5ef25d5bd730ba76343b5c2c7e7feb7ee0bebfad0f0f1f76a63b915a0086fc60cc6b8440d3f5041b54422bebd3d4664ef31daaef5e
04(表示未压缩)
49a0975fa53295d2455bdd5ef25d5bd730ba76343b5c2c7e7feb7ee0bebfad0f(x)
0f1f76a63b915a0086fc60cc6b8440d3f5041b54422bebd3d4664ef31daaef5e(y)
3.3 根据2020年机构能力验证题N1数据包,提交服务端Server Key Exchange中签名源数据
服务端Server Key Exchange中签名源数据题目分析:
服务端Server Key Exchange中签名源数据=客户端随机数+服务器端随机数+加密证书的长度+加密证书
客户端随机数
tls.handshake.type==1
f81ce4d345466f00852fd30dc0555086544391bd2bd0ca13b8b66776a0bbc2ab
服务器端随机数
tls.handshake.type==11
5ed8968e7d19162fdc1aca131ddf438b55275de556c9994a8ff3bb871393d4cd
加密证书的长度
tls.handshake.type==11
000225
加密证书
tls.handshake.type==11
30820221308201c6a003020102020108300a06082a811ccf55018375308187310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a43413116301406035504030c0d424a4341534d32544553544341311e301c06092a864886f70d010901160f737570706f727440626a63612e636e301e170d3230303531323035313231345a170d3330303332313035313231345a30818e310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a4341311d301b06035504030c14626a6361736d3273657276657273727031656e63311e301c06092a864886f70d010901160f737570706f727440626a63612e636e3059301306072a8648ce3d020106082a811ccf5501822d03420004a0e54d33742636210e37a36c6e0102c296813a1812d112e44864337d7a248a6865afe51abf3830971465bdcbc9b003c72e62e0c7ca6ce53cf56f265ae877c442a31a301830090603551d1304023000300b0603551d0f040403020430300a06082a811ccf5501837503490030460221009dd093c169af50fbca6061ed1b10d4394b2768d115027f64533f24080d94f20d022100cc96806594a6ad537b78991c6e673384ef415da8c0d226103dcee21327341032
拼接:
f81ce4d345466f00852fd30dc0555086544391bd2bd0ca13b8b66776a0bbc2ab5ed8968e7d19162fdc1aca131ddf438b55275de556c9994a8ff3bb871393d4cd00022530820221308201c6a003020102020108300a06082a811ccf55018375308187310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a43413116301406035504030c0d424a4341534d32544553544341311e301c06092a864886f70d010901160f737570706f727440626a63612e636e301e170d3230303531323035313231345a170d3330303332313035313231345a30818e310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a4341311d301b06035504030c14626a6361736d3273657276657273727031656e63311e301c06092a864886f70d010901160f737570706f727440626a63612e636e3059301306072a8648ce3d020106082a811ccf5501822d03420004a0e54d33742636210e37a36c6e0102c296813a1812d112e44864337d7a248a6865afe51abf3830971465bdcbc9b003c72e62e0c7ca6ce53cf56f265ae877c442a31a301830090603551d1304023000300b0603551d0f040403020430300a06082a811ccf5501837503490030460221009dd093c169af50fbca6061ed1b10d4394b2768d115027f64533f24080d94f20d022100cc96806594a6ad537b78991c6e673384ef415da8c0d226103dcee21327341032
3.4 根据下载的模拟题SSL流量包.pcapng,提交客户端Client Key Exchange中C1||C3||C2,去掉格式
客户端Client Key Exchange中C1||C3||C2题目分析:
筛选条件tls.handshake.type==16找到TLCP Record Layer: Handshake Protocol: Client Key Exchange中的ECC-SM2 Encrypted PreMaster Secret下的Encrypted PreMaster
tls.handshake.type==16
GB-T 32918.4-2016 《信息安全技术 SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法》
30819802202f1233582f931890b0d6472d39c1729cc20e00d9b26a0ad119c468b8bbbb3e1a0220171274bf57ef071e4d76ee3441f39b31996b2438e5f3334f91533e93aa1c3db90420a1e8b8721d5f922c6e33fb7052a2afb0038d05017e2c0ab5035bf772da2cc2f30430c2ce0c6634f3d7626db03963d8c19d8a98c1c4756659b707547fdf0439505e4c1bca72406c22d6ee62e1811d016b402e
308198
0220
2f1233582f931890b0d6472d39c1729cc20e00d9b26a0ad119c468b8bbbb3e1a(x)
0220
171274bf57ef071e4d76ee3441f39b31996b2438e5f3334f91533e93aa1c3db9(y)
0420
a1e8b8721d5f922c6e33fb7052a2afb0038d05017e2c0ab5035bf772da2cc2f3(C3)
0430
c2ce0c6634f3d7626db03963d8c19d8a98c1c4756659b707547fdf0439505e4c1bca72406c22d6ee62e1811d016b402e(C2)
2f1233582f931890b0d6472d39c1729cc20e00d9b26a0ad119c468b8bbbb3e1a171274bf57ef071e4d76ee3441f39b31996b2438e5f3334f91533e93aa1c3db9a1e8b8721d5f922c6e33fb7052a2afb0038d05017e2c0ab5035bf772da2cc2f3c2ce0c6634f3d7626db03963d8c19d8a98c1c4756659b707547fdf0439505e4c1bca72406c22d6ee62e1811d016b402e
3.5 根据下载的模拟题流量包服务端加密私钥.pem解析出公私钥(公钥不带格式04)
根据服务端加密私钥.pem解析出公私钥题目分析:
把加密私钥.pem导入ASN1解析工具查看私钥
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgb8tUl8wJ17FqiOSppHwKa1pOgxQhAP0VoPe/EU0cGAqgCgYIKoEcz1UBgi2hRANCAARipb11eBDLluL8OMWZOfdyOXKsvWMu40pEW2nFdUPxWpRw+akHNz8Aat6Mbr5k9fUiG3gbC/SYG44td40YCWFb
-----END PRIVATE KEY-----
https://lapo.it/asn1js/
私钥:
6FCB5497CC09D7B16A88E4A9A47C0A6B5A4E83142100FD15A0F7BF114D1C180A
公钥(加密证书公钥)
筛选条件tls.handshake.type==11找到TLCP Record Layer: Handshake Protocol: Certificate中的signedCertificate下的subjectPublicKey
知识点扩展:
SM2的公钥
SM2PublicKey内容格式为 04||x||y,x和y表示公钥的x分量和y分量。
-
「未压缩格式」:直接存储x和y坐标,通常这会以一个04(表示未压缩)开头,后接64字节的x和y坐标值。 -
「压缩格式」:只存储x坐标和一个标志位,表示y坐标的奇偶性。 -
「混合格式」:存储x坐标、y坐标的奇偶性和完整的y坐标。
-
x|y,即 x与 y两个分量拼接在一起,总共 64 个字节。 -
04|x|y, 04代表未压缩,整个公钥长度变成 65 字节。
tls.handshake.type==11
0462a5bd757810cb96e2fc38c59939f7723972acbd632ee34a445b69c57543f15a9470f9a907373f006ade8c6ebe64f5f5221b781b0bf4981b8e2d778d1809615b
04(表示未压缩)
62a5bd757810cb96e2fc38c59939f7723972acbd632ee34a445b69c57543f15a(x)
9470f9a907373f006ade8c6ebe64f5f5221b781b0bf4981b8e2d778d1809615b(y)
3.6 根据下载的模拟题流量包服务端加密私钥.pem,解密客户端Client Key Exchange中C1||C3||C2,还原预主密钥
解密客户端Client Key Exchange中C1||C3||C2,还原预主密钥题目解析:
筛选条件tls.handshake.type==16找到TLCP Record Layer: Handshake Protocol: Client Key Exchange中的ECC-SM2 Encrypted PreMaster Secret下的Encrypted PreMaster
私钥:
6FCB5497CC09D7B16A88E4A9A47C0A6B5A4E83142100FD15A0F7BF114D1C180A
数据C1||C3||C2:
tls.handshake.type==16
30819a022100c0d0b3ef81c323ae77e0dfd51d9e60fbff0f1ce4e3f8af48db0525036d6e3919022100ef11bda67665e4a40983d4ee4cf0252869d4f51340db9a88285db6b1febf35f40420815d965cc370a6fab7d2c0703202b157c3b64a38984fe075a995039dfedfea210430f228996dacc0ab11896fe3620ccb8ad02b492ee5de81bc635b04439c917063fcc94da64f2e141cf88318737094ff4d52
2f1233582f931890b0d6472d39c1729cc20e00d9b26a0ad119c468b8bbbb3e1a171274bf57ef071e4d76ee3441f39b31996b2438e5f3334f91533e93aa1c3db9a1e8b8721d5f922c6e33fb7052a2afb0038d05017e2c0ab5035bf772da2cc2f3c2ce0c6634f3d7626db03963d8c19d8a98c1c4756659b707547fdf0439505e4c1bca72406c22d6ee62e1811d016b402e
使用SM2解密,还原预主密钥:
https://i.goto327.top/CryptTools/SM2.aspx
0101AC14A3D2DA7DCCFCAA9FEE0882F41B9974AA17B8A3070C042DF50A275CAAEC6ED730DFD132EA871BDD19574DC83F
3.7 根据模拟题SSL流量包.pcapng,计算主密钥
主密钥题目解析:
需要获取预主密钥、客户端随机数、服务端随机数
master secret 转换为16进制(字符串转换工具)
6d617374657220736563726574
PHASH
seed(A0)=master secret+客户端随机数+服务端随机数
客户端随机数:
tls.handshake.type==1
0a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d8
服务端随机数:
tls.handshake.type==11
5423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac268
拼接seed(A0):
6d6173746572207365637265740a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d85423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac268
然后将拼接完的数据做原始数据输入,用还原的预主密钥作密钥进行HMAC-SM3得到A1
预主密钥:
0101AC14A3D2DA7DCCFCAA9FEE0882F41B9974AA17B8A3070C042DF50A275CAAEC6ED730DFD132EA871BDD19574DC83F
https://i.goto327.top/CryptTools/HashCrypt.aspx
A1:75466BA297BAA6ABF75FA19698B5DEBDF815D632B98FDAF7C1BF60D8A7724F9E
然后A1做原始数据输入,用还原的预主密钥作密钥进行HMAC-SM3得到A2
A2:C7642FABAE939CAD31063AF385648BB48B8FB31E4C94ED97E1CC271208C0E477
然后A2做原始数据输入,用还原的预主密钥作密钥进行HMAC-SM3得到A3
A3:33830B6FE2EEFC391AD497F09E942835FF31E9508B75F9FB5C01730CAA3BB53E
然后拼接A1+seed、A2+seed、A3+seed
A1+seed:75466BA297BAA6ABF75FA19698B5DEBDF815D632B98FDAF7C1BF60D8A7724F9E6D6173746572207365637265740a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d85423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac268
A2+seed:C7642FABAE939CAD31063AF385648BB48B8FB31E4C94ED97E1CC271208C0E4776D6173746572207365637265740a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d85423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac268
A3+seed:33830B6FE2EEFC391AD497F09E942835FF31E9508B75F9FB5C01730CAA3BB53E6D6173746572207365637265740a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d85423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac268
然后再将拼接完的A1+seed、A2+seed、A3+seed做hash,密钥还是预主密钥。
hash(A1+seed):
640DA76978A5EFD6E0953088F015FA20EE810E48E24AA6F19A8900BCFF05A3A7
hash(A2+seed):
722DE36C807E5C7CA912E7E6FFA4965E7DB07BEF99DF8C0F27F29C21237F94C7
hash(A3+seed):
36D7EDAE5238BFA4E790B0022BF6A8A631CE7C88F4A061848175999624347A95
然后拼接完hash的数据:
640DA76978A5EFD6E0953088F015FA20EE810E48E24AA6F19A8900BCFF05A3A7722DE36C807E5C7CA912E7E6FFA4965E7DB07BEF99DF8C0F27F29C21237F94C736D7EDAE5238BFA4E790B0022BF6A8A631CE7C88F4A061848175999624347A95
主密钥:
640DA76978A5EFD6E0953088F015FA20EE810E48E24AA6F19A8900BCFF05A3A7722DE36C807E5C7CA912E7E6FFA4965E(取前96字节)
3.8 根据模拟题SSL流量包.pcapng,计算工作密钥
工作密钥题目解析:
需要获取预主密钥、客户端随机数、服务端随机数
key expansion转换成16进制
6b657920657870616e73696f6e
seed(A0)=key expansion+服务端随机数+客户端随机数
服务端随机数:
5423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac268
客户端随机数:
0a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d8
拼接seed(A0):
6B657920657870616E73696F6E5423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac2680a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d8
注:
主密钥:(此过程只不过是是将服务端随机数放到了客户端随机数前面,这里不再进行过程演示)
640DA76978A5EFD6E0953088F015FA20EE810E48E24AA6F19A8900BCFF05A3A7722DE36C807E5C7CA912E7E6FFA4965E
A1:6003A5937FAA6C9276656BD9CF11E5FC44D1DA8CF8916CC3F1A1D9C9C5B2C364
A2:0A45328C9D23A88AD0B0DFE3656996B979BD4A2730A3F8EDE29BC392153B6A6B
A3:FEE4DB5E22A5E48C3C0E0B88509763940A8E65C4AAF850C00AE7EB72282089CF
A4:8807466C968862F58C17B171B3520AB2A519D5DF00C8FC991E9D696244C95437
A1+seed:
6003A5937FAA6C9276656BD9CF11E5FC44D1DA8CF8916CC3F1A1D9C9C5B2C3646B657920657870616E73696F6E5423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac2680a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d8
A2+seed:
0A45328C9D23A88AD0B0DFE3656996B979BD4A2730A3F8EDE29BC392153B6A6B6B657920657870616E73696F6E5423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac2680a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d8
A3+seed:
FEE4DB5E22A5E48C3C0E0B88509763940A8E65C4AAF850C00AE7EB72282089CF6B657920657870616E73696F6E5423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac2680a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d8
A4+seed:
8807466C968862F58C17B171B3520AB2A519D5DF00C8FC991E9D696244C954376B657920657870616E73696F6E5423003bf0b79c2a134837d6c560dfb6d11cebdb2ab84e701fafe387b31ac2680a359775d8a2c2fd2756261b8ae86767db7b3cd3be532c9665ea432dc260b6d8
然后做hash(Ax+seed)
client mac key(用来做HMAC)
87E00935DC21B9D87E3E5616179307D817966079A0DEA9B9D09A4883CBF0E13D
server mac key
B4B53C3B2ACAFE5781712816C1A3A2CECE09D5837EB3389BDF1E471B06BC8157
client enc(用来加解密)
022A23065301DE9E49AAA0879E4ECBF2
server enc key
622CDA5B8994A0BB4496F03B8C13A4CD
client IV(IV值)
145BA093616E5939AAE6B59E4BED7701
server IV
45482C297F4C7CC76B497FCB1B2F4A84
3.9 根据模拟题SSL流量包.pcapng工作密钥,解密第8行端口52117到50052的encrypted handshake massage,以及第12行、14行application data数据
第8行解密的handshake massage
encrypted handshake massage:
01cb7997f77ee792a871e70ece4c148eba47b751a1032ec619bea239e1954b8e106e3d7c37491dc809be6c1979d11647ff20e9cae997d9dde43619ca2ae773df9fc8b6304ced8c594ad7d0ff9eeb0067
sm4-cbc解密
密钥:022A23065301DE9E49AAA0879E4ECBF2
IV:145BA093616E5939AAE6B59E4BED7701
798C9C0B7015B173E832F41CEDCD0F821400000C778001771615C2D5B9E553CB6DD2068DC92F27D8CDA2C44584815660A0BED385C0C569A2ED6B294DFA4B3EC90F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
然后第十二行和第十四行的handshake massage同样处理
sm4-cbc解密
密钥:022A23065301DE9E49AAA0879E4ECBF2
IV:145BA093616E5939AAE6B59E4BED7701
第12行解密的handshake massage
fc5cd01c24a9f63290941ac015b49a6f9fd9ca2f9a2c9bc8d08f2d6fd41cb0e07fb573219ae693175a01279175cfd6efed1c0697a638a8c5cac3ee3e531d99cc
175D3C90378D99285BB69756C0EB139A47FBA05E1B8988C9AE7B934460DDFF88600C5FF0980242EC9677D2F557C746FB020E0E0E0E0E0E0E0E0E0E0E0E0E0E0E
第14行解密的handshake massage
2483ab5ebb61282484fee0db27e53a7d9de64349b6899934a6b3f935ffbe8d9d41e3c1ea21ce53f7c48ef5de6c009a02e033f75c21a70a12db2eeb166213d42e140f9bea39d02c9991f8b9991eda8afe44971ba0c3eaffd47c202e31b2066b17e5233feb83c8f4f25a292cbb264cb729
980B3648B73D349D1A85EF65B8BE0C794554202F20485454502F312E310D0A486F73743A206C6F63616C686F73740D0A436F6E6E656374696F6E3A20636C6F73650D0A0D0ACBA63F629594DA48A591A34B0EDE377F23378B3C672D578847085FF2171278EF0A0A0A0A0A0A0A0A0A0A0A
3.10 根据模拟题SSL流量包.pcapng工作密钥,解密第10行端口50052到52117的encrypted handshake massage
和上面的过程一样 只不过这时的
sm4-cbc解密
密钥:622CDA5B8994A0BB4496F03B8C13A4CD
IV:45482C297F4C7CC76B497FCB1B2F4A84
0f74bb8cbfa527b2d9b75c4674e45f94a862b218e70bc311cc4745e10398ff3703ddbcc6853d918e1df031517caa78b0a3ab3dac70dddf09eee9266fb685151335bb8a3e7b8ea2bf6d71d45455e51b23
D6770A0BD9253B6F4DE7A42779D7605E1400000CE7CDA178C6D6D8B6A45FBB02CE9CC490CF0D61DFAEA90AEE4CC5DEB1378639DE36153C357B429DA0A0B19F660F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
3.11 请伪造新的消息,消息分组长度可变,并伪造出新的mac
知识点扩展:
SM4 CBC-MAC 消息长度扩展异或伪造攻击
根据 GB-T 15852.1—2020 《信息技术 安全技术 消息鉴别码 第 1 部分:采用分组密码的机制》文档内容:
已知经由SM4 CBC-MAC生成的MAC值如下
MSG1:
E55E3E24A3AE7797808FDCA05A16AC15EB5FA2E6185C23A814A35BA32B4637C2
MAC1:
0712C867AA6EC7C1BB2B66312367B2C8
MSG2:
D8D94F33797E1F41CAB9217793B2D0F02B93D46C2EAD104DCE4BFEC453767719
MAC2:
43669127AE268092C056FD8D03B38B5B
要求生成64字节(128个16进制字)的MSG3和对应的MAC3。
分析:
A、SM4-CBC,输入为128位IV随机数、对称密钥K、128位明文分组
B、SM4 CBC-MAC,输入同SM4-CBC,只是IV取值固定为0,输出只取最后一个分组加密后的密文
C、MSG1明文长度为32字节(256位),所以有2个分组(M1a和M1b),输出为MAC1
M1a =E55E3E24A3AE7797808FDCA05A16AC15
M1b =EB5FA2E6185C23A814A35BA32B4637C2
MAC1=0712C867AA6EC7C1BB2B66312367B2C8
IV =00000000000000000000000000000000
MAC1 = Ek(k, Ek(k,IV⊕M1a)⊕M1b) = Ek(k, Ek(k,M1a)⊕M1b)
D、同上MSG2与MSG1情况相同,所以
MAC2 = Ek(k, Ek(k,M2a)⊕M2b)
E、同理,对于MSG3,有4个分组(M3a、M3b、M3c、M3d),输出为MAC3
MAC3 = Ek(k,Ek(k,Ek(k, Ek(k,M3a)⊕M3b)⊕M3c)⊕M3d)
经过分析,大致思路是MSG3可以由MSG1和MSG2适当拼接而成。具体的
M3a = M1a
M3b = M1b
所以有Ek(k, Ek(k,M3a)⊕M3b) = Ek(k, Ek(k,M1a)⊕M1b) = MAC1
现在需要构造一个 M3c满足:M3c⊕MAC1 = M2a,也就是M3c = M2a⊕MAC1
这样,当IV=MAC1时,Ek(k,MAC1⊕M3a) = Ek(k,M2a)
M3d = M2b
综上
MSG3 = M1a||M1b||M2a⊕MAC1||M2b
E55E3E24A3AE7797808FDCA05A16AC15EB5FA2E6185C23A814A35BA32B4637C2DFCB8754D310D88071924746B0D562382B93D46C2EAD104DCE4BFEC453767719
MAC3 = MAC2
43669127AE268092C056FD8D03B38B5B
参考:熵密杯第一题 初始谜题
消息1:9e07a1cdcd795bc9cf5ae8984eeed7de
mac1:6e3ede668142ead5ceb7e0ea2223d4bb
解题思路:首先了解对称加密模式,CBC模式可以产生MAC,且初始向量为全零时,可构造MAC值
当IV全0时,IV和密文1异或=M1,M1加密得到MAC1
当M1异或(MAC1异或M1)=MAC1,所以M2=M1拼接(MAC1异或M1)
CBC模式的加密和解密流程如图所示。在CBC模式下,每个明文分组在加密之前,先与反馈至输入端的前一组密文分组按位异或后,再送至加密模块进行加密。其中,IV是一个初始向量,无须保密,但须随着消息的更换而更换,且收发双方必须选用同一个IV。显然,计算的密文分组不仅与当前明文分组有关,而且通过反馈作用还与以前的明文分组有关。在解密过程中,初始值IV用于产生第一个明文输出;之后,前一个密文分组与当前密文分组解密运算后的结果进行异或,得到对应的明文分组。
新消息:
9e07a1cdcd795bc9cf5ae8984eeed7def0397fab4c3bb11c01ed08726ccd0365
新消息MAC:
6e3ede668142ead5ceb7e0ea2223d4bb
f0397fab4c3bb11c01ed08726ccd0365
3.12 后台对于用户身份鉴别的验证逻辑如下所述:用户提交的数字证书(hex格式,以3082打头)验证用户提交的签名值(sm2withsm3算法)以及签名原数据,如果验证成功,则提示用户鉴别成功。
参考:熵密杯第二题
证书(请提交hex格式证书)
解题思路:
这个时候我们可以生成一个SM2的公私钥对,
私钥:
7455A2FF5B02D79DA427E30658C2641925ED77AE11B2CACD5BD1E5C36798FA53
公钥:
353A365B7BCC06152D06D22E6AFF0AE2E6569692D07E40EDC35CC80F24132ECC
3AAA769C143B8C558CB6879AB2BEE2BE3D460391A065E9D790F7909F70D623E5
然后对12345678数据进行签名
得到签名值:
50F9C05D233DB820DB566B137FD1D33D6732C16FADABB43C10AF670AB6A1C96AE8E16DFA23F81D3B148367C4FCF6305AF43986034B16072A19EA686229218947
然后我们将原来的证书导出来:
------------------------------------------------------------------------
30820203308201a9a003020102020802ce05b3832c3387300a06082a811ccf550183753042310b300906035504061302434e310f300d06035504080c06e6b599e6b19f310f300d06035504070c06e69dade5b79e3111300f060355040a0c08e6b58be8af954341301e170d3231303533303130333632345a170d3331303533303036353530325a305a310b300906035504061302434e310f300d06035504080c06e6b599e6b19f310f300d06035504070c06e69dade5b79e31153013060355040a0c0ce6b58be8af95e585ace58fb831123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a811ccf5501822d034200
040634504b9925f0832a72005967eaa960695f9ae87d5169306ba45d76722b98f9b9daf5ec015db01d336c183c1c6af227d97e5fd39e0bd7f1302aacdc31f29aef (原始公钥)
a371306f300e0603551d0f0101ff0404030206c0301d0603551d250416301406082b0601050507030106082b06010505070302301d0603551d0e041604149a39eb4f5aa952500f24238512c66ed0f00b8545301f0603551d2304183016801491d3d7a6f97b77fc795dcbd232acbb4004b0f8ff300a06082a811ccf55018375034800304502201613cda55da36d2e534e2c096ece5254a549e87690d0d76d6d817e5f667295c1022100aa4877ee80ba6a2ba96d1041c81a3ebc0fdcec8979dd573cbc6f39890c992753
------------------------------------------------------------------------
然后我们将公钥进行替换之后进行验证:
30820203308201a9a003020102020802ce05b3832c3387300a06082a811ccf550183753042310b300906035504061302434e310f300d06035504080c06e6b599e6b19f310f300d06035504070c06e69dade5b79e3111300f060355040a0c08e6b58be8af954341301e170d3231303533303130333632345a170d3331303533303036353530325a305a310b300906035504061302434e310f300d06035504080c06e6b599e6b19f310f300d06035504070c06e69dade5b79e31153013060355040a0c0ce6b58be8af95e585ace58fb831123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a811ccf5501822d034200353A365B7BCC06152D06D22E6AFF0AE2E6569692D07E40EDC35CC80F24132ECC3AAA769C143B8C558CB6879AB2BEE2BE3D460391A065E9D790F7909F70D623E5a371306f300e0603551d0f0101ff0404030206c0301d0603551d250416301406082b0601050507030106082b06010505070302301d0603551d0e041604149a39eb4f5aa952500f24238512c66ed0f00b8545301f0603551d2304183016801491d3d7a6f97b77fc795dcbd232acbb4004b0f8ff300a06082a811ccf55018375034800304502201613cda55da36d2e534e2c096ece5254a549e87690d0d76d6d817e5f667295c1022100aa4877ee80ba6a2ba96d1041c81a3ebc0fdcec8979dd573cbc6f39890c992753
伪造成功!
原文始发于微信公众号(利刃信安):【能力验证】TLCP 协议相关能力验证考点解析
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论