【发布时间】:2016-06-29 16:13:15
【问题描述】:
我目前正在开发一个 SSH 客户端,该客户端必须能够通过 ECDH KEX(NIST-256、384 和 521)与服务器交换密钥。
我做了一些(实际上很多)研究,找到了 .NET 类ECDiffieHellmanCng,并且能够提取服务器的公钥并将其导入到该类中。
但是,问题是我无法提取共享秘密而不派生它 (ECDiffieHellmanCng.DeriveKeyMaterial(CngKey otherpartyPublicKey))。
有没有办法直接访问共享密钥(在 RFC 文件中称为“k”)?
Here 是 ECDH 实现的 RFC 的第 7 页,以及为什么我需要共享密钥:
交换哈希 H 被计算为连接的哈希 以下。
字符串V_C,客户识别字符串(CR和LF除外)
字符串 V_S,服务器的标识字符串(不包括 CR 和 LF)
字符串I_C,客户端SSH_MSG_KEXINIT的payload
字符串I_S,服务器SSH_MSG_KEXINIT的payload
字符串 K_S,服务器的公共主机密钥
string Q_C,客户端的临时公钥字节串
string Q_S,服务器的临时公钥字节串
mpint K,共享秘密
感谢任何解决方案或提示!
【问题讨论】:
标签: c# .net ssh elliptic-curve diffie-hellman