Jak używać
- Wpisz tekst, ustaw „Wejście jako” na „Hex”, aby podać bajty szesnastkowo, albo kliknij „Otwórz plik”.
- SHA-1 jest wybrany domyślnie; zmień ustawienie w polu „Algorytm”, jeśli chcesz porównać wynik z inną funkcją hashującą.
- W polu „Wyjście jako” wybierz „hex (małe litery)” (w tej postaci hash wypisują sha1sum i Git), „HEX (wielkie litery)” lub „Base64”.
- Wklej oczekiwany SHA-1 do pola „Porównaj z”; strona pokaże komunikat „Zgadza się” lub „Nie zgadza się”.
Czym jest SHA-1?
SHA-1 (Secure Hash Algorithm 1) został zaprojektowany przez NSA i opublikowany przez NIST w 1995 roku jako FIPS 180-1, zastępując krótko używany SHA-0. Obecnie jego specyfikację zawiera FIPS 180-4, a RFC 3174 opisuje go wraz z przykładowym kodem w C. SHA-1 przetwarza bloki 512-bitowe w 80 rundach i daje 160-bitowy hash: 40 znaków szesnastkowych lub 28 znaków Base64.
Jak każda funkcja hashująca, SHA-1 działa jednokierunkowo. Hasha nie da się odszyfrować – można go jedynie dopasować, hashując kolejne odgadywane wartości. Właśnie w ten sposób masowo złamano hashe haseł SHA-1 bez soli, które w 2012 roku wyciekły z serwisu LinkedIn. Hasła należy przechowywać za pomocą Argon2, scrypt, bcrypt lub PBKDF2.
SHAttered: dlaczego SHA-1 jest wycofywany
W lutym 2017 roku badacze z CWI Amsterdam i Google opublikowali SHAttered – pierwszą rzeczywistą kolizję SHA-1: dwa różne pliki PDF o tym samym hashu, znalezione kosztem około 2^63 obliczeń SHA-1. W 2020 roku Gaëtan Leurent i Thomas Peyrin („SHA-1 is a Shambles”) wykorzystali kolizję z wybranym prefiksem do zademonstrowania podrobionych podpisów SHA-1 na kluczach PGP, przy koszcie w zasięgu dobrze finansowanego atakującego.
- Publiczne urzędy certyfikacji przestały wydawać certyfikaty TLS z SHA-1 w 2016 roku, a przeglądarki przestały im ufać na początku 2017 roku.
- NIST nie dopuszcza SHA-1 do nowych podpisów cyfrowych od 2013 roku i planuje całkowicie wycofać ten algorytm do końca 2030 roku.
- Większość repozytoriów Git nadal identyfikuje obiekty za pomocą SHA-1, obliczanego wzmocnioną implementacją, która wykrywa próby wywołania kolizji; Git potrafi też tworzyć repozytoria korzystające z SHA-256.
Kolizje nie łamią HMAC, dlatego HMAC-SHA1 wciąż występuje w kodach TOTP i starszych podpisach webhooków; można go obliczyć w Generatorze HMAC. We wszystkich nowych zastosowaniach wybierz SHA-256.
Identyfikatory obiektów Git, Base64 i kodowanie tekstu
Identyfikator obiektu blob w Git nie jest SHA-1 samego pliku. Git hashuje nagłówek złożony ze słowa blob, spacji, rozmiaru w bajtach i bajtu zerowego, a po nim zawartość pliku. Aby odtworzyć taki identyfikator tutaj, ustaw „Wejście jako” na „Hex” i dołącz bajty nagłówka: dla hello ze znakiem nowego wiersza dane wejściowe w hex to 626c6f6220360068656c6c6f0a.
$ printf 'hello\n' | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f -
$ printf 'hello\n' | git hash-object --stdin
ce013625030ba8dba906f756967f9e9ca394464a
SHA-1 wyświetla się zwykle jako hex zapisany małymi literami. Base64 pojawia się w uzgadnianiu połączenia WebSocket, gdzie Sec-WebSocket-Accept to zakodowany w Base64 SHA-1 klucza klienta połączonego ze stałym identyfikatorem GUID, a także w wartościach haseł LDAP {SHA}. Pamiętaj, że hash obejmuje bajty: tekst ze znakami diakrytycznymi ma jeden SHA-1 w UTF-8, a inny w Windows-1252.
SHA-1 w wierszu poleceń i w kodzie
sha1sum file.zip # Linux
shasum file.zip # macOS (domyślnie SHA-1)
certutil -hashfile file.zip SHA1 # Windows
Get-FileHash file.zip -Algorithm SHA1 # PowerShell
# Python
hashlib.sha1(data).hexdigest()
// Node.js
crypto.createHash('sha1').update(data).digest('hex')
Ta strona oblicza SHA-1 za pomocą wbudowanego w przeglądarkę interfejsu Web Crypto API, więc dane wejściowe nigdy nie opuszczają urządzenia. Tabela „Wszystkie algorytmy” pokazuje wartości MD5, SHA-256, SHA-384, SHA-512 i CRC dla tych samych danych.
Przykłady
| Wejście (UTF-8) | SHA-1 |
|---|---|
Hello, World! | 0a0a9f2a6772942557ab5355d76af442f8f65e01 |
Base64.is | 6c667ee2efd2020349eed40efa07c26683f613c8 |
你好 | 440ee0853ad1e99f962b63e459ef992d7c211722 |
Najczęściej zadawane pytania
Czy SHA-1 jest nadal bezpieczny?
Nie tam, gdzie atakujący może wybrać dane wejściowe lub na nie wpłynąć, czyli na przykład w podpisach i certyfikatach, ponieważ da się wytwarzać kolizje SHA-1. Nadal wykrywa przypadkowe uszkodzenia, a kolizje nie mają wpływu na HMAC-SHA1. W nowych projektach używaj SHA-256 lub SHA-512.
Czy hash SHA-1 można odwrócić?
Nie. Nie ma klucza ani deszyfrowania. Serwisy wyszukujące hashe znajdują tylko dane, które już są w ich tabelach popularnych słów i haseł z wycieków, dlatego długi losowy ciąg jest przed nimi bezpieczny, a krótkie hasło nie.
Jak długi jest hash SHA-1?
=. Taką samą długość ma RIPEMD-160, a hashe haseł MySQL 4.1+ to gwiazdka, po której następuje 40 znaków szesnastkowych. Identyfikator hashy wyświetla możliwe algorytmy dla podanego ciągu.Jak sprawdzić plik z opublikowaną wartością SHA-1?
Kliknij „Otwórz plik”, a następnie wklej opublikowaną wartość do pola „Porównaj z”. Akceptowany jest hex zapisany wielkimi lub małymi literami oraz Base64, a strona pokazuje komunikat „Zgadza się” lub „Nie zgadza się”.
Czym różni się SHA-1 od SHA-256?
Oba algorytmy opublikował NIST, ale SHA-256 należy do nowszej rodziny SHA-2, daje 256-bitowy wynik i nie są znane żadne praktyczne ataki na niego. SHA-1 ma krótszy wynik, a jego odporność na kolizje została złamana.