Kas iš tiesų vyksta dokumentą pasirašant elektroniniu parašu

Nors elektroninis parašas yra jau gana plačiai naudojamas Lietuvoje, mažai kas supranta, kas tai yra. Kas, bent apytikriai, vyksta, kai pasirašome dokumentą elektroniniu parašu, ir kodėl jo iš esmės neįmanoma suklastoti. Su elektroniniu parašu tuomet elgiamės kaip su burtininko lazdele, bandydami pasitikėti, kad ji tikrai padarys tai, ką žada.

Tačiau net ir techninio išsilavinimo neturinčiam asmeniui galima šiek tiek prasklaidyti tuos burtus ir suprasti, kaip elektroninis parašas veikia. Žinoma, suprasti ne viską, bet bent jau tiek, kad įgytume daugiau pasitikėjimo jį naudodami.

Taigi, pamėginkime, žingsnis po žingsnio pažvelgti, kas vyksta, kai pasirašome dokumentą elektroniniu parašu.

Tuo tikslu naudosime Linux, Windows, MacOSX operacinėse sistemose veikiančią programą GnuPG. Tai yra komandų eilutės programa, kurioje nurodymai duodami įrašant komandas virtualaus terminalo lange:

Linux versija yra lengvai įdiegiama per operacinės sistemos programų diegimo sąsają. Windows vartotojai turėtų atsisiųsti programą iš čia. Tačiau tam, kad suprastumėte el. parašo veikimo principą, nėra būtina įsidiegti šią programą ir bandyti pakartoti savo kompiuteryje čia pateikiamus pavyzdžius.

Nors GnuPG yra komandų eilutės programa, neišsigąskite. Tai, kad visos operacijos vyksta virtualiame terminale, o visa tai, apie ką kalbėsime, bus galima „apžiūrėti“ (pamatyti, kaip atrodo viešasis raktas, kaip atrodo el. parašas dokumente ir pan.) tikrai padės geriau suprasti tą keistą žvėrį – elektroninį parašą.

Beje, GnuPG bus naudojama tik el. parašo idėjos demonstracijai. Lietuvoje oficialiai pripažįstamam elektroniniam parašui kurti taikomos kitos technologijos. Tačiau GnuPG dėl plataus prieinamumo ir dėl galimybės šifruoti dokumentus geriausiai tinka šiam įvadui.

Elektroninio parašo tikslas

Kaip ir paprasto parašo, elektroninio parašo pagrindinis tikslas – užtikrinti galimybę įsitikinti, kad būtent konkretus asmuo pasirašė konkretų dokumentą. Taigi, kai Marytė rašo Audriui popierinį raštelį, Audrius gali atpažinti jos rašyseną ir parašą. Tačiau gavęs elektroninį laišką iš Marytės, Audrius braižo nemato, o parašo – taipogi. Žinoma, yra laukelis „Nuo:“, kuriame Audrius matys Marytės el. pašto adresą. Tačiau laišką su tuo laukeliu įmanoma suklastoti. Kaip Audriui žinoti, kad laiškelį tikrai parašė Marytė?

Vienas iš nuo seno žinomų būdų – šifravimas. Turbūt daugelis mūsų paauglystėje yra bandę rašyti užšifruotus raštelius, kuriuose raidės yra keičiamos skaičiais arba raidės rašomos „perstumiant“ reikšmes abėcėlėje pagal tam tikrą skaičių kombinaciją. Nuo vieno tokiu šifru parašyto laiško iššifravimo priklausė herojaus gyvybė Žiulio Verno nuotykių romane „Žangada“. Sakykime, jei skaičių kombinacija yra „436“, o šifruojamas žodis – „drakonas“, jį galima užrašyti taip: „fteostcu“ (nuo „d“ keturiom raidėm dešiniau yra „f“, nuo „r“ trim raidėm dešiniau – „t“, ir t.t.) – toks yra esminis „Žangadoje“ aprašyto „Gransfeldo šifro“ principas. Nežinant skaičių kombinacijos iššifruoti žodį yra santykinai sudėtinga (ypač, kai apie šifravimą beveik nieko neišmanai; konkrečiai Žiulio Verno naudotą pavyzdį kriptografas iššifruotų be didesnio vargo, žr. šį straipsnį).

Taigi, Marytė ir Audrius gali susitarti dėl bendro slaptažodžio, kurio padedami šifruotų savo laiškus. Iš Marytės gavęs užšifruotą laišką Audrius pritaikytų slaptąjį šifrą. Jei iššifravimas pavyktų, galėtų būti tikras, kad laišką parašė tikrai Marytė.

Ant popieriaus tai daryti labai nepatogu. Norėdamas užšifruoti žodį „drakonas“ užtrukau kokią minutę. Žinoma, prireikus įgusčiau, rašyčiau pakankamai gretai. Bet kompiuterinės technologijos šifravimą pavertė trivialiu dalyku.

Taigi, sakykime, Marytė parašo štai tokį laiškelį Audriui:

Labas Audriau,

  penktadienį ketinu užsukti pas tave
pasiklausyti  muzikos, kaip aną kartą
tarėmės.
  Iškepk prašau  blynų, aš  atsinešiu
uogienės.
  Pasirūpink,  kad  namie būtų  kokių
nors gaiviųjų gėrimų.

Iki,
Marytė

