อ่าน 7 นาที
ASN.1
Abstract Syntax Notation One ( ASN.1 ) เป็น ภาษามาตรฐานสำหรับการอธิบายอินเทอร์เฟซ (IDL) เพื่อกำหนด โครงสร้างข้อมูล ที่สามารถ แปลงเป็นรูปแบบอนุกรมและแปลงกลับเป็นรูปแบบ...
ASN.1
| ASN.1 | |
|---|---|
| สัญกรณ์ไวยากรณ์นามธรรมหนึ่ง | |
| สถานะ | มีผลบังคับใช้แล้ว; แทนที่ X.208 และ X.209 (1988) |
| ปีเริ่มต้น | 1984 |
| เวอร์ชั่นล่าสุด | (21 กุมภาพันธ์ 2021 ) |
| องค์กร | ไอทู-ที |
| คณะกรรมการ | กลุ่มศึกษาที่ 17 |
| มาตรฐานพื้นฐาน | ASN.1 |
| มาตรฐานที่เกี่ยวข้อง | X.208 , X.209 , X.409 , X.509 , X.680 , X.681 , X.682 , X.683 |
| โดเมน | การเข้ารหัสลับการสื่อสารโทรคมนาคม |
| เว็บไซต์ | https://www.itu.int/rec/T-REC-X.680/ |
Abstract Syntax Notation One ( ASN.1 ) เป็นภาษามาตรฐานสำหรับการอธิบายอินเทอร์เฟซ (IDL) เพื่อกำหนดโครงสร้างข้อมูลที่สามารถแปลงเป็นรูปแบบอนุกรมและแปลงกลับเป็นรูปแบบอนุกรมได้ในหลายแพลตฟอร์ม มีการใช้งานอย่างแพร่หลายในด้านโทรคมนาคมและเครือข่ายคอมพิวเตอร์โดยเฉพาะอย่างยิ่งในด้านการเข้ารหัส[ 1 ]
ผู้พัฒนาโปรโตคอลกำหนดโครงสร้างข้อมูลในโมดูล ASN.1 ซึ่งโดยทั่วไปแล้วจะเป็นส่วนหนึ่งของเอกสารมาตรฐานที่กว้างกว่าซึ่งเขียนด้วยภาษา ASN.1 ข้อดีคือคำอธิบายการเข้ารหัสข้อมูลใน ASN.1 นั้นเป็นอิสระจากคอมพิวเตอร์หรือภาษาโปรแกรมใด ๆ โดยเฉพาะ เนื่องจาก ASN.1 สามารถอ่านได้ทั้งโดยมนุษย์และเครื่องจักรคอมไพเลอร์ ASN.1 จึงสามารถคอมไพล์โมดูลเป็นไลบรารีของโค้ด หรือโคเดกที่ถอดรหัสหรือเข้ารหัสโครงสร้างข้อมูลได้ คอมไพเลอร์ ASN.1 บางตัวสามารถสร้างโค้ดเพื่อเข้ารหัสหรือถอดรหัสการเข้ารหัสหลายแบบ เช่น แพ็คเก็ต BERหรือXML
ASN.1 เป็นมาตรฐานร่วมของสหภาพโทรคมนาคมระหว่างประเทศ ภาคส่วนการกำหนดมาตรฐานโทรคมนาคม (ITU-T) ในกลุ่มศึกษา ITU-T 17และองค์การมาตรฐานสากล / คณะกรรมการไฟฟ้าสากล (ISO/IEC) ซึ่งกำหนดขึ้นครั้งแรกในปี 1984 เป็นส่วนหนึ่งของ CCITT X.409 :1984 [ 2 ]ในปี 1988 ASN.1 ได้ย้ายไปเป็นมาตรฐานของตนเอง คือX.208เนื่องจากมีการใช้งานอย่างกว้างขวาง เวอร์ชันที่ได้รับการแก้ไขอย่างมากในปี 1995 ครอบคลุมโดยชุดX.680 – X.683 [ 3 ]การแก้ไขล่าสุดของชุดคำแนะนำ X.680 คือฉบับที่ 6.0 ซึ่งเผยแพร่ในปี 2021 [ 4 ]
โครงสร้าง
- มาตรฐาน X.680 กำหนดคำศัพท์พื้นฐานของภาษา ASN.1 (โทเค็นพิเศษ รูปแบบของค่าตัวอักษรพื้นฐาน ฯลฯ) นอกจากนี้ยังกำหนดไวยากรณ์ของ "คำจำกัดความของโมดูล" ซึ่งก็คือคำจำกัดความของโมดูลภายในโปรโตคอล คำจำกัดความของโมดูลสามารถประกอบด้วยชนิดข้อมูลวัตถุข้อมูล ที่กำหนดไว้ล่วงหน้า ซึ่งเขียนด้วยชนิดข้อมูลเหล่านั้น (ไวยากรณ์โดยละเอียดอยู่ใน X.681) องค์ประกอบข้อจำกัด (ไวยากรณ์โดยละเอียดอยู่ใน X.682) และอื่นๆ อีกมากมาย
- มาตรฐาน X.681 กำหนดไวยากรณ์ของอ็อบเจ็กต์ข้อมูลซึ่งอนุญาตให้แสดงอ็อบเจ็กต์ในชนิดข้อมูลที่กำหนดเองในภาษา (คล้ายกับอ็อบเจ็กต์ลิเทอรัลในภาษาอื่นๆ) นอกจากนี้ยังกำหนดวิธีการอ้างอิงค่าเฉพาะจากอ็อบเจ็กต์โดยใช้สัญกรณ์จุดราวกับว่าเป็นตาราง
- มาตรฐาน X.682 กำหนดองค์ประกอบข้อจำกัดซึ่งสามารถใช้เพื่อกำหนดข้อจำกัดขั้นสูงเพิ่มเติมในโมดูลได้
- X.683 การกำหนดพารามิเตอร์ของข้อกำหนด ASN.1อนุญาตให้การกำหนดค่าและคำจำกัดความแตกต่างกันไปตามพารามิเตอร์
การสนับสนุนด้านภาษา
ASN.1 เป็นสัญกรณ์การประกาศชนิดข้อมูล ไม่ได้กำหนดวิธีการจัดการตัวแปรของชนิดข้อมูลดังกล่าว การจัดการตัวแปรนั้นถูกกำหนดไว้ในภาษาอื่นๆ เช่นSDL (Specification and Description Language) สำหรับการสร้างแบบจำลองที่สามารถเรียกใช้งานได้ หรือTTCN-3 (Testing and Test Control Notation) สำหรับการทดสอบความสอดคล้อง ทั้งสองภาษานี้รองรับการประกาศ ASN.1 โดยตรง จึงสามารถนำเข้าโมดูล ASN.1 และประกาศตัวแปรของชนิดข้อมูล ASN.1 ใดๆ ก็ได้ที่ประกาศไว้ในโมดูลนั้น
แอปพลิเคชัน
ASN.1 ถูกนำมาใช้กำหนดโปรโตคอลจำนวนมาก การใช้งานที่แพร่หลายที่สุดยังคงเป็นด้านโทรคมนาคม การเข้ารหัส และไบโอเมตริกส์
| โปรโตคอล | ข้อกำหนด | กฎการเข้ารหัสที่ระบุหรือตามธรรมเนียมปฏิบัติ | การใช้งาน |
|---|---|---|---|
| โปรโตคอลอินเตอร์เลดเจอร์ | ข้อกำหนด ILPV4 | กฎการเข้ารหัสอ็อกเท็ต | |
| NTCIP 1103 - โปรโตคอลการจัดการการขนส่ง | NTCIP 1103 | กฎการเข้ารหัสอ็อกเท็ต | การจัดการจราจร การขนส่ง และโครงสร้างพื้นฐาน |
| บริการไดเร็กทอรี X.500 | ชุดคำแนะนำ ITU X.500 | กฎการเข้ารหัสพื้นฐาน, กฎการเข้ารหัสที่แตกต่าง | LDAP, TLS ( X.509 ) ใบรับรอง, การตรวจสอบสิทธิ์ |
| โปรโตคอลการเข้าถึงไดเร็กทอรีน้ำหนักเบา (LDAP) | อาร์เอฟซี 4511 | กฎการเข้ารหัสพื้นฐาน | |
| มาตรฐานการเข้ารหัส PKCS | มาตรฐานการเข้ารหัสPKCS | กฎการเข้ารหัสพื้นฐานและกฎการเข้ารหัสที่แตกต่าง | คีย์แบบไม่สมมาตร, ชุดใบรับรอง |
| การจัดการข้อความ X.400 | ชุดคำแนะนำ ITU X.400 | คู่แข่งยุคแรกๆ ของอีเมล | |
| อีเอ็มวี | สิ่งพิมพ์ EMVCo | บัตรชำระเงิน | |
| T.120 การประชุมมัลติมีเดีย | ชุดคำแนะนำ ITU T.120 | กฎการเข้ารหัสพื้นฐาน, กฎการเข้ารหัสแบบแพ็ค | โปรโตคอลการเข้าถึงเดสก์ท็อประยะไกล (RDP) ของ Microsoft |
| โปรโตคอลการจัดการเครือข่ายแบบง่าย (SNMP) | อาร์เอฟซี 1157 | กฎการเข้ารหัสพื้นฐาน | การจัดการและตรวจสอบเครือข่ายและคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งคุณลักษณะที่เกี่ยวข้องกับประสิทธิภาพและความน่าเชื่อถือ |
| โปรโตคอลข้อมูลการจัดการทั่วไป (CMIP) | ข้อแนะนำ ITU X.711 | เป็นคู่แข่งของSNMPแต่มีความสามารถมากกว่าและไม่ได้รับความนิยมเท่า | |
| ระบบสัญญาณหมายเลข 7 (SS7) | ชุดคำแนะนำ ITU Q.700 | การจัดการการเชื่อมต่อโทรศัพท์ผ่านเครือข่ายโทรศัพท์สาธารณะ ( PSTN ) | |
| โปรโตคอลมัลติมีเดีย ITU H-Series | ชุดคำแนะนำ ITU H.200, H.300 และ H.400 | การโทรผ่านโปรโตคอลอินเทอร์เน็ต ( VoIP ) | |
| โปรโตคอลการทำงานร่วมกัน ของ BioAPI (BIP) | ISO/IEC 24708:2008 | ||
| กรอบรูปแบบการแลกเปลี่ยนข้อมูลไบโอเมตริกทั่วไป (CBEFF) | NIST IR 6529-A | กฎการเข้ารหัสพื้นฐาน | |
| บริบทการตรวจสอบสิทธิ์สำหรับไบโอเมตริก (ACBio) | ISO/IEC 24761:2019 | ||
| แอปพลิเคชันโทรคมนาคมที่ใช้คอมพิวเตอร์ช่วย (CSTA) | [1] | กฎการเข้ารหัสพื้นฐาน | |
| ระบบสื่อสารระยะสั้นเฉพาะ (DSRC) | SAE J2735 | กฎการเข้ารหัสแบบแพ็ค | การสื่อสารยานพาหนะ |
| IEEE 802.11p (IEEE WAVE) | IEEE 1609.2 | การสื่อสารยานพาหนะ | |
| ระบบขนส่งอัจฉริยะ (ETSI ITS) | ETSI EN 302 637 2 (ลูกเบี้ยว) ETSI EN 302 637 3 (DENM) | กฎการเข้ารหัสแบบแพ็คที่ไม่ตรงแนว | การสื่อสารยานพาหนะ |
| ระบบสื่อสารเคลื่อนที่ทั่วโลก (GSM) | [2] | การสื่อสารผ่านโทรศัพท์มือถือ 2G | |
| บริการวิทยุแพ็กเก็ตทั่วไป (GPRS) / อัตราการรับส่งข้อมูลขั้นสูงสำหรับ GSM Evolution (EDGE) | [3] | การสื่อสารผ่านโทรศัพท์มือถือ 2.5G | |
| ระบบโทรคมนาคมเคลื่อนที่สากล (UMTS) | [4] | การสื่อสารผ่านโทรศัพท์มือถือ 3G | |
| วิวัฒนาการระยะยาว (LTE) | [5] | การสื่อสารผ่านโทรศัพท์มือถือ 4G | |
| 5G | [6] | การสื่อสารผ่านโทรศัพท์มือถือ 5G | |
| โปรโตคอลการแจ้งเตือนทั่วไป (CAP) | [7] | กฎการเข้ารหัสXML | การแลกเปลี่ยนข้อมูลการแจ้งเตือน เช่น การแจ้งเตือนเด็กหาย (Amber Alert) |
| การสื่อสารข้อมูลระหว่างเจ้าหน้าที่ควบคุมการจราจรทางอากาศและนักบิน (CPDLC) | การสื่อสารด้านการบิน | ||
| บริการขยายการเชื่อมต่ออวกาศ (SLE) | การสื่อสารระบบอวกาศ | ||
| ข้อกำหนดข้อความการผลิต (MMS) | ISO 9506-1:2003 | การผลิต | |
| การโอนย้าย การเข้าถึง และการจัดการไฟล์ (FTAM) | เป็นคู่แข่งที่สำคัญและมีประสิทธิภาพมากกว่าของโปรโตคอลการถ่ายโอนไฟล์ (FTP)แต่ปัจจุบันไม่ค่อยได้ใช้แล้ว | ||
| โปรโตคอล Remote Operations Service Element (ROSE) | ข้อแนะนำของ ITU X.880, X.881 และ X.882 | รูปแบบแรกเริ่มของการเรียกใช้ฟังก์ชันระยะไกล | |
| องค์ประกอบบริการควบคุมการเชื่อมโยง (ACSE) | ข้อแนะนำ ITU X.227 | ||
| โปรโตคอลเครือข่ายควบคุมและระบบอัตโนมัติอาคาร (BACnet) | ASHRAE 135-2020 | กฎการเข้ารหัส BACnet | ระบบควบคุมและสั่งการอาคารอัตโนมัติ เช่น ระบบแจ้งเตือนไฟไหม้ ลิฟต์ ระบบ ปรับอากาศเป็นต้น |
| เคอร์เบรอส | อาร์เอฟซี 4120 | กฎการเข้ารหัสพื้นฐาน | การตรวจสอบสิทธิ์ที่ปลอดภัย |
| วิแม็กซ์ 2 | เครือข่ายบริเวณกว้าง | ||
| เครือข่ายอัจฉริยะ | ชุดคำแนะนำ ITU Q.1200 | โทรคมนาคมและเครือข่ายคอมพิวเตอร์ | |
| เอ็กซ์2เอพี | กฎการเข้ารหัสแบบแพ็คที่จัดเรียงพื้นฐาน | ||
| อินเทอร์เฟซการส่งมอบการดักฟังตามกฎหมาย (LI) | ETSI TS 102 232-1 | การดักฟังอย่างถูกกฎหมาย |
การเข้ารหัส
ASN.1 มีความเกี่ยวข้องอย่างใกล้ชิดกับชุดกฎการเข้ารหัสที่ระบุวิธีการแสดงโครงสร้างข้อมูลเป็นชุดของไบต์ กฎการเข้ารหัส ASN.1 มาตรฐานประกอบด้วย:
| กฎการเข้ารหัส | ตัวระบุวัตถุ | ข้อกำหนด | หน่วยของการจัดลำดับ | องค์ประกอบที่เข้ารหัสซึ่งสามารถแยกแยะได้โดยไม่ต้องมีความรู้ล่วงหน้าเกี่ยวกับข้อกำหนด | จัดเรียงอ็อกเท็ต | การควบคุมการเข้ารหัส | คำอธิบาย | |
|---|---|---|---|---|---|---|---|---|
| จุด | ไออาร์ไอ | |||||||
| กฎการเข้ารหัสพื้นฐาน (BER) [ 5 ] | 2.1.1 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.690 | อ็อกเท็ต | ใช่ | ใช่ | เลขที่ | กฎการเข้ารหัสแบบแรกที่ระบุไว้ จะเข้ารหัสองค์ประกอบต่างๆ เป็นลำดับแท็ก-ความยาว-ค่า (TLV) โดยทั่วไปจะให้ตัวเลือกหลายอย่างเกี่ยวกับวิธีการเข้ารหัสค่าข้อมูล นี่เป็นหนึ่งในกฎการเข้ารหัสที่มีความยืดหยุ่นมากที่สุด |
| กฎการเข้ารหัสที่โดดเด่น (DER) [ 6 ] | 2.1.2.1 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.690 | อ็อกเท็ต | ใช่ | ใช่ | เลขที่ | เป็นส่วนย่อยที่จำกัดของ BER โดยทั่วไปใช้กับสิ่งที่มีการลงลายมือชื่อดิจิทัล เนื่องจาก DER อนุญาตให้มีตัวเลือกในการเข้ารหัสที่น้อยกว่า และเนื่องจากค่าที่เข้ารหัสด้วย DER มีแนวโน้มที่จะถูกเข้ารหัสใหม่บนไบต์เดียวกัน ลายมือชื่อดิจิทัลที่สร้างขึ้นจากค่าเชิงนามธรรมที่กำหนดจึงเหมือนกันในทุกการใช้งาน และลายมือชื่อดิจิทัลที่สร้างขึ้นจากข้อมูลที่เข้ารหัสด้วย DER จะมีความเสี่ยงต่อการโจมตีแบบชนกันน้อยลง |
| กฎการเข้ารหัสมาตรฐาน (CER) [ 7 ] | 2.1.2.0 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.690 | อ็อกเท็ต | ใช่ | ใช่ | เลขที่ | CER เป็นส่วนย่อยที่จำกัดของ BER โดยใช้ข้อจำกัดเกือบทั้งหมดเหมือนกับ DER แต่ความแตกต่างที่สำคัญคือ CER ระบุว่าค่าขนาดใหญ่จำนวนมาก (โดยเฉพาะสตริง) จะต้องถูก "แบ่งย่อย" ออกเป็นองค์ประกอบสตริงย่อยแต่ละส่วนที่จุด 1000 ไบต์หรือ 1000 ตัวอักษร (ขึ้นอยู่กับชนิดข้อมูล) |
| กฎการเข้ารหัสแบบแพ็คที่ไม่ตรงกัน (PER-U/UPER) [ 8 ] | 2.1.3.0.1 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.691 | นิดหน่อย | เลขที่ | เลขที่ | เลขที่ | เข้ารหัสค่าบนบิต บางครั้งเรียกสั้น ๆ ว่า "PER" โดยทั่วไปแล้ว PER สามารถสร้างการเข้ารหัสที่กะทัดรัดมาก แต่แลกมาด้วยความซับซ้อน และยังขึ้นอยู่กับข้อจำกัดที่กำหนดไว้สำหรับชนิดข้อมูลอย่างมาก |
| กฎการเข้ารหัสแบบแพ็คที่จัดเรียง (PER-A/APER) [ 8 ] | 2.1.3.0.0 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.691 | นิดหน่อย | เลขที่ | ใช่ | เลขที่ | เข้ารหัสค่าลงบนบิต แต่ถ้าจำนวนบิตที่เข้ารหัสไม่สามารถหารด้วยแปดลงตัว จะมีการเพิ่มบิตเสริมเข้าไปจนกว่าจะได้จำนวนเต็มของอ็อกเท็ตที่เข้ารหัสค่าได้ |
| กฎการเข้ารหัสแบบแพ็คมาตรฐานที่ ไม่จัดเรียง (CPER-U) [ 8 ] | 2.1.3.1.1 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.691 | นิดหน่อย | เลขที่ | เลขที่ | เลขที่ | PER-U รูปแบบหนึ่งที่ระบุวิธีการเข้ารหัสค่าเพียงวิธีเดียว บางครั้งเรียกสั้นๆ ว่า "CPER" CPER มีความสัมพันธ์คล้ายกับ PER ในแง่ที่ว่า DER และ CER มีความสัมพันธ์กับ BER อย่างไร |
| กฎการเข้ารหัส แบบแพ็ค มาตรฐานที่จัด เรียง (CPER-A) [ 8 ] | 2.1.3.1.0 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.691 | นิดหน่อย | เลขที่ | ใช่ | เลขที่ | รูปแบบหนึ่งของ PER-A ที่ระบุวิธีการเข้ารหัสค่าเพียงวิธีเดียว |
| กฎการเข้ารหัสXML พื้นฐาน(XER) [ 9 ] | 2.1.5.0 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.693 | อักขระ | ใช่ | ใช่ | อีซีเอ็น | เข้ารหัสข้อมูล ASN.1 เป็นรูปแบบ XML |
| กฎการเข้ารหัสXML มาตรฐาน(CXER) [ 9 ] | 2.1.5.1 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.693 | อักขระ | ใช่ | ใช่ | อีซีเอ็น | รูปแบบหนึ่งของ XER ที่สร้างการเข้ารหัสที่เป็นไปได้เพียงแบบเดียวสำหรับค่าที่กำหนด |
| กฎการเข้ารหัสXML แบบขยาย(EXER) [ 9 ] | 2.1.5.2 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.693 | อักขระ | ใช่ | ใช่ | อีซีเอ็น | เป็นรูปแบบหนึ่งของ XER ที่เพิ่มตัวเลือกและคำสั่งควบคุมการเลือกรูปแบบการแสดงผลของตัวเข้ารหัส |
| กฎการเข้ารหัสอ็อกเท็ต(OER) [ 10 ] | 2.1.6.0 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.696 | อ็อกเท็ต | เลขที่ | ใช่ | เลขที่ | OER คือชุดกฎการเข้ารหัสที่เข้ารหัสค่าบนไบต์ แต่ไม่ได้เข้ารหัสแท็กหรือตัวกำหนดความยาวเหมือนกับที่ BER ทำ ค่าข้อมูลที่เข้ารหัสโดยใช้ OER มักมีลักษณะคล้ายกับที่พบในโปรโตคอลแบบ "บันทึก" OER ถูกออกแบบมาให้ใช้งานง่ายและสร้างการเข้ารหัสที่กะทัดรัดกว่าที่สร้างโดย BER นอกจากจะช่วยลดความพยายามในการพัฒนาตัวเข้ารหัส/ถอดรหัสแล้ว การใช้ OER ยังสามารถลดการใช้แบนด์วิดท์ (แม้จะไม่มากเท่า PER) ประหยัดรอบการทำงานของ CPU และลดความหน่วงในการเข้ารหัส/ถอดรหัสได้อีกด้วย ITU X.696 OER มาจาก "OER" ที่เข้ากันได้เป็นส่วนใหญ่ซึ่งกำหนดไว้ในNTCIP 1102 ของNEMA OER ของ NEMA นั้นเป็นเวอร์ชันที่ชี้แจงและขยายความของกฎการเข้ารหัสแบบแพ็คของ NEMA (NEMA PER) ซึ่งมีชื่อที่ไม่เหมาะสม[ 11 ] : 27 |
| กฎการเข้ารหัสอ็อกเท็ตแบบแคนอนิก(COER) [ 10 ] | 2.1.6.1 | /Joint‑ISO‑ITU‑T/ASN.1/ | ไอทู X.696 | อ็อกเท็ต | เลขที่ | ใช่ | เลขที่ | รูปแบบหนึ่งของ OER ที่แต่ละค่าจะมีรูปแบบการแสดงผลแบบอ็อกเท็ตเพียงแบบเดียวเท่านั้น |
| กฎการเข้ารหัสJSON (JER) [ 12 ] | 2.1.7 | ไอทู X.697 | อักขระ | ใช่ | ใช่ | อีซีเอ็น | เข้ารหัสข้อมูล ASN.1 เป็น JSON เวอร์ชัน ASCII เท่านั้นถือเป็นมาตรฐาน กล่าวคือ แต่ละค่าจะมีเพียงไบต์เดียวที่เป็นไปได้เท่านั้น ส่วนที่เหลือไม่ใช่มาตรฐาน | |
| กฎการเข้ารหัสสตริงทั่วไป(GSER) [ 13 ] | 1.2.36. | /ISO/Member‑Body/AU/Adacel/0/GSER | อาร์เอฟซี 3641 | อักขระ | ใช่ | ใช่ | อาร์เอฟซี4792 | GSER มีจุดประสงค์เพื่อแสดงข้อมูลที่เข้ารหัสแก่ผู้ใช้หรือข้อมูลป้อนเข้าจากผู้ใช้ ในรูปแบบที่ตรงไปตรงมาคล้ายกับสัญกรณ์ค่าของ ASN.1 GSER ถูกออกแบบมาสำหรับLightweight Directory Access Protocol (LDAP) เป็นหลัก และไม่ค่อยได้ใช้ในโปรโตคอลอื่นการใช้ GSER ในโปรโตคอลจริงนั้นไม่เป็นที่แนะนำ เนื่องจากไม่สามารถสร้างการเข้ารหัสสตริงอักขระทั้งหมดที่ ASN.1 รองรับได้การปรับแต่งการเข้ารหัสจะทำผ่าน GSER แทน ECN |
| กฎการเข้ารหัส XML ที่แข็งแกร่ง (RXER) | 1.2.36. | /ISO/Member‑Body/AU/Adacel/0/RXER | อาร์เอฟซี 4910 | อักขระ | ใช่ | ใช่ | อาร์เอฟซี4911 | รูปแบบ XML ที่ออกแบบมาสำหรับโปรโตคอล Lightweight Directory Access Protocol (LDAP) |
| กฎการเข้ารหัสBACnet (BACnetER) | ASHRAE 135 ISO 16484-5 | อ็อกเท็ต | ใช่ | ใช่ | อีซีเอ็น | เข้ารหัสองค์ประกอบเป็นลำดับแท็ก-ความยาว-ค่า (TLV) เช่นเดียวกับกฎการเข้ารหัสพื้นฐาน (BER) ตัวอย่างข้อความสามารถพบได้ใน Karg (2012); [ 14 ] Karg ยังดูแลการใช้งาน BACnet stack แบบโอเพนซอร์สซึ่งมีโค้ดสำหรับการอ่านและเขียนรูปแบบนี้[ 15 ] | ||
| กฎการเข้ารหัสเฉพาะสัญญาณ(SER) | เอกสารภายในฝ่ายวิจัยและพัฒนาของ France Telecom | อ็อกเท็ต | ใช่ | ใช่ | เลขที่ | ใช้เป็นหลักในโปรโตคอลที่เกี่ยวข้องกับการสื่อสารโทรคมนาคม เช่น GSM และ SS7 ออกแบบมาเพื่อสร้างการเข้ารหัสที่เหมือนกันจาก ASN.1 ซึ่งโปรโตคอลที่มีอยู่เดิมซึ่งไม่ได้ระบุไว้ใน ASN.1 จะสร้างขึ้น | ||
| กฎการเข้ารหัสแบบเบา(LWER) | เอกสารภายในของ INRIA | คำศัพท์ช่วยจำ | ใช่ | เลขที่ | มาจากเอกสารภายในที่จัดทำโดยINRIAซึ่งให้รายละเอียดเกี่ยวกับ "ไวยากรณ์น้ำหนักเบาแบบต้นไม้แบน" (FTLWS) [ 16 ]ถูกยกเลิกในปี 1997 เนื่องจากประสิทธิภาพที่เหนือกว่าของกฎการเข้ารหัสแบบแพ็ค (PER) [ 17 ] : 319 การส่งแบบ Big-Endian หรือ Little-Endian เป็นตัวเลือก รวมถึงหน่วยความจำ 8 บิต 16 บิต และ 32 บิต (ดังนั้นจึงมีหกรูปแบบ เนื่องจากมีหกชุดค่าผสมของตัวเลือกเหล่านั้น) | |||
| กฎการเข้ารหัสบิตขั้นต่ำ(MBER) | นิดหน่อย | เลขที่ | เลขที่ | เลขที่ | เสนอในช่วงทศวรรษ 1980 มีจุดประสงค์เพื่อให้กระชับที่สุดเท่าที่จะเป็นไปได้ เช่นเดียวกับกฎการเข้ารหัสแบบแพ็ค (PER) ในภายหลัง ไม่เคยขยายไปยังประเภทข้อมูล ASN.1 ทั้งหมด[ 17 ] : 319 | |||
| กฎการเขียนโค้ด ความเร็วสูง | "กฎการเข้ารหัสสำหรับเครือข่ายความเร็วสูง" [ 18 ] | เลขที่ | การกำหนดกฎการเข้ารหัสเหล่านี้เป็นผลพลอยได้จากงานของ INRIA ในเรื่องไวยากรณ์น้ำหนักเบาแบบโครงสร้างต้นไม้แบน (Flat Tree Light Weight Syntax หรือ FTLWS) | |||||
สัญกรณ์ควบคุมการเข้ารหัส
ข้อแนะนำของ ASN.1 มีกฎการเข้ารหัสที่กำหนดไว้ล่วงหน้าจำนวนหนึ่ง หากไม่มีกฎการเข้ารหัสที่มีอยู่ใดเหมาะสมสัญกรณ์ควบคุมการเข้ารหัส (ECN, X.692)จะช่วยให้ผู้ใช้สามารถกำหนดกฎการเข้ารหัสที่กำหนดเองได้
ความเกี่ยวข้องกับการเข้ารหัสอีเมลที่เพิ่มความเป็นส่วนตัว (PEM)
การเข้ารหัส Privacy-Enhanced Mail (PEM)นั้นไม่เกี่ยวข้องกับ ASN.1 และตัวแปลงสัญญาณของมันโดยสิ้นเชิง แต่ข้อมูล ASN.1 ที่เข้ารหัสแล้ว ซึ่งส่วนใหญ่มักเป็นข้อมูลไบนารี มักถูกเข้ารหัสด้วย PEM เพื่อให้สามารถส่งเป็นข้อมูลข้อความได้ เช่น ผ่านรีเลย์ SMTP หรือผ่านบัฟเฟอร์การคัดลอก/วาง
ในฐานะไฟล์คอมพิวเตอร์
ข้อกำหนดด้านภาษาและการเข้ารหัสของ ASN.1 ไม่ได้ระบุรายละเอียด เช่น นามสกุลไฟล์ที่จะใช้เมื่อจัดเก็บข้อมูลจำนวนมากเป็นไฟล์ในคอมพิวเตอร์ อย่างไรก็ตาม มีธรรมเนียมปฏิบัติบางประการเกิดขึ้น:
- ข้อความภาษา ASN.1: ส่วนขยายของ
.asn1[ 19 ]และ.allถูกใช้สำหรับไฟล์ทั่วไป.asnถูกใช้สำหรับไฟล์ที่มีเฉพาะคำจำกัดความของโมดูลและ.prtสำหรับไฟล์ที่มีเฉพาะคำจำกัดความของค่า[ 20 ] - ข้อมูลที่เข้ารหัส BER:
.berถูกนำมาใช้[ 21 ]นอกจากนี้ยังมีประเภท MIMEapplication/ber-streamที่เสนอ ซึ่งรวมถึงprotocolพารามิเตอร์ที่ระบุ OID ที่เกี่ยวข้อง[ 22 ] - ข้อมูลที่เข้ารหัสแบบ DER: สำหรับ ใบรับรองX.509
.derที่เข้ารหัสแบบ DER และนอกเหนือจากนั้นประเภท MIME นี้ใช้สำหรับใบรับรองที่เข้ารหัสแบบ DER โดยเฉพาะ ไม่ใช่ข้อมูล DER ทั่วไป.cer.crt.derapplication/x-x509-ca-cert - ข้อมูลที่เข้ารหัสอื่นๆ:
asn1cไฟล์ตัวอย่างที่ใช้.xerสำหรับ XER,.perPER และ.coerCOER
ตัวอย่าง
โมดูลและข้อจำกัด
นี่คือตัวอย่างโมดูล ASN.1 ที่กำหนดข้อความ (โครงสร้างข้อมูล) ของ โปรโตคอล Foo สมมุติ :
คำจำกัดความของFooProtocol ::= เริ่มต้นFooQuestion ::= SEQUENCE { trackingNumber INTEGER , question IA5String }FooAnswer ::= SEQUENCE { questionNumber INTEGER , answer BOOLEAN }จบนี่อาจเป็นข้อกำหนดที่เผยแพร่โดยผู้สร้างโปรโตคอล Foo การไหลของการสนทนา การแลกเปลี่ยนธุรกรรม และสถานะต่างๆ ไม่ได้ถูกกำหนดไว้ใน ASN.1 แต่ถูกอธิบายด้วยสัญลักษณ์และคำอธิบายข้อความอื่นๆ ของโปรโตคอลแทน
ASN.1 รองรับข้อจำกัดเกี่ยวกับค่าและขนาด รวมถึงความสามารถในการขยาย ข้อกำหนดข้างต้นสามารถเปลี่ยนแปลงได้ดังนี้:
คำจำกัดความของFooProtocol ::= เริ่มต้นFooQuestion ::= SEQUENCE { trackingNumber INTEGER ( 0. . 199 ), question IA5String }FooAnswer ::= SEQUENCE { questionNumber INTEGER ( 10. . 20 ), answer BOOLEAN }FooHistory ::= SEQUENCE { questions SEQUENCE ( SIZE ( 0. . 10 )) OF FooQuestion , answers SEQUENCE ( SIZE ( 1. . 10 )) OF FooAnswer , anArray SEQUENCE ( SIZE ( 100 )) OF INTEGER ( 0. . 1000 ), ... }จบการเปลี่ยนแปลงนี้จำกัดค่าของ trackingNumbers ให้อยู่ระหว่าง 0 ถึง 199 รวมทั้งสองค่า และ questionNumbers ให้อยู่ระหว่าง 10 ถึง 20 รวมทั้งสองค่า ขนาดของอาร์เรย์ questions สามารถอยู่ระหว่าง 0 ถึง 10 องค์ประกอบ และอาร์เรย์ answers อยู่ระหว่าง 1 ถึง 10 องค์ประกอบ ฟิลด์ anArray เป็นอาร์เรย์ของจำนวนเต็มที่มีความยาวคงที่ 100 องค์ประกอบ ซึ่งต้องอยู่ในช่วง 0 ถึง 1000 เครื่องหมาย '...' หมายความว่าข้อกำหนดข้อความ FooHistory อาจมีฟิลด์เพิ่มเติมในเวอร์ชันในอนาคตของข้อกำหนด ระบบที่สอดคล้องกับเวอร์ชันหนึ่งควรจะสามารถรับและส่งธุรกรรมจากเวอร์ชันที่ใหม่กว่าได้ แม้ว่าจะสามารถประมวลผลได้เฉพาะฟิลด์ที่ระบุไว้ในเวอร์ชันก่อนหน้าเท่านั้น คอมไพเลอร์ ASN.1 ที่ดีจะสร้างซอร์สโค้ด (ใน C, C++, Java ฯลฯ) ที่จะตรวจสอบโดยอัตโนมัติว่าธุรกรรมเป็นไปตามข้อจำกัดเหล่านี้หรือไม่ ธุรกรรมที่ละเมิดข้อจำกัดไม่ควรได้รับการยอมรับหรือนำเสนอต่อแอปพลิเคชัน การจัดการข้อจำกัดในเลเยอร์นี้ช่วยลดความซับซ้อนของการกำหนดโปรโตคอลได้อย่างมาก เนื่องจากแอปพลิเคชันจะได้รับการปกป้องจากการละเมิดข้อจำกัด ซึ่งจะช่วยลดความเสี่ยงและต้นทุน
ตัวอย่างข้างต้นใช้เฉพาะไวยากรณ์จาก X.680 เท่านั้น ไม่ได้ใช้ข้อจำกัดขั้นสูงกว่าจาก X.682
ตัวอย่าง PDU
สมมติว่าข้อความนั้นเป็นไปตามโปรโตคอล Foo และจะถูกส่งไปยังผู้รับ ข้อความเฉพาะนี้ ( หน่วยข้อมูลโปรโตคอล (PDU)) คือ:
myQuestion FooQuestion ::= { trackingNumber 5 , question "มีใครอยู่ไหม?" }ในการส่งข้อความ myQuestion ผ่านเครือข่าย ข้อความจะถูกแปลงเป็นชุดไบต์ (เข้ารหัส) โดยใช้กฎการเข้ารหัส ชุดใดชุดหนึ่ง ข้อกำหนดของโปรโตคอล Foo ควรระบุชุดกฎการเข้ารหัสที่จะใช้ไว้อย่างชัดเจน เพื่อให้ผู้ใช้โปรโตคอล Foo ทราบว่าควรใช้กฎใดและคาดหวังผลลัพธ์ใด
ตัวอย่างข้างต้นเป็นตัวอย่างของมาตรฐาน X.681 โดยเฉพาะอย่างยิ่งโครงสร้าง ObjectAssignment
ตัวอย่างที่เข้ารหัสใน DER
ด้านล่างนี้คือโครงสร้างข้อมูลที่แสดงด้านบน ซึ่งเข้ารหัสเป็น myQuestion ในรูปแบบ DER (ตัวเลขทั้งหมดอยู่ในรูปแบบเลขฐานสิบหก):
30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
DER เป็นการ เข้ารหัส แบบประเภท-ความยาว-ค่าดังนั้นลำดับข้างต้นจึงสามารถตีความได้โดยอ้างอิงถึงประเภทมาตรฐาน SEQUENCE, INTEGER และ IA5String ดังนี้:
30 — ประเภทแท็กที่ระบุลำดับ 13 — ความยาวในหน่วยอ็อกเท็ตของค่าที่ตามมา 02 — แท็กประเภทที่ระบุว่า INTEGER 01 — ความยาวในหน่วยอ็อกเท็ตของค่าที่ตามมา 05 — ค่า (5) 16 — แท็กประเภทที่ระบุIA5String (IA5 หมายถึงชุด ISO 646 7 บิตแบบสมบูรณ์ รวมทั้งตัวแปรต่างๆ) แต่โดยทั่วไปแล้วจะเป็น US-ASCII) 0e — ความยาวในหน่วยอ็อกเท็ตของค่าที่ตามมา 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f — ค่า ("มีใครอยู่ไหม?")
ตัวอย่างที่เข้ารหัสในรูปแบบ XER
อีกทางเลือกหนึ่งคือ สามารถเข้ารหัสโครงสร้างข้อมูล ASN.1 เดียวกันโดยใช้กฎการเข้ารหัส XML (XER) เพื่อให้มนุษย์อ่านได้ง่ายขึ้น "ผ่านเครือข่าย" โดยจะปรากฏเป็นไบต์ 108 ไบต์ดังต่อไปนี้ (นับรวมช่องว่างที่ใช้สำหรับการเยื้อง):
<FooQuestion> <trackingNumber> 5 </trackingNumber> <question>มีใครอยู่ไหม? </question> </FooQuestion>ตัวอย่างที่เข้ารหัสในรูปแบบ PER ทั้งแบบจัดแนวหรือไม่จัดแนว
หรืออีกทางเลือกหนึ่ง หากใช้กฎการเข้ารหัสแบบแพ็คที่ไม่จัดเรียง (Packed Encoding Rules Unaligned) จะได้ข้อมูล 122 บิตดังต่อไปนี้ (16 อ็อกเท็ตเท่ากับ 128 บิต แต่ในที่นี้มีเพียง 122 บิตเท่านั้นที่เก็บข้อมูล และ 6 บิตสุดท้ายเป็นเพียงส่วนเติมเต็ม):
01 05 0e 83 บีบี ce 2d f9 3c a0 e9 a3 2f 2c af c0
ในรูปแบบนี้ แท็กประเภทสำหรับองค์ประกอบที่จำเป็นจะไม่ถูกเข้ารหัส ดังนั้นจึงไม่สามารถแยกวิเคราะห์ได้หากไม่ทราบสคีมาที่คาดหวังที่ใช้ในการเข้ารหัส นอกจากนี้ ไบต์สำหรับค่าของ IA5String จะถูกบรรจุโดยใช้หน่วย 7 บิตแทนที่จะเป็นหน่วย 8 บิต เนื่องจากตัวเข้ารหัสทราบว่าการเข้ารหัสค่าไบต์ของ IA5String ต้องการเพียง 7 บิตเท่านั้น อย่างไรก็ตาม ไบต์ความยาวจะยังคงถูกเข้ารหัสอยู่ แม้แต่สำหรับแท็กจำนวนเต็มตัวแรก 01 (แต่ตัวบรรจุ PER อาจละเว้นได้หากทราบว่าช่วงค่าที่อนุญาตพอดีกับ 8 บิต และอาจบีบอัดไบต์ค่าเดียว 05 ด้วยบิตน้อยกว่า 8 บิต หากทราบว่าค่าที่อนุญาตสามารถพอดีได้เฉพาะในช่วงที่เล็กกว่าเท่านั้น)
บิต 6 บิตสุดท้ายใน PER ที่เข้ารหัสแล้วจะถูกเติมด้วยบิตว่างใน 6 บิตที่มีค่าต่ำที่สุดของไบต์สุดท้าย c0: บิตพิเศษเหล่านี้อาจไม่ถูกส่งหรือใช้สำหรับการเข้ารหัสสิ่งอื่นใด หากลำดับนี้ถูกแทรกเป็นส่วนหนึ่งของลำดับ PER ที่ยาวกว่าและไม่ตรงแนว
นี่หมายความว่าข้อมูล PER ที่ไม่ได้จัดเรียงนั้นโดยพื้นฐานแล้วเป็นกระแสบิตที่มีลำดับ ไม่ใช่กระแสไบต์ที่มีลำดับเหมือนกับ PER ที่จัดเรียงแล้ว และการถอดรหัสด้วยซอฟต์แวร์บนโปรเซสเซอร์ทั่วไปจะซับซ้อนกว่าเล็กน้อย เนื่องจากจะต้องมีการเลื่อนบิตและการมาสก์ตามบริบทเพิ่มเติม ไม่ใช่การระบุตำแหน่งไบต์โดยตรง (แต่ข้อสังเกตเดียวกันนี้ก็เป็นจริงกับโปรเซสเซอร์และหน่วยความจำ/หน่วยเก็บข้อมูลสมัยใหม่ที่มีหน่วยที่สามารถระบุตำแหน่งได้ขั้นต่ำมากกว่า 1 อ็อกเท็ต) อย่างไรก็ตาม โปรเซสเซอร์และตัวประมวลผลสัญญาณสมัยใหม่มีฮาร์ดแวร์รองรับการถอดรหัสกระแสบิตภายในอย่างรวดเร็ว พร้อมการจัดการหน่วยประมวลผลที่ข้ามขอบเขตของหน่วยเก็บข้อมูลที่สามารถระบุตำแหน่งได้โดยอัตโนมัติ (สิ่งนี้จำเป็นสำหรับการประมวลผลที่มีประสิทธิภาพในตัวแปลงสัญญาณข้อมูลสำหรับการบีบอัด/คลายการบีบอัด หรือกับอัลกอริธึมการเข้ารหัส/ถอดรหัสบางอย่าง)
เพื่อเป็นการเปรียบเทียบ Packed Encoding Rules Aligned จะสร้างผลลัพธ์ดังนี้:
01 05 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
รูปแบบนี้เป็นการจัดเรียงตามอ็อกเท็ต ในกรณีนี้ แต่ละอ็อกเท็ตจะถูกเติมด้วยบิตว่างในบิตที่มีค่ามากที่สุดที่ไม่ได้ใช้งาน
เครื่องมือ
เครื่องมือส่วนใหญ่ที่รองรับ ASN.1 ทำงานดังต่อไปนี้:
- วิเคราะห์ไฟล์ ASN.1
- สร้างการประกาศที่เทียบเท่ากันในภาษาโปรแกรม (เช่น C หรือ C++)
- สร้างฟังก์ชันการเข้ารหัสและการถอดรหัสโดยอิงจากการประกาศก่อนหน้านี้
รายชื่อเครื่องมือที่รองรับ ASN.1 สามารถดูได้ที่หน้า เว็บ ITU-T Tool
เครื่องมือออนไลน์
- เอเอสเอ็น1 เพลย์
- เครื่องมือเว็บ ASN1 (มีข้อจำกัดมาก)
- สนามเด็กเล่น ASN1 (กระบะทราย)
- ตัวถอดรหัส JavaScript ของ ASN.1
การเปรียบเทียบกับโครงการที่คล้ายคลึงกัน
ASN.1 มีวัตถุประสงค์และการใช้งานคล้ายกับGoogle Protocol BuffersและApache Thriftซึ่งเป็นภาษาสำหรับการอธิบายอินเทอร์เฟซเพื่อการจัดเก็บข้อมูลข้ามแพลตฟอร์มเช่นกัน เช่นเดียวกับภาษาเหล่านั้น ASN.1 มีสคีมา (ใน ASN.1 เรียกว่า "โมดูล") และชุดของการเข้ารหัส ซึ่งโดยทั่วไปจะเป็นการเข้ารหัสแบบประเภท-ความยาว-ค่า แต่แตกต่างจากภาษาเหล่านั้นตรงที่ ASN.1 ไม่มีการใช้งานแบบโอเพนซอร์สที่พร้อมใช้งานได้ทันที และถูกเผยแพร่เป็นข้อกำหนดเพื่อให้ผู้จำหน่ายภายนอกนำไปใช้งาน อย่างไรก็ตาม ASN.1 ซึ่งกำหนดขึ้นในปี 1984 นั้นมีมาก่อนภาษาเหล่านั้นหลายปี นอกจากนี้ยังรวมถึงประเภทข้อมูลพื้นฐานที่หลากหลายกว่า ซึ่งบางประเภทอาจล้าสมัยไปแล้ว และมีตัวเลือกสำหรับการขยายเพิ่มเติมมากกว่า ข้อความ ASN.1 เดียวสามารถรวมข้อมูลจากหลายโมดูลที่กำหนดไว้ในหลายมาตรฐาน แม้แต่มาตรฐานที่กำหนดขึ้นห่างกันหลายปีก็ตาม
ASN.1 ยังมีระบบรองรับข้อจำกัดเกี่ยวกับค่าและขนาดในตัวอีกด้วย ตัวอย่างเช่น โมดูลสามารถระบุฟิลด์จำนวนเต็มที่ต้องอยู่ในช่วง 0 ถึง 100 ได้ นอกจากนี้ยังสามารถระบุความยาวของลำดับค่า (อาร์เรย์) ได้ทั้งในรูปแบบความยาวคงที่หรือช่วงความยาวที่อนุญาต ข้อจำกัดยังสามารถระบุได้ในรูปแบบของการรวมกันเชิงตรรกะของชุดข้อจำกัดพื้นฐานต่างๆ
ค่าที่ใช้เป็นข้อจำกัดอาจเป็นค่าคงที่ที่ใช้ในข้อกำหนด PDU หรือค่า ASN.1 ที่ระบุไว้ที่อื่นในไฟล์สคีมา เครื่องมือ ASN.1 บางตัวจะทำให้ค่า ASN.1 เหล่านี้พร้อมใช้งานสำหรับโปรแกรมเมอร์ในซอร์สโค้ดที่สร้างขึ้น เมื่อใช้เป็นค่าคงที่สำหรับโปรโตคอลที่กำลังกำหนด นักพัฒนาสามารถใช้ค่าเหล่านี้ในการใช้งานตรรกะของโปรโตคอลได้ ดังนั้น PDU และค่าคงที่ของโปรโตคอลทั้งหมดสามารถกำหนดได้ในสคีมา และการใช้งานโปรโตคอลทั้งหมดในภาษาที่รองรับใด ๆ จะดึงค่าเหล่านั้นมาใช้ ซึ่งช่วยหลีกเลี่ยงความจำเป็นที่นักพัฒนาจะต้องเขียนโค้ดค่าคงที่ของโปรโตคอลด้วยตนเองในซอร์สโค้ดของการใช้งาน วิธีนี้ช่วยในการพัฒนาโปรโตคอลอย่างมาก ค่าคงที่ของโปรโตคอลสามารถเปลี่ยนแปลงได้ในสคีมา ASN.1 และการใช้งานทั้งหมดจะได้รับการอัปเดตโดยการคอมไพล์ใหม่เท่านั้น ซึ่งส่งเสริมวงจรการพัฒนาที่รวดเร็วและมีความเสี่ยงต่ำ
หากเครื่องมือ ASN.1 มีการตรวจสอบข้อจำกัดในโค้ดต้นฉบับที่สร้างขึ้นอย่างถูกต้อง จะช่วยตรวจสอบความถูกต้องของข้อมูลโปรโตคอลโดยอัตโนมัติระหว่างการทำงานของโปรแกรม โดยทั่วไปแล้ว เครื่องมือ ASN.1 จะรวมการตรวจสอบข้อจำกัดไว้ในรูทีนการแปลงข้อมูลเป็นอนุกรม/การแปลงกลับเป็นอนุกรมที่สร้างขึ้น และจะแจ้งข้อผิดพลาดหรือข้อยกเว้นหากพบข้อมูลที่อยู่นอกขอบเขต การนำข้อจำกัด ASN.1 ทุกด้านมาใช้ในคอมไพเลอร์ ASN.1 นั้นซับซ้อน ไม่ใช่ทุกเครื่องมือที่จะรองรับนิพจน์ข้อจำกัดทั้งหมดที่เป็นไปได้ ทั้ง XML schemaและJSON schemaต่างก็รองรับแนวคิดข้อจำกัดที่คล้ายคลึงกัน การรองรับข้อจำกัดของเครื่องมือต่างๆ นั้นแตกต่างกันไป คอมไพเลอร์ xsd.exe ของ Microsoft จะไม่สนใจข้อจำกัดเหล่านี้
การแปลแผนผัง
เครื่องมือ ASN.1 บางตัวสามารถแปลงระหว่าง ASN.1 และ XML schema (XSD) ได้ การแปลงนี้ได้รับการกำหนดมาตรฐานโดย ITU ทำให้สามารถกำหนดโปรโตคอลใน ASN.1 และใน XSD ได้โดยอัตโนมัติ ดังนั้นจึงเป็นไปได้ (แม้ว่าอาจจะไม่แนะนำ) ที่จะมี XSD schema ในโครงการหนึ่งที่ถูกคอมไพล์โดยเครื่องมือ ASN.1 เพื่อสร้างซอร์สโค้ดที่แปลงอ็อบเจ็กต์ไป/กลับจากรูปแบบ JSON wireformat การใช้งานที่ใช้งานได้จริงมากกว่าคือการอนุญาตให้โครงการย่อยอื่นๆ ใช้ XSD schema แทน ASN.1 schema โดยอาจปรับให้เหมาะสมกับความพร้อมใช้งานของเครื่องมือสำหรับภาษาที่โครงการย่อยเลือกใช้ โดยใช้ XER เป็นรูปแบบ wireform ของโปรโตคอล
OSS Nokalva มีเครื่องมือสำหรับแปลงออบเจ็กต์ข้อมูล JSON หรือสคีมา JSON เป็นคำจำกัดความ ASN.1 [ 23 ]ยังไม่มีเครื่องมือสำหรับสร้างสคีมา JSON ที่อธิบายโครงสร้างที่เข้ารหัส JER ของโครงสร้างข้อมูล ASN.1
OSS Nokalva ยังมีเครื่องมือสำหรับแปลงสคีมา Protocol Buffers เป็นคำจำกัดความ ASN.1 อีกด้วย[ 24 ]
รูปแบบที่ไม่ขึ้นอยู่กับโครงสร้างข้อมูล
ภาษาโปรแกรมหลายภาษาได้กำหนดรูปแบบการจัดเก็บข้อมูลเฉพาะภาษาไว้ ตัวอย่างเช่น โมดูล "pickle" ของ Python และโมดูล "Marshal" ของ Ruby รูปแบบเหล่านี้ไม่จำเป็นต้องมีสคีมา โดยทั่วไปแล้วจะเป็นรูปแบบเฉพาะภาษา ซึ่งทำให้ใช้งานได้ง่ายในสถานการณ์การจัดเก็บข้อมูลแบบเฉพาะกิจ แต่ไม่เหมาะสมสำหรับโปรโตคอลการสื่อสาร
JSONและXMLไม่จำเป็นต้องมีสคีมา ทำให้ใช้งานง่าย นอกจากนี้ ทั้งสองยังเป็นมาตรฐานข้ามแพลตฟอร์มที่ได้รับความนิยมอย่างกว้างขวางสำหรับโปรโตคอลการสื่อสาร โดยเฉพาะอย่างยิ่งเมื่อใช้ร่วมกับสคีมา JSONหรือ สคี มา XML
คำจำกัดความของโปรโตคอลในระดับต่างๆ
ASN.1 มีลักษณะคล้ายคลึงกับAugmented Backus-Naur form (ABNF) ซึ่งใช้ในการกำหนดโปรโตคอลอินเทอร์เน็ตหลายอย่าง เช่นHTTPและSMTPอย่างไรก็ตาม ในทางปฏิบัติแล้วทั้งสองแตกต่างกันมาก: ASN.1 กำหนดโครงสร้างข้อมูล ซึ่งสามารถเข้ารหัสได้หลายวิธี (เช่น JSON, XML, ไบนารี) ในขณะที่ ABNF กำหนดการเข้ารหัส ("ไวยากรณ์") ไปพร้อมๆ กับการกำหนดโครงสร้างข้อมูล ("ความหมาย") ABNF มักถูกใช้บ่อยกว่าในการกำหนดโปรโตคอลที่เป็นข้อความที่มนุษย์อ่านได้ และโดยทั่วไปจะไม่ใช้ในการกำหนดการเข้ารหัสแบบประเภท-ความยาว-ค่า
ASN.1 มีลักษณะคล้ายคลึงกับCSN.1 ในด้านรูปลักษณ์ อย่างไรก็ตาม CSN.1 ยังกำหนดวิธีการเข้ารหัสของวัตถุโดยเฉพาะในระดับบิตด้วย
ดูเพิ่มเติม
ลิงก์ภายนอก
- คู่มือฉบับเข้าใจง่ายสำหรับกลุ่มย่อยของ ASN.1, BER และ DERบทนำที่ดีสำหรับผู้เริ่มต้น
- เว็บไซต์ ITU-T - ข้อมูลเบื้องต้นเกี่ยวกับ ASN.1
- วิดีโอแนะนำ ASN.1
- คู่มือการใช้งาน ASN.1คู่มือการใช้งานเกี่ยวกับแนวคิดพื้นฐานของ ASN.1
- คู่มือ การใช้งาน ASN.1 คู่มือการ ใช้งาน ASN.1
- คอมไพเลอร์ ASN.1->C++ แบบโอเพนซอร์ส; รวมข้อกำหนด ASN.1 บางส่วนไว้ด้วย , คอมไพเลอร์ ASN.1->C++ แบบออนไลน์
- ตัวถอดรหัส ASN.1ช่วยให้สามารถถอดรหัสข้อความที่เข้ารหัสแบบ ASN.1 ไปเป็นเอาต์พุต XML ได้
- โปรแกรมตรวจสอบไวยากรณ์และเข้ารหัส/ถอดรหัส ASN.1ตรวจสอบไวยากรณ์ของสคีมา ASN.1 และเข้ารหัส/ถอดรหัสข้อความ
- โปรแกรมเข้ารหัส/ถอดรหัสข้อความ 3GPP มาตรฐาน ASN.1เข้ารหัส/ถอดรหัสข้อความ 3GPP มาตรฐาน ASN.1 และช่วยให้แก้ไขข้อความเหล่านี้ได้ง่าย
- หนังสือฟรีเกี่ยวกับ ASN.1
- รายชื่อเครื่องมือ ASN.1 ในโครงการ IvmaiAsn
- ภาพรวมของกฎการเข้ารหัสอ็อกเท็ต (OER)
- ภาพรวมของกฎการเข้ารหัส JSON (JER)
- ยูทิลิตี้ Node.js ที่เขียนด้วย Typescript สำหรับแยกวิเคราะห์และตรวจสอบความถูกต้องของข้อความ ASN.1
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ASN.1
Abstract Syntax Notation One ( ASN.1 ) เป็น ภาษามาตรฐานสำหรับการอธิบายอินเทอร์เฟซ (IDL) เพื่อกำหนด โครงสร้างข้อมูล ที่สามารถ แปลงเป็นรูปแบบอนุกรมและแปลงกลับเป็นรูปแบบ...
โครงสร้าง
มาตรฐาน X.680 กำหนดคำศัพท์พื้นฐานของภาษา ASN.1 (โทเค็นพิเศษ รูปแบบของค่าตัวอักษรพื้นฐาน ฯลฯ
การสนับสนุนด้านภาษา
ASN.1 เป็นสัญกรณ์การประกาศชนิดข้อมูล ไม่ได้กำหนดวิธีการจัดการตัวแปรของชนิดข้อมูลดังกล่าว การจัดการตัวแปรนั้นถูกกำหนดไว้ในภาษาอื่นๆ เช่น SDL (Specification and Description Language) สำหรับการสร้างแบบจำลองที่สามารถเรียกใช้งานได้ หรือ TTCN-3 (Testing and Test...
แอปพลิเคชัน
ASN.1 ถูกนำมาใช้กำหนดโปรโตคอลจำนวนมาก การใช้งานที่แพร่หลายที่สุดยังคงเป็นด้านโทรคมนาคม การเข้ารหัส และไบโอเมตริกส์