关键发现:OpenSSH exchange hash padding asymmetry
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

OpenSSH kexgen.c源码分析发现:

Client调用kex_gen_hash():
- I_C = kex->my (client自己的KEXINIT,不包括padding)
- I_S = kex->peer (server的KEXINIT,包括padding)

Server调用kex_gen_hash():
- I_C = kex->peer (client的KEXINIT,包括padding)
- I_S = kex->my (server自己的KEXINIT,不包括padding)

矛盾:
- Client的I_C不包括padding
- Server的I_C包括padding
- Exchange hash应该不对称!

但OpenSSH工作正常,说明:
1. OpenSSH可能不在exchange hash中包括padding
2. 或OpenSSH有机制确保kex->my也包括padding
3. 或我理解有误

测试结果:
 不加padding:签名成功但MAC失败
 加padding:签名失败

结论:Exchange hash用于签名时不包括padding
但密钥派生可能使用不同的方式

Session进度:
- OpenSSH源码分析:100%
- Root cause发现:95%(padding asymmetry)
- 需要验证:OpenSSH如何在密钥派生时处理padding
This commit is contained in:
Warren
2026-06-15 02:17:41 +08:00
parent 581c78469c
commit 301d046761

Binary file not shown.