MakeSignature 関数 (sspi.h)

MakeSignature 関数は、メッセージの暗号化チェックサムを生成し、メッセージの損失や挿入を防ぐためのシーケンス情報も含みます。 MakeSignature を使用すると、選択したメカニズムでサポートされている場合は、アプリケーションで複数の暗号化アルゴリズムを選択できます。 MakeSignature 関数は、コンテキスト ハンドルによって参照されるセキュリティ コンテキストを使用します。

この関数は、Schannel セキュリティ サポート プロバイダー (SSP) ではサポートされていません。

構文

KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY MakeSignature(
  [in]      PCtxtHandle    phContext,
  [in]      unsigned long  fQOP,
  [in, out] PSecBufferDesc pMessage,
  [in]      unsigned long  MessageSeqNo
);

パラメーター

[in] phContext

メッセージの署名に使用するセキュリティ コンテキストへのハンドル。

[in] fQOP

保護の品質を示すパッケージ固有のフラグ。 セキュリティ パッケージでは、このパラメーターを使用して、暗号化アルゴリズムの選択を有効にすることができます。

Digest SSP を使用する場合は、このパラメーターを 0 に設定する必要があります。

[in, out] pMessage

SecBufferDesc 構造体へのポインター。 入力時に、構造体は署名するメッセージを含む 1 つ以上の SecBuffer 構造体を参照します。 関数は、SECBUFFER_READONLY_WITH_CHECKSUM属性を持つバッファーを処理しません。

SecBufferDesc 構造体は、シグネチャを受け取るSECBUFFER_TOKEN型の SecBuffer 構造体も参照します。

ダイジェスト SSP を HTTP 認証プロトコルとして使用する場合は、バッファーを次のように構成する必要があります。

Buffer #/buffer type 意味
0
SECBUFFER_TOKEN
空白。
1
SECBUFFER_PKG_PARAMS
メソッド。
2
SECBUFFER_PKG_PARAMS
URL。
3
SECBUFFER_PKG_PARAMS
HEntity。 詳細については、「 ダイジェスト チャレンジ応答の入力バッファー」を参照してください。
4
SECBUFFER_PADDING
空白。 署名を受け取ります。
 

ダイジェスト SSP を SASL メカニズムとして使用する場合、バッファーは次のように構成する必要があります。

Buffer #/buffer type 意味
0
SECBUFFER_TOKEN
空白。 署名を受け取ります。 このバッファーは、可能な限り最大の署名を保持するのに十分な大きさである必要があります。 QueryContextAttributes (General) 関数を呼び出し、SECPKG_ATTR_SIZESを指定することによって必要なサイズを決定します。 返された SecPkgContext_Sizes 構造体メンバー cbMaxSignature を確認します。
1
SECBUFFER_DATA
署名するメッセージ。
2
SECBUFFER_PADDING
空白。

[in] MessageSeqNo

トランスポート アプリケーションがメッセージに割り当てたシーケンス番号。 トランスポート アプリケーションがシーケンス番号を保持しない場合、このパラメーターは 0 です。

Digest SSP を使用する場合は、このパラメーターを 0 に設定する必要があります。 ダイジェスト SSP は、内部的にシーケンス番号を管理します。

戻り値

関数が成功した場合、関数は SEC_E_OKを返します。

関数が失敗した場合は、次のいずれかのエラー コードが返されます。

リターン コード 説明
SEC_I_RENEGOTIATE
リモート パーティは、新しいハンドシェイク シーケンスを必要とするか、アプリケーションがシャットダウンを開始したばかりです。 ネゴシエーション ループに戻り、 AcceptSecurityContext (General) または InitializeSecurityContext (General) をもう一度呼び出します。 最初の呼び出しで空の入力バッファーが渡されます。
SEC_E_INVALID_HANDLE
phContext で指定されたコンテキスト ハンドルが無効です。
SEC_E_INVALID_TOKEN
pMessage に有効なSECBUFFER_TOKEN バッファーが含まれていないか、バッファーが少なすぎます。
SEC_E_OUT_OF_SEQUENCE
nonce カウントが順序外です。
SEC_E_NO_AUTHENTICATING_AUTHORITY
セキュリティ コンテキスト (phContext) を再検証する必要があります。
STATUS_INVALID_PARAMETER
nonce カウントは数値ではありません。
SEC_E_QOP_NOT_SUPPORTED
クライアントとサーバーの間でネゴシエートされた保護の品質には 、整合性 チェックは含まれていませんでした。

注釈

MakeSignature 関数は、メッセージとコンテキストのセッション キーに基づく署名を生成します

VerifySignature 関数は、MakeSignature 関数によって署名されたメッセージを検証します。

トランスポート アプリケーションがシーケンス検出をサポートするためにセキュリティ コンテキストを作成し、呼び出し元がシーケンス番号を提供する場合、関数はこの情報をシグネチャに含めます。 これにより、メッセージの応答、挿入、抑制から保護されます。 セキュリティ パッケージには、トランスポート アプリケーションから渡されたシーケンス番号が組み込まれています。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー sspi.h (Security.h を含む)
Library Secur32.lib
[DLL] Secur32.dll

こちらもご覧ください

SSPI 関数

SecBuffer

SecBufferDesc

VerifySignature