-1

私は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が使用する鍵合意関数は何ですか? ありがとうございます。

+0

OpenSSLはほとんどのRFCに従います。 [RFC 5246、トランスポート層セキュリティ(TLS)プロトコルバージョン1.2](https://www.ietf.org/rfc/rfc5246.txt)を参照してください。 – jww

+0

あなたは、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 –

+0

上記のコードでは、認証されていないDiffie-Hellmanのように見えます。その累乗だけです。 OpenSSLがTLSで使用するのは、選択された暗号スイートとある程度X509証明書に依存します。暗号スイートが選択され、クライアントにX509証明書のセキュリティパラメータが設定されると、クライアントとサーバはRFC 5246で説明されているように処理されます。一時的でない暗号スイートが選択されている場合、キートランスポートが使用され、Diffie-Hellman実行されません。 – jww

答えて

3

これはありません。または "NULL KDF"、またはf(x) -> x

DH_compute_key生のDH操作を行い、結果を返します。

文書化されたKDF値のうち、BCryptDeriveKeyは、未処理の値を返しません。ドキュメントにまだ作成していないBCRYPT_KDF値を追加した可能性は常にありますが、最新のSDKリリースのbcrypt.hを確認する必要があります。

+0

ありがとうbatonjs。 SDKからbcrypt.hファイルをチェックしました。彼らは生の値をまだサポートしていません。ネイティブウィンドウライブラリでこれをどうやってやるのか分かりますか? –

2

KDFを使用する前に、Diffie-Hellman(DH)キー契約の直接的な結果が得られます。私はこれ以外にあなたが言うことを期待しているか分かりません。これは、バイト(128バイト)のキー(1024ビット)までの範囲内の符号なしビッグエンディアンです。

もちろん、BCRYPT_DH_ALGORITHMとなります。

+0

BcryptDeriveKeyを使ってそのような値を派生させる方法を知っていますか? pwszKDFパラメータにはどのような値を渡す必要がありますか? –

+0

ありがとうMaarten。 –

関連する問題