PyDERASN: mar a scríobh mé leabharlann ASN.1 le sliotáin agus blobaí

ASN.1 is caighdeán é seo (ISO, ITU-T, GOST) do theanga a chuireann síos ar fhaisnéis struchtúrtha, chomh maith le rialacha chun an fhaisnéis seo a ionchódú. Maidir liom féin, mar ríomhchláraitheoir, níl anseo ach formáid sraitheachú agus cur i láthair sonraí eile, in éineacht le JSON, XML, XDR agus cinn eile. Tá sé thar a bheith coitianta inár saol laethúil, agus tagann go leor daoine trasna air: i gcumarsáid cheallacha, teileafóin, VoIP (UMTS, LTE, WiMAX, SS7, H.323), i bprótacail líonra (LDAP, SNMP, Kerberos), i ngach rud a baineann sé le cripteagrafaíocht (caighdeáin X.509, CMS, PKCS), i gcártaí bainc agus i bpasanna bithmhéadracha, agus go leor áiteanna eile.

Déileálann an t-alt seo le PyDERASN: Leabharlann Python ASN.1 a úsáidtear go gníomhach i dtionscadail a bhaineann le cripteagrafaíocht i Atlas.

PyDERASN: mar a scríobh mé leabharlann ASN.1 le sliotáin agus blobaí
Go ginearálta, ní mholtar ASN.1 le haghaidh tascanna cripteagrafacha: tá ASN.1 agus a codecs casta. Ciallaíonn sé seo nach mbeidh an cód simplí, agus is veicteoir ionsaí breise é seo i gcónaí. Go leor le feiceáil chuig an liosta leochaileachtaí i leabharlanna ASN.1. Bruce Schneier ina chuid Innealtóireacht cripteagrafaíochta díspreagann sé freisin úsáid an chaighdeáin seo mar gheall ar a chastacht: "Is é ASN.1 an t-ionchódú TLV is cáiliúla, ach tá sé thar a bheith casta agus táimid cúthail uaidh". Ach, ar an drochuair, ní mór dúinn inniu bonneagair eochair phoiblí a úsáideann go gníomhach Teastais X.509, CRL, OCSP, TSP, prótacail CMP, CMC, teachtaireachtaí CMS, agus go leor caighdeáin PKCS. Mar sin, caithfidh tú a bheith in ann oibriú le ASN.1 má tá tú ag déanamh rud éigin a bhaineann le cripteagrafaíocht.

Is féidir ASN.1 a ionchódú ar bhealaí éagsúla/codacs:

  • BER (Rialacha Bunúsacha Ionchódaithe)
  • CER (Rialacha Ionchódaithe Canonical)
  • DER (Rialacha Ionchódaithe Oiriúnacha)
  • GSER (Rialacha Ginearálta um Ionchódú Teaghrán)
  • JER (Rialacha Ionchódaithe JSON)
  • LWER (Rialacha Ionchódaithe Meáchan Éadrom)
  • REO (Rialacha Ionchódaithe Octet)
  • IN AGHAIDH (Rialacha Ionchódaithe Pacáilte)
  • SER (Sainrialacha Ionchódaithe Comharthaíochta)
  • DISCIBLÍ (Rialacha Ionchódaithe XML)

agus roinnt eile. Ach i dtascanna cripteagrafacha, úsáidtear dhá cheann go praiticiúil: BER agus DER. Fiú i gcáipéisí sínithe XML (XMLDSig, XADES) beidh siad fós ina réada ASN.64 ionchódaithe Base1-ionchódaithe, díreach mar atá i bprótacal JSON-dhírithe ACME ó Let's Encrypt. Is féidir leat na codecs seo go léir agus na prionsabail a bhaineann le hionchódú BER / CER / DER a thuiscint níos fearr in ailt agus i leabhair: ASN.1 i bhfocail shimplí, ASN.1 - Cumarsáid idir córais ilchineálacha le Olivier Dubuisson, ASN.1 Comhlánaigh ag an Ollamh John Larmouth.

