Wykład VI - semestr III Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2013 c Copyright 2013 Janusz Słupik
Podstawowe zasady bezpieczeństwa danych
Bezpieczeństwo Obszary: Kryptografia - nauka o konstruowaniu systemów kryptograficznych Kryptoanaliza - nauka o łamaniu systemów kryptograficznych Steganografia - nauka o ukrywaniu faktu przesyłania informacji
Kryptografia klasyczna klucz klucz tekst jawny szyfrowanie szyfrogram przesylanie szyfrogram deszyfrowanie tekst jawny Alicja Bob Cezary Główna zasada bezpieczeństwa: Zakładamy, że podsłuchujący wie jakiego używamy algorytmu, nie zna on jedynie klucza (kluczy).
Wady: długie klucze (z dużego zbioru), jednorazowe klucze, konieczność spotkania się w celu ustalenia i wymiany kluczy.
Przykład - szyfr przesuwający ( kid sister safe system ) Przekształcamy plik bajt po bajcie, tzn. każdy bajt x jest przetwarzany przez algorytm, a wynik (nowy bajt) jest zapisywany do pliku. Odwzorowanie szyfrujące (deszyfrujące) jest następujące x x + k (mod 256) gdzie k jest pewną liczbą ze zbioru {1,..., 255}. Liczba k jest kluczem szyfrującym. Liczba k jest kluczem deszyfrującym.
Wady mała ilość kluczy - 255 kluczy każdej literze odpowiada zawsze ten sam znak kryptogramu
Analiza częstości
Inny przykład kryptoanalizy Spodziewany tekst: TAK lub NIE Cezary przechwycił szyfrogram: OJF
Inny przykład kryptoanalizy Spodziewany tekst: TAK lub NIE Cezary przechwycił szyfrogram: OJF Porównujemy różnice kodów sąsiednich liter modulo 256. T A K 84 65 75
Inny przykład kryptoanalizy Spodziewany tekst: TAK lub NIE Cezary przechwycił szyfrogram: OJF Porównujemy różnice kodów sąsiednich liter modulo 256. T A K 84 65 75 19 246
Inny przykład kryptoanalizy Spodziewany tekst: TAK lub NIE Cezary przechwycił szyfrogram: OJF Porównujemy różnice kodów sąsiednich liter modulo 256. T A K 84 65 75 19 246 N I E 78 73 69
Inny przykład kryptoanalizy Spodziewany tekst: TAK lub NIE Cezary przechwycił szyfrogram: OJF Porównujemy różnice kodów sąsiednich liter modulo 256. T A K 84 65 75 19 246 N I E 78 73 69 5 4
Inny przykład kryptoanalizy Spodziewany tekst: TAK lub NIE Cezary przechwycił szyfrogram: OJF Porównujemy różnice kodów sąsiednich liter modulo 256. T A K 84 65 75 19 246 N I E 78 73 69 5 4 O J F 79 74 70
Inny przykład kryptoanalizy Spodziewany tekst: TAK lub NIE Cezary przechwycił szyfrogram: OJF Porównujemy różnice kodów sąsiednich liter modulo 256. T A K 84 65 75 19 246 N I E 78 73 69 5 4 O J F 79 74 70 5 4
One-time pad Załóżmy, że mamy tekst jawny w postaci bajtów: a 1,..., a n. Jako klucza używamy innego ciągu bajtów o tej samej długości co tekst jawny: k 1,..., k n. Szyfrowanie to obliczanie: c i = a i XOR k i i = 1,..., n zaś deszyfrowanie to: a i = c i XOR k i i = 1,..., n
One-time pad - własności Przy jednokrotnym użyciu klucza ta metoda gwarantuje bezpieczeństwo doskonałe. Poważną wadą tej metody jest konieczność posiadania tak długiego klucza jak szyfrowana informacja. Dodatkowo klucz ten musi być uzgodniony przez obie strony systemu.
Atak z tekstem jawnym Większość plików zapisywanych w popularnych formatach posiada stałe, albo przewidywalne nagłówki. Może to prowadzić do próby uzyskania początkowej części klucza.
Kryptografia współczesna Brak konieczności spotkania się w celu ustalenia i wymiany kluczy szyfrujących i deszyfrujących. Idea: Większość współczesnych systemów kryptograficznych jest budowana w oparciu o problemy matematyczne i obliczeniowe.
Kryptografia z kluczem publicznym Osoba A tworzy poufnie dwa klucze (matematycznie powiązane). Jeden z nich nazywany jest kluczem publicznym, a drugi kluczem prywatnym. Obliczenie klucza prywatnego na podstawie klucza publicznego jest praktycznie niewykonalne. Klucz publiczny może być swobodnie rozpowszechniany, natomiast odpowiadający mu klucz prywatny musi zostać zachowany w sekrecie. Osoba B chcąc wysłać do A wiadomość używa do jej zaszyfrowania klucza publicznego. Osoba A otrzymany od B szyfrogram odszyfrowuje przy użyciu klucza tajnego.
Przykład - kryptosystem RSA Został stworzony w 1978 przez zespół: Ronald Rivest, Adi Shamir, Leonard Adleman. Osoba A - konstrukcja kluczy: - losuje dwie duże liczby pierwsze p i q, - losuje liczbę e taką, że 1 < e < (p 1)(q 1) i NWD(e, (p 1)(q 1)) = 1, - oblicza n = p q - oblicza d = e 1 (mod (p 1)(q 1)) Klucz publiczny: (n, e) Klucz prywatny: (n, d)
Kryptosystem RSA Szyfrowanie: Osoba B chce wysłać wiadomość do osoby A. Oblicza reprezentację liczbową m swojej wiadomości. Wykorzystując klucz publiczny oblicza c = m e (mod n). Deszyfrowanie: Osoba A oblicza c d (mod n) = m.
Wymagania dotyczące bezpieczeństwa Zbiór możliwych wiadomości nie może być mały i znany. Atak brute-force : Dla małego zbioru wiadomości, np: { ATAK, CZEKAJ, WYCOFAJ } możemy obliczyć wszystkie możliwe szyfrogramy i je porównać z przechwyconym.
Zastosowanie SSH - to wspólna nazwa dla całej rodziny protokołów, do terminalowego łączenia się ze zdalnymi komputerami (SSH), do przesyłania plików (SCP, SFTP), zdalnej kontroli zasobów, tunelowania i wielu innych zastosowań. Dostępne m.in. w programach Putty, WinSCP.
Funkcje haszujące Funkcja skrótu (funkcja haszująca) jest to funkcja, która przyporządkowuje dowolnie dużej wiadomości krótką, posiadającą stały rozmiar wartość (skrót wiadomości). Funkcja skrótu H(m) musi posiadać własności: 1) dla każdej wiadomości m łatwo jest obliczyć H(m); 2) praktycznie niemożliwe jest znalezienie takich dwóch wiadomości m i m, dla których H(m) = H(m ) (tzw. odporność na kolizje); 3) dla danego skrótu y praktycznie nie można znaleźć takiego m, że H(m) = y (odporność na wyliczenie przeciwobrazu).
Funkcje haszujące md5 (128 bitowy skrót) SHA-1 (160 bitowy skrót) tiger (192 bitowy skrót) SHA-256 (256 bitowy skrót) Zmiana jednej litery w wiadomości prowadzi do wielkiej zmiany wartości funkcji haszującej.
SHA-256 Kotek 9921c40280e1b3e8e773de999a78c015205594ff507dc14ebeeeb583f2de212c Katek 32c057e6e2320b0eeede6b9436d3fc869e43c6e183d9c3e8f44e025584e6ba01 kotek d3369f5cb45b1d21c0e2dcc803f0a60410b71a342ac59a48e4f35d409fcb4b66 k 8254c329a92850f6d539dd376f4816ee2764517da5e0235514af433164480d7a kominiarz 54e3538418a7d7de959254bef817b85130cc9e5fc13afdbeaf3ff8638f228f3c
Zastosowania Sumy kontrolne Weryfikacja spójności danych Wyszukiwanie danych Protokoły kryptograficzne
Podpis cyfrowy Osoba A Klucz prywatny osoby A ##$TW# List 2345678 ##$TW# List Osoba B Klucz publiczny osoby A 2345678 ##$TW# ##$TW# List = 2345678 List
Przechowywanie haseł Hasła dostępu do komputera, baz danych, usług, itp. powinny być przechowywane w postaci wartości funkcji haszującej. Nie zaleca się szyfrowania z kluczem znanym przez administratora, gdyż daje mu to możliwość pracy jako inny użytkownik. Ponadto w przypadku kradzieży pliku z hasłami podczas włamania do systemu, bezpieczeństwo tego systemu zależy od jakości (siły) użytego hasła.
Atak słownikowy Atak ten ma na celu ustalenie hasła (najczęściej jakiegokolwiek) użytkownika systemu. Opiera się on na założeniu, że użytkownicy wybierają często słabe hasła (daty urodzin, nazwiska, wyrazy z języka naturalnego, itp.) Atak ten polega na obliczaniu skrótów dla słów ze słownika i porównywania ich ze skrótami haseł ze skradzionego pliku. Wielu administratorów uruchamia procesy wykonujące prewencyjnie atak słownikowy na hasła użytkowników. W przypadku złamania hasła, żąda się od użytkownika zmiany hasła na nowe.
Gotowe rozwiązania Biblioteka: Crypto++ Library 5.6.2
Uwaga - hasło w pliku binarnym #include <iostream> #include <string> #include <cstdlib> using namespace std; int main() { string haslopobrane; const string haslo = "TajnePoufne"; cout << "Podaj haslo:"; cin >> haslopobrane; } if( haslopobrane == haslo ) { // akcja chroniona hasłem } return 0;
Bibliografia Neal Koblitz, Wykład z teorii liczb i kryptografii, WNT, Warszawa 2006 Neal Koblitz, Algebraiczne aspekty kryptografii, WNT, Warszawa 2000 Bruce Schneier, Kryptografia dla praktyków, WNT, Warszawa 2002 Alfred Menezes, Paul van Oorschot, Kryptografia stosowana, WNT, Warszawa 2005 A. Menezes, P. van Oorschot - Handbook of applied cryptography http://www.cacr.math.uwaterloo.ca/hac/
Koniec