X.690

フリー百科事典ウィキペディアより
ナビゲーションにジャンプ 検索にジャンプ

X.690は、いくつかのASN.1エンコード形式 を指定するITU-T標準です。

Basic Encoding Rules (BER) は、データをバイナリ形式にエンコードするために ASN.1 標準によって定められた元の規則です。ASN.1 用語で転送構文と総称されるルールは、データのエンコードに使用される正確なオクテット(8 ビット バイト) を指定します。

X.680では、ブール値、数値、文字列、複合構造などのデータ型を宣言するための構文が定義されています。各タイプの定義には、識別番号も含まれています。X.680 では、BooleanType、IntegerType、OctetStringType など、いくつかのプリミティブデータ型が定義されています。(ASN.1 は、他の型から構築された構築型も提供します。)型はクラスに関連付けられます。たとえば、プリミティブ型はユニバーサルクラスの一部です。他の 3 つのクラス ( applicationprivate、およびcontext-specific ) は、特定のアプリケーションのカスタマイズをサポートするための本質的に異なるスコープです。組み合わせて、クラスおよびtype form a tagであるため、一意のデータ定義に対応します。X.690 には、これらのタグ、データ値 (コンテンツ)、およびそのエンコードされたデータの長さをエンコードするためのルールが含まれています。

BER は、BER の 2 つのサブセット ( Canonical Encoding RulesおよびDistinguished Encoding Rules ) とともに、ASN.1 ドキュメント シリーズの一部であるITU-Tの X.690 標準ドキュメント によって定義されています。

BERエンコーディング

Basic Encoding Rules の形式は、ASN.1 データ構造をエンコードするための自己記述型および自己区切り型の形式を指定します。各データ要素は、タイプ識別子、長さの説明、実際のデータ要素、および必要に応じてコンテンツ終了マーカーとしてエンコードされます。これらのタイプのエンコーディングは、一般にタイプ - 長さ - 値(TLV) エンコーディングと呼ばれます。ただし、BER の用語では、identifier-length-contentsです。この形式により、受信者は、データのサイズ、内容、または意味に関する事前知識を必要とせずに、不完全なストリームから ASN.1 情報をデコードできます。[1] データ エンコーディングは、次の順序で 3 つまたは 4 つのコンポーネントで構成されます。

識別子のオクテット
タイプ
さのオクテット
内容 オクテット
End-of-Contents オクテット
(不定形の場合のみ)

Length がゼロの場合、NULL タイプなどの Contents オクテットがないことに注意してください。End-of-Contents オクテットは、Length の不定形式にのみ使用されます。

識別子オクテット

BER識別子のオクテットは、ASN.1タグをエンコードしますユニバーサル クラス タグのリストは、Rec. ITU-T X.680、条項 8、表 1。[2] 次のタグは ASN.1 にネイティブです。

タイプ、ユニバーサル クラス
名前 許可された建設 タグ番号
小数 16 進数
コンテンツの終わり (EOC) 原生的 0 0
ブール値 原生的 1 1
整数 原生的 2 2
ビット文字列 両方 3 3
オクテット文字列 両方 4 4
ヌル 原生的 5 5
オブジェクト識別子 原生的 6 6
オブジェクト記述子 両方 7 7
外部の 構築済み 8 8
REAL (フロート) 原生的 9 9
列挙された 原生的 10
組み込み PDV 構築済み 11 B
UTF8文字列 両方 12
相対 OID 原生的 13 D
時間 原生的 14
予約済み 15
SEQUENCE と SEQUENCE OF 構築済み 16 10
SET と SET OF 構築済み 17 11
数値文字列 両方 18 12
印刷可能な文字列 両方 19 13
T61文字列 両方 20 14
VideotexString 両方 21 15
IA5文字列 両方 22 16
UTC 時間 両方 23 17
一般化された時間 両方 24 18
グラフィック文字列 両方 25 19
可視文字列 両方 26 1A
一般文字列 両方 27 1B
UniversalString 両方 28 1C
文字列 構築済み 29 1D
BMP文字列 両方 30 1E
日にち 原生的 31 1F
時刻 原生的 32 20
日付時刻 原生的 33 21
間隔 原生的 34 22
OID-IRI 原生的 35 23
相対 OID IRI 原生的 36 24


エンコーディング

識別子のオクテットは、ASN.1 タグのクラス番号とタイプ番号をエンコードします。また、コンテンツのオクテットが構成値またはプリミティブ値を表すかどうかもエンコードします。識別子は、1 つまたは複数のオクテットにまたがります。

オクテット 1 オクテット 2 … n
タグタイプ> 30 10の場合のみ
8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1
タグクラス パソコン タグの種類(0 ~ 30 10の場合) 長い形式
31 10 = ロングフォーム 1=もっと タグタイプの7ビット


最初のオクテットでは、ビット 6 は型がプリミティブか構築型かをエンコードし、ビット 7 ~ 8 はタグのクラスをエンコードし、ビット 1 ~ 5 はタグの型をエンコードします。次の値が可能です。