Is formáid TLV atá dírithe ar bhearta dénártha (mar shampla, PER, a bhfuil tóir air i gcumarsáid cheallacha - giotán-dhírithe) é BER. Tá gach eilimint ionchódaithe mar: tag (Tag) an cineál dúile atá á ionchódú a shainaithint (slánuimhir, sreangán, dáta, etc.), fad (Length) den ábhar agus den ábhar féin (Value). Ligeann BER go roghnach luach faid a fhágáil ar lár trí luach faid éiginnte speisialta a sholáthar agus deireadh a chur le teachtaireacht Deireadh na nOchtanna le lipéad. Chomh maith le hionchódú faid, tá go leor éagsúlachta ag BER sa chaoi a ndéantar cineálacha sonraí a ionchódú, mar shampla:

  • D’fhéadfaí SLÁINTE, Aitheantóir Oibiachta, teaghrán Giotán, agus fad eiliminte a dhínormalú (gan a bheith ionchódaithe ar a laghad);
  • Tá BOOLEAN fíor maidir le haon ábhar neamh-null;
  • Féadfaidh nialas giotán “breise” a bheith i TREOR GIOMLÁN;
  • Is féidir teaghrán Giotán, Teaghrán OCTET agus a gcineálacha teaghrán díorthaithe go léir, lena n-áirítear dáta/am, a roinnt ina smutáin (stua) d'fhad athraitheach, nach bhfuil a bhfad ar eolas roimh ré le linn (dí)chódaithe;
  • Is féidir le bealaí éagsúla a bheith ag UTCTime/GeneralizedTime chun an fhritháireamh crios ama a shocrú agus codáin nialais "bhreise" de shoicind;
  • D’fhéadfadh nó ní fhéadfar luachanna a ionchódú;
  • Is féidir luachanna ainmnithe na ngiotán deiridh i STRING Giotán a fhágáil go roghnach gan ionchódú;
  • Is féidir ord treallach eilimintí a bheith ag SEICHIÚNTAS (OF)/SET (OF).

Mar gheall ar an méid thuas ar fad, ní féidir i gcónaí sonraí a ionchódú ionas go mbeidh siad comhionann leis an bhfoirm bhunaidh. Dá bhrí sin, ceapadh fo-thacar rialacha: DER - gan ach modh ionchódaithe bailí amháin a rialú go docht, rud atá ríthábhachtach do thascanna cripteagrafacha, i gcás, mar shampla, go ndéanfar an síniú nó an tseic a neamhbhailiú trí ghiotán amháin a athrú. Tá míbhuntáiste suntasach ag DER: ní mór fad na n-eilimintí go léir a bheith ar eolas roimh ré tráth an ionchódaithe, rud nach gceadaíonn sraithiú sonraí srutha. Tá an CODEC CER saor ón easnamh seo, rud a chinntíonn léiriú gan athbhrí ar na sonraí. Ar an drochuair (nó ar an ámharaí an tsaoil níl díchódóirí níos sofaisticiúla againn?), ní raibh an-tóir air. Mar sin, go praiticiúil tagann muid ar úsáid “measctha” de shonraí ionchódaithe BER agus DER. Ós rud é gur fothacar de BER iad CER agus DER, is féidir le haon díchódóir BER iad a phróiseáil.

Fadhbanna le pyasn1

Ag an obair, scríobhann muid go leor clár Python a bhaineann le cripteagrafaíocht. Agus cúpla bliain ó shin ní raibh mórán rogha leabharlanna saor in aisce ann: is leabharlanna an-íseal iad seo a ligeann duit ionchódú / díchódú go simplí, mar shampla, slánuimhir agus ceanntásc struchtúir, nó is leabharlann í seo. piasn1. Bhí cónaí orainn air ar feadh roinnt blianta agus ar dtús bhí an-áthas orainn, toisc go gceadaíonn sé duit oibriú le struchtúir ASN.1 mar a dhéantar le rudaí ardleibhéil: mar shampla, ceadaíonn réad deimhnithe X.509 díchódaithe duit rochtain a fháil ar a réimsí trí foclóir comhéadan: cert ["tbsCertificate"] ["sraithuimhir"] taispeánfar sraithuimhir an teastais seo dúinn. Ar an gcaoi chéanna, is féidir leat rudaí casta a "bhailiú" trí oibriú leo mar atá le liostaí, foclóirí, agus ansin glaoch ar an bhfeidhm pyasn1.codec.der.encoder.encode agus léiriú sraitheach den doiciméad a fháil.

