Format -preserving encryption ( FPE ) tarkoittaa salausta, jossa tulos ( salausteksti ) on samassa muodossa kuin syöte ( plaintext ) . Sanan "muoto" merkitys vaihtelee. Yleensä tarkoitetaan vain äärellisiä joukkoja , esimerkiksi:
Tällaisille äärellisille joukoille ja alla olevalle keskustelulle salaus vastaa N kokonaisluvun permutaatiota {0, ... , N −1 }, missä N on alueen koko.
Ensimmäinen syy FPE:n käyttöön ovat ongelmat, jotka liittyvät salauksen käyttöön olemassa olevissa sovelluksissa, joissa on hyvin määriteltyjä tietomalleja. Tyypillinen esimerkki on esimerkiksi luottokortin numero1234567812345670 (16 tavua, vain numeroita).
Salauksen lisääminen tällaisiin sovelluksiin voi olla hankalaa, jos tietomallia on muutettava, koska se sisältää yleensä muutoksia kentän pituusrajoitukseen tai tietotyyppiin . Esimerkiksi luottokortin numeron lohkosalaus johtaa tulosteen muodossa heksadesimaali ( 0x96a45cbcf9c2a9425cde9e274948cb67, 34 tavua, heksadesimaalilukua) tai Base64 ( lqRcvPnCqUJc3p4nSUjLZw==, 24 tavua, aakkosnumeerisia ja erikoismerkkejä). Tämä rikkoo kaikki olemassa olevat sovellukset, jotka odottavat syötteenä 16-numeroista luottokortin numeroa.
Yksinkertaisten muotoiluongelmien lisäksi AES-128-CBC:tä käyttämällä tämä luottokortin numero voidaan koodata heksadesimaaliarvoon 0xde015724b081ea7003de4593d792fd8b695b39e095c98f3a220ff43522a2df02. Virheellisten merkkien tai koon kasvun aiheuttaman ongelman lisäksi CBC-moodilla salatut tiedot muuttaa arvoa, kun sen salaus puretaan ja salataan uudelleen. Tämä johtuu siitä, että satunnainen siemenarvo , jota käytetään salausalgoritmin alustamiseen ja joka sisältyy salattuun arvoon, on erilainen jokaisessa salausoperaatiossa. Siksi ei ole mahdollista käyttää CBC-moodilla salattuja tietoja yksilöllisenä avaimena tietokannan rivin tunnistamiseen .
FPE on välttämätön siirtymäprosessin yksinkertaistamiseksi säilyttämällä alkuperäisen tiedon muotoilu ja pituus, mikä mahdollistaa puhtaan tekstin korvaamisen sen kryptogrammilla käytetyissä sovelluksissa.
Pseudosatunnaislukujen luominenFormat Preserving Encryption (FPE) pystyy luomaan ainutlaatuisia ja toistamattomia numeroita. FPE:n päätarkoitus on salata tiedosto siten, että sekä alkuperäinen tiedosto että salattu tiedosto ovat samaa muotoa.
Jos esimerkiksi luodaan numerosarja 11111-88888, FPE ottaa ensimmäisen arvon 11111 ja salaa sen toiseksi 5-numeroiseksi numeroksi. Tämä prosessi jatkuu, kunnes viimeinen arvo 88888 on luettu. Kaikki salatut arvot ovat yksilöllisiä ja satunnaisia. Näitä numeroita käytetään tuotteen sarjaavaimena.
Vaikka todella satunnainen permutaatio on ihanteellinen FPE-salaus, suurille joukoille ei ole mahdollista luoda etukäteen ja muistaa todella satunnaista permutaatiota. FPE-ongelma on siis luoda näennäissatunnainen permutaatio salaisesta avaimesta siten, että yhden arvon laskenta-aika on pieni (ihannetapauksessa vakio, mutta mikä tärkeintä, pienempi kuin O (N)).
N -bittinen lohkosalaus (esim. AES) on teknisesti FPE joukossa {0, ..., 2 n -1 }. Jos FPE tarvitaan johonkin standardijoukkoon (jossa n = 128, 192, 256), voit käyttää vaaditun kokoista lohkosalausta.
Kuitenkin vakiokäytössä lohkosalausta käytetään tilassa , joka sallii mielivaltaisen pitkien viestien salauksen, ja käyttämällä alustusvektoria, kuten edellä on käsitelty. Tässä tilassa lohkosalaus ei ole FPE.
Salauskirjallisuudessa (katso linkit alla) FPE :n "hyvyys" määräytyy sen perusteella, pystyykö hyökkääjä erottamaan FPE:n todella satunnaisesta permutaatiosta. Hyökkääjät vaihtelevat sen mukaan, onko heillä pääsy oraakkeliin vai tietävätkö he salateksti/selkoteksti-parin.
Useimmissa edellä mainituissa lähestymistavoissa ihanteellisena satunnaisfunktiona käytetään tunnettua lohkosalausta (kuten AES ).
Tällöin salaisen avaimen tuominen algoritmiin on edullisesti helppoa. Edelleen tekstissä mitä tahansa hyvää lohkosalausta voidaan käyttää AES:n sijasta.
Lohkosalauksen taustalla olevaa FPE-toteutusta käyttivät ensin kryptografit John Black ja Phillip Rogaway , [1] , jotka kuvasivat 3 tapaa tehdä tämä. He ovat osoittaneet, että jokainen näistä menetelmistä on yhtä turvallinen kuin niiden luomiseen käytetty lohkosalaus. Tämä tarkoittaa, että vastustaja, joka pystyy purkamaan FPE-algoritmin salauksen, voi myös purkaa AES-algoritmin salauksen. Siksi luotettaville AES-algoritmeille myös niihin rakennetut FPE-algoritmit ovat luotettavia. Tästä eteenpäin E tarkoittaa AES-salausoperaatiota, jota käytetään FPE-algoritmin rakentamiseen, ja P FPE:tä.
FPE perustuu etuliitesalaukseenYksinkertainen tapa luoda FPE-algoritmi joukolle {0,…, N -1} on määrittää jokaiselle kokonaisluvulle näennäissatunnainen paino ja lajitella sitten painon mukaan. Painot määritetään käyttämällä olemassa olevaa lohkosalausta jokaiseen kokonaislukuun. Black ja Rogoway kutsuvat tätä menetelmää "etuliitesalaukseksi".
Joten jos haluat luoda FPE:n joukolle {0,1,2,3} annetulla avaimella K , käytä AES( K ) jokaiseen joukkomme kokonaislukuun, esimerkiksi
weight(0) = 0x56c644080098fc5570f2b329323dbf62
weight(1) = 0x08ee98c0d05e3dad3eb3d6236f23e7b7
weight(2) = 0x47d2e1bf72264fa01fb274465e56ba20
weight(3) = 0x077de40941c93774857961a8a772650d
Lajittelemalla [0,1,2,3] painon mukaan saadaan [3,1,2,0], joten salaus näyttää tältä:
F(0) = 3
F(1) = 1
F(2) = 2
F(3) = 0.
Tätä menetelmää käytetään vain pienille N:n arvoille. Suurille arvoille hakutaulukon koko ja taulukon alustamiseen tarvittava määrä koodauksia tulee liian suureksi.
FPE pyöräilystäJos näennäissatunnaisen permutaatioalueen P sisällä on joukko M kelvollisia arvoja (esimerkiksi P voisi olla AES-tyyppinen lohkosalaus), FPE-algoritmi voidaan generoida lohkosalauksesta käyttämällä lohkosalausta toistuvasti. kunnes tulos on yksi kelvollisista arvoista ( M sisällä ).
CycleWalkingFPE(x) { jos "P"(x) on "M":n elementti palauta "P"(x) muu paluu CycleWalkingFPE(''P''(x)) }Kierros loppuu varmasti. (Koska P kulkee peräkkäin ja joukko on äärellinen, P :n toistuva käyttö muodostaa syklin, joten alkaen pisteestä M :ssä sykli pysähtyy kohtaan M. )
Tämän menetelmän etuna on, että joukon M alkioita ei tarvitse yhdistää kokonaislukujen sekvenssin {0,…, N -1} alkioihin. Haittapuolena on suuri iteraatioiden määrä jokaiselle operaatiolle, jos M on paljon pienempi kuin joukko P . Jos P on tietyn kokoinen lohkosalaus, kuten AES, M :llä on kova rajoitus , jonka alla tämä menetelmä on tehokas.
Sovelluksen on esimerkiksi salattava 100-bittinen AES-arvo, jotta tulos on erilainen 100-bittinen arvo. Tällä tekniikalla AES-128-ECB-salausta voidaan käyttää, kunnes se saavuttaa arvon, jossa 28 tärkeintä bittiä on yhtä suuri kuin 0, mikä kestää keskimäärin 228 iteraatiota.
FPE perustuu Feistelin verkkoonToinen tapa luoda FPE-algoritmi perustuu Feistel-verkon käyttöön . Feistelin verkko tarvitsee näennäissatunnaisten arvojen lähteen jokaisen kierroksen avaimille, ja AES-algoritmin lähtöä voidaan käyttää arvoina. Tuloksena oleva Feistel-rakenne on kestävä, jos käytetään riittävästi patruunoita. [2]
Eräs tapa toteuttaa Feistel-verkkoon ja AES:ään perustuva FPE-algoritmi on käyttää AES-algoritmin lähdössä sitä bittimäärää, joka olisi yhtä suuri kuin Feistel-verkon vasemman tai oikean puoliskon pituus. Esimerkiksi, jos avaimelle tarvitaan 24-bittinen arvo, voidaan käyttää AES-algoritmin lähdön viimeisiä 24 bittiä.
Tämä menetelmä ei välttämättä säilytä muotoa, mutta Feistel-verkkoa on mahdollista käyttää uudelleen samalla tavalla kuin pyöräilymenetelmää, kunnes muoto säilyy. Säätämällä Feistel-verkkoon tulevan tulon kokoa, silmukka saadaan valmiiksi nopeasti. Mahdollisia 16-numeroisia luottokorttinumeroita on esimerkiksi 10 16 (10 16 = 2 53,1 ). 54-bittistä Feistel-verkkoa ja pyöräilyä käyttämällä on mahdollista luoda FPE-algoritmi, joka salaa melko nopeasti.
Useat muut FPE-rakenteet luottavat erilaisiin menetelmiin standardinmukaisen salausmoduulin lähdön lisäämiseksi salattavaan dataan. Modulo n:n lisääminen on melko ilmeinen ratkaisu FPE-salausongelmaan.
Kohdassa 8 FIPS 74, Federal Information Processing Standards Publication 1981 Guidelines for Implementing and Use the NBS Data Encryption Standard , [3] kuvaa tapaa käyttää DES-salausalgoritmia, joka säilyttää datamuodon lisäämällä modulo n. Tämä standardi poistettiin 19. toukokuuta 2005, joten menetelmä on vanhentunut standardin kannalta.
Toinen tapa säilyttää muotoa säilyttävä salaus oli Peter Gutmanin "Encrypting data with a range range of value", [4] jossa käsiteltiin algoritmia, joka myös suoritti modulo n -lisäyksen tietyin säädöin.
Michael Brightwellin ja Harry Smithin teos "Using Datatype-Preserving Encryption to Enhance Data Warehouse Security" [5] kuvaa tapaa käyttää DES - salausalgoritmia, joka säilyttää selväkielisen datamuodon. Tämä menetelmä ei käytä modulo n -lisäystä.
Mihir Bellarin ja Thomas Ristenpartin teos "Format-Preserving Encryption" [6] kuvaa "lähes tasapainoisen" Feistel-verkon käyttöä suojatun FPE-algoritmin luomiseksi.
Ulf Mattssonin Format Controlling Encryption using Datatype Preserving Encryption [7] kuvaa muita menetelmiä FPE-algoritmin toteuttamiseksi.
Esimerkki FPE-algoritmista on FNR ( Flexible Naor and Reingold ). [kahdeksan]
NIST on julkaissut erikoisjulkaisun 800-38G, DRAFT Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption. [9] Tässä julkaisussa määritellään kolme menetelmää FF1, FF2 ja FF3. Yksityiskohdat näistä sekä patentti- ja testipakkaustiedot löytyvät NIST Block Cipher Modes Development -verkkosivustolta. [kymmenen]
Symmetriset salausjärjestelmät | |
---|---|
Suoratoista salauksia | |
Feistelin verkko | |
SP verkko | |
Muut |
Hash-funktiot | |
---|---|
yleinen tarkoitus | |
Kryptografinen | |
Avainten luontitoiminnot | |
Tarkista numero ( vertailu ) | |
Hashes |
|