Zadanie 1: Algorytm One

Transkrypt

Zadanie 1: Algorytm One
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 1: Algorytm One-time pad
1. Wstęp
Celem naszego zadania było stworzenie program szyfrującego oraz deszyfrujący dane
wprowadzone przez użytkownika lub z pliku wykorzystując algorytm One-time pad.
2. Opis algorytmu
Można wyróżnić 2 wersje tego algorytmu:
-wersja binarna (szyfr Vernama)
-wersja znakowa
W wersji binarnej szyfrujemy/deszyfrujemy korzystając z algorytmu Xor. W wersji znakowej
szyfrujemy/deszyfrujemy korzystając z algorytmu Vigenere`a.
Można zatem zadać sobie pytanie dlaczego powyższe algorytmy zapewniają słabe lub średnie
bezpieczeństwo a ten zapewnia bezwarunkowe bezpieczeństwo.
Otóż cała tajemnica tkwi tutaj w założeniach nałożonych na hasło.
Sprawdzone muszą być wszystkie 3 poniższe warunki:
- hasło musi być ciągiem losowym
- hasło musi być jednorazowe
- długość hasła musi być przynajmniej tak samo długa jak długość szyfrowanego tekstu
Przy krótkich tekstach nawet sprawdzenie wszystkich możliwości nie da nam odpowiedzi,
gdyż napastnik otrzyma wiele poprawnych słów i nie będzie w stanie wybrać z nich słowa
właściwego.
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
szyfrującego
Główną częścią programu jest funkcja oneTimePad która szyfruje lub deszyfruje dane.
Argumentami do funkcji są wartość logiczna informująca czy mamy szyfrować lub
deszyfrować dane, ciąg znaków oznaczający wiadomość oraz klucz takich samych lub
większych rozmiarów. Przy szyfrowaniu funkcja sumuje wartość wiadomości oraz klucza i
otrzymujemy wiadomość zaszyfrowaną. Przy deszyfrowaniu od wartości teksu
zaszyfrowanego zostaje odjęta wartość klucza, dzięki czemu otrzymujemy pierwotną
wiadomość.
Klucz możemy wprowadzić sami lub wygenerować przy pomocy funkcji generatePassword
która tworzy losowy ciąg znaków o zadanej długości, oraz zwraca String będący ciągiem tych
znaków.
4. Wnioski
Wykorzystanie tej metody w szyfrowaniu zapewnia całkowite bezpieczeństwo wiadomości.
Ponieważ dla każdej wiadomości istnieje jeden klucz, będący ciągiem losowym. Czyli znając
jedynie tekst zaszyfrowany, możemy dopasować do niego dowolną wiadomość o tej samej
długości jednakże bez unikalnego klucz nie jesteśmy w stanie jej odczytać. Dzięki temu
złamanie szyfru nie jest możliwe nawet poprzez testowanie wszystkich możliwych kluczy
(atak brute force).
Praktyczną wadą algorytmu jest długość klucza, która nie może być mniejsza od długości
wiadomości, jaką nadawca zamierza przesłać. Rutynowe stosowanie szyfrów z kluczem
jednorazowym wymagałoby od nadawcy i odbiorcy wcześniejszego uzgodnienia ogromnego
klucza (bądź ogromnego zbioru kluczy). Problem stanowi zarówno całkowicie losowe
wygenerowanie klucza, jak i jego bezpieczne przekazanie drugiej stronie.
5. Bibliografia
1. http://www.kryptografia.com/algorytmy/onetimepad.html
2. http://pl.wikipedia.org/wiki/Szyfr_z_kluczem_jednorazowym

Podobne dokumenty