Tada Marytė užšifruoja tekstą. Jei ji tai daro Gransfeldo šifru pasinaudodama šioje svetainėje pateikiamu įrankiu ir mano jau minėtu trijų skaitmenų kodu (ir „sushveplinusi“ tekstą, nes nelemtas įrankis lietuviškų raidžių nepriima), gaunasi štai kas:

Pdhev Gygxmda,

 thtowghlkrl qiworx advaowo tdy xdbi
sgwlqpdawbzm  padlqsv, qelv eqą qeuze
wgvhsiv.
 Ownktn vvdyex  hpbty, dy  ewymqkwla
yrmmhtiv.
 Vevovxvmqq,  odj  rdsmh hywa  orqmx
tsuy kdozlanx miuoqx.

Ool,
Seuexh

Kaip matome, tekstas tebeturi struktūrą ir sintaksę, kas labai palengvina šifro „nulaužimą“. Struktūrą ir sintaksę taip pat galime paslėpti po šifru… Tačiau šiandien jau ne XVII a., ir yra daug tobulesnių šifravimo algoritmų, kurių įveikiamumas priklauso beveik tik nuo slaptažodžio nuspėjamumo. Taigi, Marytė elgiasi kitaip. Ji įrašo šį laiškelį į tekstinį failą: MaryteAudriui.txt

Tuomet jį užšifruoja kompiuteriu, šia komanda:

gpg --symmetric --armor MaryteAudriui.txt

[parinktis –symmetric reiškia, kad šifravimui ir iššifravimui bus naudojamas tas pats raktas (slaptažodis), –armor – kad šifruotas tekstas bus žmogui perskaitomas (o ne dvejetainis kodas); parinktys taip pat bus paaiškintos šio įrašo apačioje*]

Programa paprašys slaptažodžio, ir, jį du kartus įvedus, greta failo MaryteAudriui.txt atsiras failas MaryteAudriui.txt.asc

To failo turinys – štai toks:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.11 (GNU/Linux)

jA0EAwMCFQ/t7558Z8RgycAl3dgy2iBXdu93yLomDW8/aBHgv5ruNydtmXGPkmgC
NyCp4PfH+O6iWXYuiEKqJZ0r4U5t4rPekIYxMSzBINpug6+Zy0ACAuBtlMzY4zcz
TFjOqHxFaCSoe6Xiv9yy4x5R4vkzbwo39sVduTHUIB+1MiIOpm8F/NwfFUjuWLod
zoWNpx0pVzH2fepQdBvbOpWUh0jEGY7MW1lYMx2JXtcCBRjoBjRAsQC9YVhEgdL/
BUwxKNs9VP8JPm0h42AwXFLsuQw/+GOMaB3EFCYM1iKJN22GXf0qgZ0zcAEnsd9h
d6LKl/Egvg==
=0S+y
-----END PGP MESSAGE-----

Kaip matome, šio failo turinyje nelikę nieko, iš ko galėtume nuspėti jo pirminį turinį. Laiškelis užšifruotas. Marytė gali jį prikabinti prie el. laiško ir siųsti Audriui.

Tai, ką ką tik aprašiau, galima schematiškai pavaizduoti štai taip:

sifr-1-sifr-simetriniu-raktu

Gavęs laiškelį su failu, Audrius gali iškoduoti jo turinį štai tokia komanda:

gpg --output - MaryteAudriui.txt.asc

Programa paprašys slaptažodžio ir, jei failas nebuvo pakeliui pakeistas, jį iššifruos. Bet jei faile pasikeitė nors vienas simbolis, GnuPG praneš apie pakeitimą rodydamas klaidą ir atsisakydamas iššifruoti failą.

Vėlgi, tokio laiško iššifravimo schema būtų:

sifr-2-issifravimas-simetriniu-raktu


Kodėl šifravimas simetriniu raktu nėra patogus susirašinėjimo integralumo užtikrinimo būdas

Taigi, tokiu būdu Audrius ir Marytė, žinodami bendrą slaptažodį „436“** ir naudodami GnuPG programinę įrangą, gali keistis užšifruotais laiškais. Tačiau toks susirašinėjimo būdas – ne itin patogus.

Visų pirma, Marytė ir Audrius turi vienas kitą pažinoti ir vienas kitu pasitikėti. Jei nors vienas jų atskleis slaptąjį kodą, bet kas kitas galės laiškus pasirašinėti lygiai taip pat, kaip jie. Taigi, toks dokumento autentiškumo ir užtikrinimo, kad jį sudarė būtent tas asmuo, kuris pasirašo, būdas yra labai ribotas, ir sugriūva, kai tik į susirašinėjimą įtraukiama daugiau asmenų. Trims žinoma paslaptis – jau ne paslaptis.

Kaip padaryti, kad Marytės užšifruotą dokumentą Audrius (ir Tomas, ir Inga, ir kiti) galėtų perskaityti nežinodami slaptažodžio, kurį Marytė naudojo dokumentą užšifruodama?

Asimetrinis (dviejų raktų) šifravimas

Aukščiau aprašytą problemą kriptografai išsprendė jau prieš keletą dešimtmečių, sukurdami kriptografinę sistemą, kurioje dokumentas pasirašomas vienu, o iššifruojamas – kitu raktu.

