Shamir's Secret dalijimosi schema

Apsvarstykite scenarijų, kai jums reikia apsaugoti banko saugyklą. Jis laikomas visiškai neįveikiamu be rakto, kuris jums įteikiamas pirmąją darbo dieną. Jūsų tikslas yra saugiai laikyti raktą.

Tarkime, kad nusprendėte visada laikyti raktą su savimi ir prireikus suteikti prieigą prie saugyklos. Tačiau greitai suprasite, kad toks sprendimas praktiškai nepasiteisina, nes kiekvieną kartą atidarius saugyklą reikalingas jūsų fizinis buvimas. O atostogos, kurios jums buvo pažadėtos? Be to, dar labiau baugina klausimas: o jei pametėte vienintelį raktą?

Turėdami omenyje savo atostogas, nusprendžiate pasidaryti rakto kopiją ir patikėti kitam darbuotojui. Tačiau jūs suprantate, kad tai taip pat nėra idealu. Padvigubinę raktų skaičių, taip pat padvigubinate rakto vagystės tikimybę.

Iš nevilties sunaikinate dublikatą ir nusprendžiate padalyti pradinį raktą per pusę. Dabar manote, kad du patikimi žmonės, turintys rakto fragmentus, turėtų būti fiziškai, kad paimtų raktą ir atidarytų saugyklą. Tai reiškia, kad vagis turi pavogti du gabalus, o tai yra dvigubai sunkiau nei pavogti vieną raktą. Tačiau greitai supranti, kad ši schema nėra daug geresnė už vieną raktą, nes jei kas nors pameta pusę rakto, viso rakto atkurti nepavyks.

Problema gali būti išspręsta naudojant daugybę papildomų raktų ir spynų, tačiau šis metodas greitai pareikalaus много raktai ir spynos. Jūs nusprendžiate, kad idealus dizainas būtų dalintis raktu, kad saugumas nepasikliautų tik vienu asmeniu. Taip pat darote išvadą, kad turi būti tam tikras fragmentų skaičiaus slenkstis, kad pametus vieną fragmentą (ar žmogui išvykus atostogų), visas raktas išliktų funkcionalus.

Kaip pasidalinti paslaptimi

Apie tokio tipo raktų valdymo schemą galvojo Adi Shamiras 1979 m., kai paskelbė savo darbą „Kaip pasidalinti paslaptimi“. Straipsnyje trumpai paaiškinama vadinamoji Shamir's Secret dalijimosi schema slenksčio schema, leidžianti efektyviai padalinti slaptą reikšmę (pvz., kriptografinį raktą) į Shamir's Secret dalijimosi schema dalys. Tada, kada ir tik tada, bent jau Shamir's Secret dalijimosi schemaShamir's Secret dalijimosi schema dalys yra surinktos, nesunkiai atkursite paslaptį Shamir's Secret dalijimosi schema.

Saugumo požiūriu svarbi šios schemos savybė yra ta, kad užpuolikas neturėtų žinoti absoliučiai nieko, nebent turi bent Shamir's Secret dalijimosi schema dalys. Netgi buvimas Shamir's Secret dalijimosi schema dalys neturi pateikti jokios informacijos. Mes tai vadiname nuosavybe semantinis saugumas.

Polinominė interpoliacija

Šamiro slenksčio schema Shamir's Secret dalijimosi schema sukurta remiantis koncepcija daugianario interpoliacija. Jei nesate susipažinę su šia sąvoka, tai iš tikrųjų gana paprasta. Tiesą sakant, jei kada nors nubraižėte taškus grafike ir sujungėte juos linijomis ar kreivėmis, tai jau naudojote!

Shamir's Secret dalijimosi schema
Per du taškus galima nubrėžti neribotą skaičių 2 laipsnio daugianario. Norint pasirinkti vienintelį iš jų, reikia trečiojo taško. Iliustracija: Vikipedija

Apsvarstykite daugianarį su vienu laipsniu, Shamir's Secret dalijimosi schema. Jei norite pavaizduoti šią funkciją grafike, kiek taškų jums reikia? Na, mes žinome, kad tai yra tiesinė funkcija, kuri sudaro liniją, todėl jai reikia bent dviejų taškų. Tada apsvarstykite daugianario funkciją su antrojo laipsnio, Shamir's Secret dalijimosi schema. Tai kvadratinė funkcija, todėl norint nubraižyti grafiką reikia bent trijų taškų. Kaip apie daugianarį su trečiuoju laipsniu? Bent keturi taškai. Ir taip toliau.

