Kryptering 1
Symmetriska kryptosystem
Vi deklarerar en klartext till de exempel nedan som illusterar olika funktioner.
Affint krypto
Om t.ex. nyckeln är får vi nedanstående kryptogram.
Vi kan givetvis direkt ange en klartext och använda ett annat alfabet.
Om , så representerar funktionen även förskjutningskrypton.
Samma funktion används även vid dekryptering, fast med dekrypteringsnyckeln som indata. Om är krypteringsnyckeln, så är
Vi kan nu dekryptera kryptogrammet.
Vigenèrekrypto
Om t.ex. nyckelordet är hemligt så får vi följande resultat.
För att bestämma motsvarande dekrypteringsnyckel kan vi först konvertera nyckelordet till en lista av heltal, därefter bestämma motsvarande additiva invers modulo till respektive heltal och sedan konvertera tillbaka till en textsträng.
Kryptering-s och dekrypteringsfunktionen är densamma. Det som skiljer är att vi använder olika nycklar.
Autokey
Detta krypto är en variant av Vigenèrkrypto. Nyckeln till detta krypto ska vara en bokstav, som används för att kryptera första bokstave i klartexten. Därefter används föregående bokstav i klartexten som nyckel.
Med parametern metod styr man om man vill kryptera eller dekryptera. Förvalt värde är 'kryptera'.
Vernamchiffer
Detta kryptosystem är egentligen inget annat än en variant av Vigenèrekryptot, fast med lika lång nyckel som klartexten. För att slumpmässigt välja en nyckel kan vi med pseudoslumptalsgenerator välja bokstäver ur aktuellt alfabet.
Genom att upperpa denna procedur så många gånger som antalet bokstäver i klartexten får vi en lista av slumpmässigt valda bokstäver. Denna lista sätter vi samma ntill en textsträng med funktionen join.
Vi kan nu kryptera klartexten med Vernamchiffret.
Dekryptering är enkelt eftersom krypteringsfunktionen bestämmer dekrypteringsnyckeln.
Vi kan koda klartexten binärt, t.ex. med åtta bitars ASCII. Först konverterar vi varje tecken i textsträngen till ett heltal i basen 10.
Därefter bestämmer vi den binära representationen av varje heltal med exakt åtta bitar vardera.
Härnäst plattar vi ut listan.
För att använda Vernamchiffer måste vi också konvertera listan till en textsträng, som sedan funktionen internt konverterar tillbaka till en lista av bitar. Med andra ord som att gå över ån efter vatten. Eftersom Vernamchiffret är så enkelt kan vi kryptera på egen hand. Vi behöver en nyckel av rätt längd.
Vid kryptering adderar vi klartexten i position med nyckeln i samma position.
Alternativ lösning 1: Vektoraddition över .
Alternativ lösning 2: Funktionalprogrammering.
Kryptogrammet som en textsträng:
Dekryptering fås här genom att addera nyckeln en gång till.
För att koda tillbaka till läsbar text måste vi först dela upp listan i dellistor med åtta bitar vardera.
Varje dellista ska vi sedan konverterar till en heltal i baseb 10.
Till sist kan vi koda varje heltal till motsvarande bokstav och sätta samman dem till en textsträng.
Enigma
I kryptering.sage är Enigma I, d.v.s. den version som tyska armén och flygvapnet använde under andra världskriget. Konfigurationen av kopplingstavlan specificeras som en lista av par . Det finns fem rotorer att välja mellan, vilka betecknas I, II, III, IV och V. Vilka tre rotorer och i vilken ordning deklareras med en lista. Startpositionen för de tre rotorerna anges med en textsträng av längd. Här används versaler för klartext, kryptogram och nycklar.
Exempel på hur krypteringsnyckeln till Enigma kan se ut:
Kryptering av en klartext:
Med samma nyckel dekrypterar man ett kryptogram.
Hillkrypto
Låt $$ M
$$ vara en krypteringsnyckel, d.v.s. blocklängden är . Vi deklarerar matrisen i Sage över mängden så att alla beräkningar sker modulo per automatik.
Låt oss kontrollera att denna matris är lämpligt som krypteringsnyckel.
Förvald krypteringsfunktion i Hillkrypto är . Funktionen lägger automatiskt till utfyllnadstecken om så behövs och som standard används x.
Alternativt kan vi använda krypteringsfunktionen . Vi får förstås inte samma resultat som ovan.
Dekrypteringsnyckeln är matrisinversen av till .
Samma funktion används vid dekryptering.
Notera att all aritmetik sker i . Om vi gör om matrisen så att Sage uppfattar den som en matris med element ur och därefter bestämmer dess invers, så får vi ett helt annat resultat.
Data Encryption Standard
För att kunna kryptera en klartext med DES måste vi först konvertera det till en bitsträng som vi dela upp i block om 64 bitar.
Antal block:
Visa det första blocket:
Vi behöver bestämma en nyckel.
För att kryptera flera block använder vi ECB_DES som krypterar varje block med samma nyckel oberoende av varandra, d.v.s. Electronic Codebook. Funktionen genererar de rundnycklar som behövs. Internt anropas funktionen DES.
Vi skriver ut kryptogrammet som bitsträngar.
Vi kan också konvertera varje block till hexadecimal representation.
Det går också bra att konverterar kryptogrammet till vanlig text. Fast det är mer intressant vid dekryptering.
+xö¿ú¤¸êýEYR?íزÃ&Ø<=ó"ÓÑÇÉ.3P_îº]ãÒì!Ìh}b'ÛUFáõ¹Ì8±Áp+¦5®XSöæMåcÑnl
Dekryptering fås med samma funktionen.