2012年12月9日日曜日

データ型 - 単一順序列型

単一順序列型は、0個以上の順序付けされたASN.1データ型の集まりで、構成要素のデータ型が全て同じです。

型の記法
  単一順序列型 ::= SEQUENCE OF 型 |  SEQUENCE
 
  任意型(ANY)と組み合わせた SEQUENCE OF ANY  の場合は、単に SEQUENCE と記述します。

値の記法
 単一順序列値 ::= { 値リスト } {}
 

型の例
SigningCertificate ::=  SEQUENCE {
    certs        SEQUENCE OF ESSCertID,
    policies     SEQUENCE OF PolicyInformation OPTIONAL
}
http://www.ietf.org/rfc/rfc2634.txt

2012年9月17日月曜日

データ型 - 順序列型

順序列型は、0個以上に順序付けされたASN.1データ型の集まりを表現するデータ型です。順序列型は、構成要素の定義の並び順に符号化をするため、並び順が重要な意味を持ちます。構成要素の並び順に意味を持たせない場合は、集合型を使用します。

 型の記法
  順序列型 ::= SEQUENCE{要素型リスト}
  要素型リスト ::= 要素型 | 要素型リスト , 要素型
  要素型 ::= 名前付き型 | 名前付き型 OPTIONAL | 名前付き型 DEFAULT 値 | COMPONENT OF 型
  名前付き型 ::= 識別子 型 | 型 | 参照選択型

型の例

Validity ::= SEQUENCE {
       notBefore     Time,
       notAfter       Time }

上記の例は、構成要素のデータ型がすべて同じ Time型で表現される期間を表わす順序列型です。

順序列型は各要素型を指定するときにその要素を省略してもいい場合、OPTIONAL キーワードを使用して表現します。
下記は、OPTIONALキーワードを使用した順序列型の例です。
PKIStatusInfo ::= SEQUENCE {
    status          PKIStatus,
    statusString  PKIFreeText    OPTIONAL,
    failInfo          PKIFailureInfo  OPTIONAL }

http://www.ietf.org/rfc/rfc2510.txt

要素が省略された場合に、その要素のデフォルト値を指定したい場合、DEFAULT キーワードを使用して表現します。
下記は、DEFAULTキーワードを使用した順序列型の例です。
TimeStampReq ::= SEQUENCE  {

   version                  INTEGER                       { v1(1) },
   messageImprint       MessageImprint,
   reqPolicy               TSAPolicyId                   OPTIONAL,
   nonce                    INTEGER                      OPTIONAL,
   certReq                 BOOLEAN                     DEFAULT FALSE,
   extensions              [0] IMPLICIT Extensions  OPTIONAL  }
http://www.ietf.org/rfc/rfc3161.txt

要素 certReqが省略された場合、その値は、FALSEと解釈します。

値の記法
 順序列値 ::= { 要素値リスト } {}
 要素値リスト ::= 名前付き値 | 要素値リスト , 名前付き値
 名前付き値 ::= 識別子 値 | 値



2012年7月28日土曜日

データ型 - オブジェクト記述子型

オブジェクト記述子型は、オブジェクトを参照するためのテキスト文字列型です。

型の記法
  オブジェクト記述子型 ::= ObjectDescriptor

値の記法
  オブジェクト記述子値 ::= キャラクタ列

2012年7月24日火曜日

データ型 - オブジェクト識別子型

オブジェクト識別子型は、オブジェクトを表わすためのデータ型で、オブジェクトに関連している意味とは無関係にオブジェクトを一意に特定するために使用されます。オブジェクト識別子は、ツリー構造上の各ノードに割り当てられた非負の整数値をツリーのルートから目的のノードまで順に並べた順序列として構成されます。ツリーのノードは、ラベル付けすることができ、ラベルは、自然数(非負の整数)と名前で構成されます。
ルートノードに直接接続される下位ノードには、3つのノードが規定されています。


国際電信電話諮問委員会(CCITT)は、ccitt(0)の下に4つの下位ノードを規定しています。


国際標準化機構及び国際電気技術委員会(ISO/IEC)は、iso(1)の下に4つの下位ノードを規定しています。


型の記法
  オブジェクト識別子型 ::= OBJECT IDENTIFIER