Tikrai šaunus šios savybės dalykas yra tas, kad atsižvelgiant į daugianario funkcijos laipsnį ir bent jau Shamir's Secret dalijimosi schema taškų, šiai daugianario funkcijai galime gauti papildomų taškų. Šių papildomų taškų ekstrapoliacija vadiname daugianario interpoliacija.

Paslapties kūrimas

Galbūt jau supratote, kad čia pasirodo protinga Šamiro schema. Tarkime, mūsų paslaptis Shamir's Secret dalijimosi schema - yra Shamir's Secret dalijimosi schema. Galime pasukti Shamir's Secret dalijimosi schema iki taško grafike Shamir's Secret dalijimosi schema ir sugalvoti daugianario funkciją su laipsniu Shamir's Secret dalijimosi schema, kuris atitinka šį punktą. Prisiminkime tai Shamir's Secret dalijimosi schema bus mūsų reikalingų fragmentų slenkstis, taigi, jei nustatysime slenkstį į tris fragmentus, turime pasirinkti daugianario funkciją, kurios laipsnis yra antras.

Mūsų daugianario forma bus tokia Shamir's Secret dalijimosi schemaKur Shamir's Secret dalijimosi schema и Shamir's Secret dalijimosi schema — atsitiktinai atrinkti sveikieji skaičiai. Mes tik sudarome daugianarį su laipsniu Shamir's Secret dalijimosi schema, kur laisvasis koeficientas Shamir's Secret dalijimosi schema – Tai mūsų paslaptis Shamir's Secret dalijimosi schema, ir kiekvienam paskesniam Shamir's Secret dalijimosi schema yra atsitiktinai parinktas teigiamas koeficientas. Jei grįšime prie pradinio pavyzdžio ir manysime, kad Shamir's Secret dalijimosi schema, tada gauname funkciją Shamir's Secret dalijimosi schema.

Šiuo metu sujungdami galime generuoti fragmentus Shamir's Secret dalijimosi schema unikalūs sveikieji skaičiai Shamir's Secret dalijimosi schemaKur Shamir's Secret dalijimosi schema (nes tai mūsų paslaptis). Šiame pavyzdyje norime paskirstyti keturis fragmentus, kurių slenkstis yra trys, todėl atsitiktinai generuojame taškus Shamir's Secret dalijimosi schema ir nusiųskite po vieną tašką kiekvienam iš keturių patikimų žmonių – rakto saugotojų. Taip pat pranešame žmonėms apie tai Shamir's Secret dalijimosi schema, nes tai laikoma vieša informacija ir būtina norint susigrąžinti Shamir's Secret dalijimosi schema.

Paslapties atgavimas

Mes jau aptarėme daugianario interpoliacijos koncepciją ir kaip ji yra Shamiro slenksčio schemos pagrindas. Shamir's Secret dalijimosi schema. Kai kurie trys iš keturių patikėtinių nori atkurti Shamir's Secret dalijimosi schema, jiems tereikia interpoliuoti Shamir's Secret dalijimosi schema su savo unikaliais taškais. Norėdami tai padaryti, jie gali nustatyti savo taškus Shamir's Secret dalijimosi schema ir apskaičiuokite Lagranžo interpoliacijos polinomą naudodami šią formulę. Jei programavimas jums aiškesnis nei matematika, tada pi iš esmės yra operatorius for, kuris padaugina visus rezultatus, o sigma yra for, kuris viską papildo.

Shamir's Secret dalijimosi schema

Shamir's Secret dalijimosi schema

prie Shamir's Secret dalijimosi schema galime tai išspręsti taip ir grąžinti pradinę daugianario funkciją:

Shamir's Secret dalijimosi schema

Kadangi mes tai žinome Shamir's Secret dalijimosi schema, atsigavimas Shamir's Secret dalijimosi schema padaryta paprastai:

Shamir's Secret dalijimosi schema

Naudojama nesaugi sveikųjų skaičių aritmetika

