Kryptologi

author
19 minutes, 10 seconds Read
Krypteringsgrejer? Låter kul.

Enhetens mål

Att förstå, ganska bra, vad kryptografi och kryptoanalys handlar om, och framför allt att veta vad den kan och inte kan garantera.

Bakgrund

Alice och Bob kan vara människor, men också klienter och servrar, peer-datorer, datalager, nätverksroutrar osv. Mallory kan förfalska en av deltagarna, lägga till, ändra eller ta bort faktiska meddelanden, kapa anslutningen, göra en överbelastning, injicera skadlig kod osv.

Mål:

  • Konfidentialitet: Det bör kosta Eve mer att återskapa $m$ än vad $m$ är värt.
  • Autentisering: Bob bör kunna verifiera att det var Alice som skickade $m$.
  • Integritet: Bob bör kunna verifiera att $m$ inte har manipulerats.
  • Icke-avslöjande: Bob bör kunna verifiera att $m$ inte har manipulerats: Alice bör inte kunna förneka att hon skickat $m$.

De bästa kryptosystemen förutsätter att Eve och Mallory känner till $E$, $D$, $c$ och, om $k_e \neq k_d$, även $k_e$. De flesta kryptosystem förlitar sig inte på att deras algoritmer hålls hemliga, eftersom:

  • Om din hemliga algoritm äventyras (någon kan lämna din grupp) måste du ändra den, och det är mycket svårare än att bara ändra en nyckel!
  • Offentliga algoritmer kan utsättas för tusentals experter som letar efter brister, så du har en viss grad av förtroende för de som klarar av granskningen.

Fortsatt läsning: Security Through Obscurity, Kerchoffs princip och denna diskussion.

Studien av kryptologi omfattar utformning av olika chiffer, kryptoanalysmetoder (attacker), nyckelutbyte, nyckelautentisering, kryptografisk hashning, digital signering och sociala frågor (juridiska, politiska etc.). Se Wikipedias sida om ämnen inom kryptografi.

Gör inte det här på egen hand i riktiga tillämpningar

Visst går det bra att leka hemma, men försök ALDRIG att använda din egen kryptografi i riktiga tillämpningar. Lämna det till proffsen. Om du själv blir proffs, då, mmmmm, okej.
Detta har varit ett viktigt meddelande till allmänheten.

Definitioner

Ord att känna till:

Kryptografi Konsten och vetenskapen att göra chiffer. Kryptoanalys Konsten och vetenskapen att bryta chiffer, dvs. utvinning av $m$ givet $c$, $E$, $D$ och eventuellt $k_e$. Kryptologi Studiet av kryptografi och kryptoanalys.

Övning: Ta reda på vad steganografi är. Hur skiljer den sig från kryptografi?

Kryptosystem En särskild uppsättning algoritmer och protokoll för kryptering, dekryptering och nyckelgenerering. Exempel: Cramer-Shoup-kryptosystem, Rabin-kryptosystem, Benaloh-kryptosystem, RSA-kryptosystem. Kryptografiskt system Alla system som använder kryptografi. Chiffer En algoritm som används i ett kryptosystem.

Övning: Hur skiljer sig en ”kod” från ett ”chiffer”? Är koder säkrare än chiffer? Varför används de inte lika ofta?

Förvirring Egenskapen att förhållandet mellan klartext, chiffertext och nyckel är så komplicerat att det är oanvändbart för kryptoanalytikern. Diffusion Egenskapen att statistiska mönster i klartexten sprids i stor utsträckning i chiffertexten.

Tidslinjer

Om du gillar historia….

  • Wikipedias artikel om kryptografins historia
  • Wikipedias tidslinje
  • Carl Ellison’s tidslinje

Slag av chiffer

