_ 4.1.2 Signering/verifiering med asymmetriska algoritmer och nyckelpar I den här uppgiften går vi över till asymmetriska algoritmer för att signera och verifiera en godtycklig fil. Detta ska vi göra utan att använda de verktyg för säkerhet som ingår i JDK, vi ska alltså programmera utifrån de API:er som finns i JDK. __ Uppgift Gör följande tre program som vid kommandoprompten startas med: - §java KeyHandler § som skapar ett privat/publikt nyckel-par och sparar dessa nycklar (okrypterade) till de två filerna §§ och §§ - §java SignHandler § som signerar filen §§ med (den privata) nyckeln §§ och sparar signaturen i §§ - §java VerifyHandler § som kontrollerar om (den publika) nyckeln i filen §§ och signaturen i filen §§ verifierar filen §§ Vi använder alltså inte certifikat i denna uppgift utan laborerar direkt med nycklarna (okrypterade). Testa verifieringen både med en oförändrad och en förändrad datafil. Systemet ska göras utan användning av de verktyg för säkerhet som ingår i JDK. Signerings/verifierings-algoritmerna som ska användas är: - SHA256 för message-digest - DSA (med 1024 bits nycklar) för signaturen Man behöver inte använda klassen §KeyStore§ utan kan spara nycklarna okrypterade direkt på fil. __ Exempel Ett enkelt exempel kan köras enligt följande: = Hämta filen: §[KeyHandler.class, 05_ass/ip1/4/4.1.2/KeyHandler.class]§ = Kör programmet och gör nycklar: §java KeyHandler § = Hämta filen: §[SignHandler.class, 05_ass/ip1/4/4.1.2/SignHandler.class]§ = Hämta filen: §[data, 05_ass/ip1/4/4.1.2/data]§ = Kör programmet och signera: §java SignHandler data § = Hämta filen: §[VerifyHandler.class, 05_ass/ip1/4/4.1.2/VerifyHandler.class]§ = Kör programmet och verifiera: §java VerifyHandler data § __ Tips Man bör importera följande för säkerhetsfunktionerna: § import java.security.*; § Använd objekt-strömmar vid filhanteringen av nycklar. Använd de högnivå funktioner som finns tillgängliga, exempelvis i klassen §Signature§. Vill man hellre gå in på alla detaljer så bör man först bekanta sig med uppgiften [4.1.1 Kryptering/dekryptering med symmetriska algoritmer, 05_ass/ip1/4.1.1.txt] och sedan: - Signering: -- Skapa ett message-digest på datafilen -- Använd den privata nyckeln för att signera detta message-digest -- Det som sen ska sändas är: --- Datafilen --- Den publika nyckeln (om inte mottagaren redan har den) --- Signaturen - Verifiering: -- Mottagaren får: --- Datafilen --- Den publika nyckeln (om inte mottagaren redan har den) --- Signaturen -- Använd den publika nyckeln på signaturen för att få fram ett message digest 1 -- Skapa ett message-digest 2 på datafilen -- Kontrollera om message digest 1 = message digest 2, och om dessa är samma är meddelandet verifierat __ Hjälp ~ 05_ass/help/01.txt > [Klicka här för hjälp, helper.dsv@gmail.com, Prog Internet: 4.1.2 Signering/verifiering med asymmetriska algoritmer och nyckelpar: http://people.dsv.su.se/~pierre/i/i.cgi?href=05_ass/ip1/4.1.2.txt] ½===system_tutoring_message===½ < ~ 05_ass/help/02.txt