Vaatame olukorda, kus on vaja tagada pangahoiustamise turvalisus. Seda peetakse tÀiesti ligipÀÀsmatuks ilma vÔtmeta, mille saad esimesel tööpÀeval. Sinu eesmÀrk on turvaliselt hoida vÔti.
Oletame, et otsustasid alati hoida vĂ”tit enda juures, andes ligipÀÀsu hoiusele vastavalt vajadusele. Aga sa mĂ”istad kiiresti, et selline lahendus ei skaleeru hĂ€sti, kuna iga kord, kui on vaja avada hoius, on vajalik sinu fĂŒĂŒsiline kohalolek. Aga kuidas on puhkuseteemaga, mida lubati? Veelgi enam, hiilivad mĂ”tted: mis juhtub, kui kaotad ainulaadse vĂ”tme?
Puhkuse mÔttega otsustasid sa teha vÔtme koopia ja usaldada selle teisele töötajale. Siiski mÔistad, et see pole ka ideaalne. Kahekordistades vÔtmete arvu, kahekordistad sa ka varguse vÔimalusi.
Kehva vĂ€lja, hĂ€vitad sa koopia ja otsustad jagada algse vĂ”tme kaheks. Praegu arvad sa, et kaks usaldusvÀÀrset inimest fragmentidega vĂ”tmetest peavad fĂŒĂŒsiliselt kohal olema, et kokku koguda vĂ”ti ja avada hoius. See tĂ€hendab, et vargal on vaja varastada kaks fragmenti, mis on kahekordselt keerulisem kui ĂŒhe vĂ”tme varastamine. Kuid peagi mĂ”istad, et see skeem ei ole palju parem kui lihtsalt ĂŒks vĂ”ti, kuna kui keegi kaotab ĂŒhe vĂ”tme osa, ei saa kogu vĂ”tit taastada.
Probleemi saab lahendada tĂ€iendavate vĂ”tmete ja lukkudega, kuid sellise lĂ€henemise puhul on kiiresti vaja palju vĂ”tmeid ja lukke. Otsustad, et ideaalses skeemis tuleks jagada vĂ”ti, et turvalisus ei sĂ”ltuks tĂ€ielikult ĂŒhest inimesest. Oled ka veendunud, et peaks olema mingi lĂ€vi fragmentide arvu osas, et ĂŒhe fraktsiooni kadumise (vĂ”i kui inimene lĂ€heb puhkusele) korral jÀÀks kogu vĂ”ti toimivaks.
Kuidas jagada saladust
Sellise vĂ”tmehalduse skeemi mĂ”tles vĂ€lja Adi Shamir 1979. aastal, kui ta avaldas oma töö . Artiklis selgitab ta lĂŒhidalt nn
lĂ€vitaskeemi, et tĂ”husalt jagada saladuslik vÀÀrtus (nĂ€iteks krĂŒptograafiline vĂ”ti) osadeks
jÀrel. Siis, kui ja ainult siis, kui vÀhemalt
API-s
osa on kogutud, saab saladuse kergesti taastada.
.
Turvalisuse seisukohalt on selle skeemi oluline omadus see, et rĂŒndaja ei tohiks teada saada absoluutselt midagi, kui tal ei ole vĂ€hemalt
osakest. Isegi ĂŒhe osakese olemasolu ei tohiks anda mingit teavet. Me nimetame seda omadust
semantiliseks turvalisuseks PolĂŒnoomi interpolatsioon.
Shamira lÀvendiskeem
on ĂŒles ehitatud polĂŒnoomi interpolatsiooni kontseptsiooni ĂŒmber. Kui te pole selle kontseptsiooniga tuttav, siis see on tegelikult ĂŒsna lihtne. Ăldiselt, kui olete kunagi graafikule punkte joonistanud ja seejĂ€rel neid joonte vĂ”i kĂ”veratega ĂŒhendades, siis olete seda juba kasutanud!
Kaks punkti vĂ”ivad mÀÀrata piiramatult palju 2. astme polĂŒneome. Nende hulgast unikaalse valimiseks on vajalik kolmas punkt. NĂ€ide: VĂ”tame ĂŒhe astme polĂŒnoomi,. Kui soovite seda funktsiooni graafikule joonistada, kui palju punkte on vaja? Noh, me teame, et see on lineaarefunktsioon, mis moodustab joone, ning seetĂ”ttu on vajalik vĂ€hemalt kaks punkti. JĂ€rgmine vaatleme kahe astme polĂŒnoomi,

