Кіріспе

Деректер интерфейсін сипаттау тілі

Abstract Syntax Notation One (ASN.1) – платформааралық түрде тізбектеле (сериалдастырыла) және тізбектелмеуге (десериалдастырыла) болатын дерек құрылымдарын анықтау үшін стандартты интерфейсті сипаттау тілі (IDL). Ол телекоммуникация және компьютерлік желілерде, әсіресе криптографияда кеңінен қолданылады. Протокол әзірлеушілер дерек құрылымдарын ASN.1 модульдерінде анықтайды, олар әдетте ASN.1 тілінде жазылған үлкен стандарттар құжатының бөлігі болып табылады. Оның артықшылығы – ASN.1 деректерді кодтау сипаттамасының нақты компьютер немесе бағдарламалау тіліне тәуелді болмауы. ASN.1 адам және машина оқи алатындықтан, ASN.1 компиляторы модульдерді код кітапханаларына, кодектерге, дерек құрылымдарын кодтауға немесе декодтауға арналған модульдерге түрлендіре алады. Кейбір ASN.1 компиляторлары бірнеше кодтамаларды, мысалы, жинақы (packed), BER немесе XML кодтамаларын кодтауға немесе декодтауға код жасай алады. ASN.1 – Халықаралық телекоммуникация одағының телекоммуникацияны стандарттау секторының (ITU T) ITU T 17 зерттеу тобы және Халықаралық стандарттау ұйымы/Халықаралық электротехникалық комиссияның (ISO/IEC) бірлескен стандарты, алғаш рет 1984 жылы CCITT X.409:1984 стандартының бөлігі ретінде анықталған. 1988 жылы ASN.1 кең қолданылуына байланысты жеке стандарты X.208 стандартына көшті. 1995 жылғы қайта қарастырылған нұсқасы X.680 сериясына жатады. X.680 ұсынымдарының соңғы қайта қаралуы – 2021 жылы жарияланған 6.0 нұсқасы.

Тілдік қолдау

ASN.1 – дерек типін жариялау нотациясы. Ол мұндай типтегі айнымалыны қалай өңдеуді анықтамайды. Айымалыларды өңдеу SDL (Сипаттама және ерекшелеу тілі) сияқты, орындалатын модельдеу үшін немесе TTCN 3 (Тестілеу және тестілеуді басқару нотациясы) сияқты, сәйкестік тестілеуі үшін басқа тілдерде анықталады. Бұл екі тіл ASN.1 жариялауларын түпкілікті қолдайды. ASN.1 модулін импорттап, модульде жарияланған ASN.1 типтерінің кез келгенінің айнымалысын жариялауға болады.

Қолданбалар