Dokumentus šifruojantis asmuo turi du raktus. Vienas vadinamas privačiuoju – tai tas raktas, kurį turi tik šifruotame susirašinėjime dalyvaujantis asmuo, ir kurio niekam neatskleidžia. Kitas raktas vadinamas viešuoju. Tarp tų dviejų raktų egzistuoja matematinis ryšys, tačiau turint vieną raktą neįmanoma atkurti kito rakto. O dokumentą, užšifruotą vienu raktu, galima iššifruoti tik kitu raktu (tuo pačiu raktu iššifruoti negalima). Kaip konkrečiai šis šifravimas veikia aš negaliu paaiškinti, tad palikime tai nepaaiškinama aksioma. 🙂

Jei anksčiau aprašytu atveju Marytė ir Audrius šifravimui ir iššifravimui naudojosi tuo pačiu raktu (slaptažodžiu), vadinamu „simetriniu“ šifravimu, tai „asimetrinio“ šifravimo atveju raktų yra net keturi (dvi poros privačių ir viešų raktų). Kad dokumentą, kurį parašė Marytė, galėtų iššifruoti ne bet kas, o tik Audrius, Marytė turi užšifruoti dokumentą naudodama Audriaus viešąjį raktą (čia – esminis skirtumas tarp šifravimo ir pasirašymo, bet jį aptarsime vėliau).

Kad nebūtų taip lengva gauti prieigą prie asmens privataus rakto, jis yra jau ne šiaip slaptažodis, o didelis informacijos rinkinys, saugomas faile kompiuteryje (arba – specialioje talpykloje: smartcard, USB laikmenoje). Jį taip pat galima panaudoti tik žinant slaptažodį, kuriuo raktas „atrakinamas“ panaudojimui.

Taigi, sakykime, kad Marytė susikuria savo privataus ir viešojo raktų porą, apsilanko pas Audrių ir perrašo jam į kompiuterį savo viešąjį raktą – paprastą teksto failą MarytesViesasRaktas.key , kuris atrodo štai taip:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)

mQENBFZhV40BCADic5N5eTHaA4AbLpW0Q70FdSWBDe53uUBs835SwBR4p2cbr8oI
4O5rp/da8RfT9Yykmy1JHeHnAIjxgxvG28EFE0vEJhme+NkxGqCdwOY/frcFdns9
CPsQIotOWB4DZiRoqqkFxwoOmgdiYZVRAZ5kQ3wqqOR2VddwxrcevQrJL1A/LYgG
BxHHi/va1n7FLPHDWieQiXtjIu/EXQqON+BLu+2rMrp5Ag9eC1KnzHMtz8vfmikB
gJVGwsSezKIN5paAs/U3QHEFa1Fqo0AHFioxRi8YI94+Z4mBE6pVmd9cc758UPnw
JtYZG6l0T9iCmvdDuG0cpV6DX8+rg9khMQkxABEBAAG0G01hcnl0xJcgPG1hcnl0
ZUBsYXBhcy5pbmZvPokBOAQTAQIAIgUCVmFXjQIbAwYLCQgHAwIGFQgCCQoLBBYC
AwECHgECF4AACgkQyBicnGKgpaO/FQf/V96aIS0M44xxIo4zC9JdiO98LbZ7tad1
LKz2Cwbt/K0QTfXuzcGtBsaJCMlYEzQbuH/WW9jGzT6MFxD90WbQc7f1DshPQuPD
bBtVPU3mk3WDLaoPBeQTHoxAWK3uTH+n7iUrPNv5BpklaYJgAz0jAACwOQMHbrtt
NF2zEzztescv4BaHe24EWQhi3S79KbSqEI18JyPyCN5prw+ijo8GbJJCRVRMrMCy
abdhJJeQQzizfbiRF+7Ed5Qh87fwS7Bci6bi/2LnlSlxBcyQd7n7sxpgVIyfEP1F
mRYysjuAP90i5/FCEP0mv0Zr6sRWSnYj2XLHlFZz1EeiLbZKK3xpRLkBDQRWYVeN
AQgAuK2kC8UUWs87nCLKS1x0T8yOY44u50XqQRC73xlCCwAy/Lk//N6kQ25Tmyk3
GDRLeDSsEaekjPbP0NhTzczGZC0tcqSI7h7zRDHdKr4BJNmsTrFBtQdXG1q1/ZeC
mmFnukNoW4Hijc0ifhXNGLsITgYVEFGTI0D+EaCWMXf2FoOmfJgWzlx3dg9rf+1K
uWQ/0gFZEHQcEstL/t2z3hZYG0veS2Rl0SuCF3PWtbkyn0VzCWDqvvlpY+k8PysS
o5Krr1a/rL2VeMQxfVzQFxfNbEt/+lfOAGZAXGeBaOllZWFojRrNH1T16xfnFh0N
AaTXiqT1PBduwdv8oKFNVgBRpQARAQABiQEfBBgBAgAJBQJWYVeNAhsMAAoJEMgY
nJxioKWjfUwIAJhBIV01mPVuX4T8fOeYR8NRsVVf31sSebelQowCfWsnWRxZVTOg
Fcb07mMzlWLBFstqHlLDQ4y1if/ac2wxkImbfSdIkuzjnHTZmIBQqiUxCvEaNJ6B
qSrsEmMB1WyuR/4rL+FCgJtrwOTIWHw5/wTB7Wc2m3kwLzZwqZm0ZU19LDBFgukn
+ZxwysD9hYyn2Jje+T0z1fGm98ufDl6f44f9B/0ubBOxmFKcJZHerwaeql6geV2G
WJvW1006zozYUi+PqVK8nFg70jjgJiMQ1Jw0jysBbYMjqIc3v/hZ4lTZFlNcOKNJ
j9jENDm+MhpqH97BpPs9C6tYJ9Rhn/iZFRo=
=OSLa
-----END PGP PUBLIC KEY BLOCK-----

