Il termine PRF è menzionato nella documentazione del protocollo IKE (Internet Key Exchange) .
-
Che cos'è un PRF?
-
Qual è la differenza tra un PRF e una funzione di hash?
-
Quali PRF vengono utilizzati nel protocollo IKE?
Il termine PRF è menzionato nella documentazione del protocollo IKE (Internet Key Exchange) .
Che cos'è un PRF?
Qual è la differenza tra un PRF e una funzione di hash?
Quali PRF vengono utilizzati nel protocollo IKE?
PRF è l'acronimo di Funzione PseudoRandom . Un PRF mapperà l'input in output in modo deterministico (lo stesso input esegue sempre lo stesso output per lo stesso PRF) che appare indistinguibile dalla casualità a un utente malintenzionato che non conosce gli interni del PRF (e non ha ancora visto il PRF elaborare esattamente lo stesso input, anche se hanno visto il PRF elaborare molti input simili).
Generalmente i PRF sono presi a caso da una famiglia PRF. Puoi pensare a PRF Family come a una funzione che prende un input addizionale (un seed casuale, anche a volte indicato come una chiave casuale) che seleziona un particolare PRF (che mappa l'input in output). Quindi, se nella tua famiglia PRF hai un seme di 128 bit, ci sono 2 ^ 128 (340,282,366,920,938,463,463,374,607,431,768,211,456) possibili PRF che potresti usare da quella famiglia. Questo è in contrasto con le funzioni hash, dove ci sono solo dozzine di funzioni hash comunemente usate (MD5, SHA-1, SHA-256, SHA-512, ecc.).
Supponiamo che tu sapessi che "Hello"
è mappato a 8b1a9953c4611296a827abf8c47804d7
(in esadecimale). Un utente malintenzionato può rapidamente capire che sto utilizzando MD5 e che quindi potrei generare output per qualsiasi input che desideravano.
Tuttavia, HMAC - MAC basato su hash è una famiglia di PRF. Quindi se prendi la costruzione HMAC : H(K1 ++ H(K2 ++ m))
, dove ++
significa concatenazione, H
è una normale funzione di hash, e K1
e K2
sono due chiavi che sono definite per essere derivate dalla stessa chiave usando K1 = K XOR 0x5c5c...5c
e K2 = K XOR 0x3636...36
. Ora, se ti dicessi che il mio PRF (un HMAC che usa una particolare chiave K) mappa "Hello"
in 53a7e60d93a6853780d622f3b5bd641f
non ci sarebbe alcun modo per un attaccante (che non conosce K, ma potrebbe sapere che sto usando HMAC- MD5) per generare l'output per un input mai visto prima.
I PRF effettivi usati nel protocollo IKE sono negoziati tra il client e il server. Quelli specificati nella RFC per IKEv2 sono HMAC_MD5, HMAC_SHA1, HMAC_TIGER (tre HMAC generati da diversi funzioni hash) e AES128_XCBC . Nell'originale IKE RFC, i PRF da utilizzare non erano definiti: "Attualmente non sono definite funzioni pseudo-casuali . ".
Notare che spesso la differenza tra una famiglia PRF e una famiglia PRF non viene esplicitata. Nella letteratura avrete spesso due input (una chiave, un testo in chiaro) e genererete un input.
Nella crittografia vengono visualizzati due concetti correlati: PRP (PseudoRandom Permutation) e PRG (PseudoRandom Generator).
Una permutazione pseudocasuale (PRP) è un PRF che è uno-a-uno - che è un tipo specifico di PRF in cui ogni output del PRF (utilizzando la stessa chiave) può essere generato solo da esattamente un input. Ciò consente di invertire la funzione e annullare l'effetto dell'applicazione della sua applicazione - in questo modo è possibile applicare il PRP (richiedendo la conoscenza di una chiave segreta) al testo in chiaro per creare un testo cifrato e quindi applicare l'inverso del PRP alla testo cifrato (utilizzando la chiave segreta) per decrittografarlo. Ad esempio, un codice a blocchi come AES-128 è un PRP - accetta un blocco di input di 128 bit e una chiave a 128 bit e associa il blocco di testo in chiaro a un unico blocco di testo cifrato a 128 bit. Quindi queste operazioni possono essere invertite per mappare il blocco di testo cifrato al blocco di testo in chiaro originale (utilizzando l'inverso di AES-128 con quella chiave segreta).
Un generatore pseudocasuale (PRG) è una funzione che emette un flusso di bit che appare casuale basato su un seme iniziale (ad es. una chiave casuale). Questo bit-stream può essere XORed con un lungo messaggio di testo in chiaro per crittografarlo (quindi il testo cifrato appare casuale), e quindi è possibile decodificarlo tramite XORing del flusso di bit del PRG con il testo cifrato. Un modo per generare un PRG è prendere un codice a blocchi come AES-128 e usarlo in modalità CTR. Cioè tu cripti blocchi successivi incrementati di uno con la stessa chiave, e quindi concatena l'output insieme, ad esempio PRG(K) = AES(K, 0) ++ AES(K, 1) ++ AES(K, 2) ++ AES(K, 3) ++ ...
(dove ++
significa concatenazione).