Network Working Group M. Eisler Request for Comments: 5403 NetApp Updates: 2203 February 2009 Category: Standards Track
RPCSEC_GSS Version 2
Status of This Memo
このメモのステータス
This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited.
この文書は、インターネットコミュニティのためのインターネット標準トラックプロトコルを指定し、改善のための議論と提案を要求します。このプロトコルの標準化状態と状態への「インターネット公式プロトコル標準」(STD 1)の最新版を参照してください。このメモの配布は無制限です。
Copyright Notice
著作権表示
Copyright (c) 2009 IETF Trust and the persons identified as the document authors. All rights reserved.
著作権(C)2009 IETF信託とドキュメントの作成者として特定の人物。全著作権所有。
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.
この文書では、BCP 78と、この文書の発行日に有効なIETFドキュメント(http://trustee.ietf.org/ライセンス情報)に関連IETFトラストの法律の規定に従うものとします。彼らは、この文書に関してあなたの権利と制限を説明するように、慎重にこれらの文書を確認してください。
Abstract
抽象
This document describes version 2 of the RPCSEC_GSS protocol. Version 2 is the same as version 1 (specified in RFC 2203) except that support for channel bindings has been added. RPCSEC_GSS allows remote procedure call (RPC) protocols to access the Generic Security Services Application Programming Interface (GSS-API).
この文書では、RPCSEC_GSSプロトコルのバージョン2を説明します。バージョン2チャネルバインディングのためにそのサポートが追加された以外は(RFC 2203で指定された)バージョン1と同じです。 RPCSEC_GSSは、リモートプロシージャコール(RPC)プロトコルがGeneric Security Servicesアプリケーションプログラミングインターフェイス(GSS-API)にアクセスできるようになります。
Table of Contents
目次
1. Introduction and Motivation .....................................2 1.1. Requirements Language ......................................3 2. Channel Bindings Explained ......................................3 3. The RPCSEC_GSSv2 Protocol .......................................4 3.1. Compatibility with RPCSEC_GSSv1 ............................4 3.2. New Version Number .........................................5 3.3. New Procedure - RPCSEC_GSS_BIND_CHANNEL ....................7 3.4. New Security Service - rpc_gss_svc_channel_prot ...........10 4. Version Negotiation ............................................11 5. Native GSS Channel Bindings ....................................11 6. Operational Recommendation for Deployment ......................11 7. Implementation Notes ...........................................11 8. Acknowledgments ................................................11 9. Security Considerations ........................................11 10. References ....................................................13 10.1. Normative References .....................................13 10.2. Informative References ...................................14
This document describes RPCSEC_GSS version 2 (RPCSEC_GSSv2). RPCSEC_GSSv2 is the same as RPCSEC_GSS version 1 (RPCSEC_GSSv1) [1] except that support for channel bindings [2] has been added. The primary motivation for channel bindings is to securely take advantage of hardware-assisted encryption that might exist at lower levels of the networking protocol stack, such as at the Internet Protocol (IP) layer in the form of IPsec (see [7] and [8] for information on IPsec channel bindings). The secondary motivation is that even if lower levels are not any more efficient at encryption than the RPCSEC_GSS layer, if encryption is occurring at the lower level, it can be redundant at the RPCSEC_GSS level.
このドキュメントでは、RPCSEC_GSSバージョン2(RPCSEC_GSSv2)について説明します。 RPCSEC_GSSv2は、チャネルバインディングのそのサポートを除いて、[1] RPCSEC_GSSバージョン1(RPCSEC_GSSv1)と同一である[2]が追加されました。チャネルバインディングのための主要な動機は確実ようにIPsecの形でインターネットプロトコル(IP)レイヤでのようなネットワーク・プロトコル・スタックの下位レベルで存在する可能性がハードウェア支援暗号化を利用することである(参照[7]と[ 8]のIPsecチャネルバインディングの詳細について)。二次動機は、より低いレベルは、任意のより効率的なRPCSEC_GSS層よりも暗号化でなくても暗号化は、より低いレベルで発生している場合、それはRPCSEC_GSSレベルで冗長であることができるということです。
RPCSEC_GSSv2 and RPCSEC_GSSv1 are protocols that exchange tokens emitted by the Generic Security Services (GSS) framework, which is defined in [3], and differ only in the support for GSS channel bindings in RPCSEC_GSSv2. GSS itself supports channel bindings, and in theory RPCSEC_GSSv2 could use native GSS channel bindings to achieve the effects described in this section. However, as Section 1.1.6 of [3] states, not all implementations of all GSS mechanisms support channel bindings. This is sufficient justification for the approach taken in this document: modify the RPCSEC_GSS protocol to support channel bindings independent of the capabilities of the GSS mechanism being used.
RPCSEC_GSSv2とRPCSEC_GSSv1 [3]で定義されている一般的なセキュリティサービス(GSS)フレームワークによって放出されたトークンを交換するプロトコルであり、RPCSEC_GSSv2でGSSチャネルバインディングのサポートのみが異なります。 GSS自体はチャネルバインディングをサポートしており、理論的にはRPCSEC_GSSv2は、このセクションで説明した効果を達成するためにネイティブGSSチャネルバインディングを使用することができます。しかしながら、[3]の状態のセクション1.1.6のように、すべてのGSS機構のないすべての実装は、チャネルバインディングをサポートします。これは、この文書に取られたアプローチのために十分な正当化である:使用されているGSS機構の機能の独立チャネルバインディングをサポートするために、RPCSEC_GSSプロトコルを修正します。
Once an RPCSEC_GSS target and initiator are mutually assured that they are each using the same secure, end-to-end channel, the overhead of computing message integrity codes (MICs) for authenticating and integrity-protecting RPC requests and replies can be eliminated because the channel is performing the same function. Similarly, if the channel also provides confidentiality, the overhead of RPCSEC_GSS privacy protection can also be eliminated.
RPCSEC_GSSターゲットとイニシエータが相互にそれらがそれぞれ同じセキュアなエンド・ツー・エンドのチャネルを使用していることが保証されればため、RPC要求と応答を認証および完全性保護のためのメッセージ完全性コード(MIC値)を計算するオーバーヘッドをなくすことができますチャネルは、同じ機能を実行しています。チャネルはまた、機密性を提供する場合も同様に、RPCSEC_GSSプライバシー保護のオーバーヘッドも除去することができます。
The External Data Representation (XDR) [4] description is provided in this document in a way that makes it simple for the reader to extract into a ready-to-compile form. The reader can feed this document into the following shell script to produce the machine-readable XDR description of RPCSEC_GSSv2:
[4]説明を簡単な読者がすぐにコンパイル形式に抽出することを可能にするように、この文書で提供される外部データ表現(XDR)。読者はRPCSEC_GSSv2の機械可読XDR記述を生成するために、次のシェル・スクリプトにこの文書を供給することができます。
<CODE BEGINS>
<CODEが開始されます>
#!/bin/sh grep "^ *///" | sed 's?^ *///??'
ます。#!/ bin / shのはgrep "^ * ///" | SEDの?^ * /// ?? '
<CODE ENDS>
<CODEはENDS>
That is, if the above script is stored in a file called "extract.sh", and this document is in a file called "spec.txt", then the reader can do:
上記のスクリプトは、その後、読者が行うことができ、「extract.sh」と呼ばれるファイルに保存されており、この文書は「spec.txt」というファイルになっている場合には、次のとおりです。
<CODE BEGINS>
<CODEが開始されます>
sh extract.sh < spec.txt > rpcsec_gss_v2.x
SH extract.sh <spec.txt> rpcsec_gss_v2.x
<CODE ENDS>
<CODEはENDS>
The effect of the script is to remove leading white space from each line of the specification, plus a sentinel sequence of "///".
スクリプトの効果は、仕様の各ラインに加え、「///」のセンチネル列から先頭の空白を削除することです。
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [5].
この文書のキーワード "MUST"、 "MUST NOT"、 "REQUIRED"、、、、 "べきではない" "べきである" "ないもの" "ものとし"、 "推奨"、 "MAY"、および "OPTIONAL" はありますRFC 2119に記載されるように解釈される[5]。
If a channel between two parties is secure, there must be shared information between the two parties. This information might be secret or not. The requirement for secrecy depends on the specifics of the channel.
2つの当事者間のチャネルがセキュリティで保護されている場合は、両当事者間で情報が共有されなければなりません。この情報は秘密かないかもしれません。秘密のための要件は、チャネルの仕様に依存します。
For example, the shared information could be the concatenation of the public key of the source and destination of the channel (where each public key has a corresponding private key). Suppose the channel is not end-to-end, i.e., a man-in-the-middle (MITM) exists, and there are two channels, one from the initiator to the MITM, and one from the MITM to the target. The MITM cannot simply force each channel to use the same public keys, because a public key derives from a private key, and the key management system for each node will surely assign unique or random private keys. At most, the MITM can force one end of each channel to use the same public key. The MIC of the public keys from the initiator will not be verified by the target, because at least one of the public keys will be different. Similarly, the MIC of the public keys from the target will not be verified by the initiator because at least one of the public keys will be different.
例えば、共有情報は、(各公開鍵は、対応する秘密鍵を有する)チャネルの送信元と宛先の公開鍵の連結とすることができます。想定チャネルでないエンドツーエンド、すなわち、マン・イン・ザ・ミドル(MITM)が存在し、2つのチャネル、MITMにイニシエータから1、およびターゲットへMITMからの1つが存在します。公開鍵は、秘密鍵から派生しているためMITMは、単純に、同じ公開鍵を使用するように、各チャネルを強制することはできませんし、各ノードの鍵管理システムは確かにユニークなまたはランダムな秘密鍵を割り当てます。せいぜい、MITMは同じ公開鍵を使用するために、各チャネルの一方の端を強制することができます。公開鍵の少なくとも一方が異なるため、イニシエータからの公開鍵のMICは、ターゲットによって検証されることはありません。公開鍵の少なくとも一方が異なることになるので、同様に、対象からの公開鍵のMICは、イニシエータによって検証されることはありません。
A higher-layer protocol using the secure channel can safely exploit the channel to the mutual benefit of the higher-level parties if each higher-level party can prove:
各上位レベルのパーティが証明できる場合は、安全なチャネルを使用して上位層プロトコルは、安全に、より高いレベルの当事者の相互の利益のためにチャネルを活用することができます。
o They each know the channel's shared information.
O彼らはそれぞれのチャネルの共有情報を知っています。
o The proof of the knowledge of the shared information is in fact being conveyed by each of the higher-level parties, and not some other entities.
共有情報の知識の証明は、実際に、より高いレベルの当事者ではなく、いくつかの他のエンティティの各々によって搬送されているO。
RPCSEC_GSSv2 simply adds an optional round-trip that has the initiator compute a GSS MIC on the channel binding's shared information, and sends the MIC to the target. The target verifies the MIC, and in turn sends its own MIC of the shared information to the initiator that then verifies the target's MIC. This accomplishes three things. First, the initiator and target are mutually authenticated. Second, the initiator and target prove they know the channel's shared information, and thus are using the same channel. Third, the first and second things are done simultaneously.
RPCSEC_GSSv2は単にイニシエータは、チャネルの結合の共有情報にGSS MICを計算しているオプションの往復を追加し、ターゲットにMICを送信します。ターゲットは、MICを検証し、順番に、ターゲットのMICを検証し、イニシエータへの共有情報の独自のMICを送信します。これは、3つのことを実現します。まず、イニシエータとターゲットは、相互に認証されています。第二に、イニシエータとターゲットは、彼らは、チャネルの共有情報を知っていることを証明し、従って同じチャネルを使用しています。第三に、第一及び第二のものは、同時に行われます。
The RPCSEC_GSSv2 protocol will now be explained. The entire protocol is not presented. Instead the differences between RPCSEC_GSSv2 and RPCSEC_GSSv1 are shown.
RPCSEC_GSSv2プロトコルについて説明します。全体のプロトコルが提示されていません。代わりにRPCSEC_GSSv2とRPCSEC_GSSv1間の違いが示されています。
The functionality of RPCSEC_GSSv1 is fully supported by RPCSEC_GSSv2.
RPCSEC_GSSv1の機能が完全にRPCSEC_GSSv2によってサポートされています。
<CODE BEGINS>
<CODEが開始されます>
/// /* /// * Copyright (c) 2009 IETF Trust and the persons identified /// * as the document authors. All rights reserved. /// * /// * The document authors are identified in [RFC2203] and /// * [RFC5403]. /// * /// * Redistribution and use in source and binary forms, with /// * or without modification, are permitted provided that the /// * following conditions are met: /// * /// * o Redistributions of source code must retain the above /// * copyright notice, this list of conditions and the /// * following disclaimer. /// * /// * o Redistributions in binary form must reproduce the above /// * copyright notice, this list of conditions and the /// * following disclaimer in the documentation and/or other /// * materials provided with the distribution. /// * /// * o Neither the name of Internet Society, IETF or IETF /// * Trust, nor the names of specific contributors, may be /// * used to endorse or promote products derived from this /// * software without specific prior written permission. /// * /// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS /// * AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED /// * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE /// * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS /// * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO /// * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE /// * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, /// * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT /// * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR /// * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS /// * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF /// * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, /// * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING /// * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF /// * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// */ /// /* /// * This code was derived from [RFC2203]. Please /// * reproduce this note if possible.
/// */ /// /// enum rpc_gss_service_t { /// /* Note: the enumerated value for 0 is reserved. */ /// rpc_gss_svc_none = 1, /// rpc_gss_svc_integrity = 2, /// rpc_gss_svc_privacy = 3, /// rpc_gss_svc_channel_prot = 4 /* new */ /// }; /// /// enum rpc_gss_proc_t { /// RPCSEC_GSS_DATA = 0, /// RPCSEC_GSS_INIT = 1, /// RPCSEC_GSS_CONTINUE_INIT = 2, /// RPCSEC_GSS_DESTROY = 3, /// RPCSEC_GSS_BIND_CHANNEL = 4 /* new */ /// }; /// /// struct rpc_gss_cred_vers_1_t { /// rpc_gss_proc_t gss_proc; /* control procedure */ /// unsigned int seq_num; /* sequence number */ /// rpc_gss_service_t service; /* service used */ /// opaque handle<>; /* context handle */ /// }; /// /// const RPCSEC_GSS_VERS_1 = 1; /// const RPCSEC_GSS_VERS_2 = 2; /* new */ /// /// union rpc_gss_cred_t switch (unsigned int rgc_version) { /// case RPCSEC_GSS_VERS_1: /// case RPCSEC_GSS_VERS_2: /* new */ /// rpc_gss_cred_vers_1_t rgc_cred_v1; /// }; ///
<CODE ENDS>
<CODEはENDS>
Figure 1
図1
As is apparent from the above, the RPCSEC_GSSv2 credential has the same format as the RPCSEC_GSSv1 credential (albeit corrected so that the definition is in legal XDR description language that is also compatible with [9]; hence, the field "version", a keyword in RFC 1831, is replaced with "rgc_version"). Setting the rgc_version field to 2 indicates that the initiator and target support channel bindings.
したがって、フィールド「バージョン」、キーワード、上記から明らかなように、RPCSEC_GSSv2クレデンシャルは、定義も[9]と互換性のある法的XDR記述言語であるように修正いえRPCSEC_GSSv1資格(同じフォーマットを有しますRFC 1831には、 "rgc_version")に置き換えられています。 2にrgc_versionフィールドを設定すると、イニシエータとターゲットのサポートチャネルバインディングことを示しています。
<CODE BEGINS>
<CODEが開始されます>
/// struct rgss2_bind_chan_MIC_in_args { /// opaque rbcmia_bind_chan_hash<>; /// }; /// /// typedef opaque rgss2_chan_pref<>; /// typedef opaque rgss2_oid<>; /// /// struct rgss2_bind_chan_verf_args { /// rgss2_chan_pref rbcva_chan_bind_prefix; /// rgss2_oid rbcva_chan_bind_oid_hash; /// opaque rbcva_chan_mic<>; /// }; ///
<CODE ENDS>
<CODEはENDS>
Figure 2
図2
Once an RPCSEC_GSSv2 handle has been established over a secure channel, the initiator MAY issue RPCSEC_GSS_BIND_CHANNEL (Figure 1). Targets MUST support RPCSEC_GSS_BIND_CHANNEL. Like RPCSEC_GSS_INIT and RPCSEC_GSS_CONTINUE_INIT requests, the NULL RPC procedure MUST be used. Unlike those two requests, the arguments of the NULL procedure are not overloaded, because the verifier is of sufficient size for the purpose of RPCSEC_GSS_BIND_CHANNEL. The gss_proc field is set to RPCSEC_GSS_BIND_CHANNEL. The seq_num field is set as if gss_proc were set to RPCSEC_GSS_DATA. The service field is set to rpc_gss_svc_none. The handle field is set to that of an RPCSEC_GSS handle as returned by RPCSEC_GSS_INIT or RPCSEC_GSS_CONTINUE_INIT.
RPCSEC_GSSv2ハンドルは、安全なチャネルを介して確立された後、イニシエータはRPCSEC_GSS_BIND_CHANNEL(図1)を発行することができます。ターゲットはRPCSEC_GSS_BIND_CHANNELをサポートしなければなりません。 RPCSEC_GSS_INITとRPCSEC_GSS_CONTINUE_INIT要求と同様に、NULLのRPCの手順を使用しなければなりません。検証はRPCSEC_GSS_BIND_CHANNELの目的のために十分なサイズであるため、これら2つの要求とは異なり、NULL手続きの引数は、オーバーロードされていません。 gss_procフィールドはRPCSEC_GSS_BIND_CHANNELに設定されています。 gss_procがRPCSEC_GSS_DATAに設定されているかのようSEQ_NUMフィールドが設定されています。サービスフィールドはrpc_gss_svc_noneに設定されています。 RPCSEC_GSS_INITまたはRPCSEC_GSS_CONTINUE_INITで返されるハンドルフィールドはRPCSEC_GSSハンドルのように設定されています。
The RPCSEC_GSS_BIND_CHANNEL request is similar to the RPCSEC_GSS_DATA request in that the verifiers of both contain MICs. As described in Section 5.3.1 of [1], when gss_proc is RPCSEC_GSS_DATA, the verifier of an RPC request is set to the output of GSS_GetMIC() on the RPC header. When gss_proc is RPCSEC_GSS_BIND_CHANNEL the verifier of an RPC request is set to the XDR encoding on a value of data type rgss2_bind_chan_verf_args, which includes a MIC as described below. The rgss2_bind_chan_verf_args data type consists of three fields:
RPCSEC_GSS_BIND_CHANNEL要求は、両方の検証がMIC値を含むことをRPCSEC_GSS_DATA要求と同様です。 RPCヘッダの[1]、gss_procはRPCSEC_GSS_DATAある、RPCリクエストの検証をGSS_GetMIC(の出力に設定されている場合)のセクション5.3.1に記載されているように。 gss_procである場合RPCSEC_GSS_BIND_CHANNEL RPC要求の検証は、以下に記載されるようにMICを含むデータ型rgss2_bind_chan_verf_argsの値、にXDRエンコードに設定されています。 rgss2_bind_chan_verf_argsデータ型は、次の3つのフィールドで構成されています。
o rbcva_chan_bind_prefix. This is the channel binding prefix as described in [2] up to, but excluding, the colon (ASCII 0x3A) that separates the prefix from the suffix.
rbcva_chan_bind_prefix O。これは、チャネルバインディング[2]までに記載されているように、プレフィックスが、除く、サフィックスから接頭辞を分離コロン(ASCII 0x3A)です。
o rbcva_chan_bind_hash_oid. This is the object identifier (OID) of the hash algorithm used to compute rbcmia_bind_chan_hash. This field contains an OID encoded in ASN.1 as used by GSS-API in the mech_type argument to GSS_Init_sec_context ([3]). See [6] for the OIDs of the SHA one-way hash algorithms.
O rbcva_chan_bind_hash_oid。これはrbcmia_bind_chan_hashを計算するために使用されるハッシュアルゴリズムのオブジェクト識別子(OID)です。このフィールドは、もしGSS_Init_sec_contextにメカニズム種別引数でGSS-APIによって使用されるようにASN.1でエンコードされたOIDを含み([3])。 SHA一方向ハッシュアルゴリズムのOIDのために[6]参照。
o rbcva_chan_mic. This is the output of GSS_GetMIC() on the concatenation of the XDR-encoded RPC header ("up to and including the credential" as per [1]) and the XDR encoding of an instance of type data rgss2_bind_chan_MIC_in_args. The data type rgss2_bind_chan_MIC_in_args consists of one field, rbcmia_bind_chan_hash, which is a hash of the channel bindings as defined in [2]. The channel bindings are a "canonical octet string encoding of the channel bindings", starting "with the channel bindings prefix followed by a colon (ASCII 0x3A)". The reason a hash of the channel bindings and not the actual channel bindings are used to compute rbcva_chan_mic is that some channel bindings, such as those composed of public keys, can be relatively large, and thus place a higher space burden on the implementations to manage. One way hashes consume less space.
rbcva_chan_mic O。これはXDRエンコードRPCヘッダ(「までと信任状を含む」[1]による)及びタイプデータrgss2_bind_chan_MIC_in_argsのインスタンスのXDRエンコーディングの連結に)GSS_GetMIC(の出力です。データ型rgss2_bind_chan_MIC_in_args [2]で定義されるように、チャネルバインディングのハッシュであり、一つのフィールド、rbcmia_bind_chan_hash、から成ります。チャネルバインディングは「コロン(ASCII 0x3A)、続いて、チャネルバインディングの接頭辞」開始「チャネルバインディングの正規オクテットストリング符号化」です。実際のチャネルバインディングがrbcva_chan_mic計算するために使用されるチャネルバインディングとしないのハッシュは、公開鍵からなるものとして、いくつかのチャネルバインディングは、比較的大きく、したがって、管理するために実装で高い空間負担をかけることができるということである理由。片道ハッシュはより少ないスペースを消費します。
<CODE BEGINS>
<CODEが開始されます>
/// enum rgss2_bind_chan_status { /// RGSS2_BIND_CHAN_OK = 0, /// RGSS2_BIND_CHAN_PREF_NOTSUPP = 1, /// RGSS2_BIND_CHAN_HASH_NOTSUPP = 2 /// }; /// /// union rgss2_bind_chan_res switch /// (rgss2_bind_chan_status rbcr_stat) { /// /// case RGSS2_BIND_CHAN_OK: /// void; /// /// case RGSS2_BIND_CHAN_PREF_NOTSUPP: /// rgss2_chan_pref rbcr_pref_list<>; /// /// case RGSS2_BIND_CHAN_HASH_NOTSUPP: /// rgss2_oid rbcr_oid_list<>; /// }; /// /// struct rgss2_bind_chan_MIC_in_res { /// unsigned int rbcmr_seq_num; /// opaque rbcmr_bind_chan_hash<>; /// rgss2_bind_chan_res rbcmr_res; /// }; ///
/// struct rgss2_bind_chan_verf_res { /// rgss2_bind_chan_res rbcvr_res; /// opaque rbcvr_mic<>; /// }; ///
<CODE ENDS>
<CODEはENDS>
Figure 3
図3
The RPCSEC_GSS_BIND_CHANNEL reply is similar to the RPCSEC_GSS_DATA reply in that the verifiers of both contain MICs. When gss_proc is RPCSEC_GSS_DATA, the verifier of an RPC reply is set to the output of GSS_GetMIC() on the seq_num of the credential of the corresponding request (as described in Section 5.3.3.2 of [1]). When gss_proc is RPCSEC_GSS_BIND_CHANNEL, the verifier of an RPC reply is set to the XDR encoding of an instance of data type rgss2_bind_chan_verf_res, which includes a MIC as described below. The data type rgss2_bind_chan_verf_res consists of two fields.
RPCSEC_GSS_BIND_CHANNEL応答は、両方の検証がMIC値を含んでいることに応答RPCSEC_GSS_DATAと同様です。 gss_procがRPCSEC_GSS_DATAある場合、RPC応答の検証はGSS_GetMIC(の出力に設定されている)は、対応する要求([1]のセクション5.3.3.2に記載されているように)のクレデンシャルのSEQ_NUMに関する。 gss_procがRPCSEC_GSS_BIND_CHANNELある場合、RPC応答の検証は、以下に記載されるようにMICを含むデータ型rgss2_bind_chan_verf_resのインスタンスのXDRエンコーディングに設定されています。データ・タイプrgss2_bind_chan_verf_res 2つのフィールドから構成されています。
o rbcvr_res. The data type of this field is rgss2_bind_chan_res. The rgss2_bind_chan_res data type is a switched union consisting of three cases switched on the status contained in the rbcr_stat field.
rbcvr_res O。このフィールドのデータ型がrgss2_bind_chan_resです。 rgss2_bind_chan_resデータ型は3例からなる切り換え組合がrbcr_statフィールドに含まれている状態に切り換えられます。
* RGSS2_BIND_CHAN_OK. If this status is returned, the target accepted the channel bindings, and successfully verified rbcva_chan_mic in the request. No additional results will be in rbcvr_res.
* RGSS2_BIND_CHAN_OK。このステータスが返された場合、ターゲットはチャネルバインディングを受け入れ、そして成功した要求にrbcva_chan_mic検証しました。追加の結果はrbcvr_resになることはありません。
* RGSS2_BIND_CHAN_PREF_NOTSUPP. If this status is returned, the target did not support the prefix in the rbcva_chan_bind_prefix field of the arguments, and thus the RPCSEC_GSS_BIND_CHANNEL request was rejected. The target returned a list of prefixes it does support in the field rbcr_pref_list. Note that a channel can have multiple channel bindings each with different prefixes. The initiator is free to pick its preferred prefix. If the target does not support the prefix, the status RGSS2_BIND_CHAN_PREF_NOTSUPP will be returned, and the initiator can select its next most preferred prefix among the prefixes the target does support.
* RGSS2_BIND_CHAN_PREF_NOTSUPP。このステータスが返された場合、ターゲットは、引数のrbcva_chan_bind_prefixフィールドにプレフィックスをサポートしていませんでしたので、RPCSEC_GSS_BIND_CHANNEL要求が拒否されました。ターゲットは、それがフィールドrbcr_pref_listにサポートしないプレフィックスのリストを返しました。チャネルが異なるプレフィックスを持つ各複数のチャネルバインディングを持つことができることに注意してください。イニシエータは、その好ましい接頭辞を選択して自由です。ターゲットは、接頭辞をサポートしていない場合は、状況RGSS2_BIND_CHAN_PREF_NOTSUPPが返され、イニシエータは、ターゲットがサポートしています接頭辞の中でその次に最も好まプレフィックスを選択することができます。
* RGSS2_BIND_CHAN_HASH_NOTSUPP. If this status is returned, the target did not support the hash algorithm identified in the rbcva_chan_bind_hash_oid field of the arguments, and thus the RPCSEC_GSS_BIND_CHANNEL request was rejected. The target returned a list of OIDs of hash algorithms it does support in the field rbcr_oid_list. The array rbcr_oid_list MUST have one or more elements.
* RGSS2_BIND_CHAN_HASH_NOTSUPP。このステータスが返された場合、ターゲットは、引数のrbcva_chan_bind_hash_oidフィールドで識別ハッシュアルゴリズムをサポートしていませんでしたので、RPCSEC_GSS_BIND_CHANNEL要求が拒否されました。ターゲットは、それがフィールドrbcr_oid_listにサポートしないハッシュアルゴリズムのOIDのリストを返しました。配列rbcr_oid_listは、1つ以上の要素を持たなければなりません。
o rbcvr_mic. The value of this field is equal to the output of GSS_GetMIC() on the XDR encoding of an instance of data type rgss2_bind_chan_MIC_in_res. The data type rgss2_bind_chan_MIC_in_res consists of three fields.
rbcvr_mic O。このフィールドの値は、データ型rgss2_bind_chan_MIC_in_resのインスタンスのXDRエンコーディングにGSS_GetMIC()の出力に等しいです。データ・タイプrgss2_bind_chan_MIC_in_res三つのフィールドで構成されています。
* rbcmr_seq_num. The value of this field is equal to the field seq_num in the RPCSEC_GSS credential (data type rpc_gss_cred_vers_1_t).
* rbcmr_seq_num。このフィールドの値は、RPCSEC_GSS資格のフィールドSEQ_NUM(データ型rpc_gss_cred_vers_1_t)に等しいです。
* rbcmr_bind_chan_hash. This is the result of the one way hash of the channel bindings (including the prefix). If rbcr_stat is not RGSS2_BIND_CHAN_HASH_NOTSUPP, then the hash algorithm that is used to compute rbcmr_bind_chan_hash is that identified by the rbcva_chan_bind_oid_hash field in the arguments to RPCSEC_GSS_BIND_CHANNEL. If rbcr_stat is RGSS2_BIND_CHAN_HASH_NOTSUPP, then the hash algorithm used to compute rbcmr_bind_chan_hash is that identified by rbcr_oid_list[0] in the results.
* rbcmr_bind_chan_hash。これは、(プレフィックスを含む)は、チャネルバインディングの一方向ハッシュの結果です。 rbcr_statがRGSS2_BIND_CHAN_HASH_NOTSUPPない場合は、rbcmr_bind_chan_hashを計算するために使用されるハッシュアルゴリズムはRPCSEC_GSS_BIND_CHANNELの引数にrbcva_chan_bind_oid_hashフィールドによって識別ということです。 rbcr_statがRGSS2_BIND_CHAN_HASH_NOTSUPPある場合、rbcmr_bind_chan_hashを計算するために使用されるハッシュアルゴリズムは、結果にrbcr_oid_list [0]によって識別されるということです。
* rbcmr_res. The value of this field is equal to the value of the rbcvr_res field.
* rbcmr_res。このフィールドの値はrbcvr_resフィールドの値に等しいです。
RPCSEC_GSSv2 targets MUST support rpc_gss_svc_channel_prot.
RPCSEC_GSSv2ターゲットはrpc_gss_svc_channel_protをサポートしなければなりません。
The rpc_gss_svc_channel_prot service (Figure 1) is valid only if RPCSEC_GSSv2 is being used, an RPCSEC_GSS_BIND_CHANNEL procedure has been executed successfully, and the secure channel still exists. When rpc_gss_svc_channel_prot is used, the RPC requests and replies are similar to those of rpc_gss_svc_none except that the verifiers on the request and reply always have the flavor set to AUTH_NONE, and the contents are zero length.
rpc_gss_svc_channel_protサービス(図1)RPCSEC_GSSv2がRPCSEC_GSS_BIND_CHANNEL手順が正常に実行され、安全なチャネルがまだ存在し、使用されている場合にのみ有効です。 rpc_gss_svc_channel_protを使用する場合、RPC要求と応答は、要求と応答に検証が常にAUTH_NONEに設定風味を有し、その内容はゼロ長さであることを除いてrpc_gss_svc_noneと同様です。
Note that even though NULL verifiers are used when rpc_gss_svc_channel_prot is used, non-NULL RPCSEC_GSS credentials are used. In order to identify the principal sending the request, the same credential is used as before, except that service field is set to rpc_gss_svc_channel_prot.
rpc_gss_svc_channel_protが使用されている場合NULL検証が使用されているにもかかわらず、非NULL RPCSEC_GSS資格情報が使用されていることに注意してください。要求を送信主体を識別するために、同一の証明書は、サービスフィールドがrpc_gss_svc_channel_protするように設定されている以外は、前と同じように使用されます。
An initiator that supports version 2 of RPCSEC_GSS simply issues an RPCSEC_GSS request with the rgc_version field set to RPCSEC_GSS_VERS_2. If the target does not recognize RPCSEC_GSS_VERS_2, the target will return an RPC error per Section 5.1 of [1].
RPCSEC_GSSのバージョン2をサポートし、イニシエータは、単にRPCSEC_GSS_VERS_2に設定rgc_versionフィールドとRPCSEC_GSS要求を発行します。ターゲットはRPCSEC_GSS_VERS_2を認識しない場合、ターゲットは[1]のセクション5.1あたりのRPCエラーを返します。
The initiator MUST NOT attempt to use an RPCSEC_GSS handle returned by version 2 of a target with version 1 of the same target. The initiator MUST NOT attempt to use an RPCSEC_GSS handle returned by version 1 of a target with version 2 of the same target.
イニシエータは同じターゲットのバージョン1とターゲットのバージョン2で返さRPCSEC_GSSハンドルを使用しようとしてはなりません。イニシエータは同じターゲットのバージョン2を使用してターゲットのバージョン1で返さRPCSEC_GSSハンドルを使用しようとしてはなりません。
To ensure interoperability, implementations of RPCSEC_GSSv2 SHOULD NOT transfer tokens between the initiator and target that use native GSS channel bindings (as defined in Section 1.1.6 of [3]).
相互運用性を確保するために、RPCSEC_GSSv2の実装は、ネイティブGSSチャネルバインディング([3]のセクション1.1.6で定義されるように)を使用し、イニシエータとターゲットの間でトークンを転送すべきではありません。
RPCSEC_GSSv2 is a superset of RPCSEC_GSSv1, and so can be used in all situations where RPCSEC_GSSv1 is used. RPCSEC_GSSv2 should be used when the new functionality, channel bindings, is desired or needed.
RPCSEC_GSSv2はRPCSEC_GSSv1のスーパーセットであるのでRPCSEC_GSSv1が使用されているすべての状況で使用することができます。新機能、チャネルバインディングは、所望の又は必要なときRPCSEC_GSSv2を使用する必要があります。
Once a successful RPCSEC_GSS_BIND_CHANNEL procedure has been performed on an RPCSEC_GSSv2 context handle, the initiator's implementation may map application requests for rpc_gss_svc_none and rpc_gss_svc_integrity to rpc_gss_svc_channel_prot credentials. And if the secure channel has privacy enabled, requests for rpc_gss_svc_privacy can also be mapped to rpc_gss_svc_channel_prot.
成功RPCSEC_GSS_BIND_CHANNEL手順はRPCSEC_GSSv2・コンテキスト・ハンドル上で実行された後、イニシエータの実装では、資格情報をrpc_gss_svc_channel_protするrpc_gss_svc_noneとrpc_gss_svc_integrityのためのアプリケーション要求をマッピングすることができます。安全なチャネルはプライバシーが有効になっている場合や、rpc_gss_svc_privacyの要求もrpc_gss_svc_channel_protにマップすることができます。
Nicolas Williams had the idea for extending RPCSEC_GSS to support channel bindings. Alex Burlyga, Lars Eggert, Pasi Eronen, and Dan Romascanu reviewed the document and gave valuable feedback for improving its readability.
ニコラス・ウィリアムズは、チャネルバインディングをサポートするために、RPCSEC_GSSを拡張するためのアイデアを持っていました。アレックスBurlyga、ラースEggertの、パシEronen、およびダンRomascanuは、文書を検討し、その読みやすさを向上させるための貴重なフィードバックを与えました。
The base security considerations consist of:
ベースのセキュリティの考慮事項で構成されています。
o All security considerations from [1].
Oからのすべてのセキュリティ上の考慮事項[1]。
o All security considerations from [2].
Oからのすべてのセキュリティ上の考慮事項[2]。
o All security considerations from the actual secure channel being used.
O実際の安全なチャネルからのすべてのセキュリティ上の考慮事項は、使用されています。
Even though RPCSEC_GSS_DATA requests that use rpc_gss_svc_channel_prot protection do not involve construction of more GSS tokens, the target SHOULD stop allowing RPCSEC_GSS_DATA requests with rpc_gss_svc_channel_prot protection once the GSS context expires.
rpc_gss_svc_channel_prot保護を使用RPCSEC_GSS_DATA要求がよりGSSトークンの建設を伴わないにもかかわらず、ターゲットは、GSSコンテキストの有効期限が切れた後rpc_gss_svc_channel_prot保護とRPCSEC_GSS_DATA要求を許可停止する必要があります。
With the use of channel bindings, it becomes extremely critical that the message integrity code (MIC) used by the GSS mechanism that RPCSEC_GSS is using be difficult to forge. While this requirement is true for RPCSEC_GSSv1, and indeed any protocol that uses GSS MICs, the distinction in the seriousness is that for RPCSEC_GSSv1, forging a single MIC at most allows the attacker to succeed in injecting one bogus request. Whereas, with RPCSEC_GSSv2 combined with channel bindings, by forging a single MIC the attacker will succeed in injecting bogus requests as long as the channel exists. An example illustrates. Suppose we have an RPCSEC_GSSv1 initiator, a man-in-the-middle (MITM), an RPCSEC_GSSv1 target, and an RPCSEC_GSSv2 target. The attack is as follows.
チャネルバインディングを使用すると、それはRPCSEC_GSSが使用しているGSS機構によって使用されるメッセージ完全性コード(MIC)を偽造することが困難であることが極めて重要になります。この要件がRPCSEC_GSSv1、およびGSSマイクを使用して実際には任意のプロトコルのための事実ですが、深刻では区別がRPCSEC_GSSv1のために、単一MICを鍛造することで、ほとんどの攻撃者は1つの偽のリクエストを注入することに成功することを可能にするということです。 、一方でチャネルバインディングと組み合わせるRPCSEC_GSSv2で、単一MICを鍛造により攻撃者がいる限り、チャネルが存在する偽のリクエストを注入することに成功します。例が示しています。我々はRPCSEC_GSSv1開始剤のman-in-the-middle(MITM)、RPCSEC_GSSv1ターゲット、およびRPCSEC_GSSv2目標を持っていると仮定します。次のように攻撃があります。
o The MITM intercepts the initiator's RPCSEC_GSSv1 RPCSEC_GSS_INIT message and changes the version number from 1 to 2 before forwarding to the RPCSEC_GSSv2 target, and changes the reply's version number from 2 to 1 before forwarding to the RPCSEC_GSSv1 initiator. Neither the client nor the server notice.
oをMITMは、イニシエータのRPCSEC_GSSv1のRPCSEC_GSS_INITメッセージをインターセプトし、RPCSEC_GSSv2ターゲットに転送する前に1から2にバージョン番号を変更し、RPCSEC_GSSv1イニシエータに転送する前に2から1への応答のバージョン番号を変更します。クライアントもサーバー通知もありません。
o Once the RPCSEC_GSS handle is in an established state, the initiator sends its first RPCSEC_GSS_DATA request. The MITM constructs an RPCSEC_GSS_BIND_CHANNEL request, using the message integrity code (MIC) of the RPCSEC_GSS_DATA request. It is likely the RPCSEC_GSSv2 target will reject the request. The MITM continues to reiterate each time the initiator sends another RPCSEC_GSS_DATA request. With enough iterations, the probability of a MIC from an RPCSEC_GSS_DATA being successfully verified in the forged RPCSEC_GSS_BIND_CHANNEL increases. Once the MITM succeeds, it can send RPCSEC_GSS_DATA requests with a security service of rpc_gss_svc_channel_prot, which does not have MICs in the RPC request's verifier.
RPCSEC_GSSハンドルは確立状態になると、O、イニシエータは、その最初のRPCSEC_GSS_DATA要求を送信します。 MITMはRPCSEC_GSS_DATA要求のメッセージ完全性コード(MIC)を使用して、RPCSEC_GSS_BIND_CHANNEL要求を構築します。 RPCSEC_GSSv2ターゲットが要求を拒否します可能性があります。 MITMは、イニシエータが、別のRPCSEC_GSS_DATA要求を送信するたびに繰り返すし続けています。十分な反復で、RPCSEC_GSS_DATAからMICの確率は正常鍛造RPCSEC_GSS_BIND_CHANNEL増加で検証されます。 MITMが成功したら、それはRPC要求の検証でのMICを持っていませんrpc_gss_svc_channel_protのセキュリティサービスとRPCSEC_GSS_DATA要求を送信することができます。
The implementation of RPCSEC_GSSv2 can use at least two methods to thwart these attacks.
RPCSEC_GSSv2の実装では、これらの攻撃を阻止するために、少なくとも2つのメソッドを使用することができます。
o The target SHOULD require a stronger MIC when sending an RPCSEC_GSS_BIND_CHANNEL request instead of an RPCSEC_GSS_DATA request -- e.g., if HMACs are used for the MICs, require the widest possible HMAC (in terms of bit length) that the GSS mechanism supports. If HMACs are being used, and the target expects N RPCSEC_GSS_DATA requests to be sent on the context before it expires, then the target SHOULD require an HMAC for RPCSEC_GSS_BIND_CHANNEL that is log base 2 N bits longer than what it normally requires for RPCSEC_GSS_DATA requests. If a long enough MIC is not available, then the target could artificially limit the number of RPCSEC_GSS_DATA requests it will allow on the context before deleting the context.
RPCSEC_GSS_DATA要求の代わりRPCSEC_GSS_BIND_CHANNEL要求を送信するとき、Oターゲットが強いMICを要求すべきである - 例えば、HMACsはMIC値のために使用される場合、GSS機構がサポートする(ビット長の点で)最も広い可能HMACを必要とします。 HMACsが使用されている場合、ターゲットはそれが期限切れになる前にN RPCSEC_GSS_DATA要求がコンテキスト上で送信されることを想定し、ターゲットは、ログベースは、それが通常RPCSEC_GSS_DATA要求に対して必要と何よりも長い2 NビットであるRPCSEC_GSS_BIND_CHANNELためHMACを要求すべきです。十分な長さMICが使用できない場合は、ターゲットは、人為的にRPCSEC_GSS_DATAの数は、それがコンテキストを削除する前に、コンテキストに許可する要求制限されることがあります。
o Each time an RPCSEC_GSSv2 target experiences a failure to verify the MIC of an RPCSEC_GSS_BIND_CHANNEL request, it SHOULD reduce the lifetime of the underlying GSS context, by a significant fraction, thereby preventing the MITM from using the established context for its attack. A possible heuristic is that if the target believes the possibility that failure to verify the MIC was because of an attack is X percent, then the context's lifetime would be reduced by X percent. For simplicity, an implementer might set X to be 50 percent, so that the context lifetime is halved on each failed verification of an RPCSEC_GSS_BIND_CHANNEL request and thus rapidly reduced to zero on subsequent requests. For example, with a context lifetime of 8 hours (or 28800 seconds), 15 failed attempts by the MITM would cause the context to be destroyed.
O RPCSEC_GSSv2対象がRPCSEC_GSS_BIND_CHANNEL要求のMICを検証する故障を経験するたびに、それによって、その攻撃のために確立されたコンテキストを使用してからMITMを防止する、かなりの割合によって、基礎となるGSSコンテキストの寿命を減少させるはずです。可能なヒューリスティックは、ターゲットがMICを確認するために、障害があるため、攻撃であった可能性がX%であると考えている場合は、コンテキストの寿命がX%削減されるだろうということです。コンテキストの寿命はそれぞれRPCSEC_GSS_BIND_CHANNEL要求の検証に失敗した上半分、従って急速に後続の要求にゼロに低減されるように簡単にするために、Xを設定するかもしれない実装は、50%でした。例えば、8時間(または28800秒)のコンテキストの寿命と、15がMITMによって試みはコンテキストが破壊される原因となる障害が発生しました。
A method of mitigation that was considered was to protect the RPCSEC_GSS version number with RPCSEC_GSSv2's RPCSEC_GSS_INIT and RPCSEC_GSS_CONTINUE_INIT tokens. Thus, the version number of RPCSEC_GSS would be in the tokens. This method does not completely mitigate the attack; it just moves the MIC guessing to the RPCSEC_GSS_INIT message. In addition, without changing GSS, or the GSS mechanism, there is no way to include the RPCSEC_GSS version number in the tokens. So for these reasons this method was not selected.
考慮された緩和の方法はRPCSEC_GSSv2のRPCSEC_GSS_INITとRPCSEC_GSS_CONTINUE_INITトークンでRPCSEC_GSSのバージョン番号を保護することでした。このように、RPCSEC_GSSのバージョン番号は、トークンになります。この方法は完全に攻撃を軽減しません。それだけでRPCSEC_GSS_INITメッセージに推測MICを移動します。また、GSS、又はGSS機構を変更することなく、トークンにRPCSEC_GSSのバージョン番号を含める方法はありません。したがって、これらの理由から、この方法は、選択されませんでした。
[1] Eisler, M., Chiu, A., and L. Ling, "RPCSEC_GSS Protocol Specification", RFC 2203, September 1997.
[1]アイスラー、M.、チウ、A.、およびL.リン、 "RPCSEC_GSSプロトコル仕様"、RFC 2203、1997年9月。
[2] Williams, N., "On the Use of Channel Bindings to Secure Channels", RFC 5056, November 2007.
[2]ウィリアムズ、N.、 "チャンネルを確保するためにチャネルバインディングの使用について"、RFC 5056、2007年11月。
[3] Linn, J., "Generic Security Service Application Program Interface Version 2, Update 1", RFC 2743, January 2000.
[3]リン、J.、 "ジェネリックセキュリティーサービス適用業務プログラムインタフェースバージョン2、アップデート1"、RFC 2743、2000年1月。
[4] Eisler, M., "XDR: External Data Representation Standard", STD 67, RFC 4506, May 2006.
[4]アイスラー、M.、 "XDR:外部データ表現標準"、STD 67、RFC 4506、2006年5月。
[5] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[5]ブラドナーのは、S.は、BCP 14、RFC 2119、1997年3月の "RFCsにおける使用のためのレベルを示すために"。
[6] Schaad, J., Kaliski, B., and R. Housley, "Additional Algorithms and Identifiers for RSA Cryptography for use in the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 4055, June 2005.
[6] Schaad、J.、Kaliski、B.、およびR. Housley氏、 "インターネットX.509公開鍵暗号基盤証明書と証明書失効リスト(CRL)プロフィールで使用するRSA暗号のための追加のアルゴリズムと識別子"、RFC 4055 、2005年6月。
[7] Williams, N., "IPsec Channels: Connection Latching", Work in Progress, November 2008.
[7]ウィリアムズ、N.、 "IPsecのチャンネル:接続ラッチ" 進歩、2008年11月、作業。
[8] Williams, N., "End-Point Channel Bindings for IPsec Using IKEv2 and Public Keys", Work in Progress, April 2008.
[8]ウィリアムズ、N.、「エンドポイントIPsecのチャネルバインディングをIKEv2の鍵と公開鍵の使用」、進歩、2008年4月に作業を。
[9] Srinivasan, R., "RPC: Remote Procedure Call Protocol Specification Version 2", RFC 1831, August 1995.
[9]スリニバサン、R.、 "RPC:リモートプロシージャコールプロトコル仕様バージョン2"、RFC 1831、1995年8月。
Author's Address
著者のアドレス
Mike Eisler NetApp 5765 Chase Point Circle Colorado Springs, CO 80919 US
マイク・アイスラーNetAppの5765チェイスポイントサークルコロラドスプリングズ、コロラド州80919米国
Phone: +1-719-599-9026 EMail: mike@eisler.com
電話:+ 1-719-599-9026 Eメール:mike@eisler.com