O Audrius importuoja šį raktą į GnuPG programą savo kompiuteryje tokia komanda:

gpg --import MarytesViesasRaktas.key

Audrius taip pat susikuria raktų porą ir perduoda savo viešąjį raktą Marytei, kuri analogiškai importuoja Audriaus viešąjį raktą.

Tuomet Marytė paimą tą patį laiškelį ir užšifruoja laiškelį štai tokia komanda, nurodydama, kad laiškas šifruojamas Audriaus viešuoju raktu:

gpg --encrypt --armor --recipient audrius@lapas.info MaryteAudriui.txt

Rezultatas – failas MaryteAudriui.txt.asc, kurio turinys žmogaus akiai labai panašus į jau matytą:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.11 (GNU/Linux)

hQEMA0Rk0JZK6wckAQf7B0CDh5faAGmIkwR9jjql8lyGOyKyD9kGi4xYrQEbctDL
CRGWX+QyW34dqunB3eFMYjVz/sAwRh/IBzvmdJpzYJPiPhtReFILA5TUigNT74TT
/[praleidžiu dešimt nuobodžių eilučių]
9cZ7sPeQy969f5sNZFLDecDmx5O2oy0K58YXWuX2h/MSmGriaDDNqgsujQzwUFZh
wtQ= =uS5l 
-----END PGP MESSAGE----- 

Šio proceso schema būtų tokia:

sifr-3-sifravimas-viesuoju

Gavęs šį failą Audrius gali jį iššifruoti štai taip:

gpg --local-user audrius@lapas.info --output - MaryteAudriui.txt.asc

Programa paprašys Audriaus privataus rakto slaptažodžio ir pateiks Audriui iššifruotą laiško tekstą (Kad iššifravimas turi būti daromas būtent Audriaus privačiuoju raktu, nurodėme parinktimi „–local-user audrius@lapas.info“, nors, kadangi tai vienintelis privatusis Audriaus raktas, šią parinktį galėjome praleisti).  Tuo tarpu joks kitas žmogus, kurio viešuoju raktu Marytė laiško nešifravo, negalės jo iššifruoti. Vėlgi, jei šifruotą dokumentą kas nors pamėgintų pakeliui pakeisti (arba, jei jis kaip nors susigadintų siunčiant), GnuPG tiesiog negalės jo iššifruoti.

Laiško, užšifruoto viešuoju Audriaus raktu, iššifravimo naudojant jo privatųjį raktą, schema būtų tokia:

sifr-4-issifravimas-privaciuoju


Nuo šifravimo prie pasirašymo

Taigi, jau radome būdą žmonėms susirašinėjant būti tikriems, kad jų gaunami laiškai yra pasirašyti būtent to asmens, iš kurio laiško laukiame, ir su kuriuo esame susitarę dėl tokio susirašinėjimo.

Tačiau iš tiesų tikri galime būti tik tol, kol tik Marytė žino Audriaus viešąjį raktą, ir tik Audrius žino Marytės viešąjį raktą. Ei, o kam slėpti raktą, kuris vadinamas viešuoju? Ogi todėl, kad bet kas, gavęs Marytės viešąjį raktą, galės sukurti laiškelį, kurį galės iššifruoti perskaityti tik Marytė, tačiau Marytė tada jau nebegalės būti tikra, kad laiškelį parašė Audrius.

Taigi, vėl susiduriame su slapukavimo reikalavimu ir jo nepatogumais. Marytė, norėdama slapta susirašinėti su kokiu nors Mindaugu, turės susikurti dar vieną privataus ir viešojo rakto porą, ir nesupainioti, kurį viešąjį raktą davė Audriui, o kurį – Mindaugui 🙂

Faktas yra ir tai, kad žmonės tik labai retai susirašinėja slaptais pranešimais. Kur kas dažniau mums mažai rūpi, kad kas nors laišką perskaitys, bet labai rūpi, ar tą laišką pasirašo būtent tas žmogus, kurio vardas ir pavardė ten nurodyti.

Taigi, sakykime, Marytei nereikia šifravimo, jai tereikia, kad visi žinotų, jog konkretų laiškelį parašė būtent ji.

Tokiu atveju Marytė gali turimus privatų ir viešąjį raktą panaudoti atvirkštine tvarka. Ji gali užšifruoti laišką su savo privačiuoju raktu, kad jį bet kas galėtų iššifruoti su jos viešuoju raktu. Sukurtasis pasirašytasis failas žmogui vis dar bus neperskaitomas, tačiau Audrius jį galės lengvai perskaityti su GnuPG programa. taigi:

gpg --armor --sign --local-user maryte@lapas.info MaryteAudriui.txt

sukurs failą MaryteAudriui.txt.asc , kurio turinys vis dar bus žmogaus akiai neįskaitomas:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.11 (GNU/Linux)

