私はCNG winapiコードにopensslコードを置き換えようとしています。以下は私が持っているベアボーンのopensslコードです。opensslで使用される主要な合意(または主要派生)関数は何ですか?
const char *generator = ""; // 256 character hex string
const char *prime = ""; // 256 character hex string
dh = DH_new();
// Initialize dh's generator and prime
BN_hex2bn(&(dh->g), generator);
BN_hex2bn(&(dh->p), prime);
// Generate public and private keys
DH_generate_key(dh);
// Extract server's public key from init_msg's 'key'
BIGNUM *server_pub_key = BN_new();
BN_hex2bn(&server_pub_key, " *** 256 character server public key as hex string ***");
// Use DH to calculate the shared key
vector<unsigned char> shared_key;
shared_key.resize(DH_size(dh));
err = DH_compute_key(shared_key.data(), server_pub_key, dh);
上記のコードでは、256文字の共有キーが16進数文字列(128バイト)で生成されています。そのような鍵を作成するためにopensslが使用する鍵合意関数は何ですか? ありがとうございます。
OpenSSLはほとんどのRFCに従います。 [RFC 5246、トランスポート層セキュリティ(TLS)プロトコルバージョン1.2](https://www.ietf.org/rfc/rfc5246.txt)を参照してください。 – jww
あなたは、Agres秘密鍵を引き出すためにopensslによって使用される派生関数を指定してください秘密鍵と公開鍵から。このようなもの。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa375393(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/windows/desktop/ aa375534(v = vs.85).aspx –
上記のコードでは、認証されていないDiffie-Hellmanのように見えます。その累乗だけです。 OpenSSLがTLSで使用するのは、選択された暗号スイートとある程度X509証明書に依存します。暗号スイートが選択され、クライアントにX509証明書のセキュリティパラメータが設定されると、クライアントとサーバはRFC 5246で説明されているように処理されます。一時的でない暗号スイートが選択されている場合、キートランスポートが使用され、Diffie-Hellman実行されません。 – jww