Generator hashy SHA-1

Uzyskaj 160-bitowy hash SHA-1 tekstu, bajtów hex lub pliku już w trakcie pisania. Porównaj go z opublikowaną sumą kontrolną i od razu zobacz SHA-256, SHA-512 oraz MD5 tych samych danych.

Wszystkie algorytmy

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wpisz tekst, ustaw „Wejście jako” na „Hex”, aby podać bajty szesnastkowo, albo kliknij „Otwórz plik”.
  2. SHA-1 jest wybrany domyślnie; zmień ustawienie w polu „Algorytm”, jeśli chcesz porównać wynik z inną funkcją hashującą.
  3. W polu „Wyjście jako” wybierz „hex (małe litery)” (w tej postaci hash wypisują sha1sum i Git), „HEX (wielkie litery)” lub „Base64”.
  4. 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.is6c667ee2efd2020349eed40efa07c26683f613c8
你好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?
160 bitów, czyli 20 bajtów: 40 znaków szesnastkowych lub 28 znaków Base64 zakończonych jednym znakiem =. 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.