Tunnista hashin algoritmi

tunnistaa hashin todennäköisen algoritmin (MD5, SHA-1, SHA-256, bcrypt, argon2…) sen pituuden ja muodon perusteella, ja yrittää löytää selkokielisen tekstin yleisten salasanojen sanakirjasta
Liitä mikä tahansa hash (heksadesimaali, bcrypt $2y$..., argon2 $argon2id$...). Työkalu havaitsee todennäköisen algoritmin.

Mikä on kryptografinen tiiviste ?

Tiiviste (hash tai kryptografinen sormenjälki) on tulos funktiosta, joka muuntaa minkä tahansa kokoisen syötteen (salasanan, tiedoston, merkkijonon) kiinteän kokoiseksi merkkijonoksi. Tämä funktio on yksisuuntainen : tiivisteen perusteella on matemaattisesti mahdotonta palauttaa alkuperäistä syötettä. Kaksi identtistä syötettä tuottavat aina saman tiivisteen, mutta pienikin muutos syötteessä muuttaa tuloksen täysin.

Työkalumme tunnistaa todennäköisen algoritmin tiivisteen muodosta ja yrittää hakua (lookup) erittäin yleisten salasanojen sanakirjasta, jotka on esilaskettu pääasiallisille algoritmeille.

Kuinka tunnistaa tiiviste ?

Tunnistaminen perustuu kolmeen vihjeeseen :

  • Pituus : jokainen algoritmi tuottaa kiinteän kokoisen sormenjäljen.
  • Muoto : puhdas heksadesimaali, Base64 tai Modular Crypt Format tietyillä etuliitteillä.
  • Etuliite : nykyaikaiset salasanojen tiivisteet noudattavat muotoa $id$params$salt$hash, jossa id tunnistaa yksiselitteisesti käytetyn funktion.

Yleiset heksadesimaalipituudet

  • 8 merkkiä : CRC32 (tarkistussumma, ei kryptografinen tiiviste)
  • 32 merkkiä : MD5, MD4, NTLM, RIPEMD-128
  • 40 merkkiä : SHA-1, RIPEMD-160
  • 64 merkkiä : SHA-256, SHA3-256
  • 96 merkkiä : SHA-384, SHA3-384
  • 128 merkkiä : SHA-512, SHA3-512, Whirlpool

Pituus yksinään ei riitä johtopäätökseen : esimerkiksi MD5 ja NTLM jakavat saman 32 heksamerkin koon. Työkalumme palauttaa tällöin luettelon mahdollisista algoritmeista.

Modular Crypt Format -etuliitteet

crypt()-funktiosta tai nykyaikaisista kirjastoista peräisin olevat salasanojen tiivisteet käyttävät selkeää etuliitettä :

  • $1$ : MD5 crypt
  • $5$ : SHA-256 crypt
  • $6$ : SHA-512 crypt
  • $2y$, $2a$, $2b$ : Bcrypt (muunnelmia alustan mukaan)
  • $argon2i$, $argon2id$, $argon2d$ : Argon2 (käyttömuunnelmia, Argon2id on nykyään suositeltu)

Esimerkki Bcrypt-tiivisteestä

$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Käyttötapaukset

  • Datan vuotojen analysointi : tunnistetaan vaarantuneen tietokannan käyttämä algoritmi hyökkäyksen vaikeusasteen arvioimiseksi.
  • Vianmääritys : vahvistetaan nopeasti, mikä algoritmi on luonut API-vastauksesta tai lokista löytyneen sormenjäljen.
  • Tietoturva-auditointi: etsi järjestelmä, joka tallentaa edelleen salasanoja MD5- tai SHA-1-muodossa (vältettävä).
  • Forensiikka: artefaktin tunnistaminen tutkinnassa.

Miksi tiiviste ei ole palautettavissa

Tiivistefunktio on suunniteltu olemaan yksisuuntainen. Ei ole olemassa algoritmia "tiivisteen purkamiseen", koska tiiviste ei ole salausta: se on projektio. Useat eri syötteet voivat teoriassa tuottaa saman tiivisteen (törmäys), joten vaikka tietäisit syötteen, joka tuottaa oikean tiivisteen, sinulla ei ole takuuta siitä, että se on alkuperäinen syöte.

Käytännössä tiivisteen "murtaminen" tarkoittaa ehdokassyötteiden massiivista testaamista, kunnes löytyy sellainen, jonka sormenjälki vastaa haluttua. Tätä tekevät sanastohyökkäykset ja brute force -hyökkäykset.

Sisäänrakennettu sanastohaku

