2I1073 Föreläsning 3
Säkerhet, filhantering
och XML
KTH-MI Peter Mozelius
1
Säkerhet

Ökade krav på säkerhet i datasystem bl a mot
–
–
–
–


2
Intrång
Stölder
Förfalskningar
Virusattacker
Vi ska titta på några enkla tekniker som
passar för medicinska webbapplikationer
T ex hur man kontrollerar ett recept
Kryptering

Att skicka data som obehöriga inte kan
förstå även om de får tag i sänd data
Redan de gamla grekerna steganografi
Romarrikets ceasarkrypto

Modern krypterings två huvudgrupper


–
–
3
Symmetrisk kryptering
Asymmetrisk kryptering
Symmetrisk kryptering





4
En hemlig nyckel (secret key)
Samma nyckel används av både sändare
och mottagare
Hur skickar man nyckeln via nätet utan
att obehöriga får tag på den?
Problem med nyckeldistributionen
Effektivt för stora datamängder
Symmetrisk kryptering






5
I Java genereras hemliga nycklar med med
hjälp av klassen javax.crypto.KeyGenerator
KeyGenerator generator =
KeyGenerator.getInstance("DES");
DES = Data Encryption Standard
Det finns kända sätt att knäcka DES-algoritmen
Men det kostar en del datorkraft
Det finns andra algoritmer. Titta i kursboken.
Asymmetrisk kryptering

En lösning på problemet med nyckelhanteringen
–
–
–

Digitala certifikat för nycklarnas äkthet
–
–
–
6
En privat nyckel + en publik nyckel
Den privata nyckeln behöver inte skickas
Den publika kan skickas till alla
De digitala certifikaten verfieras av olika
Certificate Authorities - CA
En känd CA är Verisign
Asymmetrisk kryptering
7
Certifikathantering







8
Hierarkisk hantering som hos Verisign
Peer-to-peer som hos PGP
Pretty Good Privacy
Framtaget av Phillip Zimmerman 1991
Ni ska själva undersöka PGP i Uppgift3a
Byt nycklar med era kurskompisar
Samla dem i nyckelringar
Autentisering

Hur man kontrollerar att mottagen data
är samma data som skickats
–
–
–


9
Message Digest
Message Authentication Code
Digital Signature
Samtliga bygger på Message Digest
Att räkna fram ett kontrollvärde för data
Message Digest





10
Innehållet i ett meddelande smälts ner
till ett unikt kontrollvärde
Även små förändringar i meddelandet
ger ett annorlunda kontrollvärde
Kan beräknas enligt olika algoritmer
Vi kommer att använda SHA (SHA1)
Secure Hash Algorithm
Message Digest

Ni kommer att jobba med Message Digest och
klassen java.security.MessageDigest

Det handlar om att bygga ett litet program som
kontrollerar äktheten hos digitala recept
Här räcker det inte med bara Message Digest
Någon kan ersätta receptet med ett nytt recept
med ett nytt giltigt kontrollvärde
Lösningen är att kryptera kontrollvärdet



11
MAC





12
Message Authentication Code
Message Digest + hemlig nyckel
Kontrollvärdet krypteras symmetriskt
I Uppgift 3c och 3d använder ni ett
hemligt ord som nyckel
I frivilliga Uppgift3g ska lösningen
byggas med en javax.crypto.SecretKey
Digitala signaturer




13
Digital signatur/Digital signature
Message Digest + privat nyckel
Kontrollvärdet krypteras asymmetriskt
Oavsett hur man löser autentiseringen så
krypteras inte data utan det är enbart
det nedsmälta kontrollvärdet som
krypteras.
Digitala signaturer i Java





14
Ett användningsområde för digitala
signaturer i Java är att signera jar-filer
Verktyget jarsigner
Ingår i SDK
För att det ska fungera så behövs det ett
nyckelpar
Skapa nyckelparet med keytool
SSL




15
Secure Sockets Layer
Kanske den vanligaste krypteringen på nätet
Kopplat till TCP-sockets
Fungerar inte för UDP
1) Server och Klient kommer överens om vilken
krypteringsalgoritm som ska användas
2) Utbyte av hemlig nyckel
3) Data krypteras och skickas
Framtidens kryptering






Kvantkryptering
Utveckling här i Kista
Descartespriset 2004
Professor Anders Karlsson på KTH
Ökad säkerhet då en avlyssning upptäcks när
mätningen stör systemet
MEN, helt säkert är det inte
-------------------- PAUS 15 min
16
Strömmar


Oavsett typ av I/O så sker den i Java med hjälp
av strömmar
En ström i Java är:
–
–
–
Ett flöde av data (binär eller som text)
Ett objekt som hämtar data från en källa
– inström
Ett objekt som levererar data till en destination –
utström
Poängen är att data behandlas lika oavsett
vad som är källa eller destination
17
Strömmar

För att få tillgång till olika typer av
strömmar i Java:
import java.io.*;

En djungel av strömtyper
–
–
18
byte-strömmar
char-strömmar
Byte-strömmar
o
o
o
o
Dataflödet sker i form av bytes
Har funnits i Java sedan JDK 1.0
Den inbyggda datatypen byte
1 byte = 8 bitar
Alla klasser i Java som hanterar byteströmmar har ett klassnamn där ordet
Stream ingår
19
Char-strömmar
o
o
o
o
Dataflödet sker i form av char
Har funnits i Java sedan JDK 1.1
Den inbyggda datatypen char
1 char = 16 bitar
Alla klasser i Java som hanterar charströmmar har ett klassnamn där ordet
Reader eller Writer ingår
20
Två olika filtyper

