Podpisy cyfrowe

Podpisy cyfrowe

hejto.pl
Po co podpisujemy dokumenty? Pytanie wydaje się trywialne, choć nie do końca takie jest. Tak naprawdę istnieją trzy powody tego działania.
Pierwszym z nich jest potwierdzenie autentyczności pochodzenia, naturalnie podpis Jana Kowalskiego należy do Jana Kowalskiego.
Drugim powodem jest niezaprzeczalność, jeżeli pod dokumentem znajduje się podpis Jana Kowalskiego, to oznacza to, że Jan Kowalski go przeczytał, jest to bezpośredni dowód utrudniający wyparcie się przez niego znajomości treści.
Trzecim powodem jest integralność, Jan Kowalski podpisał się pod konkretnym dokumentem i tylko tego dokumentu dotyczy podpis.
Wiadomo, że z podpisami różnie bywa, a ich bezpieczeństwo jest, delikatnie mówiąc średnie. Mimo wszystko nadal spełniają swoją rolę i są powszechnie używane z wyżej wymienionych powodów. 

Podpisy w informatyce

W informatyce również istnieją podpisy. Stosujemy je dokładnie z tych samych przyczyn. Naturalnie fizyczny podpis różni się od cyfrowego.
W przypadku zwykłych podpisów trudność stanowi podrobienie stylu pisma, komputer nie miałyby z tym żadnego problemu, mógłby łatwo skopiować podpis, a następnie umieścić go gdzie tylko chce.
Pobierając plik lub otrzymując, jakąś wiadomość zależy nam na tym, aby nie została ona zmodyfikowana przez kogoś innego niż sam autor, głównie dla bezpieczeństwa. 
W przypadku komunikacji zależy nam na tym, abyśmy nie dostali spreparowanej wiadomości wprowadzającej nas w błąd. Natomiast pobierając plik, zależy nam, by nie znajdowało się w nim żadne złośliwe oprogramowanie.
Zanim wyjaśnię, jak działa podpis cyfrowy, zobaczmy, jak w praktyce wygląda podpisany plik.

Mamy tutaj certyfikat przypisany do instalatora steam (znajdziesz go klikając pp myszki na plik, po czym wybierając właściwości->podpisy cyfrowe->szczegóły->wyświetl certyfikat). Jak widzimy, są tu trzy pola: Wystawiony dla, Wystawiony przez, Ważny od do.
Podpisy cyfrowe wystawiane są przez firmy cieszące się powszechnym zaufaniem. Taka firma (tutaj DigiCert) poświadcza, że potwierdziła tożsamość drugiej strony oraz gwarantuje, że niniejszy podpis należy właśnie do niej (tutaj Valve). 

Funkcje skrótu

Pole “Wystawiony przez” poza nazwą firmy posiada jeszcze kilka informacji, my skupimy się na najważniejszych z nich, czyli: RSA4096 oraz SHA384, są to informacje opisujące metodę podpisania pliku.
SHA384- Być może rozpoznajesz tę nazwę. Jest to tzw. funkcja skrótu (inaczej haszująca). Pierwszy człon oznacza Secure Hash Algorithm drugi zaś opisuje wielkość otrzymanego skrótu (384 bity). 
O funkcjach skrótu pisałem już, opisując menedżery haseł oraz dwuskładnikowe uwierzytelnianie. Przedstawiłem tam wykorzystanie funkcji haszującej, przez strony internetowe do uwierzytelniania użytkowników, bez konieczności zapisywania ich haseł w jawnej formie.
Tym razem skupimy się na nieco innym zastosowaniu, mianowicie na tworzeniu sum kontrolnych.  
Funkcja haszująca przelicza uporządkowany zbiór danych i wyświetla jego wynik, tworząc pewną nową wartość zwaną hashem. Wartość hasha jest reprezentatywna dla oryginalnego ciągu znaków, ale zwykle jest mniejsza niż oryginał. 
Tutaj możemy zobaczyć przykładowy wygląd, otrzymanego hasha (instalator steam).
3b616cb0beaacffb53884b5ba0453312d2577db598d2a877a3b251125fb281a1
Przeliczając ponownie wartość hasha z danego pliku, zawsze dostaniemy ten sam wynik. Natomiast dokonując nawet minimalnej zmiany w zawartości programu, sprawiamy, że wyliczony hash zmienia się w sposób nieprzewidywalny.
Bezpieczna funkcja haszująca (np. SHA384) cechuje się tym, że jest:
-odporna na kolizje ( w rozsądnym czasie, nie istnieje metoda pozwalająca na znalezienie dwóch identycznych hashów dla dwóch różnych zbiorów danych, zwłaszcza konkretnych wcześniej wybranych wartości)
-jednokierunkowa (mając hash, nie istnieje możliwość odtworzenia pliku, z którego został on obliczony)