Työkalumme sisältää pienen sanaston, jossa on 39 erittäin yleistä salasanaa: tyhjä merkkijono, password, admin, 123456, qwerty, letmein jne. Nämä 39 syötettä on esilaskettu 10 algoritmilla (MD5, SHA-1, SHA-256, SHA-512, MD4, NTLM jne.). Jos tiivisteesi vastaa jotakin näistä sormenjäljistä, työkalu palauttaa salasanan selkokielisenä.

Tämä ominaisuus havainnollistaa, miksi yksinkertaiset tiivisteet eivät sovellu salasanoille: hyökkääjän ei tarvitse edes laskea mitään, hän vain katsoo taulukosta.

Yksinkertainen tiiviste vs. salasanatiiviste

Kaikki tiivisteet eivät ole samanarvoisia salasanojen tallentamiseen:

  • Yksinkertaiset tiivisteet (MD5, SHA-256, SHA-512): suunniteltu olemaan nopeita, mikä on heikkous, kun halutaan vastustaa brute force -hyökkäystä. Ne eivät oletuksena sisällä suolaa (salt), joten kahdella käyttäjällä, joilla on sama salasana, on sama tiiviste, mikä altistaa esilaskettuihin taulukoihin (rainbow tables) perustuville hyökkäyksille.
  • Salasanatiivisteet (bcrypt, scrypt, Argon2): suunniteltu olemaan rakenteellisesti hitaita, sisältävät satunnaisen suolan ja säädettävän kustannuskertoimen. Argon2id on nykyään OWASP:n suosittelema huipputeknologia.

Työkalun käyttöohje

  1. Liitä tiiviste syötekenttään.
  2. Työkalu tunnistaa muodon (pituus, etuliite) ja ehdottaa mahdollisia algoritmeja.
  3. Jos tiiviste vastaa erittäin yleistä salasanaa, selkokielinen sana näytetään.
  4. Muussa tapauksessa saat luettelon ehdokasalgoritmeista, joita voit tutkia tarkemmin siihen tarkoitetulla työkalulla.

Usein kysytyt kysymykset

Miksi bcrypt-tiivistettäni ei löydy sanastosta?

Bcrypt käyttää yksilöllistä satunnaista suolaa jokaisessa tiivisteessä: vaikka salasana olisi password, jokainen käyttäjä tuottaa eri tiivisteen. Sanaston esilaskenta ei siis toimi. Tämä on juuri se ominaisuus, joka tekee bcryptistä vastustuskykyisen taulukkohyökkäyksille.

Mitä tehdä, jos samalle pituudelle on useita mahdollisia algoritmeja?

Käytä apuna muita vihjeitä: tiivisteen lähde (Active Directory viittaa NTLM:ään, Linuxin /etc/shadow SHA-512 cryptiin, vanha MySQL-tietokanta MD5:een jne.) ja sovellusympäristö. Samanpituisten joukossa MD5 on tilastollisesti todennäköisin vanhoissa järjestelmissä.

Miten tiiviste "murtetaan" käytännössä?

Laillisissa tietoturvatesteissä (auditointi, penetraatiotestaus) käytettävät standardityökalut ovat John the Ripper ja hashcat. Ne hyväksyvät valtavia sanalistoja (rockyou jne.) ja hyödyntävät näytönohjainta (GPU) miljardien ehdokkaiden testaamiseen sekunnissa. Mahdollisuus onnistua riippuu algoritmista: MD5 ja SHA-1 murtuvat nopeasti, bcrypt ja Argon2 hidastavat hyökkäystä useilla kertaluokilla.

Onko sisäänrakennettu sanasto selattavissa?

Sanasto on tarkoituksella minimalistinen (39 syötettä) ja sen tarkoituksena on havainnollistaa yksinkertaisten tiivisteiden heikkoutta triviaalien salasanojen kohdalla. Vakavampaan käyttöön kannattaa käyttää ulkoista sanalistaa (rockyou, SecLists) John the Ripperin tai hashcatin kanssa.

Voiko tiivisteen "purkaa"?

Ei. Tiiviste ei ole salausta: käänteisfunktiota ei ole olemassa. Kaikki sivustot, jotka lupaavat "purkaa tiivisteen", tekevät todellisuudessa haun esilasketusta tietokannasta. Jos salasanasi on uniikki ja pitkä, sitä ei sieltä löydy.

Pyyntöesimerkki

curl -X POST https://cdrn.fr/api/v1/tools/hash-identifier/execute \
  -H "Content-Type: application/json" \
  -d '{"hash":"..."}'

Syöteskeema

Kenttä Tyyppi Pakollinen Oletus
hash text

Päätepisteet

  • GET https://cdrn.fr/api/v1/tools - listaa kaikki saatavilla olevat työkalut
  • GET https://cdrn.fr/api/v1/tools/hash-identifier - hakee tämän työkalun skeeman
  • POST https://cdrn.fr/api/v1/tools/hash-identifier/execute - suorittaa tämän työkalun JSON-payloadilla