ASN.1 【Abstract Syntax Notation One】
概要
ASN.1(Abstract Syntax Notation One)とは、データ構造の表現形式を定義するための標準的な記法の一つ。主に通信プロトコル(通信規約)で扱われるデータの送受信単位(PDU:Protocol Data Unit)の定義に用いられる。ASN.1では名前と型によって定義されるオブジェクトを列挙してデータ構造を定義し、定義された構文を用いて具体的な値を持つインスタンスを記述することができる。
例えば「Price :== INTEGER」という記述により、整数(integer)型の値を持つPriceという名前のデータを定義することができる。これに基づいて、実際のデータとして例えば「Price :== 100」といったインスタンスを記述する。
型には整数(INTEGER)、浮動小数点数(REAL)、可変長ビット列(BIT STRING)、可変長バイト列(OCTET STRING)、真偽値(BOOLEAN)、ASCII文字列(PrintableString)、Unicode文字列(UTF8String)、日付・時刻(UTCTime)などが用意されており、順序型(SEQUENCE)や集合型(SET)により関連する複数のデータの集合を定義することもできる。
定義された構文に従って記述されたデータを特定のバイト列へ変換(エンコーディング)する方法もいくつか定めている。このうちよく用いられるのが「BER」(Basic Encoding Rules)や「DER」(Distinguished Encoding Rules)である。
個々のデータを、型(を識別するための番号)、長さ、データ本体の順に並べたものを列挙した構造になっている。冗長性を省いて短いデータ長で表現する「PER」(Packed Encoding Rules)や、人間に読みやすいようXML記述に変換するXER(XML Encoding Rules)などもある。
ASN.1は特定のコンピュータの構造やプログラミング言語などに依存せず、様々なソフトウェアで同じように取り扱うことができる。バイト列の形式が定義されているためソフトウェア間で相互運用性を確保しやすい。形式を明確に定義できるため処理の自動化やコードの共用化なども行いやすい。
ASN.1の標準規格は1984年に当時のCCITTがX.409勧告の一部として発行し、1988年のX.208で独立した規格になった。1995年のX.680シリーズによって改訂され、符号化規則はX.690シリーズとして策定された。ISOおよびIECも、X.680シリーズと同内容のISO/IEC 8824シリーズ、X.690シリーズと同内容のISO/IEC 8825シリーズを発行している。