. See on ruutfunktsioon, seega on graafiku loomiseks vajalik vĂ€hemalt kolm punkti. Ent kuidas on kolme astme polĂŒneomiga? VĂ€hemalt neli punkti. Ja nii edasi.
TĂ”eliselt lahe asi selle omaduse juures on see, et arvestades polĂŒnoomi funktsiooni astet ja vĂ€hemalt
punkti, saame tuletada tĂ€iendavaid punkte selle polĂŒnoomi funktsiooni jaoks. Nende tĂ€iendavate punktide ekstrapoleerimist nimetatakse
polĂŒnoomi interpolatsiooniks
Saladuse koostamine
VÔite juba aru saada, et siin astub mÀngu nutikas Shamiri skeem. Oletame, et meie saladus on . Saame muuta.
punktiks graafikul
ja vĂ€lja mĂ”elda polĂŒnoomi funktsiooni astmega
â see on
, mis rahuldab seda punkti. Peame meeles pidama, et
on meie nĂ”utud fragmentide lĂ€vend, seega kui seadistame lĂ€ve kolme fragmenti peale, siis peame valima polĂŒnoomi funktsiooni astmega kaks.
Meie polĂŒnoom on kujul
â juhuslikult valitud positiivsed tĂ€isarvud. Me ehitame lihtsalt polĂŒnoomi astmega
, kus vaba kordaja
on meie saladus
, kus
ja
, ja iga jÀrgmine
punkti jaoks
 .
, а Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ Оз ĐżĐŸŃлДЎŃŃŃĐžŃ
liikmetel on juhuslikult valitud positiivne koefitsient. Kui naasta algse nÀite juurde ja eeldada, et
, saame siis funktsiooni
.
Selles etapis saame genereerida fragmente, ĂŒhendades
ainulaadseid tÀisarve
, kus
(sest see on meie saladus). Antud nÀites soovime jagada nelja fragmenti lÀvendi kolme, seetÔttu genereerime juhuslikult punktid
ja saadame igale neljale usaldusvÀÀrsele isikule, vĂ”tmekaitsjale, ĂŒhe punkti. Anname ka inimestele teada, et
, kuna seda peetakse avalikuks informatsiooniks ja see on vajalik taastamiseks
.
Saladuse taastamine
Oleme juba arutanud polĂŒnoomi interpolatsiooni kontseptsiooni ja et see on aluseks Shamir'i lĂ€ve skeemile
. Kui tahes kolm neljast usaldusisikust soovivad taastada
, peavad nad lihtsalt interpolatsiooni tegema
oma ainulaadsete punktidega. Selleks vÔivad nad mÀÀrata oma punktid
ja arvutada Lagrange'i interpolatsioonipolĂŒnoomi, kasutades jĂ€rgmist valemit. Kui programmeerimine on teile tuttavam kui matemaatika, siis pii on pĂ”himĂ”tteliselt operaator for, mis korrutab kĂ”ik tulemused, ja sigma on for, mis on kĂ”ik summad.


Kaugjuhtimisega
saame selle lahendada jĂ€rgmiselt ja tagastada oma algse polĂŒnoomi funktsiooni:

Kuna me teame, et
, taastamine
kÀib lihtsalt:

Ohutu tÀisarvude aritmeetika kasutamine
Kuigi oleme edukalt rakendanud Shamir'i pÔhiideed
, on meil probleem, mida oleme seni ignoreerinud. Meie polĂŒnoomi funktsioon kasutab ebaturvalist tĂ€isarvude aritmeetikat. Pidage meeles, et iga tĂ€iendava punkti puhul, mille rĂŒndeĂ”igus omandab meie funktsiooni graafikult, jÀÀb vĂ€hem vĂ”imalusi teiste punktide jaoks. Saate seda oma silmaga nĂ€ha, kui joonistate graafikut, suurendades polĂŒnoomi funktsioonile punkte, kasutades tĂ€isarvude aritmeetikat. See on meie deklaratsiooni turvalisuse eesmĂ€rgiga vastuolus, sest kurjategija ei tohiks absoluutselt midagi teada, kuni neil pole vĂ€hemalt
fragmente.
Kuna demonstreerime, kui nÔrk on tÀisarvude aritmeetika skeem, arvestame stsenaariumi, kus kurjategija on saanud kaks punkti
ja teab avalikku teavet, et
. Selle teabe pÔhjal saab jÀreldada
, mis on kaks, ja sisestada valemisse tuntud vÀÀrtused
ja
.

SeejĂ€rel vĂ”ib rĂŒndaja leida
, arvestades
:

Kuna oleme mÀÀratlenud
kui juhuslikult valitud positiivsed tÀisarvud, on piiratud arv vÔimalikke
. Selle teabe abil saab rĂŒndaja jĂ€reldada
, kuna kĂ”ik, mis on ĂŒle 5, muudab
negatiivseks. See osutub tÔeks, kuna oleme mÀÀratlenud 
SeejĂ€rel vĂ”ib rĂŒndaja arvutada vĂ”imalikke vÀÀrtusi
, asendades
ja
:

Piiratud valikute komplektiga
on selge, kui lihtne on leida ja kontrollida vÀÀrtusi
. Siin on kokku viis varianti.
Probleemi lahendamine ohtliku tÀisarvuarvutusega
Selle haavatavuse kÔrvaldamiseks soovitab Shamir kasutada moodulaarset aritmeetikat, asendades
. Tundub, et
, kus
ja
â kĂ”ikide algarvude hulk.
Korrake kiiresti, kuidas moodulaarne aritmeetika töötab. Kellad on juba tuttav kontseptsioon. Need kasutavad kelli, mis on
. Kui tunni kĂ€si lĂ€bib kaksteist, pöördub see tagasi ĂŒhte. Selle sĂŒsteemi huvitav omadus on see, et lihtsalt kelladele vaadates ei saa me jĂ€reldada, mitu korda tundidoos on kĂ€inud. Kuid kui me teame, et tunni kĂ€si on neli korda möödunud 12-st, saame kogu möödunud tunni arvu tĂ€iesti mÀÀrata lihtsa valemi abil
, kus
 â see on meie jagaja (siin
),
 â see on koefitsient (mitu korda jagaja jagab algset numbrit ilma jÀÀgita, siin
), ja
 â see on jÀÀk, mille tavaliselt tagastab mooduliga operatsiooni vĂ€ljakutse (siin
). KÔikide nende vÀÀrtuste teadmine vÔimaldab meil lahendada vÔrrandi
, kuid kui me jÀtame koefitsiendi vahele, ei saa me kunagi taastada algset vÀÀrtust.
Saame demonstreerida, kuidas see parandab meie skeemi turvalisust, rakendades skeemi meie eelnevale nÀitele ja kasutades
. Meie uus polĂŒnoomiline funktsioon
, ja uued punktid
. NĂŒĂŒd saavad vĂ”tmehoidjad uuesti kasutada polĂŒnoomilist interpoleerimist, et taastada meie funktsioon, ainult et seekord peavad liitmis- ja korrutamisoperatsioonid olema koos jÀÀgiga jagamisel
(nt.
).
Kasutades seda uut nĂ€idet, oletame, et rĂŒndaja teada kaks neist uutest punktidest,
, ning avalik teave
. Seekord rĂŒndaja tugineb kogu oma olemasolevale teabele, et tuletada jĂ€rgmisi funktsioone, kus
 â kĂ”ik positiivsete tĂ€isarvude kogum, ja
esindab mudelit.
.

NĂŒĂŒd leiab meie kurjategija taas
, arvutades
:

SeejÀrel proovib ta taas tuletada
, asendades
ja
:

Seekord on tal tÔsine probleem. Valemist puuduvad vÀÀrtused
,
ja
. Kuna nende muutuja kombinatsioone on lÔpmatu arv, ei saa ta mingit lisainfot.
Turvakaalutlused
Shamir'i saladuse jagamise skeem pakub turvalisust teooria kohaselt. See tĂ€hendab, et matemaatika on tugev isegi rĂŒndaja vastu, kellel on piiramatu arvutusvĂ”ime. Siiski sisaldab skeem endiselt mitmeid tuntud probleeme.
NÀiteks Shamir'i skeem ei loo kontrollitavaid fragmente, see tÀhendab, et inimesed saavad vabalt esitada valefragmente ja segada Ôige saladuse taastamist. Vaenulik fragmentide hoidja, kellel on piisavalt teavet, vÔib isegi luua teise fragmendi, muutes
oma ÀranÀgemisel. See probleem lahendatakse kontrollitavate saladuse jagamise skeemide abil, nagu Felmani skeem.
Teine probleem on see, et igasuguse fragmenti pikkus vÔrdub vastava saladuse pikkusega, mistÔttu on saladuse pikkust kerge mÀÀrata. See probleem lahendatakse triviaalsete tÀidete saladuse tÀiendamisega juhuslike numbritega kindla pikkuseni.
LĂ”puks on oluline mĂ€rkida, et meie mured turvalisuse osas vĂ”ivad ulatuda kaugemale skeemi enda piiridest. Reaalsetes krĂŒptograafilistes rakendustes eksisteerib sageli oht kĂ”rvalkanali rĂŒnnakuteks, kui rĂŒndaja pĂŒĂŒab vĂ€lja tuua kasuliku teabe rakenduse tööajast, vahemĂ€lu, tĂ”rgetest jne. Kui see teeb murettekitavaks, tuleks arendada kaitsemeetmete kasutamist, nagu pideva töötlemise ajaga funktsioonid ja otsingud, vĂ€ltida mĂ€lu salvestamist kettale ning kaaluda mitmeid muid aspekte, mis jÀÀvad selle artikli piiridest vĂ€ljapoole.
Demo
Pealehe on interaktiivne Shamir'i saladuse jagamise skeem. Demonstreerimine on tehtud libraryst , mis on iseenesest populaarse programmi Pange tÀhele, et suurte vÀÀrtuste arvutamine
,
ja
vÔib vÔtta aega.
Allikas: habr.com
