20TD02S_Informasjonssikkerhet_K05_v3_Kode - itnett/FTD02H-N GitHub Wiki

Studentressurs for Kapittel 5: Nøkkelhåndtering og PKI

Innholdsfortegnelse

  1. Oversikt
  2. Viktigheten av nøkkelhåndtering for kryptografi
  3. Én anvendelse per nøkkel
  4. Typer av kryptografiske nøkler
  5. Kryptoperiode
  6. Anbefalte størrelser på symmetriske nøkler
  7. Kvantecomputere og kryptografi
  8. Nøkkelgenerering
  9. Kompromittering av kryptografiske nøkler
  10. Beskyttelse av nøkler
  11. Nøkkeldestruering
  12. Public-Key Infrastructure (PKI)
  13. Problemet med forfalskning av offentlige nøkler
  14. X.509 offentlig nøkkelsertifikater
  15. Kjede av sertifikater
  16. Validering av sertifikater
  17. Tillitsmodeller
  18. Internett PKI: Silo-hierarkier
  19. Oppgaver og refleksjoner

Oversikt

Kapittel 5 dekker nøkkelhåndtering og PKI (Public Key Infrastructure). Det gir en forståelse av hvorfor nøkkelhåndtering er kritisk for kryptografiske systemer og hvordan PKI bidrar til sikker nøkkeldistribusjon og autentisitet.

Viktigheten av nøkkelhåndtering for kryptografi

Nøkkelhåndtering omfatter generering, lagring, distribusjon og destruering av nøkler. Korrekt nøkkelhåndtering sikrer at kryptografiske systemer opprettholder sin integritet og konfidensialitet.

  • Eksempel: Et dårlig håndtert nøkkelsystem kan føre til sikkerhetsbrudd, som i tilfelle av NSA og RSA hvor en svak generator for tilfeldige tall ble brukt, noe som gjorde det mulig for NSA å forutsi genererte nøkler (Snowden, 2013).

Én anvendelse per nøkkel

Hver nøkkel skal brukes til én spesifikk oppgave, for eksempel kryptering eller autentisering. Dette reduserer risikoen for at kompromittering av en nøkkel påvirker flere systemer.

  • Eksempel: Gjenbruk av passord på tvers av tjenester kan føre til at flere kontoer blir kompromittert hvis ett passord lekker.

Typer av kryptografiske nøkler

Nøkler kan være symmetriske, asymmetriske (offentlige/private), og klassifiseres etter bruk og levetid. NIST SP 800-57 definerer 19 nøkkeltyper.

Kryptoperiode

Kryptoperioden er den godkjente bruksperioden for en nøkkel. Den begrenser mengden data som beskyttes av en nøkkel, og reduserer potensialet for skade ved kompromittering.

  • Visualisering: Geogebra kan brukes til å lage grafer som viser relasjonen mellom kryptoperioden og risikoen for kompromittering.

Anbefalte størrelser på symmetriske nøkler

Størrelsen på nøkler bestemmer tiden det tar for kryptoanalyse med utmattende søk. Eiere av systemer må vurdere nøkkelstørrelse basert på ønsket sikkerhetslevetid.

Kvantecomputere og kryptografi

Kvantecomputere representerer en trussel mot tradisjonell asymmetrisk kryptografi. NIST anbefaler overgang til post-kvantealgoritmer.

  • Eksempel: RSA og elliptisk kurvekryptografi (ECC) vil være utsatt for kvanteangrep.

Nøkkelgenerering

Nøkkelgeneratorer må være sikre for å forhindre lekkasje, svekking eller forfalskning av nøkler.

  • Eksempel: Bruk av hardware security modules (HSM) for nøkkelgenerering.

Kompromittering av kryptografiske nøkler

Når nøkler er kompromittert, må de umiddelbart opphøre å bli brukt til beskyttelse og brukere må informeres om risikoen.

