Att dela en hemlighet Olle Alvin, NA3d 19 maj 014 Gymnasiearbete Spyken Handledare: Roger Bengtsson
Abstract This report will investigate different methods for sharing secret information, for example bank account numbers, with a number of people. The most important condition is that no person can figure out the right numbers by themself. We will handle a couple of methods suggested by Johan Håstad in a task he wrote for diploma projects in upper secondary school. The report contains an explanation of each method as well as examples on how to use them. Firstly we will look upon how to make an easy system for sharing codes. Secondly we will show how to use simultaneous equations to make an algorithm with some specific qualitys. Finaly we will investigate Håstads suggestion for a general method to share a secret between n people.the report will also discuss some advantages and disadvantages with each method. Relevant theory within modular arithmetic and interpolation are included. Abstract Rapporten kommer att undersöka olika metoder för att dela hemlig information, t.ex. kontonummer, mellan ett antal personer. Det viktigaste villkoret är att ingen kan räkna ut de rätta siffrorna själv. Vi kommer hantera några förslag på metoder skrivna av Johan Håstad i en uppgift han skrev för gymnasiearbeten. Rapporten innehåller en förklaring av varje metod samt exempel på hur de kan användas. Först kommer vi titta vi på hur man gör enklare system för delning av koder. Sedan kommer vi visa hur man kan använda ekvationssystem för att skapa en algoritm med några specifika egenskaper. Sist kommer vi undersöka Håstads förslag på en generell metod för att dela en hemlighet mellan n personer. Rapporten kommer också diskutera några fördelar och nackdelar med varje metod. Relevant teori inom modulär aritmetik och interpolation är inkluderad.
Innehåll 1 Inledning 1 Teori 1 3 Enklare metoder för delning av koder 3 4 Håstads förslag 4 4.1 Notation............................... 4 4. Mer om inverser........................... 4 4.3 Den nya delningsalgoritmen.................... 5 4.4 Exempel 1.............................. 6 4.5 En säkrare metod.......................... 6 4.6 Varför modulo?........................... 7 5 Håstads generalisering 8 5.1 Generell metod........................... 8 5. Lagrange interpolationsformel................... 8 5.3 Exempel.............................. 10 5.4 n 1 personer räcker inte..................... 11 6 Acknowledgement 1
1 Inledning Den här rapporten hanterar en uppgift för projektarbete i matematik konstruerad av Johan Håstad []. Syftet är att diskutera olika sätt att dela en hemlig kod mellan ett flertal personer utan att en ensam person känner till den. Anta att du har ett hemligt kontonummer som ingen annan än du känner till. Du vill inte ge numret till någon men vill att dina tre barn ska kunna komma åt dina pengar om du dör. För att åstadkomma detta bör vi finna en metod för att dessa tre barn tillsammans ska kunna få fatt i numret. Det är dock viktigt att inget av barnen ensamt kan få hela numret. Vi kan börja med en enkel metod som exempel. Anta att kontonumret är 1345. Vi börjar med att välja två slumpmässiga 5-siffriga tal, 3546 och 78410. Vi vill ge barnen ett nummer var så att om de adderar första siffran i sina tre nummer och stryker tiotalsiffran får de första siffran i kontonumret. Sedan utförs samma metod för andra siffran osv. Det tredje numret måste då bli 19573. Nu har vi alltså delat numret utan att en enstaka person vet något om det utom att det har fem siffror. Det finns såklart både för- och nackdelar med denna metod. Vi kommer redogöra för dessa och diskutera ett flertal andra metoder och alternativ. Dessa kommer bli något mer komplicerade. Teori kring moduloräkning är hämtad från boken Matematik 5000 [1] och en websida med titeln High School Mathematics Extensions/Primes/Modular Arithmetic [3] Teori En del av de system vi kommer använda som kräver moduloräkning. Vi kommer främst att räkna modulo p där p är ett primtal. Vi väljer just primtal för att alla fyra räknesätten, addition, subtraktion, multiplikation och division ska fungera. Man kan nämligen inte räkna med division på samma sätt om p inte är ett primtal. Detta återkommer vi till senare. Att räkna i modulo p innebär att vi endast räknar med talen 0, 1,, 3,..., p 1. Vi räknar alltså bara med resten av ett tal dividerat med p. När två tal ger samma rest i division med p säger vi att talen är kongruenta modulo p. Detta tecknas med tre streck t.ex. 5 (mod 3) 16 5 (mod 11) 3 6 (mod 17) Det sista exemplet utläses "3 är kongruent med 6 modulo 17". Det finns också ett antal räknelagar för hur man kan hantera addition, subtraktion och multiplikation. 1
1. a + b (mod n) a (mod n) + b (mod n) t.ex. 7 + 5 1 + 0 (mod 3). a b (mod n) (a (mod n)) (b (mod n)) t.ex. 7 5 1 (mod 3) 3. a m (mod n) (a (mod n)) m t.ex. 11 3 3 8 (mod 3) Division fungerar annorlunda i det här systemet. Vi tänker oss följande ekvation: 7x 8 (mod 11) För att lösa ekvationen vill vi hitta ett tal a som om man multiplicerar det med 7 ger produkten 1 modulo 11. Detta tal kallas inversen till 7 och kan skrivas 7 1 7 8 56 1 (mod 11) Inversen till 7 är alltså 8 modulo 11. Nu multiplicerar vi båda leden med 8 8 7x 8 8 (mod 11) x 64 9 (mod 11) Om den här metoden ska fungera för alla tal i modulo p måste p vara ett primtal. Vi provar räkna modulo 4 och har ekvationen: x 3 (mod 4) För att lösa ekvationen måste vi hitta inversen till modulo 4. Vi provar några tal: 0 0 (mod 4) 1 (mod 4) 4 0 (mod 4) 3 6 (mod 4) Vi ser att det inte verkar finnas någon invers till modulo 4. Detta beror på att är en faktor i 4. Om vi räknar modulo n där n inte är ett primtal kommer alla tal som har en gemensam faktor med n sakna invers modulo n. Det kan visas med
följande bevis: Anta att vi har ett tal a som har en gemensam faktor p med n. Då kan vi skriva såhär: a = b p n = c p Vi antar att det finns en invers till a nämligen x. Det ger sambandet: a x 1 (mod n) a x = 1 + m n Både a och n innehåller en faktor p vilket medför att ax och mn innehåller en faktor p. Vänsterledet är delbart med p och då måste högerledet vara delbart med p för att likheten ska gälla. Eftersom p inte delar 1 kan vi konstatera att likheten inte gäller. a x 1 + m n (mod n) Det finns alltså ingen invers till a modulo n om n inte är ett primtal. 3 Enklare metoder för delning av koder Det första exemplet som angavs i inledningen tas också upp av Håstad i uppgiften. Håstad tar upp två fördelar med systemet. 1. De tre barnen kan tillsammans få fram kontonumret.. Två av barnen kan inte få ut någon information om numret utom att det har fem siffror. Påstående kan enkelt bevisas. Vi kallar barnens siffror för a, b och c och kontonumrets siffra för s. Anta nu att två av barnen vill få ut koden. De får ekvationen: a + b + c s (mod 10) a och b är kända, vi använder exemplet från inledningen. 3 + 7 + c s (mod 10) Man vet att c är ett ensiffrigt tal dvs mellan 0 och 9. Detta ger att s också kan vara vilket tal som helst mellan 0 och 9. De vet alltså inte mer nu än vad de visste innan. En nackdel med systemet är att om ett av barnen dör eller glömmer sin kod så är den förlorad för alltid. 3
Det finns såklart många enkla metoder för att dela koder. Om vi nu vill att två av de tre barnen ska kunna hitta koden kan vi använda andra metoder. Vi antar att numret är 1345. Vi ger det första barnet 1_45, det andra 13 5 och det tredje 345. Vilka två som helst har nu tillsammans tillgång till hela numret. Detta system är fördelaktigt då koden finns bevarad även om en skulle glömma sin kod. Dock kommer två av barnen kunna utesluta det tredje vilket kan va en nackdel. I just detta exempel har det första barnet siffrorna 1_45 vilket gör att han kan få tio nummer där ett är rätt. I verkligheten är kontonummer mycket längre så detta problem skulle få mindre betydelse. 4 Håstads förslag 4.1 Notation Vi börjar använda lite ny notation. Vi kallar det första barnets första siffra för s (1) 1 det andra barnets första siffra för s () 1 och det tredje barnets första siffra för s (3) 1. Första barnets andra siffra blir då s (1) osv. Vi kommer att teckna första siffran i kontonumret s 1 andra siffran s osv. För att kunna använda Håstads metod måste vi först fördjupa oss lite i division modulo p. 4. Mer om inverser Om p är ett primtal har alla tal en invers modulo p. Denna invers är unik. Antag att vi vill hitta inversen till talet b modulo p. Vi kallar inversen för a. Vi betraktar följande tal: b, b, 3b,..., (p 1)b, pb (mod p) Denna talserie kommer innehålla talen 0 till p 1. Vi kan visa detta genom att visa att alla tal i serien är unika. Då måste alla tal från 0 till p 1 finnas med. Antag att det finns två tal som ger samma produkt i multiplikation med b nämligen x och y. Detta skulle ge sambamdet: Vi kan skriva om uttrycket såhär: x b y b (mod 11) x b y b 0 (mod p) b (x y) 0 (mod p) 4
Vi vet att p delar b (x y). Eftersom p inte delar b så p måste dela (x y) vilket ger: x y 0 (mod p) x y (mod p) Av beviset följer att i den tidigare nämnda talserien b, b, 3b,..., (p 1)b, pb (mod p) finns det p st unika tal. Talet 1 måste då vara ett av dessa unika tal. Det tal a som multiplicerat med b ger produkten 1 är alltså också unikt. 4.3 Den nya delningsalgoritmen Håstads nya metod går ut på att skapa ett ekvationssystem. Vi väljer slumpvis ett tal b 1, 0 b 1 10 och våra tre ekvationer blir: s (1) s () s (3) 1 s 1 + b 1 (mod 11) 1 s 1 + b 1 (mod 11) 1 s 1 + 3b 1 (mod 11) Vi använder b 1 och s 1 för att räkna ut varsin siffra till barnen med de tre ekvationerna. Sedan väljer vi ett nytt tal b. Vi använder b och s för att räkna ut tre nya tal till barnen. Detta gör vi nu för varje siffra i vårt kontonummer. Vi kan t.ex. dela ut numret 31784 på detta sätt. Vi väljer b 1 =, b = 5, b 3 = 0, b 4 = 7 och b 5 = 5. Då får det tre barnen följande siffror: (5, 6, 7, 4, 9) (7, 0, 7, 0, 3) (9, 5, 7, 7, 8) Denna metod har följande egenskaper: 1. Två syskon kan tillsammans få reda på koden.. Inget syskon kan få reda på något om numret förutom antalet siffror. Skulle två av syskonen försöka skulle de få ett ekvationssystem med två ekvationer och två obekanta. Skulle dock ett syskon själv ge sig på det skulle han/hon få en ekvation med två obekanta dvs i detta fallet 11 olika lösningar då vi räknar modulo 11. 5
4.4 Exempel 1 Vi visar ett exempel på hur det skulle kunna se ut. Anta att två av barnen har varsin ekvation nämligen: s (1) s (3) 1 s 1 + b 1 (mod 11) 1 s 1 + 3b 1 (mod 11) De har också sina egna tal. Anta att s (1) 1 = 4 och s (3) 1 = 7. Vi får följande ekvationssystem: 4 s 1 + b 1 (mod 11) 7 s 1 + 3b 1 (mod 11) Vi använder oss nu av substitutionsmetoden. s 1 4 b 1 (mod 11) 7 4 b 1 + 3b 1 (mod 11) 7 4 + b 1 (mod 11) b 1 3 (mod 11) Inversen till dvs. 1 i modulo 11 är 6. 6 b 1 3 6 (mod 11) b 1 18 7 (mod 11) s 1 4 7 3 8 (mod 11) Första siffran i kontonumret skulle då vara 8. 4.5 En säkrare metod Att räkna i modulo 11 ger följande effekt. Eftersom vi vet att s 1 är ett ensiffrigt tal kan vi utesluta ett värde på b 1. Vi gör ett exempel. Anta att vi är första barnet. Vi vet att vår ekvation är: s (1) 1 s 1 + b 1 (mod 11) Vår första siffra är 5. Vi får då ekvationen: 5 s 1 + b 1 (mod 11) 6
Vi vet att s 1 10. Vi sätter därför in s 1 = 10 i ekvationen: 5 10 + b 1 (mod 11) 5 6 b 1 (mod 11) Vi kan nu vara säkra på att b 1 6. Det är fortfarande omöjligt at bestämma kontonumret då det fortfarande finns tio olika möjliga tal för talet b 1. Eftersom kontnummersiffran endast kan vara tio olika tal kommer vi alltid få tio möjliga värden på b 1 Om vi räknar modulo 17 kommer vi kunna utesluta sju värden på b 1. Om vi räknar modulo p kan vi utesluta p 10 värden på b 1. Metoden är förstås fortfarande ganska säker då det fortfarande finns tio lösningar till varje ekvation för varje siffra i kontonumret. Vill man ha ett ännu säkrare system kan man räkna med ett högt värde på p och skriva om sitt kontonummer i talbasen p. Vi tittar på ett exempel. Vi använder oss av kontonumret 1345 och skriver om i talbas tretton. Det ger det nya numret 5808. Den första ekvationen är samma: s (1) 1 s 1 + b 1 (mod 13) I det här fallet kan vi inte utesluta några värden på b 1 eftersom s 1 kan vara 0, 1,,......, 9, a, b, c. Dvs 13 olika tal. Detta gör varje ekvation har fler lösningar. En nackdel som följer är att nu har kontonumret endast fyra siffror. Det råkar bli så då vi valde ett ganska lågt tal som kontonummer. Räknar man istället om t.ex. talet 98765 till talbas 13 får det fem siffror. Vårt exempel råkar få fyra siffror och får därför färre möjliga kombinationer. I talbas tio har numret 10 5 = 100000 kombinationer medans i talbas 13 har det 13 4 = 8561 kombinationer. Det är nästan bara en fjärdedel så många. Vi kan enkelt åtgärda detta genom att lägga till siffran noll på numret. Det ger oss numret 05808. Numret har nu fem positioner och antalet kombinationer är nu återställt. 4.6 Varför modulo? Det kan verka onödigt att räkna modulo p. Varför kan man inte räkna utan modulo? Vi studerar ett exempel där vi inte räknar modulo p. Anta att vår ekvation är: s () 1 = s 1 + b 1 Vi får sedan veta att s () 1 = 6. Vi kan konstatera att eftersom vänsterledet är jämnt måste högerledet vara jämnt. Då b 1 är jämnt måste också s 1 vara en jämn siffra. 7
Då är 0,, 4, 6, 8 möjliga tal. Vi kan utesluta s 1 = 8 eftersom b 1 är mellan 0 och 9. Vi har nu endast 0,, 4, 6 som möjliga tal på s 1. Om vi väljer att tillåta negativa tal på b 1 kan vi behålla s 1 = 8 som ett möjligt värde men vi förlorar fortfarande de udda talen. 5 Håstads generalisering 5.1 Generell metod Håstad föreslår en generalisering av de givna algoritmerna. Vi vill att n personer tillsammans ska få reda på koden. Vi skapar ett polynom av grad n 1. Vi låter s vara en siffra i det hemliga numret. Q(x) = s + b 1 x + b x + b 3 x 3 +... + b n 1 x n 1 Talen b 1, b, b 3,..., b n 1 är slumpvis valda och under villkoret att 0 b i 10. Sedan ger vi de personer som vi vill ska kunna få reda på koden en punkt var. Första personen får till exempel (1, Q(1)), andra (, Q()) osv. tills n personer eller fler alla fått varsin unik punkt. Nu kan n personer rekonstruera polynomet och ta reda på den hemliga siffran med hjälp av Lagrange interpolationsformel som vi återkommer till i nästa avsnitt. 5. Lagrange interpolationsformel För att bygga ett polynom av grad n 1 utifrån n givna punkter kan vi använda Lagrange interpolationsformel. Metoden går ut på att konstruera ett polynom bit för bit. Vi visar ett exempel. Anta att vi har fått punkterna (1, 4), (, 9) och (3, 16). Vi vill nu konstruera ett polynom av andra graden som går genom dessa tre punkter. Vi konstruerar från en punkt i taget. Först vill vi bygga ett utryck som ger y = 4 om x = 1. Då vill vi att utrycket ska bli 0 vid de andra två x-värdena. Vi börjar med att skriva såhär. (x )(x 3) 4 Nu vill vi att uttrycket ska ge 4 om x = 1. Då kan vi konstruera uttrycket såhär: (x )(x 3) (1 )(1 3) 4 8
Om vi sätter in x = 1 i utrycket får vi nu: (1 )(1 3) (1 )(1 3) 4 1 4 = 4 Vi vill nu kontruera nästa del på samma sätt. Vi har nu punkten (, 9) Så nu vill vi skapa ett uttryck som ger 0 då x = 1 eller x = 3 men ger 9 då x =. Med samma metod som förut får vi: (x 1)(x 3) ( 1)( 3) 9 Utrycket för nästa koordinat blir: Vi adderar dessa tre utryck: f(x) = (x )(x 3) (1 )(1 3) (x 1)(x ) (3 1)(3 ) 16 4 + (x 1)(x 3) ( 1)( 3) 9 + (x 1)(x ) (3 1)(3 ) 16 Nu har vi skapat ett polynom som går genom de tre angivna koordinaterna. Vi kan nu förenkla polynomet. f(x) = (x )(x 3) 4 + (x 1)(x 3) ( 1) 9 + (x 1)(x ) 16 f(x) = x 5x + 6 4 + x 4x + 3 ( 1) 9 + x 3x + 16 f(x) = (x 10x + 1) + ( 9x + 36x 7) + (8x 4x + 16) f(x) = x + x + 1 Man kan enkelt se att denna metod kan tillämpas på polynom av grad n 1 om man har n punkter. Givet punkterna (a 1, b 1 ), (a, b ),..., (a n, b n ) kan man teckna polynomet såhär: f(x) = (x a )(x a 3 )...(x a n ) (a 1 a )(a 1 a 3 )...(a 1 a n ) b 1+...+ (x a 1)(x a 3 )...(x a n ) (a a 1 )(a a 3 )...(a a n ) b +...... + (x a 1)(x a )...(x a n 1 ) (a n a 1 )(a n a )...(a n a n 1 ) b n 9
Så vi vet nu att det går att finna ett polynom av grad n 1 om vi har n olika koordinater. Polynomet är också entydigt bestämt. Det går enkelt att bevisa på följande sätt: Anta att vi har två polynom av grad n 1 nämligen f(x) och g(x) som går igenom samma n st olika punkter. Vi kan då ställa upp följande likhet: r(x) = f(x) g(x) Eftersom f(x) och g(x) är av grad n 1 medför det att r(x) är av grad n 1 eller lägre. Vi vet också att f(x) och r(x) har n stycken punkter gemensamt. Vi kallar dom (x i, y i ). Detta ger att: r(x i ) = f(x i ) g(x i ) = y i y i = 0 Då detta är sant för n stycken värden på x innebär det att polynomet r(x) har n stycken nollställen. Då måste r(x) vara av graden n eller så måste r(x) = 0. r(x) kan inte va av grad n utan maximalt ha grad (n 1). Det enda sättet för r(x) att existera är om r(x) = 0. Det medför att: 5.3 Exempel 0 = f(x) g(x) f(x) = g(x) För förtydliga hur metoden ska användas visar vi ett exempel. Vi antar att vi har det hemliga numret 1345. Vi kommer då behöva skapa ett polynom för varje siffra men vi gör bara den första eftersom de andra konstrueras på samma sätt. Vi vill att tre personer tillsammans ska kunna få reda på koden. Angivet är att s 1 = 1. Vi skapar då ett andragradspolynom. Q(x) = 1 + b 1 x + b x Vi väljer slumpvis b 1 = 4 och b 1 = 3. Nu har vi följande polynom: Q(x) = 1 + 4x + 3x Första barnet får: Q(1) 8 (mod 11) 10
Andra får: Tredje får: Q() 10 (mod 11) Q(3) 7 (mod 11) Nu kan de tillsammans återskapa polynomet med hjälp av Lagrange interpolationsformel. Det kommer se ut såhär: (x )(x 3) (x 1)(x 3) (x 1)(x ) Q(x) 8+ 10+ 7 (mod 11) (1 )(1 3) ( 1)( 3) (3 1)(3 ) Q(x) (x )(x 3) 8+ Q(x) x 5x + 6 (x 1)(x 3) 10+ ( 1) 8 + x 4x + 3 ( 1) (x 1)(x ) 7 (mod 11) 10 + x 3x + 7 (mod 11) Q(x) (x 5x+6) 8 1 +(x 4x+3) 10 ( 1) 1 +(x 3x+) 7 1 (mod 11) Nu sätter vi in inverserna. 1 = 6 och ( 1) 1 = 1. Q(x) (x 5x+6) 8 6+(x 4x+3) 10 ( 1)+(x 3x+) 7 6 (mod 11) Q(x) (x 5x + 6) 48 + (x 4x + 3) ( 10) + (x 3x + ) 4 (mod 11) Q(x) (x 5x + 6) 4 + (x 4x + 3) 1 + (x 3x + ) 9 (mod 11) Q(x) 4x 0x + 4 + x 4x + 3 + 9x 7x + 18 (mod 11) Den hemliga siffran var alltså 1. 5.4 n 1 personer räcker inte Q(x) 14x 51x + 45 (mod 11) Q(x) 3x + 4x + 1 (mod 11) Det krävs n punkter för att rekonstruera ett polynom av grad n 1. Vi tittar på ett exempel. Anta att vi har ett antal koordinater t.ex. (a 1, b 1 ), (a, b ) och (a 3, b 3 ). Vi antar då att polynomet vi ska hitta är av grad 3. Vi kan då inte använda Lagrange interpolationsformel utan att ha ytterligare en punkt. Det enda vi känner till om polynomet är koordinaterna vi har samt att vi vet att Q(0) = s där s är den hemliga siffran. Vi kan då tänka oss att vi koordinaten (0, s). Om vi sätter in ett värde på s kommer vi kunna räkna ut ett polynom. Vi kan sedan prova ett annat värde på s och hitta ett annat polynom. Det finns alltså ett polynom för varje värde på s. Det medför att om man saknar en fjärde punkt kan man inte säga något om värdet på s. 11
6 Acknowledgement Under arbetets gång har jag haft mycket stöd av min handledare Roger Bengtsson och jag vill tacka honom för trevliga möten, goda diskussioner och all hjälp med teorin som berör arbetet. Jag vill också rikta ett tack till Robert Nilsson för en trevlig diskussion och värdefulla tips. Referenser [1] Alfredsson, Lena. Bråting, Kajsa. Erixon, Patrik. Heikne, Hans. (013) Matematik 5000. Stockholm. Natur & Kultur [] Håstad, Johan. Att dela en hemlighet. http://www.math.kth.se/ laksov/notes/spes.pdf Hämtad: 11:38 014-0-11 [3] High School Mathematics Extensions/Primes/Modular Arithmetic. http://en.wikibooks.org/wiki/high_school_mathematics_extensions/primes/modular_arithmetic Hämtad: 1:30 014-01- 1