Nochtadh easnaimh, fadhbanna agus teorainneacha, áfach. Bhí agus, ar an drochuair, tá earráidí fós i pyasn1: ag an am seo á scríobh, i pyasn1 ceann de na cineálacha bunúsacha is ea GeneralizedTime, go mícheart díchódaithe agus ionchódaithe.

Inár dtionscadail, chun spás a shábháil, is minic nach stórálaimid ach an cosán comhaid, an fhritháireamh, agus fad beart an ruda ar mhaith linn tagairt a dhéanamh dó. Mar shampla, is dóichí go mbeidh comhad sínithe treallach suite i struchtúr 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

agus is féidir linn an comhad sínithe bunaidh a fháil ar fhritháireamh 65 beart, fad 751 beart. ní stórálann pyasn1 an fhaisnéis seo ina oibiachtaí díchódaithe. Scríobhadh an TLVSeeker mar a thugtar air - leabharlann bheag a ligeann duit clibeanna agus faid rudaí a dhíchódú, sa chomhéadan a d'ordaíomar "téigh go dtí an chéad chlib eile", "téigh taobh istigh den chlib" (téigh taobh istigh den SEICHIÚCHÁN den réad), "téigh go dtí an chéad chlib eile", "inis do fhritháireamh agus fad an réad ina bhfuil muid." Trasnú "láimhe" a bhí anseo ar shonraí sraitheach ASN.1 DER. Ach bhí sé dodhéanta oibriú le sonraí BER-sraithe ar an mbealach seo, mar, mar shampla, go bhféadfaí an beart teaghrán OCTET STRING a ionchódú mar roinnt smután.

Míbhuntáiste eile dár dtascanna pyasn1 is ea an neamhábaltacht a thuiscint ó na rudaí díchódaithe cibé an raibh an réimse tugtha i láthair sa SEICHIÚCHÁN nó nach raibh. Mar shampla, má tá réimse an Réimse SEICHIÚNÚ Smth OPTIONAL sa struchtúr, d'fhéadfadh sé a bheith go hiomlán as láthair sna sonraí ag teacht isteach (ROGHNACH), nó d'fhéadfadh sé a bheith i láthair, ach ag an am céanna a bheith ar fad nialasach (liosta folamh). Sa chás ginearálta, ní fhéadfaí é seo a fháil amach. Agus tá sé seo riachtanach chun seiceáil dian ar bhailíocht na sonraí isteach. Samhlaigh go n-eiseodh údarás deimhniúcháin éigin deimhniú a mbeadh sonraí bailí “nach bhfuil iomlán” ann ó thaobh scéimre ASN.1! Mar shampla, chuaigh an t-ionad deimhnithe "TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı" ina dheimhniú fréimhe thar an méid is incheadaithe RFC 5280 teorainneacha ar fhad an chomhpháirt ábhair - ní féidir é a dhíchódú go hionraic de réir na scéime. Éilíonn an CODEC DER nach bhfuil réimse a bhfuil a luach comhionann le DEFAULT ionchódaithe le linn tarchuir - a bhíonn doiciméid den sórt sin sa saol, agus an chéad leagan de PyDERASN fiú ceadaithe d'aon ghnó den sórt sin iompar neamhbhailí (ó thaobh DER) ar mhaithe. de chomhoiriúnacht ar gcúl.

Teorainn eile is ea an neamhábaltacht a fháil amach go héasca cén fhoirm (BER / DER) a ionchódaíodh é seo nó an réad sin sa struchtúr. Mar shampla, deir an caighdeán CMS go bhfuil an teachtaireacht ionchódaithe BER, ach caithfidh an réimse sínitheAttrs, ar a bhfuil an síniú cripteagrafach, a bheith in DER. Má dhíchódóimid le DER, ansin beidh muid ag titim ar phróiseáil an CMS féin, má dhíchódóimid le BER, ansin ní bheidh a fhios againn cén cruth a bhí ar na sínitheAttrs. Mar thoradh air sin, beidh ar TLVSeeker (nach bhfuil a analóg i pyasn1) suíomh gach ceann de na réimsí sínitheAttrs a lorg, agus é a dhíchódú ar leithligh, agus é á thógáil ón léiriú sraitheach, le DER.

