Laboratorium Szyfrowanie algorytmami Vernam a oraz Vigenere a z wykorzystaniem systemu zaimplementowanego w układzie programowalnym FPGA. 1. Zasada działania algorytmów Algorytm Vernam a wykorzystuje funkcję logiczna XOR przedstawioną w poniższej tabeli. p q p XOR q 0 0 0 0 1 1 1 0 1 1 1 0 Przykład szyfrowania wersja binarna: Kod do zaszyfrowania : 00110101 Klucz : 11010001 Zaszyfrowany kod : 11100110 Przykład szyfrowania wersja heksadecymalna:
Kod do zaszyfrowania : 35 Klucz Zaszyfrowany kod : D1 : E6 Każdy znak kodu do zaszyfrowania jest szyfrowany odpowiadającym mu znakiem klucza. W wypadku gdyby klucz był za krótki, wykorzystywany zostaje ponowie począwszy od pierwszego znaku. Deszyfracja polega na ponownym użyciu algorytmu. Zasada działania algorytmu Vigenere a jest oparta na tablicy zawierającej alfabet. Każdy znak tekstu zostaje przesunięty o znak z klucza. Pierwszy znak tekstu jawnego oraz pierwszy znak z klucza należy znaleźć w wierszu oraz kolumnie oznaczonych kolorem żółtym w tabeli na następnej stronie, nie ma znaczenia które z nich będzie pionowo czy poziomo, zaszyfrowany znak będzie na przecięciu. Przykład szyfrowania: Tekst do zaszyfrowania : bardzotajnytekst Klucz Zaszyfrowany tekst : tajne : uaaqdhtjwrrtnxwm
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y W przykładowym szyfrowaniu, klucz jest zbyt krótki aby zaszyfrować tekst. W takim wypadku przepisywany jest ponownie, tak samo jak w algorytmie Vernam a. Zobrazowanie szyfrowania znajduje się w tabeli na następnej stronie. Przyjęto poziomo tekst, a pionowo klucz. W przykładzie pokazano kodowanie pierwszych sześciu znaków z przykładowego szyfrowania.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Deszyfrowanie polega na operacji odwrotnej. Dla uproszczenia implementacji można wykorzystać inne rozwiązanie. Odwrócić klucz tzn. dla każdej litery klucza wykonać operację: Klucz2=(26-Klucz)mod 26.
Odwrócenie klucza z przykładowego szyfrowania: Klucz Klucz2 : tajne : harnw Zaszyfrowaną informacje należy zaszyfrować ponownie kluczem odwrotnym. Deszyfracja przykładu: Zaszyfrowany tekst Klucz2 Odszyfrowany tekst : uaaqdhtjwrrtnxwm : harnw : bardzotajnytekst Wersja algorytmu z autokluczem, polega to na szyfrowaniu kluczem tylko pierwszego znaku tekstu, a następne litery są pobierane z tekstu jawnego. Przykład szyfrowania: Tekst do zaszyfrowania : bardzotajnytekst Klucz Zaszyfrowany tekst : n : obrucnhtjwlrxocl Deszyfracja działa podobnie jak w klasycznym algorytmie, pierwszy znak zaszyfrowanego tekstu szyfrujemy odwróconym kluczem, pozostałe dopiero co zdeszyfrowanymi znakami po uprzednim odwróceniu.
2. Uruchomienie systemu Do przeprowadzenia ćwiczeń wykorzystywany jest system szyfrujący, zaimplementowany w układzie FPGA. Jest on napisany z wykorzystaniem języka opisu sprzętu Verilog. Niewątpliwą zaletą języka Verilog jest możliwość zrównoleglenia operacji. Przykładowo przypisanie wartości trzem zmiennym w językach klasycznych następuje zawsze sekwencyjne jak widać na pierwszym rysunku poniżej. Dzięki implementacji na macierzach bramek, które pracują równocześnie, w języku Verilog przypisania dodatkowo można wykonać równolegle. Równoległe przypisanie wartości przedstawiono na drugim rysunku. A<=0; B<=1; C<=2; A<=0; B<=1; C<=2;
System jest zbudowany z trzech modułów oraz pliku ucf. Główny moduł sterujący który zawiera w sobie algorytmy to SZYFRATOR. Moduł PS2 obsługuje Przyciski na klawiaturze, a moduł VGA ekran monitora przedstawia to schemat działania programu poniżej. Przyciski na klawiaturze PS2 VGA Ekran monitora Przełączniki SW0 SW2 SZYFRATOR UCF Diody LD0 LD7 Do uruchomienia systemu potrzebny jest układ programowalny firmy Xilinx Spartan 3E XC3S500E-5FG320, klawiatura, monitor oraz komputer z zainstalowanym programem Xilinx impact. Jak podłączyć komponenty przedstawia fotografia oraz schemat zamieszszcony na następnej stronie.
Monitor Komputer programujący Spartan 3E Klawiatura Zasilacz
Do uruchomienia układu Spartan służy switch zaznaczony kolorem czerwonym na zdjęciu poniżej. Do zaprogramowania układu służy program Xilinx impact. Należy postępować jak pokazano na kolejnych zdjęciach. Należy wybrać create new project, następnie pierwszą opcję i Finish.
Program automatyczne wykryje podłączone urządzenie. Jeśli wszystko jest poprawnie podłączone, zobaczymy okno jakie widać na rysunku poniżej. Do pierwszego urządzenia xc3s500e należy wybrać plik szyfrator.bit, w dwóch następnych cancel, po czym potwierdzić wybór. Następnie należy kliknąć prawym przyciskiem myszy na urządzeniu xc3s500e i wybierać opcję Program.
Jeżeli programowanie zakończyło się sukcesem, wyświetli się napis Program Succeeded.
Po tym etapie można zacząć prace z systemem. Jeżeli kolor tekstu na monitorze jest inny niż biały, należy go zmienić, służą do tego switche SW0, SW1, SW2, oznaczone na zdjęciu układu FPGA kolorem zielonym. W pozycji 1, 1, 1, tekst będzie biały. Należy postępować zgodnie z instrukcją napisaną na monitorze. Długość tekstu jest ograniczona do 26 znaków. W razie błędu jest możliwość użycia przycisku Backspace. 3. Zadania do zrealizowania 1. Wykorzystując tylko długopis oraz kartkę papieru zaszyfruj algorytmem Vernam a liczby: 00110101, 10110111, ba, 6f, a88 Jako klucz przyjmij liczbę 11100011. Liczby heksadecymalne zamień na binarne, każda liczba heksadecymalna odpowiada czterem bitom (0 0000, 1 0001 f - 1111). 2. Uruchom system i zaszyfruj wyniki z zad 1. Ponowne kodowanie odszyfruje tekst, weryfikując wykonanie zad 1. 3. Wykorzystując tylko długopis oraz kartkę papieru zaszyfruj algorytmem Vigenere a swoje nazwisko, jako klucz przyjmij swoje imię. 4. Wykonaj to samo działanie co w zad 2, tym razem użyj wersji algorytmu z autokluczem. Kluczem niech będzie pierwsza litera imienia. 5. Za pomocą systemu sprawdź wyniki z zadań 2, 3. 6. Odszyfruj tekst: dowvivljoseacbvbuv wykorzystując system. Został zaszyfrowany algorytmem Vigenere a, pierwotny klucz to: kryptografia. Pamiętaj że do odszyfrowania należy odwrócić klucz.