Algorytmy asymetryczne W algorytmach asymetrycznych stosowane

Transkrypt

Algorytmy asymetryczne W algorytmach asymetrycznych stosowane
Algorytmy asymetryczne
W algorytmach asymetrycznych stosowane są dwa klucze: prywatny oraz publiczny. Klucz
publiczny może zostać przesłany niezabezpieczonym kanałem. Popularnym rozwiązaniem
należącym do grupy algorytmów asymetrycznych jest algorytm RSA. Bezpieczeństwo tego
algorytmu bazuje na trudności rozkładu wystarczająco dużych liczb na czynniki pierwsze oraz
trudności wyznaczenia pierwiastka określonego stopnia z danej liczby. Algorytm może być
stosowany zarówno do szyfrowania jak i podpisywania wiadomości.
Algorytm RSA
Należy wygenerować dwie różne liczby pierwsze p i q. p i q powinny być długości co najmniej 512
bitów. Wyznaczyć n = p*q. Generujemy klucz e, który jest względnie pierwszy
z m =phi(n)=(p-1)(q-1). Tworzymy klucz d, taki że: de = 1 mod m. e jest kluczem publicznym,
d prywatnym.
Szyfrowanie:
c = me mod n
Deszyfrowanie:
m=cd mod n
Podpisywanie:
s = md mod n
Weryfikacja podpisu:
v = se mod n, jeśli v = m: podpis poprawny
Implementacja w Javie
Generacja parametrów p i q może być wykonana przy pomocy klasy BigInteger. Konstruktor
BigInteger(int bitLength, int certainty, Random rnd) umożliwia wygenerowanie wartości losowej o
zadanej długości w bitach, z określonym poziomem pewności, że wygenerowana wartość jest liczbą
pierwszą. Trzecim parametrem jest losowe źródło (SecureRandom).
Klasa BigInteger zapewnia obsługę liczb o dowolnej długości możliwe więc jest wyznaczenie za jej
pomocą wartości m oraz n. Jako początkową wartość klucza e możemy przyjąć 3 i szukamy takiej
wartości, dla której gcd(e,m)=1 (klasa BigInteger dostarcza metodę gcd()). Wyznaczenie wartości
klucza d to wyznaczenie odwrotności e mod m (pomocna może być metoda modInverse()).
Wykonanie operacji stanowiących realizację algorytmu można wykonać za pomocą metody
modPow().
Zadania
1. Zaimplementować algorytm RSA. Wyświetlać wszystkie parametry algorytmu na
standardowym wyjściu. Dla celów testowych można przyjąć niewielkie długości p i q.
2. Przygotować dwa pliki tekstowe o treści:
Student: Jan Kowalski
Przedmiot: Kryptografia i ochrona danych
Ocena: 2.0
3. Wyznaczyć skrót pliku (XOR), wygenerować podpis.
4. Zweryfikować podpis.
5. Dokonać sfałszowania dokumentu (plik2) tak aby podpis nadal był uznawany za poprawny.