Alla filer lagras som 1:or och 0:or

Binärfiler
–
–

Textfiler
–
–
21
Läses just som en rad 1:or och 0:or
Effektiv läsning för olika program
Läses som en rad av tecken
Trevlig läsning för oss människor
Utström till fil 1

Öppna en 8-bitars byte-ström
FileOutputStream fout =
new FileOutputStream(”minfil.txt”);

Buffrad utmatning genom
BufferedOutputStream bout =
new BufferedOutputStream(fout);
22
The Decorator Design Pattern


Ett av många designmönster
Ett enkelt designmönster där koden från
förra bilden kan skrivas om enligt:
BufferedOutputStream bout =
new BufferedOutputStream(new
FileOutputStream(”minfil.txt”));
23
The Decorator Design Pattern

En FileOutputStream kan dekoreras för
kryptering enligt:
ObjectOutputStream ous =
new ObjectOutputStream(
new CipherOutputStream(
new FileOutputStream(fil), cipher));
Poängen är att klasser inom samma familj kan kedjas
ihop dynamiskt och ytterligare klasser inte behövs
24
Utström till fil 2

Öppna en 16-bitars char-ström till en
textfil och skriv med metoden println()
lika enkelt som på P1 med
System.out.println();
PrintWriter pw = new PrintWriter(
new FileOutputStream(”minfil.txt”));
OCH SEDAN
pw.print(); ELLER pw.println();
25
Att skriva till fil, exempel1
import java.io.*;
public class F8_exempel1 {
public static void main(String[] args) {
PrintWriter pout = null;
try {
pout = new PrintWriter(new
FileOutputStream("min.fil"));
}catch (FileNotFoundException fnfe) {
System.err.println("Angiven fil kunde inte
öppnas.");
System.exit(0);
}
26
Att skriva till fil, exempel1

Om filen min.fil redan finns och har ett
innehåll så kommer innehållet att skrivas
över

Ibland är detta precis vad man vill
Men ibland är det önskvärt att det
tidigare innehållet ska finnas kvar

PAUS
27
Att skriva till fil, exempel2
try{
pout = new PrintWriter(new
FileOutputStream("min.fil", true));
}
catch (FileNotFoundException fnfe) {
System.err.println("Angiven fil
kunde inte öppnas");
System.exit(0);
}
Det som skrivs läggs till sist i filen
28
Att skriva ut objekt




29
Att dela upp komplexa objekt i sina
beståndsdelar och skriva ut del för del till
en fil kan kräva mycket kod
I Java finns inbyggd serialisering
Om en klass bara implementerar
interfacet Serializable
Så kan hela objektet istället skrivas ut på
en gång med writeObject()
Att skriva ut objekt

Även en datasamling med ett antal
objekt kan skrivas ut i sin helhet:
ArrayList al = new ArrayList();
Lägg in en massa objekt;
out.writeObject(al);
Där out är en instans av klassen
java.io.ObjectOutputStream
30
Att läsa in objekt

Att sedan läsa in de utskrivna objekten
igen görs genom:
ObjectInputStream oin =
new ObjectInputStream(
new FileInputStream(fil));
OCH sedan
oin.readObject()
31
Klassen ObjectOutputStream

Klassen ObjectOutputstream har även en
del andra instansmetoder för enklare
utskrifter som t ex:
public
public
public
public
32
void
void
void
void
writeBoolean(boolean b);
writeChars(String str);
writeFloat(float f);
writeDouble(double d);
XML

EXtensible Markup Langauge

Extensible för att det till skillnad från
HTML går att bygga ut för olika ändamål

HTML finns för att visa data på webben
XML finns för att strukturera data

33
Väl utformad XML



34
XML läses av en XML-parser
XML-parser = mjukvara som förutom att läsa en
XML-fil även kontrollerar syntaxen
En XML-fil med korrekt syntax som går att läsa
in i en XML-parser är väl utformad
well formed
XML-tips




Undvik blanksteg för XML-deklarationen
Se upp med VERSALER och gemener
Taggarna måste vara perfekt nästlade
Attribut värden ska omges av ” ” INTE ’ ’
Fler tips på:
http://www.xml.com/pub/a/98/10/guide0.html
35
Validerande XML


XML-dokumentet kan ha en kontrollreferens
DTD = Document Type Definition
I XML-filen:
<!DOCTYPE TempReport SYSTEM "TempReport.dtd">
<TempReport>
<city>Kista</city>
36
Validerande XML

Taggarna på den föregående bilden är skrivna
enligt DTD-filens angivelser:
<!ELEMENT TempReport (city, country, date, high, low) >
<!ELEMENT city (#PCDATA) >
Gör de frivilliga Uppgifterna 4a och 4b
37
Specialiseringar av XML

SVG = Scalable Vector Graphics
Vektorgrafik som går att animera:
http://dsv.su.se/~mozelius/svg/moln.htm

CML = Chemical Markup Language
Ett sätt att konstruera molekyler:
http://dsv.su.se/~miwebb/examination/labbar/Del4/
u4c/uppgift4c.htm
38
Specialiseringar av XML

SMIL = Synchronized Multimedia
Integration Language
Synkronisera bild och ljud strömmande:
http://dsv.su.se/~mozelius/GKITP/forelas
ningar/forelasningar.htm
Ska även 2I1073 ha liknande SMILföreläsningar nästa år?
39