Här är några användbara kategorier av chiffer. Observera att ett visst chiffer kan tillhöra mer än en av dessa kategorier.

  • Klassiskt: Ett chiffer som är tillräckligt enkelt för att kunna utföras för hand, vanligtvis teckenbaserat. Kallas även manuell.
  • Modern: I stort sett alla chiffer som inte är klassiska.
  • Substitution: Varje tecken i klartexten ersätts med ett eller flera tecken för att skapa chiffertexten.
  • Transposition:
  • Monoalfabetisk: Tecken i klartexten omorganiseras för att bilda chiffertexten: En substitutionssiffra där ett tecken i klartexten alltid ersätts med samma tecken.
  • Polyalfabetisk: En substitutionssiffra som i huvudsak använder sig av flera monoalfabetiska ersättningsmappningar.
  • Homofonisk: En substitution där ett tecken kan mappas till ett av en uppsättning tecken.
  • Polygrafisk: En ersättning av block av tecken för block av tecken.
  • Periodisk: Ett polyalfabetiskt chiffer där ersättningsschemat upprepas.
  • Icke-periodisk: Självförklarande om man förstår periodisk.
  • Block:
  • Ström: Kryptering sker inte per tecken utan per block av tecken: En chiffer som arbetar med en dataström av okänd längd, vanligtvis med återkoppling.
  • Hemlig nyckel: En chiffer där $k_e$ och $k_d$ är desamma eller trivialt härledbara från varandra; kräver att parterna träffas i hemlighet för att utbyta de nycklar de kommer att använda. Även kallad symmetrisk.
  • Offentlig nyckel: Ett system där allas krypteringsnyckel är offentligt känd men där deras dekrypteringsnyckel hålls hemlig. Kallas även asymmetrisk.

Secret Key Cryptography

Secret key (a.k.a. symmetric key) ciphers är mycket snabbare än public key ciphers, men nyckelhantering kan vara ett stort problem.

  • Om $n$ personer i en grupp behöver kommunicera behöver de $\frac{n(n-1)}{2}$ nycklar.
  • Nycklarna måste distribueras säkert (i hemlighet).
  • Nyckerna måste förvaras säkert.
  • Nyckerna bör bytas ut ofta, vilket återkopplar till fördelningshuvudet.

OBS

I de teckenbaserade exemplen nedan utgår vi (utan förlust av allmängiltighet) från ett alfabet med 26 symboler (A..Z).

Caesar Cipher

En helt patetisk och osäker chiffer enligt modern standard. Krypteringsnyckeln $k_e$ är ett litet heltal och $k_d = k_e$. För att kryptera adderas $k_e$ till varje tecken i klartext; för att dekryptera subtraheras det.

Exempel: För k=5 blir ATTACKATDAWN FYYFHPFYIFBS

Trivialt att knäcka: det är bara att gissa $k_e$.

Monoalfabetisk substitution

Istället för att helt enkelt lägga till en fast förskjutning till varje tecken kan du förberäkna en substitutionstabell genom att generera en slumpmässig permutation av ditt alfabet. Till exempel:

 ABCDEFGHIJKLMNOPQRSTUVWXYZ MQHPSVJYCURFTBILAKWNGZDOEX

Nu är ATTACKATDAWN nu MNNMHRMNPMDB.

Det går inte att knäcka detta genom att gissa nyckeln (det finns $n!$ möjliga nycklar), men med hjälp av frekvensanalys kan man knäcka vilket som helst monoalfabetiskt substitutionschiffer, förutsatt att meddelandet är tillräckligt långt.

För tekniker vars nyckel är en permutation är ett sätt att göra nyckeln lättare att komma ihåg att välja en fras, lägga ut dess unika bokstäver och sedan fylla i saknade bokstäver i tur och ordning. Till exempel ger PREMATURE OPTIMIZATION IS THE ROOT OF ALL EVIL den här substitutionskartläggningen:

 PREMATUOIZNSHFLVBCDGJKQWXY

Homofonisk substitution

