ASN.1 - ASN.1

ASN.1
Soyut Sözdizimi Gösterimi Bir
siber güvenlik.png
Durum Yürürlükte; X.208 ve X.209'un (1988) yerini alır
Yıl başladı 1984
En son sürüm (02/21)
Şubat 2021
organizasyon ITU-T
Temel standartlar ASN.1
İlgili standartlar X.208 , X.209 , X.509 , X.680, X.681, X.682, X.683
İhtisas kriptografi , telekomünikasyon
İnternet sitesi https://www.itu.int/rec/T-REC-X.680/

Abstract Syntax Notation One ( ASN.1 ), platformlar arası bir şekilde serileştirilebilen ve seri durumdan çıkarılabilen veri yapılarını tanımlamak için standart bir arayüz tanımlama dilidir . Telekomünikasyon ve bilgisayar ağlarında ve özellikle kriptografide yaygın olarak kullanılmaktadır .

Protokol geliştiricileri, veri yapılarını genellikle ASN.1 dilinde yazılmış daha geniş standartlar belgesinin bir bölümü olan ASN.1 modüllerinde tanımlar. Avantajı, veri kodlamasının ASN.1 açıklamasının belirli bir bilgisayardan veya programlama dilinden bağımsız olmasıdır. ASN.1 hem insan tarafından hem de makine tarafından okunabilir olduğundan, bir ASN.1 derleyicisi modülleri , veri yapılarının kodunu çözen veya kodlayan kod, codec bileşenleri kitaplıklarında derleyebilir . Bazı ASN.1 derleyicileri, örneğin paketlenmiş, BER veya XML gibi çeşitli kodlamaları kodlamak veya kodunu çözmek için kod üretebilir .

ASN.1, ITU-T Çalışma Grubu 17'deki Uluslararası Telekomünikasyon Birliği Telekomünikasyon Standardizasyon Sektörünün ( ITU-T ) ve orijinal olarak 1984'te CCITT X.409:1984'ün bir parçası olarak tanımlanan ISO / IEC'nin ortak bir standardıdır . 1988'de ASN.1 , geniş uygulanabilirliği nedeniyle kendi standardı olan X.208'e taşındı . Büyük ölçüde revize edilmiş 1995 versiyonu, X.680 serisi kapsamındadır . X.680 serisi tavsiyelerin en son revizyonu, 2015 yılında yayınlanan 5.0 Sürümüdür.

Dil desteği

ASN.1 bir veri tipi bildirim gösterimidir. Böyle bir türdeki bir değişkenin nasıl değiştirileceğini tanımlamaz. Değişkenlerin manipülasyonu, yürütülebilir modelleme için SDL (Specification and Description Language) veya uygunluk testi için TTCN-3 (Test ve Test Kontrol Notasyonu) gibi diğer dillerde tanımlanmıştır . Bu dillerin her ikisi de yerel olarak ASN.1 bildirimlerini destekler. Bir ASN.1 modülünü içe aktarmak ve modülde bildirilen ASN.1 türlerinden herhangi birinin değişkenini bildirmek mümkündür.

Uygulamalar

ASN.1 çok sayıda protokolü tanımlamak için kullanılır. En kapsamlı kullanım alanları telekomünikasyon, kriptografi ve biyometri olmaya devam ediyor.

