SHA-1 (ang. Secure Hash Algorithm 1) to kryptograficzna funkcja haszująca, która została opracowana przez National Security Agency (NSA) i opublikowana przez National Institute of Standards and Technology (NIST) w 1993 roku. SHA-1 jest częścią rodziny algorytmów haszujących SHA, które służą do generowania skrótu (ang. hash) – ciągu bitów o stałej długości (160 bitów w przypadku SHA-1) – z dowolnie długiej wiadomości lub bloku danych.
Jak działa SHA-1?
- Wstępna obróbka danych:
- Przed rozpoczęciem właściwego procesu haszowania, dane wejściowe są przygotowywane. W pierwszym kroku dodawany jest bit o wartości 1 na końcu wiadomości, a następnie wiadomość jest wypełniana zerami, aż jej długość stanie się przystosowana do przetwarzania w blokach o rozmiarze 512 bitów.
- Dodanie długości wiadomości:
- Na końcu danych dołączana jest długość oryginalnej wiadomości (wyrażona w bitach) zapisana na 64 bitach. To pozwala na zachowanie integralności danych nawet po dodaniu wypełnienia.
- Podział na bloki:
- Dane są następnie dzielone na bloki o rozmiarze 512 bitów. Każdy blok jest przetwarzany oddzielnie przez algorytm SHA-1.
- Przetwarzanie bloków:
- Każdy blok jest przekształcany przez zestaw operacji bitowych, takich jak przesunięcia, zamiany i operacje logiczne. Proces ten obejmuje rundy modyfikacji, które są stosowane na wewnętrznych zmiennych stanu, które są następnie używane do obliczania ostatecznego skrótu.
- Generowanie skrótu:
- Po przetworzeniu wszystkich bloków powstaje wynikowy skrót o długości 160 bitów, który jest nieodwracalnym reprezentantem danych wejściowych.
Zastosowania SHA-1
W przeszłości SHA-1 był szeroko stosowany w różnych aplikacjach i protokołach kryptograficznych, takich jak:
- Podpisy cyfrowe: SHA-1 był używany do tworzenia skrótów dokumentów lub wiadomości, które następnie były podpisywane kluczem prywatnym w celu wygenerowania podpisu cyfrowego.
- Certyfikaty SSL/TLS: SHA-1 był używany do generowania skrótów certyfikatów cyfrowych stosowanych w protokołach SSL i TLS, które zabezpieczają połączenia internetowe.
- Systemy kontroli wersji: W systemach takich jak Git, SHA-1 był wykorzystywany do identyfikacji unikalnych wersji plików poprzez generowanie ich skrótów.
Problemy z bezpieczeństwem SHA-1
Pomimo szerokiego zastosowania, w miarę rozwoju badań nad kryptografią odkryto poważne słabości w SHA-1:
- Kolizje: SHA-1 jest podatny na ataki kolizyjne, co oznacza, że możliwe jest znalezienie dwóch różnych zestawów danych, które generują ten sam skrót. Taka możliwość podważa integralność systemów korzystających z SHA-1, ponieważ dwie różne wiadomości mogą być traktowane jako identyczne w kontekście kryptograficznym.
- Zdeprecjonowanie: Z powodu odkrycia tych słabości, SHA-1 został uznany za przestarzały i niewystarczająco bezpieczny do dalszego użytku w nowych systemach. Organizacje takie jak NIST i inne instytucje zajmujące się bezpieczeństwem zaleciły przejście na bardziej bezpieczne funkcje haszujące, takie jak SHA-256 lub SHA-3.
Aktualny status SHA-1
Od 2017 roku SHA-1 jest oficjalnie uznawany za niewystarczająco bezpieczny, a wiele przeglądarek internetowych, organizacji certyfikacyjnych i instytucji finansowych zaprzestało jego użycia na rzecz bardziej nowoczesnych i bezpiecznych algorytmów haszujących, takich jak SHA-256 i SHA-3. Chociaż SHA-1 jest nadal obecny w niektórych starszych systemach, jego użycie jest silnie odradzane w kontekście nowoczesnych aplikacji kryptograficznych.
Podsumowanie
SHA-1 był przez wiele lat podstawowym algorytmem haszującym, używanym w szerokim zakresie zastosowań kryptograficznych. Jednakże, ze względu na jego podatność na kolizje, został uznany za przestarzały i niezalecany do dalszego użycia. Współcześnie, zastąpiony został przez bezpieczniejsze algorytmy, takie jak SHA-256, które oferują wyższy poziom ochrony danych.