Varje bokstav i klartext motsvarar en eller flera symboler i chiffertexten. Antalet mål bör stå i proportion till dess frekvens (för att undvika frekvensanalys). Exempel:

 A 12 15 36 50 56 70 81 95 B 51 84 C 16 44 65 D 04 06 48 82 E 01 17 19 34 47 49 58 60 67 77 85 90 F 13 27 G 09 28 H 26 42 53 59 68 71 I 35 73 76 86 91 96 J 18 K 07 L 29 40 54 87 M 25 30 N 21 61 62 69 74 94 O 02 03 08 10 57 75 93 P 41 98 Q 97 R 32 38 43 45 80 83 S 14 22 39 79 89 99 T 00 20 23 33 46 52 72 78 88 U 11 64 66 V 37 W 63 92 X 31 Y 24 55 Z 05

För att kryptera, välj slumpmässigt bland möjligheterna. Exempel: En möjlig kryptering av ATTACKATDAWN är

 56 78 20 95 65 07 12 72 06 50 92 61

Simple Vigenère

Det chiffer som är känt som simple shift Vigenère cipher uppfanns inte alls av Vigenère… det tycks ha beskrivits första gången av Giovan Battista Bellaso. Nyckeln är en sträng som man lägger till i klartexten med modulär addition, som i det här exemplet (A=0, B=1, C=2, …, Z=25):

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUAR Ciphertext: JUKVKSIPPYVSOLBFILZMONOEYHGANSBWOOYDNHVDXCRUPBIOI

För att generera chiffertext för hand kan man använda ett kodhjul eller en tabula recta.

Detta system är inte säkert eftersom nyckeln upprepas. Om nyckellängden kan bestämmas kan kryptoanalytikern göra flera frekvensanalyser (en för varje skiftvärde i nyckeln). Metoder för att bestämma nyckellängden är Kaisiski-metoden och Friedman-testet.

För binära data (dvs. en sekvens av bitar) är modulär addition bas-2 bara ett enkelt xor. Exempel:

 Plaintext: 0110000101010000111101001010101010010000001111101 Key: 0000011100000111000001110000011100000111000001110 Ciphertext: 0110011001010111111100111010110110010111001110011

Autokey Vigenère

Vigenère skapade faktiskt ett autokey chiffer som är starkare eftersom nyckeln aldrig upprepas. Istället består ”nyckeln” av nyckelfrasen följt av klartexten, som här:

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKTAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRD Ciphertext: JUKVKVOZCOHMDSFUMZCTNHZVQPFOJWCOOTWYVVBHUBYHYSWFU

Denna använde klartexten som en del av nyckeln. Du kan också använda chiffertexten. Se hur?

Modern Autokey Ciphers

Du kan fortfarande knäcka autokey Vigenère ciphers med hjälp av lingvistisk analys, eftersom nyckeln innehåller text och därmed sannolikt innehåller högfrekventa bokstäver. Moderna auto-key chiffer genererar skiftvärdena med en slumptalsgenerator. Nyckeln ger generatorn frön.

Övning: Implementera ett autokey chiffer i ett valfritt programmeringsspråk.

One Time Pad

Om nyckeln:

  • är lika lång som eller längre än meddelandet som kodas
  • är verkligen slumpmässigt genererad
  • används en gång och endast en gång

Då har du ett bevisligen säkert chiffer som kallas one time pad. Din faktiska algoritm kan använda polyalfabetisk substitution eller till och med enkel xoring av meddelandet med nyckeln, så länge som du uppfyller de tre kriterierna ovan.

Entidslösen kan aldrig knäckas. Det är ett perfekt krypteringsschema, i alla fall ur ett matematiskt perspektiv.

Övning:

Playfair

Detta är ett exempel på ett polygrafiskt substitutionschiffer som ersätter teckenpar. Nyckeln är en permutation av {A..I,K..Z}, till exempel:

 Z C B M L G D A Q E T U O K H F S X V N P I Y R W

För att kryptera skriver du ut klartexten (utan mellanslag eller skiljetecken) och sätter in ett X mellan dubbla bokstäver och i slutet om det är nödvändigt för att texten ska få en jämn längd.För varje bokstavspar:

  • Låt $(a,b)$ vara raden och kolumnen för det första tecknet och $(c,d)$ vara raden och kolumnen för det andra tecknet.
  • Om $a \neq c$ och $b \neq d$ så återge $(a,d)(b,c)$.
  • Om $a = c$ återges $(a,(b+1) \bmod 5)(c,(d+1) \bmod 5)$.
  • Om $b = d$ återges $((a+1) \bmod 5,b)((c+1) \bmod 5,d)$.
Exempel: THEN ATTACK FROM THE EASTTH EN AT XT AC KF RO MT HE XE AS TXUT HW GO FO DB TV YK ZK NH NA DX OFUTHWGOFODBTVYKZKNHNADXOF

Dekryptering följer de omvända reglerna. Playfair chiffret är ganska osäkert.

Four-square

Krypterar digrafer som Playfair, men något starkare eftersom det tillåter dubbla bokstäver och inte ger omvända digrafer i chiffertext för omvända digrafer i klartext. Exempel

 a b c d e G I V E M f g h i k L B R T Y l m n o p O D A H C q r s t u F K N P Q v w x y z S U W X Z P R E M A a b c d e T U O I Z f g h i k N S H F L l m n o p V B C D G q r s t u K Q W X Y v w x y z
Exempel: THEN ATTACK FROM THE EASTTH EN AT TA CK FR OM TH EE AS TXNI VL EV FM MO BV DF NI MA VV NX

Okej, så något starkare än Playfair, men vad gör det? Datorer kan knäcka dessa saker på några sekunder, eller kanske minuter (om de får tillräckligt med chiffertext).

Simple Block Transposition

Det enklaste transpositionschiffret bryter upp meddelandet i block av storlek n och förvränger sedan varje block enligt en permutation av $(1..n)$.

Exempel: För nyckeln $(4,1,6,3,2,5)$ blir meddelandet GETTHATHEALTHINSPECTOR TGATEHATTEHLSHENIPRCOT.

Columnnar Transposition

Skriv ut meddelandet rad för rad i ett rutnät och läs sedan upp det i kolumner. Helt osäkert. Nyckeln är bara antalet rader. Gissa det.

Rail Fence

Rail fence är inte bättre än det förra, bara roligare. Nyckeln är antalet rälsar på vilka du skriver klartexten uppåt och nedåt och genererar chiffertexten genom att läsa en räls i taget.

Exempel: För att koda "fill out and file a WS2475 form" på 4 skenor:

 f t l 4 m i u a i e 2 7 r l o n f a s 5 o l d w f

du läser sedan ut chiffertexten "ftl4miuaie27rlonfas5oldwf". Detta är trivialt att knäcka. Gissa bara $k$.

Kombinera substitution och transposition

Transposition ensam är mycket svag; substitution är svag; att kombinera dem är bättre. Man kan blanda många av de klassiska substitutionschifferna med olika transpositioner, eller använda några speciella kombinationschiffer som bifid. Dessutom använder de flesta berömda rotormaskiner och moderna chiffer denna kombination; i själva verket tillämpar de dessa transformationer många gånger.

Bifid

Denna ersätter bokstäver med deras koordinater i ett rutnät och gör en kolonnmässig transposition på koordinaterna. Exempel:

 Z C B M L G D A Q E T U O K H F S X V N P I Y R W

Skriv koordinaterna (rad, kolumn) under varje bokstav i klartexten (t.ex, ”A” ligger på rad 1, kolumn 2; ”T” ligger på rad 2, kolumn 0 osv.):

 ATTACKATDAWN 122102121143 200213201244

Läs sedan upp i rader, gruppera två och två och slå upp bokstäverna i chiffertexten:

 122102121143200213201244 A U B A D R T B Q T A W

Trifid

Likt Bifid, men på en kub. Exempel:

 Z C B M L F V N P G D A Q E X I R W T U O K H S Y . J

För att kryptera skriver du först koordinaterna:

 ATTACKATDAWN 000001000022 122102121110 200210201221
 000001000022122102121110200210201221 Z C Z O S F H Q V I N .

Enigma

Enigma var den berömda tyska rotormaskinen från andra världskriget (egentligen en maskinfamilj).De flesta versionerna implementerade ett polyalfabetiskt substitutionskrypteringsnyckel med en period på 16900 plus ett pluggbräde för scrambling (transposition). Nyckeln bestod av rotorernas ordning, startpositionen för varje roter, ringinställningarna och inställningarna för pluggbrädan (cirka 1,6 × 1020 möjligheter). Det fanns en ny nyckel varje dag (mer eller mindre) som publicerades i förväg i kodböcker.

De allierade kunde knäcka den tack vare några svagheter i dess konstruktion…

  • Ingen bokstav skulle kryptera till sig själv
  • Självgående ömsesidighet innebar att det fanns färre möjligheter till uppställning av förvrängare

…men ännu viktigare, många svagheter i sättet som den användes på…

  • Det var väldigt lätt att hitta kryssningar. De flesta meddelanden började med en väderrapport.
  • Från början dök meddelandetangenterna upp två gånger i rad.

…och genom att erhålla kodböcker från tillfångatagna fartyg.

Du kan läsa om hur Enigma knäcktes från NSA,och frånWikipedia.

Moderna kryptografiska metoder

Nu när vi har Shannons informationsteori, mycket kraftfulla datorer och århundraden av teori och praktik bakom oss kan de flesta moderna tekniker:

  • arbetar med bitsträngar, inte teckensträngar
  • är noga med att helt maskera mönster och redundanser i klartexten
  • använder slumpmässiga nycklar (som också kan återanvändas)
  • försäkrar sig om att mycket små förändringar i klartexten påverkar en stor del av chiffertexten (och vice versa). Detta kallas för AvalancheEffect.

Det är dessutom bra om chiffret är:

  • effektivt
  • felttolerant

De flesta chiffer är antingen blockchiffer eller strömchiffer. Blockchiffer kräver utfyllnad och kan fungera i olika lägen (se Schniers bok eller Wikipediaartikeln.)

  • ECB – Electronic Codebook
  • CBC – Cipher Block Chaining
  • CFB – Cipher Feedback
  • OFB – Output Feedback
  • CTR – Räknare
  • BC – Block Chaining
  • PCBC – Propagating Cipher Block Chaining
  • CBCC – Cipher Block Chaining with Checksum

DES

på Wikipedia

IDEA

på Wikipedia

RC4

på Wikipedia

RC6

på Wikipedia

Blowfish

på Wikipedia

Twofish

på Wikipedia

AES

på Wikipedia

AES är den nya standarden, som ersätter DES. Den vann tävlingen (2001), där den lades fram under namnet Rijndael, och slog utRC6, Serpent, MARS och Twofish.

Nyckelutbyte

Diffie och Hellman (vinnare av Turing Award 2015) och deras vänMerkle visade 1976 att det var möjligt för två personer att utbyta en hemlig nyckel utan att behöva träffas i hemlighet:

  • Alice väljer ett primtal $n$ och skickar detta klart och tydligt till Bob
  • Alice väljer ett primtalveroot mod $n$ (hur man hittar det), kallat $g$, och skickar detta klart och tydligt till Bob
  • Alice väljer ett hemligt heltal $a$, och skickar $g^a \bmod n$ i klartext till Bob
  • Bob väljer ett hemligt heltal $b$ och skickar $g^b \bmod n$ i klartext till Alice
  • Alice beräknar ($g^b \bmod n)^a \bmod n$och Bob beräknar ($g^a \bmod n)^b \bmod n$. Detta är nyckeln!(Det är $g^{ab} \bmod n$)

Detta är förmodligen säkert, förutsatt att $n$ är mycket stort och $\frac{n-1}{2}$ också är primtal, för även om Eve känner till $g$, $n$, $g^a \bmod n$ och $g^b \bmod n$, så finns det inget känt effektivt sätt att få fram $a$ eller $b$ från dessa.Det är det diskreta logaritmproblemet, minns du?

Exempel med små $n$:

  • Alice väljer $n=208799$ och $g=13$ och skickar dessa till Bob
  • Alice väljer $a=152335$ och Bob väljer $b=98113$
  • Alice skickar $13^{152335}$ till Bob. \bmod 208799 = 73033$
  • Bob skickar till Alice $13^{98133} \bmod 208799 = 147540$
  • Alice beräknar 147540$^{152335} \bmod 208799 = 8435$
  • Bob beräknar $73033^{98133} \bmod 208799 = 8435$
  • Den hemliga nyckeln är 8435$.

Gör inte detta med små värden på $n$.

Inallmänt, om du inte får någon form av certifiering, försök inte att säkra system i den verkliga världen på egen hand. Men naturligtvis kan du lära dig algoritmerna och öva på att koda för tillfället.

Public Key Cryptography

Public key ciphers löser nyckelhanteringsmardrömmen med hemliga nyckelciphers, på bekostnad av snabbhet. I en grupp på $n$ personer behöver man bara $n$offentliga nycklar och $n$ privata nycklar.

RSA-kryptosystem

Diffie-Hellman gör ingen kryptering utan utbyter bara en nyckel.RSA kan kryptera och dekryptera. Så här går det till. Varje person

  • Genererar två stora primtal, $p$ och $q$.
  • Väljer ett värde $e$ som är relativt primtal i förhållande till $(p-1)(q-1)$.
  • Offentliggör sin offentliga nyckel $(N,e)$ där $N = pq$.
  • Beräknar $d$ = modulärt omvänt värde av $e$ i förhållande till $(p-1)(q-1)$ och håller det hemligt.
  • Det är möjligt att avlägsna $p$ och $q$.

Kontrollera nu detta:

  • För att Alice ska kunna skicka ett meddelande $m$ till Bob skickar hon $c = m^e \bmod N$.
  • Bob avkodar detta lätt eftersom $m = c^d \bmod N$.
Övning: Undersök matematiken bakom RSA. Varför fungerar det i detalj? I ditt svar kommer du att använda dig av de teorem som ligger till grund för Eulers totientfunktion; se till att du visar hur den reduceras till $(p-1)(q-1)$ när $pq$ är primtal, bland annat.

Övning: Diffie-Hellman (DH) anses ibland vara en del av kryptografi med offentliga nycklar, även om den handlar om nyckelutbyte och inte i sig själv är en krypteringsalgoritm. Varför anser då vissa människor att det är en offentlig nyckel? (Svaret på detta kräver lite forskning.)

Ett trivialt exempel:

VARNING!
Detta exempel är endast till för att illustrera. Implementera aldrig din egen kryptoalgoritm. Se också till att du förstår hur hemskt kryptografi med offentliga nycklar är med så små nycklar. Riktiga nycklar bör ha tusentals bitar.

Låt oss använda en nyckel på 16 bitar (Gör inte detta IRL). Generera två slumpmässiga 8-bitars primtal:

$p = 163\\q = 173$

Generera ett 16-bitars primtal för den kodade exponenten:

$e = 64013$

Nu:

$n = pq = 28199 \\d = \mathsf{modInverse}(e, (p-1)(q-1)) = 6797$

Låt oss koda strängen ¿Dónde está ud.?. Här är den i UTF-8:

c2 bf 44 c3 b3 6e 64 65 20 65 73 74 c3 a1 20 75 64 2e 3f

I decimal:

194 191 68 195 179 110 100 101 32 101 115 116 195 161 32 117 100 46 63

Nu tillämpar vi kodningsfunktionen på var och en::

$194^{64013} \bmod 28199 = 15626$
$191^{64013} \bmod 28199 = 19945$
$68^{64013} \bmod 28199 = 27982$
$\vdots$
$63^{64013} \bmod 28199 = 18384$

Den krypterade texten är:

15626 19445 27982 22746 2679 7739 16824 23107 9054 23107 8378 16412 22746 5566 9054 881 16824 17864 18384

