Harkitse tilannetta, jossa sinun on turvattava pankkiholvi. Sitä pidetään täysin valloittamattomana ilman avainta, joka annetaan heti ensimmäisenä työpäivänä. Tavoitteesi on säilyttää avain turvallisesti.
Oletetaan, että päätät pitää avaimen aina mukanasi, jolloin voit tarvittaessa käyttää tallennustilaa. Mutta huomaat nopeasti, että tällainen ratkaisu ei skaalaudu hyvin käytännössä, koska fyysistä läsnäoloasi vaaditaan aina kun avaat varaston. Entä sinulle luvattu loma? Lisäksi kysymys on vielä pelottavampi: entä jos hukkaat ainoan avaimesi?
Lomaasi ajatellen päätät tehdä kopion avaimesta ja uskoa sen toiselle työntekijälle. Ymmärrät kuitenkin, että tämäkään ei ole ihanteellinen. Kaksinkertaistamalla avainten määrän kaksinkertaistat myös avainvarkauden todennäköisyyden.
Epätoivoissasi tuhoat kaksoiskappaleen ja päätät jakaa alkuperäisen avaimen kahtia. Nyt luulisi, että kahden luotettavan henkilön, joilla on avaimenpalaset, pitäisi olla fyysisesti paikalla avaimen noutamiseksi ja holvin avaamiseksi. Tämä tarkoittaa, että varkaan on varastettava kaksi kappaletta, mikä on kaksi kertaa vaikeampaa kuin yhden avaimen varastaminen. Ymmärrät kuitenkin pian, että tämä järjestelmä ei ole paljon parempi kuin yksi avain, koska jos joku kadottaa puolet avaimesta, koko avainta ei voida palauttaa.
Ongelma voidaan ratkaista sarjalla lisäavaimia ja lukkoja, mutta tämä lähestymistapa vaatii nopeasti много avaimet ja lukot. Päätät, että ihanteellinen suunnittelu olisi jakaa avain, jotta turvallisuus ei ole täysin yhden henkilön varassa. Päätät myös, että fragmenttien lukumäärälle on oltava jokin kynnys, jotta jos yksi fragmentti katoaa (tai jos henkilö lähtee lomalle), koko avain pysyy toimivana.
Kuinka jakaa salaisuus
Adi Shamir ajatteli tämäntyyppistä avaintenhallintajärjestelmää vuonna 1979, kun hän julkaisi työnsä
Turvallisuuden näkökulmasta tämän järjestelmän tärkeä ominaisuus on, että hyökkääjän ei pitäisi tietää yhtään mitään, ellei hänellä ole vähintään osat. Jopa läsnäolo osat eivät saa antaa mitään tietoa. Kutsumme tätä omaisuutta semanttinen turvallisuus.
Polynomiinterpolointi
Shamirin kynnysjärjestelmä rakennettu konseptin ympärille polynomin interpolaatio. Jos tämä käsite ei ole sinulle tuttu, se on itse asiassa melko yksinkertainen. Itse asiassa, jos olet joskus piirtänyt pisteitä kaavioon ja sitten yhdistänyt ne viivoilla tai käyrillä, olet jo käyttänyt sitä!
Kahden pisteen kautta voit piirtää rajattoman määrän 2-asteisia polynomeja. Valitaksesi niistä ainoan, tarvitset kolmannen pisteen. Kuva:
Tarkastellaan polynomia, jonka aste on yksi, . Jos haluat piirtää tämän funktion kaavioon, kuinka monta pistettä tarvitset? Tiedämme, että tämä on lineaarinen funktio, joka muodostaa suoran, joten se tarvitsee vähintään kaksi pistettä. Tarkastellaan seuraavaksi polynomifunktiota, jolla on aste kaksi, . Tämä on neliöfunktio, joten kaavion piirtämiseen tarvitaan vähintään kolme pistettä. Entä polynomi, jolla on aste kolme? Vähintään neljä pistettä. Ja niin edelleen.
Todella siistiä tässä ominaisuudessa on, että ottaen huomioon polynomifunktion aste ja ainakin pisteet, voimme johtaa lisäpisteitä tälle polynomifunktiolle. Kutsumme näiden lisäpisteiden ekstrapolointia polynomin interpolaatio.
Salaisuuden keksiminen
Olet ehkä jo tajunnut, että tässä Shamirin älykäs suunnitelma tulee peliin. Sanotaanpa salaisuutemme - Onko . Voimme kääntyä kaavion pisteeseen ja keksiä polynomifunktio asteella , joka täyttää tämän seikan. Muistutetaan tästä tulee olemaan vaadittujen fragmenttien kynnys, joten jos asetamme kynnysarvoksi kolme fragmenttia, meidän on valittava polynomifunktio, jolla on aste kaksi.
Polynomillamme on muoto Missä и — satunnaisesti valitut positiiviset kokonaisluvut. Rakennamme vain polynomin asteen kanssa , jossa vapaa kerroin - Tämä on salaisuutemme , ja jokaiselle seuraavalle termeillä on satunnaisesti valittu positiivinen kerroin. Jos palataan alkuperäiseen esimerkkiin ja oletetaan, että , niin saamme funktion .
Tässä vaiheessa voimme luoda fragmentteja yhdistämällä ainutlaatuisia kokonaislukuja Missä (koska se on salaisuutemme). Tässä esimerkissä haluamme jakaa neljä fragmenttia, joiden kynnys on kolme, joten luomme satunnaisesti pisteitä ja lähetä yksi piste jokaiselle neljälle luotetulle henkilölle, avaimen säilyttäjälle. Kerromme siitä myös ihmisille , koska tämä katsotaan julkiseksi tiedoksi ja on välttämätöntä palauttamisen kannalta .
Salaisuuden palauttaminen
Olemme jo keskustelleet polynomin interpolaation käsitteestä ja siitä, kuinka se on Shamirin kynnysjärjestelmän perusta . Kun joku kolmesta neljästä luottamushenkilöstä haluaa palauttaa , niiden tarvitsee vain interpoloida omilla ainutlaatuisilla pisteillään. Tätä varten he voivat määrittää pisteensä ja laske Lagrangen interpolaatiopolynomi seuraavan kaavan avulla. Jos ohjelmointi on sinulle selkeämpää kuin matematiikka, niin pi on pohjimmiltaan operaattori for
, joka kertoo kaikki tulokset, ja sigma on for
, joka lisää kaiken.
At voimme ratkaista sen näin ja palauttaa alkuperäisen polynomifunktiomme:
Koska me tiedämme sen , elpyminen tehty yksinkertaisesti:
Käyttää vaarallista kokonaislukuaritmetiikkaa
Vaikka olemme onnistuneesti soveltaneet Shamirin perusideaa , meille jää ongelma, jonka olemme tähän asti jättäneet huomiotta. Polynomifunktiomme käyttää vaarallista kokonaislukuaritmetiikkaa. Huomaa, että jokaista lisäpistettä kohti, jonka hyökkääjä saa funktiomme kaaviosta, on vähemmän mahdollisuuksia muille pisteille. Voit nähdä tämän omin silmin, kun piirrät kasvavan määrän pisteitä polynomifunktiolle kokonaislukuaritmetiikkaa käyttäen. Tämä on haitallista ilmoittamamme turvallisuustavoitteen suhteen, koska hyökkääjän ei pitäisi tietää mitään, ennen kuin heillä on ainakin fragmentteja.
Osoittaaksesi kuinka heikko kokonaislukuaritmeettinen piiri on, harkitse skenaariota, jossa hyökkääjä sai kaksi pistettä ja tietää siitä julkista tietoa . Näistä tiedoista hän voi päätellä , yhtä suuri kuin kaksi, ja liitä tunnetut arvot kaavaan и .
Hyökkääjä voi sitten löytää , laskenta :
Koska olemme määritelleet satunnaisesti valittuina positiivisina kokonaislukuina mahdollisia on rajoitettu määrä . Näiden tietojen perusteella hyökkääjä voi päätellä , koska kaikki yli 5 riittää negatiivinen. Tämä osoittautuu todeksi, koska olemme päättäneet
Hyökkääjä voi sitten laskea mahdolliset arvot korvaamalla в :
Rajoitetut vaihtoehdot tulee selväksi, kuinka helppoa arvojen valitseminen ja tarkistaminen on . Tässä on vain viisi vaihtoehtoa.
Ongelman ratkaiseminen vaarallisella kokonaislukuaritmetiikalla
Tämän haavoittuvuuden poistamiseksi Shamir ehdottaa modulaarista aritmetiikkaa korvaamalla päälle Missä и — kaikkien alkulukujen joukko.
Muistetaan nopeasti kuinka modulaarinen aritmetiikka toimii. Kello osoittimilla on tuttu käsite. Hän käyttää kelloa . Heti kun tuntiosoitin ylittää kaksitoista, se palaa yhteen. Tämän järjestelmän mielenkiintoinen ominaisuus on se, että pelkällä kelloa katsomalla emme voi päätellä, kuinka monta kierrosta tuntiosoitin on tehnyt. Jos kuitenkin tiedämme, että tuntiosoitin on kulunut 12 neljä kertaa, voimme määrittää kuluneiden tuntien määrän täysin yksinkertaisella kaavalla Missä on jakajamme (tässä ), on kerroin (kuinka monta kertaa jakaja menee alkuperäiseen lukuun ilman jäännöstä, tässä ) ja on loppuosa, joka yleensä palauttaa modulo-operaattorikutsun (tässä ). Kaikkien näiden arvojen tunteminen antaa meille mahdollisuuden ratkaista yhtälön , mutta jos kerroin puuttuu, emme koskaan voi palauttaa alkuperäistä arvoa.
Voimme osoittaa kuinka tämä parantaa järjestelmämme turvallisuutta soveltamalla mallia edelliseen esimerkkiimme ja käyttämällä . Uusi polynomifunktiomme ja uudet kohdat . Nyt avaintenpitäjät voivat jälleen käyttää polynomiinterpolaatiota funktiomme rekonstruoimiseen, vain tällä kertaa yhteen- ja kertolaskuoperaatioiden mukana tulee modulo-pelkistys (esim ).
Oletetaan tätä uutta esimerkkiä käyttäen, että hyökkääjä oppi kaksi näistä uusista kohdista, ja julkista tietoa . Tällä kertaa hyökkääjä, kaikkien hänellä olevien tietojen perusteella, tulostaa seuraavat toiminnot missä on joukko positiivisia kokonaislukuja, ja edustaa moduulikerrointa .
Nyt hyökkääjämme löytää taas , lasketaan :
Sitten hän yrittää uudelleen korvaamalla в :
Tällä kertaa hänellä on vakava ongelma. Kaavasta puuttuu arvoja , и . Koska näiden muuttujien yhdistelmiä on ääretön määrä, hän ei voi saada lisätietoa.
Turvallisuusnäkökohdat
Shamirin salainen jakamisjärjestelmä ehdottaa turvallisuus tietoteorian näkökulmasta. Tämä tarkoittaa, että matematiikka kestää jopa hyökkääjää, jolla on rajoittamaton laskentateho. Piiri sisältää kuitenkin edelleen useita tunnettuja ongelmia.
Esimerkiksi Shamirin järjestelmä ei luo tarkistettavat palaset, eli ihmiset voivat vapaasti esittää väärennettyjä fragmentteja ja häiritä oikean salaisuuden palauttamista. Vihamielinen fragmentinpitäjä, jolla on riittävästi tietoa, voisi jopa tuottaa toisen fragmentin vaihtamalla oman harkintasi mukaan. Tämä ongelma ratkaistaan käyttämällä todennettavissa olevat salaiset jakamisjärjestelmät, kuten Feldmanin järjestelmä.
Toinen ongelma on, että minkä tahansa fragmentin pituus on yhtä suuri kuin vastaavan salaisuuden pituus, joten salaisuuden pituus on helppo määrittää. Tämä ongelma voidaan ratkaista triviaalisesti pehmuste salaisuus mielivaltaisilla numeroilla kiinteään pituuteen saakka.
Lopuksi on tärkeää huomata, että turvallisuushuolemme voivat ulottua itse suunnittelua pidemmälle. Tosimaailman salaussovelluksissa on usein olemassa sivukanavahyökkäysten uhka, jolloin hyökkääjä yrittää poimia hyödyllistä tietoa sovelluksen suoritusajasta, välimuistista, kaatumisista jne. Jos tämä on huolenaihe, kehittämisen aikana tulee harkita huolellisesti suojatoimenpiteiden käyttöä, kuten funktioita ja vakioaikahakuja, muistin tallentamisen levylle estämistä ja monia muita seikkoja, jotka eivät kuulu tämän artikkelin soveltamisalaan.
esittely
Päälle
Lähde: will.com