ASN.1 kullanan protokoller
Protokol Şartname Belirtilen veya Geleneksel Kodlama Kuralları kullanır
Interledger Protokolü https://interledger.org/rfcs/asn1/index.html Sekizli Kodlama Kuralları
NTCIP 1103 - Taşıma Yönetimi Protokolleri NTCIP 1103 Sekizli Kodlama Kuralları Trafik, Ulaşım ve Altyapı Yönetimi
X.500 Dizin Hizmetleri ITU X.500 Tavsiye Serisi Temel Kodlama Kuralları, Seçkin Kodlama Kuralları LDAP, TLS ( X.509 ) Sertifikaları, Kimlik Doğrulama
Basit Dizin Erişim Protokolü (LDAP) RFC  4511 Temel Kodlama Kuralları
PKCS Şifreleme Standartları PKCS Şifreleme Standartları Temel Kodlama Kuralları ve Seçkin Kodlama Kuralları Asimetrik Anahtarlar, sertifika paketleri
X.400 Mesaj İşleme ITU X.400 Tavsiye Serisi E-posta için erken bir rakip
EMV EMVCo Yayınları Ödeme kartları
T.120 Multimedya konferansı ITU T.120 Tavsiye Serisi Temel Kodlama Kuralları, Paketli Kodlama Kuralları Microsoft'un Uzak Masaüstü Protokolü (RDP)
Basit Ağ Yönetim Protokolü (SNMP) RFC  1157 Temel Kodlama Kuralları Ağları ve bilgisayarları, özellikle performans ve güvenilirlikle ilgili özellikleri yönetme ve izleme
Ortak Yönetim Bilgi Protokolü (CMIP) ITU Tavsiyesi X.711 SNMP'ye rakip ama daha yetenekli ve neredeyse o kadar popüler değil
7 Numaralı Sinyalizasyon Sistemi (SS7) ITU Q.700 Tavsiye Serisi Genel Anahtarlamalı Telefon Ağı (PSTN) üzerinden telefon bağlantılarını yönetme
İTÜ H-Serisi Multimedya Protokolleri ITU H.200, H.300 ve H.400 Öneri Serileri İnternet Protokolü Üzerinden Ses (VOIP)
BioAPI Birlikte Çalışma Protokolü (BIP) ISO/IEC 24708:2008
Ortak Biyometrik Değişim Formatları Çerçevesi (CBEFF) NIST IR 6529-A Temel Kodlama Kuralları
Biyometri (ACBio) için Kimlik Doğrulama Bağlamları ISO/IEC 24761:2019
Bilgisayar destekli telekomünikasyon uygulamaları (CSTA) https://www.ecma-international.org/activities/Communications/TG11/cstaIII.htm Temel Kodlama Kuralları
Özel kısa menzilli iletişim (DSRC) SAE J2735 Paketlenmiş Kodlama Kuralları Araç iletişimi
IEEE 802.11p (IEEE DALGA) IEEE 1609.2 Araç iletişimi
Akıllı Ulaşım Sistemleri (ETSI ITS) ETSI EN 302 637 2 (CAM) ETSI EN 302 637 3 (DENM) Araç iletişimi
Mobil İletişim için Küresel Sistem (GSM) http://www.ttfn.net/techno/smartcards/gsm11-11.pdf 2G Cep Telefonu İletişimi
Genel Paket Radyo Hizmeti (GPRS) / GSM Evrimi (EDGE) için Gelişmiş Veri hızları http://www.3gpp.org/technologies/keywords-acronyms/102-gprs-edge 2.5G Cep Telefonu İletişimi
Evrensel Mobil Telekomünikasyon Sistemi (UMTS) http://www.3gpp.org/DynaReport/25-series.htm 3G Cep Telefonu İletişimi
Uzun Vadeli Evrim (LTE) http://www.3gpp.org/technologies/keywords-acronyms/98-lte 4G Cep Telefonu İletişimi
5G https://www.3gpp.org/news-events/3gpp-news/1987-imt2020_workshop 5G Cep Telefonu İletişimi
Ortak Uyarı Protokolü (CAP) http://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html XML Kodlama Kuralları Amber Uyarıları gibi Uyarı Bilgilerini Değiştirme
Kontrolör-pilot veri bağlantısı iletişimi (CPDLC) havacılık iletişimi
Uzay Bağlantısı Uzatma Hizmetleri (SLE) Uzay sistemleri iletişimi
Üretim Mesajı Spesifikasyonu (MMS) ISO 9506-1:2003 Üretme
Dosya Aktarımı, Erişimi ve Yönetimi (FTAM) Dosya Aktarım Protokolü için erken ve daha yetenekli bir rakip, ancak artık nadiren kullanılıyor.
Uzaktan İşlemler Hizmet Öğesi protokolü (ROSE) ITU Tavsiyeleri X.880, X.881 ve X.882 Uzak prosedür çağrısının erken bir şekli
İlişkilendirme Kontrol Hizmet Öğesi (ACSE) ITU Tavsiyesi X.227
Bina Otomasyonu ve Kontrol Ağları Protokolü (BACnet) ASHRAE 135-2020 BACnet Kodlama Kuralları Yangın alarmları, asansörler, HVAC sistemleri vb. ile bina otomasyonu ve kontrolü.
Kerberos RFC  4120 Temel Kodlama Kuralları Güvenli kimlik doğrulama
WiMAX 2 Geniş Alan Ağları
Akıllı Ağ ITU Q.1200 Tavsiye Serisi Telekomünikasyon ve bilgisayar ağları
X2AP Temel Hizalanmış Paket Kodlama Kuralları