Att avkoda:

$15626^{6797} \bmod 28199 = 194$
$19445^{6797} \bmod 28199 = 191$
$27982^{6797} \bmod 28199 = 68$
$\vdots$
$16824^{6797} \bmod 28199 = 63$

Vi får tillbaka det ursprungliga meddelandet!

Förresten
Då symmetrisk kryptering är så mycket snabbare kan man först generera en hemlig nyckel och överföra den över en linje som är säkrad med hjälp av kryptering med offentlig nyckel. Nu kan all framtida kommunikation använda den hemliga nyckeln.

Kryptografisk hashning

En hash, även kallad fingeravtryck, kontrollsumma, meddelandeutdrag, är ett bitmönster (vanligen cirka 160 bitar) som genereras från ett meddelande av en kryptografisk hashfunktion. För att hashen ska vara säker, eller kryptografisk, måste det vara beräkningsmässigt omöjligt att

  • finna ett meddelande som hashar till ett givet värde (onewayness)
  • finna två meddelanden som hashar till samma värde (kollisionsresistens)

Matematiskt sett genererar en kryptografisk hashfunktion $H$ en hash från ett meddelande, $H(m) = c$, så att $m$ inte kan bestämmas effektivt från $c$, och man kan inte effektivt hitta $m_1 \neq m_2$ så att $H(m_1) = H(m_2)$,

Oftast kommer ändringen av bara en enda bit i meddelandet att få digestet att se helt och hållet annorlunda ut.

$ cat willThis is my will.I leave 1000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum willc18feb890752c9e680c99d1e909fd761 will$ sed "s/1/9/g" will > Will$ cat WillThis is my will.I leave 9000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum Will85570bc2d0458b1f98f484261dee7d4d Will

En säker hash ger ett sätt att avgöra om ett meddelande har manipulerats.

Se Steve Friedls Illustrated Guide to Cryptpgraphic Hashes.

Message Authentication Codes

Dessa liknar kryptografiska hashs förutom att de använder en hemlig nyckel, medan hashs bara använder själva meddelandet.

$MAC(m, k) = c$

För mer information:

  • MACs vs. Hashes på StackOverflow
  • Digitala signaturer på Wikpedia
  • MACs på Wikipedia

Digitala signaturer

Hur kan Bob vara säker på att meddelandet kom från Alice och inte från någon annan?Genom att Alice signerar det; det är så. I praktiken signerar man vanligtvis en hash, inte hela meddelandet.

RSA för digitala signaturer

För att Alice ska kunna skicka ett meddelande till Bob,

  • Alice krypterar m med sin privata nyckel
  • Alice krypterar med Bobs offentliga nyckel
  • Bob dekrypterar med sin privata nyckel
  • Bob dekrypterar med Alices offentliga nyckel

$m = A(B'(B(A'(m)))$

DSA

På Wikipedia

Krypteringsanalys

Det här är ett stort ämne som inte kommer att behandlas här. I stället finns här en förteckning över tekniker.

  • Frekvensanalys
  • Känd klartextattack
  • Känd chiffertextattack
  • Välja klartextattack
  • Välja klartextattack
  • Välja. nyckelattack
  • Linjär kryptoanalys
  • Differentiell kryptoanalys
  • Stöld
  • Stickning
  • Upppressning
  • Upppressning
Övning: Gör några självstudier om kryptoanalys eller hitta en rolig kurs på nätet.

Programmeringsexempel

Hej, vi kommer inte att visa hur du rullar ditt eget krypto. Vi ska titta på några riktigt spännande bibliotek.

Överför du data över ett IP-nätverk?
Använd TLS.
Läs vidare om du vill använda några roliga kryptobibliotek.

JavaScript-exempel

Referens: Node crypto.

Python Exempel

Referens: Python kryptografiska bibliotek -Python hashlib -Python secrets

Java Exempel

Similar Posts

Lämna ett svar

Din e-postadress kommer inte publiceras.