Kody i szyfry
5. Szyfry i kryptografia
5.5. Funkcja jednokierunkowa
Funkcja f : X  Y , gdzie X, Y są dowolnymi niepustymi zbiorami, jest nazywana funkcją jednokierunkową (ang. one way function) jeśli:
- Dla każdego x  X łatwo potrafimy obliczyć wartość f(x).
- Dla każdego y  f ( X ) , znalezienie takiego x  X , że y = f(x) jest praktycznie nierealizowalne (z uwagi na złożoność obliczeniową problemu).
Nie znamy żadnego dowodu na to, że jakaś funkcja jednokierunkowa w ogóle istnieje. Jesteśmy jednak przekonani, że funkcje jednokierunkowe w przyrodzie istnieją.
A oto trzy kandydatki na funkcje jednokierunkowe. Są to permutacje podzbioru liczb całkowitych Zp . Ogólnie rzecz biorąc jednak funkcja jednokierunkowa nie musi być różnowartościowa.
- Funkcja wykładnicza modulo p (ang. exponentation modulo p), gdzie p jest liczbą pierwszą. Niech p będzie liczbą pierwszą i niech  będzie generatorem grupy multiplikatywnej Zp * . Funkcja wykładnicza modulo p f : Zp *  Zp * jest zdefiniowana dla każdego x  Zp * wzorem
f (x)   x (mod p) ,
- lub wzorem f (x)   x , jeśli mnożenie traktujemy jako mnożenie w Z p . Odwrócenie p Z funkcji f jest dokładnie problemem znalezienia wartości logarytmu dyskretnego w grupie multiplikatywnej Zp * (jeśli y  f (x) , czyli y   x , to x  log y ). Nie są znane efektywne obliczeniowo algorytmy obliczania wartości logarytmu dyskretnego w grupie Zp * .
- Funkcja RSA (ang. RSA function). Niech p, q będą różnymi nieparzystymi liczbami pierwszymi i niech n  p  q . Niech ponadto NWD(e,( p  1)(q  1))  1. Funkcja RSA zdefiniowana jest tak f : Zn  Zn , f (x)  xe (mod n) dla każdego x  Zn .
- Funkcja Rabina. Niech n  p  q gdzie p i q są różnymi liczbami pierwszymi takimi, że p  3(mod 4) i q  3(mod 4) (n jest tzw. liczbą Bluma). Funkcja Rabina f zdefiniowana jest następująco
f : Qn  x  n f (x)  x 2 (mod n)  Q
gdzie Qn  Zn jest tzw. zbiorem reszt kwadratowych modulo n. Można pokazać, że f jest permutacją zbioru Qn . Odwracanie funkcji f, czyli obliczanie pierwiastka kwadratowego w pierścieniu Zn jest dla dużych n praktycznie nierealizowalne, tzn. nie są znane żadne efektywne obliczeniowo algorytmy rozwiązujące ten problem, chyba, ze potrafimy rozłożyć liczbę n na czynniki pierwsze.