Czym są sumy kontrolne/funkcje skrótu?
Na dzień dobry odróżnijmy sumę kontrolną od kryptograficznej funkcji skrótu. Suma kontrolna to suma którą dodajemy do naszych danych, aby później sprawdzić czy nie uległy przypadkowej modyfikacji. Słowem-kluczem jest tutaj przypadkowość modyfikacji, a nie złośliwe modyfikacje wprowadzane przez napastników. Jeśli chcemy uzyskać taką sumę kontrolną, która oprze się również przypadkowości modyfikacji, musimy zastosować tzw. kryptograficzne funkcje skrótu. Są to takie funkcje, które dowolnie długiemu ciągowi bajtów przypisują ileś tam bajtów (zawsze tyle samo, w zależności od rodzaju funkcji) w taki sposób, aby drobna modyfikacja tekstu źródłowego powodowała lawinową zmianę sumy kontrolnej. Taka kryptograficzna funkcja skrótu (zwana dalej funkcją skrótu) ma również następujące cechy:
- Mając wartość funkcji niezwykle trudno skonstruować jest tekst, który da nam identyczną wartość funkcji.
- Bardzo trudno jest zmodyfikować tekst bez zmiany jego wartości funkcji skrótu.
- Ze względu na fakt, że tekstowi dowolnej długości przypisują odcisk palca o zawsze takiej samej długości na pewno będą występować tzw. kolizje. Kolizją nazwiemy tutaj istnienie dwóch tekstów co do których kryptograficzny odcisk palca jest taki sam. Odradzam jednak poszukiwanie ich na własną rękę.
Co ciekawe, można je również wykorzystać do sprawdzenia, czy przesłane nam pliki nie zostały przypadkowo (lub celowo) zmienione. Na dzień dobry musimy policzyć im sumę kontrolną MD5 (obecnie niezalecane) lub SHA256, przesłać ją do odbiorcy plików i poprosić o sprawdzenie, czy suma się zgadza.
Opcja Linuksowa
Każdy Linuks ma zainstalowane dwa narzędzia – md5sum i sha256sum. Zobaczmy jak wyglądają w praktyce:
# md5sum mesos-1.11.0-1.el7.x86_64.rpm
d20be619f6fa3f998337e08acc1bb11c mesos-1.11.0-1.el7.x86_64.rpm
# sha256sum mesos-1.11.0-1.el7.x86_64.rpm
e0132e3095e1ae44bf5b3218c25e603e98e8d1a7564281d6ea690f1e01ee53af mesos-1.11.0-1.el7.x86_64.rpm
Pytanie się, jaka jest różnica. Otóż ze względu na fakt, że SHA-256 jest dłuższy trudniej doprowadzić do czegoś takiego jak kolizja hashów, czyli wygenerowanie dwóch plików o tym samym hashu (odcisku palca), co czyni tyle trudniejsze zmontowanie ataku na taki hash. Po prostu dłuższy hash uniemożliwia zastosowanie tzw. tablic tęczowych, wybitnie przyśpieszających odnajdywanie kolizji hashy. A co było, gdybym Ci powiedział, że hasło którym logujesz się na stronie internetowej jest w bazie danych hashowane i niemożliwe jest jego odzyskanie? Dlatego właśnie na stronach internetowych już dawno wypadła opcja Przypomnij hasło, teraz jest Resetuj hasło. Dłuższy hash utrudnia włamywaczom robotę, gdyby weszli w posiadanie bazy hashów haseł. Istotnie, podpisywanie cyfrowych dokumentów nie podlega na podpisaniu całej jego treści (gdyż trwałoby to zbyt zbyt długo), a jedynie na policzeniu jego odcisku palca i podpisania tegoż. Jeśli natrafimy przypadkowo na dwa dokumenty o tej samej funkcji skrótu, z których jeden jest podpisany, po prostu przenosimy podpis. Temat brzmi tragicznie, ale póki co jesteśmy bezpieczni.
Jak to wygląda na Windowsie?
Od Windowsa 7 Pro dostępne jest narzędzie certutil
. Nieco ono pomaga. Powiedzmy, że pobraliśmy właśnie jakiś plik, np. plik.txt. Najpierw musimy ustalić, gdzie ono się znajduje. Wchodzimy w plik, klikamy go prawym przyciskiem myszy i wybieramy Właściwości. Powinniśmy zobaczyć teraz coś takiego:
Interesuje nas zwłaszcza pole Location (lub po polsku Lokalizacja). W tym przypadku będzie to C:\Users\epiomas\Downloads
. Kopiujemy je (zaznaczamy myszą, dajemy prawy klik i dajemy kopiuj).
Zapisujemy też nazwę pliku, o który nam wchodzi, w tym przypadku będzie to mesos-1.11.0-1.el7.x86_64.rpm
.
Teraz uruchommy linię poleceń cmd.exe
lub Windows PowerShell
, lub po prostu Wiersz poleceń
, to nieistotne. Następnie przed naszą ścieżką wpisujemy cd
i wklejamy to, co po ścieżce. Jeśli nasza nazwa katalogu ma spację. możemy całość ścieżki otoczyć cudzysłowami, jak pokazano poniżej
cd "C:\Users\epiomas\Downloads"
certutil -hashfile mesos-1.11.0-1.el7.x86_64.rpm MD5
Takie wykonanie komendy pozwoli nam zweryfikować hash MD5. Zwrotka komendy będzie wyglądać tak:
MD5 hash of mesos-1.11.0-1.el7.x86_64.rpm:
e147b303d5db9b12a809a63b4be7fae8
CertUtil: -hashfile command completed successfully.
Możemy również weryfikować hashe SHA256, dość podobnie.
cd "C:\Users\epiomas\Downloads"
Certutil -hashfile mesos-1.11.0-1.el7.x86_64.rpm SHA256
Zwrotka komendy będzie wyglądać mniej więcej tak:
SHA256 hash of mesos-1.11.0-1.el7.x86_64.rpm: e0132e3095e1ae44bf5b3218c25e603e98e8d1a7564281d6ea690f1e01ee53af CertUtil: -hashfile command completed successfully.
Zobaczmy jeszcze na własną rękę, że identyczne kody zostały obliczone dla systemu Windows i Linux, co zapewnia nam współpracę między systemami.