Cuireadh fáilte mhór roimh an gcumas próiseáil uathoibríoch a dhéanamh ar réimsí Sainmhínithe AG, atá an-choitianta. Tar éis struchtúr ASN.1 a dhíchódú, is féidir go bhfágfar sraith réimsí ar bith againn a chaithfear a phróiseáil tuilleadh de réir na scéime a roghnaíodh bunaithe ar an Aitheantóir Oibiachta atá sonraithe sa réimse struchtúir. I gcód Python, ciallaíonn sé seo scríobh má agus ansin glaoch ar an díchódóir don réimse AON.

Teacht chun cinn PyDERASN

Ag an Atlas, cuirimid paistí in aghaidh an tsrutha go rialta nuair a aimsímid fadhbanna nó nuair a fheabhsaíonn muid na bogearraí saor in aisce a úsáideann muid. I pyasn1, chuireamar feabhsuithe isteach arís agus arís eile, ach níl an cód pyasn1 an ceann is éasca a thuiscint agus uaireanta bhí athruithe API neamh-chomhoiriúnacha a bhuail muid ar na lámha. Ina theannta sin, táimid cleachta le tástálacha a scríobh le tástáil ghiniúna, rud nach raibh an cás i pyasn1.

Lá breá amháin, shocraigh mé gur leor sin chun é a fhulaingt agus tá sé in am iarracht a dhéanamh mo leabharlann féin a scríobh le __slot__s, fritháirimh agus blobaí álainne rindreáilte! Ní leor ach CODEC ASN.1 a chruthú - ní mór dúinn ár dtionscadail spleách go léir a aistriú chuige, agus is iad seo na céadta mílte línte cód atá lán d'obair le struchtúir ASN.1. Is é sin, ceann de na ceanglais maidir leis: an éascaíocht atá le haistriú an chóid pyasn1 reatha. Tar éis mo laethanta saoire go léir a chaitheamh, scríobh mé an leabharlann seo, d'aistrigh mé gach tionscadal chuige. Ós rud é go bhfuil clúdach beagnach 100% acu ag tástálacha, chiallaigh sé seo go raibh an leabharlann ag feidhmiú go hiomlán.

Mar an gcéanna, tá clúdach tástála beagnach 100% ag PyDERASN. Úsáideann sé tástáil ghiniúna le leabharlann iontach hipitéis. Chomh maith leis sin ar siúl agus doiléir py-afl- ithe ar 32 meaisíní núicléacha. In ainneoin nach bhfuil beagnach aon chód Python2 fágtha againn, breathnaíonn PyDERASN fós comhoiriúnacht leis agus mar gheall air seo tá an t-aon andúil. Chomh maith leis sin, tá sé tástáladh i gcoinne ASN.1: sraith tástála comhlíonta 2008.

Tá an prionsabal oibriú leis cosúil le pyasn1 - ag obair le rudaí Python ardleibhéil. Tá an cur síos ar scéimeanna ASN.1 cosúil leis.

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

Mar sin féin, tá cuma clóscríofa láidir ag PyDERASN. I pyasn1, dá mba réimse den chineál CMSVersion(INTEGER) é, d'fhéadfaí slánuimhir nó slánuimhir a shannadh dó. Éilíonn PyDERASN go beacht gur CMSVersion díreach a bheidh sa réad sannta. Chomh maith le cód Python3 a scríobh, úsáidimid freisin nótaí a chlóscríobh, mar sin ní bheidh argóintí doiléire ag ár bhfeidhmeanna mar def func(sraith, inneachar), ach def func(sraith: CertificateSerialNumber, inneachar: EncapsulatedContentInfo), agus cabhraíonn PyDERASN leis an gcód sin a urramú.

Ag an am céanna, tá indulgences thar a bheith áisiúil ag PyDERASN don chlóscríobh seo. níor cheadaigh pyasn1 sa réimse SubjectKeyIdentifier().subtype(implicitTag=Clib(…)) oibiacht a shannadh don SubjectKeyIdentifier() (gan an Chlib IMPLICIT riachtanach) agus go minic bhí air réada a chóipeáil agus a athchruthú mar gheall ar athrú IMPLICIT/ Clibeanna EXPLICIT. Ní chloíonn PyDERASN go docht ach an cineál bonn - cuirfidh sé clibeanna in ionad go huathoibríoch ó scéimre ASN.1 an struchtúir atá ann cheana féin. Simplíonn sé seo go mór an cód iarratais.

