S =(s e )modn. s =(S d )modn. s =(s e ) d mod n.
|
|
- Niklas Isak Arvidsson
- för 8 år sedan
- Visningar:
Transkript
1 DAT 060 Laboration 3 Säkerhet på nätet eller kan någon komma åt mitt konto på internetbanken? Institutionen för datavetenskap 27 juni 2002 Dagens laboration kommer att beröra en mycket viktig aspekt av Internetanvändning, nämligen säkerheten. Många av oss använder Internet för att utföra bankärenden. Några av oss handlar på nätet och skickar med numren på sina kreditkort för att betala för varorna. Snart kommer vi att kunna lämna deklarationen elektroniskt, med digital signatur som garanti för vår identitet. Alla dessa tjänster kan användas eftersom vi har rimlig garanti att transaktionerna eller överföringen av data mellan våra datorer och servrarna som utför tjänsterna är säkra. Vad innebär detta? I princip betyder det att ingen kan läsa det vi skickar till tjänsteutövaren eller det vi läser därifrån. Men hur vet vi det? Vad betyder det att vi har en rimlig garanti? Idag kommer vi att titta lite närmare på grunderna som kan ge oss denna garanti. Man kan tänka sig att det måste vara väldigt svårt att förstå en sådan mekanism μ eftersom vi pratar om krypteringen och ogenomträngligheten av transaktionerna, så måste det väl betyda att systemet är väldigt komplicerat för att förhindra avlyssning? Tvärtom! Konceptet bygger på mycket enkla grunder från matematiken, grunder som vi alla kan förstå och inse att det inte finns någon rimlig möjlighet att avlyssna eller tjuvläsa ett sådant krypterat meddelande. Vi kommer att illustrera dessa grunder med ett enkelt exempel på säker kryptering (kodning), digitala signaturer och t.o.m. forcering av en sådan krypteringsmekanism. Idéerna bakom publiknyckel-kryptering 1 och digitala signaturer har hittats på så sent som Men redan nu spelar de en mycket viktig roll i vårt samhälle när det gäller privat säker kommunikation mellan två parter. Vad som kanske är intressant är att det är enkla matematiska grunder som ligger till grund för snabba krypteringsalgoritmer. Effektiv exponentiering och snabb testning av primalitet (diskuterade i sektionerna i kursboken) är huvuddelarna i RSA-algoritmen μ den mest använda metoden för att implementera publiknyckel-kryptering. Vi skall implementera en version av RSA algoritmen som, fast den är enkel, har väldigt stor betydelse i praktiken. Avsnitt 1 betraktar huvudidéerna bakom RSA systemet. Avsnitt 2 ställer frågor som bör hjälpa dig att förstå problemet. Avsnitt 3 ger grunden till labbuppgifterna, medan avsnitt 4 innehåller det som du bör klara på labben. Det är viktigt att förberedda sig i förväg till denna labb! I synnerhet, avsnitt och är av ytterst vikt för uppgiften. Troligen är detta den svåraste labben på hela kursen - å andra sidan är den knuten till ett mycket hett forsknings- och applikationsområde och jag hoppas att det därför också blir den mest intressanta labben. Ett stort tack till Camilla Kirkegaard och Julian Togelius Ekwall för språkhjälp. Alla fel som fortfarande finns är förstås mina. Jacek Malec. This lab assignment has been prepared on the basis of the MIT's RSA, available on the SICP homepage 1 Det finns en alternativ översättning av public-key encryption, nämligen öppennyckel-kryptering eller, lite mer generellt, öppennyckel infrastruktur. 1
2 Institutionen för datavetenskap, DAT060, Laboration 3 2 RSA systemet Man har använt kryptering av information sedan antiken. Det är därför förvånande att man inte förrän 1976 har uppfunnit en helt ny metod för att chiffrera (kryptera) och dechiffrera (dekryptera) hemlig information - publiknyckel-baserad kryptografi. Upphovsmännen till idéen var Whitfield Diffie och Martin Hellman från Stanford universitetet. Kryptografiska system är baserade på användning av nycklar för chiffrering och dechiffrering. En chiffreringsnyckel specificerar metoden för omvandling av ursprungsmeddelandet till en kodad version, läsbar endast för de som kan dechiffreringsnyckeln för att kunna göra den omvända operation. I traditionella kryptografiska system är krypterings- och dekrypteringsnycklarna antigen identiska eller så kan en lätt produceras ur den andra. Som konsekvens, om du vet hur du krypterar ett meddelande så vet du också hur du dekrypterar ett meddelande krypterat med denna nyckel. Diffie och Hellmans ide är baserat på insikten att det kan finnas kryptografiska system i vilka kunskapen om krypteringsnyckeln inte räcker för dekryptering av ett meddelande, d.v.s. där det är praktiskt omöjligt att få fram dekrypteringsnyckeln utifrån en krypteringsnyckel. Detta har mycket stora praktiska konsekvenser. I traditionella system kan du få ett krypterat meddelande endast om avsändaren och du delar samma hemliga krypteringsnyckel. Om någon får tag på nyckeln så är säkerheten inte längre garanterad. Därför brukar krypteringsnycklarna bevaras under sträng kontroll och transporteras med mycket omfattande säkerhetsåtgärder, annars riskerar man att de blir stulna. I Diffie och Hellmans system kan du sprida din krypteringsnyckel till vem som helst, utan några säkerhetsåtgärder alls! Även om alla visste din krypteringsnyckel, kunde ingen dekryptera meddelande som skickats till dig, eftersom de måste dekrypteras med din dekrypteringsnyckel som du håller hemlig och otillgänglig. Diffie och Hellman kallar detta system ett publiknyckel-krypteringssystem. Några månader efter att Diffie och Hellman publicerade idéen, hade Ronald Rivest, Adi Shamir och Leonard Adelman på MIT hittat en effektiv algoritm för att implementera den. Deras system, RSA, verkar vara en av de mest populära i dagens säkra digitala system. En intressant händelse värd att påpeka här är att européer inte skulle kunna använda säker kryptering baserad på publiknyckelkryptering utan Phil Zimmermann, skapare av PGP (Pretty Good Privacy) - en öppenkällkod-implementation av publiknyckel-kryptering. Den skulle man inte ha kunnat exportera från USA utan att referera till det första tillägget till den amerikanska konstitutionen som garanterar yttrandefrihet i alla former. Man har publicerat koden till PGP som en bok och som sådan kunde man föra ut koden ur USA. Det tog många år och mycket lagligt strul innan de amerikanska domstolarna beslutade att det som Phil Zimmermann gjorde inte var brottsligt. Mer om detta kan ni säkert hitta på nätet. Leta efter PGP och Zimmermann (se t.ex. En bra implementation av PGP idéen har nyligen skapats inom GNU projektet. Mjukvaran heter GnuPG. Se eller direkt på Teorin bakom RSA RSA använder heltal för att representera tecken eller grupper av tecken 2 och speciella funktioner som omvandlar heltal till heltal. I publiknyckelkryptografi väljer man två stora primtal, p och q. Sedan kan man definiera: n = pq (1) m =(p 1)(q 1) (2) Man väljer också ett tal e sådant att gcd(e, m) =1. Din publika nyckel som du kan fritt sprida är då paret < e,n >. Varje person som vill skicka dig ett hemligt meddelande s (representerat som ett heltal) krypterar den enligt följande RSA-transformation definierad av n och e: krypterat meddelande = s upphöjd till potens e, modulo n 2 T.ex. koden som används för att representera tecken i våra datorer, ISO , använder 8 bitar för att koda ett tecken. I denna labbuppgift använder vi heltal med 32 bit för att representera 4 tecken i ISO koden.
3 Institutionen för datavetenskap, DAT060, Laboration 3 3 eller S =(s e )modn. Om du får ett krypterat meddelande S så kan du dekryptera det m.h.a. en annan RSA transformation som baseras på n och ett särskilt tal d: s = krypterat meddelande upphöjt till potens d, modulon eller s =(S d )modn. Talet d är valt på så sätt att s = s för varje meddelande s, 3 d.v.s. s =(s e ) d mod n. Man kan visa att talet d som har denna egenskap är sådant att de =1modm (3) d.v.s. d är en multiplikativ invers av e modulo m. 4 Det visar sig att det är lätt att beräkna d effektivt om man känner e och m =(1 p)(1 q). För att generera ett par av RSA nycklar väljer man två primtal p och q, beräknar n = pq, väljer e och använder det för att beräkna d. Sedan annonserar man paret n och e som sina publika nycklar, men behåller d hemlig som den privata nyckeln. Man kan få meddelande från andra, som är krypterade med paret <n,e>. Då kan man dekryptera de m.h.a. paret <n,d>. Säkerheten i denna metod är baserat på följande observation: Även om någon känner talen e och n (den publika nyckeln) så den effektivaste metoden att dekryptera ett meddelande krypterat med denna nyckeln är att faktorisera (hitta alla delare) n för att hitta p och q, sedan använda de för att beräkna m och slutligen använda e och m för att hitta d. Med andra ord, att knäcka RSA kryptering är lika svårt som att faktorisera talet n till sina faktorer p och q 5.Även om det finns många intressanta algoritmer inom denna område så är faktorisering av stora tal inte möjligt med dagens datorer inom rimlig tid. T.ex. för att faktorisera n = pq där p och q är primtal med 200 siffror var, även om man använder dagens snabbaste algoritmer och datorer, skulle det kräva mer än 100 år av beräkningar 6. Digitala signaturer, kryptering och underskrift Diffie och Hellman föreslog i sitt papper från 1976 användning av publiknyckelkryptering för att lösa ett annat problem med säker kommunikation. Problemet är följande: Anta att du vill skicka ett meddelande med e-post. Hur kan de som mottar ditt meddelande vara säkra att det verkligen kommer från dig och inte från någon annan μ att någon inte har förfalskat det 7. Vad som behövs är en möjlighet att markera ett meddelande på ett sådant sätt som inte kan förfalskas. En sådan markering heter digital signatur eller digital underskrift. Diffie och Hellmans förslag var att göra följande steg: ta ditt meddelande och använd en publik komprimeringsfunktion 8 (som i andra sammanhang kan också heta blandningsfunktion, eller från engelska hashfunktion), som alla är överens om och som producerar ett unikt, ganska litet tal. Ett och samma meddelande 3 Detta är sant endast om gcd(s, n) =1.Omn är en produkt av två stora primtal, så nästan alla s<nkommer att uppfylla detta. 4 Det är en av satserna inom talteorin. Vi kommer inte att försöka förklara det närmare. 5 Det finns inget bevis för detta påstående, men å andra sidan vi känner ingen annan metod för att knäcka RSA kryptering, åtminstone inte än. 6 En möjlig ändring på detta område kan komma med kvantdatorer. 7 En intressant debattartikel om den svenska lagen som (inte) reglerar detta finns i DN från söndagen 23 juni Man brukar skilja mellan komprimeringsfunktioner, vilka ger resultat som kan användas för att återskapa ursprungsmeddelande, och blandningsfunktioner, som är tänkta att ge olika resultat för olika meddelande, men som inte tillåter att återskapa ursprungsmeddelandet. Här kommer vi använda bägge ord i den andra betydelsen.
4 Institutionen för datavetenskap, DAT060, Laboration 3 4 kommer alltid att översättas till samma tal. Å andra sidan, kommer det att finnas många meddelande som resulterar i samma värde av komprimeringsfunktionen. Använd nu din privata nyckel för att transformera detta tal. Det transformerade värde på komprimeringsfunktionsresultat är din digitala underskrift, som du kommer att skicka tillsammans med meddelandet. Varje person som mottar ditt meddelande kan kolla din signerings autenticitet genom att omvandla den m.h.a. din publiknyckel och jämföra resultatet med komprimeringen av det ursprungliga meddelande. Detta fungerar eftersom varje person som vill skapa ett meddelande med din (förfalskade) signatur måste hitta ett tal som, omvandlat med din publiknyckel, ger värde på komprimeringsfunktions resultat. Varje person kan beräkna detta värde, eftersom komprimeringsfunktionen ju är publik. Men eftersom det är endast du som känner till din privata nyckel, kan endast du skapa ett tal som omvandlat med din publiknyckel ger det rätta resultat. Om någon skulle vilja förfalska din signatur, vore han eller hon tvungen att gissa din privata nyckel, vilket troligen är exakt lika svårt som att knäcka RSA-krypteringen. En vidareutveckling av denna ide är följande: anta att Annika vill skicka Göran ett signerat brev som endast Göran ska kunna läsa. Hon krypterar brevet med Görans publiknyckel. Sedan signerar hon det krypterade resultatet med sin privata nyckel. När Göran får ett brev från Annika, använder han först hennes publiknyckel för att kolla autenticiteten avbrevet och sedan dekrypterar han meddelandet med sin privata nyckel. Bilden 1 nedan illustrerar metoden. Observeravad denna metod uppnår: Göran kan vara säker att det endast kan vara någon med Annikas privata nyckel som kunde skicka meddelandet. Annika kan vara säker på att endast någon med Görans privata nyckel som kan läsa meddelandet. Detta resultat kan fås utan att utväxla någon hemlig information mellan Annika och Göran. Det är denna möjlighet att garantera säker kommunikation utan att utväxla hemliga nycklar som gör att publiknyckel-kryptering är en så viktig teknik. Att implementera RSA Den första biten vi behöver för att implementera RSA är den snabba exponentieringsalgoritmen (avsnitt i kursboken): (define (expmod b e m) (cond ((zero? e) 1) ((even? e) (remainder (square (expmod b (/ e 2) m)) m)) (else (remainder (* b (expmod b (- e 1) m)) m)))) Vi antar att en RSA-nyckel representeras som ett par μ modulus och exponent: (define make-key cons) (define key-modulus car) (define key-exponent cdr) Den grundläggande RSA-transformation blir då: (define (RSA-transform number key) (expmod number (key-exponent key) (key-modulus key))) Att generera primtal För att kunna generera RSA-nycklar behöver vi först och främst kunna generera primtal. Den enklaste metoden är att välja slumpmässigt något tal inom ett önskat intervall och börja testa alla följande tal i tur och ordning tills vi hittar ett primtal. Följande procedur börjar söka fr.o.m. ett slumpmässigt valt tal från intervallet start och start+range: (define (choose-prime smallest range) (let ((start (+ smallest (choose-random range)))) (search-for-prime (if (even? start) (+ start 1) start)))) (define (search-for-prime guess) (if (fast-prime? guess 2) guess (search-for-prime (+ guess 2))))
5 Institutionen för datavetenskap, DAT060, Laboration 3 5 unencrypted message encrypt with recipient s public key encrypted message compress with hash function unencrypted signature encrypt with sender s private key encrypted signature decrypt with recipient s private key decrypted message compress with hash function unencrypted signature decrypt with sender s public key number that should match unencrypted signature Figur 1: Kryptering med digital underskrift.
6 Institutionen för datavetenskap, DAT060, Laboration 3 6 (define choose-random ;; restriction of Scheme RANDOM primitive (let ((max-random-number )) (lambda (n) (random (floor->exact (min n max-random-number)))))) Vi testar primaliteten m.h.a. Fermats test (avsnitt i kursboken): (define (fermat-test n) (let ((a (choose-random n))) (= (expmod a n n) a))) (define (fast-prime? n times) (cond ((zero? times) true) ((fermat-test n) (fast-prime? n (- times 1))) (else false))) Att generera RSA-nyckelpar Nu kan vi generera en publik RSA-nyckel och den motsvarande privata (hemliga) nyckeln. De kommer representeras som ett par: (define make-key-pair cons) (define key-pair-public car) (define key-pair-private cdr) Följande procedur genererar ett RSA-nyckelpar. Den väljer primtal p och q i intervallet 2 16 till 2 17 så att n = pq är i intervallet 2 32 till 2 34 som är tillräckligt stort för att representera fyra tecken per tal (8 bit 4tecken = 32) 9. När primtalen finns beräknar proceduren n och m enligt ekvationerna (1) och (2). Sedan väljer den en exponent e och hittar ett tal d som uppfyller ekvation (3). (define (generate-rsa-key-pair) (let ((size (expt 2 16))) (let ((p (choose-prime size size)) (q (choose-prime size size))) (if (= p q) ;check that we haven't chosen the same prime twice (generate-rsa-key-pair) ;(VERY unlikely) (let ((n (* p q)) (m (* (- p 1) (- q 1)))) (let ((e (select-exponent m))) (let ((d (invert-modulo e m))) (make-key-pair (make-key n e) (make-key n d))))))))) Exponenten e är ett godtyckligt slumptal 0 < e < m sådant att gcd(e, m) = 1(storsta gemensamma delare - greatest common divisor, gcd). Proceduren gcd finns i boken i avsnitt 1.2.5, fast den är också Schemes primitiv. (define (select-exponent m) (let ((try (choose-random m))) (if (= (gcd try m) 1) ;if gcd is not 1, then try again try (select-exponent m)))) Att beräkna den multiplikativa inversen Talet d som krävs för RSA-nyckeln måste uppfylla de =1modm Det betyder att d måste satisfiera följande ekvation km + de =1 9 Vi använder så små tal eftersom vi vill att du provar kodknäckning för RSA-systemet. Om du valde större slumptal i början skulle du få ett system som är verkligen säkert.
7 Institutionen för datavetenskap, DAT060, Laboration 3 7 för något (negativt) heltal k (Det är en direkt följd av definitionen på likhet modulo m). Man kan visa att lösningar till denna ekvation finns om och endast om gcd(e, m) =1. Följande procedur returnerar ett värde på d under förutsättningen att det finns en annan procedur som, givet två tal a och b, returnerar ett par av sådana heltal (x, y) att ax + by =1 10. (define (invert-modulo e m) (if (= (gcd e m) 1) (let ((y (cdr (solve-ax+by=1 m e)))) (modulo y m)) ;take y modulo m, in case y was negative (error gcd not 1" e m))) Lösningen på ax + by = 1 kan fås genom ett snyggt rekursivt trick som är besläktat med rekursiv beräkning av GCD, beskriven i avsnit av kursboken. Låt q vara kvoten av a delad med b, ochlåtr vara resten av delningen, så att a = bq + r Nu kan man rekursivt lösa ekvationen och använda x och ȳ för att räkna ut x och y 11. b x + rȳ =1 Kryptering och dekryptering av meddelande Som den sista pusselbit behöver vi kunna omvandla strängar till heltal och tillbaka. Koden för uppgiften innehåller procedurerna string->intlist och intlist->string som omvandlar teckensträngar till listor med tal och listor med heltal till strängar. Varje heltal på listan kodar 4 tecken från meddelandet. Om antalet tecken i meddelandet är inte delbar med 4 så adderas blanktecken i slutet. > (string->intlist Detta är en sträng") ( ) > (intlist->string '( )) Detta är en sträng " Hur de två procedurerna fungerar är inte så viktig, fast du kan förstås kika påkoden för att se hur man kan manipulera strängar i Scheme. För att kryptera ett meddelande omvandlar vi ett meddelande till en lista med heltal och sedan transformerar vi listan m.h.a. RSA-kodning som utnyttjar en av nycklarna i ett nyckelpar. (define (RSA-encrypt string key1) (RSA-convert-list (string->intlist string) key1)) Det enklaste sättet att transformera en lista med heltal vore att transformera varje tal var för sig och samla resultat i en ny lista. Men detta fungerar inte på ett tillfredställande sätt (se fråga 4 nedan). Istället tar vi det första talet och krypterar det, sedan subtraherar vi det från det andra talet (modulo n) och krypterar resultatet, som subtraheras från det tredje talet och krypteras, o.s.v., så att varje tal i den resulterande listan beror på alla tidigare tal och deras krypteringsresultat. (define (RSA-convert-list intlist key) (let ((n (key-modulus key))) (define (convert l sum) (if (null? l) '() (let ((x (RSA-transform (modulo (- (car l) sum) n) key))) (cons x (convert (cdr l) x))))) (convert intlist 0))) Du skall implementera den motsvarande RSA-unconvert-list proceduren som avslöjar den ursprungliga listan m.h.a. den andra nyckeln från nyckelparet. Då kan vi använda (define (RSA-decrypt intlist key2) (intlist->string (RSA-unconvert-list intlist key2))) 10 Primitivproceduren modulo som vi använder för att garantera ett positivt resultat, är samma som remainder förutom negativa argument: (remainder 12-7) är -5, medan (modulo 12 7) är 2. (modulo a b) har alltid samma tecken som b, medan (remainder a b) har alltid samma tecken som a. 11 Du måste själv komma på detaljerna μ det är en av labbuppgifterna.
8 Institutionen för datavetenskap, DAT060, Laboration 3 8 Slutligen, för att generera digitala underskrifter för krypterade meddelande använder vi en standard packningsfunktion. I vårt fall 12 kommer vi att helt enkelt addera heltal modulo (define (compress intlist) (define (add-loop l) (if (null? l) 0 (+ (car l) (add-loop (cdr l))))) (modulo (add-loop intlist) (expt 2 32))) Frågor Följande frågor bör hjälpa dig att förstå problemet. Du bör kunna svara på dem innan du kommer till labben. Fråga 1: Vad är det för skillnad mellan följande två definitioner av choose-prime? (define (choose-prime smallest range) (search-for-prime (+ smallest (choose-random range)))) (define choose-prime (lambda (smallest range) (search-for-prime (+ smallest (choose-random range))))) Fråga 2: Rita strukturen (m.h.a. boxdiagram) av entypisk resultat som returneras av generate-rsa-keypair. Läs först ovan om hur generate-rsa-key-pair fungerar. Fråga 3: Metoden att skicka säkra signerade meddelande kräver att man först krypterar meddelandet och sedan signerar resultatet. Vore det inte bättre att först signera meddelandet och sedan kryptera resultatet? Fråga 4: Proceduren RSA-encrypt vore mycket enklare om man kunde kryptera varje tal i listan separat: (define (RSA-encrypt intlist key1) (map (lambda (int) (RSA-transform int key1)) intlist)) Hur skulle den motsvarande RSA-decrypt proceduren se ut? Varför är detta inte tillräcklig för en säker kryptering? Bakgrundsinformation Under de senaste åren har regeringen jobbat hårt för att introducera säker kommunikation mellan ministrarna. Systemet omfattar också alla övriga partiledare för att garantera krisberedskap. Systemet sjösattes nyligen, men eftersom det var skapat av ett stort företag (M$bolaget AB) så har man hittat oundvikliga fel. Regeringsmedlemmarnas publika nycklar finns alltid på regeringens hemsida, så att alla kan skicka krypterade och signerade brev till dem. Tyvärr, av en ren slarv, har man under en mycket kort tid visat också de privata nycklarna. Detta räckte för Urban Hackare att komma på en rad privata nycklar för personer i regeringskretsen. Under tiden har SÄPO identifierat de felaktiga modulerna i systemet. Tyvärr visar det sig att Schemekunskaperna är inte så utbredda som de borde. Därför gick förfrågan att fixa systemet till dem som på sommartid finns tillgängliga (alla övriga svenska Scheme-programerare semestrar i Antarktis så här dags) och samtidigt besitter nödvändiga kunskaper. Lunds universitet räddar säkerheten i riket Iverkligheten använder man mer komplicerade packning och blandningsfunktioner än denna. Du får gärna tänka på frågan: Varför?
9 Institutionen för datavetenskap, DAT060, Laboration 3 9 Labbuppgifterna Börja med att ladda koden för labbet, lab3.ss. Denna fil innehåller alla de korrekta och verifierade modulerna från regeringens krypteringssystem. För att börja med, evaluera (define test-publiknyckel1 (key-pair-public test-nyckelpar1)) (define resultat1 (rsa-encrypt "Hur många öar finns här!" test-publiknyckel1)) Som resultat1 bör du få en lista ( ) test-nyckelpar1 är ett exemplariskt RSA-nyckelpar som genererades i förväg. Kom ihåg att alla tecken i strängen har betydelse - strängen måste se exakt likadant ut! Uppgift 1: Tyvärr saknas det en av de viktigaste procedurerna: RSA-unconvert-list som är nödvändig G för att dekryptera ett meddelande. Implementera den. Proceduren bör ta två argument: en lista med heltal att dekryptera och dekrypteringsnyckel, och bör returnera en lista med heltal i sin ursprungsform (d.v.s. innan den krypterades m.h.a. RSA-convert-list). OBS! Proceduren liknar vädigt mycket den andra proceduren, RSA-convert-list. Om din kod är mer komplicerat så är du på fel spår. Fråga då labbassistenten om hjälp. För att provköra din procedur evaluera följande kod: (define test-privatnyckel1 (key-pair-private test-nyckelpar1)) (RSA-unconvert-list resultat1 test-privatnyckel1) Detta bör resultera i: ( ) Om detta fungerar så bör du kunna evaluera (RSA-decrypt resultat1 test-privatnyckel1) för att få det ursprungliga meddelandet. Det finns också ett annat testpar med RSA-nycklar, som du kan få genom att evaluera (define test-publiknyckel2 (key-pair-public test-nyckelpar2)) (define test-privatnyckel2 (key-pair-private test-nyckelpar2)) Visa din kod, kryptering och dekryptering av testmeddelandet och några prov med en annan text (använd både test-nyckelpar1 och test-nyckelpar2 i dina experiment) för labbassistenten. Uppgift 2: Implementera metoden för kryptering och signering av meddelande som beskrevs i första av- G snittet. Börja med att skapa en (väldigt) enkel datastruktur som heter signerat-meddelande och som består av en meddelande-del och en signatur-del. Definiera nu en procedur encrypt-and-sign som som argument tar meddelandet att kryptera och signera, avsändares privatnyckel och mottagares publiknyckel. Proceduren bör kryptera ett meddelande, beräkna dess digitala signatur och sätta ihop dem i ett signerat-meddelande. Prova nu: (define resultat2 (encrypt-and-sign "Ett brev från person 1 till person 2." test-privatnyckel1 test-publiknyckel2)) Du bör få ett signerat meddelande med ( ) som meddelandedel och med som signaturdel. Implementera nu en procedur authenticate-and-decrypt som utför den omvanda processen. Den tar som sina argument det mottagna signerade meddelande, avsändares publiknyckel och mottagares privatnyckel.
10 Institutionen för datavetenskap, DAT060, Laboration 3 10 Om signaturen är äkta bör proceduren resultera i dekrypterat meddelande. Om signaturen är förfalskad bör proceduren meddela detta. Du kan testa din procedur med att evaluera följande uttryck: (authenticate-and-decrypt resultat2 test-publiknyckel1 test-privatnyckel2) för att få det ursprungliga meddelande. Vilket resultat får du när du evaluerar följande uttryck: (authenticate-and-decrypt resultat2 test-publiknyckel1 test-privatnyckel1) Varför 13? Visa din kod för labbassistenten och provkör den för att bevisa att den fungerar. Bl.a. bör du visa att din procedur hittar oäkta signaturer. Uppgift 3: På regeringens hemsida finns följande publika nycklar offentliggjorda: G (define göran-perssons-publik-nyckel (make-key )) (define bo-lundgrens-publik-nyckel (make-key )) (define gudrun-schymans-publik-nyckel (make-key )) (define lars-leijonborgs-publik-nyckel (make-key )) (define alf-svenssons-publik-nyckel (make-key )) (define åsa-domeijs-publik-nyckel (make-key )) (define maud-olofssons-publik-nyckel (make-key )) (define thomas-östross-publik-nyckel (make-key )) (define bosse-ringholms-publik-nyckel (make-key )) (De finns också med i filen lab3.ss.) Igår fick Göran Persson följande meddelande: ( ) och signaturen var (De värdena finns i labbfilen definierad som hemligt-meddelande och hemlig-underskrift.) Som sagt, Urban Hackare lyckades hitta Göran Perssons privatnyckel: (define göran-perssons-privat-nyckel (make-key )) Dekryptera meddelandet och identifiera avsändaren. Visa för din labbassistent. Uppgift 4: Tyvärr saknar procedurerna som genererar RSA-nyckelpar en viktig del, nämligen funktionen G som löser ekvationen ax+by =1. (M$bolaget ABs programmerare lyckades inte att få den korrekt.) Definiera denna procedur, som bör heta solve-ax+by=1. Den bör ta två argument a och b sådana att deras GCD är lika med 1. Proceduren returnerar ett par med heltal x och y. Visa att din procedur fungerar genom att hitta en lösning (x, y) till ekvationen Glöm inte att testa ditt svar! x y =1 Om du har en fungerande solve-ax+by=1 så bör du kunna evaluera generate-rsa-key-pair (en procedur utan argument) som skapar slumpmässiga nyckelpar. Generera ett nyckelpar för dig själv. Visa din solve-ax+by=1 för labbassistenten, tillsammans med värdena på x och y. Visa också att ditt nyckelpar kan användas för att kryptera och dekryptera meddelande. Uppgift 5: Nu har du en fungerande, komplett implementation av RSA kryptografiskt system, tillsam- G mans med möjligheten att kryptera, dekryptera, digitalt signera, testa autenticitet och skapa nya nycklar. Eftersom implementationen utnyttjar små primtal så bör du kunna också knäcka systemet. För att kunna göra det måste du faktorisera modulus n i dess primfaktorerna p och q. Du kan göra det m.h.a. proceduren smallest-divisor som finns med i labbkoden 14. Skriv en procedur knäck-rsa som tar en publiknyckel som argument och returnerar motsvarande privatnyckel. Testa din procedur på test-nyckelpar1 och test-nyckelpar2 för att visa att din implementation fungerar. 13 Troligen är resultatet korrekt, även om i början käns det konstigt. 14 När du har hittat en primfaktor p så är den andra q = n/p.
11 Institutionen för datavetenskap, DAT060, Laboration 3 11 Uppgift 6: Skapa ett antal meddelande mellan personerna vilkas publika nycklar finns i uppgift 3. Dina meddelande bör verka autentiska för proceduren authenticate-and-decrypt. Uppgift 7: RSA-systemet som vi har implementerat är så lätt att knäcka eftersom primtalen vi använder är små: n = pq är en produkt av två primtal med 5-6 siffror var. Du kan prova använda inbyggd procedur time för att bedöma tiden som är nödvändig för att hitta faktorer m.h.a. smallest-divisor. Prova detpå uttrycket: (time (smallest-divisor )) Hitta dokumentationen som beskriver vad varje tal i utskriften betyder. Kolla hur mycket tid tar det att faktorisera några av de n som skapades m.h.a. generate-rsa-key-pair. Försök bedöma hur mycket tid skulle det ta att faktorisera ett tal n (d.v.s. knäcka RSA-nycklar) om man använder primtal med 20, 50 och 100 siffror. Uttryck svaret i sekunder, minuter, dagar eller år μ detta mått du hittar lämpligast. Tack för idag.
Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på
DAT 060 Laboration 2 I Malmös kasino Institutionen för datavetenskap 17 juni 2002 Per tänkte dryga ut sitt magra studielån genom att jobba som labbassistent på sommarkursen. Tyvärr fanns det redan tillräckligt
Läs merRSA-kryptering och primalitetstest
Matematik, KTH Bengt Ek augusti 2016 Material till kurserna SF1630 och SF1679, Diskret matematik: RSA-kryptering och primalitetstest Hemliga koder (dvs koder som används för att göra meddelanden oläsbara
Läs merNÅGOT OM KRYPTERING. Kapitel 1
Kapitel 1 NÅGOT OM KRYPTERING Behovet av att skydda information har funnits mycket länge, men först i samband med utvecklingen av datatekniken har det blivit ett allmänt problem för alla moderna samhällen.
Läs merKrypteringteknologier. Sidorna 580-582 (647-668) i boken
Krypteringteknologier Sidorna 580-582 (647-668) i boken Introduktion Kryptering har traditionellt handlat om skydda konfidentialiteten genom att koda meddelandet så att endast mottagaren kan öppna det
Läs merOffentlig kryptering
127 Offentlig kryptering Johan Håstad KTH 1. Inledning. Denna uppgift går ut på att studera ett offentligt kryptosystem. Med detta menas ett kryptosystem där det är offentligt hur man krypterar, men trots
Läs merPrimtal, faktorisering och RSA
17 november, 2007 Ett Exempel N = 93248941901237910481523319394135 4114125392348254384792348320134094 3019134151166139518510341256153023 2324525239230624210960123234120156 809104109501303498614012865123
Läs merGrundfrågor för kryptosystem
Kryptering Ett verktyg, inte en tjänst! Kryptering förvandlar normalt ett kommunikationssäkerhetsproblem till ett nyckelhanteringsproblem Så nu måste du lösa nycklarnas säkerhet! 1 Kryptering fungerar
Läs merNågra satser ur talteorin
Några satser ur talteorin LCB 997/2000 Fermats, Eulers och Wilsons satser Vi skall studera några klassiska satser i talteori, vilka är av betydelse bland annat i kodningsteknik och kryptoteknik. De kan
Läs merKryptering. Krypteringsmetoder
Kryptering Kryptering är att göra information svårläslig för alla som inte ska kunna läsa den. För att göra informationen läslig igen krävs dekryptering. Kryptering består av två delar, en algoritm och
Läs mer256bit Security AB Offentligt dokument 2013-01-08
Säkerhetsbeskrivning 1 Syfte Syftet med det här dokumentet är att översiktligt beskriva säkerhetsfunktionerna i The Secure Channel för att på så vis öka den offentliga förståelsen för hur systemet fungerar.
Läs merMA2047 Algebra och diskret matematik
MA2047 Algebra och diskret matematik Något om restklassaritmetik Mikael Hindgren 19 september 2018 Exempel 1 Klockan är nu 8.00 Vad är klockan om 78 timmar? Vad var klockan för 53 timmar sedan? 8 + 78
Läs merSignalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.
Strömmar (streams) De sista dagarna objekt med tillstånd modellerades som beräkningsobjekt med tillstånd. Isådana modeller är tiden modelerad (implicit) som en sekvens av tillstånd. För att kunna modellera
Läs merTDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18
TDDC74 Programmering: Abstraktion och modellering Datortenta - 2018-06-07, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis
Läs merKryptering HEMLIG SKRIFT SUBSTITUTION STEGANOGRAFI KRYPTOGRAFI
1/7 Kryptering Se kap. 6 HEMLIG SKRIFT STEGANOGRAFI Dolt data KRYPTOGRAFI Transformerat data - Transposition (Permutation) Kasta om ordningen på symbolerna/tecknen/bitarna. - Substitution Byt ut, ersätt.
Läs merKryptografi: en blandning av datavetenskap, matematik och tillämpningar
Kryptografi: en blandning av datavetenskap, matematik och tillämpningar Björn von Sydow 21 november 2006 Kryptografins historia Fyra faser Kryptografins historia Fyra faser Antiken ca 1920 Papper och penna.
Läs merTDDC74 Lab 04 Muterbara strukturer, omgivningar
TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden
Läs merKryptografi - När är det säkert? Föreläsningens innehåll. Kryptografi - Kryptoanalys. Kryptering - Huvudsyfte. Kryptografi - Viktiga roller
Föreläsningens innehåll Grunder Kryptografiska verktygslådan Symmetriska algoritmer MAC Envägs hashfunktioner Asymmetriska algoritmer Digitala signaturer Slumptalsgeneratorer Kryptering i sitt sammanhang
Läs merPGP håller posten hemlig
PGP håller posten hemlig Även den som har rent mjöl i påsen kan vilja dölja innehållet i sin e-post. Ett sätt är att kryptera den med PGP, Pretty Good Privacy, som har blivit en succé efter den inledande
Läs merDen mest väsentliga skillnaden mellan
JULIUSZ BRZEZINSKI Om kryptering Matematik i säkerhetens tjänst Första delen av denna artikel handlade om kodningsteorin. I den andra delen behandlas kryptering som är en mycket gammal teori med rötter
Läs mern Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?
Tidigare TDDC74 Programming: Abstraktion och modellering Föreläsning 4 Symboler, Par, Listor Representation av par, Grafisk notation för par Representation av listor mha par Typiska listhanteringsprocedurer
Läs merProtokollbeskrivning av OKI
Protokollbeskrivning av OKI Dokument: Protokollbeskrivning av OKI Sida 1 / 17 1 Syfte Det här dokumentet har som syfte att beskriva protokollet OKI. 2 Sammanfattning OKI är tänkt som en öppen standard
Läs merÖvning 6. Komprimering, kryptering, dokumentering & testning
Per Sedholm DD1320 (tilda11) 2011-10-05 1. Smittskydd Övning 6 Komprimering, kryptering, dokumentering & testning Du har fått ett mail som innehåller tips mot spridning av virus. Informationen är komprimerad
Läs merÖvning 6 - Tillämpad datalogi 2012
/home/lindahlm/activity-phd/teaching/12dd1320/exercise6/exercise6.py October 2, 20121 0 # coding : latin Övning 6 - Tillämpad datalogi 2012 Sammanfattning Idag gick vi igenom komprimering, kryptering och
Läs merTDDC74 Lab 02 Listor, sammansatta strukturer
TDDC74 Lab 02 Listor, sammansatta strukturer 1 Översikt I denna laboration kommer ni att lära er mer om: Mer komplexa rekursiva mönster, procedurer och processer. Hur man kan hantera listor och andra enklare
Läs merSäkerhet. Säker kommunikation - Nivå. Secure e-mail. Alice wants to send secret e-mail message, m, to Bob.
Säkerhet Förra gången Introduktion till säkerhet och nätverkssäkerhet Kryptografi Grunder Kryptografiska verktygslådan Symmetriska algoritmer Envägs hashfunktioner Asymmetriska algoritmer Digitala signaturer
Läs merKryptering och primtalsfaktorisering
Institutionen för Numerisk analys och datalogi Kryptering och primtalsfaktorisering Johan Håstad Nada, KTH johanh@nada.kth.se Ett Exempel N = 9324894190123791048152332319394135 4114125392348254384792348320134094
Läs merMetoder för sekretess, integritet och autenticering
Metoder för sekretess, integritet och autenticering Kryptering Att dölja (grekiska) Sekretess Algoritmen Att dölja Ordet kryptering kommer från grekiskan och betyder dölja. Rent historiskt sett har man
Läs merTDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Läs merGrundläggande krypto och kryptering
Krypto, kryptometoder och hur det hänger ihop Stockholm Crypto Party 2013 Released under Creative Commons BY-NC-SA 3.0 $\ CC BY: C Innehåll Presentation av mig 1 Presentation av mig 2 3 4 5 6 7 Vem är
Läs merTDDI16: Datastrukturer och algoritmer
. TDDI16: Datastrukturer och algoritmer Lab 2: Knäcka lösenord Höstterminen 2018 2018-06-27 1 Upplägg Första delen av instruktionen, avsnitt 2 till 7, innehåller en fullständig beskrivning av problemet
Läs merTDDC74 Programmering: Abstraktion och modellering Datortenta
TDDC74 Programmering: Abstraktion och modellering Datortenta - 2017-08-26 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.
Läs merif (n==null) { return null; } else { return new Node(n.data, copy(n.next));
Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls
Läs merTekn.dr. Göran Pulkkis Överlärare i Datateknik. Nätverksprotokoll 23.10.2008
Tekn.dr. Göran Pulkkis Överlärare i Datateknik Säker e-post Innehåll Principen för säker e-post Realisering av säker e-post Pretty Good Privacy (PGP) Secure / Multipurpose Internet Mail Extensions (S/MIME)
Läs merTDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014
TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd
Läs merDD1320 Tillämpad datalogi. Lösnings-skiss till tentamen 2010-10-18
DD1320 Tillämpad datalogi Lösnings-skiss till tentamen 2010-10-18 1. Mormors mobil 10p M O R M O R S M O B I L M O R M O R S M O B I L i 1 2 3 4 5 6 7 8 9 10 11 12 next[i] 0 1 1 0 1 1 4 0 1 3 1 1 Bakåtpilarna/next-värde
Läs merTDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Läs merMatematikens Element. Vad är matematik. Är detta matematik? Anders Fällström Institutionen för matematik och matematisk statistik Umeå universitet
Matematikens Element Höstterminen 2006 Anders Fällström Institutionen för matematik och matematisk statistik Umeå universitet Vad är matematik Är detta matematik? 3 1 Eller kanske detta? 4 Men det här
Läs merAnmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Läs merFöreläsning 9 Exempel
Föreläsning 9 Exempel Intervallhalveringsmetoden DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24 Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod DA2001 (Föreläsning 9) Datalogi
Läs merFörsöksnomineringssystem 2013
Försöksnomineringssystem 2013 Försöksnomineringssystem 2013... 1 1 Nominering... 2 1.1 Nominera sig själv... 2 1.2 Nominera någon annan... 2 1.3 Nominera som förening m.fl.... 2 2 Deltagaruppgifter...
Läs merTDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel
TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.
Läs merKryptografi: en blandning av datavetenskap, matematik och tillämpningar
Kryptografi: en blandning av datavetenskap, matematik och tillämpningar Björn von Sydow 17 november 2010 Kryptografins historia Fyra faser Kryptografins historia Fyra faser Antiken ca 1920 Papper och penna.
Läs merFöreläsning 9: Talteori
DD2458, Problemlösning och programmering under press Föreläsning 9: Talteori Datum: 2007-11-13 Skribent(er): Niklas Lindbom och Daniel Walldin Föreläsare: Per Austrin Den här föreläsningen behandlar modulär
Läs merFöreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...
Föreläsning 9 Intervallhalveringsmetoden Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion Tidskomplexitet Procedurabstraktion Representation Bra om ni läst följande avsnitt i AS: Procedures
Läs merTest av kryptobiblioteket
Test av kryptobiblioteket 1 Syfte Det här dokumentet är en testplan som beskriver hur kryptobibliotekets olika implementationer ska testas. Dokumentet beskriver inte de tester som redan ingår i utvecklingsprocessen
Läs merUtdrag från Verklighetens Kvadratrötter: Sida 1 en bok om matematikens användningsområden skriven av Marcus Näslund. Mer info: www.kvadratrot.se.
Utdrag från Verklighetens Kvadratrötter: Sida 1 KRYPTOLOGI Hur matematiken skyddar dina hemligheter Talteori, primtal, moduloräkning Bakgrund Den hemliga kod som under andra världskriget användes av Nazityskland
Läs merDatalogi, grundkurs 1
Datalogi, grundkurs 1 Fiktiv Tentamen Lösningsförslag och kommentarer 1. Lösningsförslaget nedan förutsätter ingenting om filens innehåll och är alltså mer generell än nödvändigt: alfa= ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ
Läs merDatalogi, grundkurs 1. Lösningsförslag till tentamen
Datalogi, grundkurs 1 Lösningsförslag till tentamen 10 december 2008 1. a. Man testar med typiska värden, gränsvärden och värden utanför specificerad indatavärdemängd. Helst med alla permutationer av
Läs merSymbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)
Symbolisk data (1 2 3 4) (a b c d) (jacek johan david) ((jacek "jacek@cs.lth.se") (johan "johang@cs.lth.se") (david "dat99dpe@ludat.lth.se")) ((anna 13) (per 11) (klas 9) (eva 4)) (+ (* 23 4) (/ y x))
Läs merMATEMATIK I SÄKERHETENS TJÄNST OM KODNING OCH KRYPTERING 1
1 MATEMATIK I SÄKERHETENS TJÄNST OM KODNING OCH KRYPTERING 1 Juliusz Brzezinski Säkerhet i tekniska sammanhang associeras mycket ofta med säkra hus, säkra bilar, säkra broar, säkra telefonförbindelser
Läs merSpråket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.
DAT 060: Introduktion till (funktions)programmering. Jacek Malec m. fl. www.cs.lth.se/home/jacek Malec/dat060 Idag: 1. Kursens innehåll 2. Kursens organisation 3. Programmeringsspråket Scheme 4. Introduktion
Läs merEfternamn förnamn pnr programkod
KTH Matematik Examinator: Petter Brändén Kursansvarig: Olof Sisask Σ p G/U bonus Efternamn förnamn pnr programkod Kontrollskrivning 4B till Diskret Matematik SF6, för CINTE, vt28 Inga hjälpmedel tillåtna.
Läs merDD1361 Programmeringsparadigm. Carina Edlund
DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp
Läs merSkydd för känsliga data
Skydd för känsliga data Daniel Bosk 1 Avdelningen för informations- och kommunikationssytem (IKS), Mittuniversitetet, Sundsvall. data.tex 1674 2014-03-19 14:39:35Z danbos 1 Detta verk är tillgängliggjort
Läs merLära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.
Laboration 5 Mängder Syfte Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar. Lära dig kombinera på ett lämpligt sätt de begrepp och metoder som du har
Läs merGrundläggande kryptering & chiffer
Grundläggande kryptering & chiffer Allmänt om kryptering För att inte hackers ska kunna snappa upp den information som skickas över nätet så bör man använda sig av någon form av kryptering, d.v.s. förvrängning
Läs merTDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Läs merTDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16
TDDC74 Programmering: Abstraktion och modellering Dugga 1, 2017-02-22 kl 14-16 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i
Läs merKryptering. Av: Johan Westerlund Kurs: Utveckling av webbapplicationer Termin: VT2015 Lärare: Per Sahlin
Kryptering Av: Johan Westerlund Kurs: Utveckling av webbapplicationer Termin: VT2015 Lärare: Per Sahlin Inledning Den här rapporten ska hjälpa en att få insikt och förståelse om kryptering. Vad betyder
Läs merTvå fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)
Programmönster: # Listan som sekvens, Rekursiv process Enkel genomgång av sekvens (element på toppnivån i en lista)) TDDC60 Programmering: abstraktion och modellering Föreläsning 5 Rekursiva och iterativa
Läs merTDDC74 Programmering, abstraktion och modellering. Tentamen
AID-nummer: Datum: 2011-08-17 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Onsdag 17 augusti
Läs merModularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:
Modularitet och tillstånd Stora system kräver en uppdelning. En lösning: modularitet Basera programmets struktur på den fysiska systemets struktur: En fysisk objekt en beräkningsobjekt Ett agerande en
Läs merTDDC74 - Lektionsmaterial C
TDDC74 - Lektionsmaterial C Lektioner innehåller uppgifter av varierande slag. En del är mer diskussionsartade, andra mer experimentella. Ni behöver inte lämna in eller visa upp lösningarna på dessa för
Läs merIntroduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1
Kattis Lektion 1 I kursen används onlinedomaren Kattis (från http://kattis.com) för att automatiskt rätta programmeringsproblem. För att få ett konto på Kattis anmäler du dig på Programmeringsolympiadens
Läs merIntroduktion till protokoll för nätverkssäkerhet
Tekn.dr. Göran Pulkkis Överlärare i Datateknik Introduktion till protokoll för nätverkssäkerhet Innehåll Varför behövs och hur realiseras datasäkerhet? Datasäkerhetshot Datasäkerhetsteknik Datasäkerhetsprogramvara
Läs merFöreläsning 9: Talteori
DD2458, Problemlösning och programmering under press Föreläsning 9: Talteori Datum: 2009-11-11 Skribent(er): Ting-Hey Chau, Gustav Larsson, Åke Rosén Föreläsare: Fredrik Niemelä Den här föreläsningen handlar
Läs merLösningsförslag till tentamensskrivning i SF1610 Diskret Matematik för CINTE 30 maj 2018, kl
1 Matematiska Institutionen KTH Lösningsförslag till tentamensskrivning i SF1610 Diskret Matematik för CINTE 30 maj 2018, kl 08.00 13.00. Examinator: Petter Brändén Kursansvarig: Olof Sisask Hjälpmedel:
Läs merFöreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad
1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen
Läs merFöreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Läs merIdag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.
Idag: Par och listor Symboler Hur hanterar man icke-numeriska problem? Hur hanterar man en samling av data? Hur konstruerar man sammansatta datastrukturer? Bra om du har läst följande avsnitt i AS: Pair
Läs merVåra enkla funktioner eller procedurer
Föreläsning 3 Våra enkla funktioner eller procedurer Programmönster 1. Repetition 2. Högre-ordningens procedurer/programmönster - Procedurer som argument - Procedurer som returnerade värden 3. Scope och
Läs merModul 3 Föreläsningsinnehåll
2015-02-03 2015 Jacob Lindehoff, Linnéuniversitetet 1 Modul 3 Föreläsningsinnehåll Vad är ett certifikat? Användningsområden Microsoft Certificate Services Installation Laboration Ingår i Klustringslabben
Läs merTDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12
TDDC74 Programmering: Abstraktion och modellering Datortenta - 2019-05-27, kl 08-12 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis
Läs merTildatenta Lösningsskiss
Tildatenta 2017-10-20 Lösningsskiss E-delen 1. KMP PAPPAPARTY next[i] = 0 1 0 2 1 0 4 3 1 1 2. Parent-pekare Utskriftfunktionen fungerar så här: 1. Om noden inte är None a. gör vi först ett rekursivt anrop
Läs merTDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16
TDDC74 Programmering: Abstraktion och modellering Dugga 2, 207-04-06, kl 4-6 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.
Läs merAvbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4
Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar
Läs merDatasäkerhet. Petter Ericson pettter@cs.umu.se
Datasäkerhet Petter Ericson pettter@cs.umu.se Vad vet jag? Doktorand i datavetenskap (naturliga och formella språk) Ordförande Umeå Hackerspace Sysadmin CS 07-09 (typ) Aktiv från och till i ACC m.fl. andra
Läs merProcedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet
Procedurer och villkor Rekursiva procedurer (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between
Läs merProcedurer och villkor
Procedurer och villkor (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between 3 2 5) #f DA2001
Läs merDugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
Läs merTommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2
Föreläsning 5 ADT Map/Dictionary, hashtabeller TDDI16: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 16 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 5.1 Innehåll Innehåll
Läs merTDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:
TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Skriv tydligt så att inte dina lösningar missförstås. Använd väl valda namn på parametrar och indentera din kod. Även om det i
Läs merIdag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29
Idag: Par och listor DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29 Idag: Par och listor Hur hanterar man icke-numeriska problem? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29 Idag: Par och
Läs merTDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Läs merTDDC74 Programmering, abstraktion och modellering. Tentamen
AID-nummer: Datum: 2011-06-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Fredag 10 juni
Läs merTDDC74 Programmering, abstraktion och modellering. Tentamen
AID-nummer: Datum: 2012-01-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 10 januari
Läs merTentamen i. TDDA 69 Data och programstrukturer
1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDA 69 Data och programstrukturer Torsdag den 14 januari 2009, kl 14-18 Hjälpmedel: Inga. Poänggränser: Maximalt
Läs merTDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017
FÖRELÄSNING 1 TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 Introduktion till kursen Schemespråkets grunder Enkla exempel Jalal Maleki Institutionen för datavetenskap Linköpings universitet
Läs merDatasäkerhet och integritet
OH-2 v1 Kryptering Hashing Digitala signaturer Certifikat & PKI Taxonomi Säkerhet Krypteringsalgoritmer Säkerhetstjänster Hemlig nyckel (tex. DES) Publik Message nyckel diggest (tex. RSA) (tex. MD5) Hemlighetshållande
Läs merAtt använda kryptering. Nyckelhantering och protokoll som bygger på kryptering
Att använda kryptering Nyckelhantering och protokoll som bygger på kryptering 1 Nyckelhantering Nycklar måste genereras på säkert sätt Nycklar måste distribueras på säkert sätt Ägaren av en nyckel måste
Läs merTentamen, EDAA10 Programmering i Java
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDAA10 Programmering i Java 2019 08 21, 08.00 13.00 Anvisningar: Preliminärt ger uppgifterna 25 + 15 + 5 = 45 poäng. För godkänt betyg
Läs merTDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19
TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i
Läs merDet är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.
Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg
Läs merMMA132: Laboration 2 Matriser i MATLAB
MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen
Läs merHemligheternas Matematik
En redogörelse för den matematiska aspekten av assymetrisk kryptering - hur man med matematik kan utbyta information i hemlighet trots att all kommunikation avlyssnas. Av: Hvitfeldtska gymnasiet Carl Smedstad
Läs merAvancerad SSL-programmering III
Tekn.dr. Göran Pulkkis Överlärare i Datateknik Avancerad SSL-programmering III 9.2.2012 1 Innehåll Dataformatet PKCS#7 och S/MIMEstandarden Signering av S/MIME-meddelanden och verifiering av signaturer
Läs merDatalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.
Datalogi, grundkurs 1 Övningsuppgifter i Scheme Serafim Dahl, Carina Edlund, m.fl. Hösten 2004 Datalogi, grundkurs 1, hösten 2002 1 1. Vad blir det för resultat vid beräkningen av följande Scheme-uttryck.
Läs merDagens föreläsning Programmering i Lisp Fö 5
Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper
Läs merEIT060 Datasäkerhet - Projekt 2. Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011
EIT060 Datasäkerhet - Projekt 2 Jacob Ferm, dt08jf0 Johan Paulsson, dt08jp8 Erik Söderqvist, dt08es8 Magnus Johansson, dt08mj9 26 februari 2011 Innehåll 1 Introduktion 1 2 SSL 1 2.1 Anslutningsprocessen.........................
Läs mer