P O L I T E C H N I K A S Z C Z E C IŃSKA W Y D Z I A Ł I N F O R M A T Y K I



Podobne dokumenty
Kryptografia na procesorach wielordzeniowych

2 Kryptografia: algorytmy symetryczne

Zarys algorytmów kryptograficznych

PROBLEMATYKA BEZPIECZEŃSTWA SIECI RADIOWYCH Algorytm szyfrowania AES. Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

PROBLEMATYKA BEZPIECZEŃSTWA SIECI RADIOWYCH Algorytm szyfrowania AES. Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Bezpieczeństwo systemów komputerowych. Algorytmy kryptograficzne (1) Algorytmy kryptograficzne. Algorytmy kryptograficzne BSK_2003

n = p q, (2.2) przy czym p i q losowe duże liczby pierwsze.

Bezpieczeństwo systemów komputerowych

Laboratorium nr 1 Szyfrowanie i kontrola integralności

Szyfrowanie informacji

PuTTY. Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Inne interesujące programy pakietu PuTTY. Kryptografia symetryczna

Wprowadzenie do PKI. 1. Wstęp. 2. Kryptografia symetryczna. 3. Kryptografia asymetryczna

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 5

Podpis elektroniczny

Algorytmy asymetryczne

Zamiana porcji informacji w taki sposób, iż jest ona niemożliwa do odczytania dla osoby postronnej. Tak zmienione dane nazywamy zaszyfrowanymi.

Architektury akceleratorów kryptograficznych opartych o układy programowalne. Marcin Rogawski

Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA

Systemy Operacyjne zaawansowane uŝytkowanie pakietu PuTTY, WinSCP. Marcin Pilarski

Szyfry Strumieniowe. Zastosowanie wybranych rozwiąza. zań ECRYPT do zabezpieczenia komunikacji w sieci Ethernet. Opiekun: prof.

1.1. Standard szyfrowania DES

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 8

II klasa informatyka rozszerzona SZYFROWANIE INFORMACJI

Bezpieczeństwo danych, zabezpieczanie safety, security

2.1. System kryptograficzny symetryczny (z kluczem tajnym) 2.2. System kryptograficzny asymetryczny (z kluczem publicznym)

Opis efektów kształcenia dla modułu zajęć

Marcin Szeliga Dane

Zastosowania informatyki w gospodarce Wykład 5

Programowanie współbieżne Wykład 2. Iwona Kochańska

16. Taksonomia Flynn'a.

Szyfry kaskadowe. Szyfry kaskadowe

Authenticated Encryption

Zadanie 1: Protokół ślepych podpisów cyfrowych w oparciu o algorytm RSA

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Szyfry kaskadowe. permutacyjnej (SPP).

Laboratorium nr 5 Podpis elektroniczny i certyfikaty

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Projektowanie. Projektowanie mikroprocesorów

Zadania badawcze prowadzone przez Zakład Technik Programowania:

Szyfrowanie RSA (Podróż do krainy kryptografii)

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

Wasze dane takie jak: numery kart kredytowych, identyfikatory sieciowe. kradzieŝy! Jak się przed nią bronić?

Definicje. Algorytm to:

Spis treści. Przedmowa... 9

Algorytmy i Struktury Danych

Technologie informacyjne - wykład 12 -

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

Wprowadzenie do zagadnień bezpieczeńśtwa i kryptografii

Zagadnienia egzaminacyjne INFORMATYKA. stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią

1. Maszyny rotorowe Enigma

WSIZ Copernicus we Wrocławiu

Wykład 4 Temat: Algorytm symetryczny Twofish: cele projektowane, budowa bloków, opis algorytmu, wydajność algorytmu.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 4 Bezpieczeństwo przesyłu informacji; Szyfrowanie

Podstawy programowania

Zarządzanie pamięcią w systemie operacyjnym

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 7

Programowanie w języku C++ Grażyna Koba

