DKIM įrašų tikrinimo įrankis (DKIM Record Checker) sukurtas problemai, kuri slepiasi tiesiai priešais mūsų akis. Įvedate domeno vardą ir DKIM selektorių, o tikrintuvas DNS sistemoje ieško įrašo adresu selektorius._domainkey.domenas. Iš ten jis nuskaito DKIM TXT įrašą, parodo viešąjį raktą, išnagrinėja įrašo žymas (tags), patikrina rakto tipą ir nurodo įprastas klaidas, tokias kaip trūkstami duomenys, panaikinti raktai, silpnas RSA raktų ilgis, sugadinta įrašo sintaksė bei selektoriai, kurie labiau egzistuoja įmonės korporaciniame folklore nei realioje DNS sistemoje. Paprastai tariant, šis įrankis atsako į vieną paprastą klausimą: jei jūsų domenas teigia pasirašantis el. laiškus, ar DNS sistemoje iš tikrųjų laukia galiojantis viešasis raktas, ar visa ši sąranka tėra dar vienas formalus melas, kurį rodo jūsų valdymo skydai?
Norint suprasti, kodėl tai svarbu, verta trumpam sulėtinti tempą ir paaiškinti visas judančias dalis paprasta žmonių kalba. A domenas yra viešas vardas, pavyzdžiui, pvz.lt. DNS (domenų vardų sistema) yra paskirstyta paieškos sistema, kuri saugo techninius įrašus po tuo vardu. DKIM reiškia DomainKeys Identified Mail (domeno raktais identifikuotas el. paštas). Šios raidės nėra jokios mistinės. Jos tėra pavadinimas pašto pasirašymo sistemai, kuri naudoja domeno vardą, kriptografinę raktų porą bei DNS sistemoje paskelbtus viešuosius raktus, kad laišką priimanti sistema galėtų įsitikinti, jog laišką pasirašė tas, kas valdo atitinkamą privatųjį raktą. Tai nereiškia, kad pats laiškas yra moraliai tyras, išmintingas ar malonus skaityti. Tai tiesiog reiškia, kad su domenu susietas siuntėjas prisiėmė už jį atsakomybę tokiu būdu, kurį galima patikrinti.
Šis pavadinimas yra neįprastai iškalbingas, jei tik pasivarginsite jį perskaityti, o ne prabėgsite stiklinėmis akimis žmogaus, kuris jau yra traumuotas DNS sistemų. Domenas reiškia, kad sistema yra susieta su domeno vardu, o ne su asmeniniu sertifikatu kiekvienam žemės gyventojui. Raktai nurodo, kad naudojama viešojo rakto kriptografija – yra privatus raktas pasirašymui ir viešasis raktas, skelbiamas visiems patikrinimui. Identifikuotas reiškia, kad tikslas nėra tiesiog paslėpti turinį šifro dūmuose – tikslas yra susieti laišką su atsakinga pasirašančia tapatybe. Paštas reiškia būtent tai – el. paštą, seną pasaulinę terpę, kuri dešimtmečius buvo stebėtinai patikli, o vėliau turėjo kurti vieną po kito techninio įtarumo sluoksnius, kai tik pasaulis atrado spamą, klastotes, fišingą bei didelius mastelius.
Istorinė raida yra svarbi, nes DKIM neatsirado iš niekur. Prieš DKIM tampant standartu, egzistavo DomainKeys sistema, aprašyta RFC 4870 kaip „domenu pagrįstas el. pašto autentifikavimas naudojant viešuosius raktus, skelbiamus DNS“. Net pats pavadinimas skamba kaip inžinieriaus gerklės krapštymas prieš pristatant mechanizmą, kuris pasižymi viso labo tikslaus prietaiso šiluma. DomainKeys buvo ankstyva domeno lygio el. pašto autentifikavimo sistema, naudojusi viešuosius raktus DNS. DKIM, standartizuotas RFC 4871 ir vėliau peržiūrėtas RFC 6376, šį protėvį atsinešė tiesiai savo pavadinime. Jis buvo sukurtas tam, kad asmuo, vaidmuo ar organizacija, valdanti pasirašantį domeną, galėtų prisiimti atsakomybę už laišką, o šį teiginį būtų galima patikrinti per kriptografinį parašą bei viešojo rakto DNS paiešką.
Šis žodis atsakomybė yra labai svarbus. DKIM nėra aureolė. Tai nėra moralės pažymėjimas. Tai nėra internetas, su ašaromis akyse pareiškiantis, kad laiškas atkeliavo iš šventųjų. DKIM paslaugos apžvalga labai aiškiai nurodo, kad DKIM atlieka labai ribotą darbą. Jis tiesiog suteikia pašto sistemoms patikrinamą identifikatorių, susietą su laišku, kad jos galėtų priimti tolesnius sprendimus. Pats savaime DKIM nenurodo gavėjui, kokių veiksmų imtis, neįrodo, kad kiekviena matoma antraštė reiškia tai, ką įprastas žmogus mano, ir stebuklingai nesustabdo pakartotinių laiškų siuntimo (replay attacks) po sėkmingo patikrinimo. Kitaip tariant, DKIM yra naudingas, nes jis yra konkretus. Žmonės susiduria su problemomis tada, kai bando iš jo padaryti visą pasitikėjimo filosofiją.
Priežastis, kodėl DKIM raktų platinimui naudoja DNS sistemą, yra nuostabiai praktiška. Paslaugos apžvalgoje aiškinama, kad naudojant DNS buvo išvengta būtinybės kurti visiškai naują pasaulinę užklausų infrastruktūrą. Tai buvo labai tipiškas interneto kūrėjų sprendimas: mes jau turime didelę, paskirstytą, pasauliniu mastu veikiančią vardų sistemą, tad pasinaudokime ja, užuot statę dar vieną didingą techninių ambicijų katedrą. DNS jau mokėjo platinti įrašus dideliais masteliais. DKIM tiesiog patalpino viešuosius raktus ten. Protinga, efektyvu ir natūraliai pasmerkta būti nesuprasta ištisų administratorių kartų, kurios vėliau kopijuos DNS kodus iš pagalbos straipsnių, net neperskaitydamos, ką kopijuoja.
Taip prieiname prie vienos naudingiausių DKIM idėjų – selektoriaus. Selektorius čia yra ne tam, kad padarytų gyvenimą įdomesnį. Jis egzistuoja todėl, kad vienas domenas gali turėti kelis pasirašymo raktus ir kelis pasirašymo susitarimus. Selektorius leidžia pasirašymo sistemai nurodyti teisingą viešąjį raktą, nesukeliant visų raktų į vieną liūdną krūvą. RFC 5585 aiškina, kad selektorius yra sujungiamas su pasirašančiojo domeno identifikatoriumi, kad verifikatorius žinotų, kurį raktą parsisiųsti. RFC 6376 eina dar toliau ir pažymi, kad selektoriai padeda keisti raktus (key rotation), perduoti teises (delegation) ir net kurti hierarchinius pavadinimus, nes taškai selektoriuose apibrėžia DNS etikečių ribas. Paprastai tariant, selektorius yra sub-etiketė, sakanti: „Naudok šį raktą, o ne aną.“ Tai pašto infrastruktūros stalčių žymėjimo versija, kuri skamba labai paprastai, kol nepamatote, kas nutinka, kai niekas tų stalčių nepažymi.
Fiksuota dalis ._domainkey taip pat turi priežastį. RFC 6376 nurodo, kad visi DKIM raktai saugomi subdomene pavadinimu _domainkey. Taigi, jei pasirašantis domenas yra example.com ir selektorius yra newsletter, DNS užklausa keliauja į newsletter._domainkey.example.com. Ši pavadinimo taisyklė sukuria tvarką. Selektorius pasirenka raktą. Subdomenas _domainkey nurodo, kokie duomenys ten gyvena. O pagrindinis domenas susieja visą šį reikalą su pasirašytojo vardų erdve. Be šios struktūros DNS taptų dar didesniu lobių ieškojimu nei yra dabar.
Pačiame DKIM įraše žymos nėra atsitiktinis dekoras. v=DKIM1 nurodo įrašo versiją. p= neša viešojo rakto duomenis. k= identifikuoja rakto tipą – istoriškai dažniausiai RSA. Kitos žymos gali riboti paslaugų naudojimą, reklamuoti vėliavėles (flags) arba aprašyti priimtiną hešavimo (hash) elgseną. Tuščia p= reikšmė RFC 6376 dokumente turi labai sausą ir svarbią reikšmę – ji reiškia, kad raktas buvo atšauktas (revoked). Tai viena iš tų smulkmenų, kurias standartų pasaulis išsprendžia su visiškai ramiu efektyvumu. Jokio fejerverko. Jokio dramatiško atsisveikinimo. Tiesiog tušti rakto duomenys, o verifikatorius turi tai suprasti kaip klaidą.
Geras DKIM tikrintuvas taip pat privalo rūpintis kriptografija, nes viešasis raktas nėra tik dekoratyvinis fonas. DKIM prasidėjo pasaulyje, kuriame RSA buvo standartinis pasirašymo būdas, ir RFC 6376 vis dar atspindi tą erą. Vėliau RFC 8301 atnaujino DKIM kriptografines rekomendacijas, paskelbdamas „rsa-sha1“ pasenusiu bei reikalaujančiu, kad siuntėjai naudotų bent 1024 bitų RSA raktus, kartu pažymėdamas, kad mažesni nei 2048 bitų raktai gali būti pažeidžiami neprisijungus vykdomų atskleidimo atakų (offline attacks). Standarto kalba tai reiškia: „senoji šilta antklodė jau plonėja“. Vėliau RFC 8463 pridėjo „Ed25519“ algoritmu grįstą DKIM pasirašymą, kuris suteikė trumpesnius raktus su tuo pačiu saugumo lygiu. Todėl šiandien tikrintuvas, žiūrėdamas į DKIM raktą, neturėtų tiesiog džiugiai pranešti „įrašas rastas“ kaip auksaspalvis retriveris, nešantis dantimis sugriebtą pagalį. Jis privalo paklausti, koks tai raktas, ar jį įmanoma teisingai išanalizuoti ir ar jo dydis prikaišo dabartinei realybei, o ne kriptografinio optimizmo muziejui.
DKIM esmėje slypi beveik komiškas kontrastas. Pati idėja yra graži: pasirašyti pasirinktas antraštes bei laiško turinį, paskelbti viešąjį raktą DNS ir leisti gavėjams jį patikrinti. Praktinė realybė yra daug mažiau poetiška. Raktų keitimas yra pamirštamas. Seni selektoriai kaupiasi. Tiekėjai prašo administratorių paskelbti dar vieną selektorių, dar vieną išorinį siuntėją, dar vieną neva nekenksmingą DNS įrašą. Po kelerių metų organizacija po savo _domainkey subdomenu turi mažas kapines pasenusių selektorių – vieni aktyvūs, kiti apleisti, treti pusiau dokumentuoti, o vieno iš jų visi paniškai bijo prisiliesti, nes jis vis dar gali maitinti kokią nors sąskaitų išrašymo sistemą, kurios niekas nelietė nuo kokių nors vadovybės reorganizacijos laikų, buvusių prieš tris logotipų rebrandinimus. Štai kodėl DKIM įrašų tikrinimas nėra tik akademinė higiena – tai infrastruktūros archeologija su realiomis pasekmėmis.
Svarbiausią pamoką reikėtų pasakyti visiškai paprastai. El. pašto autentifikavimo sistemos egzistuoja todėl, kad internetas tapo per didelis ir per daug priešiškas, kad būtų galima pasitikėti vien gražiais žodžiais. DKIM yra vienas iš atsakymų į šią realybę. Jis leidžia su domenu susietam siuntėjui prie laiškų pridėti kriptografinį parašą, o gavėjams – patvirtinti susietą viešąjį raktą per DNS. Jis neišsprendžia visų pasitikėjimo problemų. Jis nepakeičia sveiko proto. Jis neišgelbėja blogai valdomo el. pašto ūko nuo jo paties įpročių. Tačiau jis suteikia patikrinamą techninį pareiškimą, kurį galima ištirti, o ne tiesiog juo patikėti. Šiuolaikiniame internete tai jau yra pažanga.
Taigi, ką tikras DKIM įrašų tikrinimo įrankis turėtų jums pasakyti? Ar selektoriaus serveris egzistuoja DNS sistemoje. Ar jame yra taisyklingas v=DKIM1 įrašas. Ar viešasis raktas yra matomas, iššifruojamas bei panašus į tiesą. Ar raktas neatrodo atšauktas. Ar įrašas skelbia kokias nors svarbias paslaugų ribojimo vėliavėles. Ar pati kriptografija atrodo pakankamai šiuolaikiška, kad keltų pagarbą. Ir, kas tikriausiai svarbiausia – ar jūsų domeno el. pašto pasirašymo istorija remiasi realiai paskelbtu raktu, ar tiesiog administraciniu svajojimu, kuris sugriūva tą pačią sekundę, kai laišką priimantis serveris paprašo įrodymų.