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