In crittografia, una famiglia di funzioni pseudocasuali, o più semplicemente una famiglia PRF (dall'inglese pseudorandom function family), è un insieme di funzioni calcolabili in modo efficiente, tali che nessun algoritmo efficiente possa distinguere (se non con vantaggio trascurabile) tra una funzione scelta casualmente dalla famiglia PRF e una vera funzione casuale. Le funzioni pseudocasuali sono strumenti vitali nella costruzione di molte primitive crittografiche, in particolare i cifrari sicuri; in questo caso si fa spesso riferimento a una particolare sottoclasse delle funzioni pseudocasuali, ovvero le permutazioni pseudocasuali (spesso abbreviate in PRP).
Nelle applicazioni pratiche, i cifrari a blocchi vengono utilizzati nella maggior parte dei casi in cui è necessaria una funzione o una permutazione pseudocasuale; in generale, essi non costituiscono una famiglia di funzioni pseudocasuali, poiché i cifrari a blocchi come AES sono definiti solo per un numero limitato di dimensioni di input e chiave[1].
Definizione formale
[modifica | modifica wikitesto]Si consideri una famiglia di funzioni dove il primo input è la chiave (una volta fissata la chiave , si ha una funzione ), dove . Per semplicità si può assumere .
Una tale famiglia di funzioni è pseudocasuale se sono soddisfatte le seguenti condizioni:
- Per ogni scelta di e , esiste sempre un algoritmo efficiente (in tempo polinomiale) per calcolare .
- Sia la distribuzione uniforme sull'insieme di tutte le funzioni che mappano stringhe di bit in stringhe di bit. Si richiede che e siano indistinguibili dal punto di vista computazionale, dove con si indica il parametro di sicurezza. Cioè, per qualsiasi avversario che può interrogare l'oracolo di una funzione campionata da o , il vantaggio che può distinguere quale tipo di oracolo gli viene dato è trascurabile[2].
Alcune varianti
[modifica | modifica wikitesto]In alcuni contesti è preferibile considerare definizioni più deboli di pseudocasualità; in particolare, si possono definire alcune varianti nelle quali l'attaccante ha accesso a un oracolo per , ma con qualche limitazione.
Funzione pseudocasuale debole
[modifica | modifica wikitesto]L'attaccante ha accesso a un oracolo per che campiona una stringa in modo uniforme e restituisce la coppia . A differenza della definizione originale, quindi, l'attaccante non ha il controllo sulle stringhe di input.
Funzione pseudocasuale non adattiva
[modifica | modifica wikitesto]L'attaccante può interrogare l'oracolo per una sola volta, passando un numero arbitrario di stringhe . L'oracolo restituisce . In questo caso, dunque, la scelta delle stringhe di input deve essere effettuata prima di vedere una qualunque stringa di output.
Funzione pseudocasuale sequenziale
[modifica | modifica wikitesto]L'attaccante accede all'oracolo che alla sua -esima invocazione restituisce .
Permutazione pseudocasuale
[modifica | modifica wikitesto]Una funzione è una permutazione pseudocasuale se:
- è una funzione pseudocasuale
- è biettiva
Nel 1988 Luby e Rackoff hanno dimostrato che è possibile costruire permutazioni pseudocasuali "forti" a partire da funzioni pseudocasuali[3]. La costruzione, che prende il nome degli autori, si basa sulla rete di Feistel.
Costruzioni teoriche
[modifica | modifica wikitesto]È stato dimostrato che le funzioni pseudocasuali esistono se e solo se esistono le funzioni unidirezionali (one-way)[4].
Una famiglia di funzioni pseudocasuali può essere costruita da qualsiasi generatore pseudocasuale (o PRG), usando, ad esempio, la costruzione GGM, che prende il nome da Goldreich, Goldwasser e Micali[5].
Costruzione GGM
[modifica | modifica wikitesto]Dato un generatore pseudocasuale , è possibile creare una PRF . In particolare, siano e rispettivamente la metà sinistra e la metà destra dell'output di . Data una chiave scelta uniformemente nell'insieme e un input di bit, si ha cheè una PRF.
Si noti che tale costruzione non è efficiente poiché richiede invocazioni in sequenza del PRG sottostante. Un'alternativa è stata fornita da Naor e Reingold[6] nel 1997: la loro costruzione, tuttavia, si basa sui sintetizzatori pseudocasuali, un oggetto crittografico apparentemente più difficile da istanziare rispetto a un PRG.
Costruzione nel modello del Random Oracle
[modifica | modifica wikitesto]Nel modello dell'oracolo casuale, assumendo quindi l'esistenza di un oracolo , è possibile definire una PRF nel seguente modo:
Applicazioni
[modifica | modifica wikitesto]Cifrari simmetrici
[modifica | modifica wikitesto]Si può dimostrare[7] che una PRF è sufficiente per costruire un cifrario simmetrico che sia CPA-sicuro. Sia una PRF (eventualmente debole), allora con:
- campiona una chiave di bit in modo uniforme
- genera un crittotesto , campionando in modo uniforme una stringa di bit
- recupera il messaggio
La dimostrazione che il precedente schema sia CPA-sicuro si basa su una riduzione alla sicurezza di : se, infatti, esistesse un attaccante efficiente in grado di rompere in un gioco CPA, allora si potrebbe anche distinguere con un algoritmo efficiente da una funzione veramente casuale.
Un'alternativa
[modifica | modifica wikitesto]La costruzione proposta presenta un crittotesto di lunghezza doppia rispetto all'input. Si può fare a meno di inviare se si adotta una modalità contatore: viene campionata una e una sola volta una stringa di bit in modo uniforme. Quando si vuole cifrare un messaggio si incrementa il contatore da passare all'algoritmo . Tale soluzione richiede che le due controparti mantengano uno stato (il valore di ) per poter funzionare in modo corretto.
Codici autenticatori di messaggio (MAC)
[modifica | modifica wikitesto]Una delle applicazioni più naturali e immediate delle funzioni pseudocasuali è la costruzione dei codici autenticatori di messaggio (o semplicemente MAC). La seguente costruzione è dovuta a Goldreich, Goldwasser e Micali[8]:
- campiona una chiave segreta di bit in modo uniforme. Tale chiave è condivisa tra chi manda il messaggio (Alice) e chi lo riceve (Bob)
- genera l'autenticatore
- verifica che sia uguale a
Derivazione di una chiave
[modifica | modifica wikitesto]Un metodo molto semplice ed efficiente per generare chiavi crittografiche consiste nel passare l'indice i alla funzione pseudocasuale, dopo aver generato una chiave : quindi, . Tale sistema si dimostra sicuro finché la chiave rimane privata e non viene compromessa.
Note
[modifica | modifica wikitesto]- ^ Katz 2008, p. 88.
- ^ Goldreich, def. 3.6.4.
- ^ (EN) Michael Luby e Charles Rackoff, How to Construct Pseudorandom Permutations from Pseudorandom Functions, in SIAM Journal on Computing, vol. 17, n. 2, 1988-04, pp. 373–386, DOI:10.1137/0217022. URL consultato il 9 maggio 2020.
- ^ Johan HÅstad, Russell Impagliazzo e Leonid A. Levin, A Pseudorandom Generator from any One-way Function, in SIAM Journal on Computing, vol. 28, n. 4, 1º gennaio 1999, pp. 1364–1396, DOI:10.1137/S0097539793244708. URL consultato il 23 marzo 2020.
- ^ (EN) Oded Goldreich, Shafi Goldwasser e Silvio Micali, How to construct random functions, in Journal of the ACM, vol. 33, n. 4, 10 agosto 1986, pp. 792–807, DOI:10.1145/6490.6503. URL consultato il 16 gennaio 2020.
- ^ M. Naor e O. Reingold, Number-theoretic constructions of efficient pseudo-random functions, in Proceedings 38th Annual Symposium on Foundations of Computer Science, IEEE Comput. Soc, 1997, pp. 458–467, DOI:10.1109/SFCS.1997.646134. URL consultato il 23 marzo 2020.
- ^ Venturi, p. 114.
- ^ (EN) Oded Goldreich, Shafi Goldwasser e Silvio Micali, On the Cryptographic Applications of Random Functions (Extended Abstract), in Advances in Cryptology, Springer, 1985, pp. 276–288, DOI:10.1007/3-540-39568-7_22. URL consultato il 23 marzo 2020.
Bibliografia
[modifica | modifica wikitesto]- Daniele Venturi, Crittografia nel Paese delle Meraviglie, collana UNITEXT, Springer Milan, 2012, DOI:10.1007/978-88-470-2481-6, ISBN 978-88-470-2480-9. URL consultato il 16 gennaio 2020.
- (EN) Oded Goldreich, Foundations of Cryptography: Basic Tools, Cambridge, Cambridge University Press, 2001, ISBN 978-0-511-54689-1.
- (EN) Jonathan Katz, Introduction to modern cryptography, Chapman & Hall/CRC, 2008, ISBN 978-1-58488-551-1, OCLC 137325053. URL consultato il 16 gennaio 2020.