Má tharlaíonn earráid le linn díchódaithe, níl sé éasca do pyasn1 a thuiscint go díreach cá háit ar tharla sé. Mar shampla, sa teastas Tuircis a luadh thuas, gheobhaidh muid an earráid seo a leanas: UTF8String (tbsCertificate:eissuer:rdnSequence:3:0:value:SAINTE BY 2.5.4.10:utf8String) (ag 138) teorainneacha míshásta: 1 ⇐ 77 ⇐ 64 Agus struchtúir ASN .1 á scríobh is féidir le daoine botúin a dhéanamh agus cuidíonn sé le feidhmchláir a dhífhabhtú ar bhealach níos éasca nó fadhbanna a aimsiú i ndoiciméid chódaithe ar an taobh eile.

Níor thacaigh an chéad leagan de PyDERASN le hionchódú BER. Dhealraigh sé i bhfad níos déanaí agus fós ní thacaíonn próiseáil UTCTime / GeneralizedTime le criosanna ama. Tiocfaidh sé seo sa todhchaí, toisc go bhfuil an tionscadal scríofa go príomha ina gcuid ama saor.

Chomh maith leis sin sa chéad leagan ní raibh aon obair le réimsí SAINMHITHE BY. Cúpla mí ina dhiaidh seo tháinig an deis agus thosaigh sé á úsáid go gníomhach, ag laghdú go mór an cód iarratais - in aon oibríocht díchódaithe amháin, bhíothas in ann an struchtúr iomlán a dhíchóimeáil go dtí an doimhneacht an-mhór. Chun seo a dhéanamh, sa scéimre, cad iad na réimsí "a shainmhíniú" cad atá socraithe. Mar shampla, cur síos ar scéimre 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))),
    )

a deir, má tá OID le luach id_signedData sa ContentType, ní mór an réimse ábhair (suite sa SEQUENCE céanna) a dhíchódú de réir na scéime SignedData. Cén fáth an oiread sin lúibíní? Is féidir le réimse "roinnt" réimsí éagsúla a "sainmhíniú" ag an am céanna, mar atá i gcás struchtúir EnvelopedData. Sainaithnítear réimsí sainithe leis an gcosán díchódaithe mar a thugtar air - sonraíonn sé suíomh beacht aon eilimint i ngach struchtúr.

Níl sé inmhianaithe nó ní féidir i gcónaí na sainmhínithe seo a chur leis an scéim láithreach. D’fhéadfadh cásanna a bhaineann go sonrach le hiarratais a bheith ann nuair nach bhfuil OIDanna agus struchtúir ar eolas ach amháin i dtionscadal tríú páirtí. Soláthraíonn PyDERASN an cumas na sainmhínithe seo a shocrú díreach tráth díchódaithe an struchtúir:

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

Anseo deirimid sa CMS SignedData do gach deimhniú ceangailte, go ndíchódaítear a gcuid síntí go léir (AuthorityKeyIdentifier, BasicConstraints, SubjectSignTool, etc.). Léirímid tríd an gcosán díchódaithe cén eilimint is gá a “ionadú” le sainmhínithe, amhail is dá mbeadh sí socraithe sa scéimre.

Ar deireadh, tá an cumas ag PyDERASN oibriú ó líne ordaithe le haghaidh díchódaithe comhaid ASN.1 agus tá saibhir priontáil deas. Is féidir leat ASN.1 treallach a dhíchódú, nó is féidir leat scéim dea-shainithe a shocrú agus rud éigin mar seo a fheiceáil:

PyDERASN: mar a scríobh mé leabharlann ASN.1 le sliotáin agus blobaí

Faisnéis ar taispeáint: fritháireamh réad, fad clibe, fad fad, fad an ábhair, láithreacht EOC (deireadh na n-ochtóidí), bratach ionchódaithe BER, bratach ionchódaithe fad éiginnte, fad clib EXPLICIT agus fritháireamh (más ann), doimhneacht neadaithe réad i struchtúir, luach clibe IMPLEACHTA/SAINCHEADÚIL, ainm scéimre an réada, a bhunchineál ASN.1, ordachán laistigh de SEICHIÚCHÁN/SET DE, luach ROGHA (más ann dó), ainm scéimre inléite ag an duine INTEGER/ENUMATETED/BEIT STRING, luach bonn ar bith cineál , réamhshocraithe/bratach ROGHNACH ón scéim, comhartha go ndearnadh an réad a dhíchódú go huathoibríoch mar SAINMHÍNITHE AG agus mar gheall ar an OID a tharla sé seo, OID inléite ag an duine.

