Zadanie 3: Algorytm ElGamala
Transkrypt
Zadanie 3: Algorytm ElGamala
Informatyka, studia dzienne, inz. II st. semestr VI Podstawy kryptografii 2011/2012 Prowadzący: dr inż. Przemysław Ignaciuk Data oddania: _________________ poniedziałek, 16:00 Ocena: ________________ Artur Angiel 157797 Piotr Jasiak 157853 Szymon Wawrzyniak 157986 Adam Kucharski 157901 Zadanie 3: Algorytm ElGamala 1. Wstęp Celem naszego zadania było stworzenie program tworzący podpis cyfrowy oraz weryfikujący podpis cyfrowy danych wprowadzonych przez użytkownika lub z pliku wykorzystując algorytm ElGamala. 2. Opis algorytmu Na początku wybierana jest liczba pierwsza p oraz duża liczba g: 1 < g < p − 1 . W idealnym * przypadku g jest generatorem w Z p . Następnie każdy użytkownik A wybiera losowo liczbę a < p − 1 , oblicza h = g a mod p oraz ujawnia g, p, h jako klucz publiczny. Przy tym liczba a jest kluczem prywatnym. Osoba A dokonuje podpisywania konkretnego dokumentu M: 1. A wybiera liczbę r względnie pierwszą z p-1. 2. A oblicza s1 = g r mod p . 3. Ponieważ NWD(r, p-1)=1 to istnieje r’ takie, że r ⋅ r ′ = 1mod ( p − 1) . Oblicza r ′ = r − 1 mod ( p − 1) . = ( M − as1 ) ⋅ r ′ mod ( p − 1) . Tym samym zachodzi M ≡ as1 + rs2 ( mod p − 1) . 4. Następnie oblicza s2 5. A przedstawia ( s1 , s2 ) jako podpis dla M. Przy weryfikacji podisu B sprawdza, czy g M ≡ h s1 s1 2 ( mod p ) . Zauważmy, że s ( ) ⋅ (g ) g M = g as1 + rs 2 + k ( p − 1) ≡ g a s1 r s2 ≡ h s1 s1s 2 ( mod p ) . Podpisy cyfrowe ElGamala posiadają tę niedogodności, że składają się z dwóch liczb tego rozmiaru co p (np. 1024 bit w rozwinięciu dwójkowym). 3. Implementacja Nasza implementacja została przygotowana w języku Java. Język ten pozwala na stworzenie przejrzystego interfejsu użytkownika, a także dość szybką implementację samego algorytmu. Główną częścią programu jest funkcja elGamal która szyfruje lub deszyfruje dane. Argumentami do funkcji są wartość logiczna informująca czy mamy podpisywać lub weryfikować dane, ciąg znaków oznaczający wiadomość, klucz (publiczny przy szyfrowaniu danych lub prywatny przy deszyfrowaniu) oraz podpis. Klucz możemy wygenerować przy pomocy funkcji computeKeysForElGamal która tworzy klucz prywatny i publiczny. 4. Diagram Klas Diagram 1: Diagram klas 5. Instrukcja użycia Po uruchomieniu programu należy wygenerować klucz publiczny i prywaty. Aby to zrobić klikamy Plik > Generuj Klucze, ustawiamy ElGamal naciskamy przycisk Generuj klucze, potem zapisujemy do oddzielnych plików Klucz prywatny i Klucz publiczny. W Funkcja ustawiamy ElGamal, Działanie ustawiamy na Podpisz, w polu wiadomość wpisujemy tekst, klikamy przycisk Otwórz i wybieramy plik z kluczem prywatnym. Klikamy przycisk Podpisz i otrzymujemy w polu Wynik podpis cyfrowy który następnie zapisujemy do pliku. Aby zweryfikować podpis, ustawiamy działanie na Weryfikuj, w polu wiadomość wpisujemy tekst, klikamy przycisk Otwórz (znajdujący się pod polem Klucz pub.) i wybieramy plik z kluczem publicznym, następnie klikamy na przycisk Otwórz (znajdujący się pod polem Podpis) i wybieramy plik z wygenerowanym podpisem cyfrowym. Klikamy Weryfikuj. Jeżeli wiadomość jest identyczna z wcześniejszą wiadomością w polu wynik otrzymamy true w przeciwnym wypadku false. 6. Wnioski Wykorzystanie tej metody w szyfrowaniu zapewnia bardzo wysokie bezpieczeństwo danych. Ponieważ algorytm ElGamala bazuje na trudności obliczenia tzw. dyskretnych logarytmów. Szyfrowanie za każdym razem wykorzystuje losowo wybraną liczbę, co powoduje, że ten sam tekst jawny może być w różny sposób zaszyfrowana. Praktyczną wadą algorytmu jest to że kryptogramy uzyskiwane w wyniku algorytmu ElGamala są dwukrotnie dłuższe od tekstu jawnego. 7. Bibliografia 1. Stinson D. R.: Kryptografia w teorii i w praktyce, Wydawnictwa Naukowo-Techniczne, Warszawa 2005. 2. http://zon8.physd.amu.edu.pl/~tanas/krypt07.pdf 3. http://www.ehaker.com/artykuly-wiecej/3-16/Algorytmy,asymetryczne