• obliczamy ki = G(t, z) mod q, G jest wybraną funkcją jednokierunkową,
• podstawiamy z = (1 + z + ki) mod 2b.
— Zwracamy {k\, /c2, • • •, km}.
Funkcja jednokierunkowa oparta o SHA1. Wejściem dla algorytmu jest
160-bitowy ciąg £ i 6-bitowy ciąg c, 160 < b < 512, a wyjściem 160-bitowy
ciąg oznaczany G (£, c).
— Dzielimy £ na pięć 32-bitowych bloków: H\ || i/2 || H3 || Hą || H$.
— Dopełniamy zerami c by otrzymać 512-bitowy blok: X = c || O512-6.
— Dzielimy X na 16 32-bitowych słów: xqX\ ... x\s i ustalamy m = 1.
— Obliczamy krok 4 algorytmu SHA1 co zmienia Hi.
— Zwracamy konkatenację: G (£,c) = H1 || H2 || H3 || Hą || H$.
Funkcja jednokierunkowa oparta o DES. Wejściem dla algorytmu są
160-bitowe ciągi £ i c, a wyjściem 160-bitowy ciąg oznaczany G(t,ć).
— Dzielimy £ na pięć 32-bitowych bloków: £ = £o£i... £4.
— Dzielimy c na pięć 32-bitowych bloków: c = coci... C4.
— Dla i od 0 do 4 podstawiamy Xi = U®
— Dla i od 0 do 4 wykonujemy:
• 6l = C(j-1-4) mod 5) ^2 = mod 5-
• di = Xi, Cl2 = mod 5 ® 4) mod 5‘
• A = cii || a2, B = bl || 62, gdzie oznacza 24 mniejznaczące bity b\.
• Używamy DES z kluczem B by zaszyfrować A: yi = DE Sb (^)-
• Dzielimy yi na 32-bitowe bloki: Li || Ri.
— Dla i od 0 do 4 podstawiamy: Zi = Li © i?(i+2) mod 5 © L(i+S) mod 5-
— Zwracamy konkatenację: G(t,c) = zq || z\ || Z2 || 23 || 24 ||.
3.3 RS A — przykład szyfru asymetrycznego
RSA jest bardzo ważnym algorytmem, wśród szyfrów asymetrycznych odgrywa on podobną rolę jak DES wśród symetrycznych. Powstał on zaraz po DESie, a jego nazwa pochodzi od nazwisk pomysłodawców: Rivesta, Shamira i Adlemana.
Jest to bardzo mocna metoda zabezpieczania danych i niewiele spośród przeprowadzanych od lat prób jej pokonania odniosło sukces. Rezultatem tego było wydłużenie klucza, ponieważ jedną z zalet algorytmu RSA jest możliwość wyboru dowolnej długości stosowanych kluczy. Należy co jakiś czas sprawdzać jaka długość uznawana jest przez specjalistów za bezpieczną, co związane jest z ciągłym wzrostem dostępnych mocy obliczeniowych. Pewną wadą RSA jest jego powolność wynikająca z ilości operacji jakie się nań składają.
Samo szyfrowanie i deszyfrowanie jest rzeczą względnie łatwą. Największa trudność leży w odpowiednim doborze kluczy. W tym celu najpierw losowo wybieramy dwie duże liczby pierwsze p i q. Najlepszą metodą okazuje się wybranie na chybił-trafił jakiejś liczby i sprawdzenie za pomocą testu pierwszości czy nie jest ona złożona. Następnie losowo wybieramy liczbę e taką, żeby e