Labb 2 Kryptering - Måste kryptera lösenord som ska lagras i databaser En krypteringsmetod är “subset sum” Det finns en bruteforce-lösning given i labben (tar låååång tid!) Er uppgift: Snabba upp bruteforce-lösningen Subset sum - Krypterar ett lösenord som är N bitar långt Behövs en tabell T med N stycken slumpmässiga heltal/nycklar Varje heltal/nyckel ska vara N bitar långt Subset sum Lösenord: 00101 T0 10110 0 T1 01101 0 T2 00101 1 T3 10001 0 T4 01011 1 Krypterat: T2 + T4 = 00101 + 01011 = 10000 Labbens alfabet - Ett lösenord är en sekvens av tecken från alfabetet Innehåller 32 tecken: a, b, c, …, y, z, 0, 1, 2, 3, 4, 5 Representeras decimalt som: - a = 0, b=1, …, z = 25, 0 = 26, …, 5 = 31 Labbens alfabet - Ett lösenord är en sekvens av tecken från alfabetet Innehåller 32 tecken: a, b, c, …, y, z, 0, 1, 2, 3, 4, 5 Representeras decimalt som: - - a = 0, b=1, …, z = 25, 0 = 26, …, 5 = 31 Representeras med 5 binära bitar! - a = 00000, b = 00001, …, 4 = 11110, 5 = 11111 Labbens alfabet - Ett lösenord är en sekvens av tecken från alfabetet Innehåller 32 tecken: a, b, c, …, y, z, 0, 1, 2, 3, 4, 5 Representeras decimalt som: - - a = 0, b=1, …, z = 25, 0 = 26, …, 5 = 31 Representeras med 5 binära bitar! - bas 32 { a, …, 5 } bas 10 { 0, …, 9 } a = 00000, b = 00001, …, 4 = 11110, 5 = 11111 bas 2 {0, 1} Bokstaven “m” - I labbens alfabet (bas 32): m Decimalt: 12 (13e bokstaven, a har värdet 0) Binärt: 01100 Bokstaven “m” - I labbens alfabet (bas 32): m Decimalt: 12 (13e bokstaven, a har värdet 0) Binärt: 01100 I labben så kan en nyckel exempelvis se ut såhär: fdam2a Kom ihåg att fdam2a är ett vanligt tal, så det går att summera nycklar! bas 32: m+b= n decimalt: 12 + 1 = 13 Kryptering av lösenordet “uab” Bas32 u a b (20 0 1) Binärt Decimalt 10100 00000 00001 20481 Kryptering av lösenordet “uab” Bas32 Binärt Decimalt u a b (20 0 1) 10100 00000 00001 20481 T0 t i s (19 8 18) 10011 01000 10010 19730 T1 i s 2 ( 8 18 27) 01000 10010 11011 8795 T2 f u n ( 5 20 13) 00101 10100 01101 5773 … … … … ... o f c (14 5 2) 01110 00101 00010 14498 T14 Kryptering av lösenordet “uab” => “hcb” Bas32 Binärt Decimalt u a b (20 0 1) 10100 00000 00001 20481 T0 t i s (19 8 18) 10011 01000 10010 19730 T1 i s 2 ( 8 18 27) 01000 10010 11011 8795 T2 f u n ( 5 20 13) 00101 10100 01101 5773 … … … … ... o f c (14 5 2) 01110 00101 00010 14498 T14 Bruteforce - I labben finns redan en bruteforcelösning Den testar alla möjliga lösenord i ordning - - aaaaa, aaaab, aaaac, …, 55554, 55555 Detta tar 2^N tid, N antalet bitar - N = 5*C, C antalet tecken i lösenordet Om C=10 (ex. “not2hardpw”) så är N=50 Det finns då 2^50 (över 1 biljard) lösenord att testa Bruteforce - I labben finns redan en bruteforcelösning Den testar alla möjliga lösenord i ordning - - aaaaa, aaaab, aaaac, …, 55554, 55555 Detta tar 2^N tid, N antalet bitar - N = 5*C, C antalet tecken i lösenordet Om C=10 (ex. “not2hardpw”) så är N=50 Det finns då 2^50 (över 1 biljard) lösenord att testa Er uppgift: Lös detta på under en timma Bruteforce - I labben finns redan en bruteforcelösning Den testar alla möjliga lösenord i ordning - - aaaaa, aaaab, aaaac, …, 55554, 55555 Detta tar 2^N tid, N antalet bitar - N = 5*C, C antalet tecken i lösenordet Om C=10 (ex. “not2hardpw”) så är N=50 Det finns då 2^50 (över 1 biljard) lösenord att testa Er uppgift: Lös detta på under en timma Lösningen: Använd symboltabell! Vad är en symboltabell? - Mappar en symbol till information I det här fallet är symbolen ett heltal och infon är färg, form och area Symbol (identifierare) Färg Form Area 0 “blå” “cirkel” 42 1 “röd” “fyrkant” 12 2 “grön” “triangel” 20 Er lösning - Beräkna alla möjliga summor för en delmängd av tabellen T Lägg in dessa summor i en symboltabell Använd symboltabellen för att kolla alla de möjligheterna på en uppslagning Kodfiler i labben - encrypt.cc - krypterar ett lösenord brute.cc - bruteforcelösningen för dekryptering Textfiler - är tabellen T för olika lösenordslängder C key.h - Hanterar nycklar och implementerar subset sum - En nyckel är en sekvens av tecken ifrån alfabetet a, b, …, 4, 5 Exempelvis lösenordet “uab” eller dess krypterade värde “hcb” Kom ihåg att nyckeln “uab” har värdet 20481, så det går att summera Tyvärr inget mer om lösningen Kom ihåg att börjar med labben medan ni fortfarande minns något av det jag sagt