PyDERASN: ka m si dee ASN.1 ọba akwụkwọ nwere oghere na blobs

ASN.1 nke a bụ ọkọlọtọ (ISO, ITU-T, GOST) nke asụsụ na-akọwa ozi a haziri ahazi, yana iwu maka idebe ozi a. Maka m, dị ka onye mmemme, nke a bụ usoro ọzọ maka ịhazi na iwepụta data, yana JSON, XML, XDR na ndị ọzọ. Ọ bụ ihe a na-ahụkarị na ndụ anyị kwa ụbọchị, ọtụtụ ndị na-ezutekwa ya: na ekwentị, ekwentị, nkwukọrịta VoIP (UMTS, LTE, WiMAX, SS7, H.323), na usoro netwọkụ (LDAP, SNMP, Kerberos), na ihe niile. gbasara cryptography (X.509, CMS, ụkpụrụ PKCS), na kaadị akụ na paspọtụ biometric, na ọtụtụ ndị ọzọ.

Akụkọ a gbasara PYDERASN: Python ASN.1 ọba akwụkwọ na-arụsi ọrụ ike na oru metụtara cryptography na Atlas.

PyDERASN: ka m si dee ASN.1 ọba akwụkwọ nwere oghere na blobs
N'ozuzu, ASN.1 abaghị uru ịkwado maka ọrụ cryptographic: ASN.1 na codecs ya dị mgbagwoju anya. Nke a pụtara na koodu ahụ agaghị adị mfe, nke a na-abụkarị vector mbuso agha. Naanị lee anya na ndepụta adịghị ike na ASN.1 ọba akwụkwọ. Bruce Schneier na nke ya Injinia Cryptography na-adụ ọdụ megide iji ọkọlọtọ a n'ihi mgbagwoju anya ya: "Nkọwapụta TLV kacha mara amara bụ ASN.1, mana ọ dị mgbagwoju anya nke ukwuu, anyị na-ezere ya." Ma, ọ dị mwute ikwu, taa anyị nwere akụrụngwa igodo ọha nke ha na-arụsi ọrụ ike X.509 asambodo, CRL, OCSP, TSP, CMP protocol, CMC, ozi CMS, na ọtụtụ ụkpụrụ PKCS. Ya mere, ị ga-enwe ike ịrụ ọrụ na ASN.1 ma ọ bụrụ na ị na-eme ihe ọ bụla metụtara cryptography.

Enwere ike itinye koodu ASN.1 n'ụzọ dị iche iche/codec:

  • BER (Iwu nzuzo nzuzo)
  • CER (Iwu ngbanwe Canonical)
  • der (Iwu nzuzo nzuzo pụrụ iche)
  • GSER (Iwu ngbanwe nke eriri ogologo)
  • JER (Iwu ngbanwe JSON)
  • LWER (Iwu ngbanwe nke ịdị arọ)
  • REO (Iwu ntinye koodu Octet)
  • PER (Iwu nzuzo nzuzo juru)
  • SER (Na-edebanye aha ụkpụrụ nbanye kpọmkwem)
  • Ndị na-eso ụzọ (Iwu ntinye koodu XML)

na ọtụtụ ndị ọzọ. Mana na ọrụ cryptographic, na omume, a na-eji abụọ: BER na DER. Ọbụna na akwụkwọ XML bịanyere aka na ya (XMLDSig, XAdES) A ka ga-enwe Base64-encoded ASN.1 DER ihe, dị ka n'usoro iwu JSON. kasị si ka anyị zoo. Ị nwere ike ịghọta codecs ndị a niile yana ụkpụrụ nzuzo BER/CER/DER n'ime akụkọ na akwụkwọ: ASN.1 n'okwu dị mfe, ASN.1 - Nkwukọrịta n'etiti usoro dị iche iche nke Olivier Dubuisson, ASN.1 Mezuru site n'aka Prof John Larmouth.

