Digestlinjer har formen “ALGORITME hash”, så de kan kopieres inn i utgivelsesnotater eller nedlastingsmanifester.
Hash Generator — hver algoritme forklart fra grunnen av
I én setning: en kryptografisk hash-funksjon er en enveis-blender — den tar et hvilket som helst antall byte og presser dem til et fingeravtrykk med fast lengde, slik at samme inndata alltid gir samme fingeravtrykk, men fingeravtrykket forteller ingenting om hvordan inndataene kan bygges opp igjen. Denne siden kjører elleve av dem helt inne i nettleserfanen.
Hver algoritme nedenfor forklares i de samme fire trinnene: hva den er med enkle ord, intuisjonen for hvordan den fungerer uten formler, om man fortsatt bør bruke den i dag, og feilene folk oftest gjør med den.
MD5
Hva den er. MD5 (1992) komprimerer et hvilket som helst inndata til et 128-bits (32 heksadesimale tegn) fingeravtrykk. Den ble designet for å være rask på 1990-tallets maskiner, og det er den — og nettopp derfor finnes den fortsatt overalt: nedlastingssider for programvare, cacher for filduplisering, eldre databasenøkler.
Hvordan det fungerer, intuitivt. Inndataene kuttes i 64-byte blokker. Hver blokk røres inn i en 128-bits løpende tilstand fire ganger (fire litt ulike blandingsrunder), og etter siste blokk skrives tilstanden ut som digesten. Røringen er bygget av addisjoner, rotasjoner og tabelloppslag — billig da, billig nå.
Bør man bruke den? For sjekksummer der ingen prøver å lure brukeren — å oppdage en ødelagt nedlasting, å finne duplikatfiler — ja, den rapporterer korrupsjon helt fint. For alt som er fiendtlig, nei: siden 2004 har forskere kunnet lage to ulike filer med samme MD5 på sekunder, og ekte sertifikatforfalskninger med MD5-kollisjoner forekom i 2008. Behandle den som et serienummer, ikke som et lås.
Vanlige feil. Å bruke MD5 for passord (langt for raskt — se Passordhasgeneratoren for hva som hører hjemme der i stedet); å stole på en fil fordi “MD5 stemmer”, når angriperen også har publisert MD5-verdien; og å lime inn hele linjen MD5 (fil) = hash i stedet for bare hashen — verifiseringsboksen over godtar begge deler.
SHA-1
Hva den er. SHA-1 (1995, NSA) gir en 160-bits (40 heksadesimale tegn) digest. I tjue år var den standard integritetshash for Git, TLS-sertifikater og PGP-signaturer.
Hvordan det fungerer, intuitivt. Samme familieoppskrift som MD5, men med en 160-bits tilstand, 80 blandingsrunder per 64-byte blokk, og et bredere sett med operasjoner. De ekstra rundene skulle gjøre blenderen vanskeligere å reverse-engineere.
Bør man bruke den? Nei, for alt som er fiendtlig. Det teoretiske bruddet ble praktisk i 2017 da Google laget to ulike PDF-filer med identiske SHA-1-verdier (SHAttered-angrepet, rundt 6500 CPU-år). Git lagrer fortsatt objekter under SHA-1, men behandler den bare som en identifikator, og har siden lagt til kollisjonsdeteksjon. For nytt arbeid brukes SHA-256 eller SHA-3.
Vanlige feil. Å tro at 160 bits “fortsatt er lange nok” — bruddet gjelder den interne strukturen, ikke brute force; og å forveksle RIPEMD-160 med SHA-1 fordi begge er 40 heksadesimale tegn lange (identifiseringsboksen over skiller dem).
SHA-2: SHA-256, SHA-384 og SHA-512
Hva den er. SHA-2-familien (2001, NSA) er arbeidshesten i moderne integritetskontroll. SHA-256 gir 256 bits (64 heksadesimale tegn), SHA-512 gir 512 bits, og SHA-384 er SHA-512 med resultatet kuttet til 384 bits — nyttig når en protokoll krever en kortere tag.
Hvordan det fungerer, intuitivt. Blokker på 64 byte (eller 128 byte for 512-bits-variantene) foldes inn i en 8-ords tilstand gjennom 64 (eller 80) runder med addér-roter-bland-steg. I motsetning til MD5 strekker tidsplanen først hver blokk ut i en utvidet buffer, og det er dette som beseiret angrepstypen som knekte MD5 og SHA-1. En kuriositet verdt å vite: på 64-bits prosessorer er SHA-512 raskere enn SHA-256, fordi den behandler dobbelt så mye data per runde med 64-bits aritmetikk.
Bør man bruke den? Ja — SHA-256 er standardsvaret for filsjekksummer, kodesignering og sertifikatfingeravtrykk i dag, med ingen kjent praktisk brudd etter to tiår med analyse. Bruk SHA-384/512 når man vil ha mer margin, eller når plattformen kjører dem raskere.
Vanlige feil. Å bruke SHA-256 alene for passord — den er en rask hash, og hastighet er fienden der (bruk bcrypt/scrypt/Argon2id); og å forveksle digestlengden med styrke når det gjelder kollisjonsresistens mot angripere — lengden setter bare taket.
SHA-3 (SHA3-256 / SHA3-512) og Keccak-256
Hva den er. SHA-3 (2015, standardisert fra Keccak-innleveringen av Bertoni, Daemen, Peeters og Van Assche) er NISTs tredje hash-standard. Den deler ingenting med SHA-2-interiøret — den ble valgt nettopp for å være en uavhengig reserve dersom SHA-2 skulle falle.
Hvordan det fungerer, intuitivt. I stedet for å røre blokker gjennom en liten tilstand, “suger og klemmer” Keccak gjentatte ganger: inndataene absorberes bit for bit i en 5×5×64-bits svamp, hele svampen blandes om av en fast permutasjon (24 runder med bitvise operasjoner over hele tilstanden), og digestbitene presses ut etterpå. Svamp-bildet er hele ideen: kapasitetsbitene skrives aldri ut, og det er de som gjør funksjonen enveis.
Keccak-256 kontra SHA3-256. De skiller seg nøyaktig ett utfyllingsbyte. Keccak-teamets opprinnelige innlevering fylte ut siste blokk med 0x01; NIST endret standardutfyllingen til 0x06 (domeneseparasjon som SHA-2-tidens Keccak bruker). Ethereum tok i bruk den opprinnelige utfyllingen, så deres “keccak256” skiller seg fra standard SHA3-256 for alle inndata. Denne siden tilbyr begge, avkrysset hver for seg.
Bør man bruke den? Ja — enten som hovedvalg når policyen ønsker en ikke-SHA-2-algoritme, eller der økosystemet allerede snakker den. Vanlige feil: å anta at SHA3-256 og Keccak-256 er utbyttbare (de er ikke det — sammenlign de to radene denne siden lager for samme inndata); og å anta at “SHA-3” erstatter SHA-2 — begge er sikre, og SHA-2 er fortsatt den mest utbredte.
RIPEMD-160
Hva den er. RIPEMD-160 (1996, RIPE-konsortiet av europeiske akademikere, forsterket av Dobbertin, Bosselaers og Preneel) gir 160 bits utdata. Den er et helt europeisk design, bevisst uavhengig av SHA-familien designet av NSA.
Hvordan det fungerer, intuitivt. Hver 64-byte blokk behandles av to parallelle spor med 80 runder med ulike konstanter og rotasjonsverdier; til slutt kombineres de to sporene og den gamle tilstanden. Den todelte strukturen var designernes måte å motstå differensialangrepene som knekte andre hasher fra 1990-tallet.
Bør man bruke den? I praksis lever den mest videre inni andre systemer: Bitcoin-adresser hasher offentlige nøkler med RIPEMD-160(SHA-256(pk)), eldre OpenPGP-nøkler tilbyr den som hashvalg, og den er den tradisjonelle hashen for BitTorrent v1-biter ved siden av SHA-1. Den har ingen praktisk kollisjonsangrep, men 160-bits størrelsen gir den minst sikkerhetsmargin på denne siden. For ny frittstående bruk foretrekkes SHA-256 eller SHA-3.
Vanlige feil. Å tro at de to parallelle sporene gjør den “dobbelt så sterk” — utdatastørrelsen er det som begrenser kollisjonsresistensen; og å forveksle den med SHA-1 (samme lengde på 40 heksadesimale tegn; identifiseringsboksen over lister begge mulighetene side om side).
BLAKE2b-512 og BLAKE2s-256
Hva den er. BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn og Winnerlein) er en hash designet for programvarehastighet: BLAKE2b er rettet mot 64-bits plattformer med opptil 512-bits utdata, BLAKE2s mot 32-bits plattformer med opptil 256-bits utdata.
Hvordan det fungerer, intuitivt. Det stammer fra SHA-3-finalisten BLAKE, hvis kjerne er en nøklet permutasjon lånt fra strømchifferet ChaCha: en 4×4-matrise av ord blandes om ved å veksle mellom kolonne- og diagonalblanding — som å stokke et rutenett først ovenfra og ned, deretter langs diagonalene — i 12 (BLAKE2b) eller 10 (BLAKE2s) runder per blokk. Fordi disse stegene passer godt til CPU-instruksjoner, er BLAKE2 ofte raskere enn MD5 og gir sikkerhet som kan sammenlignes med SHA-3.
Bør man bruke den? Ja — den er en fullt moderne, uknekket konstruksjon, populær i ytelseskritisk programvare (pakkeintegritet i noen økosystemer, innholdsadressert lagring, deduplisering i sikkerhetskopier) og som rask MAC. På denne siden gir BLAKE2b-512 de lengste digestene, og BLAKE2s-256 det kompakte moderne alternativet.
Vanlige feil. Å tro at “raskere må bety svakere” — BLAKE2 er raskere ved design, ikke fordi den har kuttet hjørner; og å ikke vite at BLAKE2 også tar en nøkkel (den blir da en MAC) eller en personaliseringsstreng — denne siden bruker den alltid i ren, ikke-nøklet modus.
Lese verifiserings- og identifiseringsboksene
Verifiser. Verifiseringsboksen normaliserer det som limes inn — store eller små bokstaver, kolon for hvert annet siffer, et prefiks som sha256=, BSD-stil innpakning SHA256 (fil) = hash, en GNU md5sum-linje med filnavnet etter hashen, løse \r\n — og beregner deretter hver avkrysset algoritme på nytt over gjeldende inndata (tekst eller den valgte filen), og rapporterer hver algoritme som stemmer. En grønn treff betyr “disse bytene er nøyaktig det utgiveren hashet”; rødt betyr at ingen av de avkryssede algoritmene ga den — prøv å krysse av flere algoritmer, eller sjekk om innlimingen ble kuttet av.
Identifiser. Identifiseringsboksen hasher ingenting; den leser formen på strengen. Lengden begrenser kandidatene: 32 heksadesimale tegn kan være MD5, 40 kan være SHA-1 eller RIPEMD-160, 64 kan være SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 SHA-384, 128 SHA-512 / SHA3-512 / BLAKE2b-512. Prefikser avslører passordhasher ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — det er en annen art (se Passordhasgeneratoren), og de beregnes med vilje ikke av denne siden. En streng med +, / og = der lengden er et multiplum av 4, er mer sannsynlig Base64-kodede data enn en heksadesimal digest; verktøyet dekoder den og rapporterer byte-lengden den tilsvarer.
Hva identifisering kan og ikke kan fortelle. Lengde og tegnsett er fingeravtrykk av formatet, ikke bevis for algoritmen: to 64-tegns heksstrenger kan komme fra SHA-256 eller fra avkortet SHA-512. Identifisereren rangerer mulighetene; verifiseringsboksen er den som beviser hvilken algoritme bytene faktisk stemmer med.
Alle elleve i ett blikk
| Algoritme |
Spalting |
Oppdiktet |
Digest av “The quick brown fox jumps over the lazy dog” |
| MD5 | 128 bits | 1992 | 9e107d9d372bb6826bd81d3542a419d6 |
| SHA-1 | 160 bits | 1995 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 |
| SHA-256 | 256 bits | 2001 | d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
| SHA-384 | 384 bits | 2001 | ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 |
| SHA-512 | 512 bits | 2001 | 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 |
| SHA3-256 | 256 bits | 2015 | 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 |
| SHA3-512 | 512 bits | 2015 | 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 |
| Keccak-256 | 256 bits | før 2015 | 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 |
| RIPEMD-160 | 160 bits | 1996 | 37f332f68db77bd9d7edd4969571ad671cf9dd3b |
| BLAKE2b-512 | 512 bits | 2013 | a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 |
| BLAKE2s-256 | 256 bits | 2013 | 606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812 |
Hver digest i tabellen over lages av motorene på denne siden selv — kryss av alle algoritmene, klikk Eksempel, og sammenlign. SHA-3-, Keccak-, RIPEMD-160- og BLAKE2-radene kommer fra den selvdrevne crypto-shared.js-kjernen som brukes på tvers av kryptoverktøyene på dette nettstedet.
Ofte stilte spørsmål
Hvilken boks skal man stole på for en nedlasting? Verifiseringsboksen, med SHA-256 avkrysset — de fleste utgivere signerer SHA-256 eller SHA-512 i dag. Identifiseringsboksen lister bare kandidater; den beviser aldri noe om filen.
Hvorfor er Keccak-256 med i listen i det hele tatt? Fordi Ethereum, Swarm og noen hovedbokssystemer standardiserte seg på den førstandardiserte utfyllingen. Verifiserer man en Ethereum-keccak256, må man bruke den raden, ikke SHA3-256.
Kan to ulike inndata dele en digest? I teorien, ja — uendelig mange inndata avbildes på et endelig sett digester (duehullsprinsippet). I praksis er det å finne et slikt par før universets varmedød det “kollisjonsresistens” handler om, og alle algoritmene over, bortsett fra MD5 og SHA-1, står fortsatt.
Er hasher kryptering? Nei. Kryptering er reversibel med en nøkkel; en hash er en enveis-blender. Ingenting på denne siden kan “dekrypteres” tilbake til teksten — og det er en egenskap, ikke en begrensning.