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.