BER bụ ọnụọgụ ọnụọgụ abụọ dabere (dịka ọmụmaatụ PER, nke ama ama na nkwukọrịta ekwentị - bit-oriented) usoro TLV. Ederede ihe ọ bụla dịka: mkpado (Tag), na-achọpụta ụdị mmewere a ga-etinye koodu (integer, eriri, ụbọchị, wdg), ogologo (Logologo) ọdịnaya na ọdịnaya n'onwe ya (Vala). BER na-enye gị ohere ịghara ịkọwa uru ogologo site na ịtọ uru ogologo na-enweghị ngwụcha na iji akara ngwụcha-Octets mechie ozi Ọgwụgwụ-Octets. E wezụga itinye koodu ogologo, BER nwere ọtụtụ mgbanwe n'ụzọ o si echekwa ụdị data, dịka:

  • INTEGER, OBJECT IDENTIFIER, BIT STRING na ogologo mmewere nwere ike ọ gaghị ahazi ya (anaghị etinye ya n'ụdị dị ntakịrị);
  • BOOLEAN bụ eziokwu maka ọdịnaya ọ bụla na-abụghị efu;
  • BIT STRING nwere ike ịnwe ihe efu "mgbakwunye";
  • BIT STRING, OCTET STRING na ụdị eriri ha niile ewepụtara, gụnyere ụbọchị / oge, nwere ike ịgbaji n'ime ogologo ogologo ogologo, ogologo nke a na-amaghị n'ihu n'oge (de) encoding;
  • Oge UTCTime/GeneralizedTime nwere ike inwe ụzọ dị iche iche isi kọwaa nkwụghachi mpaghara oge yana “mgbakwunye” efu nke sekọnd;
  • Enwere ike itinye ụkpụrụ ezighi ezi ma ọ bụ enweghị ike itinye koodu;
  • Enwere ike idenye ụkpụrụ aha nke ikpeazụ ibe n'ibe na BIT STRING na nhọrọ nhọrọ;
  • Usoro (nke)/SET (nke) nwere ike ịnwe usoro ihe ọ bụla.

N'ihi ihe ndị a niile dị n'elu, ịdekọ data ka ọ bụrụ otu ụdị nke mbụ anaghị ekwe omume mgbe niile. Ya mere, ewepụtara usoro iwu dị iche iche: DER - na-achịkwa naanị otu ụzọ ngbanwe dị mma, nke dị oke mkpa maka ọrụ cryptographic ebe, dịka ọmụmaatụ, ịgbanwe otu ntakịrị ga-eme ka mbinye aka ma ọ bụ checksum ghara ịdị irè. DER nwere nnukwu mwepu: ogologo nke ihe niile ga-amarịrị tupu oge itinye koodu, nke na-adịghị ekwe ka ntinye data nke usoro iyi. Codec CER enweghị ihe ndọghachi azụ a, n'otu aka ahụ na-ekwe nkwa nnochite anya data na-enweghị mgbagha. Ọ dị nwute (ma ọ bụ ọ dabara nke ọma na anyị enweghị ọbụna ihe ndozi dị mgbagwoju anya karịa?), Ọ ghọọghị ewu ewu. Ya mere, n'omume anyị na-ezute ojiji "agwakọta" nke data BER na DER. Ebe ma CER na DER bụ akụkụ nke BER, ihe ọ bụla BER decoder nwere ike ijikwa ha.

Nsogbu na pyasn1

N'ebe ọrụ anyị na-ede ọtụtụ mmemme Python metụtara cryptography. Afọ ole na ole gara aga, ọ nweghị nhọrọ nke ọba akwụkwọ n'efu: ma ndị a bụ ọba akwụkwọ dị ala nke na-enye gị ohere itinye koodu / decode naanị, dịka ọmụmaatụ, integer na nkụnye eji arụ ọrụ, ma ọ bụ ọba akwụkwọ a. pyasn1. Anyị biri na ya ruo ọtụtụ afọ na na mbụ anyị nwere nnọọ obi ụtọ, ebe ọ bụ na ọ na-enye gị ohere ịrụ ọrụ na ASN.1 owuwu dị ka na elu-larịị ihe: ihe atụ, a decoded X.509 akwụkwọ ihe na-enye gị ohere ịnweta ubi ya site na. interface akwụkwọ ọkọwa okwu: asambodo[“tbsCertificate”] [“serialNumber”] ga-egosi anyị akara akara nke asambodo a. N'otu aka ahụ, ị ​​nwere ike "ịchịkọta" ihe mgbagwoju anya site na iji ha rụọ ọrụ dị ka ndepụta, akwụkwọ ọkọwa okwu, wee kpọọ naanị ọrụ pyasn1.codec.der.encoder.encode wee nweta ihe nnọchianya nke akwụkwọ ahụ.

Otú ọ dị, e gosipụtara adịghị ike, nsogbu na adịghị ike. Enwere na, ọ dị mwute ikwu, ka na-emehie na pyasn1: n'oge ederede, otu n'ime isi ụdị na pyasn1 bụ GeneralizedTime, ezighi ezi decoded na koodu.

N'ime ọrụ anyị, iji chekwaa ohere, anyị na-echekwa naanị ụzọ faịlụ, nkwụsị na ogologo na bytes nke ihe anyị chọrọ ịkọwa. Dịka ọmụmaatụ, faịlụ bịanyere aka na aka aka ike ga-adị na nhazi CMS SignedData ASN.1:

  0     [1,3,1018]  ContentInfo SEQUENCE
  4     [1,1,   9]   . contentType: ContentType OBJECT IDENTIFIER 1.2.840.113549.1.7.2 (id_signedData)
 19-4   [0,0,1003]   . content: [0] EXPLICIT [UNIV 16] ANY
 19     [1,3, 999]   . . DEFINED BY id_signedData: SignedData SEQUENCE
 23     [1,1,   1]   . . . version: CMSVersion INTEGER v3 (03)
 26     [1,1,  19]   . . . digestAlgorithms: DigestAlgorithmIdentifiers SET OF
                           [...]
 47     [1,3, 769]   . . . encapContentInfo: EncapsulatedContentInfo SEQUENCE
 51     [1,1,   8]   . . . . eContentType: ContentType OBJECT IDENTIFIER 1.3.6.1.5.5.7.12.2 (id_cct_PKIData)
 65-4   [1,3, 751]   . . . . eContent: [0] EXPLICIT OCTET STRING 751 bytes OPTIONAL

                 ТУТ СОДЕРЖИМОЕ ПОДПИСЫВАЕМОГО ФАЙЛА РАЗМЕРОМ 751 байт

820     [1,2, 199]   . . . signerInfos: SignerInfos SET OF
823     [1,2, 196]   . . . . 0: SignerInfo SEQUENCE
826     [1,1,   1]   . . . . . version: CMSVersion INTEGER v3 (03)
829     [0,0,  22]   . . . . . sid: SignerIdentifier CHOICE subjectKeyIdentifier
                               [...]
956     [1,1,  64]   . . . . . signature: SignatureValue OCTET STRING 64 bytes
                     . . . . . . C1:B3:88:BA:F8:92:1C:E6:3E:41:9B:E0:D3:E9:AF:D8
                     . . . . . . 47:4A:8A:9D:94:5D:56:6B:F0:C1:20:38:D2:72:22:12
                     . . . . . . 9F:76:46:F6:51:5F:9A:8D:BF:D7:A6:9B:FD:C5:DA:D2
                     . . . . . . F3:6B:00:14:A4:9D:D7:B5:E1:A6:86:44:86:A7:E8:C9

ma anyị nwere ike nweta faịlụ izizi bịanyere aka na ya na 65 bytes, ogologo bytes 751. pyasn1 anaghị echekwa ozi a n'ime ihe ndị e depụtara. Edere ihe a na-akpọ TLVSeeker - obere ọbá akwụkwọ na-enye gị ohere ịmegharị mkpado na ogologo ihe, na interface nke anyị nyere iwu "gaa na mkpado ọzọ", "banye n'ime mkpado" (banye n'ime ihe SEQUENCE), "gaa na mkpado na-esote", "kọwa nkwụsị gị na ogologo ihe ebe anyị nọ." Nke a bụ “akwụkwọ ntuziaka” ịgafe data ASN.1 DER-usoro. Mana ọ gaghị ekwe omume iji data BER-serialized arụ ọrụ n'ụzọ dị otú a, ebe ọ bụ na, dịka ọmụmaatụ, eriri OCTET STRING byte nwere ike itinye koodu n'ụdị ọtụtụ chunks.

Ihe ndọghachi azụ ọzọ maka ọrụ pyasn1 anyị bụ enweghị ike ịghọta site na ihe ndị edeputara ma mpaghara enyere ọ nọ na usoro a ma ọ bụ na ọ nọghị. Dịka ọmụmaatụ, ọ bụrụ na ihe owuwu ahụ nwere ngalaba Ubi nke Smth OPTIONAL, mgbe ahụ ọ nwere ike ghara kpamkpam na data na-abata (Nhọrọ), ma ọ bụ ọ nwere ike ịdị ugbu a, mana ọ bụ ogologo efu (ndepụta efu). N'ozuzu, enweghị ike ikpebi nke a. Na nke a dị mkpa maka nkwenye siri ike nke izi ezi nke data natara. Were ya na ụfọdụ ikike asambodo ga-enye asambodo nwere data nke “na-abụghị nke zuru oke” dabere na echiche nke atụmatụ ASN.1! Dịka ọmụmaatụ, ikike asambodo "TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı" gafere oke ikike na asambodo mgbọrọgwụ ya. RFC 5280 njedebe na ogologo akụkụ isiokwu - enweghị ike ịmezi ya n'eziokwu dịka atụmatụ ahụ siri dị. Codec DER chọrọ ka etinyeghị mpaghara nke uru ya na DEFAULT abanyeghị n'oge nnyefe - akwụkwọ ndị dị otú ahụ na-eme na ndụ, na ụdị PyDERASN nke mbụ na-ama ụma kwe ka omume dị otú ahụ ghara ịdị irè (site na echiche DER). ndakọrịta azụ azụ.

Mmachi ọzọ bụ enweghị ike ịchọpụta ngwa ngwa n'ụdị (BER/DER) otu ihe etinyere n'ime ihe owuwu ahụ. Dịka ọmụmaatụ, ọkọlọtọ CMS na-ekwu na ozi a bụ BER-encoded, mana ubi Attrs mbinye aka, nke emepụtara mbinye aka crypto ga-abụrịrị na DER. Ọ bụrụ na anyị ejiri DER decode, anyị ga-adaba na nhazi nke CMS n'onwe ya; ọ bụrụ na anyị ejiri BER decode, anyị agaghị ama ụdị ụdị Attrs bịanyere aka na ya nọ. N'ihi ya, TLVSeeker (nke na-enweghị analogue na pyasn1) ga-achọ ebe ọ bụla n'ime ubi Attrs bịanyere aka na ya, na iche iche, wepụ ya na nnochite anya serialized, decode ya na DER.

Ikike ịhazi nkọwa nke ubi na-akpaghị aka, nke na-emekarị, bụ ihe na-achọsi ike maka anyị. Mgbe emechara nhazi nke ASN.1, enwere ike ịhapụ anyị ọtụtụ mpaghara ọ bụla nke a ga-ahazirịrị n'ihu dịka atụmatụ ahọpụtara dabere na OBJECT IDENTIFIER nke akọwapụtara na mpaghara nhazi. Na Python koodu, nke a pụtara ịde ma ọ bụrụ wee na-akpọ decoder maka ubi ọ bụla.

Mpụta nke PyDERASN

Na Atlas, anyị na-eziga patches mgbe niile n'elu mgbe anyị chọtara nsogbu ụfọdụ ma ọ bụ melite mmemme efu anyị na-eji. Anyị nyefere mmelite na pyasn1 ọtụtụ oge, mana koodu pyasn1 abụghị nke kachasị mfe nghọta na mgbe ụfọdụ enwere mgbanwe API na-ekwekọghị ekwekọ na-akụda anyị. Na mgbakwunye, a na-eji ule generative dee ule, nke na-abụghị ikpe na pyasn1.

Otu ụbọchị mara mma, ekpebiri m na enwere m nke a nke ọma na oge eruola ka m nwaa iji __slot__s dee ọbá akwụkwọ nke m, akwụghị ụgwọ na blọb egosipụtara nke ọma! Naanị ịmepụta codec ASN.1 agaghị ezuru - anyị kwesịrị ịnyefe ọrụ niile dabere na ya, na ndị a bụ ọtụtụ narị puku ahịrị koodu nke jupụtara n'ọrụ na usoro ASN.1. Ya bụ, otu n'ime ihe achọrọ maka ya: mfe nke nsụgharị nke koodu pyasn1 dị ugbu a. Ebe m nọrọ ezumike m niile, edere m ọbá akwụkwọ a wee bufee ya ọrụ niile. Ebe ọ bụ na ha nwere ihe fọrọ nke nta ka ọ bụrụ 100% mkpuchi site na ule, nke a pụtara na ọbá akwụkwọ ahụ arụ ọrụ nke ọma.

PyDERASN, n'otu aka ahụ, nwere ihe fọrọ nke nta ka ọ bụrụ 100% mkpuchi ule. Ọ na-eji nnukwu ọba akwụkwọ na-eji nnwale mmepụta echiche. E mekwara ya na-eju anya py-afl- M na-eri na igwe nuklia iri atọ na abụọ. N'agbanyeghị eziokwu na anyị enweghị ihe fọrọ nke nta ka ọ bụrụ koodu Python32 fọdụrụ, PyDERASN ka na-akwado ya na n'ihi nke a nwere naanị ya. isii riri ahụ. Ọzọkwa, a na-anwale ya megide ASN.1:2008 nnabata ule ụlọ.

Ụkpụrụ nke ịrụ ọrụ na ya yiri pyasn1 - na-arụ ọrụ na ihe Python dị elu. Nkọwa nke atụmatụ ASN.1 yiri ya.

class TBSCertificate(Sequence):
    schema = (
        ("version", Version(expl=tag_ctxc(0), default="v1")),
        ("serialNumber", CertificateSerialNumber()),
        ("signature", AlgorithmIdentifier()),
        ("issuer", Name()),
        ("validity", Validity()),
        ("subject", Name()),
        ("subjectPublicKeyInfo", SubjectPublicKeyInfo()),
        ("issuerUniqueID", UniqueIdentifier(impl=tag_ctxp(1), optional=True)),
        ("subjectUniqueID", UniqueIdentifier(impl=tag_ctxp(2), optional=True)),
        ("extensions", Extensions(expl=tag_ctxc(3), optional=True)),
    )

Agbanyeghị, PyDERASN nwere ụfọdụ ụdị nke mkpisi aka siri ike. Na pyasn1, ọ bụrụ na ubi bụ ụdị CMSVersion(INTEGER), mgbe ahụ enwere ike kenye ya int ma ọ bụ INTEGER. PyDERASN na-achọsi ike ka ihe e kenyere ya bụrụ kpọmkwem CMSVersion. Na mgbakwunye na ide Python3 code, anyị na-ejikwa dee nkọwa, Ya mere, ọrụ anyị agaghị enwe arụmụka na-adịghị ahụkebe dị ka def func (usoro, ọdịnaya), ma def func (serial: CertificateSerialNumber, ọdịnaya: EncapsulatedContentInfo), na PyDERASN na-enyere aka idobe koodu dị otú ahụ.

N'otu oge ahụ, PyDERASN nwere ohere dị oke mma maka ide ihe a. pyasn1 ekweghi ka SubjectKeyIdentifier().subtype(implicitTag=Tag(...)) kenye ihe na SubjectKeyIdentifier() (na-enweghị mkpa IMPLICIT TAG) na ọ dị mkpa ka ị na-edegharị na megharịa ihe naanị n'ihi mkpado ndị gbanwere NTỤKWU NDỊ KWESỊRỊ. PyDERASN na-eleba anya naanị ụdị ntọala - ọ ga-edochi mkpado ozugbo site na atụmatụ ASN.1 dị ugbua nke nhazi ahụ. Nke a na-eme ka koodu ngwa dị mfe.

Ọ bụrụ na njehie emee n'oge ngbanwe, mgbe ahụ na pyasn1 ọ dịghị mfe ịghọta ebe kpọmkwem o mere. Dịka ọmụmaatụ, na akwụkwọ akụkọ Turkish nke a kpọtụrụ aha n'elu, anyị ga-enweta njehie na-esonụ: UTF8String (tbsCertificate: issuer:rdnSequence:3:0: value:DEFINED BY 2.5.4.10:utf8String) (na 138) enweghị afọ ojuju: 1 ⇐ 77 ⇐ 64 Mgbe ị na-ede ihe owuwu ASN .1 ndị mmadụ nwere ike imehie ihe, nke a na-eme ka ọ dịrị mfe ịmegharị ngwa ma ọ bụ chọpụta nsogbu na akwụkwọ ndị ọzọ nwere koodu.

Ụdị PyDERASN nke mbụ akwadoghị itinye koodu BER. Ọ pụtara ọtụtụ oge ma ọ kaghị akwado nhazi UCTime/GeneralizedTime na mpaghara oge. Nke a ga-abịa n'ọdịnihu, n'ihi na a na-ede ọrụ ahụ karịsịa na oge efu m.

Ọzọkwa, na mbụ version ọ dịghị ọrụ na-DEFINED BY ubi. Ọnwa ole na ole ka e mesịrị nke a ohere bilitere wee malite iji ya na-arụsi ọrụ ike, na-ebelata koodu ngwa ngwa - n'otu ọrụ ngbanwe ọ ga-ekwe omume ịnweta usoro ahụ dum gbasasịrị ruo omimi. Iji mee nke a, schema na-akọwapụta mpaghara "akọwapụta" ihe. Dịka ọmụmaatụ, nkọwa nke atụmatụ CMS:

class ContentInfo(Sequence):
    schema = (
        ("contentType", ContentType(defines=((("content",), {
            id_authenticatedData: AuthenticatedData(),
            id_digestedData: DigestedData(),
            id_encryptedData: EncryptedData(),
            id_envelopedData: EnvelopedData(),
            id_signedData: SignedData(),
        }),))),
        ("content", Any(expl=tag_ctxc(0))),
    )

na-ekwu na ọ bụrụ na ọdịnayaType nwere OID nwere uru id_signedData, mgbe ahụ, mpaghara ọdịnaya (nke dị n'otu SEQUENCE) ga-edozirịrị dịka atụmatụ SignedData siri dị. Gịnị mere e ji nwee ọtụtụ mbinye aka? Otu ubi nwere ike "kọwapụta" ọtụtụ ubi n'otu oge, dịka ọ dị n'ụdị EnvelopedData. A na-amata mpaghara ndị akọwapụtara site na nke a na-akpọ ụzọ decode - ọ na-akọwapụta kpọmkwem ebe ihe ọ bụla dị na nhazi niile.

Ị naghị achọ mgbe niile ma ọ bụ na ọ bụghị mgbe niile ka ị na-enwe ohere itinye nkọwa ndị a ozugbo na eserese ahụ. Enwere ike ịnwe ikpe akọwapụtara ngwa mgbe OIDs na ihe owuwu mara naanị na ọrụ ndị ọzọ. PyDERASN na-enye ike ịtọ nkọwa ndị a nke ọma n'oge ngbanwe nhazi ahụ:

ContentInfo().decode(data, ctx={"defines_by_path": ((
    (
        "content", DecodePathDefBy(id_signedData),
        "certificates", any, "certificate", "tbsCertificate",
        "extensions", any, "extnID",
    ),
    ((("extnValue",), {
        id_ce_authorityKeyIdentifier: AuthorityKeyIdentifier(),
        id_ce_basicConstraints: BasicConstraints(),
        [...]
        id_ru_subjectSignTool: SubjectSignTool(),
    }),),
),)})

N'ebe a, anyị na-ekwu na na CMS SignedData maka asambodo niile agbakwunyere, depụta koodu ndọtị ha niile (AuthorityKeyIdentifier, BasicConstraints, SubjectSignTool, wdg). Anyị na-egosi site na ụzọ decode nke mmewere kwesịrị ka e jiri nkọwa dochie ya, dị ka a ga-asị na akọwapụtara ya na schema.

N'ikpeazụ, PyDERASN nwere ikike ịgba ọsọ ahịrị iwu maka idebe faịlụ ASN.1 ma nwee ọgaranya mara mma obibi. Ị nwere ike decode ASN.1 aka ike, ma ọ bụ ị nwere ike ịkọwapụta atụmatụ nke ọma wee hụ ihe dịka nke a:

PyDERASN: ka m si dee ASN.1 ọba akwụkwọ nwere oghere na blobs

Ozi egosipụtara: nkwụghachi ihe, ogologo mkpado, ogologo ogologo, ogologo ọdịnaya, ọnụnọ nke EOC (njedebe-octets), njirimara BER, njirimara ntinye ederede na-enweghị ngwụcha, ogologo na nkwụghachi nke mkpado EXPLICIT (ma ọ bụrụ na ọ bụla), ntinye omimi nke ihe dị n'ụdị, uru mkpado akọwapụtaghị / nkọwapụta, aha ihe dị ka atụmatụ ahụ si dị, ụdị ASN.1 isi ya, nọmba usoro n'ime usoro / SET OF, HOICE uru (ọ bụrụ na ọ bụla), aha mmadụ nwere ike ịgụ INTEGER / ENUMERATED / BIT STRING dị ka atụmatụ, uru nke ọ bụla isi ụdị , DEFAULT / Nhọrọ ọkọlọtọ si atụmatụ, ihe ịrịba ama na ihe na-akpaghị aka decoded ka akọwapụta site na n'ihi nke OID nke a mere, mmadụ-agụ OID.

A haziri usoro obibi akwụkwọ mara mma nke ukwuu ka o wee wepụta usoro nke ihe PP nke a na-ahụ anya site na iji ngwaọrụ dị iche iche. Nseta nseta ahụ na-egosi onye nrụpụta na ederede agba dị mfe. Enwekwara ndị na-atụgharị n'ụdị JSON/HTML, ka e wee hụ ya na-eme ka ọ pụta ìhè na ihe nchọgharị ASN.1, dị ka na asn1js oru ngo.

Ụlọ akwụkwọ ndị ọzọ

Nke a abụghị ebumnuche, mana PyDERASN tụgharịrị nke ọma Ọsọ ọsọ karịa pyasn1. Dịka ọmụmaatụ, ịmegharị faịlụ CRL nke nha megabyte nwere ike were ogologo oge nke na ị ga-eche maka usoro nchekwa data etiti (ngwa ngwa) wee gbanwee nhazi ngwa ngwa. pyasn1 na-ekpebi CRL CACErt.org na laptọọpụ m na-ewe ihe karịrị nkeji iri abụọ, ebe PyDERASN na-ewe naanị 20 sekọnd! Enwere oru ngo asn1crypto, iji rụọ ọrụ ngwa ngwa na usoro cryptographic: ọ na-achọpụta (n'ụzọ zuru ezu, ọ bụghị umengwụ) otu CRL na 29 sekọnd, ma na-eri ihe fọrọ nke nta ka ọ bụrụ okpukpu abụọ karịa RAM mgbe ọ na-agba ọsọ n'okpuru Python3 (983 MiB versus 498), na na 3.5 ugboro n'okpuru Python2 (1677). vesos 488), ebe pyasn1 na-eri ihe ruru ugboro 4.3 karịa (2093 vesos 488).

Anyị atụleghị asn1crypto, nke m kwuru, n'ihi na ọrụ ahụ ka na-amalite na anyị anụbeghị banyere ya. Ugbu a, anyị agaghị ele anya na ntụziaka ya, ebe ọ bụ na achọpụtara m ozugbo na otu GeneralizedTime anaghị ewere ụdị aka ike, na n'oge serialization ọ na-ewepụ obere akụkụ nke sekọnd. A na-anabata nke a maka ịrụ ọrụ na asambodo X.509, mana n'ozuzu ọ gaghị arụ ọrụ.

N'oge a, PyDERASN bụ ihe nrụnye Python/Go DER kacha akwụ ụgwọ m maara. N'ọbá akwụkwọ nzuzo/asn1 nke onye m hụrụ n'anya Go ọ bụghị nlele siri ike OBJECT IdentIFIER na UCTtime/GeneralizedTime strings. Mgbe ụfọdụ ike siri ike nwere ike ịbanye n'ụzọ (nke bụ n'ihi ndakọrịta azụ na ngwa ochie nke na-enweghị onye ga-edozi), ya mere PyDERASN nwere ike ịgafe. ntọala dị iche iche ebelata ego elele.

Koodu oru ngo na-anwa ka o di mfe dika o kwere mee. Ọbá akwụkwọ niile bụ otu faịlụ. Edere koodu ahụ na agbasiri ike na ịdị mfe nghọta, na-enweghị nkwalite arụmọrụ na-enweghị isi yana koodu DRY. Ọ naghị, dị ka m kwuru na mbụ, na-akwado nzizi BER zuru oke nke eriri UTCTime/GeneralizedTime, yana REAL, RELATIVE OID, ExTERNAL, INSTANCE OF, EMBEDDED PDV, CharacTER STRING data ụdị. N'okwu ndị ọzọ niile, mụ onwe m ahụghị isi ihe dị n'iji ụlọ akwụkwọ ndị ọzọ na Python.

Dị ka ọrụ m niile, dị ka PyGOST, GoGOST, NCCP, GoVPN, PyDERASN bụ kpamkpam software efu, kesara n'okpuru usoro LGPLv3+, ma dị maka nbudata n'efu. Enwere ọmụmaatụ ojiji ebe a na na Nnwale PyGOST.

Sergey Matveev, cypherpunk, otu Ụlọ ọrụ SPO Foundation, Python/Go onye nrụpụta, onye isi ọkachamara FSUE "STC "Atlas".

isi: www.habr.com

Tinye a comment