クラス 価値 説明
ユニバーサル 0 タイプはASN.1にネイティブです
応用 1 タイプは特定の 1 つのアプリケーションに対してのみ有効です
コンテキスト固有 2 このタイプの意味は、コンテキスト (シーケンス、セット、または選択肢内など) によって異なります。
プライベート 3 プライベート仕様で定義
パソコン 価値 説明
プリミティブ (P) 0 内容のオクテットは値を直接エンコードします。
構築済み (C) 1 コンテンツ オクテットには、0、1、またはそれ以上のエンコーディングが含まれます。

タグのタイプが 5 ビット (0-30 10 ) に収まる場合、識別子は 1 バイト (短い形式) になります。タグのタイプが 5 ビットのタグ フィールドに対して大きすぎる場合 (> 30 10 )、さらにオクテット (ロング フォーム) でエンコードする必要があります

最初のオクテットは以前のようにクラスとプリミティブ/構築をエンコードし、ビット 1 ~ 5 は 1 です。タグ番号は次のオクテットでエンコードされます。さらにオクテットがある場合はそれぞれのビット 8 が 1 で、ビット 1 ~ 7 がエンコードされます。タグ番号。タグ番号のビットを組み合わせたビッグエンディアンで、タグ番号をエンコードします。後続のオクテットの最小数をエンコードする必要があります。つまり、最初の次のオクテットでビット 1 ~ 7 がすべて 0 であってはなりません。

長さのオクテット

長さオクテットには、定形と不定形の 2 つの形式があります。

最初の長さのオクテット
ビット
8 7 6 5 4 3 2 1
明確、短い 0 長さ (0 ~ 127)
不定 1 0
明確な、長い 1 次のオクテットの数 (1 ~ 126)
予約済み 1 127

定形

これはコンテンツ オクテットの数をエンコードし、タイプがプリミティブまたは構築され、データがすぐに利用できる場合に常に使用されます。短い形式と長い形式があり、さまざまな長さの範囲をエンコードできます。数値データは符号なし整数としてエンコードされ、最下位ビットが常に最初 (右側) になります。

短い形式は、ビット 8 が 0 である単一のオクテットで構成され、ビット 1 ~ 7 は長さ (0 の場合もある) をオクテット数としてエンコードします。

長い形式は、長さを含む 1 つ以上の後続のオクテットが続く 1 つの最初のオクテットで構成されます。最初のオクテットでは、ビット 8 は 1 で、ビット 1 ~ 7 (値 0 と 127 を除く) は、後続のオクテットの数をエンコードします。[1] 次のオクテットは、ビッグエンディアンとして、長さ (0 の場合もある) をオクテット数としてエンコードします。

長い形式の例、長さ 435
オクテット 1 オクテット 2 オクテット 3
1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1
長い形式 2 長さのオクテット 110110011 2 = 435 10コンテンツ オクテット

不定形

これは長さをまったくエンコードしませんが、コンテンツ オクテットがマーカー オクテットで終了することを示します。これは構築された型に適用され、通常、エンコード時にコンテンツがすぐに利用できない場合に使用されます。

これは、ビット 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 は、BER から 1 つの送信者のオプションを除いてすべて削除されたものと同じです。

DER は、ASN.1 値をエンコードする方法を 1 つだけ提供する BER のサブセットです。DER は、暗号化などで一意のエンコーディングが必要な状況を想定しており、デジタル署名が必要なデータ構造が一意のシリアル化された表現を生成することを保証します。DER は、BERの正規形と見なすことができます。たとえば、BER では真のブール値を 255 個のゼロ以外のバイト値としてエンコードできますが、DER では真のブール値をエンコードする方法が 1 つあります。

最も重要な DER エンコーディングの制約は次のとおりです。

  1. 長さのエンコードでは、定形を使用する必要があります
    • さらに、可能な限り短い長さのエンコードを使用する必要があります
  2. ビット文字列、オクテット文字列、および制限された文字列には、プリミティブ エンコーディングを使用する必要があります
  3. Set の要素は、タグ値に基づいてソートされた順序でエンコードされます

DER はX.509などのデジタル証明書に広く使用されています。

BER、CER、DER の比較

BER 形式と CER または DER 形式の主な違いは、Basic Encoding Rules によって提供される柔軟性です。上で説明したように、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 Encoding Rulesや 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]

比較すると、X.509などのデジタル証明書の転送には、より明確な DER エンコーディングが広く使用されています。

も参照

参考文献

  1. ^ a b c d 情報技術 – ASN.1 エンコーディング規則: Basic Encoding Rules (BER)、Canonical Encoding Rules (CER)、および Distinguished Encoding Rules (DER)の仕様、ITU-T X6.90、07/2002
  2. ^ 「ITU-T 勧告データベース」 .
  3. ^ リン、淮安。「ASN.1/BER 転送構文の最適パフォーマンスの推定」。ACM コンピューター通信レビュー。93 年 7 月 45 日 - 58 日。
  4. ^ ITU-T 勧告。X.892、ISO/IEC 24824-2
  5. ^ ITU-T X.694、ISO/IEC ISO/IEC 8825-5

外部リンク