Vanlige mønstre for feilbruk av kryptografi
Få oversikt over de vanligste utviklerfeilene: ECB-modus, svak initiering av PRNG og å lage sin egen kryptografi.
Vanlige mønstre for feilbruk av kryptografi er en gratis leksjon i Cryptology Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Cryptology Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Cryptology Academy inneholder totalt 4 leksjoner.
ECB-modus avslører blokkmønstre
Electronic Codebook-modus (ECB) krypterer hver blokk uavhengig med den samme nøkkelen. Identiske klartekstblokker gir identiske chiffertekstblokker. Den klassiske demonstrasjonen er «ECB-pingvinen»: Når et punktgrafikkbilde krypteres med ECB, bevares bildets struktur på blokknivå, slik at omrisset av pingvinen er tydelig synlig i chifferteksten. ECB-modus gir ingen semantisk sikkerhet og bør aldri brukes til praktisk kryptering.
Å lage sin egen kryptografi
Å implementere kryptografiske primitiver fra grunnen av er en av de farligste praksisene innen programvareutvikling. Kryptografi krever perfekt korrekthet under forhold der en angriper aktivt prøver å finne feil: En subtil timing-lekkasje, en feil med polstring på grunn av én enkelt forskyvning eller en misforståelse av sikkerhetskravene kan skape utnyttbare sårbarheter som ikke kan skilles fra korrekt oppførsel i normale tester. Selv ekspertkryptografer gjør implementasjonsfeil; applikasjonsutviklere bør utelukkende bruke biblioteker som er grundig sikkerhetsrevidert.
MD5 og SHA-1 til sikkerhetsformål
Det har vært mulig å finne kollisjoner i MD5 siden 2004; det er beregningsmessig trivielt å lage to filer med samme MD5-hash. Kollisjonsangrep mot SHA-1 ble demonstrert i praksis gjennom Googles SHAttered-angrep i 2017, som genererte to PDF-filer med samme SHA-1-hash. Ingen av dem bør brukes til sikkerhetsformål: digitale signaturer, integritetssikring av innhold, passordlagring eller HMAC. Bruk SHA-256, SHA-3 eller BLAKE2 i moderne systemer.
Forutsigbar initialisering av PRNG
Å bruke time() eller andre forutsigbare verdier som seed for en pseudotilfeldig tallgenerator er en kritisk sårbarhet når PRNG-utdata brukes til sikkerhetsformål. En angriper som vet omtrent når en nøkkel ble generert, kan prøve alle mulige seed-verdier i et kort tidsintervall og gjenopprette nøkkelen. Et klassisk eksempel er at tidlige versjoner av Netscape initierte genereringen av SSL-nøkler med klokkeslett og prosess-ID, som begge kunne observeres av en angriper på samme maskin.
Valg av svak PRNG
rand() i C, java.util.Random og Pythons random-modul bruker deterministiske lineære kongruensgeneratorer eller Mersenne Twister, som er utviklet for statistisk kvalitet i simuleringer, ikke for sikkerhet. En angriper som observerer nok utdata fra disse generatorene, kan rekonstruere den interne tilstanden og forutsi alle fremtidige utdata. Til sikkerhetsformål bør du bruke CSPRNG-er levert av operativsystemet: secrets.token_bytes() i Python, crypto.randomBytes() i Node.js eller /dev/urandom på Linux.
Kryptering uten autentisering
Kryptering uten autentisering gir bare konfidensialitet, ikke integritet. En angriper som ikke kan lese klarteksten, kan fortsatt endre chifferteksten og dermed potensielt forårsake forutsigbare endringer i klarteksten (særlig i CTR- eller CBC-modus). Denne manipulerbarheten muliggjør angrep: En angriper som avskjærer en kryptert banktransaksjon, kan endre enkeltbiter for å endre overføringsbeløpet eller mottakskontoen uten å kjenne klarteksten. Bruk alltid autentisert kryptering (AEAD).
Hardkoding av nøkler og IV-er
Hardkoding av krypteringsnøkler eller initialiseringsvektorer i kildekoden er en kritisk sårbarhet. Kildekode lagres ofte i versjonskontrollsystemer, noen ganger i offentlige systemer. Selv i private systemer har alle som har tilgang til koden, tilgang til nøkkelen. Hardkodede nøkler betyr at alle instanser bruker den samme nøkkelen, og at nøkkelrotasjon krever ny utrulling. Nøkler må lagres i miljøvariabler, systemer for håndtering av hemmeligheter (HashiCorp Vault, AWS Secrets Manager) eller maskinvaresikkerhetsmoduler.
Gjenbruk av initialiseringsvektorer
Å bruke den samme initialiseringsvektoren til flere krypteringer med den samme nøkkelen skaper alvorlige sårbarheter. I CTR-modus skaper gjenbruk av IV den samme nøkkelstrømmen, slik at klarteksten kan gjenopprettes ved hjelp av XOR. I CBC-modus kan gjenbruk av IV gjøre det mulig for en angriper å oppdage når to meldinger begynner med de samme klartekstblokkene. I GCM er gjenbruk av nonce (IV) katastrofalt (se leksjonen om gjenbruk av nonce). Generer en ny tilfeldig IV for hver krypteringsoperasjon, og sett den foran chifferteksten når den lagres sammen med dekrypteringskonteksten.
Passord-hashing med raske hashfunksjoner
Det er ikke tilstrekkelig å lagre passord som er hashet med MD5, SHA-256 eller en annen rask kryptografisk hashfunksjon. Moderne GPU-er kan beregne milliarder av SHA-256-hasher per sekund, noe som gjør offline brute force-angrep mot stjålne hashdatabaser svært raske. Passordhashing krever formålsbygde, trege og minnekrevende funksjoner: bcrypt, scrypt eller Argon2id. Disse er utviklet for å gjøre brute force dyrt selv med spesialisert maskinvare, slik at offline-angrep blir beregningsmessig uoverkommelige.
Deaktivering av sertifikatvalidering
Deaktivering av SSL/TLS-sertifikatvalidering (ved å sette ssl.CERT_NONE i Python, sende -k til curl eller sette trustAllCerts=true i Android) fjerner beskyttelsen mot man-in-the-middle-angrep. En angriper kan presentere hvilket som helst sertifikat og avskjære all kommunikasjon. Denne praksisen brukes i utvikling for å omgå feil med selvsignerte sertifikater, men blir ofte stående i produksjon. Bruk alltid korrekt sertifikatvalidering, og løs de underliggende sertifikatproblemene på riktig måte.
Manglende kontroll av returverdier
Kryptografiske funksjoner rapporterer feil gjennom returverdier eller unntak. Hvis disse ignoreres, kan kjøringen fortsette med en ugyldig tilstand: dekryptering som produserte uleselig data, en verifisering som mislyktes eller en nøkkelgenerering som feilet. I C-baserte API-er som OpenSSL er det spesielt farlig å ignorere returverdier, fordi programmet kan fortsette med uinitialisert minne. Kontroller alltid alle returverdier fra kryptografiske funksjoner, og håndter feil på en sikker måte.
Svakheten ved ECB-modus
Hvorfor regnes ECB-modus (Electronic Codebook) som usikker ved kryptering av data?
Oppsummering av kryptografisk feilbruk
Viktige feilbruksmønstre som må unngås: Bruk aldri ECB-modus (lekkasje av blokkmønstre), implementer aldri kryptografiske primitiver selv, avvis MD5 og SHA-1 til sikkerhetsformål, initialiser PRNG-er med CSPRNG og ikke med time(), bruk CSPRNG for all sikkerhetsfølsom tilfeldighet, autentiser alltid krypterte data (AEAD), hardkod aldri nøkler eller IV-er, generer en ny IV for hver kryptering, bruk Argon2id for passord i stedet for raske hashfunksjoner, valider alltid TLS-sertifikater, og kontroller alle returverdier fra kryptografiske funksjoner.
Lær deg Cryptology Academy 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
- 67
- Leksjoner
- 261
Ofte stilte spørsmål
Er leksjonen «Vanlige mønstre for feilbruk av kryptografi» gratis?
Ja – hele teksten i «Vanlige mønstre for feilbruk av kryptografi» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Cryptology Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Cryptology Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Vanlige mønstre for feilbruk av kryptografi»?
Få oversikt over de vanligste utviklerfeilene: ECB-modus, svak initiering av PRNG og å lage sin egen kryptografi. Du øver på Cryptology Academy 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 Cryptology Academy?
Ingen tidligere erfaring er nødvendig. Cryptology Academy 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 4 av 4.
Hvor lang tid tar leksjonen «Vanlige mønstre for feilbruk av kryptografi»?
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 Cryptology Academy-leksjonen?
Ja. Alle Cryptology Academy-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
- Padding-oracle-angrep i detalj
- Replay-angrep og sårbarheter ved gjenbruk av nonce
- Tidsangrep i kode på applikasjonsnivå
- Vanlige mønstre for feilbruk av kryptografi