ASN.1 көптеген протоколдарды анықтау үшін қолданылады. Оның ең кең таралған қолдануы телекоммуникация, криптография және биометрия болып табылады. + ASN.1 протокол спецификациясын пайдаланатын протоколдар Белгіленген немесе әдеттегі кодтау ережелері Interledger Protocol ILPV4 спецификациясы Окталық кодтау ережелері NTCIP 1103 Тасымалдау басқару протоколдары NTCIP 1103 Окталық кодтау ережелері Қозғалыс, көлік және инфрақұрылымды басқару X.500 Каталог қызметтері ITU X.500 ұсынымдар сериясы Негізгі кодтау ережелері, Ерекше кодтау ережелері LDAP, TLS (X.509) сертификаттары, куәландыру Жеңіл каталогтық кіру протоколы (LDAP) Негізгі кодтау ережелері PKCS криптография стандарттары PKCS криптография стандарттары Негізгі және ерекше кодтау ережелері Асимметриялық кілттер, сертификат жинақтары X.400 Хабарларды өңдеу ITU X.400 ұсынымдар сериясы Электрондық поштаға ерте бәсекелес EMV EMVCo жарияланымдары Төлем карталары T.120 Мультимедиалық конференциялар ITU T.120 ұсынымдар сериясы Негізгі кодтау ережелері, жинақы кодтау ережелері Microsoft-тың қашықтан жұмыс үстелі протоколы (RDP) Жеңіл желілік басқару протоколы (SNMP) Негізгі кодтау ережелері Желілер мен компьютерлерді басқару және бақылау, әсіресе өнімділік пен сенімділікке қатысты сипаттамалар Ортақ басқару ақпараттық протоколы (CMIP) ITU X.711 ұсынысы SNMP-ға бәсекелес, бірақ мүмкіндіктері жоғарырақ және одан әлдеқайда аз танымал Сигналдық жүйе №7 (SS7) ITU Q.700 ұсынымдар сериясы Қоғамдық коммутациялық телефондық желіде (PSTN) телефон қосылыстарын басқару ITU H сериясы Мультимедиалық протоколдар 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) Негізгі кодтау ережелері Арнайы қысқа қашықтықтағы байланыс (DSRC) SAE J2735 Жинақы кодтау ережелері Көлік құралдары арасындағы байланыс IEEE 802.11p (IEEE WAVE) IEEE 1609.2 Көлік құралдары арасындағы байланыс Интеллектуалды көлік жүйелері (ETSI ITS) ETSI EN 302 637 2 (CAM) ETSI EN 302 637 3 (DENM) Сәйкестендірілмеген жинақы кодтау ережелері Көлік құралдары арасындағы байланыс Ұялы байланыс жүйесі (GSM) 2G ұялы телефон байланысы Жалпы пакеттік радио қызметі (GPRS) / GSM эволюциясы үшін күшейтілген деректер жылдамдығы (EDGE) 2.5G ұялы телефон байланысы 3G ұялы телефон байланысы Ұзақ мерзімді эволюция (LTE) 4G ұялы телефон байланысы 5G 5G ұялы телефон байланысы Ортақ ескерту протоколы (CAP) XML кодтау ережелері Ескерту туралы ақпаратты алмасу, мысалы, Amber ескертулері Ұшқыш-бақылаушы деректер байланысы (CPDLC) Әуе кеңістігі байланысы Космикалық байланыс қызметтері (SLE) Космикалық жүйелер байланысы Өндіріс хабарламасының спецификациясы (MMS) ISO 9506 1:2003 Өндіріс файлдарын беру, кіру және басқару (FTAM) Файлдарды беру протоколына ерте және мүмкіндіктері жоғарырақ бәсекелес, бірақ қазірде сирек қолданылады. Қашықтан басқару қызмет элементі протоколы (ROSE) ITU X.880, X.881 және X.882 ұсынымдары Қашықтан процедуралық шақырудың алғашқы түрі Қауымдастық бақылау қызмет элементі (ACSE) ITU X.227 ұсынысы Ғимараттарды автоматтандыру және басқару желілері протоколы (BACnet) ASHRAE 135 2020 BACnet кодтау ережесі Өрт сигнализациясы, лифтілер, HVAC жүйелері және т.б. сияқты ғимараттарды автоматтандыру және басқару. Kerberos Негізгі кодтау ережесі Қауіпсіз куәландыру WiMAX 2 Кең ауқымды желілер Интеллектуалды желі ITU Q.1200 ұсынымдар сериясы Телекоммуникациялар және компьютерлік желілер X2AP Негізгі сәйкестендірілген жинақы кодтау ережесі Заңды тыңдау (LI) Тапсыру интерфейсі ETSI TS 102 232 1 Заңды тыңдау

Кодтау

