- Enhetens mål
- Bakgrund
- Definitioner
- Tidslinjer
- Slag av chiffer
- Secret Key Cryptography
- Caesar Cipher
- Monoalfabetisk substitution
- Homofonisk substitution
- Simple Vigenère
- Autokey Vigenère
- Modern Autokey Ciphers
- One Time Pad
- Playfair
- Four-square
- Simple Block Transposition
- Columnnar Transposition
- Rail Fence
- Kombinera substitution och transposition
- Bifid
- Trifid
- Enigma
- Moderna kryptografiska metoder
- DES
- IDEA
- RC4
- RC6
- Blowfish
- Twofish
- AES
- Nyckelutbyte
- Public Key Cryptography
- RSA-kryptosystem
- Kryptografisk hashning
- Message Authentication Codes
- Digitala signaturer
- RSA för digitala signaturer
- DSA
- Krypteringsanalys
- Programmeringsexempel
- JavaScript-exempel
- Python Exempel
- Java Exempel
Enhetens mål
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.
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.
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.
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.
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.
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)$.
THEN ATTACK FROM THE EAST
⇒ TH EN AT XT AC KF RO MT HE XE AS TX
⇒ UT HW GO FO DB TV YK ZK NH NA DX OF
⇒ UTHWGOFODBTVYKZKNHNADXOF
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
THEN ATTACK FROM THE EAST
⇒ TH EN AT TA CK FR OM TH EE AS TX
⇒ NI 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)$.
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$.
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
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