Kujutame ette olukorda, kus on vajalik pangahoiustamise turvalisuse tagamine. Seda peetakse tÀiesti ligipÀÀsmatuks ilma vÔtmeta, mille saate esimese tööpÀeva jooksul. Teie eesmÀrk on vÔti turvaliselt hoida.
Oletame, et otsustasite kogu aeg vĂ”tme enda juures hoida, vĂ”imaldades juurdepÀÀsu hoiustamisele vajaduse korral. Kuid kiiresti mĂ”istate, et selline lahendus ei toimi, kuna igaks hoiustamise avamiseks on vajalik teie fĂŒĂŒsiline kohalolu. Mis siis, kui soovite puhkusele minna? Veelgi rohkem hĂ€irib teid kĂŒsimus: mis juhtub, kui kaotate ainulaadse vĂ”tme?
MÔeldes puhkusele, otsustasite teha vÔtme koopia ja anda see usaldusvÀÀrsele kolleegile. Kuid mÔistate, et see pole ka ideaalne lahendus. Kahe vÔtme olemasolu kahekordistab ka vÔtme varguse vÔimalused.
Meeleheite tĂ”ttu hĂ€vitate koopia ja otsustate jagada algse vĂ”tme kahele osale. NĂŒĂŒd arvate, et kaks usaldusvÀÀrset isikut, kellel on vĂ”tme fragmentide osad, peavad fĂŒĂŒsiliselt kohal olema, et koos kokku panna vĂ”tmega ja avada ladu. See tĂ€hendab, et vargal on vaja varastada kaks fragmenti, mis teeb selle varguse kaks korda raskemaks kui ĂŒhe vĂ”tme varastamine. Siiski mĂ”istate peagi, et see skeem ei ole palju parem kui lihtsalt ĂŒks vĂ”ti, sest kui keegi kaotab poole vĂ”tme, ei saa tervet vĂ”tit taastada.
Probleemi saab lahendada tĂ€iendavate vĂ”tmete ja lukkude seeria abil, kuid sellise lĂ€henemise korral on kiiresti vajalikud palju vĂ”tmed ja lukud. Otsustate, et ideaalne skeem peaks vĂ”tme jagama, et turvalisus ei sĂ”ltuks tĂ€ielikult ĂŒhest inimesest. JĂ”uate ka jĂ€reldusele, et peab olema mingi minimaalne fragmentide arv, nii et ĂŒhe fragmendi kadumise korral (vĂ”i kui inimene on puhkusele lĂ€inud) jÀÀks kogu vĂ”ti funktsionaalseks.
Kuidas jagada saladust
Sellise vĂ”tmete haldamise skeemi mĂ”tles vĂ€lja Adi Shamir 1979. aastal, kui avaldas oma töö . Artiklis selgitatakse lĂŒhidalt nii nimetatud
efektiivne piiriĂŒlese jagamise skeem, et jagada salajane vÀÀrtus (nĂ€iteks krĂŒptograafiline vĂ”ti)
osadeks. SeejÀrel, kui vÀhemalt
kohast
osakest on kogutud, saab salajase vÀÀrtuse lihtsalt taastada.
.
Turvalisuse seisukohast on selle skeemi oluline omadus see, et kurjategija ei tohiks teada midagi, kui tal ei ole vÀhemalt
osakest. Isegi
osakese olemasolu ei tohi andma mingit teavet. Me nimetame seda omadust semantiliseks turvalisuseks..
PolĂŒnoomiline interpolatsioon.
Shamir'i piiriĂŒlese skeem
on ĂŒles ehitatud polĂŒnoomilise interpolatsiooni kontseptsioonile. Kui te pole selle kontseptsiooniga tuttav, on see tegelikult ĂŒsna lihtne. Ăldiselt, kui olete kunagi joonistanud punkte graafikule ja seejĂ€rel neid joonte vĂ”i kĂ”veratega ĂŒhendama hakanud, olete juba seda kasutanud!

