Sikker koding og OWASP Top 10 for backend · leksjon

Nøkkelhåndtering og hashing

Utforsk sikre metoder for håndtering av krypteringsnøkler, bruk sterke hashingalgoritmer for passord og unngå vanlige kryptografiske fallgruver.

Leksjon 3 av 412 trinn

Nøkkelhåndtering og hashing er en gratis leksjon i Sikker koding og OWASP Top 10 for backend på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Sikker koding og OWASP Top 10 for backend, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Sikker koding og OWASP Top 10 for backend inneholder totalt 4 leksjoner.

Introduksjon til kryptografiske nøkler

Velkommen til denne leksjonen om nøkkelhåndtering og hashing! Vi skal utforske hvordan De beskytter hemmelighetene som beskytter dataene Deres.

Kryptografiske nøkler er grunnleggende for sikker kommunikasjon og datalagring. Tenk på dem som hemmelige passord eller unike stempler som låser og låser opp sensitiv informasjon.

Hvorfor nøkkelsikkerhet er viktig

Sikkerheten til hele systemet Deres avhenger ofte av sikkerheten til de kryptografiske nøklene.

  • Datainnbrudd: Hvis en angriper får tilgang til krypteringsnøklene, blir alle data som er kryptert med disse nøklene lesbare.
  • Etterligning: Kompromitterte signeringsnøkler kan gjøre det mulig for angripere å forfalske identiteter eller manipulere data uten å bli oppdaget.
  • Svekket tillit: Tap av nøkler kan føre til et fullstendig sammenbrudd i tilliten til sikkerheten i systemet.

Generering av sterke nøkler

Nøkler må være virkelig tilfeldige og tilstrekkelig lange for å være sikre. Svake eller forutsigbare nøkler er enkle for angripere å gjette.

Bruk alltid kryptografisk sikre tilfeldighetstallgeneratorer (CSRNG-er) fra programmeringsspråkets standardbibliotek. Ikke implementer en egen!

Prøv å kjøre dette eksempelet for å se hvordan en sikker nøkkel kan genereres:

import java.security.SecureRandom;
import java.util.Base64;

public class KeyGenerator {
  public static void main(String[] args) {
    SecureRandom random = new SecureRandom();
    byte[] keyBytes = new byte[32]; // 256-bit key
    random.nextBytes(keyBytes);
    String base64Key = Base64.getEncoder().encodeToString(keyBytes);
    System.out.println("Generated Key: " + base64Key);
  }
}

Sikker lagring av nøkler

Når nøkler er generert, må de lagres sikkert. Dette er et av de viktigste aspektene ved nøkkelhåndtering.

  • Hardware Security Modules (HSM-er): Dedikerte fysiske enheter for sikker generering og lagring av nøkler samt kryptografiske operasjoner.
  • Key Management Services (KMS): Skybaserte tjenester (for eksempel AWS KMS og Azure Key Vault) som tilbyr sikker lagring av nøkler og håndtering av nøkkelens livssyklus.
  • Unngå: Å lagre nøkler direkte i kildekode, konfigurasjonsfiler eller versjonskontroll.

Nøkkelrotasjon for lang levetid

Selv med den beste lagringen kan nøkler etter hvert bli kompromittert. Regelmessig nøkkelrotasjon begrenser skaden hvis en nøkkel blir eksponert.

Nøkkelrotasjon innebærer å generere en ny nøkkel, kryptere dataene på nytt med den nye nøkkelen og arkivere eller ødelegge den gamle nøkkelen på en sikker måte. Dette reduserer «eksponeringsvinduet» for hver enkelt nøkkel.

Forstå hashing

Hashing er en enveisprosess som omformer inndata til en tegnstreng med fast lengde, kalt en hash eller digest.

  • Enveis: Det er ikke enkelt å reversere en hash for å få tilbake de opprinnelige dataene.
  • Fast lengde: Uansett størrelsen på inndataene har hash-resultatet alltid samme lengde.
  • Unik (for det meste): En svært liten endring i inndataene gir en helt annerledes hash.

Hashing er avgjørende for å bekrefte dataintegritet og lagre passord på en sikker måte.

Sikker hashing av passord

Lag aldri brukerpassord i klartekst eller kryptert form. Lagre alltid hashen deres.

Hvis en database blir kompromittert, får angriperne bare hasher, ikke de faktiske passordene. Siden hashing er enveis, kan de ikke enkelt gjenopprette de opprinnelige passordene.

Enkel hashing er imidlertid ikke nok alene. Vi trenger flere teknikker!

Saltets kraft

Et salt er en unik, tilfeldig streng som legges til et passord før det hashes. Hver bruker får et forskjellig salt.

