メインコンテンツまでスキップ

7. HMAC-SHA-96 Authentication Protocol (HMAC-SHA-96 認証プロトコル)

7. HMAC-SHA-96 Authentication Protocol (HMAC-SHA-96 認証プロトコル)

このセクションでは, HMAC-SHA-96 認証プロトコルについて説明します。このプロトコルは, SHA-NIST で説明されている SHA ハッシュ関数を使用し, RFC 2104 で説明されている HMAC モードで動作し, 出力を 96 ビットに切り詰めます。

このプロトコルは usmHMACSHAAuthProtocol によって識別されます。

時間の経過とともに, このプロトコルの代わりに, またはこのプロトコルに加えて, 他の認証プロトコルが定義される可能性があります。

7.1. Mechanisms (メカニズム)

HMAC-SHA-96 認証プロトコルは次のメカニズムを提供します:

Data Integrity Support (データ整合性サポート)

データ整合性をサポートするために, メッセージダイジェストアルゴリズムが必要です。SNMP メッセージの適切な部分にダイジェストが計算され, 受信者に送信されるメッセージの一部として含まれます。

Data Origin Authentication (データ発信元認証)

データ発信元認証とデータ整合性をサポートするために, ダイジェストを計算する前に秘密値が SNMP メッセージの前に付加されます; 計算されたダイジェストは送信前に部分的にメッセージに挿入されます。前に付加された秘密は送信されません。秘密値は, 適切なユーザーに代わってメッセージを発信することを承認されたすべての SNMP エンジンによって共有されます。

7.1.1. Digest Authentication Mechanism (ダイジェスト認証メカニズム)

このメモで定義されているダイジェスト認証メカニズムは次を提供します:

Integrity Verification (整合性検証)

受信メッセージの整合性の検証, つまり受信したメッセージが送信されたメッセージであること。

メッセージの整合性は, メッセージの適切な部分にダイジェストを計算することによって保護されます。ダイジェストはメッセージの発信者によって計算され, メッセージとともに送信され, メッセージの受信者によって検証されます。

User Verification (ユーザー検証)

メッセージが生成されたユーザーの検証。

ユーザーに代わってメッセージを生成することを承認された SNMP エンジンのみが知っている秘密値が HMAC モードで使用されます (RFC 2104 を参照)。また, メッセージ認証コードとして使用されるハッシュ関数出力を切り詰めることを推奨しています。

7.1.2. Algorithm Details (アルゴリズムの詳細)

このメカニズムは SHA (SHA-NIST) メッセージダイジェストアルゴリズムを使用します:

  • SNMP メッセージの指定された部分に対して特別な (HMAC) 方法で 160 ビット SHA ダイジェストが計算されます
  • このダイジェストの最初の 96 ビットが受信者に送信されるメッセージの一部として含まれます
  • メッセージで運ばれるダイジェストのサイズは 12 オクテットです
  • プライベート認証鍵 (秘密) のサイズは 20 オクテットです

詳細については, セクション 7.3 を参照してください。

7.2. Elements of the HMAC-SHA-96 Authentication Protocol (HMAC-SHA-96 認証プロトコルの要素)

このセクションには, このメモのこのセクションで定義されている認証モジュールを実現するために必要な定義が含まれています。

7.2.1. Users (ユーザー)

この認証プロトコルを使用した認証は, 定義された userName のセットを利用します。特定の SNMP エンジンでメッセージを認証する必要があるユーザーに代わって, その SNMP エンジンはそのユーザーに関する知識を持っている必要があります。別の SNMP エンジンと通信したい SNMP エンジンは, そのエンジンに知られているユーザーに関する知識 (そのユーザーの適用可能な属性に関する知識を含む) も持っている必要があります。

ユーザーとその属性は次のように定義されます:

<userName> (ユーザー名)

ユーザーの名前を表す文字列。

<authKey> (認証鍵)

ダイジェストを計算するときに使用されるユーザーの秘密鍵。SHA の場合, 20 オクテット長でなければなりません

