Pastebin
Paste #238:
< previous paste - next paste>
Pasted by Anonymous Coward
17:28 <tdn> S: Den hemmelighed som sendes til klienten krypteres med klientens offentlige nøgle, hvorefter den sendes til klienten 17:29 <tdn> C: Den krypterede hemmelighed dekrypteres med klientens private nøgle og krypteres igen med serverens offentlige nøgle 17:29 <tdn> Årg pis! 17:29 <tdn> Jeg kludrer i det. 17:29 <tdn> Giv mig lige 2 minutter, så kommer jeg med en komplet og korrekt outline af min protokol :) 17:29 <friis> Jeg tror godt jeg forstår hvordan man laver en protokol. 17:29 <friis> det jeg ikke helt forstår er: 17:29 <tdn> Ok? 17:30 <friis> C: Sender certifikat.... hvordan definerer du certifikat og repræsenterer C's offentlige nøgle? 17:31 <friis> Bruger du nogle af java's egne bibloteker? KeyPairGenerator? 17:31 <friis> og hvordan implementerer du en CA? 17:31 <tdn> Altså formatet for mine certifikater? 17:31 <friis> s/hvordan/hvorledes. 17:31 <friis> tdn, ja? 17:31 <tdn> Nej. Jeg laver mit eget certifikatformat. 17:31 <tdn> Certifikatformatet er således: 17:32 <tdn> [feltnavn][kolon][sp][værdi][CR][LF] 17:32 <tdn> Hvor kolon, SP, CR og LF er hhv. et kolon, et mellemrum, carriage return og line feed. 17:33 <tdn> Ovenstående er et *felt* i et certifikat. 17:33 <friis> Yeah, det forstår jeg godt :D 17:33 <tdn> Et certifikat består af følgende krævede felter: 17:33 <friis> Smider du dem med som Headers i et http-request? 17:33 <tdn> Nej. Det gør jeg ikke. Det ville min outline (som jeg ikke fik lavet) have vist :) 17:34 <tdn> Krævede felter: Certificate-type, Certifying-authority, Public-key, Signature. 17:34 <tdn> Optional fields: Rights 17:36 <friis> ok. 17:36 <friis> Men hvordan repræsenterer du nøgler? 17:36 <friis> Altså, bruger du nogle af java's indbyggede metoder eller snyder du på en eller anden snedig måde? 17:36 <tdn> Min protokol er som følgende: 17:37 -!- Irssi: Pasting 7 lines to friis. Press Ctrl-K if you wish to do this or Ctrl-C to cancel. 17:38 <tdn> Klienten sender sit certifikat til serveren 17:38 <tdn> Serveren validerer certifikatet vha. CA-certifikatet 17:38 <tdn> Hvis klientens certifikat var ok, så sendes serverens certifikat til klienten. Lige efter dette sendes også en hemmelighed der er krypteret med klientens offentlige nøgle. 17:38 <tdn> Klienten validerer serverens certifikat vha. CA-certifikatet. 17:38 <tdn> Hvis serverens certifikat er ok, så læses hemmeligheden og dekrypteres. Herefter krypteres den med serverens offentlige nøgle (som stod i certifikatet fra serveren). Hemmeligheden som er krypteret sendes nu til serveren. 17:38 <tdn> Serveren validerer hemmeligheden ved at dekryptere med sin private nøgle. Hvis hemmeligheden er ok, så lukkes forbindelsen ikke. 17:38 <tdn> Klienten sender nu sit HTTP-request og serveren svarer på samme måde som normal HTTP. 17:38 <tdn> Jeg repræsenterer certifikater i en Certifikat-klasse, jeg har lavet. 17:39 <friis> Men dine nøgler? 17:39 <tdn> Så jeg bruger ikke noget indbygget Java-objekt 17:39 <tdn> Jamen mine nøgler repræsenterer jeg som ints... 17:39 <tdn> Eller strengt taget som Strings... 17:39 <tdn> Men jeg konverterer dem til ints, hver gang jeg regner med dem. 17:39 <tdn> Nøglerne er jo *inde* i Certifikat-objekterne. 17:39 <friis> ja, klart. 17:40 <tdn> Altså et Certifikat-objekt har så en metode som hedder getPrivateKey() f.eks. 17:40 <friis> En privateKey gemmes vel ikke i et certifikat? 17:40 <tdn> Jeg har så vist bare et HashMap inde i min Certifikat-type som indeholder alle certifikat-felterne. 17:41 <tdn> Nej. Private key gemmes ikke i certifikatet. 17:41 <tdn> Men den skal jo heller ikke sendes nogen steder. 17:41 <tdn> Så den har jeg bare som en reel int i min WebServer-klasse. 17:41 <tdn> Altså serverens private nøgle ^^ 17:41 <friis> ok fair nok. 17:41 <tdn> Jeg har ikke lavet nogen klient. 17:41 <friis> Lige en ting. 17:41 <tdn> Jeg bruger telnet og en lommeregner :) 17:42 <friis> heh :D 17:42 <friis> trix 17:42 <tdn> Det virker ;) 17:42 <friis> Det var det jeg mente som "snyd". Så viser man bare princippet i certifikater og ikke implementation af egentlig kryptering. 17:42 <friis> Din offentlige og private ng 17:42 <friis> Din offentlige og private nøgle må også være temmelig meget det samme? 17:42 <tdn> Som "snyd"? 17:43 <tdn> De er ikke temmeligt meget det samme. De *er* det samme ;) 17:43 <friis> heh 17:43 <friis> præcis 17:43 <tdn> Men det er egentlig intet problem at give dem forskellige værdier. 17:43 <friis> anyways, for at vende tilbage til din protokol: 17:43 <friis> 17:41 <tdn> Serveren validerer certifikatet vha. CA-certifikatet 17:43 <tdn> Faktisk vil det være meget nemt at ændre mit, så de altid er forskellige. 17:43 <friis> Så får du jo ikke det samme? 17:43 <tdn> F.eks. ved at gøre den private nøgle = negeret værdi af den offentlige. 17:43 <friis> ah 17:43 <tdn> Eh, hva? 17:43 <tdn> Forstod ikke lige det med CA? 17:44 <friis> Nej... 17:44 <friis> scratch... 17:44 <friis> Du skrev: 17:41 <tdn> Serveren validerer certifikatet vha. CA-certifikatet 17:44 <tdn> Ja. 17:44 <friis> CA-certifikatet? 17:44 <tdn> Klienten validerer også serverens certifikat ud fra CA-certifikatet. 17:44 <friis> Hvorledes konstruerer du det? 17:44 <tdn> Ja. Jeg opretter et certifikat til CA'en. 17:44 <tdn> Det gør jeg med Certificate caCert = new Certificate(args); 17:44 <tdn> :) 17:45 <tdn> Altså det er et helt almindeligt "certifikat". 17:45 <tdn> Af min certifikat-type. 17:45 <friis> Men det skal være kendt af begge parter ikke? 17:45 <friis> altså den nøgle. 17:45 <tdn> Jo. 17:45 <friis> Nåh! 17:45 <friis> det er bare "default" værdier i dit tilfælde? 17:45 <friis> Eller, sådan kunne man godt lave det i hvert fald :D 17:45 <tdn> Defaultværdier? 17:45 <tdn> Jeg ved ikke lige, hvad du mener med default-værdier? 17:46 <tdn> Men jeg laver mit CA-certifikat én gang. Jeg kunne vel egentlig lave det statisk. 17:46 <tdn> Jeg laver det oppe i WebServerklassen og sender det med til hver connection-tråd. 17:46 <friis> tdn: Ja, men den burde jo i princippet eksisterer "for sig selv" ik? 17:47 <tdn> For sig selv? 17:47 <friis> Man burde jo i realiteten bede en CA om et nyt certifikat hver gang igangsatte denne form for udveksling. 17:47 <tdn> Sorry, hvis jeg er lidt sløv... Har stadig lidt tømmermænd fra weekenden :S 17:47 <friis> hehe 17:47 <friis> fair 'nuf. 17:47 <friis> Du har givet mig et par ideer. 17:47 <tdn> Nej nej. Man skal kun have CA-certifikatet en gang jo. Det ændrer sig aldrig. Det er helt statisk. 17:48 <friis> tror at jeg vil lave certifikat-objekt... hvis standard/default -værdier er det globale CA's nøglepar. 17:48 <friis> tdn, nååå 17:48 <tdn> Når du downloader en webbrowser som f.eks. Mozilla Firefox, så følger der også nogle CA-certifikater med. Disse ændrer sig jo stort set ikke. Det er kun,hvis du vælger at slette nogle af dem eller tilføje nogle nye <spam> som f.eks. mit http://ca.sikkerhed.org</spam> ;) 17:49 <tdn> CA-certifikatet skal jo så også have en signatur. Den skal så bare være self-signed. 17:49 <tdn> Men det er jo ingen problem. 17:49 <tdn> Det er bare så man kan validere CA-certifikatet. 17:50 <friis> ok 17:50 <friis> et spørgsmål til. 17:50 <friis> du overfører kun int's ? 17:51 <tdn> Mellem server og klient? 17:51 <friis> ja? 17:51 <tdn> Nej. Der overfører jeg hele certifikater i form af strenge. 17:52 <tdn> Det allerførste som en klient gør, er at sende sit certifikat. Det kunne f.eks. være ved at sende linierne: 17:52 * friis hader sig selv. 17:52 <friis> :D 17:52 -!- Irssi: Pasting 5 lines to friis. Press Ctrl-K if you wish to do this or Ctrl-C to cancel. 17:52 <tdn> Certificate-type: Client 17:52 <tdn> Name: SecureClient 17:52 <tdn> Certifying-authority: TrustMe 17:52 <tdn> Public-key: 7 17:52 <tdn> Rights: rw 17:52 <tdn> Signature: 602630699364716113700111521969393522755 17:53 <tdn> Disse linier læses så af serveren som validerer det vha. CA-certifikatet. 17:53 <friis> Den har sit eget CA-certifikat der forbinder TrustMe med 602630699364716113700111521969393522755 ? 17:53 -!- Irssi: Pasting 5 lines to friis. Press Ctrl-K if you wish to do this or Ctrl-C to cancel. 17:53 <tdn> Ja. Serveren har så CA-certifikatet som indeholdeR: Certificate-type: CA 17:53 <tdn> Name: TrustMe 17:53 <tdn> Certifying-authority: TrustMe 17:53 <tdn> Public-key: 3 17:53 <tdn> Signature: 353226041301727512029032490296343025000 17:54 <tdn> Og ud fra CA-certifikatet kan serveren beregne, om den får samme værdi af Signature-feltet, som klienten har sendt. 17:54 <tdn> Hvor signature er en md5sum af værdien af alle felterne i certifikatet. 17:55 <tdn> Det kan i princippet være en hvilkensomhelst hash. Man burde også bare kunne lægge værdierne sammen. 17:56 <friis> Altså, så du md5sum'er hele det certifikat som klienten sendte og ser om "Signature": 353226041301727512029032490296343025000 17:56 <friis> er lig det? 17:57 <tdn> Jah. Ikke hele certifikatet, men bare værdierne af hvert felt. 17:57 <friis> ok 17:58 <tdn> På side 280 i bogen beskriver de et eksempel. 17:59 <tdn> Har du lavet opgaven til i morgen? 17:59 <tdn> Altså i DS. 17:59 <friis> nix 17:59 <friis> ved ikke helt, det bliver noget mærkelig hurtigt scrambled noget. 18:00 <tdn> Jeg har heller ikke lavet den til i morgen... Og min hjerne nægter simpelthen at komme i gear... 18:00 <tdn> Jeg tror dog, at jeg muligvis har løst 90% af selve kode-delen af opgaven... 18:01 <tdn> Men kan bare ikke rigtigt overskue det. 18:01 <friis> jeg ved sgu ikke helt hvad jeg gør. 18:01 <tdn> Og orker bare ikke at skrive en rapport. 18:01 <friis> må bare håbe de lader mig genaflevere eller sådan noget ;D 18:01 <tdn> Ja, mon ikke at der skal meget til, før de nægter at lade en genaflevere? 18:01 <friis> Jo, men måske har jeg slet ikke noget kode at aflevere. 18:02 <friis> det er sådan lidt... bob bob tror jeg. 18:02 <friis> :D 18:02 <tdn> Heh. Tjah. Så skriv da bare noget tekst, hvor du forklarer, hvordan du vil gøre, men så skriv, at du ikke har haft tid til at implementere det og derfor håber på genaflevering. 18:02 <friis> yeah 18:03 <friis> det håber jeg på de siger ok for. 18:03 <friis> Nu skal jeg bare lige lave den her genaflevering først :/ 18:03 <tdn> Hvem er Frej Soya Rasmussen? 18:03 <tdn> (sidder på #DIKU) 18:04 <friis> aner det ikke. 18:04 <friis> right now I don't really care. 18:04 <tdn> Arbejder hun for Google?(!) 18:04 <friis> :D 18:04 <friis> huh? 18:04 <tdn> http://www.cvt.dk/~frej/summerofcode%20application.txt 18:04 <tdn> Der står Email: frej.soya@google.com 18:04 <friis> google.com er ikke blevet frigivet som et alias til gmail? 18:05 <friis> Jeg har ikke hørt om det, men det kunne godt være :D 18:05 <friis> Men det ka' da godt ske' 18:05 <tdn> Det tror jeg ikke... Men ved det selvfølgelig ikke. 18:05 <tdn> Det ville være lidt grimt, synes jeg. 18:05 <friis> skriver i hvert fald at han kigger forbi som gammel og bitter ex-studderende. 18:06 <tdn> Age: 24 18:06 <tdn> Ingen kan blive færdige på DIKU i så ung en alder ;) 18:06 <friis> hehe 18:07 <tdn> Fjern bare "i så ung en alder" fra sidste sætning. 18:07 <friis> hehehe 18:08 <friis> Jeg tager udgangspunkt i din implementation :D 18:09 <tdn> Heh. Fint nok :) 18:10 <tdn> Men man kan også vælge at sende certifikatet som HTTP-headers... Hvis jeg skulle lave noget om, så ville jeg måske gøre det... Og så lave det sådan, at man ikke behøver at sende certifikatet ved hvert eneste request... Det gør det ganske irriterende at teste.... (igen fordi jeg gør det manuelt via telnet/lommeregner. Måske skulle jeg bare skrive en klient) 18:23 <friis> heh 18:23 <friis> Der er lige en ting. 18:23 <friis> jeg har glemt det igen, det som du skrev tidligere og mit hoved er ved at sprænge. 18:23 <friis> skal ud og spise, men jeg forstyrrer dig lige bagefter. 18:33 * friis bliver lige nød til at gå ud og se hvordan det går med maden :D 18:42 <tdn> Okay. Jeg er også ved at lave mad.
New Paste
Go to most recent paste.