Nors mes sėkmingai pritaikėme pagrindinę Šamiro idėją Shamir's Secret dalijimosi schema, likome su problema, į kurią iki šiol nepaisėme. Mūsų daugianario funkcija naudoja nesaugią sveikųjų skaičių aritmetiką. Atminkite, kad už kiekvieną papildomą tašką, kurį užpuolikas gauna mūsų funkcijos grafike, yra mažiau galimybių kitiems taškams. Tai galite pamatyti savo akimis, kai brėžiate vis didesnį daugianario funkcijos taškų skaičių naudodami sveikųjų skaičių aritmetiką. Tai prieštarauja mūsų nurodytam saugumo tikslui, nes užpuolikas neturėtų žinoti visiškai nieko, kol neturi Shamir's Secret dalijimosi schema fragmentai.

Norėdami parodyti, kokia silpna yra sveikųjų skaičių aritmetinė grandinė, apsvarstykite scenarijų, kai užpuolikas gavo du taškus Shamir's Secret dalijimosi schema ir žino viešą informaciją, kad Shamir's Secret dalijimosi schema. Iš šios informacijos jis gali nuspręsti Shamir's Secret dalijimosi schema, lygus dviem, ir įkiškite žinomas reikšmes į formulę Shamir's Secret dalijimosi schema и Shamir's Secret dalijimosi schema.

Shamir's Secret dalijimosi schema

Tada užpuolikas gali rasti Shamir's Secret dalijimosi schema, skaičiuojant Shamir's Secret dalijimosi schema:

Shamir's Secret dalijimosi schema

Kadangi mes apibrėžėme Shamir's Secret dalijimosi schema kaip atsitiktinai atrinkti teigiami sveikieji skaičiai, galimų yra ribotas skaičius Shamir's Secret dalijimosi schema. Naudodamasis šia informacija, užpuolikas gali padaryti išvadą Shamir's Secret dalijimosi schema, nes tiks bet kas didesnis nei 5 Shamir's Secret dalijimosi schema neigiamas. Pasirodo, kad tai tiesa, nes mes nusprendėme Shamir's Secret dalijimosi schema

Tada užpuolikas gali apskaičiuoti galimas reikšmes Shamir's Secret dalijimosi schema, pakeičiant Shamir's Secret dalijimosi schema в Shamir's Secret dalijimosi schema:

Shamir's Secret dalijimosi schema

Su ribotomis galimybėmis Shamir's Secret dalijimosi schema tampa aišku, kaip lengva pasirinkti ir patikrinti reikšmes Shamir's Secret dalijimosi schema. Čia yra tik penki variantai.

Problemos sprendimas naudojant nesaugią sveikųjų skaičių aritmetiką

Norėdami pašalinti šį pažeidžiamumą, Shamiras siūlo naudoti modulinę aritmetiką, pakeisti Shamir's Secret dalijimosi schema apie Shamir's Secret dalijimosi schemaKur Shamir's Secret dalijimosi schema и Shamir's Secret dalijimosi schema — visų pirminių skaičių aibė.

Greitai prisiminkime, kaip veikia modulinė aritmetika. Laikrodis su rodyklėmis yra pažįstama sąvoka. Ji naudoja laikrodį, kuris yra Shamir's Secret dalijimosi schema. Kai tik valandos rodyklė pasiekia dvylika, ji grįžta į vieną. Įdomi šios sistemos savybė yra ta, kad vien pažvelgę ​​į laikrodį negalime nustatyti, kiek apsisukimų padarė valandos rodyklė. Tačiau jei žinome, kad valandų rodyklė praėjo 12 keturis kartus, galime visiškai nustatyti prabėgusių valandų skaičių naudodami paprastą formulę Shamir's Secret dalijimosi schemaKur Shamir's Secret dalijimosi schema yra mūsų daliklis (čia Shamir's Secret dalijimosi schema), Shamir's Secret dalijimosi schema yra koeficientas (kiek kartų daliklis patenka į pradinį skaičių be liekanos, čia Shamir's Secret dalijimosi schema), ir Shamir's Secret dalijimosi schema yra likusioji dalis, kuri paprastai grąžina modulo operatoriaus skambutį (čia Shamir's Secret dalijimosi schema). Žinodami visas šias vertes, galime išspręsti lygtį Shamir's Secret dalijimosi schema, bet jei praleisime koeficientą, niekada negalėsime atkurti pradinės vertės.