7.2.2. msgAuthoritativeEngineID (権威あるエンジン ID)

認証されたメッセージに含まれる msgAuthoritativeEngineID 値は, その特定のメッセージの権威ある SNMP エンジンを指定します (SNMP アーキテクチャ文書 RFC 3411 の SnmpEngineID の定義を参照)。

ユーザーの (プライベート) 認証鍵は通常各権威ある SNMP エンジンで異なるため, snmpEngineID は認証プロセスに適切な鍵を選択するために使用されます。

7.2.3. SNMP Messages Using this Authentication Protocol (この認証プロトコルを使用する SNMP メッセージ)

この認証プロトコルを使用するメッセージは, msgSecurityParameters の一部として msgAuthenticationParameters フィールドを運びます。

このプロトコルの場合, msgAuthenticationParameters フィールドは wholeMsg に対して行われた HMAC-SHA-96 出力の最初の 12 オクテットを表すシリアル化された OCTET STRING です。

ダイジェストは wholeMsg に対して計算されるため, メッセージが認証されている場合, それはメッセージのすべてのフィールドが無傷で改ざんされていないことも意味します。

7.2.4. Services Provided by the HMAC-SHA-96 Authentication Module (HMAC-SHA-96 認証モジュールによって提供されるサービス)

このセクションでは, ユーザーベースセキュリティモジュールが HMAC-SHA-96 認証モジュールをサービスのために呼び出すときに, HMAC-SHA-96 認証モジュールが期待する入力と生成する出力について説明します。

7.2.4.1. Services for Generating an Outgoing SNMP Message (送信 SNMP メッセージを生成するためのサービス)

HMAC-SHA-96 認証プロトコルは, authKey の選択が呼び出し元によって行われ, 呼び出し元が使用する秘密鍵を渡すことを前提としています。

完了時, 認証モジュールは statusInformation を返し, メッセージダイジェストが正しく計算された場合は, 適切な場所にダイジェストが挿入された wholeMsg を返します。

抽象サービスプリミティブは次のとおりです:

statusInformation =              -- 成功または失敗
authenticateOutgoingMsg(
IN authKey -- 認証用の秘密鍵
IN wholeMsg -- 未認証の完全なメッセージ
OUT authenticatedWholeMsg -- 完全な認証済みメッセージ
)

パラメータ (Parameters):

  • statusInformation: 認証プロセスが成功したかどうかの指示。成功しなかった場合は問題の指示。

  • authKey: 認証アルゴリズムが使用する秘密鍵。この鍵の長さは 20 オクテットでなければなりません。

  • wholeMsg: 認証されるメッセージ。

  • authenticatedWholeMsg: 出力時の認証済みメッセージ。

7.2.4.2. Services for Processing an Incoming SNMP Message (受信 SNMP メッセージを処理するためのサービス)

HMAC-SHA-96 認証プロトコルは, authKey の選択が呼び出し元によって行われ, 呼び出し元が使用する秘密鍵を渡すことを前提としています。

完了時, 認証モジュールは statusInformation を返してメッセージが本物であるかどうかを示します。

抽象サービスプリミティブは次のとおりです:

statusInformation =              -- 成功または失敗
authenticateIncomingMsg(
IN authKey -- 認証用の秘密鍵
IN authParameters -- ネットワーク上で受信されたもの
IN wholeMsg -- ネットワーク上で受信されたもの
OUT authenticatedWholeMsg -- 認証がチェックされた
)

パラメータ (Parameters):

  • statusInformation: 認証プロセスが成功したかどうかの指示。成功しなかった場合は問題の指示。

  • authKey: 認証アルゴリズムが使用する秘密鍵。この鍵の長さは 20 オクテットでなければなりません。

  • authParameters: 受信メッセージからの msgAuthenticationParameters。

  • wholeMsg: 認証されるメッセージ。

  • authenticatedWholeMsg: 出力時の認証済みメッセージ。

7.3. Elements of Procedure (手順の要素)

このセクションでは, HMAC-SHA-96 認証プロトコルの手順について説明します。

