Lineær algebra modulo n og kryptologi Køreplan 01005 Matematik 1 - FORÅR 2005 1 Introduktion Kryptologi er en ældgammel disciplin, som går flere tusinde år tilbage i tiden. Idag omfatter disciplinen mange forskelligartede ting, heriblandt kryptering. Kryptering er kunsten at holde data hemmelige for uvedkommende. I kryptering betragter man oftest en situation, hvor en part, kaldet Alice, vil sende en meddelelse til en anden part, kaldet Bob, således at ingen tredje part skal kunne lære indholdet af meddelelsen. I den klassiske kryptering, også kaldet secret-key kryptering, forudsættes det, at Alice og Bob deler noget information, som kun de to har kendskab til. Se Figur 1. Vi siger, at de først skal Figur 1: Klassisk kryptering. udveksle en hemmelig nøgle. Med denne nøgle kan Alice kryptere sin meddelelse og sende den til Bob, og Bob kan bruge nøglen til at dekryptere den sendte, krypterede meddelelse. Hvis Alice og Bob ikke fortæller andre, hvad (værdien af) nøglen er, og hvis ellers krypteringssystemet er sikkert, så kan Alice regne med, at det kun er Bob, der kan læse den originale meddelelse. Mat1 04/05 side 1
En ikke-krypteret meddelelse kaldes normalt en klartekst, og en krypteret meddelelse en chiffertekst. I 1976 fandt Diffie og Hellman fra USA på at dele krypteringsnøglen i to dele, en offentlig del og en hemmelig del. Se Figur 2. Bob vælger en nøgle og sender den offentlige del til Alice. Figur 2: Public-key kryptering. Nu kan Alice sende en krypteret klartekst til Bob ved hjælp af den offentlige nøgle, og Bob kan dekryptere chifferteksten ved hjælp af sin hemmelige nøgle. Hvis Bob ikke fortæller nogen, hvad den hemmelige nøgle er, så kan Alice regne med, hvis ellers krypteringssystemet er sikkert, at det kun er Bob, der kan dekryptere chifferteksten. Sådan et system kaldes et public-key (krypterings)system og det smarte er, at Alice og Bob ikke behøver at mødes eller udveksle en hemmelig nøgle, før de starter på at sende hinanden krypterede meddelelser. 2 Rygsæksproblemet I 1978 foreslog Merkle og Hellman fra USA et public-key krypteringssystem, som er baseret på det såkaldte rygsæksproblem. Forestil dig, at du har 10 ting, som har de respektive vægte a 1,a 2,a 3,...,a 10. Antag, at du skal ud at flyve, og at du har lov til at medbringe maximum S kg i bagagen. Du vil gerne have alle dine 10 ting med, men de vejer tilsammen mere end det tilladte. Nu vil du gerne pakke din rygsæk (som kan antages at være en af de 10 ting) sådan, at den vejer nøjagtigt S kg. Kan det lade sig gøre? Sagt på en anden og mere formel måde: Definition 1 Lad a 1,a 2,...,a n være en række ikke-negative heltal. Lad også S være et ikkenegativt heltal. Spørgsmålet er, om ligningen x 1 a 1 + x 2 a 2 +... + x n a n = S (1) Mat1 04/05 side 2
har en løsning, hvor alle x i er er 0 eller 1. Dette kaldes rygsæksproblemet. Bemærk, at der ikke direkte spørges efter en løsning til (1), kun om den eksisterer. Men ofte redefinerer man problemet, således at svaret enten er ingen løsning eller også en løsning (ud af muligvis flere). For store værdier er rygsæksproblemet vanskeligt at løse. Faktisk er det vist, at rygsæksproblemet er NP-komplet. Det betyder, groft sagt, at hvis man kan finde en effektiv metode til løsning af problemet, så kan man også finde effektive metoder til løsning af en række andre problemer, som synes endog meget svære at løse. Men for nogle værdier af {a i } n er det ikke vanskeligt at finde en {0,1}-løsning til (1), hvis den eksisterer. For eksempel med sekvensen a i = 2 i 1, for 1 i n, har (1) en løsning, hvis og kun hvis 0 S 2 n 1. 1. Lav et (Maple) program, som givet sekvensen {1,2,4,8,16,32} og en variabel værdi af S, returnerer en løsning til (1), hvis en sådan en eksisterer. I modsat fald returneres -1. Argumentér, hvorfor der altid er en løsning, hvis 0 S 63. Der er en endnu større klasse af sekvenser af {a i } n, for hvilke (1) er let at løse. Disse sekvenser kaldes super-øgende. Definition 2 En sekvens af ikke-negative heltal {a i } n kaldes super-øgende, hvis der for alle 1 k n gælder, at k 1 a i < a k. 2. Lav et (Maple) program som givet en super-øgende sekvens {a i } 10 og en variabel positiv værdi af S, returnerer en løsning {x i } 10 til (1), hvis den eksisterer og -1 ellers. 3 Lineær algebra modulo n Før vi kan præsentere Merkle-Hellman s system, er vi nødt til at give lidt mere baggrund. Definition 3 Et primtal p er et positivt heltal, som kun 1 og p går op i. Eksempel. 2,3,5,7,11,13, og 41 er alle primtal, mens 12, 25 og 91 ikke er. Definition 4 Lad x og y være heltal og lad n være et positivt heltal. Vi siger, at x og y er kongruente modulo n, hvis resten ved division af x med n er lig med resten ved division af y med n. Vi skriver x y (mod n). Med andre ord gælder der, at x y (mod n), hvis n går op i x y. Eksempel. 15 7 mod 4 og 4 går op i 15-7. 3. Lad n = 13, a = 12345 og b = 103579. Verficèr om a b (mod n). Lad n = 12, a = 123. Find et heltal b så a (b + 1) (mod n). Mat1 04/05 side 3
Vi skriver a mod n (hvor mod n er uden paranteser) for det tal b, hvorom der gælder, at b a (mod n) og 0 b < n. Vi siger, at b er a reduceret modulo n. Der er nogle simple regler, man kan bruge til at gøre sådanne udregninger lettere. F.eks. er udtrykket (b + c) mod n det samme som udtrykket ((b mod n) + (c mod n)) mod n, og udtrykket (bc) mod n er det samme som udtrykket ((b mod n)(c mod n)) mod n. Eksempel. 2 = 17 mod 3. 9 7 mod 8 er 63 reduceret modulo 8, altså 7. Dette kan også udregnes som flg.: (9 mod 8) 7 mod 8 som jo også er 7. 4. Lad n = 19, a = 12 og b = 10. Find ab mod n. Lad n = 17, a = 11 og b 10 (mod n). Find ab mod n. Definition 5 Den største fælles divisor af to heltal, a og b, er det største heltal, som går op i både a og b. Vi skriver sfd(a,b). Eksempel. sfd(15, 35) = 5. 5. Lav et (Maple) program som tager et positivt heltal n som input og som returnerer sfd(a,n) for alle a, hvor 0 < a < n. Definition 6 Lad n være et positivt heltal, og lad x < n være et ikke-negativt heltal. Vi siger, at y er den multiplikative invers til x modulo n, hvis 1 = (xy) mod n. Vi bruger også notationen x 1 mod n for y. Faktum 1 Lad n være et positivt heltal, og lad x < n være et heltal. Så har x en multiplikativ invers modulo n, hvis og kun hvis sfd(x,n) = 1. Eksempel. 15 er den multiplikative inverse til 7 mod 26, da 7 15 = 105 1 mod 26. 2 har ikke nogen multiplikativ invers modulo 26, da der for alle heltal z gælder, at 2z 1 mod 26. 6. Lav et (Maple) program, som tager et heltal n som input, og som for ethvert heltal a mellem 0 og n gør følgende: hvis a har en multiplikativ invers, udskrives a og den inverse, ellers udskrives intet. Udskriv resultatet af programmet for n = 23 og n = 24. 4 Merkle-Hellman s public-key krypteringssystem Vi er nu klar til at vise Merkle-Hellman kryptosystemet, som består af procedurerne Start, Kryptering og Dekryptering. Start Lad {a i } n være en super-øgende sekvens, og lad c være et positivt heltal mindre end p, hvor p er et primtal, så p > n a i. For 1 i n definér b i = ca i mod p. Mat1 04/05 side 4
{b i } n er den offentlige nøgle og {a i} n,c, og p udgør den hemmelige nøgle. Kryptering Lad x være en klartekst bestående af n bits. Krypteringen af x findes nu ved y = n x i b i. Dekryptering Lad y være en chiffertekst. Klarteksten findes på følgende måde: 1. Beregn z = c 1 y mod p. Bemærk, at z = c 1 n x i b i mod p = n x i c 1 b i mod p = n x i a i mod p 2. Da {a i } n er en super-øgende sekvens, kan man finde {x i} n jvf. ovenfor. Idéen i systemet er, at den offentlige nøgle {b i } n ikke er en super-øgende sekvens, så en angriber kan ikke (umiddelbart) dekryptere en chiffertekst. 7. Lav et (Maple) program, som implementerer Merkle-Hellman s system, dvs. lav procedurerne Start, Kryptering og Dekryptering. 8. Betragt Merkle-Hellman s system med n = 9 og lad (a 1,...,a 9 ) = (2,5,9,21,45,103,215,450,946). Find den offentlige nøgle når p = 2003 og c = 1289. Antag, at chifferteksten 6665 modtages. Find klarteksten (og vis alle mellemregninger). 4.1 Kryptoanalyse af Merkle-Hellman s system Bemærk først at Merkle-Hellman s knapsack system altid kan knækkes hvis man har tilstrækkelig beregningskraft. Klarteksten består af n bits, som derfor har 2 n mulige værdier. En angriber kan simpelthen kryptere alle 2 n mulige klartekster og checke hvilken af disse, der resulterer i værdien af en given chiffertekst. Dette angreb kaldes udtømmende søgning. Derfor må værdien af n vælges, sådan at ingen angriber vil kunne udføre disse 2 n operationer i overskuelig tid. Faktisk er der et angreb, som kan finde en klartekst endnu hurtigere ved brug af en tabel. Dette kaldes et meet-in-the-middle angreb. Inddata: heltal b 1,b 2,...,b n og s > 0. En tabel T. Mat1 04/05 side 5
Uddata: x i {0,1} for i = 1,...,n, således at t b ix i = s, hvis en sådan eksisterer. Metode: 1. Lad t = n/2. 2. Lad T /0. 3. For alle (2 t ) værdier af (x 1,x 2,...,x t ) tilføj til tabellen T elementet (( t 4. Sortér tabellen T på første komponent. 5. For alle (2 n t ) værdier af (x t+1,x t+2,...,x n ): b i x i ),x 1,x 2,...,x t ). (a) Beregn u = s n i=t+1 b ix i ) og check (v.h.a. en binær søgning) om u er første komponent i en indgang i tabellen T. Hvis det er tilfældet, udskriv da de pågældende x i elementer fra indgangen i T og de pågældende x i elementer brugt i udregningen af u. Bemærk, at denne metode finder altid alle løsninger, der eksisterer til det pågældende problem. Men metoden behøver kun ca. n2 n/2 operationer, hvilket for selv moderate værdier af n er langt mindre tiden for en udtømmende søgning. Til gengæld kræver metoden en tabel med ca. 2 n/2 indgange med hver n komponenter. Men kørselstiden er stadig eksponentiel i n, og hvis n vælges til at være mindst 200, er dette angreb praktisk umuligt. 9. Betragt Merkle-Hellman s system med p = 1009, n = 8 og lad den offentlige nøgle være (b 1,...,b 8 ) = (258,645,152,691,760,170,492,537). Antag, at chifferteksten 1287 modtages. Find klarteksten ved et meet-in-the-middle angreb. En endnu hurtigere måde at knække systemet på er baseret på integer programming af Lenstra. Lad d = c 1 mod p. Denne metode finder d og p, således at d/p d /p, og så {a i }n er en super-øgende sekvens, hvor a i = b id mod p. Denne super-øgende sekvens kan da bruges til at dekryptere. 10. Lad p = 31 og c = 21. Da er d = c 1 = 3 mod 31. Med n = 4 og (a 1,a 2,a 3,a 4 ) = (2,5,8,17) fås (b 1,b 2,b 3,b 4 ) = (11,12,13,16). Dekryptér chifferteksten 29. Lad nu p = 41 og d = 4. Vis, at også med disse parametre fås en super-øgende liste fra (b 1,b 2,b 3,b 4 ). Brug denne til at dekryptere chifferteksten 29. Den mest effektive måde til at knække Merkle-Hellman s system er med LLL-algoritmen. Betragt en række lineært uafhængige vektorer b 1,...b n i R n (dvs. bestående af reelle tal). Mængden L af alle heltalslineære kombinationer af vektorerne b 1,...b n kaldes en lattice, dvs. L er mængden {z 1 b 1 + z 2 b 2 +... + z n b n z 1,...,z n Z n }, hvor Z er mængden af de hele tal. (Bemærk, at når z i erne er reelle tal, taler vi om et vektorrum). Vi siger, at b 1,...b n er en basis for L. For at forstå LLL-algortimen, definerer vi først længden af en vektor, y = (y 1,...,y n ) som flg.: y = y 2 1 + y2 2 +... + y2 n. Mat1 04/05 side 6
LLL-algoritmen tager som input en række lineært uafhængige vektorer b 1,...b n i R n, en basis for L, og returnerer en række lineært uafhængige vektorer b 1,...b n i R n af reduceret længde (iht. definitionen foroven), en såkaldt reduceret basis. Angrebet på Merkle-Hellman s system er som flg.: Inddata: heltal b 1,b 2,...,b n og s > 0. Uddata: x i {0,1} for i = 1,...,n, således at n b ix i = s, hvis en sådan eksisterer. Metode: 1. Lad v være et positivt heltal, f.eks. vælg v := n. 2. Konstruér en (n + 1)-dimensionel lattice, L, fra rækkerne i matricen A: 1 0 0 0 vb 1 0 1 0 0 vb 2 0 0 1 0 vb 3 A =... 0..... 0. 0 0 0 1 vb n 1 1 1 1 2 2 2 2 vs 3. Find en reduceret basis B for L ved LLL-algoritmen. 4. For enhver vektor y = (y 1,...,y n+1 ) i B gør flg.: (a) Hvis y n+1 = 0 og hvis y i { 1 2, 1 2 } for i = 1,...,n gør flg.: i. For i = 1,...,n sæt x i := y i + 1 2. ii. Hvis n x ib i = s returnér (x 1,...,x n ). iii. For i = 1,...,n sæt x i := 1 2 y i. iv. Hvis n x ib i = s returnér (x 1,...,x n ). Bemærk, at hvis (x 1,...,x n ) er en løsning til problemet, så er y = ( n x ib i ) b n+1 i L (dvs. den kan skrives som en (heltals)linearkombination af vektorerne i basen for L). Og for denne y gælder, at y i { 1 2, 1 2 } for i = 1,...,n og y n+1 = 0. Længden af en sådan vektor er relativ lille, og hvis b i erne er forholdsvis store, er der en god chance for, at LLL-algoritmen finder en basis, hvor y er en af vektorerne. Vi bemærker, at selvom det ikke kan bevises, at LLL-algoritmen altid kan knække systemet, som beskrevet ovenfor, så har eksperimenter vist, at den gør det næsten altid i praksis. Mat1 04/05 side 7
Eksempel. I Maple kan klarteksten fra Eksempel 10 findes ved flg. kommando, 1 hvor v antages at have værdien 2:!"$#!%&!%'$(! )+* )!* )!* )!* #, -/. som giver flg. uddata: 0 )!*1 )!*3245)!*624 )!*7 5 82 )!*9 )!* )!* )!*7 5 : 5 0 # 5 : 2;' # Fra første vektor finder man løsningen (0,0,1,1). 11. (Frivillig) Betragt Merkle-Hellman s system med p = 16139, n = 8 og lad den offentlige nøgle være (b 1,...,b 8 ) = (258,645,1161,2709,5805,13287,11596,9633). Antag, at chifferteksten 28983 modtages. Find klarteksten ved et LLL-angreb. 1 I nogle versioner af Maple benyttes kommandoen LLL i stedet for lattice Mat1 04/05 side 8