20TD02U_ForAlle_Blooms_Side_60_Database_Kryptering - itnett/FTD02H-N GitHub Wiki

Kryptering er en viktig sikkerhetsteknikk som brukes for å beskytte sensitive data i databaser ved å gjøre dem uleselige for uautoriserte personer. Vi skal dekke emnet "Kryptering" ved å bruke Blooms taksonomi, som vil ta deg fra grunnleggende forståelse til avansert bruk av kryptering i databaser. Denne tilnærmingen inkluderer programmatiske, logiske, og praktiske eksempler på hvordan kryptering kan implementeres og optimaliseres.

Videregående Skole Nivå

1. Kunnskap (Remembering)

Emne: Grunnleggende Konsepter for Kryptering

  • Logisk tilnærming: Start med å lære hva kryptering er, hvorfor det brukes, og hvilke typer kryptering som finnes (symmetrisk og asymmetrisk kryptering).
  • Programmatisk tilnærming: Implementer enkel symmetrisk kryptering av data i Python ved hjelp av et bibliotek som cryptography.
  • Praktisk tilnærming: Bruk en enkel krypteringsalgoritme for å kryptere og dekryptere en tekststreng.
from cryptography.fernet import Fernet

# Generere en nøkkel for kryptering
nøkkel = Fernet.generate_key()
cipher = Fernet(nøkkel)

# Kryptere en melding
melding = "Dette er en sensitiv melding."
kryptert_melding = cipher.encrypt(melding.encode())

# Dekryptere meldingen
dekryptert_melding = cipher.decrypt(kryptert_melding).decode()

print("Kryptert:", kryptert_melding)
print("Dekryptert:", dekryptert_melding)

2. Forståelse (Understanding)

Emne: Kryptering av Data i Databaser

  • Logisk tilnærming: Forstå hvordan data kan krypteres i databaser for å beskytte mot uautorisert tilgang, både på radnivå (kolonne-kryptering) og for hele databasen (TDE - Transparent Data Encryption).
  • Programmatisk tilnærming: Implementer kolonne-kryptering i en database ved hjelp av SQL.
  • Praktisk tilnærming: Krypter sensitive data, som personnummer, i en database for å beskytte mot datainnbrudd.
-- Eksempel på kolonne-kryptering i MySQL
CREATE TABLE brukere (
    id INT PRIMARY KEY,
    navn VARCHAR(50),
    personnummer VARBINARY(255)
);

-- Kryptere data ved innsats
INSERT INTO brukere (id, navn, personnummer)
VALUES (1, 'Ola Nordmann', AES_ENCRYPT('12345678901', 'hemmelignøkkel'));

-- Dekryptere data ved henting
SELECT id, navn, AES_DECRYPT(personnummer, 'hemmelignøkkel') AS personnummer
FROM brukere;

Høyskole Nivå

3. Anvendelse (Applying)

Emne: Implementering av Kryptering i Produksjon

  • Logisk tilnærming: Lær hvordan du implementerer kryptering i en produksjonsdatabase for å sikre sensitive data som personopplysninger og kredittkortinformasjon.
  • Programmatisk tilnærming: Bruk SQL eller et skript for å implementere kryptering på kolonnenivå for en eksisterende database.
  • Praktisk tilnærming: Implementer kolonne-kryptering for å beskytte følsomme data i en ekte applikasjon.
import mysql.connector

# Kobling til MySQL-databasen
conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="ditt_passord",
    database="skole"
)

cursor = conn.cursor()

# Kryptere følsomme data ved innsats
kryptert_sql = "INSERT INTO brukere (id, navn, personnummer) VALUES (%s, %s, AES_ENCRYPT(%s, %s))"
data = (1, 'Kari Nordmann', '98765432101', 'hemmelignøkkel')
cursor.execute(kryptert_sql, data)
conn.commit()

# Dekryptere data ved henting
dekryptert_sql = "SELECT id, navn, AES_DECRYPT(personnummer, %s) FROM brukere"
cursor.execute(dekryptert_sql, ('hemmelignøkkel',))
resultat = cursor.fetchall()
for rad in resultat:
    print(rad)

conn.close()

4. Analyse (Analyzing)

Emne: Evaluering av Krypteringens Effekt på Ytelse

  • Logisk tilnærming: Forstå hvordan kryptering kan påvirke ytelsen i en database, og hvordan man kan balansere sikkerhet med ytelseskrav.
  • Programmatisk tilnærming: Bruk SQL til å måle ytelsen av spørringer før og etter at dataene er kryptert.
  • Praktisk tilnærming: Analyser ytelsen i databasen din før og etter implementering av kryptering for å identifisere potensielle flaskehalser.
import time

