Funkcje i Permutacje Pseudolosowe
Funkcje pseudolosowe to efektywne deterministyczne funkcje, które produkują dane wyjściowe nierozróżnialne od ciągów losowych. Są tworzone na bazie generatorów pseudolosowych, jednak w przeciwieństwie do nich oprócz posiadanego wewnętrznego stanu, przyjmują również dodatkowe dane jako wejście. Dane wejściowe mogą mieć ustaloną i uporządkowaną postać, ale wyjście z funkcji pseudolosowej zawsze powinno sprawiać wrażenie całkowicie losowego ciągu bitów.
Funkcja pseudolosowa, której dane wyjściowe są nierozróżnialne od ciągu losowego, jest nazywana bezpieczną kryptograficznie.
F: K x X -> Y
Analogicznie można zdefiniować pseudolosowe permutacje. Generowane przez nie dane wyjściowe są nierozróżnialne od losowych ciągów danych.
E: K x X -> X
- funkcja E (k, .) jest jednoznaczna
- istnieje efektywny algorytm odwrotny D (k, x)
Permutacja pseudolosowa, której wyjście jest nierozróżnialne od losowego ciągu jest nazywana bezpieczną kryptograficznie. Można dowieść, że bezpieczna kryptograficznie pseudolosowa permutacja zdefiniowana na wystarczająco dużym zbiorze X jest również bezpieczną kryptograficznie funkcją pseudolosową (jest to tak zwane PRF Switching Lemma).
Tworzenie PRF na bazie PRG
Mając dany kryptograficznie bezpieczny generator pseudolosowy G, jest możliwe utworzenie kryptograficznie bezpiecznej funkcji pseudolosowej F.
Jednobitowa funkcja pseudolosowa
Niech G zwraca dwa razy więcej bitów, niż wynosi wielkość jego stanu wewnętrznego:
G: K -> K2
Można zdefiniować jednobitową funkcję pseudolosową:
F: K x {0, 1} -> K
jako:
F(k, b) = G(k)[b]
gdzie:
b może być równe 0 lub 1.
Tak określona funkcja F zwraca pierwszą lub drugą połowę danych wyjściowych tworzonych przez dany generator, bazując na otrzymanym jednym bicie wejściowym.
Jeżeli generator G jest kryptograficznie bezpieczny, to funkcja F również jest kryptograficznie bezpieczna.
Dwubitowa funkcja pseudolosowa
Następnie, posiadany generator G można rozszerzyć, definiując nowy generator G1:
G1: K -> K4
jako:
G1(k) = G(G(k)[0]) || G(G(k)[1])
Analogicznie można teraz zdefiniować rozszerzoną pseudolosową funkcję F1, działającą na podwójnej ilości danych wejściowych:
F1: K x {0, 1}2 -> K
jako:
F1(k, c) = G1(k)[c]
gdzie:
c to dwa dowolne bity.
N-bitowa funkcja pseudolosowa
Zaprezentowaną procedurę można powtórzyć dowolną ilość razy otrzymując dowolnie dużą funkcję pseudolosową. Jest to metoda tworzenia funkcji pseudolosowych nazwana od nazwisk jej twórców Konstrukcją Goldreich-Goldwasser-Micali (ang. Goldreich-Goldwasser-Micali Construction).
Można wykazać, że jeżeli generator G jest kryptograficznie bezpieczny, to bazująca na nim funkcja pseudolosowa działająca na danych wejściowych o długości n bitów i zdefiniowana w sposób przedstawiony powyżej, jest również kryptograficznie bezpieczna.