owGbwMvMwMR4QmLOnKQFSxczrmXkSxL0TSyqLEl1LE0pyizN1CupKAkrtNXzSUxK
LFYACyaW6nBxKSgUpOZllySmZKbmHVmvkJ1akplXqlB6dF9xaXZJpkIBUHFJYlkq
F5CRmZ2TWFpcCRRVyC2tyszOL9ZRyE7MLFBIzDvSCmQVlRxp5SpJLDoyPffI9GI9
BaDZnkcXZqcWZCsUFCUeXZhYqqCQlFOZd3SzjgKQq6CQWFKcmZd6dGFmqQJXaX46
yAVQfQFA24qOri7IzMvWUQAanaKgkJeYm5mqkHR0dcnRzUCh/OxMIM2Vl19UrJCe
mFkG5GUBBdKPTC/KzD26WY+LyzM7U4cLHAZHpnN1MsqwMDAyMbCxMoFCgYGLUwAW
WE8Psf8zatSyCy84tHPfCfkLX/Lesy/4Hbi0Ll9ys9Dh0xflvY68vaPhcIpDpJFd
ZbnI/hdiMtrW1juPFIWlbBD/oOLpe+nPl2QbkybvjDS2ff1G3O8+HfyUa+125VuQ
zYmFTiLm/BIe35y1RZNlfq/bZ6f86UfCYs8NC/TiJOa83ephLtr6MD68xWCnYenu
03+rFJM6fkf7f7P8fCHs/mIXozz907NnO/5eI3jh3dEJGzP1q6/M3aBQNFXI+86i
3mj/SIZDz07dMe+5ezqUd+eV24KLrk7oWmjZdcz9TvYrU+XzWRl/slJXT0yVLXLn
//hf+afn7SedP6z6jx6bK3gtR8rlaHZhq7rFtt+72Pximm0A
=rCDC
-----END PGP MESSAGE-----

Tačiau Audrius, turėdamas Marytės viešąjį raktą, šį laišką lengvai iššifruos neįvedinėdamas jokio slaptažodžio. Štai tam reikalinga komanda ir tai, ką pamatysime įvedę komandą:

gpg  --output - MaryteAudriui.txt.asc
Labas Audriau,

  penktadienį ketinu užsukti pas tave
pasiklausyti  muzikos, kaip aną kartą
tarėmės.
  Iškepk prašau  blynų, aš  atsinešiu
uogienės.
  Pasirūpink,  kad  namie būtų  kokių
nors gaiviųjų gėrimų.

Iki,
Marytė
gpg: Signature made 2015 m. gruodžio 16 d. 12:30:06 EET using RSA key ID 62A0A5A3
gpg: Good signature from "Marytė <maryte@lapas.info>"

Pastebėkime ir tai, kad laiškas jau nebuvo užšifruotas konkrečiai Audriui. Bet kas, turintis Marytės viešąjį raktą, gali tą laišką iššifruoti ir matyti, kad jį užšifravo būtent Marytė. Viešasis raktas yra skirtas visiems, su kuo Marytė susirašinėja, štai kodėl viešasis raktas ir turi tokį pavadinimą.

Vėlgi, štai kokia yra šifravimo privačiuoju raktu proceso schema:

sifr-5-sifravimas-privaciuoju-pasirasymas

Kadangi šį šifruotą dokumentą gali perskaityti bet kas, tik sąlyginai jį galima vadinti užšifruotu. Pastebėkime, kad šifravimui jau buvo panaudota ne GnuPG parinktis „–encrypt“ (šifruoti), o parinktis „–sign“ (pasirašyti!). Nuo čia – jau tik vienas žingsnis iki elektroninio parašo sąvokos – tokios, kokia ji naudojama šiandien. Ženkime tą žingsnį.

Galima apsieiti ir be viso laiško šifravimo. tereikia laišką pasirašyti nurodant

--clearsign

parinktį:

gpg --clearsign --local-user maryte@lapas.info MaryteAudriui.txt

Parinktis „–clearsign“ reiškia, kad dokumentas pasirašomas nepakeičiant jo viso jo teksto šifruotu kodu. Gautas failas MaryteAudriui.txt.asc bus kiek kitoks, nei iki šiol matyti. Jame matysime paprastą laiško tekstą, tačiau tas tekstas bus apskliaustas GnuPG žymomis, o laiško pabaigoje matysime ne ką kitą, o ELEKTRONINĮ PARAŠĄ 🙂

Štai:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Labas Audriau,

  penktadienį ketinu užsukti pas tave
pasiklausyti  muzikos, kaip aną kartą
tarėmės.
  Iškepk prašau  blynų, aš  atsinešiu
uogienės.
  Pasirūpink,  kad  namie būtų  kokių
nors gaiviųjų gėrimų.

Iki,
Marytė
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQEcBAEBAgAGBQJWcT4TAAoJEMgYnJxioKWjAYgIAJWX5idGTFmvDJrRM8yj+5U3
uiugTIdDfKN2+zHczGjUyNAsuMbGZygQL4bvOQj6ONERybQCsxnkZGZrNK0dILgn
oEaJxaOmxEvdckD5/V03t6Ktr2VMl0Gm9yXbEL4QwY+u+z7VnRw895HK8if3UUHY
5/UtbryqoRGAxm2E0rMAlLmvDHbzGjsbS3qALQ9F7sT8rVqoYYNZn2NZ5uU6L6fh
f79el9ZBqN/4fSi0NNH9h9G2NHEhztptkLk47kmH+QjrphMNSHQEB4Ox1EA+OKTs
Q6Xd8P1jmK/fBVRl9pmuYrR9BPJqPjDiX+IrYmPSo1EOc9FGX7e0xhGd4RUVtrU=
=rk8D
-----END PGP SIGNATURE-----

