532 字
3 分鐘
[背景知識] ASN.1 | 自然人憑證開發筆記

ASN.1
ASN.1(Abstract Syntax Notation One)是一種用於定義和描述結構化資料的標準。它提供了一種獨立於具體實現和編程語言的方式,以描述和表示資料的結構。ASN.1 的主要目的是提供一套統一的標準,以便不同系統和應用程式之間能夠共同理解和交換結構化的資料。
ASN.1 定義了一種抽象語法,用於描述資料的結構,包括資料的類型、值範圍、結構和命名。這種描述是獨立於具體實現和編程語言的,使得不同系統可以根據 ASN.1 描述來理解和處理資料,實現資料的交換和互通。
ASN.1 通常與編碼規則一同使用,例如 BER(Basic Encoding Rules)和 DER(Distinguished Encoding Rules),這些規則用於將結構化的資料編碼成二進制格式,以便在網路中傳輸或儲存到檔案中。
在數位通訊、安全協定(例如 TLS、SSL)、憑證(例如 X.509 憑證)、電子郵件(例如 S/MIME)等領域中,ASN.1 被廣泛應用。
ASN.1 結構
ASN.1 定義了一種用於描述資料結構的抽象語法,這種語法基於組合基本數據類型以及它們的結構,形成更複雜的資料結構。以下是 ASN.1 的主要結構元素:
- 模組(Module): ASN.1 的描述開始於一個模組,模組可以包含多個類型定義和值定義。
- 類型定義(Type Definition): 類型定義描述了資料的結構和類型。它可以是基本類型,如整數或字串,也可以是結構化的,如序列、集合等。
- 值定義(Value Definition): 值定義用於給定一個類型定義的具體值,用於實例化 ASN.1 中的資料。
結構範例如下
FooProtocol DEFINITIONS ::= BEGIN
FooQuestion ::= SEQUENCE { trackingNumber INTEGER, question IA5String }
FooAnswer ::= SEQUENCE { questionNumber INTEGER, answer BOOLEAN }
ENDASN.1 JavaScript decoder

不管是憑證、公鑰、私鑰、PKCS7,都是 ASN.1 格式,可以透過線上的 ASN.1 JavaScript decoder 來進行解碼,並觀察其中的結構。