Kryptering forts, testning på Kattis, algoritmer, obskyr kod
- Kryptering forts.
- Kort om datasäkerhet
- Om testning på Kattis
- Labb 6
- Labb 7
Kryptering forts
Assymetrisk kryptering (RSA) förutsätter nyckelpar. En publik och en privat nyckel hos vardera part. Man krypterar med mottagerens publika nyckel och signerar med sin egen privata nyckel. Mottagaren dekrypterar med sin privata nyckel och autentiserar med sändarens publika nyckel.
Vid symmetrisk kryptering har sändare och mottagare samma krypteringsnyckel. Det går i regel mycket fortare än assymetrisk kryptering. Standarden idag är AES, tidigare var det DES.
Ovannämnda algoritmer är publika och matematiskt verifierbara att de
fungerar. Det som är hemligt är nycklarna. Att hemlighålla algoritmen
(security by obscurity) bör betraktas med skepsis. Under 2013 läckte
Edward Snowden hemlig material i huvudsak från amerikanska NSA vilket
bekräftat bilden av att algoritmerna i huvudsak håller men att det finns
mängder med andra säkerhetsproblem.
Attacker på kryptering är t.ex. man-in-the-middle attacker. Ibland har
det smugits in (oklart hur) svagheter i
implementeringen, t.ex. slumptalsgeneratorn, av annars starka system.
Vissa system är bevisligen mycket svaga men används ändå
t.ex. lokaltrafikkortlösningar.
Ett simpelt men mycket effektivt chiffer är bokchiffer. Man använder en bok, t.ex. bibeln,
som nyckel och kodar texten genom att ange ett par siffror för vaje bokstav/ord. Den ena siffran
anger sidan och den andra anger vilken bokstav/ord på sidan det är. E
Lösenord
Lösenord bör sparas saltade och hashade. Det finns bra och dåliga lösenord. I mars 2013 anordnade nättidiningen Ars Technica en tävling att gissa hashade lösenord. Artikeln beskriver hur lösenordsgissningsalgoritmerna jobbar. Bl.a. används befintliga lösenord som algoritmen hakar på suffix och prefix.
Bruce Schneier är en säkerhetsexpert som blogga om datasäkerhet och ger en del råd om lösenord.
Dekompilera kod
Under 2014 publicerads två artiklar (1, 2) som kunde visa
att det går att skriva kod som inte går att hacka. Definitionen
på ej hackningsbar skulle vara att den som har tillgång till källkoden inte vet mer än den som har den kompilerade koden. För den senare fungerar koden som en svart låda (black box). Exempelvis skulle en lösenordsfunktion:
def testaHemligtPassword( password ):
if (password = "123aabbccdd") :
return true
else:
return false
Skrivas typ så här:
def dunkeltPasswordsTest(password):
hårdkodat_salt = "123£"!#¤!..."
hårdkodat_saltat_och_hashat_lösen = "312sd3$£$#!SESD..."
hashat_password = hashfunc( password + hårdkodat_salt)
if (hashat_password == hårdkodat_saltat_och_hashat_lösen) :
return true
else:
return false
Givet koden är det svårt att gissa lösenordet
Kattis
Kattis: Ett automatiskt system för rättning av labbar
Kattis började i form av Marvin, som användes för att rätta inlämningarna i
programmeringstävlingskursen
DD2458 (programmering och problemlösning under press), men används
numera även i DD1352 (Algoritmer, Datastrukturer och Komplexitet) och DD2387 (Programsystemkonstruktion med C++).
Kattis är skrivet i en kombination av Python, PHP och SQL och
körs på en Ubuntu-server. En specialbyggd säkerhetslösning används för att hindra fusk. All inskickad kod lagras också för att senare kunna kontrollera koden ifall det skulle behövas.
Den pedagogiska tanken med Kattis är att eleverna skall kunna sända in sin kod och snabbt få svar på huruvida koden fungerar. Kattis skall även ge eleverna övning i att söka efter buggar i koden.
Kattis har utvecklats av följande personer:
- Fredrik Niemelä
- Gunnar Kreitz
- Per Austrin
Övriga som hjälpt till är:
- Johanna Eriksson
- Mattias de Zalenski
- Pehr Söderman
Hur ska jag göra?
- Följ länken: Kattis
- Logga in (längst upp till höger) med ditt KTH-id
- Välj "Kurser" i övre blå menyn
- Välj "tilda12" (långt ner i listan)
- Klicka på "Jag är student på den här kursen och vill registrera mig på Kattis."
- Välj "Problemlista".
Här finns två testproblem (hello och different) och
labb 6 (formelkoll2)
- Välj "Skicka in" för att komma till inskickningssidan.
- Fyll i fälten "Problem ID" och "Språk"
- Välj en fil (ditt python-program)
- Tryck på knappen "Skicka in"
- Uppdatera webbsidan för att få se Domarstatus.
Använd testproblemen för att lista ut hur Kattis fungerar innan du skickar
in din lösning till labb6!
Indata
Programmen du skickar till Kattis ska läsa indata från stdin.
Det fungerar som att läsa från fil! Exempel:
from sys import stdin
from formelkollPaket import * #För att inte hela labben ska synas ;-)
def main():
#stdin = open("indata1.txt") #Lätt att ändra för att testa indata från fil
rad = stdin.readline()
while rad[0] != "#":
q = LinkedQ()
for tkn in rad:
q.put(tkn)
try:
readformel(q)
print("Formeln är syntaktiskt korrekt")
except Syntaxfel as felet:
rest = str(q).strip()
print(felet, "vid radslutet", rest)
rad = stdin.readline()
main()
Utdata
Utdata kan du skriva ut med print som vanligt.
print(x)
Syntaxfel
Definiera ditt eget särfall som en subklass till Exception. Du behöver
inte göra egna metoder - allt som finna i Exception ärvs av din klass.
Exempel (Python 3):
class Syntaxfel(Exception):
pass
def readformel(q):
...
raise Syntaxfel("Felaktig gruppstart")
Moment LAB1
Man måste bli godkänd på laborationsdelen (dvs redovisa alla sju labbarna)
för att bli godkänd på kursen.
Utnyttja gärna allmänhandledningen!
Fråga på KTH social om du är helt säker på att ditt program
är klart och korrekt, men ändå inte blir godkänt av Kattis. Ange inskickningsid.
Flödesdiagram
I industrin används ofta flödesschema
för att illustrera algoritmer. Den enklaste formen av
flödesdiagram har två sorters figurer, en rektangel för instruktioner och en diamantformad
figur för val (if-satser). Mellan figurerna ritar man pilar för att visa flödet.