Kas dar įdomiau: kad ir kokio ilgio laišką rašytų Marytė Audriui, parašo apimtis visiškai nesikeis.

Kodėl? Todėl, kad el. parašas yra ne viso dokumento, o tik jo skaitmeninės santraukos šifras. Tačiau nepaisant parašo trumpumo, bent vieną simbolį tekste pakeitus ir pasirašius tekstą, parašo simbolių seka visiškai pasikeis. O jei kas nors pamėgintų laišką suklastoti, GnuPG programa, kuria tikrinsime parašą, mums iškart pasakys, kad parašas BLOGAS tai reikš, kad laiškas buvo pakeistas po to, kai buvo pasirašytas. O jei nors vienas simbolis pasikeis parašo eilutėje, GnuPG rodys parašo nustatymo klaidą. Taigi, bet kuriuo atveju bus galima matyti, kad kažkas prie failo „prikišo nagus“.

Taigi, pasirašymo proceso schema būtų tokia:

sifr-6-pasirasymas-santraukos-sifravimas

O štai taip atrodytų laiško elektroninio parašo tikrinimo schema:

sifr-7-paraso-tikrinimas

Kadangi failo skaitmeninė santrauka yra esminė el. parašo (tokio, koks jis vartojamas šiandien) dalis, skirkime jai daugiau dėmesio.

Failo skaitmeninė santrauka („hešas“)

Taigi, šiandien naudojamoje elektroninio parašo infrastruktūroje pasirašymo atveju nėra šifruojamas visas dokumentas. Šifruojama tik jo santrauka. Kas tai per daiktas?

Jei užeitumėte į didelių failų atsisiuntimo svetaines, pamatytumėte, kad greta siūlomo atsisiųsti failo yra nurodyta jo „hešas“ (jei lietuviškai: „kontrolinė suma“, bet aš „hash“ versiu kaip „santrauką“) ir algoritmas, kurį naudojant sukurtas tas „hešas“ (pvz., – md5 arba sha1):

Kam reikalinga ši santrauka? Ji padeda įsitikinti, kad atsisiunčiant failą neįvyko kokios nors klaidos (dažniausia klaida – kai failas atsisiunčia ne visas). Štai pavyzdžiui, atsisiuntę tą failą iš paveiksliuko, kurio kontrolinė suma yra „581b943fe1ae1d70ba907b667f4f8d19“, ir paleidę komandų eilutės programoje komandą

md5sum netrunner-rolling-2015.11-64bit.iso

Programos išvestyje turime pamatyti aukščiau nurodytą failo santrauką. Jei matome kažkokią kitokią simbolių kombinaciją, atsisiųstas failas neatitinka to, kuris yra serveryje.

Failo santrauka pasikeičia pasikeitus nors vienam failo bitui. Ji yra unikali. Nors teoriškai įmanoma, kad du skirtingi failai turėtų tokią pačią santrauką, atsitiktinai tai beveik nenutinka. Dar vienas dalykas, pasakytinas apie failo santrauką: jos ilgis nesiskiria priklausomai nuo to, kokio dydžio yra failas. Be to, iš santraukos negalima atkurti paties failo.

Kaip gi sukuriame tokia unikali failo santrauka? Gausių matematinių operacijų dėka. Atliekant matematines operacijas su failo informaciniais vienetais – baitais – gaunama ta unikali ir trumpa, fiksuoto ilgumo simbolių kombinacija, iš kurios failo atkurti neįmanoma, bet kuri bus visiškai kitokia vos tik pakeitus vieną bitą pirminiame faile.

Failo santrauką galima naudoti kaip primityvų komunikacijos autentiškumo užtikrinimo būdą. Marytė, išsiuntusi failą su laiškeliu Audriui, gali kitu kanalu (sakykime – SMS’u) išsiųsti jam failo santrauką, kad Audrius žinotų, jog failo pakeliui į jo kompiuterį niekas nepakeitė. Tačiau sutikite, tai nėra labai patogu ir taip pat nėra visiškai patikima (jei įmanoma pakeisti failą pakeliui į Audriaus kompiuterį, tai įmanoma pakeisti ir SMS’ą. Be to, koks nors Kęstas gali išsiųsti sukląstotą laiškelį, ir jį atitinkančią santrauką SMS’u).

Tačiau jei Marytė failo santrauką užšifruotų savo privačiuoju raktu, bet kas, turintis tinkamas technines priemones, įskaitant ir Audrių, galėtų įsitikinti, kad santrauka užšifruota būtent Marytės, o jei užšifruotoji santrauka atitinka kartu siunčiamą laiškelį faile, tai Marytė neabejotinai yra ir laiško autorė.

Mes jau matėme, kaip tai daroma su GnuPG programa: Marytė pasirašė laiškelį Audriui įvykdydama komandą

gpg --clearsign MaryteAudriui.txt

Pasirašymo rezultatas buvo GnuPG žymomis apskliaustas tekstas ir gale prikabintas elektroninis parašas.

