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.