Kompresja i szyfrowanie 1. Kompresja (od compreso – ściśnięcie) to zmniejszenie objętości danych przy zachowaniu pewnych reguł, aby możliwe było ich odtworzenie. Proces odwrotny to dekompresja. Jakie znasz programy do kompresji danych? 2. Istnieją dwa rodzaje kompresji stratna – dane oryginalne przechodzą w dane skompresowane z pominięciem pewnych fragmentów bezstratna – wszystkie informacje są pakowane do archiwum (bez pomijania). 3. Współczynnik kompresji bywa różny w zależności od typu danych. Duży jest dla dokumentów tekstowych, mały dla dźwięku, chyba, że dopuścimy straty. R = (1-VK/VNK)*100% Plik WAV o objętości 64MB skompresowano do MP3, tak że zajmuje 9,5MB. Znajdź współczynnik kompresji. 4. Dla każdego zbioru danych istnieje minimalna objętość poniżej której nie da się zejść. W przeciwnym przypadku utracimy pewną część danych, jak w formatach: MP3, GIF, JPG, MPEG. Podaj kilka innych przykładów kompresji stratnej. Algorytmy tej kompresji bazują na niedoskonałości naszych zmysłów. 5. Przykładem algorytmu bezstratnego może być a. statystyczny, bazujący na tekście i częstości występowania wybranych znaków. Niektóre jak a, e, i występują często. Gdy do ich zapisu użyje się nie jak w kodzie ASCII 8 bitów lecz 2 bity, to można zaoszczędzić dużo miejsca. Istnieją też algorytmy słownikowe, w których oznacza się często występujące słowa, np. na, to. 6. SZYFROWANIE TO TECHNIKA BEZPIECZNEGO PRZESYŁANIA INFORMACJI. Odbywa się to następująco: tekst jawny → szyfrowanie → szyfrogram → deszyfrowanie → oryginalny tekst jawny. Odbywa się to za pomocą algorytmów. W zaawansowanych algorytmach niebanalną rolę odgrywają liczby pierwsze. Nauka o szyfrowaniu to kryptografia, a łamaniem szyfrów zajmuje się kryptoanaliza. Razem tworzą kryptologię. 7. Szyfrowanie podstawieniowe – opiera się na zastępowaniu jednych znaków drugimi. Najbardziej znany jest szyfr Cezara: a → d, b → e...z → c. Zadanie: Zaszyfruj swoje imię w ten sposób. 8. Algorytm szyfrujący w Pascalu wykorzystuje funkcje predefiniowane takie jak: chr(x) ,gdzie x jest numerem znaku (uwaga w kodzie ASCII numery liter alfabetu łacińskiego zaczynają się od numeru 65 – sprawdź!) czyli chr(65) da „a”. Funkcja Ord(x) działa dokładnie odwrotnie i wstawiamy do nie jako argumenty znaki: Ord(a) = 65. program cezar; {$APPTYPE CONSOLE} uses SysUtils; const k = 2;// liczba przesuniecia var tekst:string; i,j,a:integer; begin writeln('Podaj tekst: '); readln(tekst); j:=length(tekst); writeln('Ncisnij 1:zaszyfrowac albo 2:odszyfrowac? '); readln(a); case a of 1:begin for i:=1 to j do begin if (ord(tekst[i])+k<=122) then tekst[i]:=chr(ord(tekst[i])+k) else tekst[i]:=chr(ord(tekst[i])+k-122+96); end; writeln(tekst); end; 2:begin for i:=1 to j do begin if (ord(tekst[i])-k>=97) then tekst[i]:=chr(ord(tekst[i])-k) else tekst[i]:=chr(ord(tekst[i])-k+26); end; writeln(tekst); end; end; readln; Sprawdź poprawność swojego szyfrowania „ na piechotę” z punktu 7. 9. Szyfry przestawieniowe to takie, w których pojawią się wszystkie znaki w zmienionej kolejności. a b c d e f, czytanie w dół daje: a, d, b, e, c, f. Zapisz swoje imię i nazwisko w co najmniej dwóch liniach i zaszyfruj tą metodą. 10. Algorytmy z kluczem wymagają oprócz znajomości sposobu szyfrowania znajomości klucza. Klucz szyfrujący i deszyfrujący mogą być różne. Oto prosta ilustracja: algorytm: a → 1, b → 2 ... z → 26, klucz: każda kolejna litera jest przesunięta „do przodu” o jeden większą ilość razy i startujemy od jedynki: BAR → 2 1 18 →(2+1) (1+2) (18+3) → 3 3 21. Zaszyfruj w ten sposób wyraz informatyka. Zasadnicza wada to konieczność przekazanie klucza. Stosuje więc tzw. klucz jawny dostępny dla każdego do zaszyfrowania, i tajny – dysponuje nim odbiorca wiadomości. 11. Odszyfruj ciąg znaków: VCBIU FHCDUD MHVW SURVWB. 12. Znajdź w internecie opis metody znanej pod nazwą Szyfr Vigenère'a. Zaszyfruj nim tekst: WYBORY LOKALNE. Możesz skorzystać z arkusza kalkulacyjnego sporządzając tablicę. 13. Algorytm RSA W roku 1977 trzej profesorowie z MIT w USA, Ronald L. Rivest, Adi Shamir i Leonard Adleman, opublikowali nowy rodzaj szyfrowania danych, który nazwano od pierwszych liter ich nazwisk systemem RSA. Jest to niesymetryczny algorytm szyfrujący, którego zasadniczą cechą są dwa klucze: publiczny do kodowania informacji oraz prywatny do jej odczytywania. Klucz publiczny (można go udostępniać wszystkim zainteresowanym) umożliwia jedynie zaszyfrowanie danych i w żaden sposób nie ułatwia ich odczytania, nie musi więc być chroniony. Dzięki temu firmy dokonujące transakcji poprzez sieć Internet mogą zapewnić swoim klientom poufność i bezpieczeństwo. Drugi klucz (prywatny, przechowywany pod nadzorem) służy do odczytywania informacji zakodowanych przy pomocy pierwszego klucza. Klucz ten nie jest udostępniany publicznie. System RSA umożliwia bezpieczne przesyłanie danych w środowisku, w którym może dochodzić do różnych nadużyć. Bezpieczeństwo oparte jest na trudności rozkładu dużych liczb na czynniki pierwsze. Dlaczego warto szyfrować w RSA? Klucz 128 bitowy. Pierwiastek jest liczbą 64 bitową. W zakresie od 2 do 64 co druga liczba jest nieparzysta, zatem jest ich około 2 do potęgi 64 / 2 = 63. Ponieważ interesuje nas tylko górna połówka, to ilość liczb do sprawdzenia jest dwa razy mniejsza, czyli wynosi: 2 do potęgi 63 / 2 = 62. Ile czasu zajmie naszemu superkomputerowi sprawdzenie podzielności przez około 2 do 262 liczb, jeśli w ciągu 1 sekundy wykonuje on miliard sprawdzeń? Odpowiedź brzmi: zajmie to około 2 do 62 / 10 do 9 = 4611686018 sekund = = 76861433 minut = 1281023 godzin = 53375 dni = 146 lat Wybór kluczy w RSA 1. Wybierz dwie liczby pierwsze p oraz q. 2. Niech N = pq. 3. Oblicz (N) = (p – 1)(q – 1). 4. Weź jakąkolwiek liczbę J względnie pierwszą z (N). 5. Znajdź taką liczbę T, że JT = 1 mod (N). W najprostszym przykładzie przyjmiemy p = 3 i q = 11. Wówczas N = 3 · 11 = 33, a (N) = 2 · 10 = 20. Weźmy J = 3. Metodą prób i błędów znajdujemy T = 7. Rzeczywiście: liczba 7 spełnia żądany warunek, gdyż JT = 3 · 7 = 1 mod 20. Uwaga: liczby względnie pierwsze mają NWD = 1.