2014年3月8日土曜日

フィールド構成 - 長さフィールド

長さフィールドには、定形式と不定形式の2つの形式があります。

定形式
符号化のデータが事前に分かっている場合に使用可能です。この場合、長さフィールドは1以上のオクテットで符号化され、この後に続くASN.1データ型の値のオクテット数を表します。
符号化データが127オクテット以下の場合、短形式(Short Form)と呼ばれる単一オクテットに符号化されます。
短形式の例

符号化データの長さが128オクテット以上の場合、長さフィールドは、長形式(Long Form)と呼ばれる2つ以上のオクテットに符号化されます。長形式の場合、先頭オクテットの最上位ビットに1を設定し、残りの7ビットでこの後に続く長さフィールドのオクテット数を設定します。
長形式の例

不定形式
不定形式には、長さフィールドに固定値'80'Hを設定します。
不定形式の例


2014年3月1日土曜日

2013年3月4日月曜日

フィールド構成 - タグフィールド

タグフィールド

タグフィールドは、ASN.1データ型を識別するためのフィールドです。フィールドは、1オクテット以上のオクテットから構成されます。このフィールドは、ASN.1データ型に関するクラス、タグ番号、符号化上の構造種別(基本型・構造型)から構成されます。
クラスは4つのクラスがあり、2ビット(ビット8およびビット7を使用)で表現されます。


符号化上の構造種別は1ビット(ビット6を使用)で表現されます。


タグフィールドを1オクテットで表現した場合、タグ番号に5ビットを使用することができ、その場合、64種類のタグ番号(データ型)を識別することが可能です。これでは、64種類以上のタグ番号(データ型)を識別することが不可能であるため、以下のような規則で符号化を行います。

  1. タグ番号が30以下の場合、残りの5ビットで表現します。
  2. タグ番号が31以上の場合、残りの5ビットをすべて1で設定し、続くオクテットでタグ番号をを表現します。その場合、符号化は以下の方法で行います。

  • 第二オクテット以降の各オクテットの最上位ビットは、タグフィールドの最終オクテットか否かを表わします。最上位ビットが0の場合、タグフィールドの最終オクテットであることを示します。この時、タグ番号の値は、第二オクテット以降の各オクテットの下位7ビットを連結して得られる非負整数の表現で符号化されます。

タグ番号が30以下の場合


タグ番号が31以上128以下の場合

タグ番号が129以上の場合



2013年2月16日土曜日

基本符号化規則(BER)

概要

ASN.1の構文は、符号化規則によって、オクテット列(バイト列)に変換します。基本符号化規則は,TLV符号化と呼ばれる技術を利用しています。TLV符号化はデータを情報タイプ(Type)、長さ(Length)、および値(Value)で構成します。ASN.1のデータ型は、基本符号化規則により、次の3つのフィールドに符号化されます。



定形式と不定形式

概要で示した形で符号化する形式を定形式と呼びます。基本符号化規則ではこの定形式のほかに、不定形式と呼ばれる符号化形式を提供しています。



ビットの並び

基本符号化規則は、ASN.1のデータ型を8ビットのオクテット単位に符号化します。オクテットの並びは、最上位オクテットから最下位オクテットへ左から順に第一オクテット、第二オクテット、・・・第nオクテットと並べます。 オクテット内のビットの並びは、最上位ビットをMSBと呼び、最下位ビットをLSBと呼びます。ビットは、最上位ビットから最下位ビットへ向かう順序で並べます。

2013年2月7日木曜日

データ型 - 部分型 - 内部部分型化

内部部分型化は、構造型の親の型を詳細化します。構成要素の中で、どの要素が存在し、存在する場合にとりうる値は何かを規定します。

型の記法

  内部部分型化 ::= WITH COMPONENTS 単一型制限 | WITH COMPONENTS 複数型制限
  単一型制限 ::= 部分型仕様
  複数型制限 ::= { 型制限 } | { ... , 型制限 }

  型制限 ::= 名前付き制限リスト
  名前付き制限リスト ::= 名前つき制限 | 名前つき制限 , 名前付き制限リスト
  名前付き制限 ::= 識別子 制限 | 識別子
  制限 ::= 値制限 存在制限
  値制限 ::= 部分型仕様 | empty
  存在制限 ::= PRESENT | ABSENT | empty
  PRESENT : 対応する要素値が存在
  ABSENT   : 対応する要素値が存在しない
  empty   : { 型制限 }の場合、PRESENTと同じ意味
               { ... , 型制限 }の場合、特別な制限はない

型の記法の例

  Envelope ::= SET {
  typeA TypeA,
  typeB TypeB OPTIONAL,
  typeC TypeC OPTIONAL
  }
  ABEnvelope ::= Envelope ( WITH COMPONENTS {
  ... ,
  typeB PRESENT,
  typeC ABSENT })
  ACEnvelope ::= Envelope ( WITH COMPONENTS {
  ... ,
  typeB ABSENT,
  typeC PRESENT })

  ABEnvelope ::= Envelope ( WITH COMPONENTS { typeA, typeB } )
  ACEnvelope ::= Envelope ( WITH COMPONENTS { typeA, typeC } )


データ型 - 部分型 - サイズ制限

サイズ制限は、値のとりうる長さを制限します。

部分型仕様で、許容する長さを整数で指定します。長さの単位は、対象とするデータ型により変化します。
単一順序列型、単一集合型などの配列をモデル化したデータ型の場合は、その配列のとりうる範囲を構成要素の数の最小値と最大値で示します。


型の記法
  サイズ制限 ::= SIZE 部分型仕様

型の記法の例
  PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
RFC2510

  ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF ExtensionAttribute
OrganizationName ::= PrintableString (SIZE (1..ub-organization-name-length))
PKIX1Explicit88