Galime parodyti, kaip tai pagerina mūsų schemos saugumą, pritaikydami schemą ankstesniame pavyzdyje ir naudodami Shamir's Secret dalijimosi schema. Mūsų nauja daugianario funkcija Shamir's Secret dalijimosi schema, ir nauji taškai Shamir's Secret dalijimosi schema. Dabar raktų turėtojai vėl gali naudoti daugianario interpoliaciją, kad atkurtų mūsų funkciją, tik šį kartą sudėjimo ir daugybos operacijas turi lydėti modulio redukcija Shamir's Secret dalijimosi schema (pvz Shamir's Secret dalijimosi schema).

Naudodami šį naują pavyzdį, tarkime, kad užpuolikas sužinojo du iš šių naujų taškų, Shamir's Secret dalijimosi schema, ir vieša informacija Shamir's Secret dalijimosi schema. Šį kartą užpuolikas, remdamasis visa turima informacija, išveda šias funkcijas, kur Shamir's Secret dalijimosi schema yra visų teigiamų sveikųjų skaičių aibė ir Shamir's Secret dalijimosi schema reiškia modulio koeficientą Shamir's Secret dalijimosi schema.

Shamir's Secret dalijimosi schema

Dabar mūsų užpuolikas vėl randa Shamir's Secret dalijimosi schema, skaičiuojant Shamir's Secret dalijimosi schema:

Shamir's Secret dalijimosi schema

Tada jis bando dar kartą Shamir's Secret dalijimosi schema, pakeičiant Shamir's Secret dalijimosi schema в Shamir's Secret dalijimosi schema:

Shamir's Secret dalijimosi schema

Šį kartą jis turi rimtą problemą. Formulės trūksta verčių Shamir's Secret dalijimosi schema, Shamir's Secret dalijimosi schema и Shamir's Secret dalijimosi schema. Kadangi yra begalinis šių kintamųjų derinių skaičius, jis negali gauti jokios papildomos informacijos.

Saugumo svarstymai

Šamiro slapto dalijimosi schema rodo saugumas informacijos teorijos požiūriu. Tai reiškia, kad matematika yra atspari net užpuolikui, turinčiam neribotą skaičiavimo galią. Tačiau grandinėje vis dar yra keletas žinomų problemų.

Pavyzdžiui, Šamiro schema nesukuria fragmentai, kuriuos reikia patikrintity žmonės gali laisvai pateikti netikrus fragmentus ir trukdyti atkurti teisingą paslaptį. Priešiškas fragmentų saugotojas, turintis pakankamai informacijos, pakeisdamas netgi galėtų sukurti kitą fragmentą Shamir's Secret dalijimosi schema savo nuožiūra. Ši problema išspręsta naudojant patikrinamos paslapties dalijimosi schemos, pavyzdžiui, Feldmano schema.

Kita problema yra ta, kad bet kurio fragmento ilgis yra lygus atitinkamos paslapties ilgiui, todėl paslapties ilgį nesunku nustatyti. Šią problemą galima išspręsti trivialiu būdu kamšalas slaptas su savavališkais skaičiais iki fiksuoto ilgio.

Galiausiai svarbu pažymėti, kad mūsų saugumo problemos gali apimti ne tik patį dizainą. Realioms kriptografinėms programoms dažnai kyla šoninių kanalų atakų grėsmė, kai užpuolikas bando išgauti naudingą informaciją iš programos vykdymo laiko, talpyklos, gedimų ir kt. Jei tai kelia susirūpinimą, kuriant reikia atidžiai apsvarstyti, ar naudoti apsaugos priemones, pvz., funkcijas ir nuolatinio laiko paieškas, neleisti atminties įrašyti į diską ir daugybę kitų svarstymų, kurie nepatenka į šio straipsnio taikymo sritį.

Demo

Apie šiuo puslapiu Yra interaktyvus Shamiro slapto dalijimosi schemos demonstravimas. Demonstracija pagal biblioteką ssss-js, kuris pats yra populiarios programos „JavaScript“ prievadas ssss. Atkreipkite dėmesį, kad skaičiuojant dideles reikšmes Shamir's Secret dalijimosi schema, Shamir's Secret dalijimosi schema и Shamir's Secret dalijimosi schema gali užtrukti šiek tiek laiko.

Šaltinis: www.habr.com

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster