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