X.690 は、いくつかのASN.1エンコード形式を規定するITU-T標準です。
- 基本エンコーディング規則 (BER)
- 標準エンコーディング規則 (CER)
- 識別符号化規則 (DER)
基本エンコード規則 (BER) は、データをバイナリ形式にエンコードするために ASN.1 標準で定められた元の規則です。ASN.1 用語では総称して転送構文と呼ばれるこの規則は、データのエンコードに使用される正確なオクテット(8 ビット バイト) を指定します。
X.680 は、ブール値、数値、文字列、複合構造などのデータ型を宣言するための構文を定義します。各型定義には識別番号も含まれます。X.680 は、BooleanType、IntegerType、OctetStringType などのいくつかのプリミティブデータ型を定義します (ASN.1 では、他の型から構築された構築型も提供されています)。型はクラスに関連付けられます。たとえば、プリミティブ型はユニバーサルクラスの一部です。他の 3 つのクラス ( application、private、およびcontext-specific ) は、基本的に特定のアプリケーションのカスタマイズをサポートするための異なるスコープです。クラスと型を組み合わせると、タグが形成され、それが一意のデータ定義に対応します。X.690 には、これらのタグ、データ値 (コンテンツ)、およびそのエンコードされたデータの長さをエンコードするための規則が含まれています。
BER は、BER の 2 つのサブセット ( Canonical Encoding RulesとDistinguished Encoding Rules )とともに、 ASN.1 ドキュメント シリーズの一部である ITU-Tの X.690 標準ドキュメントによって定義されています。
BERエンコーディング
基本エンコーディング規則は、ASN.1 データ構造をエンコードするための、部分的に自己記述的で自己区切るプロトコルを一般的に規定しています。各データ要素は、タイプ識別子、長さの説明、実際のデータ要素、および必要に応じてコンテンツ終了マーカーとしてエンコードされます。これらのタイプのエンコーディングは、一般にタイプ - 長さ - 値(TLV) エンコーディングと呼ばれます。ただし、BER の用語では、識別子 - 長さ - コンテンツです。
このタイプのフォーマットでは、受信側はデータのサイズ、内容、意味に関する事前知識を必要とせずに、不完全なストリームからASN.1情報をデコードできますが、プロトコルの詳細の一部は、トラフィックやソフトウェアの代表的なサンプルから提供されるか、リバースエンジニアリングされる必要があります。[1]
データのエンコーディングは、次の順序で 3 つまたは 4 つのコンポーネントで構成されます。
長さがゼロの場合、コンテンツ オクテットは存在しないことに注意してください (例: NULL タイプ)。コンテンツ終了オクテットは、長さの不定形式にのみ使用されます。
識別子オクテット
BER識別子オクテットはASN.1タグをエンコードします。ユニバーサルクラスタグのリストは、Rec. ITU-T X.680、第8節、表1に記載されています。[2] 以下のタグはASN.1固有のものです。
エンコーディング
識別子オクテットは、ASN.1 タグのクラス番号とタイプ番号をエンコードします。また、コンテンツ オクテットが構築された値を表すか、プリミティブ値を表すかもエンコードします。識別子は 1 つ以上のオクテットにまたがります。
最初のオクテットでは、ビット 6 はタイプがプリミティブか構築かをエンコードし、ビット 7 ~ 8 はタグのクラスをエンコードし、ビット 1 ~ 5 はタグのタイプをエンコードします。次の値が可能です。
タグのタイプが 5 ビット (0-30 10 ) に収まる場合、識別子は 1 バイトだけになります (短縮形式)。タグのタイプが 5 ビットのタグ フィールドに対して大きすぎる場合 (> 30 10 )、さらにオクテットでエンコードする必要があります (長形式)。
最初のオクテットは、前と同じようにクラスとプリミティブ/構築をエンコードし、ビット 1 ~ 5 は 1 です。タグ番号は後続のオクテットでエンコードされ、各オクテットのビット 8 は、さらにオクテットがある場合は 1 になり、ビット 1 ~ 7 はタグ番号をエンコードします。タグ番号ビットはビッグ エンディアンで結合され、タグ番号をエンコードします。後続のオクテットは最小限の数をエンコードする必要があります。つまり、後続の最初のオクテットのビット 1 ~ 7 がすべて 0 であってはなりません。
長さオクテット
長さオクテットには、定形式と不定形式の 2 つの形式があります。
定形
これはコンテンツ オクテットの数をエンコードし、タイプがプリミティブまたは構築されており、データがすぐに利用できる場合に常に使用されます。短い形式と長い形式があり、異なる範囲の長さをエンコードできます。数値データは、最下位ビットが常に最初 (右側) にある符号なし整数としてエンコードされます。
短縮形式は、ビット8 が 0 である単一のオクテットで構成され、ビット 1 ~ 7 は長さ (0 の場合もあります) をオクテット数としてエンコードします。
長い形式は、長さを含む1つ以上の後続オクテットが続く1つの最初のオクテットで構成されます。最初のオクテットでは、ビット8が1で、ビット1〜7(値0と127を除く)は後続のオクテットの数をエンコードします。[1] 後続のオクテットは、ビッグエンディアンとして、長さ(0の場合もあります)をオクテット数としてエンコードします。
不定形
これは長さをまったくエンコードしませんが、コンテンツ オクテットがマーカー オクテットで終了することをエンコードします。これは構築型に適用され、通常、エンコード時にコンテンツがすぐに利用できない場合に使用されます。
これは単一のオクテットで構成され、ビット 8 は 1、ビット 1 ~ 7 は 0 です。次に、2 つのコンテンツ終了オクテットでコンテンツ オクテットを終了する必要があります。
コンテンツオクテット
コンテンツオクテットは要素データ値をエンコードします。[1]
ASN.1 オブジェクトの存在、またはその空性のみを記録する場合は、コンテンツ オクテットが存在しない可能性があることに注意してください (したがって、要素の長さは 0 になります)。たとえば、ASN.1 NULL 値の場合がこれに該当します。
CER エンコーディング
CER (Canonical Encoding Rules) は、 ASN.1で記述されたデータ構造の明確な転送構文を生成するための BER の制限付きバリアントです。BER ではデータ値のエンコード方法を選択できますが、CER (DER と併用) では、基本エンコード規則で許可されているエンコードから 1 つのエンコードのみを選択し、残りのオプションは排除します。CER は、セキュリティ交換など、エンコードを保持する必要がある場合に役立ちます。
DERエンコーディング
DER (Distinguished Encoding Rules) は、 ASN.1で記述されたデータ構造の明確な転送構文を生成するための BER の制限付きバリアントです。CER と同様に、DER エンコーディングは有効な BER エンコーディングです。DER は、送信者のオプションを 1 つを除いてすべて削除した BER と同じものです。
DER は BER のサブセットであり、ASN.1 値をエンコードする方法を 1 つだけ提供します。DER は、暗号化など、一意のエンコードが必要な場合に使用し、デジタル署名が必要なデータ構造が一意のシリアル化表現を生成することを保証します。DER はBER の標準形式と見なすことができます。たとえば、BER ではブール値 true は 255 個のゼロ以外のバイト値のいずれかとしてエンコードできますが、DER ではブール値 true をエンコードする方法は 1 つしかありません。
最も重要な DER エンコーディング制約は次のとおりです。
- 長さのエンコードには定型形式を使用する必要があります
- さらに、可能な限り短い長さのエンコードを使用する必要があります。
- ビット文字列、オクテット文字列、制限文字列はプリミティブエンコーディングを使用する必要があります
- セットの要素は、タグ値に基づいてソートされた順序でエンコードされます。
DER は、 X.509などのデジタル証明書に広く使用されています。
BER、CER、DERの比較
BER 形式と CER 形式または DER 形式の主な違いは、基本エンコーディング ルールによって提供される柔軟性です。上で説明したように、BER は ASN.1 データ構造の転送用に ITU-T X.690 によって規定されたエンコーディング ルールの基本セットです。送信者に送信するデータ構造をエンコーディングするための明確なルールが与えられますが、送信者にエンコーディングの選択肢も与えられます。X.690 標準では、「送信者のオプションとして、基本エンコーディング ルールによって代替エンコーディングが許可されます。基本エンコーディング ルールに準拠していると主張する受信者は、すべての代替エンコーディングをサポートする必要があります」と述べられています。[1]
受信者は、BER 準拠を正当に主張するために、すべての合法的なエンコードを受け入れる準備ができていなければなりません。対照的に、CER と DER はどちらも、使用可能な長さの指定を 1 つのオプションに制限しています。そのため、CER と DER は BER の制限された形式であり、BER 標準の曖昧さを解消するのに役立ちます。
CER と DER は、送信者に課す一連の制限が異なります。CER と DER の基本的な違いは、DER が確定的な長さ形式を使用するのに対し、CER は厳密に定義された一部のケースで不定の長さ形式を使用することです。つまり、DER には常に先頭の長さ情報がありますが、CER はエンコードされたデータの長さを提供する代わりに、コンテンツ終了オクテットを使用します。このため、CER では大きなエンコード値に対して必要なメタデータが少なくなりますが、DER では小さなエンコード値に対してメタデータが必要になります。
エンコード ルールの選択を容易にするために、X.690 標準ドキュメントでは次のガイダンスが提供されています。
エンコードされた値が使用可能なメモリに収まるほど小さく、ネストされた値の一部をすばやくスキップする必要がある場合は、正規エンコード ルールよりも、区別エンコード ルールの方が適しています。使用可能なメモリに容易に収まらないほど大きい値をエンコードする必要がある場合、または値全体が使用可能になる前に値の一部をエンコードして送信する必要がある場合は、正規エンコード ルールの方が、区別エンコード ルールよりも適しています。エンコードにセット値または値のセットが含まれており、正規エンコード ルールと区別エンコード ルールが課す制限が必要ない場合は、正規エンコード ルールまたは区別エンコード ルールよりも、基本エンコード ルールの方が適しています。
BERエンコーディングに対する批判
BER は他のエンコード ルールに比べて「非効率的」であるという認識が一般的です。この認識は主に実装の不備によるもので、エンコード ルールに固有の欠陥があるわけではないと主張する人もいます。[3] これらの実装は、実装が容易なエンコード ロジックを使用するために BER が提供する柔軟性に依存していますが、エンコードされたデータ ストリームは必要以上に大きくなります。この非効率性が現実か認識かにかかわらず、この非効率性は、BER のパフォーマンスとサイズを改善しようとする Packed Encoding Rulesなどのいくつかの代替エンコード スキームにつながっています。
BERの柔軟性を維持しながら、代替のエンコード方式を使用する他の代替フォーマット規則も開発されています。これらの中で最も人気のあるのは、XMLエンコード規則やASN.1 SOAPなどのXMLベースの代替規則です。[4] さらに、XMLスキーマをASN.1スキーマに変換する標準マッピングがあり、BERを使用してエンコードできます。[5]
使用法
認識されている問題にもかかわらず、BER は、特にネイティブ データ エンコーディングが異なるシステムでデータを送信するための一般的な形式です。
- SNMPおよびLDAPプロトコルでは、必須のエンコード スキームとして BER を使用した ASN.1 が指定されています。
- クレジットカードとデビットカードのEMV規格では、BERを使用してデータをカードにエンコードします。
- デジタル署名標準PKCS #7 では、暗号化されたメッセージとそのデジタル署名またはデジタル エンベロープをエンコードするために、BER を使用した ASN.1 も指定されています。
- ISDN 、フリーダイヤル通話ルーティング、ほとんどの携帯電話サービスなどの多くの通信システムでは、ネットワーク経由で制御メッセージを送信するために、ある程度 BER を使用した ASN.1 を使用しています。
- GSM TAP(Transferred Account Procedures)、NRTRDE(Near Real Time Roaming Data Exchange)ファイルはBERを使用してエンコードされます。[1]
比較すると、より明確な DER エンコーディングは、X.509などのデジタル証明書の転送に広く使用されています。
参照
- ケルベロス
- パックされたエンコード規則(PER、X.691)
- プレゼンテーション層
- 構造化データ交換フォーマット ( SDXF )
- シリアル化
参考文献
- ^ abcd 情報技術 – ASN.1 エンコード規則: 基本エンコード規則 (BER)、標準エンコード規則 (CER)、および識別エンコード規則 (DER) の仕様、ITU-T X.690、2002 年 7 月
- ^ 「ITU-T勧告データベース」。
- ^ Lin, Huai-An. 「ASN.1/BER 転送構文の最適パフォーマンスの推定」 ACM Computer Communication Review。93 年 7 月、45 - 58 ページ。
- ^ ITU-T勧告X.892、ISO/IEC 24824-2
- ^ ITU-T X.694、ISO/IEC ISO/IEC 8825-5
外部リンク
- RSA の「ASN.1、BER、DER のサブセットに関する一般向けガイド」[永久リンク切れ ]
- ITU-T X.690、ISO/IEC 8825-1
- ITU-T X.892、ISO/IEC 24824-2
- ITU-T X.694、ISO/IEC 8825-5
- PKCS#7 について
- jASN1 beanit によるオープンソースの Java ASN.1 BER/DER コーディング ライブラリ
- ASN1js JavaScript ASN.1 BER エンコード/デコード ライブラリ (GitHub、GPL ライセンス)
- Peter Gutmann の「X.509 スタイル ガイド」
