Kompresja i szyfrowanie

advertisement
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.
Download