Objavljeno:

Kriptografsko deljenje skrivnosti (mala šola informacijske varnosti, 2. del)

Uporabniki kriptografije se slej ko prej soočijo s problemom varne hrambe njihovih gesel v primeru, da se jim kaj zgodi. Torej v primeru, da umrejo, doživijo kakšno hujšo nesrečo ali kaj podobnega. Seveda je mogoče svoja gesla shraniti na neko varno mesto, vendar se lahko zgodi, da jih nihče ne bo našel, ali pa da jih bodo že prej našli nepravi ljudje. Gesla je mogoče tudi komu zaupati, vendar ta oseba lahko zaupanje nekoč izkoristi. Ali pa gesla pozabi, ji gesla kdo ukrade, ali pa se tudi tej osebi pripeti nesreča. Rešitev bi bila, da bi gesla zaupali več osebam, a več oseb pomeni večje tveganje za krajo ali zlorabo zaupanja.

V resnici tudi za to težavo v kriptografiji obstaja rešitev. Imenuje se deljenje skrivnosti (ang. secret sharing, secret splitting). Gre za posebne metode distribucije šifrirnih ključev med več posameznikov, pri čemer pa so ti šifrirni ključi izdelani na tak način, da je za dešifriranje sporočila potrebno uporabiti več ključev (ne pa vseh). Tako lahko naredimo npr. deset različnih ključev, dešifriranje pa je npr. mogoče s poljubnimi tremi ključi. Gre za tim. kriptografske sisteme s pragom (ang. threshold cryptosystem), kjer šifrirne ključe razdelimo med več entitet (oseb), pri dešifriranju pa mora sodelovati vsaj določeno število teh oseb.

Deljenje skrivnosti sta leta 1979 neodvisno izumila kriptologa Adi Shamir in George Blakley. Med bolj znanimi sistemi deljenja skrivnosti je tim. Shamirjev kriptografski sistem deljenja skrivnosti (Shamir’s scheme), ki uporablja tim. Lagrangovo polinomsko interpolacijo.

Grafični prikaz deljenja skrivnosti

Grafični prikaz deljenja skrivnosti, Vsaka “skrivnost” je ena ploskev, točka pa je naše skrivno sporočilo. Samo tri ploskve skupaj vrnejo točko. Vir: Wikipedia,

Shamirjev sistem je (matematično) dokazljivo varen, kar pomeni da če ima napadalec manj ključev kot jih je potrebnih za dosego praga (tim. t-1) je enako, kot če ne bi imel nobenega ključa in bi zgolj skušal ugibati.

Sistemi deljenja skrivnosti so tako uporabni na številnih področjih. Kot že omenjeno, je mogoče lokacije ključev dovolj razpršiti, s čimer napadalcu otežimo krajo ključev – namesto, da bi napadalec ključ ukradel samo iz ene lokacije, ga mora ukrasti iz več lokacij. Druga možnost je deljenje odgovornosti med več oseb, ki jim ne zaupamo popolnoma. Tako na primer lahko trezor v banki odklene le direktor banke, če pa on ni dosegljiv, ga lahko odklenejo trije uslužbenci skupaj. Mogoči so še drugačni sistemi, npr. enega generala lahko zamenja deset vojakov itd.

Praktična implementacija Shamirjevega kriptografskega sistema deljenja skrivnosti je programska aplikacija ssss (Shamir’s Secret Sharing Scheme), ki je na voljo za Linux sisteme (izdelana je bila tudi starejša različica za Windows sisteme, vendar je na spletu ni mogoče več najti). Namestitveni paket se nahaja tudi v Ubuntu skladiščih programskih paketov.

Program je mogoče poganjati samo iz ukazne vrstice, sestoji pa iz dveh aplikacij – ssss-split, ki je namenjena ustvarjanju ključev ter ssss-combine, ki je namenjen dešifriranju. Pomembnejša parametra za ssss-split sta _-t <ŠTEVILO>_, ki pove tim. prag (koliko ključev bo potrebnih za dešifriranje) in _-n <ŠTEVILO>_, ki pove koliko ključev naj program generira.

Primer za generiranje petih ključev, od katerih so za dešifriranje potrebni poljubni trije:

ssss-split -t 3 -n 5
Generating shares using a (3,5) scheme with dynamic security level.
Enter the secret, at most 128 ASCII characters: <VNESEMO NAŠE GESLO OZ. "SKRIVNOST"> Using a 120 bit security level.
1-6af8825d139038cbb3ade2ed7e41fb
2-a7a44106fa1d7107dcc67a1fba7724
3-70a29e571a09d310b4b112425c8af0
4-5814efbfc675f2bd8a2bebbd61e8b5
5-8f1230ee266150aae25c83e0871573

Na podlagi vnešenega gesla je program ustvaril 5 šifrirnih ključev, ki jih razdelimo petim osebam ali pa shranimo na pet različnih mest. Mimogrede, če program zaženemo kot navaden uporabnik (torej ne s skrbniškimi privilegiji), program ne more zaščititi pomnilnika RAM iz izpiše opozorilo “WARNING: couldn’t get memory lock (ENOMEM, try to adjust RLIMIT_MEMLOCK!).” (kljub temu program deluje normalno).

Sedaj pa šifrirano geslo oz. “skrivnost”, ki smo jo ustvarili dešifriramo in sicer tako, da uporabimo poljubne tri ključe:

ssss-combine -t 3
Enter 3 shares separated by newlines:
Share [1/3]: 2-a7a44106fa1d7107dcc67a1fba7724
Share [2/3]: 5-8f1230ee266150aae25c83e0871573
Share [3/3]: 4-5814efbfc675f2bd8a2bebbd61e8b5
Resulting secret: velikaskrivnost

Avtor programa, Bertram Poettering, je na svoji spletni strani izdelal tudi on-line demonstracijo, ki omogoča deljenje in kombiniranje skrivnosti kar preko spletnega vmesnika.

S pomočjo sistema za deljenje skrivnosti si tako lahko izdelamo zelo dobro implementacijo varne hrambe naših gesel in šifrirnih ključev v primeru nesreče, smrti ali nedosegljivosti (zlasti npr. v podjetjih). Vsa gesla in šifrirne ključe shranimo v Keepass shrambo ključev (seveda je potrebno uporabiti ustrezno dolgo in kompleksno geslo), nato pa datoteko s shranjenimi podatki posredujemo več osebam ali jo shranimo na neko znano mesto (lahko tudi v oblak, saj je šifrirana). Geslo za odklep shrambe pa s pomočjo aplikcije ssss razdelimo na več delov, posamezne dele pa nato razdelimo več osebam, seveda skupaj z navodili za uporabo oziroma odklepanje in z napotkom kdaj postopek odklepanja uporabiti.

Kategorije: Informacijska tehnologija, Informacijska varnost, Odprta koda, Zasebnost
Ključne besede: informacijska varnost, kriptografija, mala šola informacijske varnosti