Podpisy cyfrowe


W tym momencie można by stwierdzić już, że mamy wszystko, co jest nam potrzebne do podpisania plików. Skoro mamy hash naszego pliku, a firma wydająca podpisy cyfrowe potwierdziła naszą tożsamość. To wystarczy, że dostarczymy tej firmie hash i problem zostanie rozwiązany.
No właśnie nie, co prawda takie działanie umożliwiłoby zweryfikowanie pliku, poprzez wyliczenie hasha ,a następnie porównanie go z tym opublikowanym przez firmę zajmującą się podpisami cyfrowymi, jednak nie na takiej funkcjonalności nam zależy.
Podpisując pliki, chcemy mieć możliwość robienia tego w dowolnym momencie, gdybyśmy musieli po każdej aktualizacji oprogramowania, zgłaszać kolejny hash, a następnie przechodzić ponownie weryfikacje tożsamości, byłoby to mocno problematyczne.
Cel jest więc prosty, chcemy mieć jeden podpis, który będziemy mogli używać na wielu plikach, bez konieczności ciągłego informowania firmy go wystawiającej.
RSA4096 
Czas więc na wyjaśnienie czym jest RSA4096, a jest to asymetryczny algorytm kryptograficzny. RSA to skrót od (Rivest-Shamir-Adleman- nazwiska twórców) natomiast liczba 4096 określa wielkość klucza (4096 bity).
RSA jest jednym z najpopularniejszych algorytmów asymetrycznych. Jeżeli nie wiesz, czym jest  kryptografia asymetryczna, zapraszam do przeczytania:
https://www.hejto.pl/wpis/o-utajnianiu-wiadomosci-w-komunikacji-bezposredniej
No dobrze, ale jak wygląda podpisywanie pliku za pomocą RSA. Jeżeli czytałeś moje wcześniejsze wpisy to wiesz, że szyfrowanie komunikacji za pomocą algorytmów asymetrycznych, polega na wygenerowaniu przez obie strony klucza prywatnego i publicznego, a następnie wymianie kluczy publicznych służących do szyfrowania wiadomości. 
W przypadku podpisywania plików generujemy tylko jedną parę kluczy. Klucz prywatny i klucz publiczny. Klucz publiczny przekazujemy firmie zajmującej się podpisami cyfrowymi. Natomiast klucz prywatny trzymamy w tajemnicy.
Aby podpisać plik, wykonujemy następujące czynności:
1. Wyliczamy hash z naszego pliku.
2. Szyfrujemy hash za pomocą klucza prywatnego.
3. Dołączamy zaszyfrowany hash do naszego pliku.

Osoba weryfikująca:
1. Sprawdza za pośrednictwem firmy zajmującej się podpisami, jaki mamy klucz publiczny.
2. Odszyfrowuje załączony hash za pomocą klucza publicznego.
3. Wylicza hash z pobranego programu.
4. Porównuje wyliczony hash z tym który odszyfrował, jeżeli się zgadzają, uznaje, że plik został poprawnie podpisany.

https://www.digicert.com/signing/code-signing-certificates
I gotowe, zweryfikowaliśmy podpis cyfrowy. Hash zapewnia nam integralność, natomiast kryptografia asymetryczna gwarantuje potwierdzenie tożsamości oraz niezaprzeczalność (tylko my mogliśmy zaszyfrować plik za pomocą tego konkretnego klucza prywatnego, bo tylko my go znamy, a skoro klucz publiczny umożliwił nam odszyfrowanie hasha, oznacza to, że został on zaszyfrowany odpowiadającym mu kluczem prywatnym).
Na zakończenie dodam, że opisałem tutaj mechanizm działania podpisów cyfrowych. W przypadku podpisywania plików dochodzą również elementy biurokracji (zasady, wymogi itp.), tak zwana infrastruktura klucza publicznego, dodatkowo istnieją również alternatywne niż tu opisana, metody podpisywania danych (np. web of trust).

Komentarze (0)

Zaloguj się aby komentować