kodlamalar

ASN.1, bir veri yapısının bir dizi bayt olarak nasıl temsil edileceğini belirten bir dizi kodlama kuralıyla yakından ilişkilidir. Standart ASN.1 kodlama kuralları şunları içerir:

ASN.1 Kodlama Kuralları
Kodlama Kuralları Nesne Tanımlayıcı OID-IRI
Nesne Tanımlayıcı Değeri
Şartname
Serileştirme Birimi

Spesifikasyon Ön Bilgisi Olmadan Ayırt Edilebilir Kodlanmış Öğeler
Sekizli Hizalanmış
Kodlama Kontrol Gösterimi Kuralları Tanımlandı
Açıklama
Temel Kodlama Kuralları (BER) 2.1.1 /ASN.1/Temel-Kodlama Tek bir ASN.1 türünün Temel Kodlaması İTÜ X.690 sekizli Evet Evet Numara İlk belirtilen kodlama kuralları. Öğeleri etiket-uzunluk-değer (TLV) dizileri olarak kodlar. Tipik olarak, veri değerlerinin nasıl kodlanacağına dair birkaç seçenek sunar. Bu, daha esnek kodlama kurallarından biridir.
Seçkin Kodlama Kuralları (DER) 2.1.2.1 /ASN.1/BER-Türetilen/Seçkin-Kodlama Tek bir ASN.1 türünün ayırt edici kodlaması İTÜ X.690 sekizli Evet Evet Numara Temel Kodlama Kurallarının (BER) kısıtlı bir alt kümesi. Genellikle dijital olarak imzalanmış şeyler için kullanılır, çünkü DER daha az kodlama seçeneğine izin verdiğinden ve DER ile kodlanmış değerlerin tam olarak aynı baytlarda yeniden kodlanma olasılığı daha yüksek olduğundan, belirli bir soyut değer tarafından üretilen dijital imzalar uygulamalar arasında aynı olacak ve DER ile kodlanmış veriler üzerinden üretilen dijital imzalar, çarpışma tabanlı saldırılara karşı daha az duyarlı olacaktır.
Kanonik Kodlama Kuralları (CER) 2.1.2.0 /ASN.1/BER-Türetilen/Kanonik Kodlama Tek bir ASN.1 türünün kurallı kodlaması İTÜ X.690 sekizli Evet Evet Numara Temel Kodlama Kurallarının (BER) kısıtlı bir alt kümesi. Ayırt Edici Kodlama Kuralları (DER) ile hemen hemen aynı kısıtlamaların hepsini kullanır, ancak dikkate değer fark, CER'nin birçok büyük değerin (özellikle dizelerin) 1000 bayt veya 1000 karakterlik işaret (veri türüne bağlı olarak).
Temel Paketlenmiş Kodlama Kuralları (PER) Hizalanmış 2.1.3.0.0 /ASN.1/Packed-Encoding/Temel/Hizalanmış Tek bir ASN.1 türünün paketlenmiş kodlaması (temel hizalanmış) İTÜ X.691 Biraz Numara Evet Numara Bitlerdeki değerleri kodlar, ancak kodlanan bitler sekize eşit olarak bölünemiyorsa, tam sayı sekizli değeri kodlayana kadar dolgu bitleri eklenir. Çok kompakt kodlamalar üretebilir, ancak karmaşıklık pahasına ve PER, veri türlerine yerleştirilen kısıtlamalara büyük ölçüde bağımlıdır.
Temel Paketlenmiş Kodlama Kuralları (PER) Hizalanmamış 2.1.3.0.1 /ASN.1/Packed-Encoding/Temel/Hizasız Tek bir ASN.1 türünün paketlenmiş kodlaması (temel hizalanmamış) İTÜ X.691 Biraz Numara Numara Numara Aligned Basic Packed Encoding Rules (PER)'in bir türevidir, ancak tam bir sekizli sayısı üretmek için veri değerlerini bitlerle doldurmaz.
Kanonik Paketlenmiş Kodlama Kuralları (CPER) Hizalanmış 2.1.3.1.0 /ASN.1/Packed-Encoding/Kanonik/Hizalanmış Tek bir ASN.1 türünün paketlenmiş kodlaması (kurallı hizalanmış) İTÜ X.691 Biraz Numara Evet Numara Değerleri kodlamanın tek bir yolunu belirten Paketli Kodlama Kurallarının (PER) bir çeşidi. Kurallı Paketlenmiş Kodlama Kuralları, Ayırt Edici Kodlama Kuralları (DER) ve Kurallı Kodlama Kuralları'nın (CER) Temel Kodlama Kuralları (BER) ile sahip olduğu Paketli Kodlama Kuralları ile benzer bir ilişkiye sahiptir.
Kanonik Paketlenmiş Kodlama Kuralları (CPER) Hizalanmamış 2.1.3.1.1 /ASN.1/Packed-Encoding/Kanonik/Hizasız Tek bir ASN.1 türünün paketlenmiş kodlaması (kurallı hizalanmamış) İTÜ X.691 Biraz Numara Numara Numara Hizalanmış Kurallı Paketlenmiş Kodlama Kurallarının (CPER) bir çeşididir, ancak tam bir sekizli sayısı üretmek için veri değerlerini bitlerle doldurmaz.
Temel XML Kodlama Kuralları (XER) 2.1.5.0 /ASN.1/XML-Kodlama/Temel Tek bir ASN.1 türünün temel XML kodlaması İTÜ X.693 Karakter Evet Evet Evet ASN.1 verilerini XML olarak kodlar.
Kanonik XML Kodlama Kuralları (CXER) 2.1.5.1 /ASN.1/XML-Kodlama/Kanonik Tek bir ASN.1 türünün kurallı XML kodlaması İTÜ X.693 Karakter Evet Evet Evet
Genişletilmiş XML Kodlama Kuralları (EXER) 2.1.5.2 /ASN.1/XML-Kodlama/Genişletilmiş Tek bir ASN.1 türünün genişletilmiş XML kodlaması İTÜ X.693 Karakter Evet Evet Evet
Sekizli Kodlama Kuralları (OER) 2.1.6.0 Tek bir ASN.1 türünün temel OER kodlaması İTÜ X.696 sekizli Numara Evet Oktetlerdeki değerleri kodlayan, ancak Temel Kodlama Kuralları (BER) gibi etiketleri veya uzunluk belirleyicilerini kodlamayan bir kodlama kuralları kümesi. Octet Kodlama Kuralları kullanılarak kodlanan veri değerleri, genellikle "kayıt tabanlı" protokollerde bulunanlara benzer. Sekizli Kodlama Kuralları (OER), uygulanması kolay olacak ve Temel Kodlama Kuralları (BER) tarafından üretilenlerden daha kompakt kodlamalar üretecek şekilde tasarlanmıştır. OER kullanımı, kodlayıcı/kod çözücü geliştirme çabasını azaltmanın yanı sıra bant genişliği kullanımını azaltabilir (Paket Kodlama Kuralları kadar olmasa da), CPU döngülerinden tasarruf sağlayabilir ve kodlama/kod çözme gecikmesini azaltabilir.
Kanonik Kodlama Kuralları (OER) 2.1.6.1 Tek bir ASN.1 türünün kurallı OER kodlaması İTÜ X.696 sekizli Numara Evet
JSON Kodlama Kuralları (JER) İTÜ X.697 Karakter Evet Evet Evet ASN.1 verilerini JSON olarak kodlar.
Genel Dize Kodlama Kuralları (GSER) 1.2.36.79672281.0.0 Genel Dize Kodlama Kuralları (GSER) RFC  3641 Karakter Evet Numara İnsan tarafından okunabilir değerler üreten kodlama kuralları için eksik bir belirtim. GSER'in amacı, kullanıcıya kodlanmış verileri veya kullanıcıdan gelen verileri çok basit bir biçimde sunmaktır. GSER, başlangıçta Basit Dizin Erişim Protokolü (LDAP) için tasarlanmıştır ve bunun dışında nadiren kullanılır. ASN.1 tarafından desteklenen tüm karakter dizisi kodlamaları içinde yeniden üretilemediğinden, GSER'in gerçek protokollerde kullanılması önerilmez.
BACnet Kodlama Kuralları ASHRAE 135 sekizli Evet Evet Evet Öğeleri, Temel Kodlama Kuralları (BER) gibi etiket-uzunluk-değer (TLV) dizileri olarak kodlar.
Sinyalleme Özel Kodlama Kuralları (SER) Fransa Telekom Ar-Ge Dahili Belgesi sekizli Evet Evet Öncelikle GSM ve SS7 gibi telekomünikasyonla ilgili protokollerde kullanılır. ASN.1'de belirtilmeyen önceden var olan protokollerin üreteceği aynı kodlamayı ASN.1'den üretecek şekilde tasarlanmıştır.
Hafif Kodlama Kuralları (LWER) INRIA'nın dahili belgesi. Hafıza Kelimesi Evet INRIA tarafından üretilen "Düz Ağaç Hafif Sözdizimi" (FTLWS) ayrıntılarını veren dahili bir belgeden kaynaklanır . Paketlenmiş Kodlama Kurallarının (PER) üstün performansı nedeniyle 1997'de terk edildi. İsteğe bağlı olarak Big-Endian veya Little-Endian iletiminin yanı sıra 8-bit, 16-bit ve 32-bit bellek word'leri. (Bu nedenle, bu seçeneklerin altı kombinasyonu olduğundan altı varyant vardır.)
Minimum Bit Kodlama Kuralları (MBER) Biraz 1980'lerde önerildi. Paketlenmiş Kodlama Kuralları (PER) gibi mümkün olduğunca kompakt olması gerekiyordu.
NEMA Paketli Kodlama Kuralları Biraz NEMA tarafından üretilen eksik bir kodlama kuralı belirtimi. Tüm ASN.1 veri türlerini kodlayamadığı ve kodunu çözemediği için eksiktir. Paketlenmiş Kodlama Kuralları (PER) gibi kompakt.
Yüksek Hızlı Kodlama Kuralları "Yüksek Hızlı Ağlar İçin Kodlama Kuralları" Bu kodlama kurallarının tanımı, INRIA'nın Düz Ağaç Hafif Ağırlık Sözdizimi (FTLWS) üzerindeki çalışmasının bir yan ürünüydü.