Beskyttelse av nøkler

Nøkler må aldri lagres eller overføres i klartekst. Hierarkisk nøkkelbeskyttelse og bruk av passordbeskyttelse er viktig.

Nøkkeldestruering

Nøkler må fullstendig fjernes fra alle lagringsmedier etter destruering. Metoder inkluderer spesielle sletteoperasjoner og fysisk ødeleggelse.

Public-Key Infrastructure (PKI)

PKI løser utfordringer knyttet til nøkkeldistribusjon og autentisitet i asymmetrisk kryptografi. Det inkluderer policyer, teknologier og prosedyrer for håndtering av offentlige nøkkelsertifikater.

Problemet med forfalskning av offentlige nøkler

Forfalskning av offentlige nøkler kan føre til avvisning av gyldige signaturer og kompromittering av konfidensielle meldinger.

X.509 offentlig nøkkelsertifikater

X.509-standarden definerer formatet for offentlige nøkkelsertifikater, som signeres digitalt av en Certificate Authority (CA).

Kjede av sertifikater

Sertifikatstien fra rotsertifikatet til subjektsertifikatet valideres for å sikre autentisitet.

Validering av sertifikater

Sertifikater valideres ved å verifisere digitale signaturer og samsvar med domenenavn.

Tillitsmodeller

Tillitsmodeller som silo-hierarkier og kryss-sertifiserte hierarkier benyttes for å håndtere tillit i PKI-systemer.

Internett PKI: Silo-hierarkier

Internett-PKI består av flere silo-hierarkier hvor hvert hierarki har sitt eget rotsertifikat installert i nettlesere.

Oppgaver og refleksjoner

Oppgave 1: Sertifikater a. Begrenset kryptoperiode:

  • Fire grunner for begrenset kryptoperiode:
    • Redusert risiko for nøkkelkompromittering.
    • Begrenset mengde data beskyttet av én nøkkel.
    • Begrenset eksponeringstid for sikkerhetssvakheter.
    • Mulighet for å oppdatere til nyere, sikrere algoritmer.
  • En grunn for lang kryptoperiode:
    • Redusert overhead og risiko for feil ved nøkkelgenerering og distribusjon.

b. Perioder for beskyttelse og prosessering:

  • Beskyttelsesperiode: Nøkkelen brukes til å kryptere eller signere.
  • Prosesseringsperiode: Nøkkelen brukes til å dekryptere eller validere.

c. Gyldighetsperioden for rotsertifikatet:

  • Undersøk sertifikater på nsm.no og finn gyldighetsperioden.
  • SSL Labs

d. Anbefalinger for private signaturnøkler i henhold til NIST SP800-57:

  • Sammenlign utstedelsesdato og beskyttelsesperiode med anbefalingene.

e. Rotsertifikater og kvantecomputere:

  • Hvis kvantecomputere blir tilgjengelige rundt 2030, må rotsertifikater oppdateres til post-kvantealgoritmer.

f. SSL-testresultater for nsm.no og universitetsforlaget.no:

  • Sammenlign resultater og vurder sikkerhetsnivået.

Oppgave 2: Tillitsmodell a. Tillitsmodellen for PKI i nettlesere:

  • Sertifikater signert av rot-CAer installert i nettlesere.

b. Fordeler og ulemper:

  • Fordeler: Enkel validering, bred tillit.
  • Ulemper: Risiko ved kompromittering av rot-CA, skaleringsproblemer.

c. Hvordan PKI skaper tillit:

kkelkjeder og sertifikatvalidering.

d. Tillitsmodellen i PGP:

  • Brukersentrisk PKI hvor hver bruker er sin egen CA.

Oppgave 3: Sertifikatkjeder a. Kjede for nsm.no:

  • Bruk SSL Labs for å finne sertifikatstien.

b. Hvordan sertifikater valideres:

  • Stegene som følger fra rotsertifikatet til serverens sertifikat.

