Kryptering 1
Asymmetriska kryptosystem
Kodning och indelning i block
Låt oss studera ett exempel där vi kodar en klartext enligt reglerna i kursen.
Efter att vi kodat varje bokstav till motsvarande heltal adderar vi till varje heltal.
För att sätta samman heltalen i listan till block av säg längd , där varje heltal bettraktas som ett tvåsiffrigt heltal skriver vi följande.
Eftersom textsträngen stormvarning består av bokstäver behövs inga utfyllnadstecken. Med istället blocklängden läggs det autormatiskt till tre stycken x i slutet av sista blocket.
Vi kan med parametern t välja ett annat utfyllnadstecken.
Med funktionen block_till_heltal splittrar vi blocken tillbaka till en lista av heltal.
Vid konvertering från heltal till motsvarande bokstav subtraherar vi först .
Vi kan även koda enligt ASCII.
Eftersom varje tecken kodas med ett element ur så ska vi betrakta varje heltal i listan som ett tresiffrigt heltal. Med ett tredje argument till text_till_block styr vi antal siffror i varje heltal. Med blocklängden får vi följande.
Med t = 88 använder vi X som utfyllnadstecken. Att konverterar från block till tecken då vi utgår ASCII sker på liknande sätt som ovan.
Först splittrar vi blocken till en lista av heltal. Eftersom blocken består av respektive siffror och varje varje heltal ska betraktas som ett tresiffrigt tal, så är blocklängen .
Med funktionen chr konverterar man ett heltal till motsvarande tecken enligt ASCII.
Sammsättning av textsträngar fås med join.
Här har troligtvis ett Z använts som utfyllnadstecken.
Ett mer realistiskt exempel
En textsträng över flera rader omges av tre tumtecken. Prefixet u markerar att textsrängen ska kodas enligt Unicode. Man kan även konvertera varje tecken till åtta bitar, d.v.s. texten bildar en följd av ettor och nollor. Delar vi upp dem i block om t.ex. 1024 bitar motsvarar det heltal i mängden .
Dessa heltal kan sedan krypteras t.ex. med RSA (se nästa avsnitt). Efter dekryptering konverterar man enkelt tillbaka till klartext:
RSA
Låt oss skapa nycklarna till ett RSA-krypto.
Vi söker ett heltal sådant att .
Den publika nyckeln :
Den privata nyckeln :
Heltalet tillåter block av längd då vi kodar varje tecken enligt ASCII.
Kryptering ger följande kryptogram.
Dekryptering fås med samma funktion, fast med den privata nyckeln som indata.
Notera att vi inte kan koda kryptoggrammet tillbaka till tecken enligt ASCII eftersom vi erhållit flera tresiffriga heltal som är större än . Se föregående avsnitt om hur man konvertera tillbaka till en läsbar klartext.
Cayley-Pursers algoritm
UNDER KONSTRUKTION
ElGamals kryptosystem baserat på primitva rötter
Vi börjar med att konstruera nycklarna. Först väljer vi ett primtal.
Här betecknar Zp mängden .
Vi behöver en primitiv rot modulo .
Med denna kan vi genererar en mer intressant primitiv rot genom att välja ett heltal som är relativt prima med och därfter bestämma .
Den multiplikaitva ordningen av en primitiv rot modulo är .
Det är nu dags att välja den privata nyckeln och bestämma .
Vi använder härnäst den publika nyckeln för att kryptera samma klartext som i avsnittet om RSA.
Mer lättläst utskrft:
Vi kan välja egna slumptal, t.ex. med Lehmers slumptalsgenerator.
Vid dekryptering ska vi använda den privata nyckeln istället.
Därefter är det bara att konvertera blocken till en textsträng.
Eftersom klartexten innehåller bokstaven å använder vi unichr istället för chr.