ASN.1 дерек құрылымын байттар тізбегі ретінде көрсету тәсілін анықтайтын кодтау ережелері жиынтығымен тығыз байланысты. Стандартты ASN.1 кодтау ережелері: + ASN.1 кодтау ережелері rowspan=2 Объект сәйкестендіргіші Объект сипаттамасы мәні rowspan=2 rowspan=2 rowspan=2 rowspan=2 rowspan=2 rowspan=2 Сипаттама Нүктелі IRI (Internationalized resource identifier) 2.1.1 /ASN.1/Basic Encoding Бір ASN.1 түрінің негізгі кодтауы ITU X.690 Октаты ✔ ✔ Бірінші көрсетілген кодтау ережелері. Элементтерді тег-ұзындық-мәнді (TLV) тізбектер ретінде кодтайды. Әдетте дерек мәндерін кодтаудың бірнеше нұсқасын ұсынады. Бұл ең икемді кодтау ережелерінің бірі. 2.1.2.1 /ASN.1/BERDerived/DistinguishedEncoding Бір ASN.1 түрінің ерекше кодтауы ITU X.690 Октаты ✔ ✔ Базалық кодтау ережесінің (BER) шектеулі жиынтығы. Көбінесе цифрлық қолтаңбаланған нысандар үшін қолданылады, себебі DER кодтау үшін азырақ мүмкіндіктер бар және DER кодталған мәндер дәл сол байттарда қайта кодталуы мүмкін, сондықтан берілген абстрактілік мән бойынша жасалған цифрлық қолтаңбалар барлық іске асыруларда бірдей болады және DER кодталған деректерге жасалған цифрлық қолтаңбалар соқтығысуға негізделген шабуылдарға аз бейім. 2.1.2.0 /ASN.1/BERDerived/CanonicalEncoding Бір ASN.1 түрінің канондық кодтауы ITU X.690 Октаты ✔ ✔ Базалық кодтау ережесінің (BER) шектеулі жиынтығы. Бөлінген кодтау ережелері (DER) сияқты көптеген шектеулерді қолданады, бірақ ерекше айырмашылығы - CER көптеген үлкен мәндерді (әсіресе жолдарды) 1000 байт немесе 1000 символ белгісінде (дерек түріне байланысты) жекеше кішкентай жол элементтеріне "бөлу" керектігін көрсетеді. 2.1.3.0.0 /ASN.1/PackedEncoding/Basic/Aligned Бір ASN.1 түрінің (негізгі сәйкестендірілген) қаптамалы кодтауы ITU X.691 Бит ✔ Біттердегі мәндерді кодтайды, бірақ егер кодталған биттер сегізге толық бөлінбесе, онда мәнді кодтайтын октаттардың толық саны болғанға дейін толтыру биттері қосылады. Өте ықшам кодтамаларды жасауға қабілетті, бірақ күрделілік есебінен, және PER дерек түрлеріне қойылған шектеулерге қатты тәуелді. 2.1.5.0 /ASN.1/XMLEncoding/Basic Бір ASN.1 түрінің негізгі XML кодтауы ITU X.693 Символ ✔ ✔ ✔ ASN.1 деректерін XML ретінде кодтайды. 2.1.6.0 Бір ASN.1 түрінің негізгі OER кодтауы ITU X.696 Октаты ✔ Октеттердегі мәндерді кодтайтын, бірақ негізгі кодтау ережелері (BER) сияқты тегтерді немесе ұзындық анықтамаларын кодтамайтын кодтау ережелерінің жиынтығы. Октат кодтау ережесін қолдану арқылы кодталған дерек мәндері көбінесе "жазбаға негізделген" протоколдарда кездесетіндерге ұқсайды. Октат кодтау ережесі (OER) оңай іске асыру және Базалық кодтау ережесінен (BER) жасалған кодтамаларға қарағанда ықшам кодтамаларды жасау үшін жасалды. Кодтаушы/декодтаушыларды әзірлеуге жұмсалатын күшті азайтудан басқа, OER пайдалану жолақты пайдалануды азайта алады (бірақ қаптамалы кодтау ережелеріне қарағанда аз), процессор циклдарын үнемдейді және кодтау/декодтаудың кідірісін азайтады. ITU X.697 Символ ✔ ✔ ✔ ASN.1 деректерін JSON түрінде кодтайды. 1.2.36.79672281.0.0 Жалпы жол кодтау ережесі (GSER) ✔ Адам оқи алатын мәндерді жасайтын кодтау ережесінің толық емес сипаттамасы. GSER мақсаты кодталған деректерді пайдаланушыға немесе пайдаланушыдан кіріс деректерді өте қарапайым форматта ұсыну болып табылады. GSER бастапқыда Жеңіл каталогқа қол жеткізу протоколы (LDAP) үшін жасалған және одан тыс жерде сирек қолданылады. GSER-ді нақты протоколдарда пайдалану ұсынылмайды, себебі ASN.1 қолдайтын барлық жолдарды оның құрамына енгізу мүмкін емес. ASHRAE 135 Октаты ✔ ✔ ✔ Элементтерді тег-ұзындық-мәнді (TLV) тізбектері ретінде кодтайды, сияқты Базалық кодтау ережесі (BER). France Telecom R&D Ішкі құжат Октаты ✔ ✔ Көбінесе GSM және SS7 сияқты телекоммуникациямен байланысты протоколдарда қолданылады. ASN.1-де көрсетілмеген бұрынғы протоколдар шығаратын бірдей кодтаманы жасау үшін жасалған. INRIA-ның ішкі құжаты. Жады сөзі ✔ INRIA-ның "Flat Tree Light Weight Syntax" (FTLWS) егжей-тегжейлі сипаттайтын ішкі құжатынан алынған. 1997 жылы қаптамалы кодтау ережелерінің (PER) жоғары өнімділігіне байланысты тоқтатылды. Үлкен енділік немесе кіші енділік тарату, сондай-ақ 8 бит, 16 бит және 32 бит жад сөздері. (Осылайша, алты нұсқа бар, себебі осы нұсқалардың алты комбинациясы бар.) Бит 1980 жылдары ұсынылған. Қаптамалы кодтау ережелері (PER) сияқты мүмкіндігінше ықшам болу үшін жасалған. Бит NEMA жасаған толық емес кодтау ережесінің сипаттамасы. Ол толық емес, себебі ол барлық ASN.1 дерек түрлерін кодтай және декодтай алмайды. Қаптамалы кодтау ережелері (PER) сияқты ықшам. "Жылдам желілер үшін кодтау ережесі" Бұл кодтау ережесінің анықтамасы INRIA-ның Flat Tree Light Weight Syntax (FTLWS) жұмысының нәтижесі болды.

