現在SSHクライアントを開発しており、上記のクライアントがECDH KEX(NIST-256,384および521)を介してサーバーと鍵を交換する必要があります。クラスECDiffieHellmanCngから共有秘密を抽出してください
私はいくつかの(実際には多くの)研究を行い、.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
列のペイロードI_S 、サーバーのSSH_MSG_KEXINITのペイロード
文字列K_S、サーバの公開ホスト鍵
文字列Q_C、クライアントのはかない公開鍵オクテット文字列
文字列Q_S、サーバのはかない公開鍵オクテット文字列
mpint K、秘密の共有< - 私は任意の派生
ご協力ありがとうございました!
返信いただきありがとうございます。 私はそれを試みたが、それは私のためにうまくいかなかった。鍵は予想される長さの鍵を生成するために複数回の派生を必要とすることがあるため、解決策は前置と追加の特定の組み合わせである可能性があります。しかし、彼らの派生についてのMicrosoftのドキュメントは、欠けていたので、私はあまりにもそれを見て気にしなかった。 私はこの問題を持つ他の誰かがもう一度それを試すことができるように答えをupvoteします。 :) – Oachkatzl