HMAC の作成
HMAC を計算するには
- CryptAcquireContext を呼び出して、Microsoft Cryptographic Service Provider (CSP) へのポインターを取得します。
- CryptCreateHash を呼び出して、HMACハッシュ オブジェクトへのハンドルを作成します。 Algid パラメーターにCALG_HMACを渡します。 対称 キー のハンドルを hKey パラメーターに渡します。 この対称キーは、HMAC の計算に使用されるキーです。
- dwParam パラメーターを値HP_HMAC_INFOに設定して CryptSetHashParam を呼び出すことによって使用するハッシュの種類を指定します。 pbData パラメーターは、初期化されたHMAC_INFO構造体を指す必要があります。
- CryptHashData を呼び出して、データの HMAC の計算を開始します。 CryptHashData を最初に呼び出すと、XOR 演算子と内部文字列とデータを使用してキー値が結合されます。 XOR 操作の結果がハッシュされ、HMAC のターゲット データ (CryptHashData の呼び出しで渡された pbData パラメーターによって指されます) がハッシュされます。 必要に応じて、 CryptHashData への後続の呼び出しを行って、ターゲット データのハッシュを完了できます。
- dwParam パラメーターを HP_HASHVAL に設定して CryptGetHashParam を呼び出します。 この呼び出しにより、内部ハッシュが完了し、外部文字列が XOR とキーを使用して結合されます。 XOR 操作の結果がハッシュされ、(前の手順で完了した) 内部ハッシュの結果がハッシュされます。 次に、外部ハッシュが終了し、pbData パラメーターと dwDataLen パラメーターの長さで返されます。
Note
メッセージ暗号化とメッセージ認証コード (MAC) 生成の両方に同じ対称 (セッション) キーを使用しないでください。 両方に同じキーを使用すると、攻撃者によってメッセージがデコードされるリスクが大幅に高まります。