Кодтаудың бақылау белгісі

ASN.1 ұсыныстары бірқатар алдын ала анықталған кодтау ережелерін ұсынады. Егер қолданыстағы кодтау ережелерінің ешқайсысы да қолайлы болмаса, Кодтауды Басқару Нотациясы (ECN) пайдаланушыға өзінің қажетті кодтау ережелерін жасауға мүмкіндік береді.

Құпиялылық-көшейткіш пошта (PEM) кодтамасына қатысты

Құпиялылықты арттырылған электрондық пошта (PEM) кодтамасы ASN.1 және оның кодектерімен ешқандай қатысы жоқ, бірақ ASN.1 деректері, көбінесе екілік форматта болады, мәтіндік деректер түрінде тарату үшін, мысалы SMTP релелері арқылы немесе көшіру/қою буферлері арқылы жіберуге қолайлы болуы үшін PEM кодтамасына айналдырылады.

ұқсас схемалармен салыстыру

ASN.1 мақсаты мен қолданылуы бойынша Google протоколы буферлеріне және Apache Thrift-ке ұқсас, олар да кросс-платформалық деректерді сериалдау үшін интерфейсті сипаттау тілдері болып табылады. Бұл тілдердегідей, оның схемасы (ASN.1-де "модуль" деп аталады) және әдетте тип-ұзындық-мәнді кодтамалар жиынтығы бар. Олардан айырмашылығы, ASN.1 бірден-бір және оңай қолданылатын ашық бастапқы кодты іске асыруды қамтамасыз етпейді және үшінші тарап жеткізушілері іске асыратын спецификация ретінде жарияланады. Дегенмен, 1984 жылы анықталған ASN.1, олардан көп жылдар бұрын пайда болды. Ол сондай-ақ негізгі деректердің кең түрлерін қамтиды, олардың кейбіреулері ескірген, және кеңейтуге көбірек мүмкіндіктер береді. Бір 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 схемасы мен JSON схемасы да ұқсас шектеулер тұжырымдамаларын қолдайды. Құралдың шектеулерді қолдау деңгейі әртүрлі. Microsoft-тың xsd.exe компиляторы оларды елемейді. ASN.1 сырт көрінісі жағынан көптеген интернет-протоколдарды, мысалы HTTP және SMTP-ді анықтау үшін қолданылатын кеңейтілген Backus Naur формасына (ABNF) ұқсас. Дегенмен, іс жүзінде олар мүлдем басқаша: ASN.1 әртүрлі жолдармен кодталатын деректер құрылымын анықтайды (мысалы, JSON, XML, екілік). ABNF, керісінше, деректер құрылымын ("семантика") анықтағанда бірге кодтаудың ("синтаксис") анықтайды. ABNF көбінесе мәтіндік, адам оқи алатын протоколдарды анықтау үшін қолданылады, және әдетте тип-ұзындық-мәнді кодтамаларды анықтау үшін қолданылмайды. Көптеген бағдарламалау тілдері тілге тән сериалдау форматтарын анықтайды. Мысалы, Python-ның "pickle" модулі және Ruby-дің "Marshal" модулі. Бұл форматтар әдетте тілге тән. Олар сондай-ақ схеманы қажет етпейді, бұл оларды арнайы сақтау сценарийлерінде пайдалануға оңай, бірақ байланыс протоколдары үшін қолайсыз. JSON және XML-ге де схема қажет емес, сондықтан оларды пайдалану оңай. Олар сондай-ақ екі платформалық стандарттар, олар байланыс протоколдары үшін кеңінен танымал, әсіресе JSON схемасы немесе XML схемасымен біріктірілген кезде. Кейбір ASN.1 құралдары ASN.1 мен XML схемасы (XSD) арасында аударуға қабілетті. Аударма ITU ұйымымен стандартталған. Бұл протоколды ASN.1-де, сондай-ақ автоматты түрде XSD-де анықтауға мүмкіндік береді. Осылайша, жобада XSD схемасын ASN.1 құралдарымен құрастыруға болады, ол объектілерді JSON сым форматына/одан сериалдайтын бастапқы кодты шығарады (бәлкім, дұрыс емес). Практикалық қолданылуы басқа қосымша жобаларға ASN.1 схемасының орнына XSD схемасын пайдалануға рұқсат беру болып табылады, мүмкін, қосымша жобалардың таңдаған тілі үшін құралдардың қолдауын ескере отырып, XER протоколдың сым форматы ретінде қолданылады. Толықрақ мәлімет алу үшін, деректерді сериалдау форматтарының салыстыруына қараңыз.