7.3.1. Processing an Outgoing Message (送信メッセージの処理)

このセクションでは, SNMP エンジンが認証を使用することを指定する securityLevel を持つユーザーに代わって管理情報を含むメッセージを生成するときに従う手順について説明します。

ステップ 1: msgAuthenticationParameters を設定

msgAuthenticationParameters フィールドは, 12 個のゼロオクテットを含む OCTET STRING の RFC 3417 の規則に従ったシリアル化に設定されます。

ステップ 2: MAC を計算

ユーザーの秘密 authKey と msgAuthenticationParameters が 12 個のゼロオクテットに設定されたメッセージを使用して, HMAC-SHA アルゴリズムに従って MAC (メッセージ認証コード) を計算します:

MAC = HMAC-SHA(authKey, wholeMsg)

ここで:

  • authKey は 20 オクテットの秘密鍵です
  • wholeMsg は msgAuthenticationParameters が 12 個のゼロオクテットに設定されたメッセージ全体です

ステップ 3: MAC を切り詰めて挿入

20 オクテット MAC 値の最初の 12 オクテットを取り, msgAuthenticationParameters フィールドに配置します。

ステップ 4: 結果を返す

authenticatedWholeMsg を呼び出し元モジュールに返します。

7.3.2. Processing an Incoming Message (受信メッセージの処理)

このセクションでは, SNMP エンジンが認証が使用されたことを指定する securityLevel を持つ管理情報を含むメッセージを処理するときに従う手順について説明します。

ステップ 1: パラメータを抽出

受信メッセージから msgAuthenticationParameters を抽出して保存します。

ステップ 2: msgAuthenticationParameters をゼロに設定

メッセージ内の msgAuthenticationParameters フィールドを 12 個のゼロオクテットの OCTET STRING で置き換えます。

ステップ 3: 期待される MAC を計算

ユーザーの秘密 authKey と msgAuthenticationParameters が 12 個のゼロオクテットに設定されたメッセージを使用して, 期待される MAC を計算します:

expectedMAC = HMAC-SHA(authKey, wholeMsg)

ステップ 4: 期待される MAC を切り詰める

20 オクテット expectedMAC 値の最初の 12 オクテットを取ります。

ステップ 5: MAC を比較

抽出された msgAuthenticationParameters (ステップ 1 から) と計算された 12 オクテット MAC (ステップ 4 から) を比較します。

それらが等しい場合, メッセージは認証されています。等しくない場合, メッセージは本物ではなく, 破棄する必要があります。

ステップ 6: 結果を返す

成功または失敗を示す statusInformation を返します。

Implementation Notes (実装に関する注意事項)

  1. 鍵長 (Key Length): authKey は HMAC-SHA-96 の場合正確に 20 オクテットでなければなりません

  2. MAC 切り詰め (MAC Truncation): 160 ビット SHA 出力の最初の 96 ビット (12 オクテット) のみが使用されます

  3. 定数時間比較 (Constant-Time Comparison): MAC を比較するとき, 実装はタイミング攻撃を避けるために定数時間比較を使用する必要があります

  4. HMAC モード (HMAC Mode): プロトコルは, プレーン SHA ではなく RFC 2104 で指定されている HMAC モードを使用します

Security Considerations (セキュリティに関する考慮事項)

  • SHA の強度 (SHA Strength): SHA-1 は MD5 よりも強力な暗号化セキュリティを提供します。より良いセキュリティのために HMAC-MD5-96 よりも HMAC-SHA-96 が推奨されます

  • 鍵管理 (Key Management): 20 オクテット authKey は秘密に保ち, 適切に管理する必要があります

  • 切り詰め (Truncation): MAC を 160 ビットから 96 ビットに切り詰めるとセキュリティが若干低下しますが, SNMP アプリケーションでは許容範囲と見なされます

  • アルゴリズムの選択 (Algorithm Selection): 新しいデプロイメントでは, 利用可能な場合は SHA-2 または SHA-3 ベースの HMAC バリアントの使用を検討してください