# Mål tid for innsats av ukryptert data
start_time = time.time()
cursor.execute("INSERT INTO brukere (id, navn, personnummer) VALUES (2, 'Per Hansen', '11223344556')")
conn.commit()
ukryptert_tidsbruk = time.time() - start_time

# Mål tid for innsats av kryptert data
start_time = time.time()
cursor.execute(kryptert_sql, (3, 'Lise Olsen', '55667788990', 'hemmelignøkkel'))
conn.commit()
kryptert_tidsbruk = time.time() - start_time

print(f"Ukryptert tid: {ukryptert_tidsbruk} sekunder")
print(f"Kryptert tid: {kryptert_tidsbruk} sekunder")

Universitets Nivå

5. Syntese (Synthesizing)

Emne: Design av En Komplett Krypteringsstrategi

  • Logisk tilnærming: Kombiner kunnskapen om kryptering for å designe en fullstendig krypteringsstrategi som dekker data i ro, data i bevegelse, og sikker nøkkelhåndtering.
  • Programmatisk tilnærming: Lag et komplekst krypteringssystem som inkluderer automatisert nøkkelrotasjon, dataintegritetskontroller, og kryptering av sensitive data både i databasen og under transport.
  • Praktisk tilnærming: Implementer en ende-til-ende krypteringsløsning som beskytter data i hele systemets livssyklus.
# Eksempel på nøkkelrotasjonsskript for å oppdatere krypteringsnøkkel i MySQL
ny_nøkkel="ny_hemmelig_nøkkel"
gammel_nøkkel="gammel_hemmelig_nøkkel"

# Dekryptere og kryptere data på nytt med ny nøkkel
mysql -u root -p -e "
UPDATE brukere SET personnummer = AES_ENCRYPT(AES_DECRYPT(personnummer, '$gammel_nøkkel'), '$ny_nøkkel');
"

# Oppdater systemet til å bruke den nye nøkkelen
echo "Nøkkelrotasjon fullført."

6. Evaluering (Evaluating)

Emne: Revisjon av Kryptering og Sikkerhet

  • Logisk tilnærming: Lær hvordan du evaluerer effektiviteten til kryptering i systemet, og hvordan du kan sikre at dataene forblir beskyttet under alle omstendigheter.
  • Programmatisk tilnærming: Bruk skript for å sjekke krypteringsnøklene og validere at alle sensitive data er riktig kryptert.
  • Praktisk tilnærming: Utfør en revisjon av hele krypteringssystemet for å sikre at det ikke finnes sårbarheter, og at krypteringen overholder gjeldende sikkerhetsstandarder.
# Skript for å verifisere at alle data i kolonnen er kryptert
cursor.execute("SELECT AES_DECRYPT(personnummer, %s) FROM brukere", ('hemmelignøkkel',))
resultater = cursor.fetchall()

for rad i resultater:
    hvis rad[0] er None:
        print("Feil: Funnet ukryptert data!")
    ellers:
        print("Alle data er kryptert.")

7. Skapelse (Creating)

Emne: Avansert Krypteringsarkitektur i Distribuerte Systemer

  • Logisk tilnærming: Design og implementer en avansert krypteringsarkitektur for distribuerte systemer, som inkluderer kryptering av data under transport (TLS/SSL), kryptering av backups, og sikker nøkkelhåndtering.
  • Programmatisk tilnærming: Implementer en løsning som sikrer kryptering av alle sensitive data både i ro og under overføring, samt automatisk håndtering av nøkkelrotasjon og tilgangskontroll.
  • **Pr

aktisk tilnærming:** Rull ut en ende-til-ende krypteringsløsning i et distribuert system som sikrer alle aspekter av databeskyttelse.

# Eksempel på implementering av TLS/SSL for kryptering av data under transport i MySQL
# Opprette sertifikat og nøkkel
openssl req -newkey rsa:2048 -days 365 -nodes -keyout mysql-server.key -out mysql-server.crt -x509

# Konfigurer MySQL for å bruke SSL
mysql_ssl_rsa_setup --datadir=/var/lib/mysql

# Oppdatere MySQL-konfigurasjon
[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

# Restart MySQL for å aktivere SSL
systemctl restart mysql

Konklusjon

Denne fullstendige tilnærmingen til kryptering dekker alle nivåer fra videregående skole til universitetsnivå, basert på Blooms taksonomi. Ved å bruke praktiske, logiske, og programmatiske eksempler, vil du utvikle en dyp forståelse av hvordan kryptering fungerer, hvordan det kan brukes for å beskytte sensitive data, og hvordan det kan implementeres i komplekse distribuerte systemer for å sikre data både i ro og under transport.


Denne veiledningen er designet for studenter, utviklere, og IT-fagfolk som ønsker en grundig forståelse av kryptering og hvordan det brukes til å sikre data i databaser effektivt.