Kaks punkti vĂ”ivad lĂ€bi minna piiramatu arvu teise astme polĂŒnoome. Nende seast ainulaadse valimiseks on vajalik kolmas punkt. Illustreerimiseks:
Vaatame polĂŒnoomi, mille aste on ĂŒks,
. Kui soovite seda funktsiooni graafikule joonistada, kui palju punkte teil vaja on? Noh, me teame, et see on lineaarne funktsioon, mis moodustab joone ja seetĂ”ttu on vajalik vĂ€hemalt kaks punkti. Edasi vaatame polĂŒnoomfunktsiooni astmega kaks,
. See on ruutfunktsioon, seega on graafiku joonistamiseks vajalik vĂ€hemalt kolm punkti. Kuidas on kolmanda astme polĂŒnoomiga? VĂ€hemalt neli punkti. Ja nii edasi ja nii edasi.
TĂ”eliselt lahe asi selle omaduse juures on see, et arvestades polĂŒnoomfunktsiooni astet ja vĂ€hemalt
punkte, saame jĂ€reldada tĂ€iendavaid punkte selle polĂŒnoomfunktsiooni jaoks. TĂ€iendavate punktide ekstrapoleerimist nimetame polĂŒnoominterpoleerimiseks..
Saladuse koostamine.
VÔib-olla olete juba aru saanud, et siia astub mÀngu Shamir'i nutikas skeem. Oletame, et meie saladus
â see on
. Saame selle
punktiks graafikul
ja leiutada polĂŒnoomfunktsiooni astmega
, mis rahuldab seda punkti. Kordan, et
see on meie nĂ”utavate fragmentide lĂ€vi, seega kui seame lĂ€ve kolmeks fragmentideks, peame valima polĂŒnoomi, mille kraad on kaks.
Meie polĂŒnoom on kujul
, kus
ja
â juhuslikult valitud positiivsed tĂ€isarvud. Ehitatakse lihtsalt polĂŒnoom, mille kraad on
, kus vaba koefitsient
 â see on meie saladus
, ja iga jÀrgmise
liikme jaoks on juhuslikult valitud positiivne koefitsient. Kui naasta algse nÀite juurde ja eeldada, et
, siis saame funktsiooni
.
Sellel etapil saame genereerida fragmente, ĂŒhendades
ainulaadsed tÀisarvud
, kus
(sest see on meie saladus). Antud nÀites soovime jagada nelja fragmenti, mille lÀvi on kolm, seega genereerime juhuslikult punktid
ja saadame ĂŒhe punkti igaĂŒhele neljast usaldusvÀÀrsest inimesest, kes on vĂ”tmehoidjad. Ătleme ka inimestele, et
, kuna see loetakse avalikuks informatsiooniks ja on vajalik taastamiseks.
.
Saladuse taastamine
Oleme juba arutanud polĂŒnoomilise interpolatsiooni mĂ”istet ja seda, et see on Shamir'i lĂ€ve skeemi alus.
. Kui kolm neljast usaldusvÀÀrsest isikust soovivad taastada
, peavad nad lihtsalt interpoleerima
oma unikaalsete punktidega. Selleks saavad nad mÀÀrata oma punktid
ja arvutada Lagrange'i interpoleerimispolĂŒnomi, kasutades jĂ€rgmist valemit. Kui programmeerimine on teile arusaadavam kui matemaatika, siis pi â see on pĂ”himĂ”tteliselt operaator for, mis korrutab kĂ”ik tulemused, ja sigma â see on for, mis liidab kĂ”ik kokku.


Koormuse analĂŒĂŒsi korral
Me saame seda jĂ€rgmiselt lahendada ja tagastada meie algse polĂŒnomi:

Kuna me teame, et
, taastamine
toimub lihtsalt:

Kasutades ebaturvalist tÀisarvude aritmeetikat
Kuigi me rakendasime Shamir'i pÔhiideed edukalt
, meil on probleem, millele oleme seni tĂ€helepanu pööranud. Meie polĂŒnoomfunktsioon kasutab ebaturvalist tĂ€isarvude aritmeetikat. Pidage meeles, et iga tĂ€iendava punkti kohta, mille rĂŒndaja meie funktsiooni graafikul saab, jÀÀb vĂ€hem vĂ”imalusi teiste punktide jaoks. Saate seda ise nĂ€ha, kui ehitate graafiku polĂŒnoomfunktsiooni puhul, kasutades tĂ€isarvude aritmeetikat. See on meie vĂ€ljendatud turvalisuse eesmĂ€rgi jaoks vastutustundetu, sest kurjategija ei tohiks mitte midagist teada saada, enne kui tal ei ole vĂ€hemalt
fragmente.
Kuidas demonstreerida, kui nÔrk on tÀisarvude aritmeetika skeem, kaalume stsenaariumi, kus kurjategija sai kaks punkti
ja teab avalikku teavet, et
. Sellest teabest saab ta tuletada
, mille vÀÀrtus on kaks, ja sisestada tuntud vÀÀrtused valemisse
ja
.

SeejÀrel saab kurjategija leida
, arvutades
:

Kuna oleme mÀÀratlenud
nagu juhuslikult valitud positiivsed tÀisarvud, on olemas piiratud hulk vÔimalikke
Selle teabe abil vÔib kurjategija vÀlja selgitada
, kuna kĂ”ik, mis on ĂŒle 5, muudab
negatiivseks. See osutub tÔeks, kuna oleme kindlaks teinud 
SeejÀrel vÔib kurjategija arvutada vÔimalikke vÀÀrtusi
, asendades
ĂŒhes
:

Piiratud valikute hulgaga
saab arusaadavaks, kui lihtne on vÀÀrtusi hankida ja kontrollida
. Siin on vaid viis varianti.
Probleemi lahendamine ebaturvalise tÀisarvuaritmetiaga
Selle haavatavuse kÔrvaldamiseks soovitab Shamir kasutada moodulaarset aritmeetikat, asendades
jÀrgnevaga
, kus
ja
â kĂ”igi prime arvude hulk.
Korraks meenutame, kuidas moodulaarne aritmeetika töötab. Kellade mÔisted on juba tuttavad. Need kasutavad kellasid, mis on
. Kui tunni kĂ€si möödub kaheteistkĂŒmnest, naaseb see ĂŒhenumbrisse. Selle sĂŒsteemi huvitav omadus on see, et lihtsalt kelladele vaatamisega ei saa me selgeks, kui mitu ringi tund kĂ€si on teinud. Kuid kui me teame, et tunni kĂ€si on möödunud 12 neli korda, saab kergesti kindlaks mÀÀrata möödunud tundide arvu lihtsa valemi abil
, kus
 â see on meie jagaja (siin
),
 â see on koefitsient (kui palju kordi jagaja tervikuna lĂ€heb algsesse numbrisse, siin
), and
 â see on jÀÀk, mille tavaliselt annab tagasi mooduli operaator (siin
). Nende vÀÀrtuste tundmine vÔimaldab meil lahendada vÔrrandi
, kuid kui jÀtame koefitsiendi vahele, siis me kunagi ei suuda algset vÀÀrtust taastada.
Saame demonstreerida, kuidas see suurendab meie skeemi turvalisust, rakendades skeemi meie varasemale nÀitele ja kasutades
. Meie uus polĂŒnoomi funktsioon
, ning uued punktid
. NĂŒĂŒd saavad vĂ”tmehoidjad taas kasutada polĂŒnoom interpolatsiooni, et taastada meie funktsioon, kuid seekord peavad liitmise ja korrutamise toimingud olema koos mooduliga vĂ€hendatud
(nt
).
Kasutades seda uut nĂ€idet, oletame, et rĂŒndaja teab kahte uut punkti,
, ning avalik teave
. Seekord jÀreleandja, tuginedes kogu teabele, mis tal on, jÀreldab jÀrgmised funktsioonid, kus
 â kĂ”ik positiivsed tĂ€isarvud, ja
esindab mooduli koefitsiendi
.

NĂŒĂŒd leiab meie rĂŒndaja taas
, arvutades
:

Siis ta ĂŒritab jĂ€lle jĂ€reldada
, asendades
ĂŒhes
:

Seekord on tal tÔsine probleem. Valemilt puuduvad vÀÀrtused
,
ja
. Kuna nende muutuja kombinatsioone on lÔputult, ei saa ta mingit tÀiendavat teavet.
Turvakaalutlused
Shamira sekreetide jagamise skeem pakub teabeooria perspektiivist turvalisust. See tÀhendab, et matemaatika on vastupidav isegi pahatahtlikule isikule, kellel on piiramatu arvutusressurss. Siiski sisaldab skeem endiselt mitmeid tuntud probleeme.
NÀiteks ei loo Shamira skeem kontrollitavaid fragmente, ehkki inimesed vÔivad vabalt esituda vale fragmente ja hÀirida Ôige salajase taastamist. Vaenulik fragmentide hoidja, kellel on piisavalt teavet, vÔib isegi toota teise fragmendi, muutes
oma ÀranÀgemise jÀrgi. See probleem lahendatakse kontrollitavate sekreetide jagamise skeemide abil, nagu Feldmani skeem.
Teine probleem on see, et iga fragmendi pikkus on sama mis vastava salajase pikkus, nii et salajase pikkust on lihtne kindlaks teha. Seda probleemi lahendatakse triviaalsete tÀitmistega salajaste juhuslike numbrite fikseeritud pikkusega.
LĂ”puks on oluline mĂ€rkida, et meie mured seoses turvalisusega vĂ”ivad ulatuda kaugemale skeemist endast. Reaalsetes krĂŒptograafilistes rakendustes eksisteerib sageli oht kĂ”rvalkanalite rĂŒnnakuteks, kus rĂŒndaja ĂŒritab vĂ€lja tĂ”mmata kasulikku teavet, pĂ”hinedes rakenduse tĂ€itmise ajale, vahemĂ€llu salvestamisele, tĂ”rkeidele jne. Kui see tekitab muret, tuleks arenduse kĂ€igus hoolikalt kaaluda kaitsemeetmete, nagu funktsioonide ja pideva tĂ€itmisaja otsing, kasutamist, vĂ€ltida mĂ€lu talletamist ketta ning planeerida mitmeid muid aspekte, mis ĂŒletavad selle artikli ulatust.
Demos
VDS-l on vÔimalik installida: on interaktiivne demo Shamir'i salajaste jagamise skeemist. Demonstreerimine on tehtud raamatukogu baasil , mis on iseenesest populaarse programmi JavaScripti port . Pange tÀhele, et suurte vÀÀrtuste arvutamine
,
ja
vÔib vÔtta aega.
Allikas: habr.com
