本文へスキップ
ecdsa.com

ASN.1(抽象構文記法 1)

データ構造をエンコーディングとは独立して記述するための ITU-T X.680 の言語で、X.509 証明書、CMS、PKCS #8 の鍵、OCSP、LDAP、通信プロトコルの定義に使われます。
別表記ASN.1Abstract Syntax Notation OneX.680

ASN.1 のモジュールは型を宣言します。たとえば RFC 5280 は、Certificate を tbsCertificate、signatureAlgorithm(AlgorithmIdentifier)、signatureValue(BIT STRING)からなる SEQUENCE として定義しています。構成要素には、SEQUENCE、SET、CHOICE、OPTIONAL や DEFAULT のフィールド、IMPLICIT または EXPLICIT のタグ付けを伴うコンテキスト固有タグ([0]、[1])、そして INTEGER、BIT STRING、OCTET STRING、OBJECT IDENTIFIER、文字列型や時刻型などのプリミティブ型があります。

エンコーディング規則は値をバイト列に変換します。PKI には BER とその正規のサブセットである DER(X.690)、コンパクトな通信メッセージには PER、XML と JSON には XER と JER が使われます。セキュリティに関わる ASN.1 のほとんどは DER です。

ASN.1 の解析には、長さのオーバーフロー、BER と DER の混同、タグ処理の不一致など、長いバグの歴史があります。メンテナンスされているパーサーを使い、信頼できない入力に対して自作のパーサーを決して使ってはいけません。ダンプを読めることはデバッグで役立つスキルです。openssl asn1parse -i や ASN.1 エクスプローラーで、オフセット付きのツリーを表示できます。

規格と参考文献

すべての用語