Kodlama Kontrol Notasyonu

ASN.1 önerileri, önceden tanımlanmış bir dizi kodlama kuralı sağlar. Mevcut kodlama kurallarının hiçbiri uygun değilse, Kodlama Kontrol Notasyonu (ECN) , kullanıcının kendi özelleştirilmiş kodlama kurallarını tanımlaması için bir yol sağlar.

Gizliliği Artırılmış Posta (PEM) Kodlaması ile İlişkisi

Gizliliği Artırılmış Posta (PEM) kodlaması, ASN.1 ve kodekleriyle tamamen ilgisizdir, ancak kodlanmış ASN.1 verileri (genellikle ikili olan) genellikle PEM kodludur. Bu, kopyalama ve yapıştırmanın yanı sıra SMTP geçişleri gibi metinsel kodlamaya duyarlı medya üzerinden aktarıma yardımcı olabilir.

Örnek

Bu, hayali bir Foo Protokolünün mesajlarını (veri yapıları) tanımlayan örnek bir ASN.1 modülüdür :

FooProtocol DEFINITIONS ::= BEGIN

    FooQuestion ::= SEQUENCE {
        trackingNumber INTEGER,
        question       IA5String
    }

    FooAnswer ::= SEQUENCE {
        questionNumber INTEGER,
        answer         BOOLEAN
    }