値の記法
  オブジェクト識別子値 ::= {オブジェクト識別子構成要素リスト} | {定義値 オブジェクト識別構成要素リスト}
  オブジェクト識別子構成要素リスト ::= 名前形式 | 数字形式 | 名前及び数字形式
  名前形式 ::= 識別子
  数字形式 ::= 数字 | 定義値
  名前及び数字形式 ::= 識別子(数字形式)

型の例
  TSAPolicyId ::= OBJECT IDENTIFIER

  値の例
 ftam OBJECT IDENTIFIER ::= { 1 0 8571}
  ftam-pci OBJECT IDENTIFIER ::= { ftam pci(1) }
  ftam-pci OBJECT IDENTIFIER ::= { 1 0 8571 pci(1) }

  id-md5      OBJECT IDENTIFIER ::= {
          iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 }
  id-sha1    OBJECT IDENTIFIER ::= {
          iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 }
  id-sha512  OBJECT IDENTIFIER  ::=  {
          joint-iso-itu-t(2)  country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 3 }

オブジェクト識別子の値を調べたい場合は、下記サイトを利用すると便利
http://www.oid-info.com/index.htm





2012年7月7日土曜日

データ型 - NULL型

ヌル型は、形式的な穴埋めのためのデータ型で、値が存在しないことを表わすために使用されます。

型の記法
  ヌル型 ::= NULL

値の記法
  ヌル値 ::= NULL

2012年6月30日土曜日

データ型 - 一般時刻型

一般時刻型は、ローカル時刻または国際標準時を表現します。日付は、4桁の年、2桁の月、2桁の日で構成し、時間は、時、分、秒(オプション)および任意の10進精度の端数(オプション)で構成します。
型の記法
 一般化時刻型 ::= GeneralizedTime


値の記法
 一般化時刻値 ::= キャラクタ列
  一般時刻値は、国際標準時刻を表わす形式とローカル時刻を表わす形式の2通りの形式が存在します。

国際標準時刻 YYYYMMDDhhmmss.pZ
ローカル時刻  YYYYMMDDhhmmss.p±hhmm


値の記法の例

currentTime GeneralizedTime ::= “20120701111215.3”
currentTime GeneralizedTime ::= “20120701111215.3Z”
currentTime GeneralizedTime ::= “20120701111215.3+0900”

データ型 - UTC時刻型

UTC時刻型は、ローカル時刻または国際標準時を表現するデータ型で、日付、時間、UTC時刻との関係指示子で構成されています。

型の記法
  UTC時刻型 ::= UTCTime


値の記法
  UTC時刻値 ::= キャラクタ列
  UTC時刻値には、国際標準時刻を表わす形式とローカル時刻を表わす形式の2通りの形式が存在します。

  国際標準時刻形式  YYMMDDhhmmssZ
  ローカル時刻形式   YYMMDDhhmmss±hhmm


値の記法の例

currentTime UTCTime ::= “120701111215”
currentTime UTCTime ::= “120701111215Z”
currentTime UTCTime ::= “120701111215+0900”


2012年6月26日火曜日

データ型 - 一般文字列型

一般文字列型は、使用できる文字集合として全てのG集合、全てのC集合とスペース、抹消(DELETE)からなるデータ型です。

型の記法
  一般文字列型 ::= GeneralString


値の記法
  一般文字列値 ::= キャラクタ列


2012年6月16日土曜日

データ型 - 数字列型

数字列型は、数字の文字集合を表わすデータ型で、数字文字とスペースから構成されます。

型の記法
  数字列型 ::= NumericString


値の記法
  数字列値 ::= キャラクタ列


型の記法の例
 NumericUserIdentifier ::= NumericString (SIZE (1..ub-numeric-user-id-length))
 http://www.ietf.org/rfc/rfc2459

  PersonalCode ::= NumericString
 
値の記法の例
  myCode PersonalCode ::= “1234567890”

2012年5月27日日曜日

データ型 - 文字列型

ASN.1では、特定の文字集合を表現した型が定義されています。



データ型 - オクテット列型

オクテット列型は、値として0個以上のオクテットから構成されるデータ型を表わします。

型の記法
  オクテット列型 ::= OCTET STRING

値の記法
  オクテット列値  ::= 2進列 | 16進列



  G4FacsimileImage ::= OCTET STRING

  helloworld OCTET STRING ::= '48656C6C6F20576F726C64'H
  h OCTET STRING ::= '48'H
  h OCTET STRING ::= '10010000'B

2012年5月17日木曜日

データ型 - ビット列型

ビット列型は、必ずしもオクテット単位の構成にならないデータを表現する場合に使用するデータ型です。

