GGH-salausjärjestelmä ( eng. Goldreich–Goldwasser–Halevi ) on epäsymmetrinen salausjärjestelmä, joka perustuu hilaan . On myös GGH - allekirjoitusjärjestelmä .
Salausjärjestelmä perustuu ratkaisuihin lyhimmän vektorin löytämiseen ja lähimmän vektorin löytämiseen . Tiedemiesten Oded Goldreichin , Shafi Goldwasserin ja Shai Halevin vuonna 1997 julkaisema GGH-salausjärjestelmä käyttää yksisuuntaista salaista syöttötoimintoa , koska minkä tahansa hilapohjan perusteella on helppo luoda vektori lähellä hilapistettä. Esimerkiksi ottamalla hilapiste ja lisäämällä pieni virhevektori. Virhevektorista palaamiseksi hilan alkupisteeseen tarvitaan erityinen perusta. Vuonna 1999 Phong Q. Nguyen [1] paransi alkuperäistä GGH-salausjärjestelmää, mikä mahdollisti neljän viidestä GGH-ongelmasta ratkaisemisen ja osittaisen tiedon hankkimisen jälkimmäisestä. Vaikka GGH voi olla turvallinen tietyillä parametrivalinnoilla, sen tehokkuus perinteisiin julkisen avaimen salausjärjestelmiin verrattuna on edelleen kiistanalainen [2] . Usein salaus vaatii korkean hilamitan, kun taas avaimen koko kasvaa suunnilleen neliöllisesti hilan kokoon nähden [2] .
Ainoa suuria mittoja käsittelevä hilakaavio on NTRU [3] .
GGH sisältää julkisen avaimen ja yksityisen avaimen [4] . Yksityinen avain on hilan pohja, jossa on unimodulaarinen matriisi .
Julkinen avain on toinen kanta lomakkeen hilassa .
Olkoon sanoma-avaruus M koostuva väliin kuuluvista vektoreista .
Annettu viesti , virhe ja julkinen avain :
Matriisimerkinnällä:
On muistettava, että se koostuu kokonaislukuarvoista, on hilapiste ja on siksi myös hilapiste. Sitten salateksti on:
Salatekstin purkamiseksi lasketaan:
Jos se on tarpeeksi pieni, poistamiseen käytetään Babain pyöristysmenetelmää [ 5] .
Sitten saadaksesi tekstin:
Tässä osiossa käsitellään useita tapoja hyökätä kryptojärjestelmää vastaan [6] .
Pyöristyshyökkäys on tämän salausjärjestelmän ilmeisin hyökkäys, lukuun ottamatta raa'an voiman hyökkäystä - virhevektorin etsimistä . Sen ydin on käyttää julkista avainta B kääntämään funktio samalla tavalla kuin käytettäessä yksityistä avainta R Nimittäin tietäen , voit laskea . Siten voit löytää vektorin . Alle 80 LLL :n mitoissa algoritmi pystyy määrittämään perusteen oikein, mutta alkaen mitat 100 ja suuremmista, tämä hyökkäys on huonompi kuin triviaali virhevektorin luettelointi.
Tämä algoritmi on ilmeinen jalostus pyöristyshyökkäyksestä. Tässä käytetään parasta approksimaatioalgoritmia lyhimmälle vektoriongelmalle . Erityisesti lähimmän tason algoritmia käytetään Babain pyöristysalgoritmin sijaan. Se toimii näin. Annettu piste ja pelkistetty kanta c = { } LLL :lle . Kaikki affine välilyönnit = { + } : } otetaan huomioon. Kaikesta huolimatta on lähimpänä pistettä oleva hypertaso . Lisäksi piste heijastetaan (n - 1)-ulotteiseen avaruuteen, jonka = { } peittää . Tämä antaa uuden pisteen ja uuden kantakohdan = { }. Algoritmi etenee nyt rekursiivisesti löytääkseen pisteen tässä (n - 1)-ulotteisessa hilassa lähellä . Lopuksi algoritmi asettaa . Tämä menetelmä toimii paljon nopeammin kuin edellinen. Kuitenkin myös sen työmäärä kasvaa eksponentiaalisesti hilaulottuvuuden myötä. Kokeet osoittavat, että käytettäessä LLL :ää hilavähennysalgoritmina, tarvitaan jonkin verran hakuaikaa, alkaen koosta 110-120. Hyökkäys muuttuu mahdottomaksi koosta 140-150 alkaen.
Toinen tapa, jota käytetään usein approksimoimaan lähimmän vektorin löytämisongelmaa, on upottaa n kantavektoria ja piste , jolle on tarpeen löytää läheinen hilapiste (n + 1)-ulotteisessa hilassa.
Hilavähennys-algoritmia käytetään sitten etsimään lyhyin nollasta poikkeava vektori kohdasta , siinä toivossa, että tämän vektorin ensimmäiset n elementtiä ovat lähimpänä pistettä . Tälle hyökkäykselle tehdyt kokeet (käyttäen LLL :ää työkaluna lyhimpien vektorien löytämiseen) osoittavat, että se toimii noin 110-120 ulottuvuuksiin asti, mikä on parempi kuin pyöristyshyökkäys, josta tulee huonompi kuin triviaali haku dimension 100 jälkeen.
Luodaan viisi suljettua kantaa jokaiseen ulottuvuuteen. Jokainen kanta valitaan muodossa = + rand , jossa I on identiteettimatriisi ja rand on neliömatriisi , jonka jäsenet valitaan tasaisesti alueelta . Jokaiselle kannalle lasketaan arvo = , jossa on suurimman rivin euklidinen normi ja . Jokaiselle suljetulle pohjalle luodaan viisi avointa kantaa
= , missä on kaksoisortogonaalisuusvirhe: missä tarkoittaa matriisin riviä .
Assault scoreHyökkäyksen arvioimiseksi käytettiin samoja avoimia ja suljettuja tukikohtia kuin hyökkäyksessä pyöristämällä.
Injektiohyökkäyksen arviointiKoska injektiohyökkäyksen "työkuormasta" ei voi puhua, mitattiin maksimiarvo (virhevektoriin liittyen), jolla tämä hyökkäys toimii. Näissä kokeissa käytettiin samoja suljettuja tukikohtia ja avoimia tukikohtia kuin kahdessa edellisessä hyökkäyksessä. Sitten jokaisella avoimella pohjalla arvioitiin toiminto useissa kohdissa useilla eri arvoilla ja tarkistettiin, palauttaako injektiohyökkäys salatun viestin.
Olkoon hila kantaneen ja sen käänteisluvun kanssa :
jaUnimodulaarisella matriisilla:
jaSaamme:
Olkoon viesti ja virhevektori Sitten salateksti:
Salauksen purkamiseen tarvitset:
Tämä pyöristyy
Ja viesti palautetaan seuraavasti: