Informacijos saugumas yra patraukli žinių sritis, apimanti viską nuo teorinio skaičiavimo iki programinės įrangos inžinerijos ir netgi žmogaus klaidų psichologijos.
Kripto dabar yra vienas iš daugelio anoniminių technologijų herojų mūsų kasdieniame gyvenime. Socialinė žiniasklaida, internetinė bankininkystė, karinė žvalgyba ir bet kuri kita su slapta informacija susijusi informacinė sistema labai priklauso nuo kriptografijos. Kriptografija leidžia mums turėti privatumą, kurį kai kurie mano 12-oji žmogaus teisė .
Šis straipsnis supažindins su viešojo rakto kriptosistemų principais ir su jumis „Santana Rocha-Villas Boas“ (SRVB) , kriptosistema, kurią sukūrė straipsnio autorius ir prof. Daniel Santana Rocha. Rašymo metu algoritmo autoriai rengia kampaniją, į kurią įeina finansinis atlygis tiems, kuriems pavyksta nulaužti kodą. Kadangi straipsnis išsamiai aprašys algoritmo funkcionalumą, tai yra geriausia vieta pradėti prizo paiešką. Daugiau informacijos galite rasti SRVB svetainė .
Kriptografija yra bet koks būdas užkirsti kelią pranešimo aiškinamumui, kartu suteikiant galimybę ją interpretuoti perspektyviu būdu, jei tik pateikiama konkreti instrukcija, kuri paprastai yra vadinamasis „raktas“. Nors tai labai platus apibrėžimas, apimantis net keletą pirmųjų metodų, verta paminėti, kad tai neapima visko, kas yra informacijos saugumui.
Tikimasi, kad techninės lenktynės tarp šifravimo metodų ir būdų, kaip juos sugadinti, niekada neturės galutinio nugalėtojo. Be to, kiekviena nauja karta pakelia informacijos saugumo ir kriptanalizės standartus, kurie yra metodų rinkinys sistemingai iššifruoti / nutraukti šifruotus pranešimus, tai yra apeiti saugumą ar šifravimą.
Kad vartotojai galėtų manyti, kad kriptosistema (atsižvelgiant į kriptografijos techniką) yra saugi, ji turi turėti tarptautinės ekspertų bendruomenės pritarimą ir todėl būti viešai žinoma, vadinama Kerckhoffs principas . Tačiau būtent dėl šios sąlygos sistema gali būti tikrinama iš pasaulinės kriptanalizės bendruomenės, kuri bandys rasti būdus, kaip sistemingai nutraukti šifravimą.
Kaip galite padaryti tam tikrą šifravimo procesą pakankamai slaptą, kad jį sugadinti galėtų tik bandyti agentai, tačiau vis tiek būti pakankamai viešais, kad pasaulinė kriptanalizės bendruomenė galėtų patvirtinti jo tvirtumą? Atsakymas yra komponentas, kuris yra pagrindinis kriptologijos elementas: raktas. Kriptosistemos raktas yra šifravimo ar iššifravimo algoritmų arba abiejų parametras. Laikant slaptus parametrus, o ne algoritmų šeimą, galima pasiekti abu prieštaraujančius reikalavimus. Kol parametrų šeima yra pakankamai didelė (galbūt begalinė) ir gali būti įrodyta, kad kiekviena jos sudedamoji dalis pasižymi tinkamomis savybėmis, užpuolikams nebus įmanoma nustatyti parametrus paprasčiausiai patikrinus.
Galiausiai, norint, kad raktas veiktų efektyviai, jį reikia pagaminti lengvai, bet beveik neįmanoma atspėti. Turint šių dienų kompiuterių skaičiavimo galią, kompiuteriui prireiks mažiau laiko nulaužti žmogaus sugeneruotą raktą, nei kada nors reikėtų įsivaizduoti, be to, tokiu būdu generuoti raktus neapsimoka. Dėl to raktus paprastai generuoja algoritmas.
Raktų generavimo algoritmas neturi sukurti nuspėjamų / atkuriamų rezultatų dėl įprasto naudojimo. Kadangi algoritmai atlieka procedūras be jokių intelektualių procesų, kyla klausimas, kaip tai galima padaryti. Atsakymas yra konvertuoti raktų generavimo algoritmus į žemėlapius, kurie daugybę tikrai atsitiktinių bitų paverčia raktais. Iš operacinės sistemos galima gauti tikrai atsitiktinius bitus, kurie juos generuoja iš visatos netikrumo. Kai kurie šaltiniai būtų pelės judėjimas, tinklo paketų delsos ar net speciali aparatūra, priklausomai nuo programos.
Pasiruoškite dar kartą nustebti, nes dabar pristatysime koncepciją, kuri akivaizdžiai prieštarauja ką tik pasakytai: viešasis raktas.
Iki šiol matėme saugaus ryšio sukūrimą po to, kai buvo saugiai apsikeista slaptais parametrais (raktais), tačiau parametrų keitimo viešuoju kanalu problema išlieka. Šiuo metu pristatysime koncepciją, kuri išspręs šiek tiek labiau apčiuopiamą problemą: saugaus kanalo sukūrimas.
Tarkime, Alisa dirba su Bobu, ir jie nori, kad jų sąveika būtų saugi šifruojant. Šifravimo raktus jie gali rasti ir jais pasikeisti perduodami USB atmintinę su savo raktais. Bet ką daryti, jei Alisa ir Bobas yra skirtinguose žemynuose? Kaip sukurti saugų kanalą ten, kur jo nėra?
Raktų siuntimas el. Paštu nebūtų pasirinkimas, nes jo konkurentė Ieva gali perimti mainus ir naudoti savo raktus vėliau perskaityti visus užšifruotus duomenis. Jei jie turėtų kitą skaitmeninį kanalą, kuriuo galėtų perduoti šią neskelbtiną informaciją, jiems visų pirma nereikėtų šifravimo ir todėl raktų. Rakto siuntimas fiziniu paštu taip pat galėtų būti sulaikytas, nes pirmiausia reikia keistis konfidencialia informacija. Atsiųskite vieną nukopijuotas raktas, slepiantis kituose duomenyse tai būtų protinga, bet nenaudinga, nebent siuntėjas yra tikras, kad gavėjas ir tik gavėjas žino apie tokios žinutės egzistavimą ir žino, kaip ją išgauti. Taip atsitinka, kad žinojimas apie pranešimo egzistavimą kartu su aprašymu, kaip raktą išgauti iš duomenų, yra pats rakto tipas, atvedantis mus į pradinį tašką.
Sprendimas yra sukurti kriptosistemą, kuriai šifravimo parametro nepakanka, kad būtų galima tinkamai interpretuoti pradinį pranešimą. [vienas] ir išsaugo jums parametrą, kuris leistų interpretuoti pranešimą. Mes tą parametrą vadiname privačiu raktu. Remiantis privačiu raktu, galima tinkamai sukurti parametrų rinkinį šifravimo įrankiui, nepriversiant tų naujų parametrų atskleisti, kas yra privatus raktas. Tas parametrų rinkinys gali būti viešai naudojamas, nes nėra taip svarbu, kas gali kažką užšifruoti, jei tik vienas asmuo gali jį iššifruoti. Kadangi šis šifravimo įrankio parametrų rinkinys gali būti viešas, jis vadinamas viešuoju raktu.
Kriptografija, kai šifravimo ir iššifravimo raktai skiriasi, o pirmųjų negalima panaudoti išvedant antruosius, vadinama asimetrine kriptografija, tuo tarpu simetriška kriptografija yra tai, ką turime, kai tie raktai yra vienodi arba lengvai vienas iš kito daromi išvados. Alisa siunčia Bobui savo viešąjį raktą, kurį galima naudoti tik šifruojant dalykus, kuriuos iššifruoti gali tik ji (su savo privačiu raktu, kurį ji saugo), ir, atvirkščiai, Bobas siunčia Alisai savo viešąjį raktą, kurį galima naudoti tik šifruojant daiktus kad iššifruoti gali tik jis (naudodamas savo privatųjį raktą, kurį jis taip pat saugo). Bet kaip galite paskelbti šifravimo algoritmo parametrą, iš kurio negalima nustatyti tikslaus atvirkštinio algoritmo?
Atsakymas slypi matematikos srityje, labiau susijusioje su programavimu, skaičiavimo sudėtingumo teorija . Kiekvienas, kuris pakankamai įsigilino į matematikos užduotis, yra girdėjęs apie transformacijas, kurias lengva atlikti vienaip, bet sunku atvirkščiai. Pavyzdžiui, skaičiuojant vadovėlio darinio suradimas paprastai yra paprastas pratimas, atliekant atvirkštinį (pvz., Išsprendžiant bet kurią fizinę dalį ar šiek tiek ne trivialų fizinį vadovėlį). ODE arba PDE , pvz.) reikalingas labiau tiriamas pirmosios hipotezės apie funkcijų šeimas, kurios yra garantuotos (arba bent jau tikėtinos), kad būtų sprendimas (-ai) ir išspręstos atvirkštinės problemos, kad būtų galima rasti šių šeimų sprendimus.
Pavyzdys, kuris iš tikrųjų naudojamas RSA kriptosistema daugina puikius pradus, o ne faktoriuoja gautą produktą, nežinodamas veiksnių. Dauginimas yra nereikšmingas, tačiau faktoringas reikalauja, kad pasirinktumėte atsitiktinai [2] atspėkite pagrindinius veiksnius, kurie turi šimtus skaitmenų. Svarbi operacijos savybė yra būtinybė gerai mastelėti. Pridėjus kelis skaitmenis virš pirminių skaičių RSA, bus gautas raktas, kuriam iššifruoti ir šiek tiek padidėti šifravimo proceso sudėtingumas reikalauja dar tūkstančių operacijų. Paprastai kalbant, pirminių skaičių sandauga naudojama šifravimui, o pirminių veiksnių pora naudojama iššifravimui.
Turėdami visa tai omenyje, pažvelkime į tai, kaip veikia SRVB kriptografinė sistema.
Kaip ir bet kuri kita viešojo rakto kriptosistema, SRVB remiasi sunkumu išspręsti tam tikrą problemą, kurią lengva sukurti. SRVB atveju tai yra Pogrupio sumos problema , kurį galima apibūdinti taip:
Dado el entero $ w $ ir $ v_1, cdot cdot cdot, v_N Z $ encuentra la secuencia $ b_1, cdot cdot cdot, b_N {0,1} $, kad $ sum_ {i = 1} ^ {N} v_i b_i = w $.
Aišku, ši problema gali kilti atsitiktinai pasirinkus N sveikus skaičius, atsitiktinai pasirinkus jų pogrupį ir apibendrinus šį pogrupį, kuris yra trivialus.
Žiaurios jėgos paieškos sudėtingumas būtų $ O (N * 2 ^ N) $, apskaičiuojant kiekvieną $ b $ s verčių derinį. Efektyvesnį požiūrį suteikė Horowitzas ir Sahni 1972 m , kurio sudėtingumas yra $ O (N * 2N / 2). Problema yra bent jau tokia pat sunki, jei pakeisime $ b $ s ir $ w $ į $ k $ - sveikųjų skaičių matmenų vektorius. Tačiau apimtys, kuriose turi būti vykdoma ši sunkesnė problema, taip pat turi turėti izomorfizmas su [žiedu] (https://en.wikipedia.org / wiki / Ring_ (math)), kur atliekama lengvesnė tos pačios problemos versija, kaip pamatysime toliau. Dėl šios priežasties SRVB išnaudoja pogrupio sumos problemą Gauso sveikieji skaičiai , kur $ k = 2 $ ..
Yra specialus atvejis, kai šią problemą lengva apskaičiuoti naudojant godų algoritmą. Jei užsakysime skalės koeficientų seką $ v_1, cdot cdot cdot, v_N $, kurioje kiekvienas eilės skaičius yra didesnis už visų prieš tai buvusių sveikųjų skaičių sumą ($ forall i, sum_ {j = 1}
Čia yra paprastas godaus šio atvejo sprendimo aprašymas:
Jis prasideda nuo $ i = N $, šiuo metu stebimo faktoriaus, ir nuo $ w ’= w $, likusios iš $ w $
Jei dabartinis mastelio koeficientas yra per didelis, kad tilptų į likusią $ w $ dalį, tai reiškia, kad $ v_i> w '$, nustatykite $ b_i = 0 $ ir tęskite kitą žingsnį. Priešingu atveju mes žinome, kad mastelio koeficientas turi būti seka (nes likę veiksniai yra mažesni nei $ v_i $), todėl mes įdėjome $ b_i = 1 $.
$ w ’ Leftarrow w’ - v_i * b_i $, $ i Leftarrow i - 1 $. Si $ i> 0 $, vuelve al paso 2.
Patikrinkite, dabar $ w '== 0 $, kitaip problema sugadinta.
Tai veikia, nes mes žinome, kad visi daugikliai, mažesni už šiuo metu stebimą, negali bendrai padengti tiek (pogrupio) sumos $ w '$, kiek dabartinis daugiklis. Taigi, jei likusi suma yra didesnė už dabartinį koeficientą, mes tikrai žinome, kad visų šių veiksnių kartu nebus galima susumuoti be dabartinio veiksnio pagalbos. Kita vertus, kadangi visi daugikliai yra teigiami, jei dabartinis koeficientas $ v_i $ yra didesnis už likusią sumą $ w '$, pridėjus bet kurį kitą veiksnį, rezultatas dar labiau viršytų $ w' $.
Mes sukursime anotaciją likusiam straipsniui. Mes pasirenkame $ v_1, cdot cdot cdot, v_n $ ir $ w $ kaip veiksnius ir pridėtinės sekos sumą, o $ u_1, cdot cdot cdot, u_n $ ir $ y $ bus viešai prieinami parametrai, kurie pateikiami norint gauti $ b_1, cdot cdot cdot, b_n $.
Pasirinkus seką $ u_1, cdot cdot cdot, u_n $, kad nebūtų labai nuostabu, o skaičius $ y $ yra viešai prieinamas, nėra pakankamai informacijos, kad būtų galima gauti seką $ b_1, cdot cdot cdot, b_n $. Tačiau, jei yra super nuostabi seka $ v_1, cdot cdot cdot, v_n $, kuri galėtų užimti sekos $ u_1, cdot cdot cdot, u_n $ vietą, šią seką būtų galima naudoti norint išspręsti godaus požiūrio problema.
Parodysime, kaip tai veikia toliau.
Į 1978 m., Ralfas Merkle ir Martinas Helmanas , jie sugalvojo išnaudoti tas dvi kuprinių paradigmas ir tiesiškumas modulio operacijos, kad būtų sukurtas ryšys tarp dviejų sekų, aprašytų ankstesniame skyriuje, taip sukuriant viešojo rakto kriptosistemą. Idėja buvo pakeisti lengva kuprinė (tas, kuris susideda iš super didėjančio sveikųjų skaičių vektoriaus) kietajame (tame, kuriame trūksta šios savybės) naudojant linijinę operaciją (modulį) su slaptais operandais. Transformacija susideda iš kiekvieno $ v_i $ padauginimo iš $ theta $ ir likusio šio produkto paėmimo iš $ alfa $, kur $ alpha gt sum_ {i = 1} ^ N v_i $ ir $ gcd ( alpha, theta) = 1 $ (du apribojimai, kurie netrukus bus pagrįsti). Rezultatas, seka $ u_1, ldots, u_N $, nebeauga ir gali būti laikoma a sunki kuprinė .
Atsitiktinis sekos $ u_1, ldots, u_N $ permutavimas bus suteiktas šaliai, norinčiai užšifruoti ir atsiųsti mums pranešimą. Permutacija atliekama taip, kad trečiajai šaliai sunku atspėti, kokia yra pirminė padidinimo seka. Pranešimo bitų blokai naudojami kaip koeficientai $ b_1, ldots, b_N $. Šifravimas atliekamas padauginus raktų seką iš šios koeficientų sekos ir pridedant daugybos rezultatą, kurį turime pažymėti $ ir $. Tik privataus rakto savininkas gali pakeisti $ y $ į atitinkamą $ w $, kuris būtų gautas, jei tie patys $ b_1, ldots, b_N $ blokai būtų padauginti iš paprasti sveikieji skaičiai (seka $ v_1, ldots, v_N $). Tai daroma padauginus $ y $ iš $ theta ^ {- 1} $, atvirkštinis daugiklis iš $ theta $ modulio $ alpha $ (kurio egzistavimas priklauso nuo tos $ gcd ( alpha, theta) = 1 $ sąlygos). Kitaip tariant, $ ( theta * theta ^ {- 1}) bmod alpha = 1 $. Po to apskaičiuojame $ w = (y * theta ^ {- 1}) bmod a $. Priežastis, kodėl tai garantuotai veiks, yra modulio tiesiškumas , tai yra likutinis linijinis derinys yra lygus likusiai linijinei kombinacijai.
Jei nuosekliai taikysime $ u $ apibrėžimą, koeficiento žiedą ir modulio operatoriaus tiesiškumo savybę, matysime atitikimą:
$ begin {align} y & = sum_ {i = 1} ^ N b_iu_i newline & = sum_ {i = 1} ^ N b_i (v_i * theta bmod alpha) newline & = sum_ { i = 1} ^ N b_i * v_i * theta bmod alpha newline & = left [ sum_ {i = 1} ^ N b_i * v_i * theta right] bmod alpha newline & = kairė [ sum_ {i = 1} ^ N b_i * v_i right] * theta bmod alfa newline & = w * theta bmod alfa end {align} $
Ir taip lengva suma $ w $ galima gauti padauginus abi puses iš $ theta ^ {- 1} $ ir imant modulį su $ alpha $. Norėdami tai padaryti, turite žinoti ir $ alpha $, ir $ theta $ (kurie leidžia lengvai apskaičiuoti $ theta ^ {- 1} $), kurie turi būti privatūs kaip privataus rakto dalys.
Vienintelis suvaržymas - $ alpha gt sum_ {i = 1} ^ N v_i $ - nebuvo pagrįstas ir pateikiamas paaiškinimas: antrosios ir trečiosios eilutės lygybę sudaro lygybė tarp atliekų rūšys iš dalinamasis žiedas iš sveikųjų skaičių modulo $ alpha $. Kitaip tariant, tai tik nustato likusių narių lygybę dalijant iš $ alpha $, o tai nėra pakankama narių lygybės sąlyga . Dėl to daugiau nei vienas $ b $ verčių vektorius galėjo būti susietas su vienu $ y $, to galima išvengti apribojant $ w $ bet kokiam $ b $ verčių deriniui, kad jis būtų mažesnis nei $ alfa $.
Kaip ir bet kurio kito kasdienio gyvenimo atvejo, visapusiškai žinoti visų hipotezių yra neįmanoma ir niekada lengva. Todėl mes turime pasikliauti matematine intuicija spręsdami, ar kriptografinė sistema yra saugi naudoti, o tai nesuteikia mums realių garantijų. Praėjus šešeriems metams po jos sukūrimo, MH kriptosistema nutrūko a ataka pateikė A. Šamiras . Buvo dar keli bandymai atgaivinti MH, kurių daugelis taip pat nepavyko.
2016 m., Po kai kurių minčių su šio straipsnio autoriumi apie [3] Įkvėptos kriptosistemos galimybės, Danieliui Santanai Rocha kilo mintis Gauso sveikaisiais skaičiais pakeisti $ theta $ ir $ alpha $. Dėl techninių priežasčių šis požiūris sukelia pasipriešinimą minėtam Šamiro išpuoliui.
Jis taip pat sumanė bitų bloką, susidedantį iš daugelio anksčiau aprašyto tiesinio a derinio žingsnių napa dura . Kiekviename iš jų sekos pabaigoje būtų pridėtas naujas sveikasis skaičius (Gauso), lygus vienetui, didesnis už visų ankstesnių skaičių, tuo tarpu mažiausias skaičius būtų pašalintas.
$ Alpha $, kuris dabar yra Gauso sveikasis skaičius, taikomas kitoks, bet elegantiškai analogiškas apribojimas. Mes reikalaujame $ w leq vert alpha vert ^ 2 $, kur $ w $ vėlgi yra didžiausias tiesinių natūralių sveikųjų skaičių derinys lengvoje kuprinėje. Priežastį labai sunku įforminti, tačiau, laimei, ją galima lengvai atspėti iš elegantiško aprašymo:
Įsivaizduokite kompleksinio skaičiaus plokštumos kvadratinę gardelę, kurios kraštas yra stačiojo trikampio taškas kojos a ir b, lygiagrečios tikrosioms ir įsivaizduojamosioms ašims. Tokios grotelės pavyzdys pateiktas žemiau. Gvajaus sveikieji skaičiai modulo $ alpha = a + bi $ gali būti pavaizduoti taškais, esančiais minėtoje gardelėje. Šiame tinkle yra $ vert alpha vert ^ 2 $ skirtingų taškų. Jei pasirenkame pakankamai didelę $ alpha $, galime pritaikyti visus linijinius lengvos kuprinės derinius. Taigi mes nustatome reikalavimą $ w leftarrow vert alpha vert ^ 2 $, kur w yra [kaip aprašyta].
Tai grafinis izomorfizmo $ f vaizdas: Z / n dešiniarankis Z [i] / ( alpha) $, kur $ n = 13 $ ir $ alpha = a + bi = 3 + 2i $ (atkreipkite dėmesį, kad $ n $ ir $ alpha $ iš tikrųjų tenkina $ n = vert alpha vert ^ 2 = a ^ 2 + b ^ 2 $, kaip reikalaujama). Taškai žymi Gauso sveikuosius skaičius, tai yra kompleksinius skaičius $ a + bi $, kur $ a $ ir $ b $ yra sveiki skaičiai. Kaip įprasta, horizontali ašis rodo tikrąją dalį, o vertikalė - įsivaizduojamą. Todėl taško perkėlimas į dešinę arba į kairę yra lygiavertis +1 ar -1 pridėjimui prie dabartinės jo vertės. Panašiai taško perkėlimas aukštyn arba žemyn prilygsta atitinkamai + i arba -i pridėjimui.
Raudoni taškai atitinka $ 0 bmod ( alfa) $. Be šių, mes taip pat nuspalviname dar 4 taškų poras.
Spalva | Atitinka… mod α |
Oranžinė | 1 USD |
Žalias | $ i $ |
Mėlyna | $ -1-i $ |
Violetinė | $ 1-i $ |
Izomorfizmą $ f $ apibrėžia ciklinės sekos $ elemento $ i $ th transformacija (0,1,2, cdot cdot cdot, 10,11,12,0,1,2, cdot cdot cdot) $ taip pat cikliškos taškų sekos elemento $ i $ th elemente, kuris laikosi šių taisyklių:
Norėdami susieti bent $ Y $ natūralius sveikuosius skaičius, paimkite kvadratą, kurio plotas $ vert alpha vert ^ 2 $ (kur yra $ vert alpha vert = sqrt {a ^ 2 + b ^ 2} $ Pitagoro teorema , matavimas jūsų pusėje) bent jau toks pat aukštas.
Atkreipkite dėmesį, kad kiekvienas „šuolis“ pakeičia eilutės numerį $ r $ į $ r leftarrow (r + b) (mod a + b) $, jei skaičiuojamos eilutės iš viršaus į apačią, ir, lygiaverčiai, į $ r leftarrow ( r + a) (mod a + b) $, jei skaičiuojama iš apačios į viršų. Todėl būtina ir pakankama sąlyga, kad kiekviena eilutė (ir taškas) būtų pereinama tiksliai vieną kartą per kiekvieną ciklą, yra ta, kad šuolių dydis atitiktų eilučių skaičių arba, kitaip tariant, $ gcd (a, a + b) = gcd (b, a + b) = 1 $. Dėl didžiausio bendro daliklio operatoriaus savybių abu yra lygiaverčiai $ gcd (a, b) = 1 $.
Y. S. Villasas Boasas pažymėjo, kad reikia $ a $ ir $ b $ suderinamumo. Norint išsaugoti prieaugį, kiekvienas naujas skaičius, pridėtas prie sekos pabaigos, turi viršyti visų dabartinių skaičių ($ w> sum_ {i = 1} ^ k v_i $). Pastebėjote, kad norint tai pasiekti, jūsų daugybos koeficientai $ b_i $ turi būti bent 1, todėl kiekvieno bito negalima susieti su koeficientais 0 ir 1. Jei koeficientai buvo 0 ir 1, tik sudėtinis blokas skirtas tik vienam patenkintų superpadidėjimą. Dėl šios priežasties 0 ir 1 bitai buvo atitinkamai susieti su dauginimo koeficientais 1 ir 2.
Galiausiai ir ne taip trivialiai: kiekvieno dekodavimo veiksmo metu randamas naujas sveikasis skaičius $ v_1 $ kaip lygties $ b_1 v_1 = v_ {n + 1} - sum_ {i = 2} ^ {n} sprendimas. b_i v_i $, kur visus $ v_i $ ir $ b_i $ žino $ 1
Galutinis techninis sprendimas yra atvejis, kai pranešimo dydis baitais nėra daugiklis iš bloko dydžio. Kitaip tariant, ką daryti su galimais likusiais paskutinio duomenų bloko baitais, kad, gavus duomenų blokus, būtų išsaugoti visi pirminio turinio baitai, bet ne daugiau nei jie? Mes tai išsprendėme pakartodami paskutinį pranešimo baitą vieną kartą. Po šios kopijos seka atsitiktinė seka, kurioje reikalaujama, kad kiekvienas komponentas skirtųsi tik nuo ankstesnio. Todėl, kai gaunami duomenų blokai, paskutinis iš jų arba blogiausiu atveju - prieš paskutinį jis sutrumpinamas paskutinio baito pakartojimo metu. [4]
Dabar mes parodysime SRVB kriptografinės sistemos pavyzdį.
Mes pradedame nuo parametrų:
$ k = 4 USD;
$ m = 4 $;
kuri sukuria $ l = 4 * 4 = 16 $ ilgio bloką ir labai neįtikėtiną natūralių sveikųjų skaičių $ k + 1 = 5 $ seką, kuri valdoma - tai yra, tiesiškai sujungiant kartu su šio tiesinio derinio rezultatu ir sumažinta iki paskutiniųjų k + 1 elementų _— m = 4 kartus;
Paprastumo sumetimais tegul tai yra (neįtikėtinas) $ v_i $ vektorius:
$ (1,2,4,8,16) $
Tiesą sakant, pirmųjų penkių 2 galių seka vien dėl to, kad tai yra nuostabi seka su penkiais elementais ir griežtai mažiausiomis įmanomomis reikšmėmis (taip išvengiama 0 viešajame rakte, kuris trivialiai pasiduos jo kolegos 0 korespondentas)
Kaip jau minėjome anksčiau, $ $ alpha = a + bi $ skaičiai $ a $ ir $ b $ turi būti bendrieji skaičiai, ir pagal naują minėtą apribojimą turime prašyti, kad $ a ^ 2 + b ^ 2 = vert alfa vert ^ 2 geq W $. Greitas skaičiavimas sudaro $ W = 1 590 USD. Atsižvelgiant į tai, kad $ sqrt {1590} simeq 39.8 $, labai patogu pasirinkti $ alpha $ būtų $ alpha = 39 + 40i $, nes jis yra pakankamai didelis, kad tilptų izomorfizmą su sveikųjų skaičių žiedu, turinčiu mažiausiai 1590 komponentų, tuo pat metu tenkinant $ gcd (a, b) = 1 $. Be to, turime pasirinkti $ theta $ taip, kad $ gcd (a, theta) = 1 $ [5] ir, pageidautina, ne per mažai, todėl $ (a_1 * theta) \% alpha neq v_1 * theta $, (taip pat, kad būtų išvengta informacijos pateikimo). $ theta = 60 $ atlieka darbą ir sukuria:
-19-1i, 1 + 38i, 3-3i, 6-6i, 12-12i dolerių [6]
Tada sutepkime rankas. Paimkite pranešimą b
. Pirmiausia susiejame jį su baitų masyvu pagal [ASCII] (https://en.wikipedia.org/wiki/ASCII#8-bit_codes) ir mūsų duomenų blokų sutrumpinimo susitarimą:
Hola ApeeScape!
Kadangi mūsų duomenų blokas yra 16 bitų = 2 baitų ilgio, o pranešimas yra 13 simbolių ilgio, galų gale gauname 7 duomenų blokus po 2 baitus, kur paskutiniame yra dvigubai mažesnis simbolio „!“ Atvaizdavimas. Mes žingsnis po žingsnio užšifruosime pirmąjį bloką. Atkreipkite dėmesį, nes kiekvieno baito bitai imami pagal jų svarbą.
$ m = 01001000 01100101 $
Taigi mes tiesiog kartografavome
„He“ $ Rightarrow (12-12i, 15 + 4i, 49 + 9i, 106-10i, 252-2i) $
Likusi šifruoto pranešimo dalis yra tokia:
„Ll“ $ Rightarrow (12-12i, 21-2i, 61-3i, 185-31i, 367-59i) $
„O“ $ Rightarrow (12-12i, 25 + 33i, 65 + 32i, 111 + 44i, 244 + 124i) $
„Į“ $ Rightarrow (12-12i, 9 + 10i, 46 + 12i, 149 + 5i, 277 + 31i) $
„Pt“ $ Rightarrow (12-12i, 3 + 16i, 46 + 12i, 73 + 23i, 201 + 49i) $
„Al“ $ Rightarrow (12-12i, 4 + 54i, 44 + 53i, 117 + 193i, 231 + 389i) $
„!!“ „Rightarrow“ (12–12i, 4 + 54i, 32 + 65i, 63 + 92i, 121 + 247i) $
Iššifravimui turime $ theta ^ {- 1} = 60 ^ {- 1} = 27 + i $:
$ ($ ”He” $ Rightarrow) $ $ (12-12i, 15 + 4i, 49 + 9i, 106-10i, 252-2i) * theta ^ {- 1} \% alpha = (16,47 , 93 223 527) $
Dabar ateina godus algoritmas:
Pirma, mes atėmėme kiekvieną veiksnį, padaugintą iš vieno, nes yra žinoma, kad jie bent kartą prisidėjo prie paskutinio, o tai lėmė:
$ T kairysis (527-233-93-47-16) = 148 $
$ (T geq 223) = (148 geq 223) = klaidinga Dešiniarankė b_1 = 0; T kairė (T - 0 * 223) = 148 $
$ (T geq 93) = (148 geq 93) = true Dešiniarankis b_2 = 1; T kairė (T - 1 * 93) = 55 $
$ (T geq 47) = 55 geq 47) = true Dešinysis rodyklė b_3 = 1; T kairysis (T - 1 * 47) = 8 $
$ (T geq 16) = 8 geq 16) = klaidinga Dešiniarankė b_4 = 0; T kairysis rodmuo (T - 0 * 16) = 8 $
Rezultatas: 0110;
Likutis: 8 (pridėtas prie sekos pradžios kaip naujas žemiausias elementas);
Pašalinkite 527 nuo dabartinės sekos pabaigos;
$ T kairysis rodiklis (233-93-47-16-8) = 59 $
$ (T geq 93) = (59 geq 93) = klaidinga Dešiniarankė b_1 = 0; T kairė (T - 0 * 93) = 59 $
$ (T geq 47) = (59 geq 47) = true dešiniarankis b_2 = 1; T kairė (T - 1 * 47) = 12 $
$ (T geq 16) = (12 geq 16) = klaidingas Dešinysis rodyklė b_3 = 0; T kairė (T - 0 8 16) = 12 $
$ (T geq 8) = (12 geq 8) = true dešiniarankis b_4 = 1; T kairė (T - 0 * 12) = 4 $
Rezultatas: 0101;
Likęs: 4 (pridėtas prie sekos pradžios kaip naujas žemiausias elementas);
Palikite 233 nuo dabartinės sekos pabaigos;
$ T kairysis rodiklis (93 - 47 - 16 - 8 - 4) = 18 $
$ (T geq 47) = (18 geq 47) = klaidinga Dešiniarankė b_1 = 0; T kairė (T - 0 * 47) = 18 $
$ (T geq 16) = (18 geq 16) = true dešiniarankis b_2 = 1; T kairysis rodmuo (T - 1 * 16) = 2 $
$ (T geq 8) = (2 geq 8) = klaidingas Dešinysis rodyklė b_3 = 0; T kairė (T - 0 * 8) = 2 $
$ (T geq 4) = (2 geq 4) = klaidinga Dešiniarankė b_4 = 0; T kairė (T - 0 * 4) = 2 $
Rezultatas: 0100;
Likutis: 2 (pridėtas prie sekos pradžios kaip naujas žemiausias elementas);
Nuleiskite 93 nuo dabartinės sekos pabaigos;
$ T kairysis rodyklė (47-16-8-4-2) = 17 $
$ (T geq 16) = (17 geq 16) = true Dešiniarankis b_1 = 1; T kairysis rodmuo (T - 1 * 16) = 1 $
$ (T geq 8) = (1 geq 8) = klaidinga Dešiniarankė b_2 = 0; T kairė rodyklė (T - 0 * 8) = 1 $
$ (T geq 4) = (1 geq 4) = klaidinga Dešiniarankė b_3 = 0; T kairė (T - 0 * 4) = 1 $
$ (T geq 2) = (1 geq 4) = klaidinga Dešiniarankė b_4 = 0; T kairė (T - 0 * 2) = 1 $
Rezultatas: 1000;
Poilsis: 1 (pridėtas prie sekos pradžios kaip naujas žemiausias elementas);
Ištrinkite 47 iš dabartinės sekos pabaigos;
Dėl to mes gavome duomenų bloką: „01001000 01100101“, kuriame yra pirmieji du mūsų pranešimo simboliai „He“. Maža to, mes taip pat sėkmingai gavome savo nuostabaus privačiojo rakto $ (1,2,4,8,16) $ seką.
Kiti duomenų blokų žemėlapiai eina tuo pačiu keliu.
SRVB yra:
Visiškai laisvas ir viešas;
Daug paprasčiau ir lengviau suprasti bei įgyvendinti nei ETC [7] ;
Gausu raktų ir todėl praktiškai nekainuoja, priešingai, pavyzdžiui, RSA , kuris yra pagrįstas pirminiais skaičiais, kurie brangūs .
Dabar galime apibendrinti labiausiai tikėtinus pažeidžiamumus. Kadangi SRVB yra kilęs iš MH, lengva įtarti, kad jis būtų pažeidžiamas dėl [Shamir atakos] apibendrinimo (https://en.wikipedia.org/wiki/Merkle-Hellman_knapsack_cryptosystem#cite_note-2) arba kai kuriems Autorius turėjo pagrindo manyti, kad taip nebus, jis dar turi būti patvirtintas (o tai labai būdinga kalbant apie kriptosistemas).
Rocha atkreipė dėmesį į kai kuriuos naudojamų dalinamųjų žiedų apibendrinimus, kurie gali padidinti kriptanalizės sudėtingumą. Mes taip pat ištirsime šias galimybes.
Taip atsitinka, kad kuriant ir dokumentuojant SRVB, Villas Boas pasiūlė dar vieną būdą patobulinti viešojo rakto kuprinės kriptosistemos koncepciją, kuri nebus išsamiai paaiškinta šiame dokumente, kad šis straipsnis nebūtų per ilgas. ir varginantis, bet štai su juo šepetėlis. Jei negalite to išsiaiškinti, nesijaudinkite, tiesiog sekite mūsų kitą straipsnio skelbimą, kuriame mes išsamiau aptarsime išsamią informaciją: žr. $ N ir $ pogrupio, tarkime, $ N $ žiedo elementai $ u_i $ (kurie izomorfiškai atitinka super didėjančios sekos teigiamus skaičius $ v_i $, kaip ir anksčiau), kaip šių $ u_i $ eilučių vektoriaus padauginimas iš stulpelio vektoriaus $ B $ (dvejetainiui ) nulių ir vienetų [8] .
$ y = sum_ {i = 1} ^ n u_i b_i = (u_1, cdot cdot cdot, u_n) ^ T cdot (b_1, cdot cdot cdot, b_n) $ = UB,
kur $ b_i {0,1} $
Dabar įsivaizduokite, kad vietoj šio $ u_i $ vektoriaus kairėje matrica V yra $ n $, didesnė už $ N $ (su $ n
P = RV
Idėja yra ta, kad Bobas naudoja P kaip savo naują viešąjį raktą. Dėl R atsitiktinumo vektorius
$ Y = PB = RV B = RW $
turi informaciją $ w $, kurią triukšmas užgožia kitose V. eilutėse. Bobas taip pat iš anksto apskaičiuoja ir saugo tenkinantį eilutės vektorių S:
$ R ^ T S ^ T = e_1 $
Kai Alisa siunčia Y Bobui, jis randa SY, nes:
$ SY = S (PB) = S ((RV) B) = SRVB = {e_1} ^ T R ^ {- 1} ((RV) B) = $
(kol kas tik apibrėžimai)
$ {e_1} ^ T (V B) = {e_1} ^ T W = w $
(Dabar, išnaudojant asociatyvumas atšaukti Rs)
ir tada tęskite kaip anksčiau, norėdami išgauti $ b_i $ vektorių iš $ w $ naudodamiesi godžiu algoritmu.
Taigi, tiesiu žodžiu, tiesinis algebrinis užtemimas išnaudoja matricos daugybos asociatyvumą (tai, kad galėtume išplėsti terminus ir tada jų komponentus valdyti nauja tvarka, jei tik sekoje laikome visų operandų seką). „Linijiškai“ sumaišykite ir filtruokite (atitinkamai šifruodami ir iššifruodami) triukšmą iki / nuo $ w $. Ribojančiu atveju $ n = 1 $, sistema elegantiškai grįžta prie originalo pagal Rocha požiūrį.
Kaip paaiškinta pirmiau, remiantis Kerckhoffo principu, patirtis rodo, kad viešai žinomos nenutrūkstamos kriptosistemos senovė yra pagrindinis tos pačios patikimumo šaltinis, daug daugiau nei bet kokia pačių autorių teorinė argumentacija, išskyrus bet kurį kitą dalyką, nes algoritmų efektyvumo įrodymų paprastai nėra.
Ir čia mes turime puikią galimybę praktiškai pritaikyti šias koncepcijas, kad laimėtume puikų prizą: žinodami šį faktą, mes paleidome minėta kampanija , kuris iš esmės yra sutelktinis finansavimas. už prizą, kuris automatiškai skiriamas pirmajam, kuris sugadino žinutę. Pinigai bus konvertuoti į tam tikros piniginės bitkoinus, kurių privatus raktas bus užšifruotas ir paskelbtas SRVB, kad kiekvienas, kuris gali jį iššifruoti, galėtų paprasčiausiai paimti pinigus anonimiškai, nekeliant klausimų.
Šis konkretus straipsnis ir visas SRVB Crypto projektas apskritai sulaukė didelės pagalbos iš prof. Charlesas F. de Barrosas , [Federalinio San Joo Del Rei universiteto] docentas (http://www.ufsj.edu.br/). Prof. Barrosas pateikė techninę pačios SRVB kriptosistemos apžvalgą. Aš tikėjau, kad būtina pateikti, kol išdrįsau publikuoti, ir kad man tikrai prireiks daug daugiau laiko, kai tai darau savarankiškai.
Be to, norėčiau padėkoti mokytojui Adnanas Ademovičius už nepaprastai įžvalgų, dėmesingą ir kantrų darbą kaip šio leidinio redaktorius. Straipsnis.
Žodynėlis
[vienas] Atkreipkite dėmesį, kad frazės čia iššifruoti arba iššifruoti netaikoma, nes kol dar nėra tiksliai apibrėžta tam tikra kriptosistema (su visais jos komponentais, įskaitant raktus), negalima priskirti tam tikro pirminio šifravimo pranešimo aiškinimo būdo kaip tyčinio ryšio (iššifravimo) ar atakos (iššifruoto).
[2] Nors yra būdų, kaip pagerinti šį būrimo darbą, vis tiek daug sunkiau atrasti nei padauginti.
[3] Pirmasis įkvėpimas buvo pažvelgti į tau spėjimo medis , begalinis medis, įsišaknijęs skaičiumi 1, kurio kiti mazgai susideda iš sveikųjų skaičių, kurie lemia dvejetainę susiejimo, atimimo ar dauginimo operaciją tarp ankstesnių mazgų, galbūt mazgas, veikiantis pats. Teorijos tikslas yra susijęs su šio medžio gyliu, kuriame kiekvienas sveikasis skaičius pasirodo pirmą kartą. Akivaizdu, kad sunku rasti daugybę žemesnių šakų (net jei mes atsipalaiduojame nuo būtinybės), tačiau nedelsiant reikia patikrinti, ar duota operacijų seka iš tikrųjų duoda duotą rezultatą.
[4] Tai tikrai nėra pats natūraliausias būdas, tačiau pasirinkus šį metodą įsitikinama, kad šis baitų užpildas (vadinamas įdaras ) ...
Jei būtų žinoma, kad paskutiniai kiekvieno pranešimo blokai yra sistemingai šališki paskirstyme, kuris toli gražu nėra vienodas, užpuolikas galėtų pasinaudoti šiuo faktu atlikdamas statistinę kriptanalizę, nes bet kuris pateiktas pranešimų pavyzdys būtų statistiškai reprezentatyvesnis nei priešingai. Kitaip tariant, paskutiniai blokai yra statistiškai mažiau įvairūs, jie tampa silpniausia pranešimo grandimi.
[5] Nesuklyskite: šis didžiausias bendras daliklis yra Gauso, o aukščiau esantis yra tikras.
[6] ... Kuris nėra tobulas, nes lengvai atskleidžia faktą, kad trys paskutiniai komponentai yra proporcingi 1, 2 ir 4. Tačiau vėlgi, siekdami paprastumo, mes nepaisysime šios detalės.
[7] ... kuri yra tokia sudėtinga, kad yra keletas žinomi atvejai, kai nepavyksta įgyvendinti ir prižiūrėti juo pagrįstų protokolų .
[8] Čia mes nesinaudosime Rocha požiūriu į daugelio tiesinių derinių bloką, kuris taip pat leidžia mums atsitiktinai perverti bortą, kad jie taptų dar tamsesni.
[9] Nors ir ne visai atsitiktinai. Jo perkėlimas turi apimti vektoriaus $ e_1 = (1,0,…, 0) $ sukurtą erdvę.