型の記法
  ビット列型 ::= BIT STRING | BIT STRING{名前付きビットリスト}
  名前付きビットリスト ::= 識別子(数字) | 識別子(定義値)
  定義値 ::= 外部値参照 | 値参照


値の記法
  ビット列値 ::= 2進列 | 16進列 | {識別子リスト} | {}


型の記法の例

  KeyUsage ::= BIT STRING {
        digitalSignature     (0),
        nonRepudiation       (1),
        keyEncipherment      (2),
        dataEncipherment     (3),
        keyAgreement         (4),
        keyCertSign          (5),
        cRLSign              (6),
        encipherOnly         (7),
        decipherOnly         (8) }
  http://www.ietf.org/rfc/rfc2459

  PersonalStatus ::= BIT STRING{
    married(0), 
    employed(1)
    vetern(2), 
    collegeGraduate(3)}
  
値の記法の例

personalstatus PersonalStatus ::= '0101'B
personalstatus PersonalStatus ::= '5'H
  personalstatus PersonalStatus ::= { employed, collegeGarden}



2012年5月16日水曜日

データ型 - 列挙型


列挙型は、3つ以上の状態を表わしたり、あるいは区別したりするために使用するデータ型です。

型の記法

   列挙型 ::= ENUMERATED{列挙}
   列挙 ::= 名前付き数字, 列挙 | 名前付き数字
   名前付き数字 ::= 識別子(符号付き数字) | 識別子(定義値)
   符号付き数字 ::= 数字 | -数字
   定義値 ::= 外部値参照 | 値参照


値の記法
   列挙値 ::= 識別子


使用例
型の記法の例
CRLReason ::= ENUMERATED {
     unspecified             (0),
     keyCompromise           (1),
     cACompromise            (2),
     affiliationChanged      (3),
     superseded              (4),
     cessationOfOperation    (5),
     certificateHold         (6),
     removeFromCRL           (8),
     privilegeWithdrawn      (9),
     aACompromise           (10) }
http://www.ietf.org/rfc/rfc3280.txt



値の記法の例

DayOfTheWeek::= ENUMERATED {
  sunday    (0),
  monday    (1),
  tuesday   (2),
  wednesday (3),
  thursday  (4),
  friday    (5),
  saturday  (6) }
firstDayOfWeek DayOfTheWeek ::= sunday

データ型 - 実数型

実数型は、実数を値としてとるデータ型です。
ASN.1では、整数を使用して任意の精度の実数値を表現します。
実数を3つの要素、仮数(M), 基数(B),指数(E)を使用して表現します。

仮数、指数には任意の整数値を指定することができますが、基数は、2または10のみ指定することができます。

型の記法
  実数型 ::= REAL

値の記法
  実数値        ::= 数値実数値 | 特殊実数値
  数値実数値  ::=  {M, B, E} | 0
  M               ::= 符号付き数字
  B               ::= 2 | 10
  E               ::= 符号付き数字
  特殊実数値 ::= PLUS-IFINITY | MINUS-INFINITY



  型の記法の例
  AngleInRadians ::= REAL

  値の記法の例
  zero REAL ::= 0
  pi REAL ::= {314, 10, -2}
  maximum REAL ::= PLUS-INFINITY

2012年5月1日火曜日

データ型 - 整数型

整数型は、整数を値としてとるデータ型です。整数型のデータで表現できる整数値の範囲には、ほぼ制限がありません。

型の記法
   整数型 ::= INTEGER | INTEGER{名前付き数字リスト}
   名前付き数字 ::= 識別子(符号付き数字) | 識別子(定義値)
   符号付き数字 ::= 数字 | -数字
   定義値 ::= 外部値参照 | 値参照


値の記法
   整数値 ::= 符号付き数字 | 識別子


使用例
   識別子(符号付き数字)の例
  TrailerField ::= INTEGER { trailerFieldBC(1) }
ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.asn

値の記法 符号付き数字の例
pkcs-9-ub-pkcs9String INTEGER ::= 255
値の記法 識別子の例
   pkcs-9-ub-emailAddress INTEGER ::= pkcs-9-ub-pkcs9String
   ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-9-v2/pkcs-9.asn

2012年4月29日日曜日

データ型 - 組み込み型 - メタタイプ

データ型の中には、単純型、構造型の両方になれるものがいくつか存在します。 そのような型をメタタイプと呼びます。

データ型 - 論理型

論理型(BOOLEAN)
論理型は、 2つの論理値である真、偽、いずれかの状態をとるデータ型です。

型の記法
論理型 ::= BOOLEAN

値の記法
論理値 ::= TRUE | FALSE

論理型の使用例
http://www.ietf.org/rfc/rfc3161.txt
TimeStampReq ::= SEQUENCE  {
   version                  INTEGER  { v1(1) },
   messageImprint           MessageImprint,
     --a hash algorithm OID and the hash value of the data to be
     --time-stamped
   reqPolicy                TSAPolicyId                OPTIONAL,
   nonce                    INTEGER                    OPTIONAL,
   certReq                  BOOLEAN                    DEFAULT FALSE,
   extensions               [0] IMPLICIT Extensions    OPTIONAL  }


2012年4月24日火曜日

データ型 - 組み込み型 - タグ型

順序列型や集合型では、OPTIONAL指定を行うことで構成要素を省略したり、DEFAULT指定で省略時の値を示したりすることができます。
そのため、構造型の定義によっては、どの構成要素であるか識別することができない場合があります。このようなときに構成要素を区別する手段を提供するのがタグ型です。

ASN.1では、個々のデータ型のあいまいさなく識別するため、ASN.1のデータ型にタグが割当てられています。また、一意性の特性に関する要求事項からタグを4つのクラスに分類しています。



ASN.1のデータ型は、汎用クラスのタグ番号が割り当てられています。


2012年4月21日土曜日

データ型 - 組み込み型 - 構造型

構造型は、単純型を結合することで複雑なデータ型を組み立てます。



データ型 - 組み込み型 - 単純型

単純型と呼ばれるデータ型には、基本タイプと呼ばれる型と派生タイプと呼ばれる型の2種類が存在します。派生タイプは、基本タイプのオクテット列型から派生した型です。

基本タイプ

派生タイプ

2012年4月20日金曜日

データ型 - 概要




組み込み型
 ASN.1によって、あらかじめ定義された基本的なデータ型

定義型
 組み込み型を組み合わせて新しく定義されたデータ型

部分型
 データ型に制限をつけて、もとのデータ型のサブセットとして定義された型

2012年4月16日月曜日

ASN.1 記法の詳細 - 項目 その2

キーワード
キーワードは、必ず英大文字を使用して記述します。定められた用途以外では使用することはできません。


2012年4月14日土曜日

ASN.1 記法の詳細 - 項目

ASN.1における単語の分類をASN.1項目と呼びます。
ASN.1では、各ASN.1項目を1つ以上のスペースまたは改行で区切って並べて記述します。

項目名称

1.割当て (::=)
ASN.1では、新しいデータ型を定義する場合、既存のデータ型を組み合わせて定義をします。
このとき、割当てを使用して、左辺には新しいデータ型の名前を記述し、右辺には既存のデータ型、もしくは、既存のデータ型の組み合わせを記述します。

2.変数項目
変数項目は、データの型や値を参照するための名前です。名前をつける種類により、
下表の4種類に分類されます。



3.データ値項目
データ値項目は、データの具体的な内容を表わす項目です。データの種類により、下表の
4種類に分類されます。



4.その他の項目
変数項目、データ値項目以外にも、以下のASN.1項目があります。



2012年4月2日月曜日

ASN.1 記法の詳細 - 文字集合

ASN.1 記法で使用される文字の集まりを文字集合といいます。
ASN.1の文字集合は以下のとおりです。


2012年3月31日土曜日

モジュール その2

モジュール定義の詳細


モジュール識別子
DEFINITIONS ::=   
タグディフォルト
BEGIN
モジュール本体
END

モジュール識別子  ::= モジュール参照 割り当て識別子
割り当て識別子    ::= オブジェクト識別子値 | empty


タグデフォルト    ::= EXPLICIT TAGS | IMPLICIT TAGS | empty


モジュール本体         ::= Exports Imports AssignmentList | empty
Exports               ::= EXPORTS SymbolsExported; | empty
SymbolsExported       ::= SymbolList | empty
Imports               ::= IMPORTS SymbolsImported; | empty
SymbolsImported       ::= SymbolsFromModuleList | empty
SymbolsFromModuleList ::= SymbolsFromModule SymbolsFromModuleList | SymbolsFromModule
SymbolsFromModule     ::= SymbolList FROM モジュール識別子
SymbolList            ::= Symbol, SymbolList | Symbol
Symbol                ::= typereference | valuereference
AssignmentList        ::= Assignment AssignmentList | Assignment
Assignment            ::= TypeAssignment | ValueAssignment


