Laboratorium nr 3 Podpis elektroniczny i certyfikaty Wprowadzenie W roku 2001 Prezydent RP podpisał ustawę o podpisie elektronicznym, w która stanowi że podpis elektroniczny jest równoprawny podpisowi własnoręcznemu: Dane w postaci elektronicznej opatrzone bezpiecznym podpisem elektronicznym weryfikowanym przy pomocy ważnego kwalifikowanego certyfikatu są równoważne pod względem skutków prawnych dokumentom opatrzonym podpisami własnoręcznymi, chyba że przepisy odrębne stanowią inaczej. Art. 5 Ustawy o podpisie elektronicznym. Konstrukcja podpisu elektronicznego opiera się na szyfrowaniu danych za pomocą kryptografii asymetrycznej. Szyfr asymetryczny posiada dwa klucze: publiczny i prywatny. Jak sama nazwa wskazuje klucz publiczny jest znany powszechnie, natomiast klucz prywatny zna jedynie jego właściciel. Klucze te posiadają dwie główne cechy: znając jeden z kluczy nie możliwym jest znalezienie drugiego z nich, zaszyfrowane dane za pomocą jednego z kluczy można odszyfrować jedynie drugim kluczem. Taka konstrukcja szyfru umożliwia podpis elektroniczny: ponieważ klucz prywatny stanowi własność konkretnej osoby i jest znany tylko niemu to szyfrując dokument (lub jego skrót) kluczem prywatnym, jednoznacznie potwierdzamy tożsamość podpisującego. Jeśli dane zostały zaszyfrowane kluczem prywatnym, wiadomo że mógł to zrobić jedynie jego posiadacz. "Podpis elektroniczny - dane w postaci elektronicznej, które wraz z innymi danymi, do których zostały dołączone lub z którymi są logicznie powiązane, służą do identyfikacji osoby składającej podpis elektroniczny." Art. 3 Ustawy o podpisie elektronicznym. Podstawowe własności podpisu elektronicznego: Unikalność - każdy dokument elektroniczny posiada unikalny podpis cyfrowy ściśle związany z dokumentem. Integralność - jakakolwiek zmiana w treści dokumentu podpisanego cyfrowo unieważnia podpis. Niezaprzeczalność - tylko osoba posiadająca klucz prywatny może wygenerować podpis pod dokumentem. Ponieważ podpis elektroniczny to zaszyfrowane dane za pomocą klucza prywatnego, jego odczyt to proces odszyfrowania za pomocą klucza publicznego. Istotną sprawą jest wykorzystanie w tym procesie właściwego klucza publicznego właściciela dokumentu. Skąd można mieć pewność że używa się właściwego klucza? Przynależność klucza publicznego do danego użytkownika zapewnia certyfikat klucza
publicznego. Certyfikat ten to plik podpisany cyfrowo przez podmiot świadczący usługo certyfikacyjne. Certyfikat zawiera dane dotyczące właściciela, jego klucz publiczny i informacje o tym kto wystawił certyfikat. "Certyfikat - elektroniczne zaświadczenie, za pomocą którego dane służące do weryfikacji podpisu elektronicznego są przyporządkowane do osoby składającej podpis elektroniczny i które umożliwiają identyfikację tej osoby." Art. 3 Ustawy o podpisie elektronicznym. Do podmiotów świadczących usługi certyfikacyjne można mieć zaufanie są to podmioty zapisane w rejestrze Narodowego Centrum Certyfikacji. Narodowe Centrum Certyfikacji pełni funkcję głównego urzędu certyfikacji dla infrastruktury bezpiecznego podpisu elektronicznego w Polsce. Dodatkowo podpis elektroniczny można oznakować czasem. Znacznik czasu wskazuje jednoznacznie że dany dokument istnieje i nie był modyfikowany od czasu zapisanego w tym znaczniku. Znakowanie czasem [nazywamy] usługę polegającą na dołączaniu do danych w postaci elektronicznej logicznie powiązanych z danymi opatrzonymi podpisem lub poświadczeniem elektronicznym, oznaczenia czasu w chwili wykonania tej usługi oraz poświadczenia elektronicznego tak powstałych danych przez podmiot świadczący tę usługę. Art. 3 Ustawy o podpisie elektronicznym GPG (GNU Privacy Guard) jest następcą oprogramowania PGP (Pretty Good Privacy) stworzonego w roku 1991 przez Phila Zimmermanna. Ten system kryptograficzny umożliwia uwierzytelnianie, generowanie podpisów cyfrowych i zapewnia poufność transmitowanych danych. Na zajęciach będziemy używać najnowszej wersji darmowego środowiska GPG (www.gpg4win.org). Aplikacja za pomocą której będziemy zarządzać kluczami nazywa się Kleopatra. Szyfrowanie danych w środowisku GPG opiera się zarówno na kryptografii symetrycznej i asymetrycznej. Siłą szyfrowania symetrycznego jest jego duża szybkość, natomiast największa zaleta kryptografii asymetrycznej to brak problemów z bezpieczną dystrybucją kluczy (klucz przeznaczony do szyfrowania danych jest jawny). Dane przesyłane między użytkownikami są szyfrowane za pomocą algorytmu symetrycznego, używając w tym celu pewnego klucza sesyjnego. Klucz sesyjny musi być tajny, ponieważ służy on zarówno do szyfrowania jak i do odszyfrowywania danych. Aby zapewnić tajność klucza sesyjnego, szyfruje się go za pomocą kryptografii asymetrycznej, a więc klucz sesyjny szyfrujemy za pomocą klucza publicznego odbiorcy. Następnie oba szyfrogramy (dane zaszyfrowane kluczem sesyjnym i klucz sesyjny zaszyfrowany kluczem publicznym), zostają przesłane do odbiorcy. Schemat szyfrowania pokazany jest na rysunku.
Odszyfrowywanie danych przebiega następująco: na początku odszyfrowujemy klucz sesyjny za pomocą swojego klucza prywatnego (kryptografia asymetryczna), a następnie za pomocą otrzymanego klucza sesyjnego odszyfrowujemy odebraną wiadomość (kryptografia symetryczna). Opisany schemat przedstawiono na poniższym rysunku. Przygotowanie 1. Proszę uruchomić komputer w systemie Windows i na pulpicie stworzyć nowy katalog bezpieczenstwo. W tym katalogu proszę przechowywać wszystkie pliki, które będą wykorzystywane podczas zajęć. Po zakończeniu zajęć proszę usunąć katalog wraz z całą zawartością. 2. Proszę ściągnąć instalkę programu GPG4win (www.gpg4win.org) i zainstalować aplikację z domyślnymi ustawieniami. Jeśli program jest już zainstalowany, proszę wykasować wszystkie klucze i certyfikaty w programie Kleopatra.
Klucze kryptograficzne i certyfikaty OpenPGP 3. Proszę wygenerować parę kluczy (prywatny i publiczny) w aplikacji Kleopatra opcja New certificate. Tworzymy certyfikaty w formacie OpenPGP. Warto włączyć opcję Ustawienia zaawansowane, gdzie można wybrać różne algorytmy i długości kluczy. Przed wygenerowaniem kluczy należy wypełnić wymagane pola: nazwę i adres e-mailowy oraz hasło dostępu (hasło należy zapamiętać, bo będzie potrzebne w dalszej części laboratorium). Wygenerowana para będzie używanym przez nas kluczem publicznym i prywatnym. Czy można wygenerować tylko jeden klucz asymetryczny (np. klucz prywatny)? Czy miałoby to sens? 4. Wyeksportować swój klucz publiczny i klucz prywatny do pliku (wyeksportować w formacie ASCI). Zapoznać się z zawartością, otwierając plik w edytorze tekstowym. Jaką postać ma klucz wygenerowany w GPG? 5. Wymienić się swoimi kluczami publicznymi z inną osobą w grupie (za pomocą maila, pamięci przenośnej, itp.). Czy wymiana kluczy prywatnych miałaby sens? 6. Po zaimportowaniu klucza publicznego innej osoby do aplikacji Kleopatra, należy go podpisać przy użyciu swojego klucza prywatnego (certyfikować). Po tej operacji znajdzie się on wśród zaufanych certyfikatów. 7. Zweryfikować otrzymany i zapisany klucz publiczny porównując fingerprint (postać postać heksadecymalna). Jeśli właściciel potwierdzi prawidłową wartość skrótu nazwanego fingerprint zmienić poziom zaufania tego klucza na najwyższy. Czym jest fingerprint? Dlaczego warto różnicować poziom zaufania rożnych kluczy? Szyfrowanie i podpis cyfrowy 8. Proszę podpisać dowolny dokument tekstowy, a następnie wysłać go do osoby posiadającej nasz klucz publiczny, w celu jego weryfikacji. Jednocześnie proszę zweryfikować podpis elektroniczny dokumentu otrzymanego od innej osoby. Po skutecznym zweryfikowaniu podpisu, proszę zmodyfikować treść oryginalnego dokumentu i znów zweryfikować podpis cyfrowy. Co się zmieniło? Dlaczego?
9. Stworzyć nowy plik tekstowy (wpisać do niego jakąś treść) i zaszyfrować go za pomocą klucza publicznego innej osoby. Następnie wysłać zaszyfrowany plik do właściciela klucza. Właściciel ma za zadanie odszyfrować otrzymany dokument. Jeśli deszyfrowanie pliku powiedzie się, proszę nieznacznie zmodyfikować szyfrogram (np. zmienić jeden znak) i powtórzyć proces deszyfrowania. Czy znów się udało? Czy udało się odszyfrować chociaż fragment pliku? Certyfikaty w formacie X.509 10. Otwórz w przeglądarce dowolną stronę zabezpieczoną protokołem SSL (początek adresu WWW ma postać: https://). Przykładowo, może to być strona internetowa dowolnej poczty elektronicznej. Wyświetl certyfikat i zapoznaj się z informacjami jakie zawiera. Zwróć uwagę na algorytm kryptograficzny oraz parametry związane z kluczem publicznym. Zwróć uwagę na centrum certyfikacyjne i ścieżkę certyfikacji. Czym różni się certyfikat w formacie X.509 od certyfikatu OpenPGP? Następnie znajdź w swojej przeglądarce organ certyfikacji, który weryfikuje certyfikat tej strony internetowej wykasuj go (lub zaznacz opcję przestań ufać ). Uruchom ponownie przeglądarkę (lub wyczyść pamięć) i znów wejdź na tę samą stronę internetową. Co się dzieje? Wyjaśnij dlaczego. Co się stanie jeśli ponownie zaakceptujesz certyfikat? Narodowe Centrum Certyfikacji 11. Proszę wejść na stronę internetową Narodowego Centrum Certyfikacji (http://www.nccert.pl) i zapoznać się z rejestrem podmiotów kwalifikowanych które są upoważnione do wydawania kwalifikowanych certyfikatów w Polsce. Jakie jednostki kwalifikowane są wpisane do rejestru i jakie usługi mogą obecnie świadczyć? Dlaczego to działa? (czyli dla tych którzy nie byli na wykładzie) 12. Ćwiczenie będzie polegało na szyfrowaniu i deszyfrowaniu prostych wiadomości za pomocą asymetrycznego szyfru RSA. Ćwiczenie wykonujemy w parach. Pierwszym krokiem będzie stworzenie swojej pary kluczy: prywatnego i publicznego. Najpierw wybierz dwie niewielkie liczby pierwsze p oraz q (niewielkie ponieważ obliczenia będą wykonywane za pomocą kalkulatora czy stronę Wolfram Alpha). Następnie zbuduj klucz prywatny i publiczny. Kluczem
publicznym podziel się z inną osobą i poproś o zaszyfrowanie nim dowolnej wiadomości binarnej (najlepiej nie dłuższej niż 5-bitowa). Po odebraniu szyfrogramu deszyfruj wiadomość używając swojego klucza prywatnego, a następnie poproś nadawcę o potwierdzenie czy udało Ci się poprawnie deszyfrować wiadomość. Przypominam kolejne kroki algorytm RSA: - znajdujemy dwie, duże liczby pierwsze p i q - obliczamy ich iloczyn n - wybieramy liczbę e mniejszą od iloczynu (p-1)*(q-1) i nie mającą większego wspólnego dzielnika z liczbą (p-1)*(q-1) niż 1 - klucz publiczny to liczby: (e, n) - obliczamy element odwrotny d względem liczby e modulo (p-1)*(q-1), a wiec d powinno być taką liczbą, aby wynikiem mnożenia e*d była jedynka, oczywiście modulo (p-1)*(q-1) - klucz prywatny to liczby: (d, n) Szyfrowanie jest działaniem modulo n - szyfrujemy wiadomość M, podnosząc ją do potęgi e: C = M e mod n Deszyfrowanie jest także działaniem modulo n, tym razem szyfrogram podnosimy do potęgi d: M = C d mod n Sprawozdanie W sprawozdaniu z laboratorium nr 3 należy opisać wykonane ćwiczenia i ich wyniki. W szczególności należy odpowiedzieć na zadane pytania. Dodatkowo we wnioskach należy napisać, na czym polega podpis elektroniczny, do czego służy certyfikat oraz wyjaśnić jak działa PKI (Public Key Infrastructure). Dodatkowo (część nieobowiązkowa) Dla osób zainteresowanych tematem: - Niestety, kwalifikowane certyfikaty są zazwyczaj płatne. Można jednak korzystać z darmowych certyfikatów niekwalifikowanych jest to mniej bezpieczna opcja i nie pozwala na generowanie podpisów elektronicznych zgodnych z ustawą, ale warto choćby przetestować taką możliwość. Polecam strony znanych centrów np.: Thawte (http://www.thawte.com) czy VeriSign (http://www.verisign.com/).