Kryptografi#
Kryptografi handler om å gjøre ting hemmelig. Vi tar klartekst og gjør det om til kryptert tekst.
Klartekst er en beskjed som skal sendes. F.eks
"Den grå ulv ber deg møte ved havnen."
Kryptert tekst er helt uleselig, og helst helt uknekkelig. F.eks
"XeLHfB2Hz1Q+Xpj6Nxck9bcSaEs1OejbEuXBc8gGfTAdmJlS/cs9A7FPFN0qy+Dc6U0j67c+lnY="
Nøkkelen er måten man gjør klartekst til kryptert tekst eller tilbake.
Ting man sender trådløst eller over internett kan i teorien avlyttes av hvem som helst. Derfor må vi sørge for at beskjedene vi sender er kryptert, spesielt om vi sender passord eller liknende. HTTPS
er et eksempel på en protokoll som brukes for å sørge for at data sendes kryptert over internett.
Symmetrisk kryptering#
Når både sender og mottaker bruker samme nøkkel kalles det for symmetrisk kryptering.
--- title: Symmetrisk kryptering --- flowchart LR id1(Klartekst) -- Nøkkel --> id2(Kryptert) id2(Kryptert) -- Nøkkel --> id3(Klartekst)
Cæsarschiffer (caesar cipher)
Cæsarschiffer er en enkel måte å kryptere tekst. Man tar hver bokstav og flytter den tre hakk til høyre i alfabetet. Den som dekrypterer trenger bare å flytte bokstavene tre hakk tilbake.
Kryptering
"hei" -> "khl"
Dekryptering
"khl" -> "hei"
Asymmetrisk kryptering#
Ved asymmetrisk kryptering har alle brukere en offentlig nøkkel som gjør at man kan kryptere meldinger før man sender de til en bruker. Denne nøkkelen kan ikke brukes til å dekryptere meldingen.
Hver bruker har også en privat nøkkel som gjør at bare den brukeren kan dekryptere meldinger som blir sendt til brukeren og som er kryptert med den offentlige nøkkelen.
Se for deg at hver bruker har sin egen postkasse. Man kan sende brev til hverandre, men det er bare den som har nøkkelen til postkassen som kan lese brevet.
--- title: Asymmetrisk kryptering --- flowchart LR id1(Klartekst) -- Offentlig nøkkel --> id2(Kryptert) id2(Kryptert) -- Privat nøkkel --> id3(Klartekst)
Hashing#
Hashing går en vei. Det vil si at klartekst blir rotet til og ikke kan bli gjort tilbake. Dette brukes ofte til signaturer og lagring av passord.
Når du lagrer et passord blir det hashet. Et hashet passord blir så lagret i databasen. Når du prøver å logge inn blir forsøket ditt hashet og sammenlignet med den lagrede hashen. Små endringer, som en endret bokstav, gir en helt annerledes hash.
Hvis databasen over alle passordene blir hacket ligger ikke alle passordene åpne i klartekst, men som hashete passord. Da må man cracke ett og ett passord uansett.
Oppgaver#
Oppgave 1 ✍️
Forklar begrepene med egne ord.
Kryptografi
Symmetrisk kryptering
Asymmetrisk kryptering
Hashing
Oppgave 2 🔒
Lag en funksjon
cæsarschiffer(klartekst : str)
som tar en klartekst og lager en kryptert tekst.
Du kan få bruk for disse ordbøkene.
bokstav_verdi = {" ":0,"A":1,"B":2,"C":3,"D":4,"E":5,"F":6,"G":7,"H":8,"I":9,"J":10,"K":11,"L":12,"M":13,"N":14,"O":15,"P":16,"Q":17,"R":18,"S":19,"T":20,"U":21,"V":22,"W":23,"X":24,"Y":25,"Z":26,"Æ":27,"Ø":28,"Å":29,",":30,".":31}
verdi_bokstav = {0:" ",1:"A",2:"B",3:"C",4:"D",5:"E",6:"F",7:"G",8:"H",9:"I",10:"J",11:"K",12:"L",13:"M",14:"N",15:"O",16:"P",17:"Q",18:"R",19:"S",20:"T",21:"U",22:"V",23:"W",24:"X",25:"Y",26:"Z",27:"Æ",28:"Ø",29:"Å",30:",",31:"."}
Lag en funksjon
dekrypter_cæsarschiffer(kryptert_text : str)
som tar en kryptert tekst og returnerer ren tekst.
Oppgave 3 🔑
Utvid programmet over til å ta med en nøkkel nøkkel
som bestemmer hvor mange bokstaver man skal flytte bokstavene bort i alfabetet.
cæsarschiffer(klartekst : str, nøkkel : int)
dekrypter_cæsarschiffer(kryptert_tekst : str, nøkkel : int)
Hvis nøkkel = 3
skal man flytte tre bokstaver bort. Hvis nøkkel = 4
skal man flytte fire bokstaver bort osv.
Forklar hvordan dette er et eksempel på symmetrisk kryptering.
Oppgave 4 🔓
Cæsarschiffer er ikke en veldig sikker krypteringsalgoritme og kan lett hackes.
Lag en funksjon brute_force_cæsarschiffer(kryptert_tekst)
som skriver ut alle mulige klartekster fra en kryptert tekst.
Bruk funksjonen din til å finne klarteksten og nøkkelen (hvor langt bokstavene er flyttet) for de hemmelige meldingene under. Jeg har brukt samme ordbok som står over.
YVGIKFFFFZNKFLOTGRFLXUTZOKXF
XURRFLUXFOTOZOGZOØK
YZUVFXOMNZFZNKXKFIXOSOTGRFYIÆS
Oppgave 5 📦
For å lage en hash fra en string kan vi bruke algoritmen sha256
.
from hashlib import sha256
passord = "hei!"
print(sha256(passord.encode()).hexdigest())
09e12748eef69d3fd9f517860038a8ecfdedebb552efb039c75235bff21ae5e4
Under er det oppgitt data fra en database som har blitt lekket på nett. Finn hvilken bruker som har passordet passord123
.
"""
worf_security,1a1397f6ca212c319a4b70e263a01218230c61176dfaa1098418cf8768b12556
fortnite_fillip,7ca720a27c141af0574dc4619df536fc31e95ecc969f8be795d7e0fca68978ad
chief_keef,94b86bc53ce89e4757cc5047862cbe2be6ab7902fbfe6571e0b44142b3c49fa5
bladee_fan39,880f024abdce121b84ab9b903fa567b8588ad2a994d3a7c82a1358d5e97df0f6
trond_svendsen,5d243bfcd9c584265d3c5de50319528e46ed229c596d52f435e902d23471ba0c
liluglymane,175bd23b3dab446b842da75a60636e77ea1933cf2c8fee138cba8160fb11194c
gwyn_the_lord_of_cinder,38e3c13dd5c9c363f9c1a7aaf3f33022dc957e2bed4262c9d3442f906ac3a268
"""