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