Taigi, štai tokiu būdu elektroninis parašas unikaliai identifikuoja ir pasirašantįjį, ir pasirašomąjį dokumentą.

Taigi, kas vyksta pasirašant dokumentą elektroniniu parašu?

Apibendrinkime tai, kas aprašyta aukščiau.

Marytei pasirašant dokumentą elektroniniu parašu įvykdomi šie veiksmai:

  1. Generuojama pasirašomo dokumento santrauka;
  2. Panaudojant Marytės privatųjį raktą pasirašomo dokumento santrauka yra užšifruojama, kitaip sakant, generuojamas konkretaus dokumento elektroninis parašas;
  3. Pasirašomas dokumentas yra kažkokiu būdu sujungiamas su parašu (taip būna dažniausiai, nors parašas gali būti paliekamas kaip atskiras failas. Sujungimas vyksta dviem būdais: arba tiesiog sudedant du teksto elementus į vieną teksto failą, arba sudedant parašą ir pasirašomą dokumentą į vieną tam tikros struktūros archyvą).
  4. GnuPG atveju turime tik tris aukščiau nurodytus žingsnius; S/MIME atveju prie pasirašyto dokumento dar gali būti prijungiamas ir elektroninis sertifikatas (apie jį skaitykite žemiau).

Kas vyksta, kai Audrius gauna Marytės pasirašytą laišką ir atveria jį su GnuPG programa?

  1. GnuPG patikrina, ar ji turi Marytės viešąjį raktą ir nustato, ar Audrius yra patvirtinęs, jog pasitiki Marytės viešuoju raktu. Jei pasirašymas būtų vykęs S/MIME pagalba, programa tikrintų, ar kartu su Marytės laišku atėjęs jos elektroninis sertifikatas yra patikimas, nes jo patikimumą liudija patikima sertifikavimo įstaiga).
  2. GnuPG bando iššifruoti pasirašyto dokumento santrauką panaudodama Marytės viešąjį raktą; jei iššifravimas pavyksta –
  3. GnuPG sukuria pasirašytojo laiško santrauką ir palygina sukurtąją santrauką su 1 žingsnyje iššifruota santrauka.
  4. Jei pirmieji trys žingsniai pavyksta, GnuPG paskelbia, kad dokumentas yra pasirašytas geru elektroniniu parašu (kas reiškia, kad laišką pasirašė tikrai Marytė, ir kad pakeliui į Audriaus pašto dėžutę laiškas nebuvo pakeistas).

Kitos sąvokos: elektroninis sertifikatas, sertifikavimo įstaiga

Kalbant apie elektroninį parašą girdimos ir kitos sąvokos: „elektroninis sertifikatas“, „kvalifikuotas elektroninis sertifikatas“, „sertifikavimo įstaiga“. Kas tai per žvėrys?

Visi šie dalykai padeda „pririšti“ elektroninį raktą ir juo dedamus „elektroninius parašus“ prie konkretaus asmens. Čia vėl prisireiks Marytės ir Audriaus pagalbos.

Marytė ir Audrius vienas kitą pažinojo, vienas kitam į kompiuterius nukopijavo savo viešuosius raktus. Jiems nekilo abejonių dėl vienas kito tapatybės. Todėl, kai Audrius patikrina gautą pasirašytą laišką su GnuPG programa ir pamato tokį pranešimą:

gpg: Signature made 2015 m. gruodžio 04 d. 19:34:31 EET using RSA key ID 62A0A5A3
gpg: Good signature from "Marytė <maryte@lapas.info>"

jis gali būti visiškai tikras, kad laišką parašė būtent ta Marytė, kurios viešąjį raktą jis turi.

Tačiau ne visi žmonės pažįsta vieni kitus.

Sakykime, Audrius gauna laišką nuo Mindaugo, kuris prašo pervesti jam pinigų, kuriuos jis perduosiąs Marytei, kuri pakliuvusi į bėdą :). Patikrinęs Mindaugo el. parašą Audrius pamato, kad neturi Mindaugo viešojo rakto. Laimei, jis gali paieškoti viešojo Mindaugo rakto tam skirtose duomenų bazėse. O gal viešasis Mindaugo raktas yra paskelbtas Mindaugo tinklaraštyje? Jei Audriui pavyksta rasti Mindaugo viešąjį raktą, tai – jau šis bei tas. Tačiau viešojoje erdvėje yra daugybė klastočių. Pvz., vienoje viešoje GnuPG raktų repozitorijoje galima rasti bent 10 Bilų Geitsų, kurių nei vienas nėra tas Bilas Geitsas, apie kurį pirmiausiai pagalvojote…

Tačiau jei Marytė iš tiesų yra Mindaugo draugė, ji gali būti „pasirašiusi“ Mindaugo viešąjį raktą, tai yra, savo elektroniniu parašu patvirtinusi tam tikrą ryšį tarp savęs ir Mindaugo. Audriui tai yra tarsi „sertifikatas“, patvirtinantis, kad Mindaugas iš tiesų yra tas, kas sakosi esąs.

