Ingen opplasting, 100% lokalt, ingen konto

Artikkel

Kode og dekode data privat

Utviklere limer hver dag inn tokener, nyttelaster og legitimasjon i sider for koding og dekoding. De mest praktiske kjører på en server, noe som betyr at dataene dine forlater enheten for en oppgave som aldri krevde det. Disse fire verktøyene kjører helt i nettleseren, så dataene blir hos deg.

Base64: det ser rotete ut, men er ikke hemmelig

Base64 er en koding, ikke kryptering. Den gjør binære data om til tekst som tåler en kopier og lim inn eller transport gjennom systemer som bare håndterer enkle tegn. Den som ser Base64-strengen, kan dekode den tilbake til originalen i ett eneste trinn, så en streng som inneholder en API-nøkkel, et privat sertifikat eller innholdet i en e-post er fullt lesbar for den som har den. Risikoen er at den verdien ofte gjemmer seg i konfigurasjonsfiler, data-URL-er eller autentiseringshoder og ser uforståelig ut, noe som frister til å lime den inn i den første dekoderen man finner på nettet. Den dekoderen mottar den rå hemmeligheten. Et verktøy som dekoder Base64 lokalt, viser deg de opprinnelige bytene uten at verdien noen gang når en server.

Hello! kodet til SGVsbG8h og dekodet tilbake, som viser at Base64 kan reverseres av hvem som helst uten nøkkel.

URL-koding: spørrestrenger bærer mer enn du tror

Prosentkoding lar deg trygt sette mellomrom, aksenter og reserverte tegn inn i en URL. Teksten du koder eller dekoder, er ofte en ekte spørrestreng fra en applikasjon, og de bærer økt-IDer, søkeord, e-postadresser, omdirigeringsmål og noen ganger signerte parametre. Å lime inn en fullstendig URL i en fjernkoder overleverer alt dette til en tredjepart på én gang, og spørrestrenger er nettopp den typen verdi som havner i serverlogger. Å kode og dekode i nettleseren betyr at URL-en behandles i minnet på din egen enhet og aldri overføres mens du jobber med den.

JWT: nyttelasten er signert, ikke skjult

En JSON Web Token består av tre Base64url-seksjoner skjøtet sammen med punktum: et hode, en nyttelast og en signatur. Signaturen beviser at tokenet ikke er tuklet med, men gjør ingenting for å skjule nyttelasten, som dekodes til lesbar JSON med bruker-IDer, roller, utløpstider og alle egendefinerte påstander utstederen la til. Et gyldig token er også en levende legitimasjon: helt til det utløper, kan hvem som helst som har det, opptre som brukeren. Å lime inn et fungerende token i en dekoder på nettet sender en aktiv legitimasjon til en server du ikke kontrollerer. En dekoder som tolker tokenet i nettleseren din, avslører det samme hodet og nyttelasten uten at tokenet noen gang forlater siden.

De tre delene av en JWT: lesbar header, lesbar payload, og en signatur som beviser integritet uten å skjule noe.

Hashing: inndataene betyr mer enn sammendraget

En hashfunksjon gjør hvilken som helst inndata om til et sammendrag med fast lengde, og du kan ikke reversere sammendraget tilbake til inndataene. Den egenskapen gjør hashing nyttig for å verifisere integriteten til en fil eller sammenligne verdier uten å lagre originalen. Haken er på inndatasiden: for å beregne hashen av et passord, et dokument eller en konfigurasjonshemmelighet må du gi verktøyet den virkelige verdien. Hvis det verktøyet kjører på en server, reiser de sensitive inndataene dit selv om bare det ufarlige sammendraget returneres. Å beregne hashen lokalt holder inndataene på enheten din, så du får sammendraget du trenger uten å avsløre det du hashet.

Base64-koding: bytemapping og utfylling

Base64 oversetter 8-bits byte til 6-bits tegn ved å gruppere tre inndatabyte (24 bits) til fire 6-bits verdier. Hver 6-bits verdi tilordnes et tegn i Base64-alfabetet (A-Z, a-z, 0-9, +, /). Fordi prosessen krever inndata delbare med 24 bits, fylles korte inndata ut: én gjenværende byte gir to utfyllingstegn (==), to gjenværende byte gir ett (=). Base64url-varianten, brukt i JSON Web Tokens (JWTs), erstatter + med - og / med _ for å gjøre strengen URL-sikker, og fjerner = -utfyllingen helt, siden utfyllingstegn kan gi feil i strenge URI-parsere. Det er nyttig å kjenne til dette skillet når man feilsøker tokenhåndtering: en JWT som ser malformatert ut, kan rett og slett være Base64url-kodet heller enn standard Base64.

JWT-signaturer: HS256, RS256 og algoritmeforvirring

Sikkerheten til et JSON Web Token avhenger helt av signaturen, det tredje punktadskilte segmentet. Med HS256 (HMAC-SHA256) signerer serveren den Base64url-kodede hodet og nyttelasten ved hjelp av en hemmelig nøkkel. SHA-256-hashfunksjonen gir kollisjonsresistens: det er beregningmessig umulig å produsere en modifisert nyttelast som hasher til samme signatur uten å kjenne den hemmelige nøkkelen. Med RS256 signerer serveren med en RSA-privatnøkkel og verifiserer med en offentlig nøkkel. En kjent sårbarhet kalt algoritmeforvirring oppstår når et serverbibliotek ikke håndhever den forventede algoritmetypen strengt. En angriper kan endre tokenhodets alg-felt fra RS256 til HS256 og signere tokenet med serverens offentlige nøkkel som HMAC-hemmelighet, siden offentlige nøkler ofte er tilgjengelige. Å dekode JWT-hodet lokalt i nettleseren lar deg bekrefte hvilken algoritme som faktisk er angitt, uten å eksponere det aktive tokenet for tredjeparts loggesystemer.

Verktøy i denne artikkelen

Ofte stilte spørsmål

Er Base64 eller URL-koding en form for sikkerhet?

Nei. Begge er reversible kodinger laget for sikker transport av data, ikke for å beskytte dem. Den som kan lese den kodede strengen, dekoder den umiddelbart, uten nøkkel eller passord. Må du holde en verdi konfidensiell, krypter den med en passende algoritme og forvalt nøkkelen separat. Behandle enhver verdi i Base64 eller prosentkoding som om den sto i klartekst.

Hvorfor spiller det noen rolle hvor jeg dekoder et token eller hasher et passord?

Fordi inndataene er den sensitive delen. Et gyldig JWT er en levende legitimasjon, og passordet du hasher, er den virkelige hemmeligheten. Et serverbasert verktøy mottar de rå inndataene før det i det hele tatt returnerer et resultat, noe som betyr at en kopi kan logges eller beholdes et sted du ikke ser. Et verktøy som kjører i nettleseren din, utfører den samme operasjonen i minnet på din egen enhet, så tokenet eller passordet sendes aldri noe sted.