END

Bu, Foo Protocol'ün yaratıcıları tarafından yayınlanan bir spesifikasyon olabilir. Konuşma akışları, işlem değiş tokuşları ve durumlar ASN.1'de tanımlanmamıştır, ancak protokolün diğer gösterimlerine ve metinsel açıklamasına bırakılmıştır.

Foo Protokolüne uygun ve alıcı tarafa gönderilecek bir mesaj varsayarsak, bu özel mesaj ( protokol veri birimi (PDU)) şöyledir:

myQuestion FooQuestion ::= {
    trackingNumber     5,
    question           "Anybody there?"
}

ASN.1, değerler ve boyutlar ile genişletilebilirlik üzerindeki kısıtlamaları destekler. Yukarıdaki spesifikasyon şu şekilde değiştirilebilir:

FooProtocol DEFINITIONS ::= BEGIN

    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),
        ...
    }

END

Bu değişiklik, traceNumbers öğelerini 0 ile 199 dahil arasında bir değere sahip olacak şekilde ve soruNumbers öğelerini 10 ile 20 arasında bir değere sahip olacak şekilde kısıtlar. Soru dizisinin boyutu 0 ile 10 eleman arasında, cevaplar dizisi 1 ile 10 eleman arasında olabilir. anArray alanı, 0 ila 1000 aralığında olması gereken tamsayılardan oluşan sabit uzunluklu 100 elemanlı bir dizidir. '...' genişletilebilirlik işareti, FooHistory mesaj belirtiminin, belirtimin gelecekteki sürümlerinde ek alanlara sahip olabileceği anlamına gelir; bir sürümle uyumlu sistemler, yalnızca önceki sürümde belirtilen alanları işleyebilmekle birlikte, sonraki bir sürümden işlemleri alabilmeli ve iletebilmelidir. İyi ASN.1 derleyicileri, işlemlerin bu kısıtlamalar dahilinde olup olmadığını otomatik olarak kontrol edecek (C, C++, Java, vb.'de) kaynak kodu üretecektir. Kısıtlamaları ihlal eden işlemler başvurudan kabul edilmemeli veya başvuruya sunulmamalıdır. Bu katmandaki kısıtlama yönetimi, protokol spesifikasyonunu önemli ölçüde basitleştirir, çünkü uygulamalar kısıtlama ihlallerinden korunarak risk ve maliyeti düşürür.

myQuestion mesajını ağ üzerinden göndermek için, mesaj kodlama kurallarından biri kullanılarak bir dizi bayt olarak serileştirilir (kodlanır) . Foo protokolü belirtimi, Foo protokolünün kullanıcılarının hangisini kullanmaları ve beklemeleri gerektiğini bilmeleri için kullanılacak bir dizi kodlama kuralına açıkça ad vermelidir.

DER'de kodlanmış örnek

Aşağıda, DER biçiminde kodlanmış FooQuestion olarak yukarıda gösterilen veri yapısı verilmiştir (tüm sayılar onaltılıktır):

30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f

DER, bir tür-uzunluk-değer kodlamasıdır, bu nedenle yukarıdaki dizi, standart SEQUENCE, INTEGER ve IA5String türlerine göre aşağıdaki gibi yorumlanabilir:

30 — type tag indicating SEQUENCE
13 — length in octets of value that follows
  02 — type tag indicating INTEGER
  01 — length in octets of value that follows
    05 — value (5)
  16 — type tag indicating IA5String 
     (IA5 means the full 7-bit ISO 646 set, including variants, 
      but is generally US-ASCII)
  0e — length in octets of value that follows
    41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f — value ("Anybody there?")

XER'de kodlanmış örnek

Alternatif olarak, "kablo üzerinden" daha fazla insan tarafından okunabilirlik elde etmek için aynı ASN.1 veri yapısını XML Kodlama Kuralları (XER) ile kodlamak da mümkündür . Daha sonra aşağıdaki 108 sekizli olarak görünecektir (boşluk sayısı, girinti için kullanılan boşlukları içerir):

<FooQuestion>
    <trackingNumber>5</trackingNumber>
    <question>Anybody there?</question>
</FooQuestion>

PER olarak kodlanmış örnek (hizalanmamış)

Alternatif olarak, Paketli Kodlama Kuralları kullanılırsa, aşağıdaki 122 bit (16 sekizli 128 bite eşittir, ancak burada yalnızca 122 bit bilgi taşır ve son 6 bit yalnızca dolgudur) üretilecektir:

01 05 0e 83 bb ce 2d f9 3c a0 e9 a3 2f 2c af c0

Bu biçimde, gerekli öğeler için tür etiketleri kodlanmaz, bu nedenle kodlamak için kullanılan beklenen şemalar bilinmeden ayrıştırılamaz. Ek olarak, kodlayıcı bir IA5String bayt değerini kodlamanın yalnızca 7 bit gerektirdiğini bildiğinden, IA5String değerine ilişkin baytlar 8 bitlik birimler yerine 7 bitlik birimler kullanılarak paketlenir. Bununla birlikte, uzunluk baytları, ilk tamsayı etiketi 01 için bile burada hala kodlanmıştır (ancak bir PER paketleyici, izin verilen değer aralığının 8 bit'e uyduğunu bilirse bunu ihmal edebilir ve hatta tek değerli bayt 05'i daha az ile sıkıştırabilir. 8 bitten fazla, izin verilen değerlerin yalnızca daha küçük bir aralığa sığabileceğini biliyorsa).

Kodlanmış PER'deki son 6 bit, son bayt c0'ın en az anlamlı 6 bitindeki boş bitlerle doldurulur: bu dizi, daha uzun hizalanmamış bir dizinin parçası olarak eklenirse, bu ekstra bitler iletilemez veya başka bir şeyi kodlamak için kullanılamaz. PER dizisi.

Bu, hizalanmamış PER verilerinin, hizalanmış PER'deki gibi sıralı bir bayt akışı değil, esasen sıralı bir bit akışı olduğu ve ek bağlamsal bit gerektireceğinden, olağan işlemcilerde yazılım tarafından kod çözmenin biraz daha karmaşık olacağı anlamına gelir. kaydırma ve maskeleme ve doğrudan bayt adresleme değil (ancak aynı açıklama, minimum adreslenebilir birimi 1 sekizliden büyük olan modern işlemciler ve bellek/depolama birimleri için de geçerli olacaktır). Bununla birlikte, modern işlemciler ve sinyal işlemcileri, adreslenebilir depolama birimlerinin sınırlarını aşan bilgi işlem birimlerinin otomatik olarak işlenmesiyle bit akışlarının hızlı dahili kodunun çözülmesi için donanım desteği içerir (bu, sıkıştırma/açma için veri kodeklerinde veya bazı şifreleme/ şifre çözme algoritmaları).

Oktet sınırlarında hizalama gerekliyse, hizalanmış bir PER kodlayıcı şunları üretecektir:

01 05 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f

(bu durumda, her sekizli, kullanılmayan en önemli bitlerinde boş bitlerle ayrı ayrı doldurulur).

Aletler

ASN.1'i destekleyen araçların çoğu aşağıdakileri yapar:

  • ASN.1 dosyalarını ayrıştırın,
  • bir programlama dilinde (C veya C++ gibi) eşdeğer bildirimi oluşturur,
  • önceki bildirimlere dayalı olarak kodlama ve kod çözme işlevlerini oluşturur.

ASN.1'i destekleyen araçların bir listesi ITU-T Aracı web sayfasında bulunabilir .

Çevrimiçi araçlar

Benzer şemalarla karşılaştırma

ASN.1, platformlar arası veri serileştirme için arayüz tanımlama dilleri olan protokol arabellekleri ve Apache Thrift için amaç ve kullanım açısından benzerdir . Bu diller gibi, bir şemasına (ASN.1'de "modül" olarak adlandırılır) ve bir dizi kodlamaya, tipik olarak tür-uzunluk-değer kodlamalarına sahiptir. Bunların aksine, ASN.1 tek ve kolayca kullanılabilen bir açık kaynak uygulaması sağlamaz ve üçüncü taraf satıcılar tarafından uygulanacak bir belirtim olarak yayınlanır. Ancak 1984 yılında tanımlanan ASN.1, onlardan çok daha eskidir. Ayrıca, bazıları eski olan ve genişletilebilirlik için daha fazla seçeneğe sahip olan çok çeşitli temel veri türleri içerir. Tek bir ASN.1 mesajı, birden çok standartta tanımlanmış birden çok modülden, hatta yıllar arayla tanımlanmış standartlardan bile veri içerebilir.

ASN.1 ayrıca değerler ve boyutlar üzerindeki kısıtlamalar için yerleşik destek içerir. Örneğin, bir modül, 0 ila 100 aralığında olması gereken bir tamsayı alanı belirtebilir. Bir değerler dizisinin (bir dizi) uzunluğu, sabit bir uzunluk veya izin verilen bir uzunluk aralığı olarak da belirtilebilir. Kısıtlamalar, temel kısıtlama kümelerinin mantıksal kombinasyonları olarak da belirtilebilir.

Kısıtlama olarak kullanılan değerler, PDU belirtiminde kullanılan değişmez değerler veya şema dosyasının başka bir yerinde belirtilen ASN.1 değerleri olabilir. Bazı ASN.1 araçları, bu ASN.1 değerlerini, oluşturulan kaynak kodunda programcılar için kullanılabilir hale getirecektir. Tanımlanan protokol için sabitler olarak kullanılan geliştiriciler, bunları protokolün mantık uygulamasında kullanabilir. Böylece tüm PDU'lar ve protokol sabitleri şemada tanımlanabilir ve desteklenen herhangi bir dilde protokolün tüm uygulamaları bu değerlerden yararlanır. Bu, geliştiricilerin uygulamalarının kaynak kodunda kod protokolü sabitlerini teslim etme ihtiyacını ortadan kaldırır. Bu, protokol geliştirmeye önemli ölçüde yardımcı olur; protokolün sabitleri ASN.1 şemasında değiştirilebilir ve tüm uygulamalar basitçe yeniden derlenerek güncellenir, bu da hızlı ve düşük riskli bir geliştirme döngüsünü destekler.

ASN.1 araçları, oluşturulan kaynak kodundaki kısıtlamaları doğru şekilde uygularsa, bu, program çalışması sırasında protokol verilerini otomatik olarak doğrulamak için hareket eder. Genel olarak ASN.1 araçları, oluşturulan serileştirme/seri hale getirme rutinlerini kontrol eden kısıtlamaları, sınır dışı verilerle karşılaşılırsa hataları veya istisnaları artırmayı içerecektir. Bir ASN.1 derleyicisinde ASN.1 kısıtlamalarının tüm yönlerini uygulamak karmaşıktır. Tüm araçlar, olası kısıtlama ifadelerinin tamamını desteklemez. XML şeması ve JSON şemasının her ikisi de benzer kısıtlama kavramlarını destekler. Bunlardaki kısıtlamalar için araç desteği değişir. Microsoft'un xsd.exe derleyicisi bunları yok sayar.

ASN.1, HTTP ve SMTP gibi birçok İnternet protokolünü tanımlamak için kullanılan Artırılmış Backus-Naur formuna (ABNF) görsel olarak benzerdir . Ancak pratikte oldukça farklıdırlar: ASN.1, çeşitli şekillerde kodlanabilen bir veri yapısını tanımlar (örn. JSON, XML, ikili). ABNF ise kodlamayı ("sözdizimi") tanımlarken aynı zamanda veri yapısını ("anlambilim") tanımlar. ABNF, metinsel, insan tarafından okunabilir protokolleri tanımlamak için daha sık kullanılma eğilimindedir ve genellikle tür-uzunluk-değer kodlamalarını tanımlamak için kullanılmaz.

Birçok programlama dili, dile özgü serileştirme biçimlerini tanımlar. Örneğin, Python'un "turşu" modülü ve Ruby'nin "Mareşal" modülü. Bu biçimler genellikle dile özgüdür. Ayrıca, geçici depolama senaryolarında kullanımlarını kolaylaştıran, ancak iletişim protokolleri için uygun olmayan bir şema gerektirmezler.

JSON ve XML benzer şekilde bir şema gerektirmez ve bu da kullanımlarını kolaylaştırır. Bununla birlikte, her ikisi de platformlar arası standartlardır ve özellikle bir XML şeması veya JSON şemasıyla birleştirildiğinde iletişim protokolleri için yaygın olarak popülerdir .

Bazı ASN.1 araçları, ASN.1 ve XML şeması (XSD) arasında çeviri yapabilir. Çeviri ITU tarafından standardize edilmiştir. Bu, bir protokolün ASN.1'de ve ayrıca XSD'de otomatik olarak tanımlanmasını mümkün kılar. Bu nedenle, bir projede, nesneleri JSON kablo formatına/formatından seri hale getiren kaynak kodu üreten ASN.1 araçları tarafından derlenen bir XSD şemasına sahip olmak (belki de kötü niyetli olsa da) mümkündür. Daha pratik bir kullanım, diğer alt projelerin bir ASN.1 şeması yerine bir XSD şemasını kullanmasına izin vermektir; bu, belki de, protokol kablo formatı olarak kullanılan XER ile, seçilen alt proje dili için araçların kullanılabilirliğine uygundur.

Daha fazla ayrıntı için bkz . Veri serileştirme biçimlerinin karşılaştırılması .

Ayrıca bakınız

Referanslar

Dış bağlantılar