Taigi, elektroninis sertifikatas yra tiesiog dokumentas, sudarytas iš tam tikros informacijos apie, šiuo atveju, Mindaugą (jame gali būti nurodytas Mindaugo vardas ir pavardė, el. p. adresas, asmens kodas), Mindaugo viešojo rakto, ir pasirašytas trečiojo asmens el. parašu***. Elektroninio sertifikato tikslas – patvirtinti, kad konkretus viešasis raktas priklauso konkrečiam asmeniui, kuris apibūdinamas nurodant jo vardą, pavardę, asmens kodą, komunikacijos priemonę (el. p. adresą).

O dabar įsivaizduokime, kad tas trečiasis asmuo ir verčiasi tuo, kad patvirtina kitų asmenų tapatybę ir suteikia tuos elektroninius sertifikatus visiems paprašiusiems (už tam tikrą mokestį). Netgi turi specialų leidimą tai daryti iš atitinkamos valstybės institucijos. Kiekvienas, ateinantis pas jį, gauna elektroninio parašo įrenginį (išmaniąją kortelę, USB raktą), kuriame įrašyti abu – privatusis ir viešasis – jo raktai. Kai asmuo privačiuoju raktu pasirašo elektroninį dokumentą, prie dokumento prikabinamas ne tik asmens elektroninis parašas, bet ir „elektroninis sertifikatas“, tiksliau, „kvalifikuotas elektroninis sertifikatas“ (nes jį išdavė „kvalifikuota“ sertifikavimo įstaiga). Gavęs tokį dokumentą bet kas, turintis reikiamą programinę įrangą ir pasitikintis ta sertifikavimo įstaiga (tai yra, įsidiegęs į kompiuterį tos įstaigos „šakninius sertifikatus“ ir nurodęs, kad jais pasitiki) gali iškart, atsidaręs pasirašytą dokumentą, sužinoti:

  1. Ar dokumentas nebuvo pakeistas nuo jo sudarymo (ar „santrauka“ atitinka dokumentą ir ar ji tikrai užšifruota privačiuoju pasirašiusiojo raktu);
  2. Kas pasirašė dokumentą (gauti esminę informaciją apie asmenį);
  3. Ar pasirašiusiojo parašas yra patvirtintas kvalifikuotu elektroniniu sertifikatu;
  4. Dar keletą dalykų, susijusių su parašo galiojimu pasirašymo metu ir parašo atšaukimu, į kuriuos dabar nesileisime.

Apie visa tai, jei bus ūpo ir norinčių skaityti, parašysiu kitą kartą. Senesnius šio tinklaraščio įrašus apie el. parašą galite rasti sekdami žyma „el. parašas“.

*****

Tikiuosi šis tekstas padėjo bent šiek tiek geriau suvokti elektroninio parašo esmę. Jei turite klausimų ar pastabų dėl teksto, prašau jas išsakyti dokumento komentaruose.

Naudingos nuorodos

Plačiau apie GnuPG naudojimą:

Plačiau apie Lietuvoje naudojamus saugaus el. parašo standartus:

Išnašos

* Šiame įraše panaudotos GnuPG programos parinktys:

„--armor“ – šifruotame dokumente vietoje dvejetainio kodo naudoti žmogui įskaitomą ascii tekstą;
„--clearsign“ – pasirašyti apgaubiant tekstą GnuPG žymomis ir prikabinant gale elektroninį parašą (užšifruotą dokumento santrauką);
„--encrypt“ – šifruoti;
„--local-user“ - parinktis nurodo, kokį vartotojo privatųjį raktą naudoti atliekant prašomą veiksmą. Jei raktas yra tik vienas, ją galima praleisti;
„--output -“ – parinktis nurodo, į kokį failą rašyti programos iššifruojamą dokumentą; šiuo atveju, vietoje failo pavadinimo nurodžius brūkšnelį „-“, dokumento turinys tiesiog parodomas terminalo lange;
„--sign“ – pasirašyti (arba - šifruoti privačiuoju raktu, kai dokumentą galima iššifruoti turint viešąjį raktą, kuris paprastai yra laisvai prieinamas);
„--symmetric“ – naudoti simetrinį (vieno rakto-slaptažodžio) šifravimą.

** Slaptažodis „436“ žinoma nėra saugus. Saugus būtų slaptažodis, sudarytas iš kokių devynių simbolių, įskaitant didžiąsias raides, mažąsias raides, skaičius ir kokį nors @$§^, be to, slaptažodis, kurį sudarant nenaudojami žodyne esantys žodžiai.

*** Elektroninai sertifikatai su GnuPG programa nėra naudojami, nes GnuPG nėra technologija, sukurta taikyti centralizuotai. Elektroniniai sertifikatai – jau kitų el. parašo standartų – (kuriamų S/MIME pagrindu) sudėtinė dalis.


Paskelbta

sukūrė

Komentarai

Atsakymai į “Kas iš tiesų vyksta dokumentą pasirašant elektroniniu parašu”: 2

  1. Mantoseda avataras
    Mantoseda

    Nors ir įdomu kas vyksta iš techninės pusės tuo momentu kai pasirašomi elektroniniu parašu dokumentai, bet realiai, paprastam vartotojui tai įdomu tik saugumas ir jo lygis. Pavyzdžiui eset nod32 kaip veikia tokiu momentu. Tai dažnai būna kad ir nepraleidžia prisijungimo šita svetainė.

    1. Donatas Glodenis avataras

      Kokia svetainė ko nepraleidžia? Ir, gal galite paaiškinti, ką bendro antivirusas turi su elektroniniu parašu kiek plačiau?

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.