Salting forhindrer rainbow table-angrep, der angripere forhåndsberegner hasher for vanlige passord. Med salt blir de lagrede hashene helt forskjellige, selv om to brukere har samme passord.

Dette eksempelet viser konseptuelt hvordan et salt legges til før hashing:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;

public class PasswordHasher {
  public static void main(String[] args) throws NoSuchAlgorithmException {
    String password = "mySecretPassword";
    
    // Generate a random salt for each user
    SecureRandom random = new SecureRandom();
    byte[] saltBytes = new byte[16]; // 128-bit salt
    random.nextBytes(saltBytes);
    String salt = Base64.getEncoder().encodeToString(saltBytes);
    
    // Combine password and salt, then hash
    String saltedPassword = password + salt;
    MessageDigest md = MessageDigest.getInstance("SHA-256"); // Illustrative
    byte[] hashedPasswordBytes = md.digest(saltedPassword.getBytes());
    String hashedPassword = Base64.getEncoder().encodeToString(hashedPasswordBytes);
    
    System.out.println("Password: " + password);
    System.out.println("Salt: " + salt);
    System.out.println("Hashed Password (with salt): " + hashedPassword);
  }
}

Moderne hashingalgoritmer

For hashing av passord må De ikke bruke hashfunksjoner for generell bruk, som SHA-256 eller MD5. De er for raske, noe som gjør brute force-angrep enklere.

Bruk heller algoritmer som er utviklet spesielt for å være langsomme og beregningskrevende:

  • Bcrypt: Mye brukt og sterkt anbefalt.
  • Scrypt: Et annet robust alternativ, som er spesielt motstandsdyktig mot GPU-baserte angrep.
  • Argon2: Vinneren av Password Hashing Competition, og regnes som toppmoderne.

Disse algoritmene har justerbare «work factors» som gjør det mulig å øke beregningskostnaden over tid.

Unngå fallgruver innen kryptografi

Kryptografi er komplekst. Vanlige feil kan svekke sikkerheten betydelig:

  • Ikke lag Deres egen kryptografi: Bruk alltid velprøvde, standardiserte kryptografibiblioteker. Egne implementasjoner er nesten alltid usikre.
  • Hardkodede nøkler: Legg aldri krypteringsnøkler direkte inn i koden.
  • Bruk av svake algoritmer: Unngå utdaterte eller kjente sårbare algoritmer (for eksempel MD5, SHA1 for sikkerhetsformål, DES og RC4).
  • Feilaktig tilfeldighet: Ikke bruk tilfeldighetsgeneratorer som ikke er kryptografisk sikre, til sikkerhetsoppgaver.

Test kunnskapene Deres

Hvilke av følgende regnes som anbefalte fremgangsmåter for håndtering av kryptografiske nøkler og passord?

Oppsummering og neste steg

I denne leksjonen har vi gått gjennom viktige aspekter ved håndtering av kryptografiske nøkler og sikker hashing av passord.

  • Nøkler: Generer sterke, tilfeldige nøkler, lagre dem sikkert (HSM/KMS), og roter dem regelmessig.
  • Hashing: Hash alltid passord ved hjelp av unike salt og langsomme, spesialutviklede algoritmer som bcrypt, scrypt eller Argon2.
  • Unngå fallgruver: Lag aldri Deres egen kryptografi, hardkod aldri nøkler, og bruk ikke svake algoritmer.

Ved å følge disse fremgangsmåtene styrker De backend-applikasjonene Deres betydelig mot datainnbrudd og uautorisert tilgang. Fortsett å lære, og hold systemene sikre!

Gratis å komme i gang

Lær deg Sikker koding og OWASP Top 10 for backend med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Nøkkelhåndtering og hashing» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Sikker koding og OWASP Top 10 for backend, inkludert «Nøkkelhåndtering og hashing», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Sikker koding og OWASP Top 10 for backend inneholder totalt 4 leksjoner.

Hva lærer jeg i «Nøkkelhåndtering og hashing»?

Utforsk sikre metoder for håndtering av krypteringsnøkler, bruk sterke hashingalgoritmer for passord og unngå vanlige kryptografiske fallgruver. Du øver på Sikker koding og OWASP Top 10 for backend med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Sikker koding og OWASP Top 10 for backend?

Ingen tidligere erfaring er nødvendig. Sikker koding og OWASP Top 10 for backend på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Nøkkelhåndtering og hashing»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Sikker koding og OWASP Top 10 for backend-leksjonen?

Ja. Alle Sikker koding og OWASP Top 10 for backend-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Beskyttelse av sensitive data i hvile
  2. Sikring av data i transitt (TLS/SSL)
  3. Nøkkelhåndtering og hashing
  4. Sikker håndtering av hemmeligheter
← Tilbake til Sikker koding og OWASP Top 10 for backend