2012年3月24日土曜日

モジュール

モジュール
ASN.1の記述は通常、共通のテーマや概念に関連するものを集めて定義します。この概念的にまとまったASN.1記述の集合をモジュールといいます。モジュールは以下のように定義します。

  モジュール識別子
  DEFINITIONS ::=   
  タグディフォルト
  BEGIN
  モジュール本体
  END


モジュール識別子は、モジュールの名前を表わします。モジュール本体にデータ型や値を定義します。



実際のモジュール例
PKCS#12のASN.1モジュール
ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12.asn 

2012年3月22日木曜日

JIS規格

X5603:1990
開放型システム間相互接続の抽象構文記法1(ASN.1)仕様
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+5603%3A1990&dantaiCd=JIS&status=1&pageNo=0


X5605-1:1998
抽象構文記法1(ASN.1)仕様―第1部:基本記法の仕様
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+5605-1%3A1998&dantaiCd=JIS&status=1&pageNo=0

X5605-2:1998
抽象構文記法1(ASN.1)仕様―第2部:情報オブジェクト仕様
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+5605-2%3A1998&dantaiCd=JIS&status=1&pageNo=0

X5605-3:1998
抽象構文記法1(ASN.1)仕様―第3部:制約仕様
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+5605-3%3A1998&dantaiCd=JIS&status=1&pageNo=0

X5605-4:1998
抽象構文記法1(ASN.1)仕様―第4部:ASN.1仕様のパラメータ化 http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+5605-4%3A1998&dantaiCd=JIS&status=1&pageNo=0

X5606-1:1998
ASN.1符号化規則―第1部:基本符号化規則(BER),標準符号化規則(CER)及び識別符号化規則(DER)の仕様
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+5606-1%3A1998&dantaiCd=JIS&status=1&pageNo=0


X5606-2:1998
ASN.1符号化規則―第2部:圧縮符号化規則(PER)の仕様
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+5606-2%3A1998&dantaiCd=JIS&status=1&pageNo=0


2012年3月20日火曜日

型割り当てと値割り当て

型割り当て
ASN.1に型を宣言する場合、定義する型名(型参照)に型を割り当てます。
この事を型割り当てといいます。
   型参照 ::= 型


TelephoneNumber ::= NumericString

値割り当て
事前に定義されているデータ型の値を宣言する場合、定義する値名(値参照)
に値を割り当てます。このことを値割り当てといいます。
   値参照 型 ::= 値


myNumber TelephonNumber ::= “012-345-6789”

2012年3月17日土曜日

ASN.1とは

ASN.1(Abstract Syntax Notation One:抽象構文記法1)は、データ型を定義するために用いる記述言語です。ASN.1は、いくつかの基本データ型が定義されています。また、これらの基本データ型を用いて、新しいデータ型を定義する機構を提供しています。

2012年3月12日月曜日

ASN.1の記法

私は、仕事柄、デジタル署名のデータを解析することが多いです。
デジタル署名で使用されているASN.1の記法は、1988年版の記法を使用しているのが多いので、当面は、1988年版の記法について、記載していきます。

2012年3月10日土曜日

日本語の解説書

2002年版 ITU-T国際勧告の解説書

標準規格書

ASN.1の標準化は、ITU-TとISOの共同で進めらています。


最新のASN.1記法 標準規格書 、ASN.1符号化規則 標準規格書は、
ITU-Tの以下のURLから入手可能。
http://www.itu.int/ITU-T/studygroups/com17/languages/

X.680 ASN.1 :基本記法仕様
X.681 ASN.1 :情報オブジェクト仕様
X.682 ASN.1 :制約仕様
X.683 ASN.1 :パラメータ化

X.690 符号化規則: BER,CER,DER仕様
X.691 符号化規則: PER仕様
X.692 符号化規則: ASN.1用ECN
X.693 符号化規則: XER
X.694 符号化規則: W3C XMLスキーマ定義のマッピング
X.695 符号化規則: PER符号化命令の登録とアプリケーション

1988年版の標準規格書は、以下から入手可能
http://www.itu.int/rec/T-REC-X.208-198811-W/

X.208 ASN.1 (抽象構文記法)
X.209 ASN.1のための基本符号化規則