Hosting WWW Bezpieczeństwo hostingu WWW. Dr Michał Tanaś (

WYKORZYSTANIE WEWNĘTRZNYCH GENERATORÓW RC DO TAKTOWANIA MIKROKONTROLERÓW AVR

INFORMATYKA Pytania ogólne na egzamin dyplomowy

OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI

Dr inż. hab. Siergiej Fialko, IF-PK,

Wersja dokumentacji1.01. TeleToken API

PLAN ZARZĄDZANIA WYMAGANIAMI PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU>

Bezpieczeństwo informacji w systemach komputerowych

Praktyczne aspekty wykorzystania nowoczesnej kryptografii. Wojciech A. Koszek

Numeryczna algebra liniowa

Szyfrowanie danych w SZBD

Historia modeli programowania

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Bezpieczeństwo systemów komputerowych. Algorytmy kryptograficzne. Algorytmy kryptograficzne (1) Algorytmy kryptograficzne. Szyfry przestawieniowe

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

DOBÓR ŚRODKÓW TRANSPORTOWYCH DLA GOSPODARSTWA PRZY POMOCY PROGRAMU AGREGAT - 2

Zagadnienia egzaminacyjne INFORMATYKA. Stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

Bezpieczeństwo kart elektronicznych

Wykład 3 Bezpieczeństwo przesyłu informacji; Szyfrowanie

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Bezpieczeństwo danych i elementy kryptografii - opis przedmiotu

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

POLITECHNIKA WARSZAWSKA Wydział Elektroniki i Technik Informacyjnych. Instytut Telekomunikacji Zakład Podstaw Telekomunikacji

Algorytm. a programowanie -

Projektowanie systemów za pomocą języków wysokiego poziomu ESL

Czym jest kryptografia?

Natalia Gorynia-Pfeffer STRESZCZENIE PRACY DOKTORSKIEJ

Rachunek prawdopodobieństwa projekt Ilustracja metody Monte Carlo obliczania całek oznaczonych

Najprostszy schemat blokowy

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Definicje. Najprostszy schemat blokowy. Schemat dokładniejszy

Technologia informacyjna

OCHRONA INFORMACJI W SYSTEMACH I SIECIACH KOMPUTEROWYCH SYMETRYCZNE SZYFRY BLOKOWE

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2016/2017

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Algorytmy i struktury danych

Kryptografia szyfrowanie i zabezpieczanie danych

Metody szyfrowania danych

PROGRAMOWALNE STEROWNIKI LOGICZNE

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 11

Transkrypt:

P O L I T E C H N I K A S Z C Z E C IŃSKA W Y D Z I A Ł I N F O R M A T Y K I K A T E D R A T E C H N I K P R O G R A M O W A N I A mgr inŝ. Dariusz Burak Metoda automatycznego zrównoleglenia wy branych algorytmów szyfrowania R o z p r a w a d o k t o r s k a P R O M O T O R : prof. dr hab. inŝ. Włodzimierz Bielecki SZCZECIN 2007

STRESZCZENIE Szybkość szyfrowania i deszyfrowania danych jest najwaŝniejszą po bezpieczeństwie cechą funkcjonalną algorytmów szyfrowania. UmoŜliwienie coraz szybszego szyfrowania oraz deszyfrowania wiąŝe się ściśle z zastosowaniem do tego celu nowoczesnego sprzętu o olbrzymich mocach obliczeniowych. Nieustanny postęp technologiczny w dziedzinie architektur procesorów doprowadził do powszechnego stosowania w takich przypadkach komputerów równoległych ze wspólną pamięcią charakteryzujących się większymi mocami obliczeniowymi w porównaniu z maszynami sekwencyjnymi. Algorytmy sekwencyjne naleŝy zrównoleglić, aŝeby efektywnie wykorzystywać moc obliczeniową tego typu komputerów. Metoda automatycznego zrównoleglenia wybranych algorytmów szyfrowania, będąca tematem niniejszej rozprawy doktorskiej polega na zrównolegleniu poszczególnych algorytmów szyfrowania w procesie kompilacji kodu źródłowego, a zatem prowadzone badania zmierzają do utworzenia kompilatora zrównoleglającego wyspecjalizowanego na algorytmy szyfrowania, który umoŝliwiać ma przekształcenie sekwencyjnego kodu źródłowego algorytmów szyfrowania w kod równoległy przy jednoczesnym zapewnieniu dotychczasowego poziomu bezpieczeństwa operacji szyfrowania i deszyfrowania danych, gdyŝ Ŝaden z istniejących kompilatorów zrównoleglających ogólnego przeznaczenia z uwagi na swoje ograniczenia nie moŝe być zastosowany do efektywnego zrównoleglenia algorytmów szyfrowania Opracowano i szczegółowo opisano trzy procedury zrównoleglenia pętli odnoszące się do poszczególnych typów algorytmów szyfrowania, które w powiązaniu z techniką kompilacji iteracyjnej umoŝliwiają efektywne zrównoleglenia wybranych algorytmów szyfrowania.

Streszczenie Opracowaną metodę zweryfikowano w dwóch aspektach, poprawności szyfrowania i deszyfrowania danych z zastosowaniem algorytmów równoległych oraz efektywności ich przetwarzania załączając wyniki przeprowadzonych badań eksperymentalnych. Niniejsza praca zawiera bibliotekę kodów źródłowych zrównoleglonych algorytmów szyfrowania w standardzie OpenMP. Słowa kluczowe: kompilatory zrównoleglające, kompilacja iteracyjna, algorytmy szyfrowania, analiza zaleŝności danych, OpenMP Adres autora: D a r i u s z B u r a k P o l i t e c h n i k a S z c z e c ińska Wydział Informatyki Katedra Technik Programowania ul. śołnierska 49, 71-210 Szczecin e-mail: dburak@wi.ps.pl

Pragnę najserdeczniej podziękować mojemu promotorowi Panu profesorowi Włodzimierzowi Bieleckiemu za cenną pomoc merytoryczną w realizacji pracy naukowej

S P I S T R EŚCI SPIS RYSUNKÓW... VI SPIS TABEL...VII 1. WSTĘP... 1 1.1. STAN PROBLEMU... 1 1.2. CEL I TEZA BADAWCZA PRACY... 5 1.3. STRUKTURA PRACY... 7 2. ALGORYTMY SZYFROWANIA... 9 2.1. BLOKOWE ALGORYTMY SZYFROWANIA... 10 2.1.1. Algorytm DES... 13 2.1.2. Algorytm Triple DES... 13 2.1.3. Algorytm IDEA... 13 2.1.4. Algorytm Rijndael (AES)... 14 2.1.5. Algorytm RC5... 14 2.1.6. Algorytm Blowfish... 15 2.1.7. Algorytm GOST... 15 2.1.8. Algorytm LOKI91... 15 2.2. TRYBY PRACY SZYFRÓW BLOKOWYCH... 16 2.3. SZYFRY STRUMIENIOWE... 17 2.3.1. Algorytm SEAL... 18 2.4. SZYFRY ASYMETRYCZNE... 18 2.4.1. Algorytm RSA... 19 2.5. IMPLEMENTACJE ALGORYTMÓW SZYFROWANIA... 19 2.6. PODSUMOWANIE... 20 i

Spis treści 3. PROBLEMATYKA ZRÓWNOLEGLENIA ALGORYTMÓW SZYFROWANIA... 22 3.1. ARCHITEKTURY MASZYN RÓWNOLEGŁYCH... 22 3.1.1. Architektura systemów z pamięcią wspólną... 25 3.2. PARADYGMATY PROGRAMOWANIA RÓWNOLEGŁEGO... 26 3.3. KOMPILATORY ZRÓWNOLEGLAJĄCE... 28 3.3.1. ZaleŜności w pętlach... 28 3.3.2. Wykrywanie zaleŝności... 30 3.3.3. Petit... 31 3.3.4. Transformacje pętli... 32 3.3.5. Przegląd współczesnych kompilatorów zrównoleglających... 38 3.4. ŚRODOWISKA PROGRAMOWANIA RÓWNOLEGŁEGO... 44 3.4.1. OpenMP... 45 3.4.2. Miary efektywności zrownoleglenia... 50 3.5. PODSUMOWANIE... 53 4. METODA AUTOMATYCZNEGO ZRÓWNOLEGLENIA WYBRANYCH ALGORYTMÓW SZYFROWANIA... 54 4.1. STRATEGIE ZRÓWNOLEGLENIA ALGORYTMÓW SEKWENCYJNYCH... 55 4.2. STRATEGIE ZRÓWNOLEGLENIA ALGORYTMÓW SZYFROWANIA... 56 4.3. KONCEPCJA KOMPILACJI ALGORYTMÓW SZYFROWANIA... 57 4.4. ZAŁOśENIA WSTĘPNE METODY... 60 4.5. PROCEDURA 1... 61 4.6. PROCEDURA 2... 70 4.7. PROCEDURA 3... 72 4.8. KOMPILACJA ITERACYJNA Z ZASTOSOWANIEM PROCEDUR ZRÓWNOLEGLENIA PĘTLI.. 74 4.8.1. Profiler kodu... 76 4.8.2. Kontroler transformacji kodu... 77 4.8.3. Moduł transformacji kodu... 78 4.9. PODSUMOWANIE... 82 ii

Spis treści 5. ALGORYTMY AUTOMATYCZNEGO ZRÓWNOLEGLENIA ALGORYTMÓW SZYFROWANIA... 83 5.1. STRATEGIA ZRÓWNOLEGLENIA ALGORYTMÓW SZYFROWANIA... 84 5.2. ALGORYTM DES... 84 5.2.1. Dane wejściowe... 84 5.2.2. Pierwszy przebieg kompilacji iteracyjnej... 85 5.2.3. Kolejne przebiegi kompilacji iteracyjnej... 86 5.2.4. Postać równoległa pętli... 88 5.3. ALGORYTM TRIPLE DES... 91 5.3.1. Dane wejściowe... 91 5.3.2. Pierwszy przebieg kompilacji iteracyjnej... 91 5.3.3. Kolejne przebiegi kompilacji iteracyjnej... 92 5.3.4. Postać równoległa pętli... 94 5.4. ALGORYTM IDEA... 95 5.4.1. Dane wejściowe... 95 5.4.2. Pierwszy przebieg kompilacji iteracyjnej... 96 5.4.3. Kolejne przebiegi kompilacji iteracyjnej... 97 5.4.4. Postać równoległa pętli... 99 5.5. ALGORYTM RIJNDAEL (AES)... 100 5.5.1. Dane wejściowe... 101 5.5.2. Pierwszy przebieg kompilacji iteracyjnej... 101 5.5.3. Kolejne przebiegi kompilacji iteracyjnej... 102 5.5.4. Postać równoległa pętli... 105 5.6. ALGORYTM RC5... 106 5.6.1. Dane wejściowe... 106 5.6.2. Pierwszy przebieg kompilacji iteracyjnej... 106 5.6.3. Kolejne przebiegi kompilacji iteracyjnej... 108 5.6.4. Postać równoległa pętli... 110 5.7. ALGORYTM BLOWFISH... 111 iii

Spis treści 5.7.1. Dane wejściowe... 111 5.7.2. Pierwszy przebieg kompilacji iteracyjnej... 111 5.7.3. Kolejne przebiegi kompilacji iteracyjnej... 112 5.7.4. Postać równoległa pętli... 115 5.8. ALGORYTM GOST... 115 5.8.1. Dane wejściowe... 116 5.8.2. Pierwszy przebieg kompilacji iteracyjnej... 116 5.8.3. Kolejne przebiegi kompilacji iteracyjnej... 117 5.8.4. Postać równoległa pętli... 119 5.9. ALGORYTM LOKI91... 120 5.9.1. Dane wejściowe... 121 5.9.2. Pierwszy przebieg kompilacji iteracyjnej... 121 5.9.3. Kolejne przebiegi kompilacji iteracyjnej... 122 5.9.4. Postać równoległa pętli... 125 5.10. ALGORYTM CTR... 125 5.10.1. Dane wejściowe... 125 5.10.2. Pierwszy przebieg kompilacji iteracyjnej... 126 5.10.3. Kolejne przebiegi kompilacji iteracyjnej... 127 5.10.4. Postać równoległa pętli... 128 5.11. ALGORYTM CBC... 128 5.11.1. Dane wejściowe... 129 5.11.2. Pierwszy przebieg kompilacji iteracyjnej... 130 5.11.3. Kolejne przebiegi kompilacji iteracyjnej... 130 5.11.4. Postać równoległa pętli... 132 5.12. ALGORYTM CFB... 132 5.12.1. Dane wejściowe... 133 5.12.2. Pierwszy przebieg kompilacji iteracyjnej... 133 5.12.3. Kolejne przebiegi kompilacji iteracyjnej... 134 iv

Spis treści 5.12.4. Postać równoległa pętli... 136 5.13. ALGORYTM OFB... 136 5.13.1. Dane wejściowe... 136 5.13.2. Pierwszy przebieg kompilacji iteracyjnej... 137 5.13.3. Kolejne przebiegi kompilacji iteracyjnej... 138 5.14. ALGORYTM SEAL... 139 5.14.1. Dane wejściowe... 139 5.14.2. Pierwszy przebieg kompilacji iteracyjnej... 139 5.14.3. Kolejne przebiegi kompilacji iteracyjnej... 140 5.14.4. Postać równoległa pętli... 141 5.15. ALGORYTM RSA... 141 5.15.1. Dane wejściowe... 142 5.15.2. Pierwszy przebieg kompilacji iteracyjnej... 142 5.15.3. Kolejne przebiegi kompilacji iteracyjnej... 143 5.15.4. Postać równoległa pętli... 144 5.16. PODSUMOWANIE... 144 6. BADANIA EKSPERYMENTALNE ALGORYTMÓW RÓWNOLEGŁYCH... 146 6.1. WNIOSKI... 151 7. PODSUMOWANIE... 153 7.1. WNIOSKI KOŃCOWE... 154 DODATEK A. POSTAĆ MATEMATYCZNA WYBRANYCH ALGORYTMÓW SZYFROWANIA... 156 DODATEK B. CHARAKTERYSTYKA WYKORZYSTYWANEGO SPRZĘTU 167 DODATEK C. KODY ŹRÓDŁOWE ZRÓWNOLEGLONYCH ALGORYTMÓW SZYFROWANIA... 168 BIBLIOGRAFIA... 169 v

SPIS RYSUNKÓW Rysunek 2.1. Schemat struktury ogólnej szyfrów blokowych... 12 Rysunek 2.2. Schemat struktury ogólnej szyfrów strumieniowych... 18 Rysunek 3.1. Architektura systemów wieloprocesorowych z pamiecią wspólną.... 23 Rysunek 3.2. Architektura systemów wieloprocesorowych z pamiecią rozproszoną.... 24 Rysunek 3.3. Model fork-and-join... 48 Rysunek 4.1. Schemat działania tradycyjnego kompilatora optymalizującego... 58 Rysunek 4.2. Schemat działania iteracyjnego kompilatora optymalizującego... 59 Rysunek 4.3. Schemat iteracyjnej kompilacji optymalizującej algorytmów szyfrowania.... 75 Rysunek 4.4.a. Schemat sposobu profilowania kodu w pierwszej iteracji kompilacji... 76 Rysunek 4.4.b. Schemat sposobu profilowania kodu w ostatniej iteracji kompilacji... 76 Rysunek 4.5. Schemat funkcjonowania transformatora kodu.... 78 Rysunek 4.6.a Transformacje cząstkowe. Procedura 1.... 80 Rysunek 4.6.b Transformacje cząstkowe. Procedura 2.... 80 Rysunek 4.6.c Transformacje cząstkowe. Procedura 3.... 80 vi

SPIS TABEL Tabela 2.1. Cechy charakterystyczne wybranych szyfrów blokowych... 16 Tabela 3.1. Cechy charakterystyczne kompilatorów zrównoleglających: SUIF, Parafrase-2 oraz Polaris...41-43 Tabela 4.1. Transformacje pętli- podsumowanie... 82 Tabela 5.1. Przebieg kompilacji iteracyjnej algorytmu DES... 87 Tabela 5.2. Przebieg kompilacji iteracyjnej algorytmu Triple DES... 93 Tabela 5.3. Przebieg kompilacji iteracyjnej algorytmu IDEA... 98 Tabela 5.4. Przebieg kompilacji iteracyjnej algorytmu Rijndael (AES)... 104 Tabela 5.5. Przebieg kompilacji iteracyjnej algorytmu RC5... 109 Tabela 5.6. Przebieg kompilacji iteracyjnej algorytmu Blowfish... 114 Tabela 5.7. Przebieg kompilacji iteracyjnej algorytmu GOST... 119 Tabela 5.8. Przebieg kompilacji iteracyjnej algorytmu LOKI91... 124 Tabela 5.9. Wyniki kompilacji iteracyjnej zrównoleglonych algorytmów szyfrowania... 145 Tabela 6.1. Przyspieszenia pracy operacji szyfrowania dla pliku file_large.dat.... 148 Tabela 6.2. Przyspieszenia pracy operacji deszyfrowania dla pliku file_large.dat.... 148 Tabela 6.3. Przyspieszenia pracy algorytmów szyfrowania dla pliku file_large.dat... 149 Tabela 6.4. Przyspieszenia pracy operacji szyfrowania dla pliku file_small.dat... 149 Tabela 6.5. Przyspieszenia pracy operacji deszyfrowania dla pliku file_small.dat... 150 Tabela 6.6. Przyspieszenia pracy algorytmów szyfrowania dla pliku file_small.dat... 150 Tabela A.1. Charakterystyka systemu SGI Altix 3700... 167 vii

1 1. WSTĘP Rozdział niniejszy stanowi wprowadzenie do obranej problematyki badawczej. W punkcie 1.1. przedstawiono uzasadnienie podjęcia tematu wraz ze skrótowym opisem obecnego stanu wiedzy w zakresie tematyki prowadzonych badań. W punkcie 1.2. postawiono tezę badawczą pracy, zdefiniowano cel pracy, wyznaczając przy tym zakres prowadzonych badań oraz prezentując narzędzia programowe niezbędne do ich realizacji, jak i metodykę prowadzonych badań, a takŝe sposób ich weryfikacji. Punkt 1.3. poświęcono przedstawieniu struktury pracy wraz z krótkim opisem treści poszczególnych jej rozdziałów. 1.1. Stan problemu NajwaŜniejszą po bezpieczeństwie cechą funkcjonalną algorytmów szyfrowania z punktu widzenia uŝytkownika jest szybkość szyfrowania oraz deszyfrowania danych. W dobie społeczeństwa informacyjnego wraz z gwałtownym rozprzestrzenianiem się i rozwojem sieci komputerowych, zarówno globalnych, jak i korporacyjnych, a w następstwie tego lawinowym zwiększeniem ilości przesyłanych informacji poprzez pojedynczego uŝytkownika sieci, zapewnienie odpowiedniej prędkości szyfrowania oraz deszyfrowania informacji, czyli de facto skracanie czasu potrzebnego na jej zaszyfrowanie oraz odszyfrowanie jest bardzo istotnym problemem mającym duŝe znaczenie praktyczne. W związku z tym nawet niewielka róŝnica pomiędzy prędkościami poszczególnych szyfrów lub implementacji danego szyfru przy identycznym poziomie ich bezpieczeństwa moŝe spowodować wybór przez 1

Wstęp uŝytkownika szyfru szybszego. W celu sprostania wymogom stawianym współczesnym systemom bezpieczeństwa sieci komputerowych w aspekcie prędkości ich działania prowadzone są prace w kierunku zwiększenia szybkości szyfrowania oraz deszyfrowania danych zarówno w warstwie sprzętowej, jak i programowej. W dziedzinie sprzętowej moŝliwości są następujące: zwiększenie mocy obliczeniowej procesora przetwarzającego dane, zastosowanie specjalizowanych komponentów sprzętowych. Wada główna pierwszego rozwiązania wiąŝe się z istnieniem nieusuwalnego ograniczenia mocy obliczeniowej pojedynczej jednostki przetwarzającej, która moŝe nie sprostać wymogom czasu rzeczywistego. Inne ograniczenia spowodowane są wzrostem ciepła wytwarzanego przez tranzystory przypadającego na jednostkę powierzchni dla procesorów o olbrzymich mocach obliczeniowych, jak równieŝ wielkością oraz szybkością pamięci, która musi być dostosowana do parametrów działania procesorów. Istnieje natomiast szereg prac opisujących skuteczne zastosowanie zarówno programowalnych matryc bramek (FPGAs), jak i rzadziej występujących wskutek braku elastyczności w odniesieniu do algorytmu specjalizowanych układów scalonych (ASICs) dla zwiększenia szybkości szyfrowania oraz deszyfrowania poszczególnych algorytmów szyfrowania (np. DES, IDEA, AES, RSA), między innymi [1], [2], [3], [4], [5], [6]. Oprócz implementacji sprzętowych zaprojektowanych dla tradycyjnych komputerów sekwencyjnych moŝliwe są równieŝ wyspecjalizowane implementacje sprzętowe z wykorzystaniem wielu procesorów, opisane np. w [7], [8]. Tego typu rozwiązania naleŝy potraktować jako alternatywne w stosunku do podejścia zaproponowanego w ramach niniejszej pracy. Opcje dostępne w dziedzinie programowej to: zwiększenie szybkości algorytmów sekwencyjnych, zrównoleglenie algorytmów szyfrowania. Zwiększenie szybkości algorytmów sekwencyjnych jest moŝliwe poprzez opracowanie nowych algorytmów, szybszych od dotychczas stosowanych (istotną wadą jest w tym przypadku duŝa czasochłonność opracowania, weryfikacji oraz wdroŝenia nowych algorytmów), albo poprzez optymalizację kodu źródłowego istniejących algorytmów poprzez np. wbudowanie w niego instrukcji napisanych w języku niskiego poziomu (tj. w języku Asembler). 2

Wstęp Ostatnia z opcji, czyli zrównoleglenie algorytmów szyfrowania stanowi obszar, w którego obrębie prowadzone są badania w ramach niniejszej pracy. O aktualności wykorzystania maszyn wieloprocesorowych z pamięcią dzieloną świadczy dodatkowo zaobserwowany na przestrzeni ostatnich kilku lat ogromny postęp technologiczny w dziedzinie architektury komputerów równoległych. Objawia się on między innymi wprowadzeniem na rynek oprócz udoskonalanych z kaŝdą nową wersją maszyn wieloprocesorowych z procesorami jednordzeniowymi, równieŝ maszyn wieloprocesorowych z procesorami wielordzeniowymi, w przypadku których jednostki obliczeniowe pracują w ramach większego układu i w związku z tym opóźnienia w komunikacji pomiędzy nimi istotnie maleją. Dynamiczny rozwój technologii sprzętowej nie przekłada się niestety w sposób bezpośredni na znaczące zwiększenie szybkości szyfrowania i deszyfrowania informacji, poniewaŝ obecnie stosowane algorytmy szyfrowania to typowe algorytmy sekwencyjne zaprojektowane i zaimplementowane pod kątem rozwiązań technologicznych starszego typu, ukierunkowane początkowo jedynie na implementacje sprzętowe (DES), mające nierzadko po kilkanaście, a nawet kilkadziesiąt lat (np. algorytm DES został przyjęty jako standard federalny w 1976 roku (FIPS PUB46) [9]). Nie uwzględniają one specyfiki oraz uwarunkowań związanych z nowymi technologiami komputerowymi, a w efekcie nie wykorzystują w pełni ich moŝliwości obliczeniowych. Wynikająca stąd potrzeba ulepszenia obecnego oprogramowania w zakresie algorytmów szyfrowania była jednym z decydujących impulsów do rozpoczęcia badań w ramach niniejszej pracy. MoŜliwe są dwa odmienne podejścia do zrównoleglenia algorytmów: metody ręcznego zrównoleglenia, metody automatycznego zrównoleglenia. Metody ręcznego zrównoleglenia polegają na zrównolegleniu kodu źródłowego stanowiącego implementację algorytmu sekwencyjnego w oparciu o szczegółową analizę tego kodu. Zagadnienie to jest skomplikowane, gdyŝ w przypadku architektur komputerów równoległych program moŝe być niedeterministyczny, jeśli nie zostaną uwzględnione zaleŝności danych, w przeciwieństwie do architektur komputerów sekwencyjnych. Wyrazem tego jest to, Ŝe kaŝde uruchomienie programu napisanego dla takiej architektury moŝe mieć inny przebieg, a efektem jest istotne skomplikowanie procesu uruchomienia (debugowania), poniewaŝ powtarzalność wyników ma w tym przypadku fundamentalne znaczenie. W związku z powyŝszym 3

Wstęp istotnymi wadami tego podejścia jest znaczna czasochłonność zrównoleglenia, co przekłada się na spore koszty, przy czym istotnym wymogiem są tu równieŝ duŝe doświadczenie i wysokie kwalifikacje programisty. Metoda automatycznego zrównoleglenia podjęta w ramach niniejszej pracy polega na zrównolegleniu sekwencyjnych algorytmów szyfrowania w procesie kompilacji kodu źródłowego danego algorytmu. W związku z tym, z załoŝenia jest to metoda szybka, tania oraz prosta w obsłudze. Jak juŝ wcześniej wspomniano istnieją rozmaite implementacje sprzętowe poszczególnych algorytmów szyfrowania z wykorzystaniem wielu procesorów, brakuje natomiast analogicznych, efektywnych implementacji programowych. Prowadzone w ramach niniejszej pracy badania zorientowane są na wypełnienie tej luki poznawczej poprzez zastosowanie dynamicznie rozwijanych od początku lat 90-ych ubiegłego wieku metod zrównoleglenia pętli programowych, opisanych w wielu publikacjach, między innymi w [10], [11], [12], na podstawie których zostały utworzone kompilatory maszyn równoległych ogólnego przeznaczenia, zarówno akademickie, m.in. SUIF (Stanford University) [13], Parafrase-2 (University of Illinois) [14], Polaris (University of Illinois) [16], PARADIGM (University of Illinois) [15], CHAOS/PARTI (University of Maryland) [17], jak i komercyjne, np. PGHPF (Portland Group Inc.) [18], ORC (Intel) [19]. Wszystkie wymienione wyŝej kompilatory posiadają jednak powaŝne wady, co ma swoje przełoŝenie na stosunkowo niską jakość generowanego przez nie kodu równoległego, przy czym w części z nich brak jest ponadto zorientowania na popularne obecnie języki programowania, C lub C++. Niniejsza praca leŝy w dziedzinie nauk technicznych i dotyczy dyscypliny informatyka. Problematyka w niej poruszana mieści się w zakresie kryptografii, przetwarzania równoległego oraz technik kompilacji. Kompilator jest to program odczytujący kod źródłowy napisany w języku źródłowym i tłumaczący go na równowaŝny program docelowy, działający w fazach, które po kolei przekształcają program z jednej postaci w inną, a do jego typowych elementów zalicza się [97], [99]: analizator leksykalny, analizator syntaktyczny, analizator semantyczny, generator kodu pośredniego, 4

Wstęp optymalizator kodu (kompilator optymalizujący), generator kodu. W praktyce jednak, niektóre fazy mogą być łączone [97], a ponadto optymalizator kodu moŝe występować dodatkowo równieŝ w ramach preprocesora. Wyniki otrzymane w ramach niniejszej pracy dotyczą optymalizatora kodu, gdyŝ obszar uzyskanej nowej wiedzy mieści się w zakresie: analizy przepływu sterowania, analizy przepływu danych, przekształceń (transformacji) kodu wynikających z tejŝe analizy stanowiąc rozwinięcie zagadnienia automatycznego zrównoleglenia algorytmów sekwencyjnych w obszarze algorytmów szyfrowania. 1.2. Cel i teza badawcza pracy Istnieją dziesiątki metod zrównoleglenia pętli programowych [71], z których kaŝda posiada pewne ograniczenia, a co za tym idzie, zakres ich efektywnego zastosowania sprowadza się do pewnych, ściśle określonych typów pętli. Brak jest natomiast metody uniwersalnej, efektywnej dla pętli o dowolnej postaci. Wynika to z olbrzymiej ilości problemów do rozwiązania oraz ich duŝej złoŝoności w przypadku tak postawionego zagadnienia, a jednym z dotkliwie odczuwalnych skutków jest dotychczasowy brak, pomimo licznych prób, skutecznego kompilatora maszyn równoległych ogólnego przeznaczenia. Ograniczenie dziedziny problemu do algorytmów szyfrowania pozwala w znacznej mierze uprościć zagadnienie i dokonać trafnego doboru najbardziej adekwatnych metod zrównoleglenia pętli do poszczególnych konstrukcji kodu źródłowego algorytmów szyfrowania, dla których wymagane jest efektywne zrównoleglenie. W związku z powyŝszym celem niniejszej pracy jest opracowanie oraz weryfikacja metody i algorytmów automatycznego zrównoleglenia algorytmów szyfrowania reprezentatywnych dla kryptografii symetrycznej i asymetrycznej zapisanych w postaci kodów źródłowych w języku C. Prowadzone badania słuŝą wykazaniu prawdziwości następującej tezy badawczej: 5

Wstęp MoŜliwe jest opracowanie metody i algorytmów automatycznego zrównoleglenia algorytmów szyfrowania reprezentatywnych dla kryptografii symetrycznej i asymetrycznej zapisanych w postaci kodów źródłowych w języku C pozwalających zmniejszyć czas i koszty tworzenia programów równoległych oraz uzyskać wystarczającą w praktyce jakość kodu. Algorytmy automatycznego zrównoleglenia poszczególnych algorytmów szyfrowania opisano w [20], [21], [22], [23], [24], [25], [26], [27], [28], [29] i utworzono w oparciu o analizę zaleŝności danych, dobór metod redukcji, bądź usuwania zaleŝności iteracyjnych oraz dobór procedur automatycznego zrównoleglenia pętli programowych, natomiast zarys metody przedstawiono w [30], [108]. RóŜnica pomiędzy metodą automatycznego zrównoleglenia algorytmów szyfrowania oraz algorytmem ich automatycznego zrównoleglenia tkwi w tym, Ŝe w przypadku metody (zgodnie z definicją prof. Tadeusza Kotarbińskiego [96]) mamy do czynienia z zaplanowanym systemem postępowania, którego celem w danym przypadku jest zrównoleglenie algorytmu szyfrowania polegającym na określonym doborze i układzie jego działań składowych i nadającym się do wielokrotnego zastosowania (tj. przeznaczonym dla dowolnego algorytmu szyfrowania, zgodnie z przyjętym zakresem stosowalności metody), natomiast w przypadku algorytmu mamy do czynienia ze sformalizowanym ciągiem logicznie powiązanych instrukcji, których wykonanie pozwoli na przetworzenie danych wejściowych (tj. sekwencyjnego algorytmu szyfrowania) w dane wyjściowe (tj. zrównoleglony program implementujący dany algorytm). Opracowana metoda ma szeroki zakres stosowalności zarówno w odniesieniu do typów algorytmów szyfrowania, trybów pracy algorytmów szyfrowania (wzięto pod uwagę popularne obecnie algorytmy szyfrowania: szyfry blokowe: DES, Triple DES, IDEA, AES, RC5, Blowfish LOKI91, GOST, szyfr strumieniowy SEAL, szyfr asymetryczny RSA oraz standardowe tryby pracy szyfrów blokowych: ECB, CBC, CFB, CTR), jak równieŝ typów maszyn wieloprocesorowych (od komputerów o duŝych mocach obliczeniowych- klasy SGI, Sun, Cray do komputerów klasy PC opartych na architekturze wieloprocesorowej lub wielordzeniowej zawierających róŝną ilość procesorów oraz rdzeni). Dane wejściowe zarówno metody, jak i algorytmów automatycznego zrównoleglenia algorytmów szyfrowania stanowi kod źródłowy sekwencyjnego algorytmu szyfrowania zaimplementowany w języku C. Zaproponowana metoda, jak 6

Wstęp równieŝ poszczególne algorytmy zawierają ściśle określony zestaw kroków, których realizacja pozwala w pierwszej kolejności przeprowadzić analizę zaleŝności danych dla pętli, następnie usunąć zaleŝności danych blokujące przetwarzanie równoległe, a w końcu w efektywny sposób zrównoleglić kod źródłowy otrzymany na wejściu. Analiza zaleŝności danych była wspomagana tam, gdzie było to moŝliwe specjalnym narzędziem do wyznaczania zaleŝności iteracyjnych- programem Petit [31], będącym jednym z komponentów Project Omega opracowanego w University of Maryland [32]. Wszystkie algorytmy równoległe zaimplementowano zgodnie ze standardem programowania dla maszyn równoległych OpenMP [33], [34]. Weryfikacja algorytmów zrównoleglonych posiada dwa aspekty: poprawność obliczeń oraz zwiększenie ich wydajności w porównaniu z aplikacjami sekwencyjnymi i dokonana jest w oparciu o dane uzyskane dla maszyny wieloprocesorowej zawierającej rozmaitą ilość wątków (dwa, cztery, osiem oraz szesnaście wątków) dla danych wejściowych o zróŝnicowanym rozmiarze, od rozmiaru danych rzędu kilkuset kilobajtów do rzędu kilku megabajtów. 1.3. Struktura pracy Struktura rozprawy przedstawia się następująco. Rozdział 1 jest wprowadzeniem do tematyki poruszanej w ramach niniejszej pracy i przedstawiono w nim uzasadnienie wyboru tematu, tło omawianych zagadnień, cel, tezę badawczą oraz strukturę pracy. W rozdziale 2 poruszono zagadnienia teoretyczne z dziedziny kryptografii związane z algorytmami szyfrowania uwzględniając między innymi ich procedury szyfrowania oraz deszyfrowania, cechy charakterystyczne oraz implementacje, w celu lepszego zrozumienia procesu zrównoleglenia omówionego w rozdziale 4 oraz rozdziale 5. W rozdziale 3 przedstawiono zagadnienia teoretyczne związane z przetwarzaniem równoległym w aspekcie zarówno sprzętowym jak i programowym. Omówiono zagadnienia związane z kompilatorami zrównoleglającymi, przedstawiono środowiska programowania równoległego ze szczególnym uwzględnieniem standardu OpenMP oraz stosowane miary oceny efektywności aplikacji równoległych. W rozdziale 4 podano szczegółowy opis wraz z załoŝeniami wstępnymi metody automatycznego zrównoleglenia wybranych algorytmów szyfrowania. Metoda 7

Wstęp oparta jest na autorskich procedurach zrównoleglenia algorytmów szyfrowania opracowanych zgodnie z przyjętą strategią zrównoleglenia algorytmów sekwencyjnych uwzględniającą specyfikę algorytmów szyfrowania oraz technice kompilacji iteracyjnej. W rozdziale 5 opisano proces automatycznego zrównoleglenia rozpatrywanych w ramach zakresu niniejszej pracy algorytmów szyfrowania wraz z podziałem na kolejne jego etapy, zgodnie z opracowaną metodą ich zrównoleglenia przedstawioną w rozdziale 4. W kolejnym rozdziale poświęconym przeprowadzonym badaniom eksperymentalnym przedstawiono wyniki wszystkich badań eksperymentalnych z zastosowaniem równoległych algorytmów szyfrowania wraz z wnioskami z tych badań. W rozdziale 7 sformułowano wnioski końcowe dotyczące realizacji podjętych w pracy zagadnień. Praca niniejsza zawiera ponadto trzy dodatki: dodatek A, w którym przedstawiono postać matematyczną poszczególnych algorytmów szyfrowania, dodatek B zawierający dane techniczne sprzętu wykorzystanego do przeprowadzenia badań eksperymentalnych oraz dodatek C (na płycie CD), gdzie zgromadzono kody źródłowe algorytmów zrównoleglonych. 8

2 2. ALGORYTMY SZYFROWANIA W celu zrozumienia specyficznych wymagań stawianych współczesnym aplikacjom słuŝącym do szyfrowania oraz deszyfrowania danych uŝytecznym jest przedstawienie niezbędnych podstaw teoretycznych dotyczących algorytmów szyfrowania, zastrzegając przy tym jednocześnie, Ŝe dostarczone w ramach niniejszej pracy informacje mają charakter zwięzły i nie wyczerpują poruszanych zagadnień, natomiast bardziej szczegółowy ich opis znaleźć moŝna, między innymi w następujących monografiach: [35], [36] i [37]. Utajnianie cennych informacji jest naturalną potrzebą człowieka Ŝyjącego w społeczności ludzkiej. Nauką bazującą na tej elementarnej potrzebie ludzkiej jest kryptografia (gr. kryptós- ukryty, gráphein- pisać) będąca sztuką zabezpieczania wiadomości [35]. Kryptograficzne metody zabezpieczenia wiadomości polegają zazwyczaj na jej zaszyfrowaniu, czyli zapisaniu w postaci niezrozumiałej dla osób postronnych, a jednocześnie łatwo dostępnej dla osób upowaŝnionych. Podstawowym narzędziem słuŝącym do tego celu jest algorytm szyfrowania zwany równieŝ szyfrem (hebr. saphar- liczyć). Istnieje znaczna ilość rozmaitych szyfrów, które moŝna podzielić na szyfry klasyczne oraz szyfry współczesne. Badania przeprowadzone w ramach niniejszej pracy poświęcono jedynie szyfrom współczesnym, z uwagi na to, Ŝe mają obecnie szerokie zastosowanie oraz obiecujące perspektywy na przyszłość. Nowoczesna kryptografia zgodnie z regułą Kerckhoffa rozwiązuje kwestie bezpieczeństwa nie za pomocą tajnego algorytmu, ale za pomocą tajnego klucza (oznaczanego zwykle literą K), który moŝe przyjąć jedną z wielu wartości ze swojej 9

Algorytmy szyfrowania przestrzeni kluczy (ang. key space) w celu szyfrowania lub deszyfrowania wiadomości [35]. Istnieją dwie grupy współczesnych algorytmów szyfrowania, w których stosuje się klucze [35]: algorytmy symetryczne, algorytmy asymetryczne. Podstawowa róŝnica pomiędzy nimi dotyczy sposobu uŝywania kluczy. W przypadku algorytmów symetrycznych operujemy kluczem (lub kluczami) prywatnym (tajnym), który nie moŝe dostać się w niepowołane ręce, gdyŝ na jego tajności opiera się bezpieczeństwo algorytmu, natomiast w przypadku algorytmów asymetrycznych mamy do czynienia z dwoma kluczami, jednym dostępnym dla kaŝdego, zwanym kluczem publicznym (jawnym), drugim- kluczem prywatnym (tajnym) [35]. Szyfry symetryczne dzielą się z kolei na [37]: szyfry blokowe szyfry strumieniowe. RóŜnica pomiędzy szyframi blokowymi i strumieniowymi polega na tym, Ŝe szyfry blokowe operują na stałym przekształceniu duŝych bloków tekstu jawnego, podczas gdy szyfry strumieniowe operują na zmieniającym się w czasie przekształceniu na pojedynczych znakach tekstu jawnego [38]. W kolejnych punktach pracy zostaną oddzielnie omówione szyfry blokowe, tryby pracy szyfrów blokowych, szyfry strumieniowe, szyfry asymetryczne oraz implementacje algorytmów szyfrowania. 2.1. Blokowe algorytmy szyfrowania Blokowy algorytm szyfrowania przekształca poszczególne bloki bitów o długości n reprezentujące strumień informacji do zaszyfrowania (tekst jawny) w odpowiadające im bloki bitów takiej samej długości reprezentujące strumień szyfrogramu, zaleŝne od parametru K będącego równieŝ ciągiem bitów (klucz prywatny) o długości k. Odwzorowanie powyŝsze moŝna zapisać w postaci matematycznej: F } n n K ( ) :{0,1} {0,1, [2.1] 10

Algorytmy szyfrowania przy czym naleŝy zaznaczyć, Ŝe odwzorowanie to jest bijekcją (posiada odwzorowanie odwrotne F 1 ( ) ). K Zgodnie ze wzorem 2.1 parametrami operacyjnymi szyfru blokowego są: blok wiadomości jawnej X (w przypadku szyfrowania) lub szyfrogramu C (w przypadku deszyfrowania)- długości n-bitów (zwykle długości 64 lub 128 bitów), k-bitowy klucz prywatny K. Szyfrowanie oraz deszyfrowanie przebiegają w ramach następujących kroków: wybór klucza sesyjnego K, podział tekstu jawnego (szyfrogramu) na bloki o długości n-bitów (w przypadku, gdy ostatni blok ma mniejszą długość konieczne jest jego uzupełnienie do pełnej długości), {X 1,, X t }- w przypadku szyfrowania, {C 1,, C t }- w przypadku deszyfrowania, szyfrowanie (deszyfrowanie) właściwe polegające na wykonywaniu funkcji F ( ) ( F 1 ( ) w przypadku deszyfrowania) dla kaŝdego K K bloku tekstu jawnego (w przypadku deszyfrowania- dla kaŝdego bloku szyfrogramu) oparte na zastosowaniu jednego z trybów pracy szyfrów blokowych (omówionych w ramach punktu 2.2 niniejszej pracy). Bezpieczeństwo szyfrów blokowych realizowane jest nie tylko poprzez stosowanie kluczy prywatnych, ale takŝe poprzez dostatecznie skomplikowane i ogólnie dostępne funkcje F ( ). Zgodnie z powszechnie przyjętą zasadą budowy szyfrów K blokowych głównym komponentem funkcji F ( ) jest r-krotne (r jest liczbą rund danego algorytmu) złoŝenie pewnego przekształcenia f ( ), gdzie i= 1, 2,,r, zwanego funkcją rundową [37]. Funkcja rundowa posiada zatem r parametrów w postaci kluczy rundowych K i otrzymywanych z klucza K za pomocą specjalnego algorytmu generowania kluczy rundowych. Funkcja rundowa f ( ) działająca na kolejne bloki wejściowe X 1,,X t stanowi złoŝenie szeregu prostych operacji: nieliniowych (oznaczanych S i )- podstawień (zastępowania ciągu bitów podbloków bloku X i innymi ciągami bitów) zwykle zwanych skrzynkami podstawieniowymi (ang. S-box), liniowych (oznaczanych L i )- permutacji bitów bloku X i. K K i K i 11

Algorytmy szyfrowania Skomplikowana funkcja F ( ) stanowi wynik wielokrotnego złoŝenia K stosunkowo prostej funkcji f ( ) będącej z kolei odpowiednim złoŝeniem podstawień K i i permutacji bitów w ramach bloków. Bezpieczeństwo szyfru blokowego zaleŝy nie tylko od operacji wykonywanych w ramach warstwy nieliniowej oraz liniowej funkcji f ( ), ale równieŝ od trzeciego parametru operacyjnego szyfrów blokowych- ilości wykonywanych rund. Więcej rund algorytmu oznacza większe jego bezpieczeństwo, jak równieŝ dłuŝszy czas wykonywania operacji szyfrowania oraz deszyfrowania danych. Schemat struktury ogólnej blokowego algorytmu szyfrowania przedstawiono na rys. 2.1. K i blok wejściowy klucz prywatny 1... r F i ( ) 1 algorytm funkcja rundowa... generowania... kluczy rundowych r blok wyjściowy Rysunek 2.1. Schemat struktury ogólnej szyfrów blokowych PoniŜej przedstawiono opis działania ośmiu szyfrów blokowych uwaŝanych za algorytmy mocne kryptograficznie, wielokrotnie poddawanych kryptoanalizie, wyselekcjonowanych pod kątem ich reprezentatywności, przy czym w ramach dokonywanego wyboru kierowano się następującymi czynnikami: obecna popularność zastosowań, specyficzne cechy budowy, dostępność implementacji programowych. Wszystkie z prezentowanych poniŝej algorytmów szyfrowania spełniają powyŝsze kryteria. 12

Algorytmy szyfrowania 2.1.1. Algorytm DES Data Encryption Standard (DES) to wieloletni standard szyfrowania danych opracowany w IBM, zdefiniowany w normie FIPS PUB 46-3 [39], przyjęty przez NIST w 1976 roku, zastąpiony przez nowy standard szyfrowania AES w 2002 roku. Algorytm DES stanowi modelowy przykład algorytmu blokowego o strukturze sieci Feistela, stanowiąc jednocześnie wzorzec dla projektowania nowszych szyfrów (np. Triple DES, DES-X, G-DES), jak równieŝ bardzo popularny wzorzec do porównań z nowo opracowywanymi szyframi. Obecnie uŝywany jest w aplikacjach, dla których nie są wymagane najmocniejsze zabezpieczenia. Postać matematyczną algorytmu DES przedstawiono w dodatku A (punkt A.1.). 2.1.2. Algorytm Triple DES Algorytm Triple DES to standard szyfrowania zdefiniowany w normie FIPS PUB 46-3 [39] w 1999 roku. Algorytm Triple DES oparty jest na algorytmie DES i stanowi modelowy przykład zastosowania techniki wielokrotnego (w tym przypadku trzykrotnego) szyfrowania bloku danych. Triple DES jest obecnie bardzo popularny i słuŝy między innymi do szyfrowania danych w ramach standardu płatności elektronicznych EMV [40]. Główną wadą algorytmu jest stosunkowo mała szybkość szyfrowania [38]. Postać matematyczną algorytmu Triple DES przedstawiono w dodatku A (punkt A.2.). 2.1.3. Algorytm IDEA Algorytm IDEA (ang. International Data Encryption Algorithm) to obecnie bardzo popularny i jeden z najbezpieczniejszych algorytmów blokowych opracowany w ETH Zürich w latach 1990-91 przez Xuejia Lai i Jamesa Masseya. Algorytm IDEA stanowi modelowy przykład algorytmu blokowego opartego w części o nowatorsko uogólnioną sieć Feistela [37]. Obecnie algorytm stosowany jest między innymi do 13

Algorytmy szyfrowania szyfrowania danych oraz wiadomości przesyłanych pocztą elektroniczną w komercyjnych wersjach programu PGP (ang. Pretty Good Privacy) [41]. Postać matematyczną algorytmu IDEA przedstawiono w dodatku A (punkt A.3.). 2.1.4. Algorytm Rijndael (AES) Algorytm Rijndael jest aktualnym (od 2002 roku) standardem szyfrowania danych AES (ang. Advanced Encryption Standard) zdefiniowanym w normie FIPS-197 [42]. Algorytm został opracowany przez Joana Daemena i Vincenta Rijmena i szczegółowo opisany, jako propozycja do ogłoszonego w 1997 roku konkursu na nowy standard szyfrowania danych [43]. Jest to algorytm oparty na sieci przestawieniowopodstawieniowej (ang. substitution-permutation network (SPN)) o zmiennej długości bloku danych oraz klucza (dostępne są wszystkie kombinacje długości bloku i klucza spośród: 128, 192 oraz 256 bitów). Popularność algorytmu jest obecnie bardzo duŝa, a stosowany jest on, między innymi w wielu rozmaitych protokołach szyfrowania, np. w standardzie WPA2. Zasadę działania algorytmu Rijndael (AES) przedstawiono w dodatku A (punkt A.4.). 2.1.5. Algorytm RC5 Algorytm RC5 jest opracowanym przez Rona Rivesta popularnym obecnie szyfrem blokowym z duŝą liczbą parametrów: długość bloku, długość klucza i ilość rund opartym na strukturze zbliŝonej do sieci Feistela (ang. Feistel-like network). Algorytm RC5 stosowany jest między innymi w protokołach bezpieczeństwa WTLS (ang. Wireless Transport Leser Security) technologii WAP. Stanowi on przykład bardzo elastycznego szyfru z moŝliwością optymalizacji pod kątem stosowanego sprzętu [35], [37], [45]. Postać matematyczną algorytmu RC5 przedstawiono w dodatku A (punkt A.5.). 14

Algorytmy szyfrowania 2.1.6. Algorytm Blowfish Zaprojektowany w 1993 roku przez Bruce a Schneiera algorytm Blowfish to przykład szyfru blokowego o strukturze sieci Feistela, charakteryzujący się znaczną szybkością, prostotą, małymi wymaganiami odnośnie rozmiaru pamięci (nie więcej niŝ 5 kilobajtów) oraz zmienną długością klucza. Algorytm Blowfish stosowany jest w wielu komercyjnych produktach, między innymi w Norton Your Eyes Only i PCCrypto [35], [46]. Postać matematyczną algorytmu Blowfish przedstawiono w dodatku A (punkt A.6.). 2.1.7. Algorytm GOST Algorytm GOST został przyjęty jako państwowy standard szyfrowania danych o numerze 28147-89 w 1989 roku w byłym Związku Radzieckim stanowiąc tam odpowiednik standardu DES. Budowa algorytmu GOST oparta jest na sieci Feistela [35]. Zasada działania algorytmu GOST została przedstawiona w dodatku A (punkt A.7.). 2.1.8. Algorytm LOKI91 Algorytm LOKI91 został opracowany w 1991 roku w Australii i opisany w [48]. Budowa algorytmu LOKI91 oparta jest na sieci Feistela, a sam algorytm stanowi alternatywę dla algorytmu DES [35]. Zasada działania algorytmu LOKI91 została przedstawiona w dodatku A (punkt A.8.). Cechy charakterystyczne zaprezentowanych powyŝej algorytmów zostały przedstawione w tab. 2.1. 15

Algorytmy szyfrowania Tabela 2.1 Cechy charakterystyczne wybranych szyfrów blokowych Nazwa szyfru Rozmiar bloku Ilość Rozmiar klucza Parametry [bit] rund [bit] zmienne DES 64 16 56 brak Triple DES 64 48 168 brak IDEA 64 9 128 brak Rijndael 128 10 128 długość bloku długość klucza ilość rund RC5 64 16 128 długość bloku długość klucza ilość rund Blowfish 64 16 64 brak GOST 64 32 256 brak LOKI91 64 16 64 brak 2.2. Tryby pracy szyfrów blokowych Bezpieczeństwo szyfrowanych danych nie jest jedynie funkcją samego algorytmu szyfrowania, ale równieŝ trybu jego pracy. Szyfry blokowe mogą pracować w róŝnych trybach pracy, w zaleŝności od ich zastosowania. Standardowe tryby pracy szyfrów blokowych są następujące [50]: - tryb elektronicznej ksiąŝki kodowej (ang. electronic codebook (ECB) mode) - tryb wiązania bloków zaszyfrowanych (ang. cipher block chaining (CBC) mode) - tryb sprzęŝenia zwrotnego szyfrogramu (ang. cipher feedback (CFB) mode) - tryb sprzęŝenia zwrotnego wyjściowego (ang. output feedback (OFB) mode) - tryb licznikowy (ang. counter (CTR) mode). Postać matematyczna standardowych trybów pracy szyfrów blokowych została przedstawiona w dodatku A (punkty A.9. A.13.). 16

Algorytmy szyfrowania 2.3. Szyfry strumieniowe Szyfry strumieniowe będące klasą szyfrów symetrycznych działają na ciągach tekstu jawnego i szyfrogramu o wielkości jednego bitu lub jednego bajtu [35]. Wymagają one utworzenia specjalnego klucza strumieniowego z = z 1 z 2 z t. Do wygenerowania i-tego elementu klucza strumieniowego stosuje się funkcję f i, której wartość zaleŝy od klucza szyfrującego K oraz od pierwszych i-1 elementów tekstu jawnego [36]: z i = f i (K, m 1,m 2,, m i-1 ). [2.2] i-ty element klucza strumieniowego (z i ) uŝywa się do szyfrowania i-tego elementu wiadomości jawnej (m i ): c i = e Zi (m i ), [2.3] jak równieŝ do deszyfrowania i-tego elementu szyfrogramu (c i ): m i = e Zi (c i ). [2.4] Parametrami operacyjnymi szyfrów strumieniowych są: długość klucza szyfrującego, ilość rund. Współczesne szyfry strumieniowe oparte są z reguły na liniowych rejestrach przesuwających ze sprzęŝeniem zwrotnym (ang. Linear Feedback Shift Registers (LFSRs)) (np. szyfr A5) i dobrze nadają się do efektywnych implementacji sprzętowych. Innym popularnym podejściem jest zaprojektowanie ich specjalnie pod kątem szybkiej implementacji programowej, jak to ma miejsce w przypadku szyfru SEAL [37]. Schemat struktury ogólnej szyfrów strumieniowych przedstawiono na rys. 2.2. W kolejnych punktach niniejszego rozdziału przedstawiono opis działania reprezentatywnego szyfru strumieniowego- SEAL, przy którego wyborze kierowano się tymi samymi aspektami, jak w przypadku wyboru szyfrów blokowych: reprezentatywnością, obecną popularnością zastosowań, specyficznymi cechami budowy oraz dostępnością implementacji programowych. 17

Algorytmy szyfrowania klucz szyfrujący klucz strumieniowy algorytm generowania klucza strumieniowego XOR szyfrogram tekst jawny Rysunek 2.2. Schemat struktury ogólnej szyfrów strumieniowych 2.3.1. Algorytm SEAL Algorytm SEAL (ang. Software-Optimized Encryption Algorithm) to szyfr strumieniowy autorstwa Philipa Rogawaya i Dona Coppersmitha (IBM) opisany w [52], zaprojektowany specjalnie pod kątem wydajnych implementacji programowych na komputerach 32-bitowych. Algorytm SEAL jest przedstawicielem rodziny funkcji pseudolosowych (ang. pseudo-random function family) i stosowany jest między innymi do szyfrowania dysków [35]. Zasadę działania algorytmu SEAL przedstawiono w dodatku A (punkt A.14.). 2.4. Szyfry asymetryczne Fundamentalna idea kryptografii asymetrycznej została opublikowana w 1976 roku przez Whitfielda Diffie ego i Martina Hellmana w artykule [53]. Zgodnie z tą ideą szyfry asymetryczne zwane takŝe szyframi z kluczem publicznym wykorzystują dwa róŝne klucze (w przeciwieństwie do szyfrów symetrycznych), klucz tajny uŝywany do deszyfrowania szyfrogramu oraz klucz jawny wykorzystywany do szyfrowania tekstu jawnego, przy czym zgodnie z załoŝeniem tego algorytmu niemoŝliwe jest uzyskanie jednego klucza na podstawie znajomości drugiego. Bezpieczeństwo szyfrowania z zastosowaniem szyfrów asymetrycznych jest oparte na jednym z problemów teorii liczb- trudnym obliczeniowo, naleŝącym do klasy problemów NP-zupełnych, jak 18

Algorytmy szyfrowania faktoryzacja wielkich liczb (szyfr RSA) czy obliczanie algorytmów dyskretnych (algorytm ElGamal) [35], [37]. 2.4.1. Algorytm RSA Algorytm RSA jest najpopularniejszym obecnie szyfrem asymetrycznym. Algorytm został odkryty przez Rona Rivesta, Adi Shamira i Leonarda Adlemana w 1977 roku i został opisany w [54]. Bezpieczeństwo szyfrowania w przypadku algorytmu RSA oparte jest na rozkładzie dostatecznie duŝych liczb na czynniki pierwsze, tak aŝeby zadanie to okazało się w praktyce niewykonalne. W algorytmie RSA para kluczy (klucz jawny oraz klucz tajny) jest funkcją pary duŝych liczb pierwszych, zatem uzyskanie tekstu jawnego na podstawie szyfrogramu przy znajomości klucza publicznego jest równoznaczne zadaniu faktoryzacji iloczynu wybranych liczb pierwszych. Algorytm RSA składa się z trzech powiązanych ze sobą elementów: procedury generowania pary kluczy, procedury szyfrowania tekstu jawnego z zastosowaniem klucza publicznego, procedury deszyfrowania szyfrogramu z zastosowaniem klucza tajnego, które przedstawiono w dodatku A (punkt A.15.). Algorytm RSA moŝna usprawnić stosując pewne metody i algorytmy z dziedziny teorii liczb, np. metodę łańcuchowania dodawań (ang. addition chaining) [55], metodę Montgomery ego [56], algorytm Barretta [57], algorytm Euklidesa [55], uogólnienie Eulera małego twierdzenia Fermata [35], chińskie twierdzenie o resztach [35], [37], [55] czy algorytm mnoŝenia Karacuby [58]. 2.5. Implementacje algorytmów szyfrowania Algorytmy szyfrowania mogą być implementowane zarówno programowo, jak i sprzętowo, przy czym oba sposoby implementacji mają właściwe sobie zalety oraz wady. Główną zaletą sprzętowych implementacji algorytmów szyfrowania jest większa ich wydajność niŝ w przypadku implementacji programowych. Implementacje programowe są natomiast stosunkowo tanie, proste w uŝyciu, łatwe do aktualizacji, przenośne oraz elastyczne. Mając na uwadze zalety implementacji programowych, a takŝe ze względu na fakt istnienia pewnych ograniczeń ich wydajności zdecydowano się na badania dotyczące zwiększenia wydajności implementacji programowych 19

Algorytmy szyfrowania algorytmów szyfrowania, przy czym za priorytet uznano równieŝ zachowanie dotychczasowych ich zalet- elastyczności oraz niskich kosztów implementacji. Wykorzystano implementacje poszczególnych algorytmów zapisane w języku C mając na uwadze to, Ŝe język C stanowi domyślny standard programowania, co przekłada się na największą ilość implementacji algorytmów szyfrowania wykonanych w tym języku, z uwagi na znaczną efektywność kodu wynikowego programów napisanych w tym języku (porównywalną z efektywnością kodu wynikowego języków niskiego poziomu, np. języka Asembler, a znacznie wyŝszą niŝ w przypadku innych popularnych obecnie języków programowania, jak język Java, C#, C++) przy zaletach języka wysokiego poziomu, takich jak łatwość projektowania oraz przenośność oprogramowania. Istnieją rozmaite implementacje poszczególnych algorytmów szyfrowania, gdyŝ realizacja określonego celu, którym jest w danym przypadku szyfrowanie oraz deszyfrowanie danych zgodnie z zasadą działania danego szyfru nie implikuje ściśle określonego kodu źródłowego, a w związku z tym mogą się one róŝnić od siebie. Z uwagi na szereg rozmaitych moŝliwości implementacyjnych poszczególnych algorytmów szyfrowania konieczny był ich wybór. Zastosowano następujące kryteria wyboru implementacji poszczególnych algorytmów szyfrowania: efektywność, popularność, wiarygodność prostota. Preferowano rozwiązania efektywne, popularne, wiarygodne oraz proste w implementacji. Interesujące z punktu widzenia prowadzonych badań fragmenty kodów źródłowych rozpatrywanych algorytmów szyfrowania przedstawiono w rozdziale 5. 2.6. Podsumowanie Rozdział 2 poświęcono zagadnieniom teoretycznym z dziedziny kryptografii, a w szczególności algorytmom szyfrowania z uwzględnieniem ich podziału na szyfry blokowe, szyfry strumieniowe, szyfry asymetryczne oraz tryby pracy szyfrów blokowych. Przedstawiono w skrócie dziesięć reprezentatywnych, często obecnie uŝywanych algorytmów szyfrowania zarówno symetrycznych, jak i asymetrycznych 20

Algorytmy szyfrowania oraz pięć standardowych trybów pracy szyfrów blokowych (zasadę ich działania w postaci matematycznej podano w dodatku A niniejszej pracy), z uwagi na to, Ŝe będą zastosowane do zrównoleglenia kodu za pomocą autorskiej metody automatycznego zrównoleglenia wybranych algorytmów szyfrowania (opisanej w rozdziale 4 niniejszej pracy). Zaprezentowano ponadto zalety oraz wady implementacji programowych oraz sprzętowych algorytmów szyfrowania, jak równieŝ kryteria wyboru poszczególnych algorytmów szyfrowania oraz ich implementacji programowych. 21

3 3. PROBLEMATYKA ZRÓWNOLEGLENIA ALGORYTMÓW SZYFROWANIA UmoŜliwienie coraz szybszego szyfrowania oraz deszyfrowania danych wiąŝe się ściśle z zastosowaniem do tego celu nowoczesnego sprzętu o olbrzymich mocach obliczeniowych. Dotyczy to szczególnie konieczności przetwarzania w czasie rzeczywistym danych o znaczących rozmiarach pamięci, gdzie konieczność zastosowania znacznych nakładów obliczeniowych jest rzeczą oczywistą. Nieustanny postęp technologiczny w dziedzinie architektur procesorów doprowadził do powszechnego stosowania w takich przypadkach komputerów równoległych charakteryzujących się większymi mocami obliczeniowymi w porównaniu z maszynami sekwencyjnymi. Algorytmy sekwencyjne naleŝy zrównoleglić, aŝeby efektywnie wykorzystywać moc obliczeniową komputerów równoległych. Zrównoleglenie algorytmów wymaga z jednej strony zastosowania odpowiedniego sprzętu pozwalającego wykonywać obliczenia w sposób równoległy, a z drugiej opracowania algorytmu charakteryzującego się duŝym stopniem równoległości. Zagadnieniom tym poświęcony jest kolejny rozdział pracy. 3.1. Architektury maszyn równoległych System wieloprocesorowy (ang. multiprocessor system) zwany równieŝ wieloprocesorem (ang. multiprocessor) został zdefiniowany w 1970 roku przez 22

Problematyka zrównoleglenia algorytmów szyfrowania Amerykański Państwowy Instytut Normalizacji (ANSI) jako maszyna cyfrowa złoŝona z dwu lub więcej jednostek przetwarzania sterowanych centralnie [59]. Rozwijając powyŝszą definicję naleŝy stwierdzić, Ŝe system wieloprocesorowy jest to komputer, zawierający co najmniej dwa procesory, które charakteryzują się zazwyczaj zbliŝonymi właściwościami i moŝliwościami obliczeniowymi, pracujący pod kontrolą jednego systemu operacyjnego zapewniającego współpracę pomiędzy procesorami na róŝnych poziomach [59]. Podstawą współdziałania procesorów jest komunikacja pomiędzy nimi i moŝliwa dzięki niej synchronizacja ich pracy. Odbywa się ona albo poprzez dostęp do wspólnej (dzielonej) pamięci operacyjnej (ang. shared memory), albo poprzez przesyłanie komunikatów (ang. message passing) [59]. Wynika stąd podział systemów wieloprocesorowych na: Systemy z pamięcią wspólną (dzieloną) (ang. shared memory, w skrócie SM). Architekturę tego systemu ilustruje rys.3.1. Systemy z przesyłaniem komunikatów (ang. message passing) lub systemy z pamięcią rozproszoną (ang. distributed memory, w skrócie DM). Schemat tego systemu przedstawiono na rys.3.2. Pamięć... Sieć połączęń... CPU 1 CPU 2 CPU p Rysunek 3.1. Architektura systemów wieloprocesorowych z pamięcią wspólną 23

Problematyka zrównoleglenia algorytmów szyfrowania Sieć połączeń... CPU 1 CPU 2... CPU p Pamięć 1 Pamięć 2 Pamięć p Rysunek 3.2. Architektura systemów wieloprocesorowych z pamięcią rozproszoną Systemy wieloprocesorowe ze wspólną pamięcią w ujęciu teoretycznym cechują się stosunkowo szybkim mechanizmem synchronizacji i komunikacji międzyprocesorowej. W praktyce jednakŝe, fakt dostępu wszystkich procesorów do jednej pamięci szybkość tę w znacznym stopniu moŝe ograniczać. Z tego względu minimalizuje się dostęp do wspólnej pamięci wykorzystując pamięci lokalne, a sieci połączeń projektuje w taki sposób, aŝeby zapewniały duŝą przepustowość. Zastosowanie pamięci lokalnych powoduje odciąŝenie pamięci wspólnej jedynie dla obliczeń lokalnych, tzn. nie korzystających z wyników pracy innych procesorów i nie generujących wyników będących danymi wejściowymi dla innych procesorów [59]. W systemach wieloprocesorowych z pamięcią rozproszoną kaŝdy procesor ma własną, jedynie jemu dostępną pamięć. Komunikacja pomiędzy procesorami odbywa się za pomocą specjalnych komunikatów przesyłanych poprzez sieć połączeń, w których występują dane potrzebne do wykonania obliczeń. Mechanizmy synchronizacji i komunikacji obarczone są większymi narzutami czasowymi niŝ w przypadku systemów ze wspólną pamięcią [59], dlatego efektywność takich systemów tym jest wyŝsza, im mniej jest powiązań pomiędzy realizowanymi procesami. Istnieją równieŝ systemy w formie pośredniej w stosunku do wyŝej wymienionych zawierające rozproszoną pamięć współdzieloną (ang. distributed shared memory, w skrócie DSM). Zawierają one model programowania wspólnej przestrzeni adresowej z fizycznie rozproszoną pamięcią oraz spójnym duplikowaniem zasobów systemowych [61]. 24