Tá an córas priontála deas déanta go speisialta sa chaoi is go ngineann sé seicheamh rudaí PP atá rindreáilte cheana féin ar mhodhanna ar leith. Taispeánann an seat scáileáin an rindreálaí i ngnáth-théacs daite. Tá rindreálaithe ann freisin i bhformáid JSON/HTML ionas gur féidir é a fheiceáil le aibhsiú sa bhrabhsálaí ASN.1 mar atá i asn1js tionscadal.

Leabharlanna eile

Níorbh é seo an sprioc, ach d'éirigh le PyDERASN a bheith suntasach níos tapúla ná pyasn1. Mar shampla, is féidir go dtógfaidh sé chomh fada sin comhaid CRL de mhéideanna meigibheart a dhíchódú go gcaithfidh tú smaoineamh ar fhormáidí stórála sonraí idirmheánacha (tapa) agus ailtireacht an fheidhmchláir a athrú. díchódaíonn pyasn1 an CRL CACert.org ar mo ríomhaire glúine le breis agus 20 nóiméad, agus ní thógann PyDERASN ach 28 soicind! Tá tionscadal ann asn1crypto, dírithe ar obair thapa le struchtúir cripteagrafacha: díchódaíonn sé (go hiomlán, ní leisciúil) an CRL céanna i 29 soicind, ach ídíonn sé beagnach dhá oiread RAM agus é ag rith faoi Python3 (983 MiB versus 498), agus i 3.5 uair faoi Python2 (1677). vs 488), cé go n-ídíonn pyasn1 oiread agus 4.3 uair níos mó (2093 vs 488).

asn1crypto, a luaigh mé, níor mheasamar, toisc go raibh an tionscadal fós ina thús, agus níor chuala muid faoi. Anois ní fhéachfaidís ina threo ach an oiread, mar fuair mé amach láithreach nach nglacann an tAm Ginearálta céanna i bhfoirm treallach, agus le linn an tsrathaithe baintear amach codán de shoicind go ciúin. Tá sé seo inghlactha le haghaidh oibriú le deimhnithe X.509, ach go ginearálta ní oibreoidh sé.

I láthair na huaire, is é PyDERASN an díchódóir Python/Go DER saor in aisce is déine ar eolas agam. Sa leabharlann ionchódaithe/asn1 de mo chuid Go gan seiceáil dian OBJECT IDENTIFIER agus teaghráin UTCTime/GeneralizedTime. Uaireanta is féidir le déine a bheith ar an mbealach (go príomha mar gheall ar chomhoiriúnacht ar gcúl le feidhmchláir d'aois nach mbeidh aon duine a shocrú), mar sin i PyDERASN le linn díchódaithe, is féidir leat pas a fháil socruithe éagsúla seiceálacha lagú.

Déanann an cód tionscadail iarracht a bheith chomh simplí agus is féidir. Is comhad amháin an leabharlann ar fad. Tá an cód scríofa le béim ar éascaíocht tuisceana, gan barrfheabhsú feidhmíochta iomarcach agus cód TRYIM. Ní thacaíonn sé, mar a dúirt mé cheana, le díchódú BER lán-chuimsitheach ar theaghráin UTCTime / GeneralizedTime, chomh maith le cineálacha sonraí REAL, RELATIVE OID, EXTERNAL, INSTANCE OF, EMBEDDED PDV, STRING CARACHER. I ngach cás eile, ní fheicim go pearsanta aon chúis le leabharlanna eile a úsáid i Python.

Cosúil le gach mo thionscadail, cosúil le PyGOST, GoGOST, NCCP, GoVPN, tá PyDERASN go hiomlán bogearraí saor in aiscedháileadh faoi na téarmaí LGPLv3+, agus tá sé ar fáil le híoslódáil saor in aisce. Tá samplaí úsáide ann anseo agus Tástálacha PyGOST.

Sergey Matveev, cipherpunk, ball Fondúireacht SPO, Python/Go-forbróir, príomhspeisialtóir Fiontraíocht Stáit Chónaidhme "STC "Atlas".

Foinse: will.com

Add a comment