Kilder og ressurser

  • NIST SP 800-57
  • SSL Labs
  • Rapporten "Ti sårbarheter i norske IKT-systemer"
  • "Nasjonalt digitalt risikobilde 2023"
  • "Cyber Resilience Act Requirements Standards Mapping"

Ved å følge denne strukturen og bruke ressursene og rapportene som er lenket, vil du få en omfattende forståelse av nøkkelhåndtering og PKI, samt kunne løse oppgavene i kapittel 5 med solid bakgrunnskunnskap.

For å demonstrere nøkkelhåndtering og PKI ved hjelp av GeoGebra, Trinket, og kommandolinjeverktøy (CMD/PowerShell i Windows og Bash i Linux), vil vi ta noen praktiske eksempler og bryte dem ned for å illustrere konseptene.

GeoGebra: Visualisering av RSA-algoritmen

Vi kan bruke GeoGebra til å visualisere grunnleggende matematiske konsepter bak RSA-algoritmen, slik som generering av store primtall og beregning av modulus.

  1. Åpne GeoGebra og velg Algebra-visning.
  2. Opprett to store primtall:
p = 61
q = 53
  1. Beregn modulus n:
n = p * q
  1. Beregning av Euler's totientfunksjon:
phi_n = (p - 1) * (q - 1)
  1. Velg en offentlig eksponent e (gjerne et kjent primtall, som 65537):
e = 65537
  1. Beregning av den private eksponenten d ved hjelp av den utvidede euklidiske algoritmen:
d = ModInverse(e, phi_n)
  1. Demonstrere kryptering og dekryptering:
message = 42
ciphertext = Mod(message^e, n)
decrypted_message = Mod(ciphertext^d, n)

Trinket: Python Skript for RSA-algoritmen

Trinket kan brukes til å skrive og kjøre Python-kode som demonstrerer RSA-algoritmen.

Python-kode i Trinket:

import random
from Crypto.Util import number

# Generer store primtall
p = number.getPrime(8)
q = number.getPrime(8)

# Beregn n og phi_n
n = p * q
phi_n = (p - 1) * (q - 1)

# Velg en offentlig eksponent
e = 65537

# Beregn den private eksponenten
d = pow(e, -1, phi_n)

# Meldingen vi vil kryptere
message = 42

# Kryptering
ciphertext = pow(message, e, n)
print("Ciphertext:", ciphertext)

# Dekryptering
decrypted_message = pow(ciphertext, d, n)
print("Decrypted message:", decrypted_message)

Kjør koden på Trinket.io ved å lime den inn i et nytt Python-skript.

CMD/PowerShell i Windows: Bruk av OpenSSL for RSA

Generere RSA-nøkkelpar:

openssl genpkey -algorithm RSA -out private_key.pem
openssl rsa -in private_key.pem -pubout -out public_key.pem

Signere en melding:

echo "Hello, World!" > message.txt
openssl dgst -sha256 -sign private_key.pem -out signature.bin message.txt

Verifisere signaturen:

openssl dgst -sha256 -verify public_key.pem -signature signature.bin message.txt

Bash i Linux: Bruk av OpenSSL for RSA

Generere RSA-nøkkelpar:

openssl genpkey -algorithm RSA -out private_key.pem
openssl rsa -in private_key.pem -pubout -out public_key.pem

Signere en melding:

echo "Hello, World!" > message.txt
openssl dgst -sha256 -sign private_key.pem -out signature.bin message.txt

Verifisere signaturen:

openssl dgst -sha256 -verify public_key.pem -signature signature.bin message.txt

Ved å bruke disse verktøyene og metodene kan vi visualisere og praktisk demonstrere konseptene bak nøkkelhåndtering og PKI. GeoGebra hjelper oss med å forstå de matematiske prinsippene, mens Trinket og kommandolinjeverktøyene lar oss implementere og teste algoritmene i praksis.