Informasjonssikkerhet er et fascinerende kunnskapsfelt som kan involvere alt fra teoretisk databehandling til programvareteknikk og til og med å se på psykologien til menneskelige feil.
Crypto er nå en av de mange anonyme teknologiske heltene i vårt daglige liv. Sosiale medier, nettbank, militær etterretning og ethvert annet informasjonssystem som håndterer sensitiv informasjon er sterkt avhengig av kryptografi. Kryptografi tillater oss å ha personvern, som noen vurderer den 12. menneskerettigheten .
Denne artikkelen vil gi deg en introduksjon til prinsippene bak offentlige nøkkelkryptosystemer og introdusere deg for Santana Rocha-Villas Boas (SRVB) , et kryptosystem utviklet av forfatteren av artikkelen og prof. Daniel Santana Rocha. I skrivende stund forbereder forfatterne av algoritmen en kampanje som inkluderer en økonomisk belønning for alle som klarer å knekke koden. Siden artikkelen vil dekke algoritmens funksjonalitet i detalj, er dette det beste stedet å starte søket etter prisen. Mer informasjon er tilgjengelig i SRVB-side .
Kryptografi er en hvilken som helst metode for å hindre tolkbarheten av et budskap, samtidig som det tillates en måte å tolke det på en levedyktig måte så lenge en spesifikk instruksjon er gitt, som vanligvis er den såkalte 'nøkkelen'. Selv om dette er en veldig bred definisjon som inkluderer selv de første teknikkene, er det verdt å nevne at dette ikke dekker alt som er til informasjonssikkerhet.
Det er håpet at teknologiløpet mellom krypteringsmetoder og måter å knekke dem aldri vil ha en klar vinner. Også at hver nye generasjon hever standardene for informasjonssikkerhet og kryptanalyse, som er settet med teknikker for systematisk å dekryptere / bryte krypterte meldinger, det vil si omgå sikkerhet eller kryptering.
For at brukere skal kunne vurdere at et kryptosystem (gitt teknikken for kryptografi) er sikkert, må det ha godkjenning fra det internasjonale ekspertsamfunnet og derfor være offentlig kjent, som er kjent som Kerckhoffs prinsipp . Imidlertid utsetter denne tilstanden systemet for gransking fra det globale kryptanalysesamfunnet, som vil prøve å utvikle måter for systematisk å bryte kryptering.
Hvordan kan du gjøre en bestemt krypteringsprosess hemmelig nok til at bare forsøkte agenter kan knekke den, mens du fremdeles er offentlig nok til at det globale kryptanalysesamfunnet kan vitne om dets robusthet? Svaret er en komponent som er et nøkkelelement i Kryptologi: nøkkelen. En nøkkel til et kryptosystem er en parameter for krypterings- eller dekrypteringsalgoritmene, eller begge deler. Ved å holde parametrene hemmelige, i stedet for algoritmefamilien, kan begge motstridende kravene oppnås. Så lenge parameterfamilien er stor nok (muligens uendelig) og hver av dens komponenter kan vises å ha tilstrekkelige egenskaper, vil det ikke være mulig for angripere å bestemme parametrene bare ved inspeksjon.
Til slutt, for at en nøkkel skal fungere effektivt, må den produseres enkelt, men nesten umulig å gjette. Med beregningskraften til dagens datamaskiner, ville en datamaskin ta kortere tid å knekke en menneskelig generert nøkkel enn noe menneske noen gang ville trenge å forestille seg, pluss at det uansett ikke er lønnsomt å generere nøkler på den måten. På grunn av det, har nøklene en tendens til å bli generert av en algoritme.
En nøkkelgenereringsalgoritme må ikke skape forutsigbare / reproduserbare utganger som et resultat av typisk bruk. Siden algoritmer utfører prosedyrer uten intelligente prosesser, er spørsmålet hvordan dette kan gjøres. Svaret er å konvertere nøkkelgenereringsalgoritmer til kart som forvandler et stort antall virkelig tilfeldige biter til nøkler. Virkelig tilfeldige biter kan anskaffes fra operativsystemet, noe som genererer dem fra usikkerhet i universet. Noen kilder vil være musebevegelser, nettverkspakkeforsinkelser eller til og med dedikert maskinvare, avhengig av applikasjonen.
Forbered deg på å bli overrasket en gang til, for nå vil vi introdusere et konsept som tilsynelatende strider mot det vi nettopp sa: den offentlige nøkkelen.
Så langt har vi sett opprettelsen av sikker kommunikasjon etter at de hemmelige parametrene (nøklene) har blitt utvekslet sikkert, men problemet med å utveksle parametrene gjennom en offentlig kanal gjenstår. På dette punktet vil vi introdusere et konsept som løser et litt mer håndgripelig problem: å skape en sikker kanal.
La oss si at Alice jobber med Bob, og de ønsker å holde arbeidsinteraksjonene sine trygge ved kryptering. De kan finne og bytte krypteringsnøklene sine ved å overlevere en USB-flashstasjon med nøklene. Men hva om Alice og Bob befinner seg på forskjellige kontinenter? Hvordan etablere en sikker kanal der det ikke er noen?
Å sende nøkler via e-post ville ikke være et alternativ, siden konkurrenten Eve kan fange sentralen og bruke nøklene til å lese alle de krypterte dataene senere. Hvis de hadde en annen digital kanal som de kunne overføre denne sensitive informasjonen gjennom, ville de ikke trenge kryptering og derfor nøklene i utgangspunktet. Sending av nøkkelen via fysisk post kan også avskjæres, siden det til å begynne med er nødvendig å utveksle konfidensiell informasjon. Send en stegangrafert nøkkel gjemmer seg i andre data det ville være smart, men ubrukelig med mindre avsenderen er sikker på at mottakeren, og mottakeren alene, er klar over eksistensen av en slik melding og vet hvordan den skal hentes ut. Det er bare slik at bevisstheten om eksistensen av en melding sammen med beskrivelsen av hvordan du trekker ut nøkkelen fra dataene, er en type nøkkel i seg selv, som bringer oss tilbake til utgangspunktet.
Løsningen er å designe et kryptosystem som krypteringsparameteren ikke er nok til å tolke den originale meldingen gjennomførbart. [en] , og lagrer parameteren som lar deg tolke meldingen. Vi kaller den parameteren den private nøkkelen. Basert på den private nøkkelen, kan man muligens generere et sett med parametere for et krypteringsverktøy uten å få de nye parameterne til å avsløre hva den private nøkkelen er. Det settet med parametere kan deles offentlig fordi det ikke er så viktig hvem som kan kryptere noe, så lenge bare én person kan dekryptere det. Siden dette settet med parametere for krypteringsverktøyet kan gjøres offentlig, kalles det en offentlig nøkkel.
Kryptografi der krypterings- og dekrypteringsnøkler er forskjellige, og førstnevnte ikke kan brukes til å utlede sistnevnte, kalles asymmetrisk kryptografi, mens symmetrisk kryptografi er det vi har når disse nøklene er like eller lett utledes fra hverandre. Alice sender Bob sin offentlige nøkkel, som bare kan brukes til å kryptere ting som bare hun kan dekryptere (med sin private nøkkel, som hun holder privat), og omvendt sender Bob Alice sin offentlige nøkkel, som bare kan brukes til å kryptere ting at bare han kan dekryptere (ved hjelp av sin private nøkkel, som han også holder privat). Men hvordan kan du legge ut en parameter for en krypteringsalgoritme som den eksakte inverse algoritmen ikke kan trekkes fra?
Svaret ligger innen matematikk mer relatert til programmering, teorien om beregningskompleksitet . Alle som har gått dypt nok i matteproblemer, har hørt om transformasjoner som er enkle å gjøre på en måte, men vanskelig å gjøre omvendt. I beregning, for eksempel, er det vanligvis en enkel øvelse å finne et derivat av en lærebok mens du gjør det inverse (som å løse en hvilken som helst fysisk del eller litt ikke-triviell fysisk lærebok. ODE eller PDE , for eksempel) krever en mer undersøkende prosess av den første hypotesen om funksjonsfamilier som garantert (eller i det minste troverdig) inneholder løsningen (e) og løser omvendte problemer for å finne løsninger på disse familiene.
Et eksempel som faktisk brukes i RSA kryptosystem multipliserer store primtall i stedet for å ta det resulterende produktet i betraktning uten å vite faktorene. Å gjøre multiplikasjonen er trivielt, men factoring krever det tilfeldig [2] gjett de viktigste faktorene, som har hundrevis av sifre. En viktig egenskap ved operasjonen er behovet for å skalere godt. Legge til noen få sifre over størrelsen på primtallene i RSA vil resultere i en nøkkel som krever tusenvis av flere operasjoner for å dekryptere og legge til en liten økning i kompleksiteten i krypteringsprosessen. Generelt sett brukes produktet av primtall for kryptering, mens paret av primfaktorer brukes til dekryptering.
Med alt dette i tankene, la oss ta en titt på hvordan SRVB-krypteringssystemet fungerer.
Som ethvert annet offentlig nøkkelkryptosystem, er SRVB avhengig av vanskeligheten med å løse et bestemt problem som er lett å produsere. Når det gjelder SRVB, er det Delsett sumproblem , som kan beskrives som følger:
Dado el entero $ w $ og $ v_1, cdot cdot cdot, v_N i Z $ encuentra la secuencia $ b_1, cdot cdot cdot, b_N i {0,1} $, slik at $ sum_ {i = 1} ^ {N} v_i b_i = w $.
Det er klart at dette problemet kan oppstå ved å tilfeldig velge N-heltall, tilfeldig velge en delmengde av dem, og oppsummere denne delmengden, noe som er trivielt.
Et brute force-søk vil ha en kompleksitet på $ O (N * 2 ^ N) $, beregner for hver kombinasjon av $ b $ s-verdier. En mer effektiv tilnærming ble gitt av Horowitz og Sahni i 1972 , med en kompleksitet av O (N * 2N / 2). Problemet er minst like vanskelig hvis vi erstatter $ b $ s og $ w $ med $ k $ - dimensjonale vektorer av heltall. Imidlertid må omfanget der dette vanskeligere problemet må utføres også ha et isomorfisme med en [ring] (https://en.wikipedia.org / wiki / Ring_ (matematikk)) der en enklere versjon av det samme problemet utføres, som vi vil se neste. Av denne grunn utnytter SRVB delmengdeproblemet innen Gaussiske heltall , hvor $ k = 2 $ ..
Det er et spesielt tilfelle der dette problemet er enkelt å beregne ved hjelp av en grådig algoritme. Hvis vi bestiller en sekvens av skaleringsfaktorer $ v_1, cdot cdot cdot, v_N $ der hvert heltall i sekvensen er større enn summen av alle heltall som gikk foran den ($ forall i, sum_ {j = 1 } ^ {i-1} v_j
Her er en enkel beskrivelse av den grådige løsningen for denne saken:
Det starter med $ i = N $, den nåværende observerte faktoren, og $ w ’= w $, resten av $ w $
Hvis den nåværende skaleringsfaktoren er for stor til å passe resten av $ w $, betyr det at $ v_i> w '$, sett $ b_i = 0 $ og fortsett til neste trinn. Ellers vet vi at skaleringsfaktoren må være i sekvensen (siden resten av faktorene er mindre enn $ v_i $), og derfor setter vi $ b_i = 1 $.
$ w ’ Leftarrow w’ - v_i * b_i $, $ i Leftarrow i - 1 $. Si $ i> 0 $, vuelve al paso 2.
Bekreft det, nå $ w '== 0 $, ellers er problemet ødelagt.
Dette fungerer fordi vi vet at alle multiplikatorer som er mindre enn den som i øyeblikket er observert ikke samlet kan dekke så mye av (under) sum $ w '$ som den nåværende multiplikatoren. Så hvis den gjenværende summen er større enn den nåværende faktoren, vet vi med sikkerhet at alle følgende faktorer sammen ikke kan oppsummeres uten hjelp av den nåværende faktoren. På den annen side, siden alle multiplikatorer er positive, hvis den nåværende faktoren $ v_i $ er større enn den gjenværende summen $ w '$, vil tilføying av en hvilken som helst annen faktor få resultatet til å overstige $ w' $ enda mer.
Vi skal sette opp en kommentar for resten av artikkelen. Vi velger $ v_1, cdot cdot cdot, v_n $ og $ w $ for å være faktorene og summen av overøkningssekvensen, mens $ u_1, cdot cdot cdot, u_n $ og $ y $ vil være The offentlige tilgjengelige parametere er gitt for å hente $ b_1, cdot cdot cdot, b_n $.
Med en sekvens $ u_1, cdot cdot cdot, u_n $ valgt for ikke å være super fantastisk, og tallet $ y $ er offentlig tilgjengelig, ikke nok informasjon blir gitt offentlig for å hente sekvensen $ b_1, cdot cdot cdot, b_n $. Imidlertid, hvis det er en super fantastisk sekvens $ v_1, cdot cdot cdot, v_n $ som kan ta plassen til sekvensen $ u_1, cdot cdot cdot, u_n $, kan denne sekvensen brukes til å løse problem med en grådig tilnærming.
Vi vil vise hvordan det fungerer nedenfor.
I 1978, Ralph Merkle og Martin Helman , de utviklet en måte å utnytte de to ryggsekkparadigmene og linearitet av moduloperasjonen for å bygge forbindelsen mellom de to sekvensene som er beskrevet i forrige avsnitt, og dermed oppnå et krypteringssystem for offentlig nøkkel. Ideen var å transformere enkel ryggsekk (den som består av den superøkende vektoren til heltallene) i den harde (den som mangler denne egenskapen) ved hjelp av en lineær operasjon (modulen) med hemmelige operander. Transformasjonen består i å multiplisere hver $ v_i $ med til $ theta $ og ta resten av dette produktet med en $ alpha $, hvor $ alpha gt sum_ {i = 1} ^ N v_i $ og $ gcd ( alpha, theta) = 1 $ (to begrensninger som snart vil være berettiget). Resultatet, sekvensen $ u_1, ldots, u_N $, øker ikke lenger, og kan betraktes som en vanskelig ryggsekk .
En tilfeldig permutasjon av sekvensen $ u_1, ldots, u_N $ vil bli gitt til partiet som ønsker å kryptere og sende oss en melding. Permutasjon gjøres slik at en tredjepart har vanskelig for å gjette hva den opprinnelige superøknings-sekvensen er. Bitblokkene i en melding brukes som koeffisienter $ b_1, ldots, b_N $. Krypteringen gjøres ved å multiplisere sekvensen av nøkler med denne sekvensen av koeffisienter, og legge til multiplikasjonene i et resultat, som vi må merke $ og $. Bare eieren av den private nøkkelen kan transformere $ y $ til den tilsvarende $ w $ som ville blitt oppnådd hvis de samme $ b_1, ldots, b_N $ blokker ble multiplisert med enkle heltall (sekvensen $ v_1, ldots, v_N $). Dette gjøres ved å multiplisere $ y $ med $ theta ^ {- 1} $, the invers multiplikativ av $ theta $ modul $ alpha $ (hvis eksistens avhenger av den tilstanden til $ gcd ( alpha, theta) = 1 $). Med andre ord, $ ( theta * theta ^ {- 1}) bmod alpha = 1 $. Etter det beregner vi $ w = (y * theta ^ {- 1}) bmod a $. Årsaken til at dette garantert fungerer, er modulær linearitet , det vil si at den lineære kombinasjonen av restene er lik resten av den lineære kombinasjonen.
Hvis vi fortløpende bruker definisjonen på $ u $, kvotientringen og linearitetsegenskapen til moduloperatøren, ser vi korrespondansen:
$ 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 & = venstre [ sum_ {i = 1} ^ N b_i * v_i høyre] * theta bmod alpha newline & = w * theta bmod alpha end {align} $
Og så den den enkle summen $ w $ kan hentes ved å multiplisere begge sider med $ theta ^ {- 1} $ og ta modulen med $ alpha $. For å gjøre dette, må man vite både $ alpha $ og $ theta $ (som gjør at $ theta ^ {- 1} $ enkelt kan beregnes), som må holdes private som deler av den private nøkkelen.
En enkelt begrensning, $ alpha gt sum_ {i = 1} ^ N v_i $, var ikke berettiget, og her er forklaringen: likestillingen mellom andre og tredje linje består av en likhet mellom typer avfall av kvotientring av heltallene modulo $ alpha $. Med andre ord setter den bare likheten til resten av medlemmene når de deler med $ alpha $, som ikke er en tilstrekkelig forutsetning for likestilling mellom medlemmene . Som et resultat kan mer enn en vektor med $ b $ -verdier kartlegges til en enkelt $ y $, som unngås ved å begrense $ w $ til å være mindre enn $ alpha $ for en kombinasjon av $ b $ -verdier.
Som alle andre tilfeller av hverdagen, er full kunnskap om alle hypoteser ofte umulig og aldri lett. Som et resultat må vi stole på matematisk intuisjon når vi vurderer om et kryptografisk system er trygt å bruke, noe som ikke gir oss reelle garantier. Seks år etter opprettelsen brøt MH-kryptosystemet med en angrep av A. Shamir . Det var flere forsøk på å gjenopplive MH, hvorav mange også mislyktes.
I 2016, etter litt idédugnad med forfatteren av denne artikkelen om [3] Inspirerte muligheter for et kryptosystem hadde Daniel Santana Rocha ideen om å erstatte $ theta $ og $ alpha $ for Gaussiske heltall. Av mer tekniske årsaker fører denne tilnærmingen til motstand mot det nevnte Shamir-angrepet.
Han oppfattet også en blokk med biter som består av mange trinn i den tidligere beskrevne lineære kombinasjonen av a napa dura . I hver av dem vil et nytt heltall (gaussisk), tilsvarende en, høyere enn summen av alle de forrige bli lagt til på slutten av sekvensen, mens det minste tallet vil bli eliminert.
En annen, men elegant analog begrensning gjelder for $ alpha $, som nå er et Gaussisk heltall. Vi krever $ w leq vert alpha vert ^ 2 $, hvor $ w $ igjen er den høyeste lineære kombinasjonen av de naturlige heltallene i den enkle ryggsekken. Årsaken er veldig vanskelig å formalisere, men det kan heldigvis lett gjettes ut fra en elegant beskrivelse:
Tenk deg et firkantet gitter i det komplekse tallplanet, hvis side er en hypotenus av en rett trekant av ben a og b, parallelt med de virkelige og imaginære aksene. Et eksempel på et slikt gitter er gitt nedenfor. Guassiske heltall modulo $ alpha = a + bi $ kan representeres av punkter lokalisert i nevnte gitter. Innenfor dette nettverket er det $ vert alpha vert ^ 2 $ forskjellige punkter. Hvis vi velger en stor nok $ alpha $, kan vi passe på alle de lineære kombinasjonene av den enkle ryggsekken. Så vi setter et krav til $ w leftarrow vert alpha vert ^ 2 $, hvor w er [som beskrevet].
Dette er den grafiske representasjonen av isomorfismen $ f: Z / n rightarrow Z [i] / ( alpha) $, hvor $ n = 13 $ og $ alpha = a + bi = 3 + 2i $ (merk at $ n $ og $ alpha $ tilfredsstiller faktisk $ n = vert alpha vert ^ 2 = a ^ 2 + b ^ 2 $ etter behov). Punktene representerer de gaussiske heltallene, det vil si de komplekse tallene $ a + bi $, der $ a $ og $ b $ er heltall. Som vanlig representerer den horisontale aksen den virkelige delen, mens den vertikale representerer den imaginære delen. Flytting av et punkt mot høyre eller venstre tilsvarer derfor å legge til henholdsvis +1 eller -1 til den nåværende verdien. På samme måte tilsvarer å flytte et punkt opp eller ned med å legge til henholdsvis + i eller -i.
De røde prikkene tilsvarer $ 0 bmod ( alpha) $. I tillegg til disse farger vi også 4 flere par poeng.
Farge | Tilsvarer ... mod α |
oransje | $ 1 $ |
Grønn | $ i $ |
Blå | $ -1-i $ |
Fiolett | $ 1-i $ |
$ F $ isomorfismen er definert av transformasjonen av $ i $ th-elementet i den sykliske sekvensen $ (0,1,2, cdot cdot cdot, 10,11,12,0,1,2, cdot cdot cdot) $ i $ i $ th-elementet i den også sykliske sekvens av punkter i figuren, som følger følgende regler:
For å kartlegge minst $ Y $ naturlige heltall, ta et kvadrat med området $ vert alpha vert ^ 2 $ (der $ vert alpha vert = sqrt {a ^ 2 + b ^ 2} $ er av Pythagoras-teorem , målingen på din side) minst like høy.
Legg merke til at hvert 'hopp' endrer radnummeret $ r $ til $ r leftarrow (r + b) (mod a + b) $ hvis man teller radene fra topp til bunn, og, tilsvarende, til $ r leftarrow ( r + a) (mod a + b) $ hvis man teller fra bunnen av. Derfor er den nødvendige og tilstrekkelige betingelsen for at hver rad (og punkt) skal krysses nøyaktig en gang i hver syklus at størrelsen på hoppene er koprime med antall rader, eller med andre ord $ gcd (a, a + b) = gcd (b, a + b) = 1 $. På grunn av egenskapene til den største felles divisoroperatøren tilsvarer begge $ gcd (a, b) = 1 $.
Y. S. Villas Boas bemerket behovet for $ a $ og $ b $ coprimity. For å bevare superinkrement, må hvert nye heltall $ w $ som legges til slutten av sekvensen, overstige summen av alle nåværende ($ w> sum_ {i = 1} ^ k v_i $). Du observerte at for å oppnå dette måtte multiplikasjonskoeffisientene $ b_i $ være minst 1, og derfor kunne ikke hver bit kartlegges til koeffisientene 0 og 1. Hvis koeffisientene var 0 og 1, bare komposittblokken bare for en ville tilfredsstille superinkrementet. Av denne grunn ble biter 0 og 1 henholdsvis kartlagt til multiplikasjonskoeffisientene 1 og 2.
Til slutt, og på en mindre triviell måte: under hvert dekodingstrinn, blir et nytt heltall $ v_1 $ funnet som en løsning på ligningen $ b_1 v_1 = v_ {n + 1} - sum_ {i = 2} ^ {n} b_i v_i $, der alle $ v_i $ og $ b_i $ er kjent med $ 1
En endelig teknisk løsning å løse er tilfellet der meldingsstørrelsen i byte ikke er et multiplum av blokkstørrelsen. Med andre ord, hva skal jeg gjøre med mulige gjenværende byte i den siste datablokken, slik at når datablokkene er hentet, bevares alle byte med det opprinnelige innholdet, men ikke mer enn dem? Vi løste det ved å gjenta den siste byten i meldingen en gang. Denne kopien blir deretter fulgt av en tilfeldig sekvens der hver komponent bare kreves for å være forskjellig fra den forrige. Derfor, når datablokkene blir hentet, den siste av dem eller i verste fall den før den siste den blir avkortet ved siste byte-repetisjon. [4]
Nå skal vi vise et eksempel på SRVB-kryptografiske system.
Vi starter med parametrene:
$ k = $ 4;
$ m = 4 $;
som produserer en blokklengde på $ l = 4 * 4 = 16 $ og en super utrolig sekvens på $ k + 1 = 5 $ naturlige heltall, som betjenes —_ det vil si lineært kombinert, sammen med resultatet av denne lineære kombinasjonen , og redusert til de siste k + 1 elementene _— m = 4 ganger;
For enkelhets skyld, la følgende være den (super utrolige) vektoren til $ v_i $:
$ (1,2,4,8,16) $
Faktisk er sekvensen av de fem første kreftene på 2, ganske enkelt fordi dette er den super fantastiske sekvensen med fem elementer og de strengt minste verdiene (og dermed unngår en 0 i den offentlige nøkkelen, som trivielt vil gi til motpartens 0 korrespondent)
Som vi sa før, for $ alpha = a + bi $, må heltallene $ a $ og $ b $ være koprime, og ifølge den nevnte nye begrensningen må vi be om at $ a ^ 2 + b ^ 2 = vert alpha vert ^ 2 geq W $. En rask beregning gir $ W = $ 1.590. Siden $ sqrt {1590} simeq 39.8 $, ville en veldig praktisk $ alpha $ å velge være $ alpha = 39 + 40i $, siden den er stor nok til å imøtekomme en isomorfisme med en ring av heltall med minst 1590 komponenter, samtidig som de tilfredsstiller $ gcd (a, b) = 1 $. Vi må også velge $ theta $ slik at $ gcd (a, theta) = 1 $ [5] og helst ikke for lavt, så $ (a_1 * theta) \% alpha neq v_1 * theta $, (også for å unngå å gi informasjon). $ theta = 60 $ gjør jobben og produserer:
$ -19-1i, 1 + 38i, 3-3i, 6-6i, $ 12-12i [6]
La oss skitne hendene. Ta meldingen b
. Først kartlegger vi det til en byteoppstilling i henhold til [ASCII] (https://en.wikipedia.org/wiki/ASCII#8-bit_codes) og vår konvensjon for avkorting av datablokker:
Hola ApeeScape!
Siden datablokken vår er 16 bits = 2 byte lang, og meldingen vår er 13 tegn lang, ender vi opp med 7 datablokker på 2 byte hver, hvor den siste inneholder dobbelt bitrepresentasjon av '!' -Tegnet. Vi skal kryptere den første blokken trinn for trinn. Vær nøye med fordi bitene i hver byte blir tatt i rekkefølge etter deres betydning.
$ m = 01001000 01100101 $
Og så kartla vi bare
“Han” $ Rightarrow (12-12i, 15 + 4i, 49 + 9i, 106-10i, 252-2i) $
Resten av den krypterte meldingen er som følger:
“Ll” $ Rightarrow (12-12i, 21-2i, 61-3i, 185-31i, 367-59i) $
“O“ $ Rightarrow (12-12i, 25 + 33i, 65 + 32i, 111 + 44i, 244 + 124i) $
“Til” $ 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) $
Nå, for dekrypteringen, har vi $ 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) $
Nå kommer den grådige algoritmen:
Først trekker vi hver bidragsfaktor multiplisert med en, fordi det er kjent at de bidro minst en gang til den siste, noe som resulterte i:
$ T leftarrow (527-233-93-47-16) = 148 $
$ (T geq 223) = (148 geq 223) = false Rightarrow b_1 = 0; T leftarrow (T - 0 * 223) = 148 $
$ (T geq 93) = (148 geq 93) = true Rightarrow b_2 = 1; T leftarrow (T - 1 * 93) = 55 $
$ (T geq 47) = 55 geq 47) = true Rightarrow b_3 = 1; T leftarrow (T - 1 * 47) = 8 $
$ (T geq 16) = 8 geq 16) = false Rightarrow b_4 = 0; T leftarrow (T - 0 * 16) = 8 $
Resultat: 0110;
Rest: 8 (lagt til begynnelsen av sekvensen som det nye laveste elementet);
Fjern 527 fra slutten av den gjeldende sekvensen;
$ T leftarrow (233-93-47-16-8) = 59 $
$ (T geq 93) = (59 geq 93) = false Rightarrow b_1 = 0; T leftarrow (T - 0 * 93) = 59 $
$ (T geq 47) = (59 geq 47) = true Rightarrow b_2 = 1; T leftarrow (T - 1 * 47) = 12 $
$ (T geq 16) = (12 geq 16) = false Rightarrow b_3 = 0; T leftarrow (T - 0 8 16) = 12 $
$ (T geq 8) = (12 geq 8) = true Rightarrow b_4 = 1; T leftarrow (T - 0 * 12) = 4 $
Resultat: 0101;
Gjenværende: 4 (lagt til begynnelsen av sekvensen som det nye laveste elementet);
Legg igjen 233 fra slutten av den nåværende sekvensen;
$ T leftarrow (93 - 47 - 16 - 8 - 4) = 18 $
$ (T geq 47) = (18 geq 47) = false Rightarrow b_1 = 0; T leftarrow (T - 0 * 47) = 18 $
$ (T geq 16) = (18 geq 16) = true Rightarrow b_2 = 1; T leftarrow (T - 1 * 16) = 2 $
$ (T geq 8) = (2 geq 8) = false Rightarrow b_3 = 0; T leftarrow (T - 0 * 8) = 2 $
$ (T geq 4) = (2 geq 4) = false Rightarrow b_4 = 0; T leftarrow (T - 0 * 4) = 2 $
Resultat: 0100;
Rest: 2 (lagt til begynnelsen av sekvensen som det nye laveste elementet);
Slipp 93 fra slutten av den nåværende sekvensen;
$ T leftarrow (47-16-8-4-2) = 17 $
$ (T geq 16) = (17 geq 16) = true Rightarrow b_1 = 1; T leftarrow (T - 1 * 16) = 1 $
$ (T geq 8) = (1 geq 8) = false Rightarrow b_2 = 0; T leftarrow (T - 0 * 8) = 1 $
$ (T geq 4) = (1 geq 4) = false Rightarrow b_3 = 0; T leftarrow (T - 0 * 4) = 1 $
$ (T geq 2) = (1 geq 4) = falsk Rightarrow b_4 = 0; T leftarrow (T - 0 * 2) = 1 $
Resultat: 1000;
Rest: 1 (lagt til begynnelsen av sekvensen som det nye laveste elementet);
Slett 47 fra slutten av den aktuelle sekvensen;
Som et resultat har vi hentet datablokken: “01001000 01100101” som inneholder de to første tegnene “Han”, i meldingen vår. Ikke bare det, vi har også hentet vår $ (1,2,4,8,16) $ private nøkkel super fantastisk sekvens.
De andre datablokkekartene går på samme måte.
SRVB er:
Helt gratis og offentlig;
Betydelig enklere og lettere å forstå og implementere enn ETC [7] ;
Rikelig med nøkler og derfor praktisk talt ingen kostnader, i motsetning til for eksempel RSA , som er basert på primtall, som er dyre .
Vi kan nå oppsummere de mest sannsynlige sårbarhetene. Ettersom SRVB stammer fra MH, er det lett å mistenke at det ville være sårbart for en generalisering av [Shamir-angrepet] (https://en.wikipedia.org/wiki/Merkle-Hellman_knapsack_cryptosystem#cite_note-2), eller noen annet som bryter det. forfatteren hadde grunn til å tro at dette ikke ville være tilfelle, det har ennå ikke blitt bekreftet (noe som er veldig typisk når det gjelder kryptosystemer).
Rocha bemerket noen generaliseringer for kvotientringene som skulle brukes, noe som muligens kan føre til en økning i kryptanalysens kompleksitet. Vi vil også undersøke disse mulighetene.
Det skjer slik at Villas Boas under utviklingen og dokumentasjonen av SRVB kom med en annen tilnærming for å forbedre konseptet med en offentlig nøkkel for ryggsekk-kryptosystem som ikke vil bli forklart i detalj i dette dokumentet, slik at denne artikkelen ikke er for lang . og kjedelig, men her er en pensel med den. Hvis du ikke kan finne ut av det, ikke bekymre deg, bare følg med på vårt neste artikkelinnlegg, hvor vi vil gå nærmere inn på detaljene: se summen $ og $ delmengde, for eksempel $ N $ ringelementer av kvotienten $ u_i $ (som tilsvarer isomorfisk de positive heltallene $ v_i $ i den superøkende sekvensen, som før) som en multiplikasjon av en radvektor av disse $ u_i $ med en kolonnevektor $ B $ (for binær ) av nuller og ener [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,
hvor $ b_i i {0,1} $
Tenk deg nå at i stedet for denne vektoren på $ u_i $ har du til venstre en matrise V på $ n $ ganger $ N $ (med $ n
P = RV
Tanken er at Bob bruker P som sin nye offentlige nøkkel. På grunn av tilfeldigheten til R, vektoren
$ Y = PB = RV B = RW $
har informasjonen $ w $ tilslørt av støy i andre rader av V. Bob beregner også på forhånd og lagrer radvektoren S som tilfredsstiller:
$ R ^ T S ^ T = e_1 $
Når Alice sender Y til Bob, finner han SY, fordi:
$ SY = S (PB) = S ((RV) B) = SRVB = {e_1} ^ T R ^ {- 1} ((RV) B) = $
(så langt bare definisjoner)
$ {e_1} ^ T (V B) = {e_1} ^ T W = w $
(Nå utnytter vi assosiativitet å kansellere Rs)
og fortsetter deretter som før for å trekke ut vektoren $ b_i $ fra $ w $ ved hjelp av den grådige algoritmen.
Så, med et ord, Linear Algebraic Obscuration utnytter assosiativiteten til matriksmultiplikasjon (det faktum at vi kunne utvide vilkårene og deretter betjene komponentene i en ny rekkefølge, så lenge vi holder sekvensen til alle operandene i sekvensen) til 'lineært' bland og filter deretter (i henholdsvis kryptering og dekryptering) støyen til / fra $ w $. Og i det begrensende tilfellet $ n = 1 $, går systemet elegant tilbake til originalen i henhold til Rochas tilnærming.
Som forklart ovenfor, ifølge Kerckhoffs prinsipp, viser erfaring at antikken til et offentlig kjent uavbrutt kryptosystem er den viktigste kilden til dets pålitelighet, mye mer enn noen teoretisk argumentasjon fra forfatterne selv, bortsett fra noen annen ting, fordi det er et definitivt bevis på effektiviteten av algoritmer er vanligvis ikke tilgjengelig.
Og her har vi den store muligheten til å sette disse konseptene i praksis for å vinne en stor pris: klar over dette faktum, lanserte vi nevnte kampanje , som i utgangspunktet er en crowdfunding. for en pris som tildeles automatisk til den første som bryter en melding. Pengene vil bli konvertert til bitcoins i en gitt lommebok hvis private nøkkel vil bli kryptert og publisert på SRVB, slik at alle som kan dekryptere den, bare kan ta pengene anonymt, ingen spørsmål.
Denne spesielle artikkelen og hele SRVB Crypto-prosjektet generelt har fått stor hjelp fra Prof. Charles F. de Barros , assisterende professor ved [Federal University of São João Del Rei] (http://www.ufsj.edu.br/). Prof. Barros ga oss en teknisk gjennomgang av selve SRVB-kryptosystemet. Jeg trodde at det var nødvendig å sende inn før jeg våget å publisere, og at det definitivt ville ta meg mye lenger tid å gjøre det alene.
Videre vil jeg også uttrykke min dype takknemlighet til læreren Adnan Ademovic for sitt ekstraordinært innsiktsfulle, gjennomtenkte og tålmodige arbeid som redaktør for denne publikasjonen. Artikkel.
Ordliste
[en] Merk at setningene her tyde eller tyde ikke gjelder, fordi før et gitt kryptosystem (med alle dets komponenter, inkludert nøklene) er godt definert, kan man ikke klassifisere en gitt metode for å tolke den originale krypteringsmeldingen som forsettlig kommunikasjon (dekryptering) eller et angrep (dekodet).
[2] Selv om det finnes teknikker for å forbedre dette spådomsarbeidet, er det fortsatt mye vanskeligere å oppdage enn å multiplisere dem.
[3] Den første inspirasjonen var å se på tau gjetningstreet , et uendelig tre forankret i tallet 1, hvis andre noder består av heltall som resulterer i en binær tilleggs-, subtraksjons- eller multiplikasjonsoperasjon mellom tidligere noder, muligens en node som opereres på seg selv. Målet med teorien er knyttet til dybden, i dette treet, der hvert heltall vises for første gang. Det er tilsynelatende vanskelig å finne et stort antall i nedre grener (selv om vi slapper av nødvendigheten), men det er umiddelbart å sjekke om en gitt sekvens av operasjoner faktisk gir et gitt resultat.
[4] Dette er absolutt ikke den mest naturlige tilnærmingen, men ved å vedta denne sørger du for at denne byte-polstringen (kalt fylling ) ...
Hvis de siste blokkene i hver melding var kjent for å være systematisk partisk i en distribusjon som var langt fra uniform, kunne en angriper dra nytte av dette faktum for å utføre statistisk kryptanalyse, siden et hvilket som helst gitt utvalg av meldinger ville være statistisk mer representativt enn ellers. Med andre ord, de siste blokkene er statistisk mindre forskjellige, de blir de svakeste leddene i meldingen.
[5] Gjør ingen feil: denne største fellesdeleren er gaussisk, mens den ovenfor er ekte.
[6] ... som ikke er perfekt, fordi det lett avslører det faktum at de tre siste komponentene er proporsjonale med 1, 2 og 4. Men igjen, for enkelhets skyld, vil vi ignorere denne detalj.
[7] ... som er så komplisert at det er noen beryktede tilfeller av manglende implementering og vedlikehold av protokoller basert på den .
[8] Her vil vi ikke ta Rochas tilnærming til en blokk med flere lineære kombinasjoner, som også lar oss tilfeldig permere encore for å gjøre dem enda mørkere.
[9] Selv om det ikke er helt tilfeldig. Transposisjonen må omfatte underområdet som genereres av vektoren $ e_1 = (1,0,…, 0) $.